@volley/vwr-loader 1.5.0 → 1.6.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 (151) hide show
  1. package/dist/cli.js +37 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/main.js +11 -11
  4. package/dist/main.js.map +1 -1
  5. package/dist/{datadog.d.ts → vwr/src/datadog.d.ts} +7 -3
  6. package/dist/vwr/src/datadog.d.ts.map +1 -0
  7. package/dist/{datadog.js → vwr/src/datadog.js} +6 -5
  8. package/dist/vwr/src/datadog.js.map +1 -0
  9. package/dist/{envDefaults.d.ts → vwr/src/envDefaults.d.ts} +1 -0
  10. package/dist/vwr/src/envDefaults.d.ts.map +1 -0
  11. package/dist/{envDefaults.js → vwr/src/envDefaults.js} +26 -0
  12. package/dist/vwr/src/envDefaults.js.map +1 -0
  13. package/dist/vwr/src/logger.d.ts +15 -0
  14. package/dist/vwr/src/logger.d.ts.map +1 -0
  15. package/dist/{logger.js → vwr/src/logger.js} +30 -46
  16. package/dist/vwr/src/logger.js.map +1 -0
  17. package/dist/vwr/src/native/device-info/getDeviceId.d.ts +13 -0
  18. package/dist/vwr/src/native/device-info/getDeviceId.d.ts.map +1 -0
  19. package/dist/vwr/src/native/device-info/getDeviceId.js +137 -0
  20. package/dist/vwr/src/native/device-info/getDeviceId.js.map +1 -0
  21. package/dist/{vwrConfig.d.ts → vwr/src/vwrConfig.d.ts} +5 -0
  22. package/dist/vwr/src/vwrConfig.d.ts.map +1 -0
  23. package/dist/{vwrConfig.js → vwr/src/vwrConfig.js} +13 -5
  24. package/dist/vwr/src/vwrConfig.js.map +1 -0
  25. package/dist/vwr-loader/src/__mocks__/@datadog/browser-logs.d.ts.map +1 -0
  26. package/dist/vwr-loader/src/__mocks__/@datadog/browser-logs.js.map +1 -0
  27. package/dist/vwr-loader/src/__mocks__/@datadog/browser-rum.d.ts.map +1 -0
  28. package/dist/vwr-loader/src/__mocks__/@datadog/browser-rum.js.map +1 -0
  29. package/dist/vwr-loader/src/__mocks__/vwrModule.d.ts.map +1 -0
  30. package/dist/vwr-loader/src/__mocks__/vwrModule.js.map +1 -0
  31. package/dist/vwr-loader/src/amplitudeFlagFetcher.d.ts.map +1 -0
  32. package/dist/vwr-loader/src/amplitudeFlagFetcher.js.map +1 -0
  33. package/dist/vwr-loader/src/errors/InitializationError.d.ts.map +1 -0
  34. package/dist/vwr-loader/src/errors/InitializationError.js.map +1 -0
  35. package/dist/vwr-loader/src/errors/ensureError.d.ts.map +1 -0
  36. package/dist/vwr-loader/src/errors/ensureError.js.map +1 -0
  37. package/dist/vwr-loader/src/errors/index.d.ts.map +1 -0
  38. package/dist/vwr-loader/src/errors/index.js.map +1 -0
  39. package/dist/vwr-loader/src/exitHandler.d.ts.map +1 -0
  40. package/dist/{exitHandler.js → vwr-loader/src/exitHandler.js} +2 -3
  41. package/dist/vwr-loader/src/exitHandler.js.map +1 -0
  42. package/dist/vwr-loader/src/getEnvironment.d.ts.map +1 -0
  43. package/dist/vwr-loader/src/getEnvironment.js.map +1 -0
  44. package/dist/vwr-loader/src/getShellVersion.d.ts.map +1 -0
  45. package/dist/vwr-loader/src/getShellVersion.js.map +1 -0
  46. package/dist/vwr-loader/src/index.d.ts +8 -0
  47. package/dist/vwr-loader/src/index.d.ts.map +1 -0
  48. package/dist/vwr-loader/src/index.js +6 -0
  49. package/dist/vwr-loader/src/index.js.map +1 -0
  50. package/dist/vwr-loader/src/loadVwr.d.ts.map +1 -0
  51. package/dist/{loadVwr.js → vwr-loader/src/loadVwr.js} +9 -6
  52. package/dist/vwr-loader/src/loadVwr.js.map +1 -0
  53. package/dist/vwr-loader/src/logger.d.ts +4 -0
  54. package/dist/vwr-loader/src/logger.d.ts.map +1 -0
  55. package/dist/vwr-loader/src/logger.js +10 -0
  56. package/dist/vwr-loader/src/logger.js.map +1 -0
  57. package/dist/vwr-loader/src/main.d.ts +2 -0
  58. package/dist/vwr-loader/src/main.d.ts.map +1 -0
  59. package/dist/vwr-loader/src/main.js +96 -0
  60. package/dist/vwr-loader/src/main.js.map +1 -0
  61. package/dist/vwr-loader/src/polyfills.d.ts.map +1 -0
  62. package/dist/vwr-loader/src/polyfills.js.map +1 -0
  63. package/dist/{test-setup.d.ts.map → vwr-loader/src/test-setup.d.ts.map} +1 -1
  64. package/dist/vwr-loader/src/test-setup.js.map +1 -0
  65. package/package.json +10 -8
  66. package/src/exitHandler.test.ts +44 -0
  67. package/src/exitHandler.ts +4 -3
  68. package/src/getShellVersion.ts +2 -1
  69. package/src/index.ts +3 -3
  70. package/src/loadVwr.test.ts +10 -5
  71. package/src/loadVwr.ts +18 -12
  72. package/src/logger.ts +5 -115
  73. package/src/main.ts +3 -2
  74. package/src/vite-env.d.ts +1 -0
  75. package/dist/__mocks__/@datadog/browser-logs.d.ts.map +0 -1
  76. package/dist/__mocks__/@datadog/browser-logs.js.map +0 -1
  77. package/dist/__mocks__/@datadog/browser-rum.d.ts.map +0 -1
  78. package/dist/__mocks__/@datadog/browser-rum.js.map +0 -1
  79. package/dist/__mocks__/vwrModule.d.ts.map +0 -1
  80. package/dist/__mocks__/vwrModule.js.map +0 -1
  81. package/dist/amplitudeFlagFetcher.d.ts.map +0 -1
  82. package/dist/amplitudeFlagFetcher.js.map +0 -1
  83. package/dist/datadog.d.ts.map +0 -1
  84. package/dist/datadog.js.map +0 -1
  85. package/dist/envDefaults.d.ts.map +0 -1
  86. package/dist/envDefaults.js.map +0 -1
  87. package/dist/errors/InitializationError.d.ts.map +0 -1
  88. package/dist/errors/InitializationError.js.map +0 -1
  89. package/dist/errors/ensureError.d.ts.map +0 -1
  90. package/dist/errors/ensureError.js.map +0 -1
  91. package/dist/errors/index.d.ts.map +0 -1
  92. package/dist/errors/index.js.map +0 -1
  93. package/dist/exitHandler.d.ts.map +0 -1
  94. package/dist/exitHandler.js.map +0 -1
  95. package/dist/getDeviceId.d.ts +0 -26
  96. package/dist/getDeviceId.d.ts.map +0 -1
  97. package/dist/getDeviceId.js +0 -209
  98. package/dist/getDeviceId.js.map +0 -1
  99. package/dist/getEnvironment.d.ts.map +0 -1
  100. package/dist/getEnvironment.js.map +0 -1
  101. package/dist/getShellVersion.d.ts.map +0 -1
  102. package/dist/getShellVersion.js.map +0 -1
  103. package/dist/index.d.ts +0 -8
  104. package/dist/index.d.ts.map +0 -1
  105. package/dist/index.js +0 -6
  106. package/dist/index.js.map +0 -1
  107. package/dist/loadVwr.d.ts.map +0 -1
  108. package/dist/loadVwr.js.map +0 -1
  109. package/dist/logger.d.ts +0 -12
  110. package/dist/logger.d.ts.map +0 -1
  111. package/dist/logger.js.map +0 -1
  112. package/dist/polyfills.d.ts.map +0 -1
  113. package/dist/polyfills.js.map +0 -1
  114. package/dist/test-setup.js.map +0 -1
  115. package/dist/types.d.ts +0 -103
  116. package/dist/types.d.ts.map +0 -1
  117. package/dist/types.js +0 -5
  118. package/dist/types.js.map +0 -1
  119. package/dist/vwrConfig.d.ts.map +0 -1
  120. package/dist/vwrConfig.js.map +0 -1
  121. package/src/datadog.ts +0 -55
  122. package/src/envDefaults.ts +0 -94
  123. package/src/getDeviceId.test.ts +0 -298
  124. package/src/getDeviceId.ts +0 -224
  125. package/src/types.ts +0 -105
  126. package/src/vwrConfig.test.ts +0 -386
  127. package/src/vwrConfig.ts +0 -374
  128. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/@datadog/browser-logs.d.ts +0 -0
  129. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/@datadog/browser-logs.js +0 -0
  130. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/@datadog/browser-rum.d.ts +0 -0
  131. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/@datadog/browser-rum.js +0 -0
  132. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/vwrModule.d.ts +0 -0
  133. /package/dist/{__mocks__ → vwr-loader/src/__mocks__}/vwrModule.js +0 -0
  134. /package/dist/{amplitudeFlagFetcher.d.ts → vwr-loader/src/amplitudeFlagFetcher.d.ts} +0 -0
  135. /package/dist/{amplitudeFlagFetcher.js → vwr-loader/src/amplitudeFlagFetcher.js} +0 -0
  136. /package/dist/{errors → vwr-loader/src/errors}/InitializationError.d.ts +0 -0
  137. /package/dist/{errors → vwr-loader/src/errors}/InitializationError.js +0 -0
  138. /package/dist/{errors → vwr-loader/src/errors}/ensureError.d.ts +0 -0
  139. /package/dist/{errors → vwr-loader/src/errors}/ensureError.js +0 -0
  140. /package/dist/{errors → vwr-loader/src/errors}/index.d.ts +0 -0
  141. /package/dist/{errors → vwr-loader/src/errors}/index.js +0 -0
  142. /package/dist/{exitHandler.d.ts → vwr-loader/src/exitHandler.d.ts} +0 -0
  143. /package/dist/{getEnvironment.d.ts → vwr-loader/src/getEnvironment.d.ts} +0 -0
  144. /package/dist/{getEnvironment.js → vwr-loader/src/getEnvironment.js} +0 -0
  145. /package/dist/{getShellVersion.d.ts → vwr-loader/src/getShellVersion.d.ts} +0 -0
  146. /package/dist/{getShellVersion.js → vwr-loader/src/getShellVersion.js} +0 -0
  147. /package/dist/{loadVwr.d.ts → vwr-loader/src/loadVwr.d.ts} +0 -0
  148. /package/dist/{polyfills.d.ts → vwr-loader/src/polyfills.d.ts} +0 -0
  149. /package/dist/{polyfills.js → vwr-loader/src/polyfills.js} +0 -0
  150. /package/dist/{test-setup.d.ts → vwr-loader/src/test-setup.d.ts} +0 -0
  151. /package/dist/{test-setup.js → vwr-loader/src/test-setup.js} +0 -0
