@volley/vwr-loader 1.1.0 → 1.3.0

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 (115) hide show
  1. package/README.md +7 -8
  2. package/dist/__mocks__/@datadog/browser-logs.d.ts +58 -0
  3. package/dist/__mocks__/@datadog/browser-logs.d.ts.map +1 -0
  4. package/dist/__mocks__/@datadog/browser-logs.js +34 -0
  5. package/dist/__mocks__/@datadog/browser-logs.js.map +1 -0
  6. package/dist/__mocks__/@datadog/browser-rum.d.ts +25 -0
  7. package/dist/__mocks__/@datadog/browser-rum.d.ts.map +1 -0
  8. package/dist/__mocks__/@datadog/browser-rum.js +25 -0
  9. package/dist/__mocks__/@datadog/browser-rum.js.map +1 -0
  10. package/dist/amplitudeFlagFetcher.d.ts +8 -3
  11. package/dist/amplitudeFlagFetcher.d.ts.map +1 -1
  12. package/dist/amplitudeFlagFetcher.js +14 -12
  13. package/dist/amplitudeFlagFetcher.js.map +1 -1
  14. package/dist/assets/intersection-observer-DAXvjMTZ.js +2 -0
  15. package/dist/assets/intersection-observer-DAXvjMTZ.js.map +1 -0
  16. package/dist/assets/profiler-BRmTNL9s.js +2 -0
  17. package/dist/assets/profiler-BRmTNL9s.js.map +1 -0
  18. package/dist/assets/resize-observer-DqyxKk7V.js +2 -0
  19. package/dist/assets/resize-observer-DqyxKk7V.js.map +1 -0
  20. package/dist/assets/startRecording-CuFdVhxx.js +3 -0
  21. package/dist/assets/startRecording-CuFdVhxx.js.map +1 -0
  22. package/dist/cli.js +42 -8
  23. package/dist/cli.js.map +1 -1
  24. package/dist/datadog.d.ts +19 -0
  25. package/dist/datadog.d.ts.map +1 -0
  26. package/dist/datadog.js +39 -0
  27. package/dist/datadog.js.map +1 -0
  28. package/dist/envDefaults.d.ts.map +1 -1
  29. package/dist/envDefaults.js +27 -2
  30. package/dist/envDefaults.js.map +1 -1
  31. package/dist/errors/InitializationError.d.ts +74 -0
  32. package/dist/errors/InitializationError.d.ts.map +1 -0
  33. package/dist/errors/InitializationError.js +77 -0
  34. package/dist/errors/InitializationError.js.map +1 -0
  35. package/dist/errors/ensureError.d.ts +2 -0
  36. package/dist/errors/ensureError.d.ts.map +1 -0
  37. package/dist/errors/ensureError.js +7 -0
  38. package/dist/errors/ensureError.js.map +1 -0
  39. package/dist/errors/index.d.ts +12 -0
  40. package/dist/errors/index.d.ts.map +1 -0
  41. package/dist/errors/index.js +10 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/exitHandler.d.ts +32 -0
  44. package/dist/exitHandler.d.ts.map +1 -0
  45. package/dist/exitHandler.js +113 -0
  46. package/dist/exitHandler.js.map +1 -0
  47. package/dist/getDeviceId.d.ts +1 -2
  48. package/dist/getDeviceId.d.ts.map +1 -1
  49. package/dist/getDeviceId.js +17 -15
  50. package/dist/getDeviceId.js.map +1 -1
  51. package/dist/getEnvironment.d.ts +1 -2
  52. package/dist/getEnvironment.d.ts.map +1 -1
  53. package/dist/getEnvironment.js +4 -4
  54. package/dist/getEnvironment.js.map +1 -1
  55. package/dist/getShellVersion.d.ts +1 -2
  56. package/dist/getShellVersion.d.ts.map +1 -1
  57. package/dist/getShellVersion.js +4 -4
  58. package/dist/getShellVersion.js.map +1 -1
  59. package/dist/index.d.ts +0 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/loadVwr.d.ts +4 -4
  63. package/dist/loadVwr.d.ts.map +1 -1
  64. package/dist/loadVwr.js +151 -37
  65. package/dist/loadVwr.js.map +1 -1
  66. package/dist/logger.d.ts +11 -6
  67. package/dist/logger.d.ts.map +1 -1
  68. package/dist/logger.js +107 -4
  69. package/dist/logger.js.map +1 -1
  70. package/dist/main.js +11 -1
  71. package/dist/main.js.map +1 -1
  72. package/dist/polyfills.d.ts +29 -0
  73. package/dist/polyfills.d.ts.map +1 -0
  74. package/dist/polyfills.js +32 -0
  75. package/dist/polyfills.js.map +1 -0
  76. package/dist/test-setup.d.ts +2 -0
  77. package/dist/test-setup.d.ts.map +1 -0
  78. package/dist/test-setup.js +5 -0
  79. package/dist/test-setup.js.map +1 -0
  80. package/dist/types.d.ts +4 -0
  81. package/dist/types.d.ts.map +1 -1
  82. package/dist/vwrConfig.d.ts +14 -2
  83. package/dist/vwrConfig.d.ts.map +1 -1
  84. package/dist/vwrConfig.js +74 -29
  85. package/dist/vwrConfig.js.map +1 -1
  86. package/package.json +61 -53
  87. package/src/__mocks__/@datadog/browser-logs.ts +35 -0
  88. package/src/__mocks__/@datadog/browser-rum.ts +27 -0
  89. package/src/amplitudeFlagFetcher.test.ts +28 -34
  90. package/src/amplitudeFlagFetcher.ts +22 -14
  91. package/src/datadog.ts +55 -0
  92. package/src/envDefaults.ts +32 -3
  93. package/src/errors/InitializationError.ts +105 -0
  94. package/src/errors/ensureError.ts +6 -0
  95. package/src/errors/index.ts +16 -0
  96. package/src/exitHandler.test.ts +179 -0
  97. package/src/exitHandler.ts +125 -0
  98. package/src/getDeviceId.test.ts +4 -5
  99. package/src/getDeviceId.ts +19 -18
  100. package/src/getEnvironment.test.ts +44 -106
  101. package/src/getEnvironment.ts +4 -5
  102. package/src/getShellVersion.test.ts +12 -6
  103. package/src/getShellVersion.ts +4 -7
  104. package/src/index.ts +0 -1
  105. package/src/loadVwr.test.ts +394 -0
  106. package/src/loadVwr.ts +243 -58
  107. package/src/logger.ts +118 -11
  108. package/src/main.test.ts +157 -0
  109. package/src/main.ts +99 -11
  110. package/src/polyfills.ts +32 -0
  111. package/src/test-setup.ts +5 -0
  112. package/src/types.ts +4 -0
  113. package/src/vite-env.d.ts +15 -1
  114. package/src/vwrConfig.test.ts +104 -34
  115. package/src/vwrConfig.ts +115 -37
