@feedmepos/mf-connect 0.1.116-dev → 0.1.117-dev

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 (134) hide show
  1. package/README.md +42 -44
  2. package/dist/{App-DWDgsBqW.js → App-BpcsgH7K.js} +380 -397
  3. package/dist/{AuditLogs-BqEtvKFs.js → AuditLogs-BNnUiVnD.js} +12 -12
  4. package/dist/{Bin-Cz6fmewG.js → Bin-Cm0wjQeR.js} +8 -8
  5. package/dist/{Broadcast-CQ0pfKpx.js → Broadcast-BoJaHqnO.js} +12 -12
  6. package/dist/{CampaignAnalytic-CiRCB3kh.js → CampaignAnalytic-Eg4xZW0B.js} +7 -7
  7. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-Bp7UeQWJ.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-BXylK6Ze.js} +8 -8
  8. package/dist/{Card-Kw2PFL2m.js → Card-BfkMcFaG.js} +22 -22
  9. package/dist/{Collections-D8Vx_EEH.js → Collections-RXmxQbII.js} +8 -8
  10. package/dist/{Credit-B1jsQ5zg.js → Credit-CsRPM1jv.js} +12 -12
  11. package/dist/{DateRangeChip.vue_vue_type_script_setup_true_lang-B6Fpf8zy.js → DateRangeChip.vue_vue_type_script_setup_true_lang-D2tvK7pw.js} +1 -1
  12. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-BW1RntIP.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-BgPeHurN.js} +35 -35
  13. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-Cdpr9Ku4.js → EffectSheet.vue_vue_type_style_index_0_lang-CUx8UIIq.js} +6 -6
  14. package/dist/{Experience-B0JIA3sL.js → Experience-BC8Pj-v9.js} +13 -13
  15. package/dist/{FileSaver.min-M-9kTN8q.js → FileSaver.min-DzmoQFA0.js} +1 -1
  16. package/dist/{Game-CNJyqnK3.js → Game-DJXNHFBs.js} +13 -13
  17. package/dist/{GiftCardSetup-DSQIC7fD.js → GiftCardSetup-_0n8lU-t.js} +10 -10
  18. package/dist/{GoalPickerPanel.vue_vue_type_script_setup_true_lang-ABiLOF1j.js → GoalPickerPanel.vue_vue_type_script_setup_true_lang-C-AiJdui.js} +7 -7
  19. package/dist/{Goals-DBPzGIRK.js → Goals-DSZwKpds.js} +4 -4
  20. package/dist/{Grab-CGWinKBS.js → Grab-DDc7e-AC.js} +9 -9
  21. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-B2edB52s.js → ImageInput.vue_vue_type_script_setup_true_lang-BZb-H4fM.js} +1 -1
  22. package/dist/{Index-CiWyZXnK.js → Index-Cbi0bquE.js} +10 -10
  23. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-DnP03_b7.js → LocationPicker.vue_vue_type_script_setup_true_lang-GLhMtvzi.js} +1 -1
  24. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-DM17LaNE.js → LottieAnimation.vue_vue_type_script_setup_true_lang-Bt9CO_QR.js} +1 -1
  25. package/dist/{LoyaltyDashboard-C4ZlK9Hv.js → LoyaltyDashboard-fK90c27A.js} +15 -15
  26. package/dist/{MainLayout-D22Q2_jN.js → MainLayout-Bf-l9yL4.js} +1 -1
  27. package/dist/{MainLayout.vue_vue_type_script_setup_true_lang-CJncINki.js → MainLayout.vue_vue_type_script_setup_true_lang-COR6YYYI.js} +3 -3
  28. package/dist/{Marketing-CmVnvEN6.js → Marketing-B7cZGsO-.js} +4 -4
  29. package/dist/{MarketingMaterialEdit-CQ55zG-W.js → MarketingMaterialEdit-5IcV2ct6.js} +6 -6
  30. package/dist/{Member-B-l5P9jk.js → Member-BGTrRVdq.js} +7 -7
  31. package/dist/{MemberDetailSheet.vue_vue_type_script_setup_true_lang-C_ZjHH4I.js → MemberDetailSheet.vue_vue_type_script_setup_true_lang-DJr2hV2W.js} +23 -23
  32. package/dist/{MemberImportHistory-BJcu-ahG.js → MemberImportHistory--FxkTJmu.js} +7 -7
  33. package/dist/{MemberList-DVsWNWIc.js → MemberList-EjY5dgwt.js} +14 -14
  34. package/dist/{MemberTransactions-C2VPySEO.js → MemberTransactions-Oia7LIFK.js} +1 -1
  35. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-BXqrn9tg.js → MessageInput.vue_vue_type_script_setup_true_lang-CLOQZCYy.js} +10 -10
  36. package/dist/{MetricInfoTooltip.vue_vue_type_script_setup_true_lang-BouFp66T.js → MetricInfoTooltip.vue_vue_type_script_setup_true_lang-Ev3bB8cg.js} +1 -1
  37. package/dist/{Mission-DWO-IF0f.js → Mission-BFHYb4aT.js} +14 -14
  38. package/dist/{Overview-DPcWm2S0.js → Overview-BVNyQxFL.js} +20 -20
  39. package/dist/{Overview-Dbp4Sv-H.js → Overview-d5U37aot.js} +4 -4
  40. package/dist/{Point-PnWrzVOY.js → Point-CXkqH02Z.js} +14 -14
  41. package/dist/{Promotion-Bwpi60dN.js → Promotion-DdxNvlOO.js} +14 -14
  42. package/dist/{Queue-BvEcKyVJ.js → Queue-C96oNKyP.js} +12 -12
  43. package/dist/{Record-DzNvU2fM.js → Record-Bj2e2Y4i.js} +9 -9
  44. package/dist/{Review-HDYwnMd6.js → Review-CJK5S1oI.js} +2 -2
  45. package/dist/{ReviewFacebookCallback-rAlgcTQ_.js → ReviewFacebookCallback-ChG7TRy5.js} +5 -5
  46. package/dist/{ReviewGoogleCallback-6V9JNKsl.js → ReviewGoogleCallback-Dmk4VyGA.js} +5 -5
  47. package/dist/{Reward-DI6IyG-d.js → Reward-Dh2YI0Xb.js} +16 -16
  48. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-DFAIPMe7.js → RewardGroup.vue_vue_type_script_setup_true_lang-U47m3AAn.js} +13 -13
  49. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-CDoba0oG.js → RuleGroup.vue_vue_type_script_setup_true_lang-2L6ZGMW7.js} +14 -14
  50. package/dist/{Segment-DrV6pQyx.js → Segment-FYvtCkqH.js} +25 -25
  51. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-CXHt_ZeT.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-DPZZz2e0.js} +14 -14
  52. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-XRXkLy6j.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-D8wBgLlS.js} +4 -4
  53. package/dist/{Setting-aLQCUCP9.js → Setting-CUAWjCqa.js} +14 -14
  54. package/dist/{SettingAdvertisements-BtqKt4Ca.js → SettingAdvertisements-COIQwUD6.js} +12 -12
  55. package/dist/{Settings-BkYtKb4l.js → Settings-D2gFPvmW.js} +5 -5
  56. package/dist/{Store-HZs9GG03.js → Store-BAXwiyvx.js} +26 -26
  57. package/dist/{StoreRewards-BSTXL4FR.js → StoreRewards-2mUavtUg.js} +15 -15
  58. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-D9nykzc3.js → StoreTransactions.vue_vue_type_script_setup_true_lang-5g3yIL1a.js} +24 -24
  59. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-DBnHk6jn.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-DHi4rdT1.js} +2 -2
  60. package/dist/{Tier-Ka0rbjC_.js → Tier-BmAOzRHL.js} +26 -26
  61. package/dist/{Title-7jvrf34J.js → Title-DMxiUg30.js} +22 -22
  62. package/dist/{Transaction-D-M3udf5.js → Transaction-CF6hXEpN.js} +2 -2
  63. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-CrlpuElX.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-BON_t0dL.js} +6 -6
  64. package/dist/{Voucher-BZCLPyDk.js → Voucher-DrtITxq-.js} +18 -18
  65. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-C_MOMFkX.js → VoucherEditor.vue_vue_type_script_setup_true_lang-1DZOzJKx.js} +12 -12
  66. package/dist/{WhatsappAccount-BG0dIroG.js → WhatsappAccount-Bb0Y7ikk.js} +6 -6
  67. package/dist/{WhatsappAccountStatusLabel.vue_vue_type_script_setup_true_lang-Co05OXon.js → WhatsappAccountStatusLabel.vue_vue_type_script_setup_true_lang-CPlyzkp4.js} +1 -1
  68. package/dist/{WhatsappBot-O5h5UKXz.js → WhatsappBot-DNvvaPey.js} +6 -6
  69. package/dist/{WhatsappBotLogs-BOPTuu6o.js → WhatsappBotLogs-C8M-1pvv.js} +6 -6
  70. package/dist/{WhatsappBotSettings-BSiIvpGO.js → WhatsappBotSettings-D6egqUyU.js} +4 -4
  71. package/dist/WhatsappLayout-DeQTPuF6.js +21 -0
  72. package/dist/{WhatsappNotificationGroupDialog.vue_vue_type_script_setup_true_lang-DJdi7dV6.js → WhatsappNotificationGroupDialog.vue_vue_type_script_setup_true_lang-DI0pcHcE.js} +3 -3
  73. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-Do4GTTKx.js → ZodTextField.vue_vue_type_script_setup_true_lang-CKZscSjU.js} +2 -2
  74. package/dist/{app-CEe3kSZM.js → app-BjdLqYQq.js} +69 -69
  75. package/dist/app.js +1 -1
  76. package/dist/{base.export-BjSdr85q.js → base.export-B68z5BF6.js} +2 -2
  77. package/dist/{business-CJjiItSo.js → business-D9fgkHxb.js} +1 -1
  78. package/dist/{campaign-D4MWLs1D.js → campaign-Dw_ujovr.js} +8 -8
  79. package/dist/{campaign-DEXq52fE.js → campaign-eMaPX8r6.js} +2 -2
  80. package/dist/{campaign.fn-DiadKjES.js → campaign.fn-DFjGNvmN.js} +20 -20
  81. package/dist/{collection.fn-CfqIdnSS.js → collection.fn-CCOWtB-c.js} +2 -2
  82. package/dist/{currency-CPB6E_s-.js → currency-CTLKReFC.js} +1 -1
  83. package/dist/{duplicateCampaign-BzWvsZwc.js → duplicateCampaign-BcpBfUGL.js} +2 -2
  84. package/dist/{effect-DFodA5mh.js → effect-CTI1ZH57.js} +1 -1
  85. package/dist/{email-addresses-C0CwgNs_.js → email-addresses-B74e3bnB.js} +2 -2
  86. package/dist/{feature-flag-Bap2oi_S.js → feature-flag-DVdEaChJ.js} +156 -140
  87. package/dist/{helper-DKKsSb2o.js → helper-as9K-piK.js} +1 -1
  88. package/dist/{index-CJGb1iJi.js → index-3LjKJhQa.js} +1 -1
  89. package/dist/{index-DDmpyI6z.js → index-8mBfDn3M.js} +7 -7
  90. package/dist/{index-CFZMwKR6.js → index-B0h0iYWP.js} +2 -2
  91. package/dist/{index-BS6725ZB.js → index-BEKMTiFb.js} +3 -3
  92. package/dist/{index-CXqPYmyv.js → index-BW7FoVEA.js} +1 -1
  93. package/dist/{index-BWsGYTzB.js → index-B_wRpO02.js} +2 -2
  94. package/dist/{index-CEFEuMOF.js → index-Ba719MYq.js} +1 -1
  95. package/dist/{index-DxmlvoHV.js → index-BbVbqe4Y.js} +2 -2
  96. package/dist/{index-C_4eW8Sr.js → index-BhTrG89b.js} +4 -4
  97. package/dist/{index-D5veZ8LP.js → index-C5V6u2Qd.js} +2 -2
  98. package/dist/{index-DRnUcSVN.js → index-CHU3UePP.js} +1 -1
  99. package/dist/{index-CfqmNZUH.js → index-CQxkDpX0.js} +4 -4
  100. package/dist/{index-RUdMURTx.js → index-CWLOcQ6j.js} +8 -8
  101. package/dist/{index-CtwPthW5.js → index-Ckz6u3ac.js} +2 -2
  102. package/dist/{index-BJCirs9i.js → index-Czg-2Ni0.js} +3 -3
  103. package/dist/{index-qAQiQd-s.js → index-DKI8401o.js} +2 -2
  104. package/dist/{index-4LQanFJi.js → index-DcZiikOH.js} +2 -2
  105. package/dist/{index-BdGo-qgB.js → index-QHqcSN2q.js} +1 -1
  106. package/dist/{index-DFV2ydYE.js → index-TAoQpeLQ.js} +1 -1
  107. package/dist/{index-C1C21iKU.js → index-wsCCqwdr.js} +1 -1
  108. package/dist/{index.esm2017-i1myv90H.js → index.esm2017-DL6rTGDW.js} +1 -1
  109. package/dist/{loading-BAFiJnEb.js → loading-x6IScY4K.js} +1 -1
  110. package/dist/{lodash-De2KDgqX.js → lodash-nwnDizYo.js} +1 -1
  111. package/dist/{member-import-BP4RZGbA.js → member-import-C-b01Tyd.js} +1 -1
  112. package/dist/{membership-CQWw-rTa.js → membership-DfarOMtO.js} +2 -2
  113. package/dist/{money-rwjWYzdi.js → money-CFn-jR4W.js} +1 -1
  114. package/dist/{number-DwSvkBpS.js → number-CSlyDL2x.js} +1 -1
  115. package/dist/objectid-zcT6ESET.js +145 -0
  116. package/dist/{onboarding-u7cpl6k3.js → onboarding-DyaFaaF2.js} +3 -3
  117. package/dist/{onboardingSetup-DoxDlcVN.js → onboardingSetup-DQt91O9f.js} +2 -2
  118. package/dist/{plugins-CKaeoHSK.js → plugins-DEHr0UOe.js} +3 -3
  119. package/dist/{reward-BasbGRWt.js → reward-Du_Pv-4p.js} +1 -1
  120. package/dist/{rule-IN41b-qE.js → rule-DfqmQTVK.js} +9 -9
  121. package/dist/{template-3Nu_MAMG.js → template-CcbNF4PF.js} +6 -6
  122. package/dist/{timezone-C68y8HiI.js → timezone-_4tabIaK.js} +1 -1
  123. package/dist/{transaction.fn-Ckxm2gof.js → transaction.fn-C46PHwCV.js} +2 -2
  124. package/dist/{trigger-xA8j3s9B.js → trigger-Dipr6btC.js} +5 -5
  125. package/dist/{useMarketingMaterialActions-ClYoBaFw.js → useMarketingMaterialActions-BAw2ZjeF.js} +4 -4
  126. package/dist/{usePagination-CIRxyVr8.js → usePagination-D6RZ18zS.js} +1 -1
  127. package/dist/{user-PTTQTMyQ.js → user-BCexQj3Q.js} +1 -1
  128. package/dist/{vue-i18n-DYnrLWFT.js → vue-i18n-DXvyTCZf.js} +109 -109
  129. package/dist/{xlsx-l0AsOrP1.js → xlsx-BTxt_Jg6.js} +166 -166
  130. package/dist/{zod-Bm1pKYLC.js → zod-T4wMYjWT.js} +1 -1
  131. package/package.json +1 -1
  132. package/dist/WhatsappLayout-DLVIfkzJ.js +0 -21
  133. package/dist/feature-flag--GbS6Qn_.js +0 -50
  134. package/dist/objectid-DtEPzPd_.js +0 -145
