abmp-npm 2.0.73 → 2.0.74

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 (82) hide show
  1. package/.claude/worktrees/fix-save-button-disable/.husky/pre-commit +19 -0
  2. package/.claude/worktrees/fix-save-button-disable/.prettierignore +7 -0
  3. package/.claude/worktrees/fix-save-button-disable/.prettierrc.json +16 -0
  4. package/.claude/worktrees/fix-save-button-disable/README.md +1 -0
  5. package/.claude/worktrees/fix-save-button-disable/backend/README-member-contact-flows.md +136 -0
  6. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/daily-pull-execution-check.test.js +124 -0
  7. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/ensure-unique-urls-in-batch.test.js +129 -0
  8. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/login-email-sync.test.js +49 -0
  9. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/transient-retry-and-bulk-lookup.test.js +129 -0
  10. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/url-uniqueness.test.js +194 -0
  11. package/.claude/worktrees/fix-save-button-disable/backend/automations-methods.js +13 -0
  12. package/.claude/worktrees/fix-save-button-disable/backend/cms-data-methods.js +251 -0
  13. package/.claude/worktrees/fix-save-button-disable/backend/consts.js +58 -0
  14. package/.claude/worktrees/fix-save-button-disable/backend/contacts-methods.js +67 -0
  15. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/bulk-process-methods.js +222 -0
  16. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/consts.js +39 -0
  17. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/index.js +5 -0
  18. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/process-member-methods.js +213 -0
  19. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/schedule-methods.js +41 -0
  20. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/sync-to-cms-methods.js +161 -0
  21. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/utils.js +151 -0
  22. package/.claude/worktrees/fix-save-button-disable/backend/data-hooks.js +29 -0
  23. package/.claude/worktrees/fix-save-button-disable/backend/dev-only-methods.js +58 -0
  24. package/.claude/worktrees/fix-save-button-disable/backend/elevated-modules.js +18 -0
  25. package/.claude/worktrees/fix-save-button-disable/backend/forms-methods.js +52 -0
  26. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/httpFunctions.js +86 -0
  27. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/index.js +3 -0
  28. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/interests.js +35 -0
  29. package/.claude/worktrees/fix-save-button-disable/backend/index.js +19 -0
  30. package/.claude/worktrees/fix-save-button-disable/backend/jobs.js +158 -0
  31. package/.claude/worktrees/fix-save-button-disable/backend/login/generate-member-session-token.js +27 -0
  32. package/.claude/worktrees/fix-save-button-disable/backend/login/index.js +8 -0
  33. package/.claude/worktrees/fix-save-button-disable/backend/login/qa-login-methods.js +54 -0
  34. package/.claude/worktrees/fix-save-button-disable/backend/login/sso-methods.js +159 -0
  35. package/.claude/worktrees/fix-save-button-disable/backend/member-contact-orchestration.js +111 -0
  36. package/.claude/worktrees/fix-save-button-disable/backend/members-area-methods.js +88 -0
  37. package/.claude/worktrees/fix-save-button-disable/backend/members-data-methods.js +789 -0
  38. package/.claude/worktrees/fix-save-button-disable/backend/pac-api-methods.js +54 -0
  39. package/.claude/worktrees/fix-save-button-disable/backend/routers/index.js +3 -0
  40. package/.claude/worktrees/fix-save-button-disable/backend/routers/methods.js +191 -0
  41. package/.claude/worktrees/fix-save-button-disable/backend/routers/utils.js +128 -0
  42. package/.claude/worktrees/fix-save-button-disable/backend/search-filters-methods.js +124 -0
  43. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-primary-methods.js +256 -0
  44. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-visibility-methods.js +160 -0
  45. package/.claude/worktrees/fix-save-button-disable/backend/tasks/consts.js +34 -0
  46. package/.claude/worktrees/fix-save-button-disable/backend/tasks/daily-pull-check-methods.js +78 -0
  47. package/.claude/worktrees/fix-save-button-disable/backend/tasks/email-normalize-methods.js +134 -0
  48. package/.claude/worktrees/fix-save-button-disable/backend/tasks/index.js +10 -0
  49. package/.claude/worktrees/fix-save-button-disable/backend/tasks/migration-methods.js +46 -0
  50. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-configs.js +251 -0
  51. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-helpers-methods.js +433 -0
  52. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-process-methods.js +606 -0
  53. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-migration-methods.js +378 -0
  54. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-space-fix-methods.js +174 -0
  55. package/.claude/worktrees/fix-save-button-disable/backend/utils.js +277 -0
  56. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/extract-duplicate-url-groups.js +201 -0
  57. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-ids.js +159 -0
  58. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-urls.js +201 -0
  59. package/.claude/worktrees/fix-save-button-disable/eslint.config.js +120 -0
  60. package/.claude/worktrees/fix-save-button-disable/index.js +5 -0
  61. package/.claude/worktrees/fix-save-button-disable/package-lock.json +12160 -0
  62. package/.claude/worktrees/fix-save-button-disable/package.json +60 -0
  63. package/.claude/worktrees/fix-save-button-disable/pages/ContactUs.js +129 -0
  64. package/.claude/worktrees/fix-save-button-disable/pages/Home.js +779 -0
  65. package/.claude/worktrees/fix-save-button-disable/pages/LearnMore.js +27 -0
  66. package/.claude/worktrees/fix-save-button-disable/pages/LoadingPage.js +29 -0
  67. package/.claude/worktrees/fix-save-button-disable/pages/Profile.js +354 -0
  68. package/.claude/worktrees/fix-save-button-disable/pages/QAPage.js +39 -0
  69. package/.claude/worktrees/fix-save-button-disable/pages/SaveAlerts.js +13 -0
  70. package/.claude/worktrees/fix-save-button-disable/pages/SelectBannerImages.js +46 -0
  71. package/.claude/worktrees/fix-save-button-disable/pages/deleteConfirm.js +19 -0
  72. package/.claude/worktrees/fix-save-button-disable/pages/index.js +12 -0
  73. package/.claude/worktrees/fix-save-button-disable/pages/personalDetails.js +2486 -0
  74. package/.claude/worktrees/fix-save-button-disable/public/Utils/homePage.js +798 -0
  75. package/.claude/worktrees/fix-save-button-disable/public/Utils/personalDetailsUtils.js +25 -0
  76. package/.claude/worktrees/fix-save-button-disable/public/Utils/sharedUtils.js +235 -0
  77. package/.claude/worktrees/fix-save-button-disable/public/consts.js +113 -0
  78. package/.claude/worktrees/fix-save-button-disable/public/index.js +5 -0
  79. package/.claude/worktrees/fix-save-button-disable/public/messages.js +16 -0
  80. package/.claude/worktrees/fix-save-button-disable/public/sso-auth-methods.js +43 -0
  81. package/package.json +1 -1
  82. package/pages/personalDetails.js +8 -3
