abmp-npm 2.0.77 → 2.0.79

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 (101) hide show
  1. package/package.json +8 -1
  2. package/pages/Profile.js +6 -1
  3. package/public/Utils/personalDetailsUtils.js +17 -6
  4. package/.claude/skills/wix-data-query/SKILL.md +0 -167
  5. package/.claude/skills/wix-data-query/references/backup-archive.md +0 -136
  6. package/.claude/skills/wix-data-query/references/members-data-latest.md +0 -125
  7. package/.claude/skills/wix-data-query/references/recipes.md +0 -264
  8. package/.claude/worktrees/fix-save-button-disable/.husky/pre-commit +0 -19
  9. package/.claude/worktrees/fix-save-button-disable/.prettierignore +0 -7
  10. package/.claude/worktrees/fix-save-button-disable/.prettierrc.json +0 -16
  11. package/.claude/worktrees/fix-save-button-disable/README.md +0 -1
  12. package/.claude/worktrees/fix-save-button-disable/backend/README-member-contact-flows.md +0 -136
  13. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/daily-pull-execution-check.test.js +0 -124
  14. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
  15. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/login-email-sync.test.js +0 -49
  16. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
  17. package/.claude/worktrees/fix-save-button-disable/backend/__tests__/url-uniqueness.test.js +0 -194
  18. package/.claude/worktrees/fix-save-button-disable/backend/automations-methods.js +0 -13
  19. package/.claude/worktrees/fix-save-button-disable/backend/cms-data-methods.js +0 -251
  20. package/.claude/worktrees/fix-save-button-disable/backend/consts.js +0 -58
  21. package/.claude/worktrees/fix-save-button-disable/backend/contacts-methods.js +0 -67
  22. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/bulk-process-methods.js +0 -222
  23. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/consts.js +0 -39
  24. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/index.js +0 -5
  25. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/process-member-methods.js +0 -213
  26. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/schedule-methods.js +0 -41
  27. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/sync-to-cms-methods.js +0 -161
  28. package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/utils.js +0 -151
  29. package/.claude/worktrees/fix-save-button-disable/backend/data-hooks.js +0 -29
  30. package/.claude/worktrees/fix-save-button-disable/backend/dev-only-methods.js +0 -58
  31. package/.claude/worktrees/fix-save-button-disable/backend/elevated-modules.js +0 -18
  32. package/.claude/worktrees/fix-save-button-disable/backend/forms-methods.js +0 -52
  33. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/httpFunctions.js +0 -86
  34. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/index.js +0 -3
  35. package/.claude/worktrees/fix-save-button-disable/backend/http-functions/interests.js +0 -35
  36. package/.claude/worktrees/fix-save-button-disable/backend/index.js +0 -19
  37. package/.claude/worktrees/fix-save-button-disable/backend/jobs.js +0 -158
  38. package/.claude/worktrees/fix-save-button-disable/backend/login/generate-member-session-token.js +0 -27
  39. package/.claude/worktrees/fix-save-button-disable/backend/login/index.js +0 -8
  40. package/.claude/worktrees/fix-save-button-disable/backend/login/qa-login-methods.js +0 -54
  41. package/.claude/worktrees/fix-save-button-disable/backend/login/sso-methods.js +0 -159
  42. package/.claude/worktrees/fix-save-button-disable/backend/member-contact-orchestration.js +0 -111
  43. package/.claude/worktrees/fix-save-button-disable/backend/members-area-methods.js +0 -88
  44. package/.claude/worktrees/fix-save-button-disable/backend/members-data-methods.js +0 -789
  45. package/.claude/worktrees/fix-save-button-disable/backend/pac-api-methods.js +0 -54
  46. package/.claude/worktrees/fix-save-button-disable/backend/routers/index.js +0 -3
  47. package/.claude/worktrees/fix-save-button-disable/backend/routers/methods.js +0 -191
  48. package/.claude/worktrees/fix-save-button-disable/backend/routers/utils.js +0 -128
  49. package/.claude/worktrees/fix-save-button-disable/backend/search-filters-methods.js +0 -124
  50. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-primary-methods.js +0 -256
  51. package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-visibility-methods.js +0 -160
  52. package/.claude/worktrees/fix-save-button-disable/backend/tasks/consts.js +0 -34
  53. package/.claude/worktrees/fix-save-button-disable/backend/tasks/daily-pull-check-methods.js +0 -78
  54. package/.claude/worktrees/fix-save-button-disable/backend/tasks/email-normalize-methods.js +0 -134
  55. package/.claude/worktrees/fix-save-button-disable/backend/tasks/index.js +0 -10
  56. package/.claude/worktrees/fix-save-button-disable/backend/tasks/migration-methods.js +0 -46
  57. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-configs.js +0 -251
  58. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-helpers-methods.js +0 -433
  59. package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-process-methods.js +0 -606
  60. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-migration-methods.js +0 -378
  61. package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-space-fix-methods.js +0 -174
  62. package/.claude/worktrees/fix-save-button-disable/backend/utils.js +0 -277
  63. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
  64. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-ids.js +0 -159
  65. package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-urls.js +0 -201
  66. package/.claude/worktrees/fix-save-button-disable/eslint.config.js +0 -120
  67. package/.claude/worktrees/fix-save-button-disable/index.js +0 -5
  68. package/.claude/worktrees/fix-save-button-disable/package-lock.json +0 -12160
  69. package/.claude/worktrees/fix-save-button-disable/package.json +0 -60
  70. package/.claude/worktrees/fix-save-button-disable/pages/ContactUs.js +0 -129
  71. package/.claude/worktrees/fix-save-button-disable/pages/Home.js +0 -779
  72. package/.claude/worktrees/fix-save-button-disable/pages/LearnMore.js +0 -27
  73. package/.claude/worktrees/fix-save-button-disable/pages/LoadingPage.js +0 -29
  74. package/.claude/worktrees/fix-save-button-disable/pages/Profile.js +0 -354
  75. package/.claude/worktrees/fix-save-button-disable/pages/QAPage.js +0 -39
  76. package/.claude/worktrees/fix-save-button-disable/pages/SaveAlerts.js +0 -13
  77. package/.claude/worktrees/fix-save-button-disable/pages/SelectBannerImages.js +0 -46
  78. package/.claude/worktrees/fix-save-button-disable/pages/deleteConfirm.js +0 -19
  79. package/.claude/worktrees/fix-save-button-disable/pages/index.js +0 -12
  80. package/.claude/worktrees/fix-save-button-disable/pages/personalDetails.js +0 -2486
  81. package/.claude/worktrees/fix-save-button-disable/public/Utils/homePage.js +0 -798
  82. package/.claude/worktrees/fix-save-button-disable/public/Utils/personalDetailsUtils.js +0 -25
  83. package/.claude/worktrees/fix-save-button-disable/public/Utils/sharedUtils.js +0 -235
  84. package/.claude/worktrees/fix-save-button-disable/public/consts.js +0 -113
  85. package/.claude/worktrees/fix-save-button-disable/public/index.js +0 -5
  86. package/.claude/worktrees/fix-save-button-disable/public/messages.js +0 -16
  87. package/.claude/worktrees/fix-save-button-disable/public/sso-auth-methods.js +0 -43
  88. package/.husky/pre-commit +0 -19
  89. package/.prettierignore +0 -7
  90. package/.prettierrc.json +0 -16
  91. package/backend/__tests__/daily-pull-execution-check.test.js +0 -124
  92. package/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
  93. package/backend/__tests__/login-email-sync.test.js +0 -49
  94. package/backend/__tests__/map-link.test.js +0 -115
  95. package/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
  96. package/backend/__tests__/url-uniqueness.test.js +0 -194
  97. package/backend/__tests__/url-validation.test.js +0 -69
  98. package/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
  99. package/dev-only-scripts/find-duplicate-ids.js +0 -159
  100. package/dev-only-scripts/find-duplicate-urls.js +0 -201
  101. package/eslint.config.js +0 -120