package/README.md CHANGED
@@ -22,70 +22,68 @@ pnpm build
22
22
 
23
23
  ### Feature Flags
24
24
 
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.
25
+ Connect uses `@feedmepos/feature-flag` directly in the frontend. WhatsApp Bot
26
+ shares the business flag loading used by broadcast channels in
27
+ `src/feature-flag.ts` and uses the `connect_whatsapp_bot` flag.
28
+
29
+ | Feature | Flagsmith key |
30
+ | ------------------- | --------------------------------------- |
31
+ | WhatsApp Bot | `connect_whatsapp_bot` |
32
+ | Broadcast App Inbox | `connect_broadcast_app_inbox_countries` |
33
+ | Broadcast Push | `connect_broadcast_push_countries` |
34
+ | Broadcast WhatsApp | `connect_broadcast_whatsapp_countries` |
35
+
36
+ WhatsApp Bot checks only whether `connect_whatsapp_bot` is enabled. Its remote
37
+ config value and the selected country do not affect access; no remote config
38
+ value is required.
39
+
40
+ Broadcast channel flags also check the current business country. Their values are
41
+ comma-separated country codes, such as `MY,SG`; an empty value or `*` allows every
42
+ country. Country codes are case-insensitive.
43
+
44
+ Connect loads flags on startup and when the selected business changes. Country
45
+ changes re-evaluate broadcast channel flags. The WhatsApp sidebar entry stays
46
+ hidden and WhatsApp views stay unmounted while flags load. Direct links show a
47
+ loading screen until the check finishes; disabled or failed checks redirect to
48
+ analytics.
40
49
 
