@feedmepos/mf-connect 0.1.98-beta.86 → 0.1.98-beta.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +62 -5
  2. package/dist/{App-C3brXgJH.js → App-DZzCW6yw.js} +586 -569
  3. package/dist/{AuditLogs-CknggPMD.js → AuditLogs-C5s1oYtj.js} +12 -12
  4. package/dist/{Bin-BOE-Liwr.js → Bin-B1e-qVtO.js} +8 -8
  5. package/dist/{Broadcast-BStqQOUT.js → Broadcast-CwO5ut-E.js} +12 -12
  6. package/dist/{CampaignAnalytic-Dga32CpH.js → CampaignAnalytic-B1KXy3dl.js} +7 -7
  7. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-CldyOaCt.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-DS8RAeUt.js} +7 -7
  8. package/dist/{Card-CQxp73o4.js → Card-BK-p9FW9.js} +22 -22
  9. package/dist/{Collections-BRms0YoR.js → Collections-CTF-r_mV.js} +8 -8
  10. package/dist/{Credit-DW7Vq-01.js → Credit-DR2AvPrI.js} +12 -12
  11. package/dist/{DateRangeChip.vue_vue_type_script_setup_true_lang-BXK40fTr.js → DateRangeChip.vue_vue_type_script_setup_true_lang-CixW7_65.js} +1 -1
  12. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-Bv2r2gFI.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-D53ghi_e.js} +34 -35
  13. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-TBjXJglM.js → EffectSheet.vue_vue_type_style_index_0_lang-BNCvFw9v.js} +6 -6
  14. package/dist/{Experience-C_H8mmJJ.js → Experience-BzPvYJ0N.js} +13 -13
  15. package/dist/{FileSaver.min-C5N6-O4l.js → FileSaver.min-BBi03O9S.js} +1 -1
  16. package/dist/{Game-LgNoMtbs.js → Game-DNdM6BpR.js} +13 -13
  17. package/dist/{GiftCardSetup-DmL416w3.js → GiftCardSetup-yVVt1hCK.js} +10 -10
  18. package/dist/{GoalPickerPanel.vue_vue_type_script_setup_true_lang-DqDerUNT.js → GoalPickerPanel.vue_vue_type_script_setup_true_lang-C_REykTp.js} +7 -7
  19. package/dist/{Goals-D-maM_jj.js → Goals-RyNCRCoT.js} +4 -4
  20. package/dist/{Grab-DKbgjw7e.js → Grab-COgtKEHg.js} +9 -9
  21. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-BZ3UDnkx.js → ImageInput.vue_vue_type_script_setup_true_lang-DueG1yQj.js} +1 -1
  22. package/dist/{Index-_cZDq1HS.js → Index-CW5ib46F.js} +10 -10
  23. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-Chm-x4fo.js → LocationPicker.vue_vue_type_script_setup_true_lang-Dbk0uqyl.js} +1 -1
  24. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-Ez1QV7ON.js → LottieAnimation.vue_vue_type_script_setup_true_lang-s19mfQze.js} +1 -1
  25. package/dist/{LoyaltyDashboard-D1B3MjhC.js → LoyaltyDashboard-CJW9sSpM.js} +23 -24
  26. package/dist/MainLayout-DJrtcFYj.js +4 -0
  27. package/dist/{MainLayout.vue_vue_type_script_setup_true_lang-Bf-Kvl5W.js → MainLayout.vue_vue_type_script_setup_true_lang-fXA-ixLQ.js} +5 -4
  28. package/dist/{Marketing-C4apg5nO.js → Marketing-DJD3MCP0.js} +4 -4
  29. package/dist/{MarketingMaterialEdit-Dcjzvwfv.js → MarketingMaterialEdit-NlZLrI0D.js} +6 -6
  30. package/dist/{Member-B2W3wm1r.js → Member-B9_6dgmX.js} +7 -7
  31. package/dist/{MemberDetailSheet.vue_vue_type_script_setup_true_lang-l3edYke6.js → MemberDetailSheet.vue_vue_type_script_setup_true_lang-B6PrfIdK.js} +23 -23
  32. package/dist/{MemberImportHistory-C3i6ekKS.js → MemberImportHistory-daeSSL3G.js} +7 -7
  33. package/dist/{MemberList-CsIsMafE.js → MemberList-DpMvv6MH.js} +14 -14
  34. package/dist/{MemberTransactions-Cdndq5ic.js → MemberTransactions-CekjmOnU.js} +1 -1
  35. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-BtVvv1xd.js → MessageInput.vue_vue_type_script_setup_true_lang-Cgb0WN3L.js} +10 -10
  36. package/dist/{MetricInfoTooltip.vue_vue_type_script_setup_true_lang-DwXsAI7F.js → MetricInfoTooltip.vue_vue_type_script_setup_true_lang-DKJH_z31.js} +1 -1
  37. package/dist/{Mission-Fa1VYYZa.js → Mission-B3YYFaqK.js} +14 -14
  38. package/dist/{Overview-DSmO8LtX.js → Overview-B3VtDXAN.js} +4 -4
  39. package/dist/{Overview-oxeTbsQ8.js → Overview-DcLRK3qr.js} +20 -20
  40. package/dist/{Point-CWpQn9W_.js → Point-rE75hllY.js} +14 -14
  41. package/dist/{Promotion-CoYdDRod.js → Promotion-CldXbf59.js} +14 -14
  42. package/dist/{Queue-Bij3hgY2.js → Queue-Im8WyRKY.js} +12 -12
  43. package/dist/{Record-Be2TI_X_.js → Record-DmP7Q885.js} +9 -9
  44. package/dist/{Review-C-QnIayC.js → Review-DDaoANvS.js} +2 -2
  45. package/dist/{ReviewFacebookCallback-CPyXfHvB.js → ReviewFacebookCallback-6fQq9t2y.js} +5 -5
  46. package/dist/{ReviewGoogleCallback-BPNB0btT.js → ReviewGoogleCallback-DDmUWLd9.js} +5 -5
  47. package/dist/{Reward-RyaVdYyZ.js → Reward-BzL-toJQ.js} +16 -16
  48. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-C2ebKu-S.js → RewardGroup.vue_vue_type_script_setup_true_lang-CrQvlB_E.js} +13 -13
  49. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-BZ_wN3Gj.js → RuleGroup.vue_vue_type_script_setup_true_lang-Dk8kqDSk.js} +14 -14
  50. package/dist/{Segment-CE7Ca2Zo.js → Segment-BweG5YWo.js} +25 -25
  51. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-vODQiSna.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-BfFtD5TS.js} +14 -14
  52. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-CgI_qWVw.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-BsgQ1kqK.js} +4 -4
  53. package/dist/{Setting-BC6ir0DR.js → Setting-MW6B10tv.js} +14 -14
  54. package/dist/{SettingAdvertisements-DLmxEwdG.js → SettingAdvertisements-DP-Wm3vC.js} +12 -12
  55. package/dist/{Settings-CF78Ug2K.js → Settings-CczrlaKr.js} +5 -5
  56. package/dist/{Store-CZTZTO1x.js → Store-C9pYfjIe.js} +28 -29
  57. package/dist/{StoreRewards-BdtlvNcm.js → StoreRewards-DecpygTj.js} +15 -15
  58. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-DSKYWLE_.js → StoreTransactions.vue_vue_type_script_setup_true_lang-Cw63xJWj.js} +24 -24
  59. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-DsQiBOV4.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-B_t4xibZ.js} +2 -2
  60. package/dist/{Tier-5eUYHhoX.js → Tier-D7dHj_zA.js} +26 -26
  61. package/dist/{Title-ibn2JnRB.js → Title-DqEvTcqS.js} +22 -22
  62. package/dist/{Transaction-BZzL13MU.js → Transaction-Z4qjSyBB.js} +2 -2
  63. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-DUv9nFqV.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-D9X2-IIl.js} +6 -6
  64. package/dist/{Voucher-B6qYDcnp.js → Voucher-BY8YGlpM.js} +18 -18
  65. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-CI7NwvnH.js → VoucherEditor.vue_vue_type_script_setup_true_lang-3j_0rbsk.js} +12 -12
  66. package/dist/{WhatsappAccount-CodbP5kY.js → WhatsappAccount-SPlDi9BN.js} +5 -5
  67. package/dist/{WhatsappAccountStatusLabel.vue_vue_type_script_setup_true_lang-BAgSc0i4.js → WhatsappAccountStatusLabel.vue_vue_type_script_setup_true_lang-DYXAJ35J.js} +1 -1
  68. package/dist/{WhatsappBot-BhrP6JnO.js → WhatsappBot-Oo1KHYLi.js} +5 -5
  69. package/dist/WhatsappBotSettings-DL1f_qXt.js +387 -0
  70. package/dist/{WhatsappBotTickets-DJnC4c2j.js → WhatsappBotTickets-CerGACm5.js} +3 -3
  71. package/dist/WhatsappLayout-B2DrnLNS.js +21 -0
  72. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-C2nesHNf.js → ZodTextField.vue_vue_type_script_setup_true_lang-0cvPcwm5.js} +2 -2
  73. package/dist/{app-C5bfcrJd.js → app-bGZlAIpq.js} +505 -495
  74. package/dist/app.js +1 -1
  75. package/dist/{base.export-0man_ZSH.js → base.export-COcyNfbe.js} +2 -2
  76. package/dist/{business-BW09R8w1.js → business-DTPgRJRn.js} +5 -5
  77. package/dist/{campaign-gSM8Uzyl.js → campaign-Cg6Z_tME.js} +2 -2
  78. package/dist/{campaign-Dxbvq3Zl.js → campaign-cm9TQ4dw.js} +8 -8
  79. package/dist/{campaign.fn-CzNJtky2.js → campaign.fn-CS5nJBxQ.js} +31 -31
  80. package/dist/{collection.fn-BVUdafur.js → collection.fn-BYzmqREp.js} +2 -2
  81. package/dist/{currency-CcWkcszY.js → currency-Dtmbe1s9.js} +1 -1
  82. package/dist/{duplicateCampaign-DDfAc-AY.js → duplicateCampaign-DFarTXOQ.js} +2 -2
  83. package/dist/{effect-Dn7anzDq.js → effect-DAGCCFgZ.js} +1 -1
  84. package/dist/{email-addresses-BRRFCqW3.js → email-addresses-Dw4rkWem.js} +2 -2
  85. package/dist/feature-flag-3dM_IVQU.js +50 -0
  86. package/dist/{helper-DPI5b1e1.js → helper-C-LQhPI2.js} +1 -1
  87. package/dist/{index-xLDLoo67.js → index-8c7H1u7j.js} +1 -1
  88. package/dist/{index-BsSqDkI8.js → index-9V_mKS4w.js} +2 -2
  89. package/dist/{index-Bi4203Wb.js → index-B1kMvJbU.js} +1 -1
  90. package/dist/{index-BLQbc3Rv.js → index-B3IhN22s.js} +1 -1
  91. package/dist/{index-BBLmqV8g.js → index-B3T_0jO2.js} +3 -3
  92. package/dist/{index-CeDuysyp.js → index-BagVZkdk.js} +2 -2
  93. package/dist/{index-DPS6iW7Q.js → index-BeW-BxcE.js} +1 -1
  94. package/dist/{index-D8rPhlZa.js → index-BoDbRee_.js} +1 -1
  95. package/dist/{index-ButxHAMi.js → index-C6iTrQ-p.js} +7 -7
  96. package/dist/{index-DtZ450Y-.js → index-CJMFN-JV.js} +3 -3
  97. package/dist/{index-KNE2wEbP.js → index-CMSKFejw.js} +2 -2
  98. package/dist/{index-ZLyACIvN.js → index-CpqSrwMX.js} +2 -2
  99. package/dist/{index-BQ-9m3Ro.js → index-DGp5iEyx.js} +2 -2
  100. package/dist/{index-Dv9W26wg.js → index-DGpe4auo.js} +1 -1
  101. package/dist/{index-U6kp2_A3.js → index-DKm7rszt.js} +1 -1
  102. package/dist/{index-sVyIf_p-.js → index-DTDGCVKV.js} +4 -4
  103. package/dist/{index-D9SBKZvv.js → index-DXR3e2yE.js} +8 -8
  104. package/dist/{index-CoFJoIox.js → index-DzelXsaZ.js} +4 -4
  105. package/dist/{index-_EvVNmhF.js → index-lSJu-_m2.js} +7746 -5975
  106. package/dist/{index-LSYjttVr.js → index-xtTYwD-W.js} +2 -2
  107. package/dist/{index.esm2017-DQJ6E2gu.js → index.esm2017-Bm5C6Wxi.js} +1 -1
  108. package/dist/{loading-DOyd2D4O.js → loading-DoiqPnnv.js} +1 -1
  109. package/dist/{lodash-BLqC3Cwx.js → lodash-CrTM0DQe.js} +1 -1
  110. package/dist/{member-import-x7Vw0b3w.js → member-import-_VaTYOMn.js} +1 -1
  111. package/dist/{membership-CE9vEP2d.js → membership-Dm8t6-K5.js} +2 -2
  112. package/dist/{money-CX-ZAEDu.js → money-D0kv1vnT.js} +1 -1
  113. package/dist/{number-CSungdQc.js → number-BymDKXn2.js} +1 -1
  114. package/dist/{objectid-DwEAf7Cc.js → objectid-CC_whd1t.js} +6 -6
  115. package/dist/{onboarding-BAJgDH9y.js → onboarding-P6c1Ebh4.js} +3 -3
  116. package/dist/{onboardingSetup-GvIYNiAE.js → onboardingSetup-Ca4782qf.js} +2 -2
  117. package/dist/{plugins-B1AphVoU.js → plugins-BN9qJUUc.js} +3 -3
  118. package/dist/{reward-D2zC58M2.js → reward-dfKI7Nq1.js} +1 -1
  119. package/dist/{rule-CxoPKAlI.js → rule-Cu-_boGe.js} +9 -9
  120. package/dist/{template-KRS1NbWX.js → template-D2qwGN2m.js} +6 -6
  121. package/dist/{timezone-CW8sKc69.js → timezone-DjMsHrhm.js} +1 -1
  122. package/dist/{transaction.fn-Djbx8lHM.js → transaction.fn-Bj5yz8tS.js} +2 -2
  123. package/dist/{trigger-RkjkEHrL.js → trigger-CFjJj6Ri.js} +5 -5
  124. package/dist/{useMarketingMaterialActions-BUnl-bFY.js → useMarketingMaterialActions-Dx8ZTmHW.js} +3 -3
  125. package/dist/{usePagination-vdRzCfJw.js → usePagination-CN2auZK8.js} +1 -1
  126. package/dist/{user-CamDVkKA.js → user-CL05OSdb.js} +1 -1
  127. package/dist/{vue-i18n-DwgfDwGn.js → vue-i18n-CJMFzslC.js} +339 -339
  128. package/dist/{xlsx-DkuYe2Jz.js → xlsx-BoSbkiXt.js} +440 -440
  129. package/dist/{zod-BDeUQtCa.js → zod-6X3ups5P.js} +1 -1
  130. package/package.json +1 -1
  131. package/dist/MainLayout-C115sjz6.js +0 -4
  132. package/dist/WhatsappBotSettings-CjDKw25J.js +0 -394
  133. package/dist/WhatsappLayout-BgW1ASQE.js +0 -21
  134. package/dist/feature-flag-D2MJ8eLY.js +0 -18
  135. package/dist/index-BVdImOs0.js +0 -1775
