@explorins/pers-shared 2.1.190 → 2.1.191

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.
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAStB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAmBtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
@@ -40,7 +40,17 @@ __decorate([
40
40
  ], RedemptionRedeemRequestDTO.prototype, "redemptionId", void 0);
41
41
  __decorate([
42
42
  (0, swagger_1.ApiProperty)({
43
- description: 'The business id associated with the redemption, if applicable',
43
+ description: `Business ID associated with this redemption transaction (optional override).
44
+
45
+ **Token Recipient Priority:**
46
+ 1. \`redemption.ownerBusinessId\` - Business that created/owns the redemption (default)
47
+ 2. \`dto.businessId\` - This field (override for marketplace/facilitator scenarios)
48
+ 3. \`TENANT\` - Platform fallback for platform-wide redemptions
49
+
50
+ **Use Cases:**
51
+ - Omit for standard redemptions (tokens go to redemption owner)
52
+ - Provide for marketplace scenarios where a facilitator business processes redemptions for another business
53
+ - Leave null for platform-managed redemptions without a specific business owner`,
44
54
  type: String,
45
55
  nullable: true
46
56
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA+D;AAC/D,iDAAkE;AAGlE,MAAa,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAStB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AAjDD,gEAiDC;AAhCG;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;;gEACa;AAStB;IAPC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,IAAA,4BAAe,GAAE;IACjB,IAAA,wBAAM,GAAE;;8DACkB;AAsB3B;IApBC,IAAA,6BAAmB,EAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;2DACc"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAAmE;AACnE,qDAA+D;AAC/D,iDAAkE;AAGlE,MAAa,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAmBtB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AA3DD,gEA2DC;AA1CG;IANC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,GAAE;;gEACa;AAmBtB;IAjBC,IAAA,qBAAW,EAAC;QACT,WAAW,EAAE;;;;;;;;;;gFAU2D;QACxE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,IAAA,4BAAe,GAAE;IACjB,IAAA,wBAAM,GAAE;;8DACkB;AAsB3B;IApBC,IAAA,6BAAmB,EAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,IAAA,0BAAa,GAAE;IACf,IAAA,0BAAQ,GAAE;;2DACc"}
@@ -1,3 +1,4 @@
1
+ import { BusinessTypeDTO } from '../dto/business/business-type.dto';
1
2
  /**
2
3
  * Minimal business info for eligible business selectors.
3
4
  *
@@ -13,5 +14,7 @@ export interface EligibleBusinessSummary {
13
14
  displayName: string;
14
15
  /** Optional logo/image URL */
15
16
  imageUrl?: string | null;
17
+ /** Business type (for filtering/grouping/display) */
18
+ businessType?: BusinessTypeDTO | null;
16
19
  }
17
20
  //# sourceMappingURL=eligible-business-summary.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
1
+ {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACzC"}
@@ -19,14 +19,15 @@
19
19
  *
20
20
  * ## Example Scenarios
21
21
  *
22
- * | Scenario | channel | medium | campaign | source |
23
- * |-----------------------------|-----------|------------|--------------|--------------|
24
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
25
- * | Mobile app registration | `mobile` | `app` | - | - |
26
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
27
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
28
- * | Admin creates user | `admin` | - | - | - |
29
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
22
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
23
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
24
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
25
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
26
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
27
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Partner API integration | `api` | - | - | - |
29
+ * | Admin creates user | `admin` | - | - | - |
30
+ * | Webhook from Stripe | `webhook` | - | - | - |
30
31
  *
31
32
  * @example
32
33
  * // Simple usage - just channel
@@ -43,6 +44,10 @@
43
44
  */
44
45
  /**
45
46
  * Primary ingestion channels for data source tracking.
47
+ *
48
+ * IMPORTANT:
49
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
50
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
46
51
  */
47
52
  export declare const DATA_SOURCE_CHANNELS: readonly ["web", "mobile", "api", "admin", "system", "import", "webhook", "sync", "migration", "unknown"];
48
53
  export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
@@ -51,11 +56,19 @@ export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
51
56
  *
52
57
  * Provides both simple channel categorization and optional
53
58
  * detailed attribution fields for analytics.
59
+ *
60
+ * CHANNEL USAGE:
61
+ * - 'web': ANY browser (desktop/mobile) - check platform.deviceType and platform.browser
62
+ * - 'mobile': Native apps ONLY - check platform.app and platform.appVersion
63
+ * - Use platform field to get detailed device/environment information
54
64
  */
55
65
  export interface DataSource {
56
66
  /**
57
67
  * Primary ingestion channel.
58
68
  * Required field for basic source categorization.
69
+ *
70
+ * - 'web' = Browser (desktop or mobile) - use platform.deviceType to distinguish
71
+ * - 'mobile' = Native mobile app - requires platform.app to be set
59
72
  */
60
73
  channel: DataSourceChannel;
61
74
  /**
@@ -83,6 +96,19 @@ export interface DataSource {
83
96
  * SDK provides this - backend stores as-is.
84
97
  */
85
98
  platform?: Platform;
99
+ /**
100
+ * Source of platform data.
101
+ * Indicates whether platform info came from SDK headers or auto-detection.
102
+ *
103
+ * - 'sdk': Explicitly sent via x-platform header (authoritative, trusted)
104
+ * - 'auto': Parsed from User-Agent header (best-effort, may be inaccurate)
105
+ *
106
+ * Use this to:
107
+ * - Identify incomplete SDK integrations (platformSource='auto' or missing)
108
+ * - Filter for high-quality data (platformSource='sdk')
109
+ * - Track SDK adoption progress
110
+ */
111
+ platformSource?: 'sdk' | 'auto';
86
112
  }
87
113
  /**
88
114
  * Platform/device information for analytics.
@@ -135,17 +161,37 @@ export declare const KNOWN_SOURCE_DOMAINS: Record<string, string>;
135
161
  * detectSourceFromReferrer('https://partner.example.com') // 'example'
136
162
  */
137
163
  export declare function detectSourceFromReferrer(referrer?: string): string | undefined;
164
+ /**
165
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
166
+ *
167
+ * Extracts OS, browser, device type from standard User-Agent patterns.
168
+ * This is best-effort - SDK headers are authoritative.
169
+ *
170
+ * @param userAgent - User-Agent header value
171
+ * @returns Platform object with detected fields, or undefined if unparseable
172
+ *
173
+ * @example
174
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
175
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
176
+ */
177
+ export declare function parseUserAgentForPlatform(userAgent?: string): Platform | undefined;
138
178
  /**
139
179
  * Auto-detect channel from User-Agent string.
140
180
  *
181
+ * IMPORTANT DESIGN:
182
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
183
+ * - Native apps MUST send explicit x-source-channel: mobile header
184
+ * - Use platform.deviceType to distinguish mobile web from desktop web
185
+ *
141
186
  * @param userAgent - User-Agent header value
142
187
  * @param path - Optional request path for webhook detection
143
188
  * @returns Detected channel
144
189
  *
145
190
  * @example
146
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
147
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
191
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
192
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
148
193
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
194
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
149
195
  */
150
196
  export declare function detectChannelFromUserAgent(userAgent?: string, path?: string): DataSourceChannel;
151
197
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
@@ -20,14 +20,15 @@
20
20
  *
21
21
  * ## Example Scenarios
22
22
  *
23
- * | Scenario | channel | medium | campaign | source |
24
- * |-----------------------------|-----------|------------|--------------|--------------|
25
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
26
- * | Mobile app registration | `mobile` | `app` | - | - |
27
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
28
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
29
- * | Admin creates user | `admin` | - | - | - |
30
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
23
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
24
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
25
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
26
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
27
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
29
+ * | Partner API integration | `api` | - | - | - |
30
+ * | Admin creates user | `admin` | - | - | - |
31
+ * | Webhook from Stripe | `webhook` | - | - | - |
31
32
  *
32
33
  * @example
33
34
  * // Simple usage - just channel
@@ -46,14 +47,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
46
47
  exports.KNOWN_SOURCE_DOMAINS = exports.DEFAULT_DATA_SOURCE = exports.DATA_SOURCE_CHANNELS = void 0;
47
48
  exports.isDataSourceChannel = isDataSourceChannel;
48
49
  exports.detectSourceFromReferrer = detectSourceFromReferrer;
50
+ exports.parseUserAgentForPlatform = parseUserAgentForPlatform;
49
51
  exports.detectChannelFromUserAgent = detectChannelFromUserAgent;
50
52
  exports.parseUtmParams = parseUtmParams;
51
53
  /**
52
54
  * Primary ingestion channels for data source tracking.
55
+ *
56
+ * IMPORTANT:
57
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
58
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
53
59
  */
54
60
  exports.DATA_SOURCE_CHANNELS = [
55
- 'web', // Web application/browser
56
- 'mobile', // Mobile app (iOS/Android)
61
+ 'web', // Web browser (desktop or mobile) - check platform.deviceType
62
+ 'mobile', // Native mobile app ONLY (iOS/Android) - requires platform.app
57
63
  'api', // Direct API integration
58
64
  'admin', // Admin panel/back-office
59
65
  'system', // System-generated (automated)
@@ -181,17 +187,114 @@ function detectSourceFromReferrer(referrer) {
181
187
  return undefined;
182
188
  }
183
189
  }
190
+ /**
191
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
192
+ *
193
+ * Extracts OS, browser, device type from standard User-Agent patterns.
194
+ * This is best-effort - SDK headers are authoritative.
195
+ *
196
+ * @param userAgent - User-Agent header value
197
+ * @returns Platform object with detected fields, or undefined if unparseable
198
+ *
199
+ * @example
200
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
201
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
202
+ */
203
+ function parseUserAgentForPlatform(userAgent) {
204
+ if (!userAgent)
205
+ return undefined;
206
+ const ua = userAgent;
207
+ const platform = {};
208
+ // Detect OS and device type
209
+ if (/iPhone|iPod/i.test(ua)) {
210
+ platform.os = 'iOS';
211
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
212
+ if (match)
213
+ platform.osVersion = `${match[1]}.${match[2]}`;
214
+ platform.deviceType = 'phone';
215
+ }
216
+ else if (/iPad/i.test(ua)) {
217
+ platform.os = 'iOS';
218
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
219
+ if (match)
220
+ platform.osVersion = `${match[1]}.${match[2]}`;
221
+ platform.deviceType = 'tablet';
222
+ }
223
+ else if (/Android/i.test(ua)) {
224
+ platform.os = 'Android';
225
+ const match = ua.match(/Android ([\d\.]+)/);
226
+ if (match)
227
+ platform.osVersion = match[1];
228
+ platform.deviceType = /Mobile/i.test(ua) ? 'phone' : 'tablet';
229
+ }
230
+ else if (/Windows NT/i.test(ua)) {
231
+ platform.os = 'Windows';
232
+ const match = ua.match(/Windows NT ([\d\.]+)/);
233
+ if (match)
234
+ platform.osVersion = match[1];
235
+ platform.deviceType = 'desktop';
236
+ }
237
+ else if (/Macintosh|Mac OS X/i.test(ua)) {
238
+ platform.os = 'macOS';
239
+ const match = ua.match(/Mac OS X ([\d_]+)/);
240
+ if (match)
241
+ platform.osVersion = match[1].replace(/_/g, '.');
242
+ platform.deviceType = 'desktop';
243
+ }
244
+ else if (/Linux/i.test(ua) && !/Android/i.test(ua)) {
245
+ platform.os = 'Linux';
246
+ platform.deviceType = 'desktop';
247
+ }
248
+ // Detect browser (web channel)
249
+ if (/Edg\//i.test(ua)) {
250
+ platform.browser = 'Edge';
251
+ const match = ua.match(/Edg\/([\d\.]+)/);
252
+ if (match)
253
+ platform.browserVersion = match[1];
254
+ }
255
+ else if (/Chrome\//i.test(ua) && !/Edg/i.test(ua)) {
256
+ platform.browser = 'Chrome';
257
+ const match = ua.match(/Chrome\/([\d\.]+)/);
258
+ if (match)
259
+ platform.browserVersion = match[1];
260
+ }
261
+ else if (/Safari\//i.test(ua) && !/Chrome/i.test(ua)) {
262
+ platform.browser = 'Safari';
263
+ const match = ua.match(/Version\/([\d\.]+)/);
264
+ if (match)
265
+ platform.browserVersion = match[1];
266
+ }
267
+ else if (/Firefox\//i.test(ua)) {
268
+ platform.browser = 'Firefox';
269
+ const match = ua.match(/Firefox\/([\d\.]+)/);
270
+ if (match)
271
+ platform.browserVersion = match[1];
272
+ }
273
+ else if (/Opera|OPR\//i.test(ua)) {
274
+ platform.browser = 'Opera';
275
+ const match = ua.match(/(?:Opera|OPR)\/([\d\.]+)/);
276
+ if (match)
277
+ platform.browserVersion = match[1];
278
+ }
279
+ return Object.keys(platform).length > 0 ? platform : undefined;
280
+ }
184
281
  /**
185
282
  * Auto-detect channel from User-Agent string.
186
283
  *
284
+ * IMPORTANT DESIGN:
285
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
286
+ * - Native apps MUST send explicit x-source-channel: mobile header
287
+ * - Use platform.deviceType to distinguish mobile web from desktop web
288
+ *
187
289
  * @param userAgent - User-Agent header value
188
290
  * @param path - Optional request path for webhook detection
189
291
  * @returns Detected channel
190
292
  *
191
293
  * @example
192
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
193
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
294
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
295
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
194
296
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
297
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
195
298
  */
196
299
  function detectChannelFromUserAgent(userAgent, path) {
197
300
  // Check for webhook paths
@@ -199,16 +302,18 @@ function detectChannelFromUserAgent(userAgent, path) {
199
302
  return 'webhook';
200
303
  }
201
304
  const ua = (userAgent || '').toLowerCase();
202
- // Check for mobile user-agents
203
- if (/mobile|android|iphone|ipad|ipod|blackberry|windows phone/i.test(ua)) {
204
- return 'mobile';
205
- }
206
305
  // Check for bot/crawler patterns (system)
207
306
  if (/bot|crawler|spider|scraper|curl|wget|python|node-fetch|axios/i.test(ua)) {
208
307
  return 'api';
209
308
  }
210
- // Default to web for browser-like user agents
211
- return 'web';
309
+ // Check for ANY browser pattern (desktop OR mobile)
310
+ // Mobile browsers are 'web' channel - use platform.deviceType to distinguish
311
+ if (ua && /mozilla|chrome|safari|firefox|edge|opera|msie|trident/i.test(ua)) {
312
+ return 'web';
313
+ }
314
+ // Unknown: Native apps MUST send x-source-channel: mobile header
315
+ // If we see 'unknown', it means SDK integration is incomplete
316
+ return 'unknown';
212
317
  }
213
318
  /**
214
319
  * Parse UTM parameters from a URL (deep link, referrer, etc.).
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAStB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.d.ts","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,qBAAa,0BAA0B;IACnC;;;;;;OAMG;IAUH,YAAY,EAAG,MAAM,CAAC;IAmBtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAsB3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC5B"}
@@ -32,7 +32,17 @@ __decorate([
32
32
  ], RedemptionRedeemRequestDTO.prototype, "redemptionId", void 0);
33
33
  __decorate([
34
34
  ApiProperty({
35
- description: 'The business id associated with the redemption, if applicable',
35
+ description: `Business ID associated with this redemption transaction (optional override).
36
+
37
+ **Token Recipient Priority:**
38
+ 1. \`redemption.ownerBusinessId\` - Business that created/owns the redemption (default)
39
+ 2. \`dto.businessId\` - This field (override for marketplace/facilitator scenarios)
40
+ 3. \`TENANT\` - Platform fallback for platform-wide redemptions
41
+
42
+ **Use Cases:**
43
+ - Omit for standard redemptions (tokens go to redemption owner)
44
+ - Provide for marketplace scenarios where a facilitator business processes redemptions for another business
45
+ - Leave null for platform-managed redemptions without a specific business owner`,
36
46
  type: String,
37
47
  nullable: true
38
48
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,MAAM,OAAO,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAStB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AAhCG;IANC,WAAW,CAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,UAAU,EAAE;IACZ,MAAM,EAAE;gEACa;AAStB;IAPC,WAAW,CAAC;QACT,WAAW,EAAE,+DAA+D;QAC5E,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,eAAe,EAAE;IACjB,MAAM,EAAE;8DACkB;AAsB3B;IApBC,mBAAmB,CAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,aAAa,EAAE;IACf,QAAQ,EAAE;2DACc"}
1
+ {"version":3,"file":"redemptionRedeem.request.dto.js","sourceRoot":"","sources":["../../../../../src/shared-lib/dto/redemption/redemptionRedeem.request.dto.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,MAAM,OAAO,0BAA0B;IACnC;;;;;;OAMG;IACH;;SAEK;IAOL,YAAY,CAAU;IAmBtB,UAAU,CAAiB;IAsB3B,OAAO,CAAkB;CAC5B;AA1CG;IANC,WAAW,CAAC;QACT,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,MAAM;KACf,CAAC;IACD,UAAU,EAAE;IACZ,MAAM,EAAE;gEACa;AAmBtB;IAjBC,WAAW,CAAC;QACT,WAAW,EAAE;;;;;;;;;;gFAU2D;QACxE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACjB,CAAC;IACD,eAAe,EAAE;IACjB,MAAM,EAAE;8DACkB;AAsB3B;IApBC,mBAAmB,CAAC;QACjB,WAAW,EAAE;;;;;;;;;;;;;mGAa8E;QAC3F,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE;KACpH,CAAC;IACD,aAAa,EAAE;IACf,QAAQ,EAAE;2DACc"}
@@ -1,3 +1,4 @@
1
+ import { BusinessTypeDTO } from '../dto/business/business-type.dto';
1
2
  /**
2
3
  * Minimal business info for eligible business selectors.
3
4
  *
@@ -13,5 +14,7 @@ export interface EligibleBusinessSummary {
13
14
  displayName: string;
14
15
  /** Optional logo/image URL */
15
16
  imageUrl?: string | null;
17
+ /** Business type (for filtering/grouping/display) */
18
+ businessType?: BusinessTypeDTO | null;
16
19
  }
17
20
  //# sourceMappingURL=eligible-business-summary.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
1
+ {"version":3,"file":"eligible-business-summary.interface.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/interfaces/eligible-business-summary.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IACpC,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CACzC"}
@@ -19,14 +19,15 @@
19
19
  *
20
20
  * ## Example Scenarios
21
21
  *
22
- * | Scenario | channel | medium | campaign | source |
23
- * |-----------------------------|-----------|------------|--------------|--------------|
24
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
25
- * | Mobile app registration | `mobile` | `app` | - | - |
26
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
27
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
28
- * | Admin creates user | `admin` | - | - | - |
29
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
22
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
23
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
24
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
25
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
26
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
27
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Partner API integration | `api` | - | - | - |
29
+ * | Admin creates user | `admin` | - | - | - |
30
+ * | Webhook from Stripe | `webhook` | - | - | - |
30
31
  *
31
32
  * @example
32
33
  * // Simple usage - just channel
@@ -43,6 +44,10 @@
43
44
  */
44
45
  /**
45
46
  * Primary ingestion channels for data source tracking.
47
+ *
48
+ * IMPORTANT:
49
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
50
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
46
51
  */
47
52
  export declare const DATA_SOURCE_CHANNELS: readonly ["web", "mobile", "api", "admin", "system", "import", "webhook", "sync", "migration", "unknown"];
48
53
  export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
@@ -51,11 +56,19 @@ export type DataSourceChannel = typeof DATA_SOURCE_CHANNELS[number];
51
56
  *
52
57
  * Provides both simple channel categorization and optional
53
58
  * detailed attribution fields for analytics.
59
+ *
60
+ * CHANNEL USAGE:
61
+ * - 'web': ANY browser (desktop/mobile) - check platform.deviceType and platform.browser
62
+ * - 'mobile': Native apps ONLY - check platform.app and platform.appVersion
63
+ * - Use platform field to get detailed device/environment information
54
64
  */
55
65
  export interface DataSource {
56
66
  /**
57
67
  * Primary ingestion channel.
58
68
  * Required field for basic source categorization.
69
+ *
70
+ * - 'web' = Browser (desktop or mobile) - use platform.deviceType to distinguish
71
+ * - 'mobile' = Native mobile app - requires platform.app to be set
59
72
  */
60
73
  channel: DataSourceChannel;
61
74
  /**
@@ -83,6 +96,19 @@ export interface DataSource {
83
96
  * SDK provides this - backend stores as-is.
84
97
  */
85
98
  platform?: Platform;
99
+ /**
100
+ * Source of platform data.
101
+ * Indicates whether platform info came from SDK headers or auto-detection.
102
+ *
103
+ * - 'sdk': Explicitly sent via x-platform header (authoritative, trusted)
104
+ * - 'auto': Parsed from User-Agent header (best-effort, may be inaccurate)
105
+ *
106
+ * Use this to:
107
+ * - Identify incomplete SDK integrations (platformSource='auto' or missing)
108
+ * - Filter for high-quality data (platformSource='sdk')
109
+ * - Track SDK adoption progress
110
+ */
111
+ platformSource?: 'sdk' | 'auto';
86
112
  }
87
113
  /**
88
114
  * Platform/device information for analytics.
@@ -135,17 +161,37 @@ export declare const KNOWN_SOURCE_DOMAINS: Record<string, string>;
135
161
  * detectSourceFromReferrer('https://partner.example.com') // 'example'
136
162
  */
137
163
  export declare function detectSourceFromReferrer(referrer?: string): string | undefined;
164
+ /**
165
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
166
+ *
167
+ * Extracts OS, browser, device type from standard User-Agent patterns.
168
+ * This is best-effort - SDK headers are authoritative.
169
+ *
170
+ * @param userAgent - User-Agent header value
171
+ * @returns Platform object with detected fields, or undefined if unparseable
172
+ *
173
+ * @example
174
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
175
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
176
+ */
177
+ export declare function parseUserAgentForPlatform(userAgent?: string): Platform | undefined;
138
178
  /**
139
179
  * Auto-detect channel from User-Agent string.
140
180
  *
181
+ * IMPORTANT DESIGN:
182
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
183
+ * - Native apps MUST send explicit x-source-channel: mobile header
184
+ * - Use platform.deviceType to distinguish mobile web from desktop web
185
+ *
141
186
  * @param userAgent - User-Agent header value
142
187
  * @param path - Optional request path for webhook detection
143
188
  * @returns Detected channel
144
189
  *
145
190
  * @example
146
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
147
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
191
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
192
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
148
193
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
194
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
149
195
  */
150
196
  export declare function detectChannelFromUserAgent(userAgent?: string, path?: string): DataSourceChannel;
151
197
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB,2GAWvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAE9E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAEjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyDvD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA8B9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAoB/F;AAMD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAuBrD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAEpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"data-source.type.d.ts","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
@@ -19,14 +19,15 @@
19
19
  *
20
20
  * ## Example Scenarios
21
21
  *
22
- * | Scenario | channel | medium | campaign | source |
23
- * |-----------------------------|-----------|------------|--------------|--------------|
24
- * | User clicks email link | `web` | `email` | `summer_promo`| `mailchimp` |
25
- * | Mobile app registration | `mobile` | `app` | - | - |
26
- * | Partner API integration | `api` | `affiliate`| - | `partner_xyz`|
27
- * | QR code scan in hotel | `mobile` | `referral` | `lobby_qr` | `qr_code` |
28
- * | Admin creates user | `admin` | - | - | - |
29
- * | Webhook from Stripe | `webhook` | - | - | `stripe` |
22
+ * | Scenario | channel | platform.deviceType | platform.app/browser | Notes |
23
+ * |-----------------------------|-----------|---------------------|----------------------|-------|
24
+ * | Desktop browser | `web` | `desktop` | `browser: Chrome` | - |
25
+ * | Mobile browser (Safari) | `web` | `phone` | `browser: Safari` | NOT 'mobile' channel |
26
+ * | Native iOS app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
27
+ * | Native Android app | `mobile` | `phone` | `app: MyApp` | Requires x-source-channel |
28
+ * | Partner API integration | `api` | - | - | - |
29
+ * | Admin creates user | `admin` | - | - | - |
30
+ * | Webhook from Stripe | `webhook` | - | - | - |
30
31
  *
31
32
  * @example
32
33
  * // Simple usage - just channel
@@ -43,10 +44,14 @@
43
44
  */
44
45
  /**
45
46
  * Primary ingestion channels for data source tracking.
47
+ *
48
+ * IMPORTANT:
49
+ * - 'web' = ANY browser (desktop OR mobile) - use platform.deviceType to distinguish
50
+ * - 'mobile' = Native apps ONLY (iOS/Android) - must include platform.app
46
51
  */
47
52
  export const DATA_SOURCE_CHANNELS = [
48
- 'web', // Web application/browser
49
- 'mobile', // Mobile app (iOS/Android)
53
+ 'web', // Web browser (desktop or mobile) - check platform.deviceType
54
+ 'mobile', // Native mobile app ONLY (iOS/Android) - requires platform.app
50
55
  'api', // Direct API integration
51
56
  'admin', // Admin panel/back-office
52
57
  'system', // System-generated (automated)
@@ -174,17 +179,114 @@ export function detectSourceFromReferrer(referrer) {
174
179
  return undefined;
175
180
  }
176
181
  }
182
+ /**
183
+ * Parse User-Agent string for platform information (fallback when SDK doesn't provide).
184
+ *
185
+ * Extracts OS, browser, device type from standard User-Agent patterns.
186
+ * This is best-effort - SDK headers are authoritative.
187
+ *
188
+ * @param userAgent - User-Agent header value
189
+ * @returns Platform object with detected fields, or undefined if unparseable
190
+ *
191
+ * @example
192
+ * parseUserAgentForPlatform('Mozilla/5.0 (iPhone; CPU iPhone OS 17_4...')
193
+ * // { os: 'iOS', osVersion: '17.4', browser: 'Safari', deviceType: 'phone' }
194
+ */
195
+ export function parseUserAgentForPlatform(userAgent) {
196
+ if (!userAgent)
197
+ return undefined;
198
+ const ua = userAgent;
199
+ const platform = {};
200
+ // Detect OS and device type
201
+ if (/iPhone|iPod/i.test(ua)) {
202
+ platform.os = 'iOS';
203
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
204
+ if (match)
205
+ platform.osVersion = `${match[1]}.${match[2]}`;
206
+ platform.deviceType = 'phone';
207
+ }
208
+ else if (/iPad/i.test(ua)) {
209
+ platform.os = 'iOS';
210
+ const match = ua.match(/OS (\d+)[_\.](\d+)/);
211
+ if (match)
212
+ platform.osVersion = `${match[1]}.${match[2]}`;
213
+ platform.deviceType = 'tablet';
214
+ }
215
+ else if (/Android/i.test(ua)) {
216
+ platform.os = 'Android';
217
+ const match = ua.match(/Android ([\d\.]+)/);
218
+ if (match)
219
+ platform.osVersion = match[1];
220
+ platform.deviceType = /Mobile/i.test(ua) ? 'phone' : 'tablet';
221
+ }
222
+ else if (/Windows NT/i.test(ua)) {
223
+ platform.os = 'Windows';
224
+ const match = ua.match(/Windows NT ([\d\.]+)/);
225
+ if (match)
226
+ platform.osVersion = match[1];
227
+ platform.deviceType = 'desktop';
228
+ }
229
+ else if (/Macintosh|Mac OS X/i.test(ua)) {
230
+ platform.os = 'macOS';
231
+ const match = ua.match(/Mac OS X ([\d_]+)/);
232
+ if (match)
233
+ platform.osVersion = match[1].replace(/_/g, '.');
234
+ platform.deviceType = 'desktop';
235
+ }
236
+ else if (/Linux/i.test(ua) && !/Android/i.test(ua)) {
237
+ platform.os = 'Linux';
238
+ platform.deviceType = 'desktop';
239
+ }
240
+ // Detect browser (web channel)
241
+ if (/Edg\//i.test(ua)) {
242
+ platform.browser = 'Edge';
243
+ const match = ua.match(/Edg\/([\d\.]+)/);
244
+ if (match)
245
+ platform.browserVersion = match[1];
246
+ }
247
+ else if (/Chrome\//i.test(ua) && !/Edg/i.test(ua)) {
248
+ platform.browser = 'Chrome';
249
+ const match = ua.match(/Chrome\/([\d\.]+)/);
250
+ if (match)
251
+ platform.browserVersion = match[1];
252
+ }
253
+ else if (/Safari\//i.test(ua) && !/Chrome/i.test(ua)) {
254
+ platform.browser = 'Safari';
255
+ const match = ua.match(/Version\/([\d\.]+)/);
256
+ if (match)
257
+ platform.browserVersion = match[1];
258
+ }
259
+ else if (/Firefox\//i.test(ua)) {
260
+ platform.browser = 'Firefox';
261
+ const match = ua.match(/Firefox\/([\d\.]+)/);
262
+ if (match)
263
+ platform.browserVersion = match[1];
264
+ }
265
+ else if (/Opera|OPR\//i.test(ua)) {
266
+ platform.browser = 'Opera';
267
+ const match = ua.match(/(?:Opera|OPR)\/([\d\.]+)/);
268
+ if (match)
269
+ platform.browserVersion = match[1];
270
+ }
271
+ return Object.keys(platform).length > 0 ? platform : undefined;
272
+ }
177
273
  /**
178
274
  * Auto-detect channel from User-Agent string.
179
275
  *
276
+ * IMPORTANT DESIGN:
277
+ * - Mobile browsers (Safari on iPhone, Chrome on Android) → 'web' (NOT 'mobile')
278
+ * - Native apps MUST send explicit x-source-channel: mobile header
279
+ * - Use platform.deviceType to distinguish mobile web from desktop web
280
+ *
180
281
  * @param userAgent - User-Agent header value
181
282
  * @param path - Optional request path for webhook detection
182
283
  * @returns Detected channel
183
284
  *
184
285
  * @example
185
- * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...)') // 'mobile'
186
- * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web'
286
+ * detectChannelFromUserAgent('Mozilla/5.0 (iPhone; ...) Safari') // 'web' (mobile browser)
287
+ * detectChannelFromUserAgent('Mozilla/5.0 (Windows NT...)') // 'web' (desktop browser)
187
288
  * detectChannelFromUserAgent('', '/webhook/stripe') // 'webhook'
289
+ * detectChannelFromUserAgent('MyApp/1.0') // 'unknown' (native app without header)
188
290
  */
189
291
  export function detectChannelFromUserAgent(userAgent, path) {
190
292
  // Check for webhook paths
@@ -192,16 +294,18 @@ export function detectChannelFromUserAgent(userAgent, path) {
192
294
  return 'webhook';
193
295
  }
194
296
  const ua = (userAgent || '').toLowerCase();
195
- // Check for mobile user-agents
196
- if (/mobile|android|iphone|ipad|ipod|blackberry|windows phone/i.test(ua)) {
197
- return 'mobile';
198
- }
199
297
  // Check for bot/crawler patterns (system)
200
298
  if (/bot|crawler|spider|scraper|curl|wget|python|node-fetch|axios/i.test(ua)) {
201
299
  return 'api';
202
300
  }
203
- // Default to web for browser-like user agents
204
- return 'web';
301
+ // Check for ANY browser pattern (desktop OR mobile)
302
+ // Mobile browsers are 'web' channel - use platform.deviceType to distinguish
303
+ if (ua && /mozilla|chrome|safari|firefox|edge|opera|msie|trident/i.test(ua)) {
304
+ return 'web';
305
+ }
306
+ // Unknown: Native apps MUST send x-source-channel: mobile header
307
+ // If we see 'unknown', it means SDK integration is incomplete
308
+ return 'unknown';
205
309
  }
206
310
  /**
207
311
  * Parse UTM parameters from a URL (deep link, referrer, etc.).
@@ -1 +1 @@
1
- {"version":3,"file":"data-source.type.js","sourceRoot":"","sources":["../../../../src/shared-lib/types/data-source.type.ts"],"names":[],"mappings":"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"}
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.190",
3
+ "version": "2.1.191",
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",