41
50
  #### Local setup
42
51
 
43
- Configure these in the backend's local environment, then restart campaign-service:
52
+ Set the frontend Flagsmith API key in Connect's local environment, then restart
53
+ the Vite dev server:
44
54
 
45
55
  ```dotenv
46
- FLAGSMITH_URL=https://flagsmith.feedme.farm/api/v1/
47
- FLAGSMITH_ENVIRONMENT_KEY=<Development environment SDK key>
56
+ FEATURE_FLAG_API_KEY=<Development environment client key>
48
57
  ```
49
58
 
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
+ This is the same frontend configuration used by broadcast channel flags.
59
60
 
60
61
  #### Enable selected businesses
61
62
 
62
63
  1. In <https://flagsmith.feedme.farm>, open organisation **Feedme**, project
63
64
  **MAIN**, and **Development** for local testing.
64
- 2. Create `crm_whatsapp_bot` if missing and leave the environment default disabled.
65
+ 2. Create or rename the flag to `connect_whatsapp_bot`, disabled by default.
65
66
  3. Open Connect with the desired business selected. The first flag evaluation
66
67
  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.
68
+ 4. In **Identities**, find `business-<businessId>` and enable the
69
+ `connect_whatsapp_bot` override. Identity or segment overrides can enable selected
70
+ businesses; no country-list value is required.
71
+ 5. Reload Connect, then open `/whatsapp`. To revoke access, disable the override
72
+ and reload.
72
73
 
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.
74
+ Configure **Production** separately with its frontend API key. This flag controls
75
+ page visibility; existing WhatsApp API permissions continue to apply.
77
76
 
78
77
  #### Verify locally
79
78
 
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.
79
+ With Connect signed in, inspect the browser's Network tab for the frontend
80
+ Flagsmith request using identity `business-<businessId>`. Verify the WhatsApp Bot
81
+ navigation entry and `/whatsapp` are available only when
82
+ `connect_whatsapp_bot` is enabled. Disabled, missing, or failed flag checks keep the
83
+ entry hidden and redirect direct links to analytics.
87
84
 
88
85
  ### Formatting is with prettier, set default formatter to Prettier
86
+
89
87
  ```json
90
88
  "[typescript]": {
91
89
  "editor.defaultFormatter": "esbenp.prettier-vscode"