@@ -1,201 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- const csv = require('csv-parser');
5
-
6
- /**
7
- * Finds duplicate URLs in a CSV file and generates a JSON report
8
- * Usage: node scripts/find-duplicate-urls.js <path-to-csv-file>
9
- */
10
- function findDuplicateUrls(csvFilePath) {
11
- // Validate command-line argument
12
- if (!csvFilePath) {
13
- console.error('Error: CSV file path is required');
14
- console.error('Usage: node scripts/find-duplicate-urls.js <path-to-csv-file>');
15
- process.exit(1);
16
- }
17
-
18
- // Validate file exists and is readable
19
- if (!fs.existsSync(csvFilePath)) {
20
- console.error(`Error: File not found: ${csvFilePath}`);
21
- process.exit(1);
22
- }
23
-
24
- const urlMap = new Map(); // url -> [memberId1, memberId2, ...]
25
- let totalMembers = 0;
26
- let rowNumber = 0;
27
- let headersValidated = false;
28
- let headers = null;
29
- let urlColumnName = null;
30
- let memberIdColumnName = null;
31
-
32
- return new Promise((resolve, reject) => {
33
- fs.createReadStream(csvFilePath)
34
- .pipe(csv())
35
- .on('headers', receivedHeaders => {
36
- headers = receivedHeaders;
37
- // Validate required columns exist - normalize by removing quotes, trimming, and lowercasing
38
- const normalizedHeaders = headers.map(h => {
39
- let normalized = String(h).trim();
40
- // Remove all quotes (single and double) from the string
41
- normalized = normalized.replace(/["']/g, '');
42
- return normalized.toLowerCase().trim();
43
- });
44
-
45
- // Find the actual column names for url and memberId
46
- const urlIndex = normalizedHeaders.indexOf('url');
47
- const memberIdIndex = normalizedHeaders.indexOf('memberid');
48
-
49
- if (urlIndex === -1 || memberIdIndex === -1) {
50
- console.error('Error: CSV must contain "url" and "memberId" columns (case-insensitive)');
51
- console.error(`Found columns: ${headers.join(', ')}`);
52
- console.error(`Normalized columns: ${normalizedHeaders.join(', ')}`);
53
- process.exit(1);
54
- }
55
-
56
- // Store the actual column names (with original casing/quotes)
57
- urlColumnName = headers[urlIndex];
58
- memberIdColumnName = headers[memberIdIndex];
59
- headersValidated = true;
60
- })
61
- .on('data', row => {
62
- // Validate headers on first data row if headers event didn't fire
63
- if (!headersValidated) {
64
- headers = Object.keys(row);
65
- // Normalize by removing quotes, trimming, and lowercasing
66
- const normalizedHeaders = headers.map(h => {
67
- let normalized = String(h).trim();
68
- // Remove all quotes (single and double) from the string
69
- normalized = normalized.replace(/["']/g, '');
70
- return normalized.toLowerCase().trim();
71
- });
72
-
73
- const urlIndex = normalizedHeaders.indexOf('url');
74
- const memberIdIndex = normalizedHeaders.indexOf('memberid');
75
-
76
- if (urlIndex === -1 || memberIdIndex === -1) {
77
- console.error(
78
- 'Error: CSV must contain "url" and "memberId" columns (case-insensitive)'
79
- );
80
- console.error(`Found columns: ${headers.join(', ')}`);
81
- console.error(`Normalized columns: ${normalizedHeaders.join(', ')}`);
82
- process.exit(1);
83
- }
84
-
85
- // Store the actual column names
86
- urlColumnName = headers[urlIndex];
87
- memberIdColumnName = headers[memberIdIndex];
88
- headersValidated = true;
89
- }
90
-
91
- rowNumber++;
92
- totalMembers++;
93
-
94
- // Get URL and memberId using the actual column names from headers
95
- const url = row[urlColumnName];
96
- const memberId = row[memberIdColumnName];
97
-
98
- // Skip rows with missing URL or memberId
99
- if (!url || !memberId) {
100
- console.warn(
101
- `Warning: Row ${rowNumber} skipped - missing url or memberId (url: ${url}, memberId: ${memberId})`
102
- );
103
- return;
104
- }
105
-
106
- const trimmedUrl = url.trim();
107
- const trimmedMemberId = memberId.trim();
108
-
109
- // Track URL occurrences
110
- if (!urlMap.has(trimmedUrl)) {
111
- urlMap.set(trimmedUrl, []);
112
- }
113
- urlMap.get(trimmedUrl).push(trimmedMemberId);
114
- })
115
- .on('error', error => {
116
- console.error('Error reading CSV file:', error.message);
117
- reject(error);
118
- })
119
- .on('end', () => {
120
- if (!headersValidated) {
121
- console.error('Error: Could not read CSV headers');
122
- process.exit(1);
123
- }
124
-
125
- // Find duplicates (URLs with count > 1)
126
- const duplicateUrls = [];
127
- let totalDuplicates = 0;
128
-
129
- for (const [url, memberIds] of urlMap.entries()) {
130
- if (memberIds.length > 1) {
131
- duplicateUrls.push({
132
- url: url,
133
- count: memberIds.length,
134
- memberIds: memberIds,
135
- });
136
- totalDuplicates += memberIds.length;
137
- }
138
- }
139
-
140
- // Sort by count (descending) then by URL (ascending)
141
- duplicateUrls.sort((a, b) => {
142
- if (b.count !== a.count) {
143
- return b.count - a.count;
144
- }
145
- return a.url.localeCompare(b.url);
146
- });
147
-
148
- const totalUniqueUrls = urlMap.size;
149
- const uniqueDuplicateUrls = duplicateUrls.length;
150
-
151
- // Create a simple list of duplicated URLs (just the URL strings)
152
- const duplicatedUrlsList = duplicateUrls.map(item => item.url);
153
-
154
- // Generate report
155
- const report = {
156
- totalMembers: totalMembers,
157
- totalUniqueUrls: totalUniqueUrls,
158
- duplicateUrls: duplicateUrls,
159
- duplicatedUrlsList: duplicatedUrlsList,
160
- summary: {
161
- totalDuplicates: totalDuplicates,
162
- uniqueDuplicateUrls: uniqueDuplicateUrls,
163
- },
164
- };
165
-
166
- // Generate output filename
167
- const csvDir = path.dirname(csvFilePath);
168
- const csvBasename = path.basename(csvFilePath, path.extname(csvFilePath));
169
- const outputPath = path.join(csvDir, `${csvBasename}-duplicate-urls-report.json`);
170
-
171
- // Write JSON report
172
- fs.writeFileSync(outputPath, JSON.stringify(report, null, 2), 'utf8');
173
-
174
- console.log('\n=== Duplicate URL Report ===');
175
- console.log(`Total members processed: ${totalMembers}`);
176
- console.log(`Total unique URLs: ${totalUniqueUrls}`);
177
- console.log(`Unique URLs with duplicates: ${uniqueDuplicateUrls}`);
178
- console.log(`Total duplicate entries: ${totalDuplicates}`);
179
- console.log(`\nReport saved to: ${outputPath}`);
180
- console.log(`\nTop 10 most duplicated URLs:`);
181
- duplicateUrls.slice(0, 10).forEach((item, index) => {
182
- console.log(
183
- ` ${index + 1}. "${item.url}" - appears ${item.count} times (memberIds: ${item.memberIds.join(', ')})`
184
- );
185
- });
186
-
187
- resolve(report);
188
- });
189
- });
190
- }
191
-
192
- // Run if executed directly
193
- if (require.main === module) {
194
- const csvFilePath = process.argv[2];
195
- findDuplicateUrls(csvFilePath).catch(error => {
196
- console.error('Fatal error:', error.message);
197
- process.exit(1);
198
- });
199
- }
200
-
201
- module.exports = { findDuplicateUrls };
@@ -1,120 +0,0 @@
1
- const js = require('@eslint/js');
2
- const prettierConfig = require('eslint-config-prettier');
3
- const importPlugin = require('eslint-plugin-import');
4
- const prettier = require('eslint-plugin-prettier');
5
- const promisePlugin = require('eslint-plugin-promise');
6
- const globals = require('globals');
7
-
8
- module.exports = [
9
- // Recommended base configurations
10
- js.configs.recommended,
11
- prettierConfig,
12
-
13
- // Main configuration
14
- {
15
- files: ['**/*.js'],
16
- languageOptions: {
17
- ecmaVersion: 2021,
18
- sourceType: 'commonjs',
19
- globals: {
20
- ...globals.node,
21
- ...globals.es2021,
22
- ...globals.jest,
23
- },
24
- },
25
- plugins: {
26
- prettier,
27
- import: importPlugin,
28
- promise: promisePlugin,
29
- },
30
- rules: {
31
- // Error prevention
32
- 'no-var': 'error',
33
- 'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
34
- 'no-console': ['warn', { allow: ['warn', 'error', 'log', 'info', 'group', 'groupEnd'] }],
35
- 'no-debugger': 'warn',
36
- 'no-duplicate-imports': 'error',
37
- 'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }],
38
- 'no-use-before-define': ['error', { functions: false }],
39
-
40
- // Best practices
41
- 'prefer-const': 'error',
42
- 'no-const-assign': 'error',
43
- 'prefer-arrow-callback': 'error',
44
- 'arrow-body-style': ['error', 'as-needed'],
45
- 'no-return-await': 'off',
46
- 'require-await': 'warn',
47
-
48
- // Import rules
49
- 'import/order': [
50
- 'error',
51
- {
52
- groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
53
- 'newlines-between': 'always',
54
- alphabetize: { order: 'asc', caseInsensitive: true },
55
- },
56
- ],
57
- 'import/no-unresolved': [
58
- 'error',
59
- {
60
- commonjs: true,
61
- caseSensitive: true,
62
- },
63
- ],
64
- 'import/no-duplicates': 'error',
65
- 'import/no-commonjs': 'off',
66
- 'import/no-dynamic-require': 'off',
67
-
68
- // Promise rules
69
- 'promise/always-return': 'off',
70
- 'promise/no-return-wrap': 'error',
71
- 'promise/param-names': 'error',
72
- 'promise/catch-or-return': 'error',
73
- 'promise/no-native': 'off',
74
- 'promise/no-callback-in-promise': 'warn',
75
- 'promise/no-promise-in-callback': 'warn',
76
- 'promise/no-nesting': 'warn',
77
-
78
- // Prettier rules
79
- 'prettier/prettier': [
80
- 'error',
81
- {
82
- singleQuote: true,
83
- trailingComma: 'es5',
84
- printWidth: 100,
85
- tabWidth: 2,
86
- semi: true,
87
- bracketSpacing: true,
88
- arrowParens: 'avoid',
89
- endOfLine: 'lf',
90
- },
91
- ],
92
- },
93
- settings: {
94
- 'import/resolver': {
95
- node: {
96
- extensions: ['.js', '.jsx', '.ts', '.tsx'],
97
- moduleDirectory: ['node_modules', 'public', 'backend', 'pages'],
98
- },
99
- },
100
- },
101
- },
102
-
103
- // Test files override
104
- {
105
- files: ['**/*.test.js', '**/*.spec.js'],
106
- languageOptions: {
107
- globals: {
108
- ...globals.jest,
109
- },
110
- },
111
- rules: {
112
- 'no-console': 'off',
113
- },
114
- },
115
-
116
- // Ignore patterns
117
- {
118
- ignores: ['node_modules/**', 'dist/**', 'build/**', 'coverage/**', '*.min.js'],
119
- },
120
- ];
@@ -1,5 +0,0 @@
1
- module.exports = {
2
- ...require('./pages'),
3
- ...require('./backend'),
4
- ...require('./public'),
5
- };