package/dist/cli.js CHANGED
@@ -6,6 +6,32 @@ import os from "os";
6
6
  import path from "path";
7
7
  import { fileURLToPath } from "url";
8
8
  import { build } from "vite";
9
+ const DEFAULT_SHELL_ORIGINS = [
10
+ "file://",
11
+ // Samsung
12
+ "file://com.volley.lgshell.local-webos",
13
+ // LG local
14
+ "file://com.volley.lgshell.dev-webos",
15
+ // LG dev
16
+ "file://com.volley.lgshell.dev.720p-webos",
17
+ // LG dev 720p
18
+ "file://com.volley.lgshell.staging-webos",
19
+ // LG staging
20
+ "file://com.volley.lgshell.staging.720p-webos",
21
+ // LG staging 720p
22
+ "file://com.volley.lgshell.prod-webos",
23
+ // LG prod (alpha test)
24
+ "file://com.volley.lgshell.720p-webos",
25
+ // LG prod 720p (alpha test)
26
+ "file://com.volley.lgshell-webos",
27
+ // LG prod (formal release)
28
+ "https://localhost",
29
+ // FireTV
30
+ "https://appassets.androidplatform.net",
31
+ // Android WebView
32
+ "app://local"
33
+ // iOS WebView
34
+ ];
9
35
  const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/";
