@explorins/pers-shared 2.1.174 → 2.1.176

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 (47) hide show
  1. package/dist/cjs/shared-lib/dto/redemption/redemption.dto.d.ts +2 -6
  2. package/dist/cjs/shared-lib/dto/redemption/redemption.dto.d.ts.map +1 -1
  3. package/dist/cjs/shared-lib/dto/redemption/redemption.dto.js.map +1 -1
  4. package/dist/cjs/shared-lib/dto/user/custom-field-definition.dto.d.ts +1 -0
  5. package/dist/cjs/shared-lib/dto/user/custom-field-definition.dto.d.ts.map +1 -1
  6. package/dist/cjs/shared-lib/dto/user/custom-field-definition.dto.js +9 -0
  7. package/dist/cjs/shared-lib/dto/user/custom-field-definition.dto.js.map +1 -1
  8. package/dist/cjs/shared-lib/enum/entity-types.enum.d.ts +3 -0
  9. package/dist/cjs/shared-lib/enum/entity-types.enum.d.ts.map +1 -1
  10. package/dist/cjs/shared-lib/enum/entity-types.enum.js +2 -0
  11. package/dist/cjs/shared-lib/enum/entity-types.enum.js.map +1 -1
  12. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.d.ts +17 -0
  13. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.d.ts.map +1 -0
  14. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.js +3 -0
  15. package/dist/cjs/shared-lib/interfaces/eligible-business-summary.interface.js.map +1 -0
  16. package/dist/cjs/shared-lib/interfaces/index.d.ts +1 -0
  17. package/dist/cjs/shared-lib/interfaces/index.d.ts.map +1 -1
  18. package/dist/cjs/shared-lib/interfaces/index.js +1 -0
  19. package/dist/cjs/shared-lib/interfaces/index.js.map +1 -1
  20. package/dist/cjs/shared-lib/types/data-source.type.d.ts +208 -0
  21. package/dist/cjs/shared-lib/types/data-source.type.d.ts.map +1 -1
  22. package/dist/cjs/shared-lib/types/data-source.type.js +178 -1
  23. package/dist/cjs/shared-lib/types/data-source.type.js.map +1 -1
  24. package/dist/esm/shared-lib/dto/redemption/redemption.dto.d.ts +2 -6
  25. package/dist/esm/shared-lib/dto/redemption/redemption.dto.d.ts.map +1 -1
  26. package/dist/esm/shared-lib/dto/redemption/redemption.dto.js.map +1 -1
  27. package/dist/esm/shared-lib/dto/user/custom-field-definition.dto.d.ts +1 -0
  28. package/dist/esm/shared-lib/dto/user/custom-field-definition.dto.d.ts.map +1 -1
  29. package/dist/esm/shared-lib/dto/user/custom-field-definition.dto.js +8 -0
  30. package/dist/esm/shared-lib/dto/user/custom-field-definition.dto.js.map +1 -1
  31. package/dist/esm/shared-lib/enum/entity-types.enum.d.ts +3 -0
  32. package/dist/esm/shared-lib/enum/entity-types.enum.d.ts.map +1 -1
  33. package/dist/esm/shared-lib/enum/entity-types.enum.js +2 -0
  34. package/dist/esm/shared-lib/enum/entity-types.enum.js.map +1 -1
  35. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.d.ts +17 -0
  36. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.d.ts.map +1 -0
  37. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.js +2 -0
  38. package/dist/esm/shared-lib/interfaces/eligible-business-summary.interface.js.map +1 -0
  39. package/dist/esm/shared-lib/interfaces/index.d.ts +1 -0
  40. package/dist/esm/shared-lib/interfaces/index.d.ts.map +1 -1
  41. package/dist/esm/shared-lib/interfaces/index.js +1 -0
  42. package/dist/esm/shared-lib/interfaces/index.js.map +1 -1
  43. package/dist/esm/shared-lib/types/data-source.type.d.ts +208 -0
  44. package/dist/esm/shared-lib/types/data-source.type.d.ts.map +1 -1
  45. package/dist/esm/shared-lib/types/data-source.type.js +174 -0
  46. package/dist/esm/shared-lib/types/data-source.type.js.map +1 -1
  47. package/package.json +1 -1