@@ -0,0 +1,46 @@
1
+ const { taskManager } = require('psdev-task-manager');
2
+
3
+ const { TASKS_NAMES } = require('./consts');
4
+
5
+ //this will be run only once by the developers during the migration
6
+ function scheduleConvertHtmlToRichContent() {
7
+ return taskManager().schedule({
8
+ name: TASKS_NAMES.scheduleTaskForEmptyAboutYouMembers,
9
+ data: {},
10
+ type: 'scheduled',
11
+ });
12
+ }
13
+
14
+ // This function is used to migrate external profile images to Wix-hosted images
15
+ function scheduleExternalProfileImageMigration() {
16
+ return taskManager().schedule({
17
+ name: TASKS_NAMES.scheduleTaskForExternalProfileImages,
18
+ data: {},
19
+ type: 'scheduled',
20
+ });
21
+ }
22
+
23
+ // Schedule URL migration from backup collection
24
+ function scheduleUrlMigration() {
25
+ return taskManager().schedule({
26
+ name: TASKS_NAMES.scheduleMigrateExistingUrls,
27
+ data: {},
28
+ type: 'scheduled',
29
+ });
30
+ }
31
+
32
+ // Schedule URL generation for members without URLs
33
+ function scheduleUrlGeneration() {
34
+ return taskManager().schedule({
35
+ name: TASKS_NAMES.scheduleGenerateMissingUrls,
36
+ data: {},
37
+ type: 'scheduled',
38
+ });
39
+ }
40
+
41
+ module.exports = {
42
+ scheduleConvertHtmlToRichContent,
43
+ scheduleExternalProfileImageMigration,
44
+ scheduleUrlMigration,
45
+ scheduleUrlGeneration,
46
+ };
@@ -0,0 +1,251 @@
1
+ const { MEMBER_ACTIONS } = require('../daily-pull/consts.js');
2
+ const {
3
+ synchronizeSinglePage,
4
+ syncMembersDataPerAction,
5
+ } = require('../daily-pull/sync-to-cms-methods');
6
+
7
+ const {
8
+ scheduleFixPrimaryAddressForMembers,
9
+ fixPrimaryAddressChunk,
10
+ } = require('./address-primary-methods');
11
+ const {
12
+ scheduleSetAddressesToCityState,
13
+ setAddressesToCityStateChunk,
14
+ } = require('./address-visibility-methods');
15
+ const { TASKS_NAMES } = require('./consts');
16
+ const { dailyPullExecutionCheck } = require('./daily-pull-check-methods');
17
+ const {
18
+ scheduleNormalizeMemberEmails,
19
+ normalizeMemberEmailsChunk,
20
+ } = require('./email-normalize-methods');
21
+ const {
22
+ scheduleTaskForEmptyAboutYouMembers,
23
+ convertAboutYouHtmlToRichContent,
24
+ compileFiltersOptions,
25
+ scheduleTaskForExternalProfileImages,
26
+ convertExternalProfilesToWixImages,
27
+ updateSiteMapS3,
28
+ scheduleContactFormEmailMigration,
29
+ migrateContactFormEmails,
30
+ scheduleEmailSync,
31
+ syncMemberLoginEmails,
32
+ scheduleCreateContactsFromMembers,
33
+ createContactsFromMembers,
34
+ } = require('./tasks-process-methods');
35
+ const {
36
+ scheduleMigrateExistingUrls,
37
+ migrateUrlsChunk,
38
+ scheduleGenerateMissingUrls,
39
+ generateUrlsChunk,
40
+ } = require('./url-migration-methods');
41
+ const { scheduleFixUrlsWithSpaces, fixUrlsWithSpacesChunk } = require('./url-space-fix-methods');
42
+
43
+ const getDailyMembersDataSyncChildTasks = () => {
44
+ // we don't want to sync none action as it means this members data hasn't changed and we don't need to sync it
45
+ const MEMBER_ACTIONS_EXCEPT_NONE = Object.values(MEMBER_ACTIONS).filter(
46
+ action => action !== MEMBER_ACTIONS.NONE
47
+ );
48
+ return MEMBER_ACTIONS_EXCEPT_NONE.map(action => ({
49
+ name: TASKS_NAMES.ScheduleMembersDataPerAction,
50
+ data: { action },
51
+ }));
52
+ };
53
+ const TASKS = {
54
+ [TASKS_NAMES.ScheduleDailyMembersDataSync]: {
55
+ name: TASKS_NAMES.ScheduleDailyMembersDataSync,
56
+ scheduleChildrenSequentially: false,
57
+ estimatedDurationSec: 60,
58
+ childTasks: getDailyMembersDataSyncChildTasks(),
59
+ },
60
+ [TASKS_NAMES.ScheduleMembersDataPerAction]: {
61
+ name: TASKS_NAMES.ScheduleMembersDataPerAction,
62
+ getIdentifier: task => task.data,
63
+ process: syncMembersDataPerAction,
64
+ shouldSkipCheck: () => false,
65
+ estimatedDurationSec: 6,
66
+ },
67
+ [TASKS_NAMES.SyncMembers]: {
68
+ name: TASKS_NAMES.SyncMembers,
69
+ getIdentifier: task => task,
70
+ process: synchronizeSinglePage,
71
+ shouldSkipCheck: () => false,
72
+ estimatedDurationSec: 130, //Longer duration to ensure single page will be processed during job tick, for a smoother data updates, to reduce throttling and timeouts issues.
73
+ },
74
+ [TASKS_NAMES.scheduleTaskForEmptyAboutYouMembers]: {
75
+ name: TASKS_NAMES.scheduleTaskForEmptyAboutYouMembers,
76
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
77
+ process: scheduleTaskForEmptyAboutYouMembers,
78
+ shouldSkipCheck: () => false,
79
+ estimatedDurationSec: 40,
80
+ },
81
+ [TASKS_NAMES.convertHtmlToRichContent]: {
82
+ name: TASKS_NAMES.convertHtmlToRichContent,
83
+ getIdentifier: task => task.data.memberIds,
84
+ process: convertAboutYouHtmlToRichContent,
85
+ shouldSkipCheck: () => false,
86
+ estimatedDurationSec: 45,
87
+ },
88
+ [TASKS_NAMES.CompileFiltersOptions]: {
89
+ name: TASKS_NAMES.CompileFiltersOptions,
90
+ getIdentifier: task => task.data.field,
91
+ process: compileFiltersOptions,
92
+ shouldSkipCheck: () => false,
93
+ estimatedDurationSec: 6,
94
+ },
95
+ [TASKS_NAMES.scheduleTaskForExternalProfileImages]: {
96
+ name: TASKS_NAMES.scheduleTaskForExternalProfileImages,
97
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
98
+ process: scheduleTaskForExternalProfileImages,
99
+ shouldSkipCheck: () => false,
100
+ estimatedDurationSec: 60,
101
+ },
102
+ [TASKS_NAMES.convertExternalProfilesToWixImages]: {
103
+ name: TASKS_NAMES.convertExternalProfilesToWixImages,
104
+ getIdentifier: task => task.data.memberIds,
105
+ process: convertExternalProfilesToWixImages,
106
+ shouldSkipCheck: () => false,
107
+ estimatedDurationSec: 55,
108
+ },
109
+ [TASKS_NAMES.updateSiteMapS3]: {
110
+ name: TASKS_NAMES.updateSiteMapS3,
111
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
112
+ process: updateSiteMapS3,
113
+ shouldSkipCheck: () => false,
114
+ estimatedDurationSec: 70,
115
+ },
116
+ [TASKS_NAMES.scheduleContactFormEmailMigration]: {
117
+ name: TASKS_NAMES.scheduleContactFormEmailMigration,
118
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
119
+ process: scheduleContactFormEmailMigration,
120
+ shouldSkipCheck: () => false,
121
+ estimatedDurationSec: 30,
122
+ },
123
+ [TASKS_NAMES.migrateContactFormEmails]: {
124
+ name: TASKS_NAMES.migrateContactFormEmails,
125
+ getIdentifier: task => task.data,
126
+ process: migrateContactFormEmails,
127
+ shouldSkipCheck: () => false,
128
+ estimatedDurationSec: 40,
129
+ },
130
+ [TASKS_NAMES.scheduleEmailSync]: {
131
+ name: TASKS_NAMES.scheduleEmailSync,
132
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
133
+ process: scheduleEmailSync,
134
+ shouldSkipCheck: () => false,
135
+ estimatedDurationSec: 30,
136
+ },
137
+ [TASKS_NAMES.syncMemberLoginEmails]: {
138
+ name: TASKS_NAMES.syncMemberLoginEmails,
139
+ getIdentifier: task => task.data,
140
+ process: syncMemberLoginEmails,
141
+ shouldSkipCheck: () => false,
142
+ estimatedDurationSec: 45,
143
+ },
144
+ [TASKS_NAMES.scheduleMigrateExistingUrls]: {
145
+ name: TASKS_NAMES.scheduleMigrateExistingUrls,
146
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
147
+ process: scheduleMigrateExistingUrls,
148
+ shouldSkipCheck: () => false,
149
+ estimatedDurationSec: 80,
150
+ },
151
+ [TASKS_NAMES.migrateUrlsChunk]: {
152
+ name: TASKS_NAMES.migrateUrlsChunk,
153
+ getIdentifier: task => task.data,
154
+ process: migrateUrlsChunk,
155
+ shouldSkipCheck: () => false,
156
+ estimatedDurationSec: 80,
157
+ },
158
+ [TASKS_NAMES.scheduleGenerateMissingUrls]: {
159
+ name: TASKS_NAMES.scheduleGenerateMissingUrls,
160
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
161
+ process: scheduleGenerateMissingUrls,
162
+ shouldSkipCheck: () => false,
163
+ estimatedDurationSec: 80,
164
+ },
165
+ [TASKS_NAMES.generateUrlsChunk]: {
166
+ name: TASKS_NAMES.generateUrlsChunk,
167
+ getIdentifier: task => task.data,
168
+ process: generateUrlsChunk,
169
+ shouldSkipCheck: () => false,
170
+ estimatedDurationSec: 80,
171
+ },
172
+ [TASKS_NAMES.scheduleCreateContactsFromMembers]: {
173
+ name: TASKS_NAMES.scheduleCreateContactsFromMembers,
174
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
175
+ process: scheduleCreateContactsFromMembers,
176
+ shouldSkipCheck: () => false,
177
+ estimatedDurationSec: 80,
178
+ },
179
+ [TASKS_NAMES.createContactsFromMembers]: {
180
+ name: TASKS_NAMES.createContactsFromMembers,
181
+ getIdentifier: task => task.data,
182
+ process: createContactsFromMembers,
183
+ shouldSkipCheck: () => false,
184
+ estimatedDurationSec: 80,
185
+ },
186
+ [TASKS_NAMES.scheduleFixPrimaryAddressForMembers]: {
187
+ name: TASKS_NAMES.scheduleFixPrimaryAddressForMembers,
188
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
189
+ process: scheduleFixPrimaryAddressForMembers,
190
+ shouldSkipCheck: () => false,
191
+ estimatedDurationSec: 80,
192
+ },
193
+ [TASKS_NAMES.fixPrimaryAddressChunk]: {
194
+ name: TASKS_NAMES.fixPrimaryAddressChunk,
195
+ getIdentifier: task => task.data,
196
+ process: fixPrimaryAddressChunk,
197
+ shouldSkipCheck: () => false,
198
+ estimatedDurationSec: 80,
199
+ },
200
+ [TASKS_NAMES.scheduleFixUrlsWithSpaces]: {
201
+ name: TASKS_NAMES.scheduleFixUrlsWithSpaces,
202
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
203
+ process: scheduleFixUrlsWithSpaces,
204
+ shouldSkipCheck: () => false,
205
+ estimatedDurationSec: 80,
206
+ },
207
+ [TASKS_NAMES.fixUrlsWithSpacesChunk]: {
208
+ name: TASKS_NAMES.fixUrlsWithSpacesChunk,
209
+ getIdentifier: task => task.data,
210
+ process: fixUrlsWithSpacesChunk,
211
+ shouldSkipCheck: () => false,
212
+ estimatedDurationSec: 80,
213
+ },
214
+ [TASKS_NAMES.scheduleSetAddressesToCityState]: {
215
+ name: TASKS_NAMES.scheduleSetAddressesToCityState,
216
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
217
+ process: scheduleSetAddressesToCityState,
218
+ shouldSkipCheck: () => false,
219
+ estimatedDurationSec: 80,
220
+ },
221
+ [TASKS_NAMES.setAddressesToCityStateChunk]: {
222
+ name: TASKS_NAMES.setAddressesToCityStateChunk,
223
+ getIdentifier: task => task.data,
224
+ process: setAddressesToCityStateChunk,
225
+ shouldSkipCheck: () => false,
226
+ estimatedDurationSec: 80,
227
+ },
228
+ [TASKS_NAMES.scheduleNormalizeMemberEmails]: {
229
+ name: TASKS_NAMES.scheduleNormalizeMemberEmails,
230
+ getIdentifier: () => 'SHOULD_NEVER_SKIP',
231
+ process: scheduleNormalizeMemberEmails,
232
+ shouldSkipCheck: () => false,
233
+ estimatedDurationSec: 80,
234
+ },
235
+ [TASKS_NAMES.normalizeMemberEmailsChunk]: {
236
+ name: TASKS_NAMES.normalizeMemberEmailsChunk,
237
+ getIdentifier: task => task.data,
238
+ process: normalizeMemberEmailsChunk,
239
+ shouldSkipCheck: () => false,
240
+ estimatedDurationSec: 80,
241
+ },
242
+ [TASKS_NAMES.dailyPullExecutionCheck]: {
243
+ name: TASKS_NAMES.dailyPullExecutionCheck,
244
+ getIdentifier: task => task.data,
245
+ process: dailyPullExecutionCheck,
246
+ shouldSkipCheck: () => false,
247
+ estimatedDurationSec: 30,
248
+ },
249
+ };
250
+
251
+ module.exports = { TASKS };