10
36
  const CONFIG_FILE_DEFAULT = "vwrConfig.json";
11
37
  const VWR_DEFAULT_VERSION = "1.0.0";
@@ -18,7 +44,8 @@ const prodConfig = {
18
44
  platformApiUrl: "https://platform.volley-services.net",
19
45
  platformAuthApiUrl: "https://auth.volley.tv",
20
46
  amplitudeKey: "",
21
- trustedOrigins: ["https://volley.tv", "https://vl.ly", "https://vly.gg"]
47
+ trustedOrigins: ["https://volley.tv", "https://vl.ly", "https://vly.gg"],
48
+ trustedShellOrigins: DEFAULT_SHELL_ORIGINS
22
49
  };
23
50
  const ENV_DEFAULTS = {
24
51
  local: {
@@ -36,6 +63,11 @@ const ENV_DEFAULTS = {
36
63
  "https://dev.vl.ly",
37
64
  "https://staging.vl.ly",
38
65
  "https://vly.gg"
66
+ ],
67
+ trustedShellOrigins: [
68
+ ...DEFAULT_SHELL_ORIGINS,
69
+ "http://localhost:5173",
70
+ "http://localhost:5174"
39
71
  ]
40
72
  },
41
73
  dev: {
@@ -52,7 +84,8 @@ const ENV_DEFAULTS = {
52
84
  "https://dev.vl.ly",
53
85
  "https://staging.vl.ly",
54
86
  "https://vly.gg"
55
- ]
87
+ ],
88
+ trustedShellOrigins: DEFAULT_SHELL_ORIGINS
56
89
  },
57
90
  staging: {
58
91
  hubUrl: "https://game-clients-staging.volley.tv/hub",
@@ -67,7 +100,8 @@ const ENV_DEFAULTS = {
67
100
  "https://vl.ly",
68
101
  "https://staging.vl.ly",
69
102
  "https://vly.gg"
70
- ]
103
+ ],
104
+ trustedShellOrigins: DEFAULT_SHELL_ORIGINS
71
105
  },
72
106
  prod: prodConfig,