@@ -67,4 +67,178 @@ export function isDataSourceChannel(value) {
67
67
  export const DEFAULT_DATA_SOURCE = {
68
68
  channel: 'admin',
69
69
  };
70
+ /**
71
+ * Known domain mappings for auto-detecting source from referrer.
72
+ * Maps hostnames to normalized source names.
73
+ */
74
+ export const KNOWN_SOURCE_DOMAINS = {
75
+ // Google
76
+ 'google.com': 'google',
77
+ 'google.co.uk': 'google',
78
+ 'google.de': 'google',
79
+ 'google.fr': 'google',
80
+ 'google.es': 'google',
81
+ 'google.it': 'google',
82
+ 'google.nl': 'google',
83
+ 'google.pt': 'google',
84
+ 'google.pl': 'google',
85
+ 'google.ru': 'google',
86
+ 'google.com.br': 'google',
87
+ 'google.ca': 'google',
88
+ 'google.com.au': 'google',
89
+ 'google.co.jp': 'google',
90
+ 'google.co.in': 'google',
91
+ // Facebook
92
+ 'facebook.com': 'facebook',
93
+ 'fb.com': 'facebook',
94
+ 'm.facebook.com': 'facebook',
95
+ 'l.facebook.com': 'facebook',
96
+ 'lm.facebook.com': 'facebook',
97
+ // Instagram
98
+ 'instagram.com': 'instagram',
99
+ 'l.instagram.com': 'instagram',
100
+ // Twitter/X
101
+ 'twitter.com': 'twitter',
102
+ 'x.com': 'twitter',
103
+ 't.co': 'twitter',
104
+ 'mobile.twitter.com': 'twitter',
105
+ // LinkedIn
106
+ 'linkedin.com': 'linkedin',
107
+ 'lnkd.in': 'linkedin',
108
+ // YouTube
109
+ 'youtube.com': 'youtube',
110
+ 'youtu.be': 'youtube',
111
+ 'm.youtube.com': 'youtube',
112
+ // TikTok
113
+ 'tiktok.com': 'tiktok',
114
+ 'vm.tiktok.com': 'tiktok',
115
+ // Other social
116
+ 'pinterest.com': 'pinterest',
117
+ 'reddit.com': 'reddit',
118
+ 'tumblr.com': 'tumblr',
119
+ 'snapchat.com': 'snapchat',
120
+ // Search engines
121
+ 'bing.com': 'bing',
122
+ 'yahoo.com': 'yahoo',
123
+ 'duckduckgo.com': 'duckduckgo',
124
+ 'baidu.com': 'baidu',
125
+ 'yandex.com': 'yandex',
126
+ 'yandex.ru': 'yandex',
127
+ // Email providers (for tracking email clicks)
128
+ 'mail.google.com': 'gmail',
129
+ 'outlook.live.com': 'outlook',
130
+ 'outlook.office.com': 'outlook',
131
+ };
132
+ /**
133
+ * Auto-detect source from referrer URL domain.
134
+ * Maps common domains to friendly source names.
135
+ *
136
+ * @param referrer - Full referrer URL
137
+ * @returns Normalized source name or undefined
138
+ *
139
+ * @example
140
+ * detectSourceFromReferrer('https://www.google.com/search?q=test') // 'google'
141
+ * detectSourceFromReferrer('https://l.facebook.com/...') // 'facebook'
142
+ * detectSourceFromReferrer('https://partner.example.com') // 'example'
143
+ */
144
+ export function detectSourceFromReferrer(referrer) {
145
+ if (!referrer)
146
+ return undefined;
147
+ try {
148
+ const url = new URL(referrer);
149
+ const hostname = url.hostname.toLowerCase().replace(/^www\./, '');
150
+ // Check exact match first
151
+ if (KNOWN_SOURCE_DOMAINS[hostname]) {
152
+ return KNOWN_SOURCE_DOMAINS[hostname];
153
+ }
154
+ // Check if hostname ends with known domain (for subdomains)
155
+ for (const [domain, source] of Object.entries(KNOWN_SOURCE_DOMAINS)) {
156
+ if (hostname.endsWith('.' + domain)) {
157
+ return source;
158
+ }
159
+ }
160
+ // Fallback: extract main domain name (e.g., 'example' from 'mail.example.com')
161
+ const parts = hostname.split('.');
162
+ if (parts.length >= 2) {
163
+ return parts[parts.length - 2]; // Returns 'example' from 'sub.example.com'
164
+ }
165
+ return hostname;
166
+ }
167
+ catch {
168
+ // Invalid URL, return undefined
169
+ return undefined;
170
+ }
171
+ }
172
+ /**
173
+ * Auto-detect channel from User-Agent string.
174
+ *
175
+ * @param userAgent - User-Agent header value
176
+ * @param path - Optional request path for webhook detection
177
+ * @returns Detected channel
178
+ *
179
+ * @example
180
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
181
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
182
+ * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
183
+ */
184
+ export function detectChannelFromUserAgent(userAgent, path) {
185
+ // Check for webhook paths
186
+ if (path?.includes('/webhook')) {
187
+ return 'webhook';
188
+ }
189
+ const ua = (userAgent || '').toLowerCase();
190
+ // Check for mobile user-agents
191
+ if (/mobile|android|iphone|ipad|ipod|blackberry|windows phone/i.test(ua)) {
192
+ return 'mobile';
193
+ }
194
+ // Check for bot/crawler patterns (system)
195
+ if (/bot|crawler|spider|scraper|curl|wget|python|node-fetch|axios/i.test(ua)) {
196
+ return 'api';
197
+ }
198
+ // Default to web for browser-like user agents
199
+ return 'web';
200
+ }
201
+ /**
202
+ * Parse UTM parameters from a URL (deep link, referrer, etc.).
203
+ * Supports standard Google Analytics UTM parameters.
204
+ *
205
+ * @param url - Full URL containing UTM query parameters
206
+ * @returns Parsed UTM parameters object
207
+ *
208
+ * @example
209
+ * // Deep link from email campaign
210
+ * parseUtmParams('myapp://screen?utm_source=mailchimp&utm_medium=email&utm_campaign=summer_2026')
211
+ * // Returns: { source: 'mailchimp', medium: 'email', campaign: 'summer_2026' }
212
+ *
213
+ * @example
214
+ * // Web URL with full UTM tracking
215
+ * parseUtmParams('https://app.example.com?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_term=loyalty+app')
216
+ * // Returns: { source: 'google', medium: 'cpc', campaign: 'brand', term: 'loyalty+app' }
217
+ */
218
+ export function parseUtmParams(url) {
219
+ const params = {};
220
+ try {
221
+ const urlObj = new URL(url);
222
+ const searchParams = urlObj.searchParams;
223
+ const source = searchParams.get('utm_source');
224
+ const medium = searchParams.get('utm_medium');
225
+ const campaign = searchParams.get('utm_campaign');
226
+ const term = searchParams.get('utm_term');
227
+ const content = searchParams.get('utm_content');
228
+ if (source)
229
+ params.source = source;
230
+ if (medium)
231
+ params.medium = medium;
232
+ if (campaign)
233
+ params.campaign = campaign;
234
+ if (term)
235
+ params.term = term;
236
+ if (content)
237
+ params.content = content;
238
+ }
239
+ catch {
240
+ // Invalid URL, return empty params
241
+ }
242
+ return params;
243
+ }
70
244
  //# sourceMappingURL=data-source.type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAQ,0BAA0B;IACvC,QAAQ,EAAK,2BAA2B;IACxC,KAAK,EAAQ,yBAAyB;IACtC,OAAO,EAAM,0BAA0B;IACvC,QAAQ,EAAK,+BAA+B;IAC5C,QAAQ,EAAK,yBAAyB;IACtC,SAAS,EAAI,4BAA4B;IACzC,MAAM,EAAO,uCAAuC;IACpD,WAAW,EAAE,iBAAiB;CACtB,CAAC;AA0CX;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAA0B,CAAC,CAAC;AAChG,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,OAAO,EAAE,OAAO;CACjB,CAAC"}
1
+ {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorins/pers-shared",
3
- "version": "2.1.174",
3
+ "version": "2.1.176",
4
4
  "scripts": {
5
5
  "clean": "find dist -type f -delete 2>/dev/null || true",
6
6
  "build:esm": "tsc -p tsconfig.esm.json && node scripts/add-js-extensions.js",