package/README.md CHANGED
@@ -22,11 +22,68 @@ pnpm build
22
22
 
23
23
  ### Feature Flags
24
24
 
25
- The WhatsApp Bot area uses the `crm_whatsapp_bot` flag from
26
- `@feedmepos/core`'s `FeatureFlag` configuration. It is disabled when the flag is
27
- missing or false. Enable the flag for the desired country, user, or business to
28
- show the sidebar entry and allow access to `/whatsapp` and its subpages.
29
- Disabled access redirects to the analytics page before mounting WhatsApp views.
25
+ The WhatsApp Bot area reads `crm_whatsapp_bot` from Flagsmith through
26
+ `GET /portal/businesses/:businessId/feature-flags` on campaign-service. The exact
27
+ business `_id` is the Flagsmith identity identifier. The backend checks the
28
+ identity's **Enabled** state, including identity and segment overrides; a remote
29
+ config value of `true` is not required.
30
+
31
+ This reuses the backend's existing `FeatureFlagModule` and
32
+ `FeatureFlagService.getIdentityFlags(businessId)`, also used by credit OTP
33
+ evaluation. The SDK configuration and initialization are shared with that existing
34
+ integration.
35
+
36
+ Connect fetches flags on startup, business/country/user changes, and every 60
37
+ seconds after each completed request. The sidebar stays hidden and WhatsApp views
38
+ stay unmounted until enabled. Direct links wait for the initial check; disabled
39
+ or failed checks redirect to analytics. Failed checks are retried automatically.
40
+
41
+ #### Local setup
42
+
43
+ Configure these in the backend's local environment, then restart campaign-service:
44
+
45
+ ```dotenv
46
+ FLAGSMITH_URL=https://flagsmith.feedme.farm/api/v1/
47
+ FLAGSMITH_ENVIRONMENT_KEY=<Development environment SDK key>
48
+ ```
49
+
50
+ Use an environment SDK key, not an organisation admin token. The key stays on the
51
+ backend. Replace the obsolete singular hostname `flag.feedme.farm` if present.
52
+ The backend requires network access to Flagsmith (normally Twingate).
53
+ As with the existing Flagsmith integration, a missing SDK key prevents the service
54
+ from starting.
55
+
56
+ Point Connect's local `BACKEND_SERVICE_URL` at `http://localhost:3000/portal/`
57
+ (or your campaign-service port), then start/restart the Vite dev server. Localhost
58
+ uses the same flag checks as deployed environments.
59
+
60
+ #### Enable selected businesses
61
+
62
+ 1. In <https://flagsmith.feedme.farm>, open organisation **Feedme**, project
63
+ **MAIN**, and **Development** for local testing.
64
+ 2. Create `crm_whatsapp_bot` if missing and leave the environment default disabled.
65
+ 3. Open Connect with the desired business selected. The first flag evaluation
66
+ registers that business ID as a Flagsmith identity.
67
+ 4. In **Identities**, find that exact business `_id` and enable the
68
+ `crm_whatsapp_bot` identity override. Other businesses remain disabled unless
69
+ an identity or segment override enables them.
70
+ 5. Wait up to 60 seconds after the last check, or reload Connect, then open
71
+ `/whatsapp`. To revoke access, disable the override.
72
+
73
+ Configure **Production** separately and deploy the backend with that environment's
74
+ SDK key. This flag controls page visibility; existing WhatsApp API permissions
75
+ continue to apply. The `fm-flagsmith` skill can inspect configuration and overrides;
76
+ its GET-only helper cannot create or change them.
77
+
78
+ #### Verify locally
79
+
80
+ With Connect signed in, inspect the browser's Network tab for
81
+ `GET http://localhost:3000/portal/businesses/<businessId>/feature-flags`.
82
+ Its response data should contain `crm_whatsapp_bot: true` for an enabled identity
83
+ and `false` for other businesses. HTTP 503 indicates a failed Flagsmith evaluation
84
+ (check the SDK key, URL, and network access); 403 indicates missing business settings
85
+ permission. A 404 usually means campaign-service needs restarting or Connect is
86
+ pointing at the wrong backend.
30
87
 
31
88
  ### Formatting is with prettier, set default formatter to Prettier
32
89
  ```json