@@ -1,4 +1,6 @@
1
- import { defaultLogger, type Logger } from "./logger"
1
+ import { v4 as uuidv4 } from "uuid"
2
+
3
+ import { logger } from "./logger"
2
4
  import type { LGDeviceIdResponse, MobileExtendedWindow } from "./types"
3
5
 
4
6
  /**
@@ -25,21 +27,18 @@ import type { LGDeviceIdResponse, MobileExtendedWindow } from "./types"
25
27
  * }
26
28
  * ```
27
29
  */
28
- export async function getDeviceId(
29
- platform: string,
30
- logger: Logger = defaultLogger
31
- ): Promise<string | null> {
30
+ export async function getDeviceId(platform: string): Promise<string | null> {
32
31
  const normalizedPlatform = platform.toUpperCase()
33
32
  switch (normalizedPlatform) {
34
33
  case "FIRE_TV":
35
- return await getFireTVDeviceId(logger)
34
+ return await getFireTVDeviceId()
36
35
  case "SAMSUNG_TV":
37
- return await getSamsungDeviceId(logger)
36
+ return await getSamsungDeviceId()
38
37
  case "LG_TV":
39
- return await getLGDeviceId(logger)
38
+ return await getLGDeviceId()
40
39
  case "ANDROID_MOBILE":
41
40
  case "IOS_MOBILE":
42
- return await getMobileDeviceId(logger)
41
+ return await getMobileDeviceId()
43
42
  case "WEB":
44
43
  return getLocalStorageDeviceId()
45
44
  default:
@@ -53,18 +52,20 @@ export async function getDeviceId(
53
52
  * Get or create device ID from localStorage (for Web platform)
54
53
  */
55
54
  function getLocalStorageDeviceId(): string {
56
- let deviceId = localStorage.getItem("volley_device_id")
57
- if (!deviceId) {
58
- deviceId = crypto.randomUUID()
59
- localStorage.setItem("volley_device_id", deviceId)
55
+ const existingDeviceId = localStorage.getItem("volley_device_id")
56
+ if (existingDeviceId) {
57
+ return existingDeviceId
60
58
  }
61
- return deviceId
59
+
60
+ const newDeviceId = uuidv4()
61
+ localStorage.setItem("volley_device_id", newDeviceId)
62
+ return newDeviceId
62
63
  }
63
64
 
64
65
  /**
65
66
  * Attempt to get device ID from Capacitor DeviceInfo plugin (FireTV)
66
67
  */
67
- async function getFireTVDeviceId(logger: Logger): Promise<string | null> {
68
+ async function getFireTVDeviceId(): Promise<string | null> {
68
69
  try {
69
70
  if (!window.Capacitor?.Plugins?.DeviceInfo?.getAndroidId) {
70
71
  return null
@@ -91,7 +92,7 @@ async function getFireTVDeviceId(logger: Logger): Promise<string | null> {
91
92
  * iOS exposes phoneDeviceId via window.iosAppContext
92
93
  * Android exposes phoneDeviceId via window.androidAppContext (also check window.top for iframes)
93
94
  */
94
- function getMobileDeviceId(logger: Logger): string | null {
95
+ function getMobileDeviceId(): string | null {
95
96
  // Try iOS first
96
97
  const iosId = (window as MobileExtendedWindow).iosAppContext?.phoneDeviceId
97
98
  if (iosId && iosId.trim()) {
@@ -126,7 +127,7 @@ function getMobileDeviceId(logger: Logger): string | null {
126
127
  /**
127
128
  * Attempt to get device ID from Samsung TV webapis
128
129
  */
129
- async function getSamsungDeviceId(logger: Logger): Promise<string | null> {
130
+ async function getSamsungDeviceId(): Promise<string | null> {
130
131
  try {
131
132
  if (!window.webapis?.productinfo?.getDuid) {
132
133
  return null
@@ -156,7 +157,7 @@ async function getSamsungDeviceId(logger: Logger): Promise<string | null> {
156
157
  */
157
158
  const LG_LUNA_SERVICE_TIMEOUT = 5000
158
159
 
159
- async function getLGDeviceId(logger: Logger): Promise<string | null> {
160
+ async function getLGDeviceId(): Promise<string | null> {
160
161
  if (!window.webOS?.service?.request) {
161
162
  const message = "LG webOS service request not available"
162
163
  logger.error(message)
@@ -1,19 +1,21 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
2
2
 
3
3
  import { type Environment, getEnvironment } from "./getEnvironment"
4
+ import { logger } from "./logger"
4
5
 
5
- describe("getEnvironment", () => {
6
- const mockLogger = {
6
+ vi.mock("./logger", () => ({
7
+ logger: {
7
8
  info: vi.fn(),
8
9
  warn: vi.fn(),
9
10
  error: vi.fn(),
10
- }
11
+ debug: vi.fn(),
12
+ child: vi.fn(),
13
+ },
14
+ }))
11
15
 
16
+ describe("getEnvironment", () => {
12
17
  beforeEach(() => {
13
18
  vi.clearAllMocks()
14
- mockLogger.info.mockClear()
15
- mockLogger.warn.mockClear()
16
- mockLogger.error.mockClear()
17
19
  // Clean up window properties
18
20
  delete (window as any).Capacitor
19
21
  })
@@ -42,15 +44,11 @@ describe("getEnvironment", () => {
42
44
  configurable: true,
43
45
  })
44
46
 
45
- const result = await getEnvironment(
46
- "FIRE_TV",
47
- undefined,
48
- mockLogger
49
- )
47
+ const result = await getEnvironment("FIRE_TV", undefined)
50
48
 
51
49
  expect(result.environment).toBe("dev")
52
50
  expect(result.source).toBe("native")
53
- expect(mockLogger.info).toHaveBeenCalledWith(
51
+ expect(logger.info).toHaveBeenCalledWith(
54
52
  expect.stringContaining(
55
53
  'Environment: "dev" (source: native BuildConfig.ENVIRONMENT="development")'
56
54
  )
@@ -74,11 +72,7 @@ describe("getEnvironment", () => {
74
72
  configurable: true,
75
73
  })
76
74
 
77
- const result = await getEnvironment(
78
- "FIRE_TV",
79
- undefined,
80
- mockLogger
81
- )
75
+ const result = await getEnvironment("FIRE_TV", undefined)
82
76
 
83
77
  expect(result.environment).toBe("prod")
84
78
  expect(result.source).toBe("native")
@@ -101,11 +95,7 @@ describe("getEnvironment", () => {
101
95
  configurable: true,
102
96
  })
103
97
 
104
- const result = await getEnvironment(
105
- "FIRE_TV",
106
- undefined,
107
- mockLogger
108
- )
98
+ const result = await getEnvironment("FIRE_TV", undefined)
109
99
 
110
100
  expect(result.environment).toBe("staging")
111
101
  expect(result.source).toBe("native")
@@ -128,11 +118,7 @@ describe("getEnvironment", () => {
128
118
  configurable: true,
129
119
  })
130
120
 
131
- const result = await getEnvironment(
132
- "FIRE_TV",
133
- undefined,
134
- mockLogger
135
- )
121
+ const result = await getEnvironment("FIRE_TV", undefined)
136
122
 
137
123
  expect(result.environment).toBe("staging")
138
124
  expect(result.source).toBe("native")
@@ -155,11 +141,7 @@ describe("getEnvironment", () => {
155
141
  configurable: true,
156
142
  })
157
143
 
158
- const result = await getEnvironment(
159
- "FIRE_TV",
160
- undefined,
161
- mockLogger
162
- )
144
+ const result = await getEnvironment("FIRE_TV", undefined)
163
145
 
164
146
  expect(result.environment).toBe("dev")
165
147
  expect(result.source).toBe("native")
@@ -182,11 +164,7 @@ describe("getEnvironment", () => {
182
164
  configurable: true,
183
165
  })
184
166
 
185
- const result = await getEnvironment(
186
- "FIRE_TV",
187
- undefined,
188
- mockLogger
189
- )
167
+ const result = await getEnvironment("FIRE_TV", undefined)
190
168
 
191
169
  expect(result.environment).toBe("dev")
192
170
  expect(result.source).toBe("native")
@@ -194,15 +172,11 @@ describe("getEnvironment", () => {
194
172
 
195
173
  it("should fallback to build-time when native plugin unavailable", async () => {
196
174
  // No Capacitor plugin available
197
- const result = await getEnvironment(
198
- "FIRE_TV",
199
- "staging",
200
- mockLogger
201
- )
175
+ const result = await getEnvironment("FIRE_TV", "staging")
202
176
 
203
177
  expect(result.environment).toBe("staging")
204
178
  expect(result.source).toBe("build-time")
205
- expect(mockLogger.warn).toHaveBeenCalledWith(
179
+ expect(logger.warn).toHaveBeenCalledWith(
206
180
  expect.stringContaining(
207
181
  "Failed to read environment from native, falling back to build-time"
208
182
  )
@@ -226,12 +200,12 @@ describe("getEnvironment", () => {
226
200
  configurable: true,
227
201
  })
228
202
 
229
- const result = await getEnvironment("FIRE_TV", "prod", mockLogger)
203
+ const result = await getEnvironment("FIRE_TV", "prod")
230
204
 
231
205
  expect(result.environment).toBe("prod")
232
206
  expect(result.source).toBe("build-time")
233
- expect(mockLogger.error).toHaveBeenCalled()
234
- expect(mockLogger.warn).toHaveBeenCalledWith(
207
+ expect(logger.error).toHaveBeenCalled()
208
+ expect(logger.warn).toHaveBeenCalledWith(
235
209
  expect.stringContaining("falling back to build-time")
236
210
  )
237
211
  })
@@ -253,11 +227,11 @@ describe("getEnvironment", () => {
253
227
  configurable: true,
254
228
  })
255
229
 
256
- const result = await getEnvironment("FIRE_TV", "dev", mockLogger)
230
+ const result = await getEnvironment("FIRE_TV", "dev")
257
231
 
258
232
  expect(result.environment).toBe("dev")
259
233
  expect(result.source).toBe("build-time")
260
- expect(mockLogger.error).toHaveBeenCalledWith(
234
+ expect(logger.error).toHaveBeenCalledWith(
261
235
  expect.stringContaining(
262
236
  "DeviceInfo.getNativeShellAppEnvironment returned empty"
263
237
  )
@@ -266,15 +240,11 @@ describe("getEnvironment", () => {
266
240
 
267
241
  it("should fallback to default when both native and build-time fail", async () => {
268
242
  // No Capacitor plugin, no build-time env
269
- const result = await getEnvironment(
270
- "FIRE_TV",
271
- undefined,
272
- mockLogger
273
- )
243
+ const result = await getEnvironment("FIRE_TV", undefined)
274
244
 
275
245
  expect(result.environment).toBe("dev")
276
246
  expect(result.source).toBe("default")
277
- expect(mockLogger.warn).toHaveBeenCalledWith(
247
+ expect(logger.warn).toHaveBeenCalledWith(
278
248
  expect.stringContaining(
279
249
  'Environment: "dev" (source: default fallback'
280
250
  )
@@ -298,16 +268,8 @@ describe("getEnvironment", () => {
298
268
  configurable: true,
299
269
  })
300
270
 
301
- const result1 = await getEnvironment(
302
- "fire_tv",
303
- undefined,
304
- mockLogger
305
- )
306
- const result2 = await getEnvironment(
307
- "FIRE_TV",
308
- undefined,
309
- mockLogger
310
- )
271
+ const result1 = await getEnvironment("fire_tv", undefined)
272
+ const result2 = await getEnvironment("FIRE_TV", undefined)
311
273
 
312
274
  expect(result1.environment).toBe("prod")
313
275
  expect(result2.environment).toBe("prod")
@@ -320,15 +282,11 @@ describe("getEnvironment", () => {
320
282
  platforms.forEach((platform) => {
321
283
  describe(`${platform}`, () => {
322
284
  it("should use build-time environment when provided", async () => {
323
- const result = await getEnvironment(
324
- platform,
325
- "staging",
326
- mockLogger
327
- )
285
+ const result = await getEnvironment(platform, "staging")
328
286
 
329
287
  expect(result.environment).toBe("staging")
330
288
  expect(result.source).toBe("build-time")
331
- expect(mockLogger.info).toHaveBeenCalledWith(
289
+ expect(logger.info).toHaveBeenCalledWith(
332
290
  expect.stringContaining(
333
291
  'Environment: "staging" (source: build-time CLI injection)'
334
292
  )
@@ -336,48 +294,32 @@ describe("getEnvironment", () => {
336
294
  })
337
295
 
338
296
  it("should use build-time 'prod' environment", async () => {
339
- const result = await getEnvironment(
340
- platform,
341
- "prod",
342
- mockLogger
343
- )
297
+ const result = await getEnvironment(platform, "prod")
344
298
 
345
299
  expect(result.environment).toBe("prod")
346
300
  expect(result.source).toBe("build-time")
347
301
  })
348
302
 
349
303
  it("should use build-time 'dev' environment", async () => {
350
- const result = await getEnvironment(
351
- platform,
352
- "dev",
353
- mockLogger
354
- )
304
+ const result = await getEnvironment(platform, "dev")
355
305
 
356
306
  expect(result.environment).toBe("dev")
357
307
  expect(result.source).toBe("build-time")
358
308
  })
359
309
 
360
310
  it("should use build-time 'local' environment", async () => {
361
- const result = await getEnvironment(
362
- platform,
363
- "local",
364
- mockLogger
365
- )
311
+ const result = await getEnvironment(platform, "local")
366
312
 
367
313
  expect(result.environment).toBe("local")
368
314
  expect(result.source).toBe("build-time")
369
315
  })
370
316
 
371
317
  it("should fallback to default when build-time not provided", async () => {
372
- const result = await getEnvironment(
373
- platform,
374
- undefined,
375
- mockLogger
376
- )
318
+ const result = await getEnvironment(platform, undefined)
377
319
 
378
320
  expect(result.environment).toBe("dev")
379
321
  expect(result.source).toBe("default")
380
- expect(mockLogger.warn).toHaveBeenCalledWith(
322
+ expect(logger.warn).toHaveBeenCalledWith(
381
323
  expect.stringContaining(
382
324
  'Environment: "dev" (source: default fallback'
383
325
  )
@@ -385,11 +327,7 @@ describe("getEnvironment", () => {
385
327
  })
386
328
 
387
329
  it("should fallback to default when build-time is invalid", async () => {
388
- const result = await getEnvironment(
389
- platform,
390
- "invalid-env",
391
- mockLogger
392
- )
330
+ const result = await getEnvironment(platform, "invalid-env")
393
331
 
394
332
  expect(result.environment).toBe("dev")
395
333
  expect(result.source).toBe("default")
@@ -403,7 +341,7 @@ describe("getEnvironment", () => {
403
341
  const validEnvs: Environment[] = ["local", "dev", "staging", "prod"]
404
342
 
405
343
  for (const env of validEnvs) {
406
- const result = await getEnvironment("WEB", env, mockLogger)
344
+ const result = await getEnvironment("WEB", env)
407
345
  expect(result.environment).toBe(env)
408
346
  expect(result.source).toBe("build-time")
409
347
  }
@@ -420,7 +358,7 @@ describe("getEnvironment", () => {
420
358
  ]
421
359
 
422
360
  for (const env of invalidEnvs) {
423
- const result = await getEnvironment("WEB", env, mockLogger)
361
+ const result = await getEnvironment("WEB", env)
424
362
  expect(result.environment).toBe("dev")
425
363
  expect(result.source).toBe("default")
426
364
  }
@@ -445,33 +383,33 @@ describe("getEnvironment", () => {
445
383
  configurable: true,
446
384
  })
447
385
 
448
- await getEnvironment("FIRE_TV", undefined, mockLogger)
386
+ await getEnvironment("FIRE_TV", undefined)
449
387
 
450
- expect(mockLogger.info).toHaveBeenCalledWith(
388
+ expect(logger.info).toHaveBeenCalledWith(
451
389
  '[Shell] Environment: "prod" (source: native BuildConfig.ENVIRONMENT="production")'
452
390
  )
453
391
  })
454
392
 
455
393
  it("should log build-time environment source", async () => {
456
- await getEnvironment("SAMSUNG_TV", "staging", mockLogger)
394
+ await getEnvironment("SAMSUNG_TV", "staging")
457
395
 
458
- expect(mockLogger.info).toHaveBeenCalledWith(
396
+ expect(logger.info).toHaveBeenCalledWith(
459
397
  '[Shell] Environment: "staging" (source: build-time CLI injection)'
460
398
  )
461
399
  })
462
400
 
463
401
  it("should warn when falling back to default", async () => {
464
- await getEnvironment("LG_TV", undefined, mockLogger)
402
+ await getEnvironment("LG_TV", undefined)
465
403
 
466
- expect(mockLogger.warn).toHaveBeenCalledWith(
404
+ expect(logger.warn).toHaveBeenCalledWith(
467
405
  '[Shell] Environment: "dev" (source: default fallback - no native or build-time env found)'
468
406
  )
469
407
  })
470
408
 
471
409
  it("should warn when native fails and falls back", async () => {
472
- await getEnvironment("FIRE_TV", "prod", mockLogger)
410
+ await getEnvironment("FIRE_TV", "prod")
473
411
 
474
- expect(mockLogger.warn).toHaveBeenCalledWith(
412
+ expect(logger.warn).toHaveBeenCalledWith(
475
413
  "[Shell] Failed to read environment from native, falling back to build-time"
476
414
  )
477
415
  })
@@ -1,4 +1,4 @@
1
- import { defaultLogger, type Logger } from "./logger"
1
+ import { logger } from "./logger"
2
2
 
3
3
  export type Environment = "local" | "dev" | "staging" | "prod"
4
4
  export type EnvironmentSource = "native" | "build-time" | "default"
@@ -26,14 +26,13 @@ export interface EnvironmentResult {
26
26
  */
27
27
  export async function getEnvironment(
28
28
  platform: string,
29
- buildTimeEnv: string | undefined,
30
- logger: Logger = defaultLogger
29
+ buildTimeEnv: string | undefined
31
30
  ): Promise<EnvironmentResult> {
32
31
  const normalizedPlatform = platform.toUpperCase()
33
32
 
34
33
  // For Fire TV, try to read from native first (safest - prevents env mismatch)
35
34
  if (normalizedPlatform === "FIRE_TV") {
36
- const nativeEnv = await getFireTVEnvironment(logger)
35
+ const nativeEnv = await getFireTVEnvironment()
37
36
  if (nativeEnv) {
38
37
  const mapped = mapNativeEnvironment(nativeEnv)
39
38
  logger.info(
@@ -72,7 +71,7 @@ export async function getEnvironment(
72
71
  /**
73
72
  * Read environment from Fire TV native shell via Capacitor plugin.
74
73
  */
75
- async function getFireTVEnvironment(logger: Logger): Promise<string | null> {
74
+ async function getFireTVEnvironment(): Promise<string | null> {
76
75
  try {
77
76
  if (
78
77
  !window.Capacitor?.Plugins?.DeviceInfo?.getNativeShellAppEnvironment
@@ -1,6 +1,17 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
2
2
 
3
3
  import { getShellVersion } from "./getShellVersion"
4
+ import { logger } from "./logger"
5
+
6
+ vi.mock("./logger", () => ({
7
+ logger: {
8
+ info: vi.fn(),
9
+ warn: vi.fn(),
10
+ error: vi.fn(),
11
+ debug: vi.fn(),
12
+ child: vi.fn(),
13
+ },
14
+ }))
4
15
 
5
16
  describe("getShellVersion", () => {
6
17
  const originalLocation = window.location
@@ -369,10 +380,6 @@ describe("getShellVersion", () => {
369
380
 
370
381
  describe("Error Handling", () => {
371
382
  it("returns unknown and logs warning on error", async () => {
372
- const consoleWarnSpy = vi
373
- .spyOn(console, "warn")
374
- .mockImplementation(() => {})
375
-
376
383
  // Force an error by making tizen.application.getAppInfo throw
377
384
  ;(window as any).tizen = {
378
385
  application: {
@@ -385,12 +392,11 @@ describe("getShellVersion", () => {
385
392
  const version = await getShellVersion("SAMSUNG_TV")
386
393
 
387
394
  expect(version).toBe("unknown")
388
- expect(consoleWarnSpy).toHaveBeenCalledWith(
395
+ expect(logger.warn).toHaveBeenCalledWith(
389
396
  "[Shell] Failed to get shell version:",
390
397
  { error: expect.any(Error) }
391
398
  )
392
399
 
393
- consoleWarnSpy.mockRestore()
394
400
  delete (window as any).tizen
395
401
  })
396
402
  })
@@ -1,4 +1,4 @@
1
- import { defaultLogger, type Logger } from "./logger"
1
+ import { logger } from "./logger"
2
2
  import type { MobileExtendedWindow } from "./types"
3
3
 
4
4
  /**
@@ -15,10 +15,7 @@ import type { MobileExtendedWindow } from "./types"
15
15
  * @param logger - Optional logger for warning reporting. Defaults to defaultLogger.
16
16
  * @returns Shell version string or 'unknown' if not available
17
17
  */
18
- export async function getShellVersion(
19
- platform: string,
20
- logger: Logger = defaultLogger
21
- ): Promise<string> {
18
+ export async function getShellVersion(platform: string): Promise<string> {
22
19
  try {
23
20
  const normalizedPlatform = platform.toUpperCase()
24
21
 
@@ -71,7 +68,7 @@ export async function getShellVersion(
71
68
  normalizedPlatform === "ANDROID_MOBILE" ||
72
69
  normalizedPlatform === "IOS_MOBILE"
73
70
  ) {
74
- return getMobileAppVersion(logger)
71
+ return getMobileAppVersion()
75
72
  }
76
73
 
77
74
  // Web platform: Check for injected version at build time
@@ -99,7 +96,7 @@ export async function getShellVersion(
99
96
  * iOS exposes appVersion via window.iosAppContext
100
97
  * Android exposes appVersion via window.androidAppContext (also check window.top for iframes)
101
98
  */
102
- function getMobileAppVersion(logger: Logger): string {
99
+ function getMobileAppVersion(): string {
103
100
  // Try iOS first
104
101
  const iosVersion = (window as MobileExtendedWindow).iosAppContext
105
102
  ?.appVersion
package/src/index.ts CHANGED
@@ -2,7 +2,6 @@ export type { AmplitudeConfig, FlagResult } from "./amplitudeFlagFetcher"
2
2
  export { fetchAmplitudeFlags } from "./amplitudeFlagFetcher"
3
3
  export { getDeviceId } from "./getDeviceId"
4
4
  export { getShellVersion } from "./getShellVersion"
5
- export type { Logger } from "./loadVwr"
6
5
  export { loadVwr } from "./loadVwr"
7
6
  export type { VWRConfig, VWRConfigRequest } from "./vwrConfig"
8
7
  export { getVWRConfig } from "./vwrConfig"