73
107
  production: prodConfig
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/envDefaults.ts","../scripts/build.ts"],"sourcesContent":["export interface EnvConfig {\n hubUrl: string\n vwrUrl: string\n configUrl: string\n configFile: string\n platformApiUrl: string\n platformAuthApiUrl: string\n amplitudeKey: string // Used for amplitude flag fetch, not part of VWRConfig\n trustedOrigins?: string[]\n}\n\nconst CONFIG_URL_DEFAULT = \"https://vwr.volley.tv/config/\"\nconst CONFIG_FILE_DEFAULT = \"vwrConfig.json\"\nconst VWR_DEFAULT_VERSION = \"1.0.0\"\nconst VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`\n\n// Parse comma-separated env var, returning undefined if empty to allow fallback\nconst parseTrustedOrigins = (\n envVar: string | undefined\n): string[] | undefined => {\n const parsed = envVar?.split(\",\").filter(Boolean)\n return parsed?.length ? parsed : undefined\n}\n\nconst prodConfig: EnvConfig = {\n hubUrl: \"https://game-clients.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform.volley-services.net\",\n platformAuthApiUrl: \"https://auth.volley.tv\",\n amplitudeKey: \"\",\n trustedOrigins: [\"https://volley.tv\", \"https://vl.ly\", \"https://vly.gg\"],\n}\n\nexport const ENV_DEFAULTS: Record<string, EnvConfig> = {\n local: {\n hubUrl: import.meta.env.VITE_HUB_URL || \"http://localhost:5173\",\n vwrUrl: import.meta.env.VITE_VWR_URL || \"http://localhost:5174/vwr.js\",\n configUrl:\n import.meta.env.VITE_CONFIG_URL || \"http://localhost:5174/config/\",\n configFile: import.meta.env.VITE_CONFIG_FILE || CONFIG_FILE_DEFAULT,\n platformApiUrl:\n import.meta.env.VITE_PLATFORM_API_URL ||\n \"https://platform-dev.volley-services.net\",\n platformAuthApiUrl:\n import.meta.env.VITE_PLATFORM_AUTH_API_URL ||\n \"https://auth-dev.volley.tv\",\n amplitudeKey: \"client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ\",\n trustedOrigins: parseTrustedOrigins(\n import.meta.env.VITE_TRUSTED_ORIGINS\n ) || [\n \"http://localhost:5173\",\n \"http://localhost:5174\",\n \"https://vl.ly\",\n \"https://dev.vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n },\n dev: {\n hubUrl: \"https://game-clients-dev.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform-dev.volley-services.net\",\n platformAuthApiUrl: \"https://auth-dev.volley.tv\",\n amplitudeKey: \"client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ\",\n trustedOrigins: [\n \"https://volley.tv\",\n \"https://vl.ly\",\n \"https://dev.vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n },\n staging: {\n hubUrl: \"https://game-clients-staging.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform-staging.volley-services.net\",\n platformAuthApiUrl: \"https://auth-staging.volley.tv\",\n amplitudeKey: \"\",\n trustedOrigins: [\n \"https://volley.tv\",\n \"https://vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n },\n prod: prodConfig,\n production: prodConfig, // Alias for prod\n}\n","import { Command } from \"commander\"\nimport { config as loadDotenv } from \"dotenv\"\nimport fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\nimport { fileURLToPath } from \"url\"\nimport { build } from \"vite\"\n\nimport { ENV_DEFAULTS } from \"../src/envDefaults.js\"\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\n// Read package version for --version flag\nconst cliPackageJson = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../package.json\"), \"utf-8\")\n)\n\nconst VALID_PLATFORMS = [\n \"FIRE_TV\",\n \"ANDROID_MOBILE\",\n \"IOS_MOBILE\",\n \"SAMSUNG_TV\",\n \"LG_TV\",\n \"WEB\",\n]\n\nconst program = new Command()\n\n// Platforms that support reading environment from native shell at runtime\n// These platforms don't require --env flag (it's optional as an override)\nconst NATIVE_ENV_PLATFORMS = [\"FIRE_TV\"]\n\nprogram\n .name(\"build-loader\")\n .version(cliPackageJson.version)\n .description(\"Build vwr-loader with environment configuration\")\n .requiredOption(\n \"--platform <platform>\",\n \"Platform: FIRE_TV, ANDROID_MOBILE, IOS_MOBILE, SAMSUNG_TV, LG_TV, WEB\"\n )\n .option(\n \"--env <env>\",\n \"Environment: local, dev, staging, prod (required for non-Fire TV platforms)\"\n )\n .requiredOption(\"--output <path>\", \"Output directory\")\n .option(\"--hubUrl <url>\", \"Override Hub URL\")\n .option(\"--amplitudeKey <key>\", \"Override Amplitude deployment key\")\n .option(\"--configUrl <url>\", \"Override VWR Config URL\")\n .option(\"--configFile <filename>\", \"Override VWR Config Filename\")\n .option(\"--launchUrl <url>\", \"Override launch url\")\n .option(\"--datadog-app-id <id>\", \"Datadog RUM application ID\")\n .option(\"--datadog-client-token <token>\", \"Datadog client token\")\n .parse()\n\nconst opts = program.opts()\nconst platform = opts.platform.toUpperCase()\nconst supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(platform)\n\n// Validate --env is provided for platforms that don't support native env reading\nif (!opts.env && !supportsNativeEnv) {\n console.error(\n `❌ --env is required for platform \"${opts.platform}\"\\n` +\n ` Only Fire TV can read environment from native shell at runtime.\\n` +\n ` Valid environments: local, dev, staging, prod`\n )\n process.exit(1)\n}\n\n// For platforms with native env support, log that env will be read at runtime\nif (!opts.env && supportsNativeEnv) {\n console.log(\n `ℹ️ --env not provided. ${opts.platform} will read environment from native shell at runtime.`\n )\n}\n\n// Validate platform\nif (!VALID_PLATFORMS.includes(platform)) {\n console.error(`❌ Unknown platform: ${opts.platform}`)\n console.error(` Valid: ${VALID_PLATFORMS.join(\", \")}`)\n process.exit(1)\n}\n\n// Try to read from shell's .env file (run from shell directory)\nlet shellEnv: Record<string, string> = {}\nif (opts.env) {\n const envFile = path.join(process.cwd(), `.env.${opts.env}`)\n if (fs.existsSync(envFile)) {\n console.log(`📄 Reading config from ${envFile}`)\n const result = loadDotenv({ path: envFile })\n shellEnv = result.parsed || {}\n } else {\n console.log(`ℹ️ No .env.${opts.env} found, using defaults/CLI flags`)\n }\n}\n\n// Read shell version from package.json (for web shell)\nlet shellVersion = \"unknown\"\nconst packageJsonPath = path.join(process.cwd(), \"package.json\")\nif (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, \"utf-8\")\n )\n shellVersion = packageJson.version || \"unknown\"\n } catch {\n console.warn(`⚠️ Could not read version from package.json`)\n }\n}\n\n// Get predefined defaults for the specified environment\nconst envDefaults = opts.env ? ENV_DEFAULTS[opts.env] : undefined\nif (opts.env && !envDefaults) {\n console.error(`❌ Unknown environment: ${opts.env}`)\n console.error(` Valid: local, dev, staging, prod`)\n process.exit(1)\n}\n\n// Use env defaults if specified, otherwise fall back to dev defaults\n// (Fire TV without --env reads actual env from native at runtime, but needs URLs at build time)\nconst effectiveDefaults = envDefaults ?? ENV_DEFAULTS[\"dev\"]\n\n// Config precedence: CLI > shell .env > defaults\nconst config = {\n VITE_PLATFORM: platform,\n VITE_ENVIRONMENT: opts.env, // undefined for Fire TV without --env (reads from native)\n VITE_HUB_URL:\n opts.hubUrl || shellEnv.VITE_HUB_URL || effectiveDefaults.hubUrl,\n VITE_AMPLITUDE_DEPLOYMENT_KEY:\n opts.amplitudeKey ||\n shellEnv.VITE_AMPLITUDE_DEPLOYMENT_KEY ||\n effectiveDefaults.amplitudeKey ||\n \"\",\n VITE_VWR_URL: shellEnv.VITE_VWR_URL || effectiveDefaults.vwrUrl,\n VITE_CONFIG_URL:\n opts.configUrl ||\n shellEnv.VITE_CONFIG_URL ||\n effectiveDefaults.configUrl,\n VITE_CONFIG_FILE:\n opts.configFile ||\n shellEnv.VITE_CONFIG_FILE ||\n effectiveDefaults.configFile,\n VITE_LAUNCH_URL:\n opts.launchUrl ||\n shellEnv.VITE_LAUNCH_URL ||\n opts.hubUrl ||\n shellEnv.VITE_HUB_URL ||\n effectiveDefaults.hubUrl,\n VITE_DATADOG_APPLICATION_ID:\n opts.datadogAppId || shellEnv.VITE_DATADOG_APPLICATION_ID || \"\",\n VITE_DATADOG_CLIENT_TOKEN:\n opts.datadogClientToken || shellEnv.VITE_DATADOG_CLIENT_TOKEN || \"\",\n}\n\nconsole.log(\"🔧 Build configuration:\")\nconsole.log(` Platform: ${config.VITE_PLATFORM}`)\nconsole.log(\n ` Environment: ${config.VITE_ENVIRONMENT ?? \"(from native at runtime)\"}`\n)\nconsole.log(` Hub URL: ${config.VITE_HUB_URL}`)\nconsole.log(` VWR URL: ${config.VITE_VWR_URL}`)\nif (config.VITE_AMPLITUDE_DEPLOYMENT_KEY) {\n console.log(` Amplitude: ***`)\n} else {\n console.warn(` Amplitude: (not set)`)\n console.warn(\n ` ⚠️ VWR flag fetching will use safe defaults (vwr-enabled: false)`\n )\n}\nif (config.VITE_DATADOG_APPLICATION_ID && config.VITE_DATADOG_CLIENT_TOKEN) {\n console.log(` Datadog RUM: enabled`)\n} else {\n console.warn(` Datadog RUM: disabled (credentials not provided)`)\n}\n\n// Build with Vite (inline config to avoid path resolution issues)\nconst loaderSrcDir = path.join(__dirname, \"../src\")\nconst tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), \"vwr-loader-\"))\nconst loaderDistDir = tmpDir\n\n// Build define config - VITE_ENVIRONMENT is undefined for Fire TV (reads from native)\nconst defineConfig: Record<string, string> = {\n \"import.meta.env.VITE_PLATFORM\": JSON.stringify(config.VITE_PLATFORM),\n \"import.meta.env.VITE_SHELL_VERSION\": JSON.stringify(shellVersion),\n \"import.meta.env.VITE_HUB_URL\": JSON.stringify(config.VITE_HUB_URL),\n \"import.meta.env.VITE_AMPLITUDE_DEPLOYMENT_KEY\": JSON.stringify(\n config.VITE_AMPLITUDE_DEPLOYMENT_KEY\n ),\n \"import.meta.env.VITE_VWR_URL\": JSON.stringify(config.VITE_VWR_URL),\n \"import.meta.env.VITE_CONFIG_URL\": JSON.stringify(config.VITE_CONFIG_URL),\n \"import.meta.env.VITE_CONFIG_FILE\": JSON.stringify(config.VITE_CONFIG_FILE),\n \"import.meta.env.VITE_LAUNCH_URL\": JSON.stringify(config.VITE_LAUNCH_URL),\n \"import.meta.env.VITE_DATADOG_APPLICATION_ID\": JSON.stringify(\n config.VITE_DATADOG_APPLICATION_ID\n ),\n \"import.meta.env.VITE_DATADOG_CLIENT_TOKEN\": JSON.stringify(\n config.VITE_DATADOG_CLIENT_TOKEN\n ),\n}\n\n// Only inject VITE_ENVIRONMENT if provided (Fire TV reads from native otherwise)\nif (config.VITE_ENVIRONMENT) {\n defineConfig[\"import.meta.env.VITE_ENVIRONMENT\"] = JSON.stringify(\n config.VITE_ENVIRONMENT\n )\n}\n\ntry {\n console.log(`⏳ Building loader...`)\n await build({\n configFile: false,\n root: loaderSrcDir,\n // Use relative paths so loader works when served from any subdirectory\n base: \"./\",\n mode: opts.env ?? \"production\", // Use production mode for minification when env not specified\n logLevel: \"warn\",\n build: {\n outDir: loaderDistDir,\n emptyOutDir: true,\n target: \"es2017\",\n minify: opts.env === \"prod\" || !opts.env ? \"esbuild\" : false,\n sourcemap: true,\n rollupOptions: {\n input: {\n main: path.join(loaderSrcDir, \"index.html\"),\n },\n output: {\n entryFileNames: \"[name].js\",\n assetFileNames: \"[name].[ext]\",\n },\n },\n },\n define: defineConfig,\n })\n\n // Copy build output to specified directory\n const outputPath = path.resolve(opts.output)\n\n await fs.ensureDir(outputPath)\n await fs.copy(loaderDistDir, outputPath, { overwrite: true })\n\n console.log(`✅ VWR loader built successfully`)\n console.log(` Output: ${outputPath}`)\n console.log(` Files: index.html, main.js`)\n} finally {\n // Cleanup temp dir\n try {\n await fs.remove(tmpDir)\n } catch (e) {\n console.warn(\"⚠️ Failed to cleanup temp dir:\", e)\n }\n}\n"],"names":["loadDotenv"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sources":["../../vwr/src/envDefaults.ts","../scripts/build.ts"],"sourcesContent":["export interface EnvConfig {\n hubUrl: string\n vwrUrl: string\n configUrl: string\n configFile: string\n platformApiUrl: string\n platformAuthApiUrl: string\n amplitudeKey: string // Used for amplitude flag fetch, not part of VWRConfig\n trustedOrigins?: string[]\n trustedShellOrigins?: string[]\n}\n\n/**\n * Default shell origins that VWR trusts as its parent window.\n * These are the origins of the native shell apps that load VWR in an iframe.\n */\nconst DEFAULT_SHELL_ORIGINS = [\n \"file://\", // Samsung\n \"file://com.volley.lgshell.local-webos\", // LG local\n \"file://com.volley.lgshell.dev-webos\", // LG dev\n \"file://com.volley.lgshell.dev.720p-webos\", // LG dev 720p\n \"file://com.volley.lgshell.staging-webos\", // LG staging\n \"file://com.volley.lgshell.staging.720p-webos\", // LG staging 720p\n \"file://com.volley.lgshell.prod-webos\", // LG prod (alpha test)\n \"file://com.volley.lgshell.720p-webos\", // LG prod 720p (alpha test)\n \"file://com.volley.lgshell-webos\", // LG prod (formal release)\n \"https://localhost\", // FireTV\n \"https://appassets.androidplatform.net\", // Android WebView\n \"app://local\", // iOS WebView\n]\n\nconst CONFIG_URL_DEFAULT = \"https://vwr.volley.tv/config/\"\nconst CONFIG_FILE_DEFAULT = \"vwrConfig.json\"\nconst VWR_DEFAULT_VERSION = \"1.0.0\"\nconst VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`\n\n// Parse comma-separated env var, returning undefined if empty to allow fallback\nconst parseTrustedOrigins = (\n envVar: string | undefined\n): string[] | undefined => {\n const parsed = envVar?.split(\",\").filter(Boolean)\n return parsed?.length ? parsed : undefined\n}\n\nconst prodConfig: EnvConfig = {\n hubUrl: \"https://game-clients.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform.volley-services.net\",\n platformAuthApiUrl: \"https://auth.volley.tv\",\n amplitudeKey: \"\",\n trustedOrigins: [\"https://volley.tv\", \"https://vl.ly\", \"https://vly.gg\"],\n trustedShellOrigins: DEFAULT_SHELL_ORIGINS,\n}\n\nexport const ENV_DEFAULTS: Record<string, EnvConfig> = {\n local: {\n hubUrl: import.meta.env.VITE_HUB_URL || \"http://localhost:5173\",\n vwrUrl: import.meta.env.VITE_VWR_URL || \"http://localhost:5174/vwr.js\",\n configUrl:\n import.meta.env.VITE_CONFIG_URL || \"http://localhost:5174/config/\",\n configFile: import.meta.env.VITE_CONFIG_FILE || CONFIG_FILE_DEFAULT,\n platformApiUrl:\n import.meta.env.VITE_PLATFORM_API_URL ||\n \"https://platform-dev.volley-services.net\",\n platformAuthApiUrl:\n import.meta.env.VITE_PLATFORM_AUTH_API_URL ||\n \"https://auth-dev.volley.tv\",\n amplitudeKey: \"client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ\",\n trustedOrigins: parseTrustedOrigins(\n import.meta.env.VITE_TRUSTED_ORIGINS\n ) || [\n \"http://localhost:5173\",\n \"http://localhost:5174\",\n \"https://vl.ly\",\n \"https://dev.vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n trustedShellOrigins: [\n ...DEFAULT_SHELL_ORIGINS,\n \"http://localhost:5173\",\n \"http://localhost:5174\",\n ],\n },\n dev: {\n hubUrl: \"https://game-clients-dev.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform-dev.volley-services.net\",\n platformAuthApiUrl: \"https://auth-dev.volley.tv\",\n amplitudeKey: \"client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ\",\n trustedOrigins: [\n \"https://volley.tv\",\n \"https://vl.ly\",\n \"https://dev.vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n trustedShellOrigins: DEFAULT_SHELL_ORIGINS,\n },\n staging: {\n hubUrl: \"https://game-clients-staging.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,\n configUrl: CONFIG_URL_DEFAULT,\n configFile: CONFIG_FILE_DEFAULT,\n platformApiUrl: \"https://platform-staging.volley-services.net\",\n platformAuthApiUrl: \"https://auth-staging.volley.tv\",\n amplitudeKey: \"\",\n trustedOrigins: [\n \"https://volley.tv\",\n \"https://vl.ly\",\n \"https://staging.vl.ly\",\n \"https://vly.gg\",\n ],\n trustedShellOrigins: DEFAULT_SHELL_ORIGINS,\n },\n prod: prodConfig,\n production: prodConfig, // Alias for prod\n}\n","import { Command } from \"commander\"\nimport { config as loadDotenv } from \"dotenv\"\nimport fs from \"fs-extra\"\nimport os from \"os\"\nimport path from \"path\"\nimport { fileURLToPath } from \"url\"\nimport { build } from \"vite\"\n\nimport { ENV_DEFAULTS } from \"../../vwr/src/envDefaults.js\"\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\n// Read package version for --version flag\nconst cliPackageJson = JSON.parse(\n fs.readFileSync(path.join(__dirname, \"../package.json\"), \"utf-8\")\n)\n\nconst VALID_PLATFORMS = [\n \"FIRE_TV\",\n \"ANDROID_MOBILE\",\n \"IOS_MOBILE\",\n \"SAMSUNG_TV\",\n \"LG_TV\",\n \"WEB\",\n]\n\nconst program = new Command()\n\n// Platforms that support reading environment from native shell at runtime\n// These platforms don't require --env flag (it's optional as an override)\nconst NATIVE_ENV_PLATFORMS = [\"FIRE_TV\"]\n\nprogram\n .name(\"build-loader\")\n .version(cliPackageJson.version)\n .description(\"Build vwr-loader with environment configuration\")\n .requiredOption(\n \"--platform <platform>\",\n \"Platform: FIRE_TV, ANDROID_MOBILE, IOS_MOBILE, SAMSUNG_TV, LG_TV, WEB\"\n )\n .option(\n \"--env <env>\",\n \"Environment: local, dev, staging, prod (required for non-Fire TV platforms)\"\n )\n .requiredOption(\"--output <path>\", \"Output directory\")\n .option(\"--hubUrl <url>\", \"Override Hub URL\")\n .option(\"--amplitudeKey <key>\", \"Override Amplitude deployment key\")\n .option(\"--configUrl <url>\", \"Override VWR Config URL\")\n .option(\"--configFile <filename>\", \"Override VWR Config Filename\")\n .option(\"--launchUrl <url>\", \"Override launch url\")\n .option(\"--datadog-app-id <id>\", \"Datadog RUM application ID\")\n .option(\"--datadog-client-token <token>\", \"Datadog client token\")\n .parse()\n\nconst opts = program.opts()\nconst platform = opts.platform.toUpperCase()\nconst supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(platform)\n\n// Validate --env is provided for platforms that don't support native env reading\nif (!opts.env && !supportsNativeEnv) {\n console.error(\n `❌ --env is required for platform \"${opts.platform}\"\\n` +\n ` Only Fire TV can read environment from native shell at runtime.\\n` +\n ` Valid environments: local, dev, staging, prod`\n )\n process.exit(1)\n}\n\n// For platforms with native env support, log that env will be read at runtime\nif (!opts.env && supportsNativeEnv) {\n console.log(\n `ℹ️ --env not provided. ${opts.platform} will read environment from native shell at runtime.`\n )\n}\n\n// Validate platform\nif (!VALID_PLATFORMS.includes(platform)) {\n console.error(`❌ Unknown platform: ${opts.platform}`)\n console.error(` Valid: ${VALID_PLATFORMS.join(\", \")}`)\n process.exit(1)\n}\n\n// Try to read from shell's .env file (run from shell directory)\nlet shellEnv: Record<string, string> = {}\nif (opts.env) {\n const envFile = path.join(process.cwd(), `.env.${opts.env}`)\n if (fs.existsSync(envFile)) {\n console.log(`📄 Reading config from ${envFile}`)\n const result = loadDotenv({ path: envFile })\n shellEnv = result.parsed || {}\n } else {\n console.log(`ℹ️ No .env.${opts.env} found, using defaults/CLI flags`)\n }\n}\n\n// Read shell version from package.json (for web shell)\nlet shellVersion = \"unknown\"\nconst packageJsonPath = path.join(process.cwd(), \"package.json\")\nif (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, \"utf-8\")\n )\n shellVersion = packageJson.version || \"unknown\"\n } catch {\n console.warn(`⚠️ Could not read version from package.json`)\n }\n}\n\n// Get predefined defaults for the specified environment\nconst envDefaults = opts.env ? ENV_DEFAULTS[opts.env] : undefined\nif (opts.env && !envDefaults) {\n console.error(`❌ Unknown environment: ${opts.env}`)\n console.error(` Valid: local, dev, staging, prod`)\n process.exit(1)\n}\n\n// Use env defaults if specified, otherwise fall back to dev defaults\n// (Fire TV without --env reads actual env from native at runtime, but needs URLs at build time)\nconst effectiveDefaults = envDefaults ?? ENV_DEFAULTS[\"dev\"]\n\n// Config precedence: CLI > shell .env > defaults\nconst config = {\n VITE_PLATFORM: platform,\n VITE_ENVIRONMENT: opts.env, // undefined for Fire TV without --env (reads from native)\n VITE_HUB_URL:\n opts.hubUrl || shellEnv.VITE_HUB_URL || effectiveDefaults.hubUrl,\n VITE_AMPLITUDE_DEPLOYMENT_KEY:\n opts.amplitudeKey ||\n shellEnv.VITE_AMPLITUDE_DEPLOYMENT_KEY ||\n effectiveDefaults.amplitudeKey ||\n \"\",\n VITE_VWR_URL: shellEnv.VITE_VWR_URL || effectiveDefaults.vwrUrl,\n VITE_CONFIG_URL:\n opts.configUrl ||\n shellEnv.VITE_CONFIG_URL ||\n effectiveDefaults.configUrl,\n VITE_CONFIG_FILE:\n opts.configFile ||\n shellEnv.VITE_CONFIG_FILE ||\n effectiveDefaults.configFile,\n VITE_LAUNCH_URL:\n opts.launchUrl ||\n shellEnv.VITE_LAUNCH_URL ||\n opts.hubUrl ||\n shellEnv.VITE_HUB_URL ||\n effectiveDefaults.hubUrl,\n VITE_DATADOG_APPLICATION_ID:\n opts.datadogAppId || shellEnv.VITE_DATADOG_APPLICATION_ID || \"\",\n VITE_DATADOG_CLIENT_TOKEN:\n opts.datadogClientToken || shellEnv.VITE_DATADOG_CLIENT_TOKEN || \"\",\n}\n\nconsole.log(\"🔧 Build configuration:\")\nconsole.log(` Platform: ${config.VITE_PLATFORM}`)\nconsole.log(\n ` Environment: ${config.VITE_ENVIRONMENT ?? \"(from native at runtime)\"}`\n)\nconsole.log(` Hub URL: ${config.VITE_HUB_URL}`)\nconsole.log(` VWR URL: ${config.VITE_VWR_URL}`)\nif (config.VITE_AMPLITUDE_DEPLOYMENT_KEY) {\n console.log(` Amplitude: ***`)\n} else {\n console.warn(` Amplitude: (not set)`)\n console.warn(\n ` ⚠️ VWR flag fetching will use safe defaults (vwr-enabled: false)`\n )\n}\nif (config.VITE_DATADOG_APPLICATION_ID && config.VITE_DATADOG_CLIENT_TOKEN) {\n console.log(` Datadog RUM: enabled`)\n} else {\n console.warn(` Datadog RUM: disabled (credentials not provided)`)\n}\n\n// Build with Vite (inline config to avoid path resolution issues)\nconst loaderSrcDir = path.join(__dirname, \"../src\")\nconst tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), \"vwr-loader-\"))\nconst loaderDistDir = tmpDir\n\n// Build define config - VITE_ENVIRONMENT is undefined for Fire TV (reads from native)\nconst defineConfig: Record<string, string> = {\n \"import.meta.env.VITE_PLATFORM\": JSON.stringify(config.VITE_PLATFORM),\n \"import.meta.env.VITE_SHELL_VERSION\": JSON.stringify(shellVersion),\n \"import.meta.env.VITE_HUB_URL\": JSON.stringify(config.VITE_HUB_URL),\n \"import.meta.env.VITE_AMPLITUDE_DEPLOYMENT_KEY\": JSON.stringify(\n config.VITE_AMPLITUDE_DEPLOYMENT_KEY\n ),\n \"import.meta.env.VITE_VWR_URL\": JSON.stringify(config.VITE_VWR_URL),\n \"import.meta.env.VITE_CONFIG_URL\": JSON.stringify(config.VITE_CONFIG_URL),\n \"import.meta.env.VITE_CONFIG_FILE\": JSON.stringify(config.VITE_CONFIG_FILE),\n \"import.meta.env.VITE_LAUNCH_URL\": JSON.stringify(config.VITE_LAUNCH_URL),\n \"import.meta.env.VITE_DATADOG_APPLICATION_ID\": JSON.stringify(\n config.VITE_DATADOG_APPLICATION_ID\n ),\n \"import.meta.env.VITE_DATADOG_CLIENT_TOKEN\": JSON.stringify(\n config.VITE_DATADOG_CLIENT_TOKEN\n ),\n}\n\n// Only inject VITE_ENVIRONMENT if provided (Fire TV reads from native otherwise)\nif (config.VITE_ENVIRONMENT) {\n defineConfig[\"import.meta.env.VITE_ENVIRONMENT\"] = JSON.stringify(\n config.VITE_ENVIRONMENT\n )\n}\n\ntry {\n console.log(`⏳ Building loader...`)\n await build({\n configFile: false,\n root: loaderSrcDir,\n // Use relative paths so loader works when served from any subdirectory\n base: \"./\",\n mode: opts.env ?? \"production\", // Use production mode for minification when env not specified\n logLevel: \"warn\",\n build: {\n outDir: loaderDistDir,\n emptyOutDir: true,\n target: \"es2017\",\n minify: opts.env === \"prod\" || !opts.env ? \"esbuild\" : false,\n sourcemap: true,\n rollupOptions: {\n input: {\n main: path.join(loaderSrcDir, \"index.html\"),\n },\n output: {\n entryFileNames: \"[name].js\",\n assetFileNames: \"[name].[ext]\",\n },\n },\n },\n define: defineConfig,\n })\n\n // Copy build output to specified directory\n const outputPath = path.resolve(opts.output)\n\n await fs.ensureDir(outputPath)\n await fs.copy(loaderDistDir, outputPath, { overwrite: true })\n\n console.log(`✅ VWR loader built successfully`)\n console.log(` Output: ${outputPath}`)\n console.log(` Files: index.html, main.js`)\n} finally {\n // Cleanup temp dir\n try {\n await fs.remove(tmpDir)\n } catch (e) {\n console.warn(\"⚠️ Failed to cleanup temp dir:\", e)\n }\n}\n"],"names":["loadDotenv"],"mappings":"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"}