@volley/vwr-loader 1.6.0 → 1.7.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 (133) hide show
  1. package/dist/cli.js +51 -25
  2. package/dist/cli.js.map +1 -1
  3. package/dist/vwr/src/envDefaults.d.ts.map +1 -1
  4. package/dist/vwr/src/envDefaults.js +6 -39
  5. package/dist/vwr/src/envDefaults.js.map +1 -1
  6. package/dist/vwr/src/iframe.d.ts +25 -0
  7. package/dist/vwr/src/iframe.d.ts.map +1 -0
  8. package/dist/vwr/src/iframe.js +82 -0
  9. package/dist/vwr/src/iframe.js.map +1 -0
  10. package/dist/vwr/src/native/app-lifecycle/factory.d.ts +7 -0
  11. package/dist/vwr/src/native/app-lifecycle/factory.d.ts.map +1 -0
  12. package/dist/vwr/src/native/app-lifecycle/factory.js +68 -0
  13. package/dist/vwr/src/native/app-lifecycle/factory.js.map +1 -0
  14. package/dist/vwr/src/native/app-lifecycle/rpc.d.ts +15 -0
  15. package/dist/vwr/src/native/app-lifecycle/rpc.d.ts.map +1 -0
  16. package/dist/vwr/src/native/app-lifecycle/rpc.js +46 -0
  17. package/dist/vwr/src/native/app-lifecycle/rpc.js.map +1 -0
  18. package/dist/vwr/src/native/capacitor-bridge/rpc.d.ts +33 -0
  19. package/dist/vwr/src/native/capacitor-bridge/rpc.d.ts.map +1 -0
  20. package/dist/vwr/src/native/capacitor-bridge/rpc.js +129 -0
  21. package/dist/vwr/src/native/capacitor-bridge/rpc.js.map +1 -0
  22. package/dist/vwr/src/native/device-info/factory.d.ts +9 -0
  23. package/dist/vwr/src/native/device-info/factory.d.ts.map +1 -0
  24. package/dist/vwr/src/native/device-info/factory.js +28 -0
  25. package/dist/vwr/src/native/device-info/factory.js.map +1 -0
  26. package/dist/vwr/src/native/device-info/firetvCollector.d.ts +9 -0
  27. package/dist/vwr/src/native/device-info/firetvCollector.d.ts.map +1 -0
  28. package/dist/vwr/src/native/device-info/firetvCollector.js +180 -0
  29. package/dist/vwr/src/native/device-info/firetvCollector.js.map +1 -0
  30. package/dist/vwr/src/native/device-info/lgCollector.d.ts +8 -0
  31. package/dist/vwr/src/native/device-info/lgCollector.d.ts.map +1 -0
  32. package/dist/vwr/src/native/device-info/lgCollector.js +136 -0
  33. package/dist/vwr/src/native/device-info/lgCollector.js.map +1 -0
  34. package/dist/vwr/src/native/device-info/mobileCollector.d.ts +9 -0
  35. package/dist/vwr/src/native/device-info/mobileCollector.d.ts.map +1 -0
  36. package/dist/vwr/src/native/device-info/mobileCollector.js +47 -0
  37. package/dist/vwr/src/native/device-info/mobileCollector.js.map +1 -0
  38. package/dist/vwr/src/native/device-info/rpc.d.ts +51 -0
  39. package/dist/vwr/src/native/device-info/rpc.d.ts.map +1 -0
  40. package/dist/vwr/src/native/device-info/rpc.js +46 -0
  41. package/dist/vwr/src/native/device-info/rpc.js.map +1 -0
  42. package/dist/vwr/src/native/device-info/samsungCollector.d.ts +9 -0
  43. package/dist/vwr/src/native/device-info/samsungCollector.d.ts.map +1 -0
  44. package/dist/vwr/src/native/device-info/samsungCollector.js +86 -0
  45. package/dist/vwr/src/native/device-info/samsungCollector.js.map +1 -0
  46. package/dist/vwr/src/native/device-info/webCollector.d.ts +4 -0
  47. package/dist/vwr/src/native/device-info/webCollector.d.ts.map +1 -0
  48. package/dist/vwr/src/native/device-info/webCollector.js +56 -0
  49. package/dist/vwr/src/native/device-info/webCollector.js.map +1 -0
  50. package/dist/vwr/src/native/native-bridge/rpc.d.ts +33 -0
  51. package/dist/vwr/src/native/native-bridge/rpc.d.ts.map +1 -0
  52. package/dist/vwr/src/native/native-bridge/rpc.js +114 -0
  53. package/dist/vwr/src/native/native-bridge/rpc.js.map +1 -0
  54. package/dist/vwr/src/native/screensaver-prevention/LGLunaService.d.ts +14 -0
  55. package/dist/vwr/src/native/screensaver-prevention/LGLunaService.d.ts.map +1 -0
  56. package/dist/vwr/src/native/screensaver-prevention/LGLunaService.js +187 -0
  57. package/dist/vwr/src/native/screensaver-prevention/LGLunaService.js.map +1 -0
  58. package/dist/vwr/src/native/screensaver-prevention/rpc.d.ts +27 -0
  59. package/dist/vwr/src/native/screensaver-prevention/rpc.d.ts.map +1 -0
  60. package/dist/vwr/src/native/screensaver-prevention/rpc.js +71 -0
  61. package/dist/vwr/src/native/screensaver-prevention/rpc.js.map +1 -0
  62. package/dist/vwr/src/observability.d.ts +35 -0
  63. package/dist/vwr/src/observability.d.ts.map +1 -0
  64. package/dist/vwr/src/observability.js +68 -0
  65. package/dist/vwr/src/observability.js.map +1 -0
  66. package/dist/vwr/src/shellEnvDefaults.d.ts +15 -0
  67. package/dist/vwr/src/shellEnvDefaults.d.ts.map +1 -0
  68. package/dist/vwr/src/shellEnvDefaults.js +34 -0
  69. package/dist/vwr/src/shellEnvDefaults.js.map +1 -0
  70. package/dist/vwr/src/types.d.ts +56 -0
  71. package/dist/vwr/src/types.d.ts.map +1 -0
  72. package/dist/vwr/src/types.js +27 -0
  73. package/dist/vwr/src/types.js.map +1 -0
  74. package/dist/vwr/src/urlUtils.d.ts +17 -0
  75. package/dist/vwr/src/urlUtils.d.ts.map +1 -0
  76. package/dist/vwr/src/urlUtils.js +42 -0
  77. package/dist/vwr/src/urlUtils.js.map +1 -0
  78. package/dist/vwr/src/vwrBootstrap.d.ts +26 -0
  79. package/dist/vwr/src/vwrBootstrap.d.ts.map +1 -0
  80. package/dist/vwr/src/vwrBootstrap.js +176 -0
  81. package/dist/vwr/src/vwrBootstrap.js.map +1 -0
  82. package/dist/vwr/src/vwrConfig.d.ts.map +1 -1
  83. package/dist/vwr/src/vwrConfig.js +11 -2
  84. package/dist/vwr/src/vwrConfig.js.map +1 -1
  85. package/{src → dist/vwr-loader}/index.html +1 -1
  86. package/dist/vwr-loader/src/__mocks__/invalidVwrModule.d.ts +2 -0
  87. package/dist/vwr-loader/src/__mocks__/invalidVwrModule.d.ts.map +1 -0
  88. package/dist/vwr-loader/src/__mocks__/invalidVwrModule.js +2 -0
  89. package/dist/vwr-loader/src/__mocks__/invalidVwrModule.js.map +1 -0
  90. package/dist/vwr-loader/src/index.d.ts +3 -3
  91. package/dist/vwr-loader/src/index.d.ts.map +1 -1
  92. package/dist/vwr-loader/src/index.js +2 -2
  93. package/dist/vwr-loader/src/index.js.map +1 -1
  94. package/dist/vwr-loader/src/loadVwr.d.ts.map +1 -1
  95. package/dist/vwr-loader/src/loadVwr.js +28 -22
  96. package/dist/vwr-loader/src/loadVwr.js.map +1 -1
  97. package/dist/vwr-loader/src/logger.d.ts +1 -1
  98. package/dist/vwr-loader/src/logger.d.ts.map +1 -1
  99. package/dist/vwr-loader/src/logger.js +1 -1
  100. package/dist/vwr-loader/src/logger.js.map +1 -1
  101. package/dist/vwr-loader/src/main.js +1 -1
  102. package/dist/vwr-loader/src/main.js.map +1 -1
  103. package/package.json +4 -5
  104. package/dist/assets/profiler-BRmTNL9s.js +0 -2
  105. package/dist/assets/profiler-BRmTNL9s.js.map +0 -1
  106. package/dist/assets/startRecording-CuFdVhxx.js +0 -3
  107. package/dist/assets/startRecording-CuFdVhxx.js.map +0 -1
  108. package/dist/index.html +0 -25
  109. package/dist/main.js +0 -12
  110. package/dist/main.js.map +0 -1
  111. package/src/__mocks__/@datadog/browser-logs.ts +0 -35
  112. package/src/__mocks__/@datadog/browser-rum.ts +0 -27
  113. package/src/__mocks__/vwrModule.ts +0 -3
  114. package/src/amplitudeFlagFetcher.test.ts +0 -175
  115. package/src/amplitudeFlagFetcher.ts +0 -105
  116. package/src/errors/InitializationError.ts +0 -105
  117. package/src/errors/ensureError.ts +0 -6
  118. package/src/errors/index.ts +0 -16
  119. package/src/exitHandler.test.ts +0 -417
  120. package/src/exitHandler.ts +0 -233
  121. package/src/getEnvironment.test.ts +0 -417
  122. package/src/getEnvironment.ts +0 -144
  123. package/src/getShellVersion.test.ts +0 -403
  124. package/src/getShellVersion.ts +0 -133
  125. package/src/index.ts +0 -7
  126. package/src/loadVwr.test.ts +0 -554
  127. package/src/loadVwr.ts +0 -363
  128. package/src/logger.ts +0 -11
  129. package/src/main.test.ts +0 -157
  130. package/src/main.ts +0 -128
  131. package/src/polyfills.ts +0 -32
  132. package/src/test-setup.ts +0 -5
  133. package/src/vite-env.d.ts +0 -33
package/dist/cli.js CHANGED
@@ -6,6 +6,39 @@ import os from "os";
6
6
  import path from "path";
7
7
  import { fileURLToPath } from "url";
8
8
  import { build } from "vite";
9
+ const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/";
10
+ const CONFIG_FILE_DEFAULT = "vwrConfig.json";
11
+ const VWR_DEFAULT_VERSION = "1.0.0";
12
+ const VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`;
13
+ const SHELL_ENV_DEFAULTS = {
14
+ dev: {
15
+ hubUrl: "https://game-clients-dev.volley.tv/hub",
16
+ vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
17
+ configUrl: CONFIG_URL_DEFAULT,
18
+ configFile: CONFIG_FILE_DEFAULT,
19
+ platformApiUrl: "https://platform-dev.volley-services.net",
20
+ platformAuthApiUrl: "https://auth-dev.volley.tv"
21
+ },
22
+ staging: {
23
+ hubUrl: "https://game-clients-staging.volley.tv/hub",
24
+ vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
25
+ configUrl: CONFIG_URL_DEFAULT,
26
+ configFile: CONFIG_FILE_DEFAULT,
27
+ platformApiUrl: "https://platform-staging.volley-services.net",
28
+ platformAuthApiUrl: "https://auth-staging.volley.tv"
29
+ },
30
+ prod: {
31
+ hubUrl: "https://game-clients.volley.tv/hub",
32
+ vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
33
+ configUrl: CONFIG_URL_DEFAULT,
34
+ configFile: CONFIG_FILE_DEFAULT,
35
+ platformApiUrl: "https://platform.volley-services.net",
36
+ platformAuthApiUrl: "https://auth.volley.tv"
37
+ }
38
+ };
39
+ function getShellEnvDefaults(env) {
40
+ return SHELL_ENV_DEFAULTS[env];
41
+ }
9
42
  const DEFAULT_SHELL_ORIGINS = [
10
43
  "file://",
11
44
  // Samsung
@@ -32,17 +65,8 @@ const DEFAULT_SHELL_ORIGINS = [
32
65
  "app://local"
33
66
  // iOS WebView
34
67
  ];
35
- const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/";
36
- const CONFIG_FILE_DEFAULT = "vwrConfig.json";
37
- const VWR_DEFAULT_VERSION = "1.0.0";
38
- const VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`;
39
68
  const prodConfig = {
40
- hubUrl: "https://game-clients.volley.tv/hub",
41
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
42
- configUrl: CONFIG_URL_DEFAULT,
43
- configFile: CONFIG_FILE_DEFAULT,
44
- platformApiUrl: "https://platform.volley-services.net",
45
- platformAuthApiUrl: "https://auth.volley.tv",
69
+ ...getShellEnvDefaults("prod"),
46
70
  amplitudeKey: "",
47
71
  trustedOrigins: ["https://volley.tv", "https://vl.ly", "https://vly.gg"],
48
72
  trustedShellOrigins: DEFAULT_SHELL_ORIGINS
@@ -71,12 +95,7 @@ const ENV_DEFAULTS = {
71
95
  ]
72
96
  },
73
97
  dev: {
74
- hubUrl: "https://game-clients-dev.volley.tv/hub",
75
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
76
- configUrl: CONFIG_URL_DEFAULT,
77
- configFile: CONFIG_FILE_DEFAULT,
78
- platformApiUrl: "https://platform-dev.volley-services.net",
79
- platformAuthApiUrl: "https://auth-dev.volley.tv",
98
+ ...getShellEnvDefaults("dev"),
80
99
  amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
81
100
  trustedOrigins: [
82
101
  "https://volley.tv",
@@ -88,12 +107,7 @@ const ENV_DEFAULTS = {
88
107
  trustedShellOrigins: DEFAULT_SHELL_ORIGINS
89
108
  },
90
109
  staging: {
91
- hubUrl: "https://game-clients-staging.volley.tv/hub",
92
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
93
- configUrl: CONFIG_URL_DEFAULT,
94
- configFile: CONFIG_FILE_DEFAULT,
95
- platformApiUrl: "https://platform-staging.volley-services.net",
96
- platformAuthApiUrl: "https://auth-staging.volley.tv",
110
+ ...getShellEnvDefaults("staging"),
97
111
  amplitudeKey: "",
98
112
  trustedOrigins: [
99
113
  "https://volley.tv",
@@ -212,9 +226,21 @@ if (config.VITE_DATADOG_APPLICATION_ID && config.VITE_DATADOG_CLIENT_TOKEN) {
212
226
  } else {
213
227
  console.warn(` Datadog RUM: disabled (credentials not provided)`);
214
228
  }
215
- const loaderSrcDir = path.join(__dirname, "../src");
229
+ const packagedLoaderRootDir = path.join(__dirname, "vwr-loader");
230
+ const builtLoaderRootDir = path.join(__dirname, "../dist/vwr-loader");
231
+ const loaderRootDir = fs.existsSync(
232
+ path.join(packagedLoaderRootDir, "index.html")
233
+ ) ? packagedLoaderRootDir : builtLoaderRootDir;
234
+ const loaderEntryHtml = path.join(loaderRootDir, "index.html");
216
235
  const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "vwr-loader-"));
217
236
  const loaderDistDir = tmpDir;
237
+ if (!fs.existsSync(loaderEntryHtml)) {
238
+ console.error(
239
+ `❌ Loader build assets not found at ${loaderEntryHtml}
240
+ Ensure the package was built before invoking build-loader.`
241
+ );
242
+ process.exit(1);
243
+ }
218
244
  const defineConfig = {
219
245
  "import.meta.env.VITE_PLATFORM": JSON.stringify(config.VITE_PLATFORM),
220
246
  "import.meta.env.VITE_SHELL_VERSION": JSON.stringify(shellVersion),
@@ -242,7 +268,7 @@ try {
242
268
  console.log(`⏳ Building loader...`);
243
269
  await build({
244
270
  configFile: false,
245
- root: loaderSrcDir,
271
+ root: loaderRootDir,
246
272
  // Use relative paths so loader works when served from any subdirectory
247
273
  base: "./",
248
274
  mode: opts.env ?? "production",
@@ -256,7 +282,7 @@ try {
256
282
  sourcemap: true,
257
283
  rollupOptions: {
258
284
  input: {
259
- main: path.join(loaderSrcDir, "index.html")
285
+ main: loaderEntryHtml
260
286
  },
261
287
  output: {
262
288
  entryFileNames: "[name].js",
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"cli.js","sources":["../../vwr/src/shellEnvDefaults.ts","../../vwr/src/envDefaults.ts","../scripts/build.ts"],"sourcesContent":["export type SharedShellEnvironment = \"dev\" | \"staging\" | \"prod\"\n\nexport interface ShellEnvConfig {\n hubUrl: string\n vwrUrl: string\n configUrl: string\n configFile: string\n platformApiUrl: string\n platformAuthApiUrl: string\n}\n\nexport const CONFIG_URL_DEFAULT = \"https://vwr.volley.tv/config/\"\nexport const CONFIG_FILE_DEFAULT = \"vwrConfig.json\"\nexport const VWR_DEFAULT_VERSION = \"1.0.0\"\nexport const VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`\n\nconst SHELL_ENV_DEFAULTS: Record<SharedShellEnvironment, ShellEnvConfig> = {\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 },\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 },\n prod: {\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 },\n}\n\nexport function getShellEnvDefaults(\n env: SharedShellEnvironment\n): ShellEnvConfig {\n return SHELL_ENV_DEFAULTS[env]\n}\n","import {\n CONFIG_FILE_DEFAULT,\n getShellEnvDefaults,\n} from \"./shellEnvDefaults\"\n\nexport 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\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 ...getShellEnvDefaults(\"prod\"),\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 ...getShellEnvDefaults(\"dev\"),\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 ...getShellEnvDefaults(\"staging\"),\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 { ENV_DEFAULTS } from \"@volley/vwr/envDefaults\"\nimport { 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\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 packagedLoaderRootDir = path.join(__dirname, \"vwr-loader\")\nconst builtLoaderRootDir = path.join(__dirname, \"../dist/vwr-loader\")\nconst loaderRootDir = fs.existsSync(\n path.join(packagedLoaderRootDir, \"index.html\")\n)\n ? packagedLoaderRootDir\n : builtLoaderRootDir\nconst loaderEntryHtml = path.join(loaderRootDir, \"index.html\")\nconst tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), \"vwr-loader-\"))\nconst loaderDistDir = tmpDir\n\nif (!fs.existsSync(loaderEntryHtml)) {\n console.error(\n `❌ Loader build assets not found at ${loaderEntryHtml}\\n` +\n ` Ensure the package was built before invoking build-loader.`\n )\n process.exit(1)\n}\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: loaderRootDir,\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: loaderEntryHtml,\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 +1 @@
1
- {"version":3,"file":"envDefaults.d.ts","sourceRoot":"","sources":["../../../../vwr/src/envDefaults.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;CACjC;AA8CD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAiElD,CAAA"}
1
+ {"version":3,"file":"envDefaults.d.ts","sourceRoot":"","sources":["../../../../vwr/src/envDefaults.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;CACjC;AAoCD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAuDlD,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { CONFIG_FILE_DEFAULT, getShellEnvDefaults, } from "./shellEnvDefaults";
1
2
  /**
2
3
  * Default shell origins that VWR trusts as its parent window.
3
4
  * These are the origins of the native shell apps that load VWR in an iframe.
@@ -16,26 +17,12 @@ const DEFAULT_SHELL_ORIGINS = [
16
17
  "https://appassets.androidplatform.net", // Android WebView
17
18
  "app://local", // iOS WebView
18
19
  ];
19
- const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/";
20
- const CONFIG_FILE_DEFAULT = "vwrConfig.json";
21
- const VWR_DEFAULT_VERSION = "1.0.0";
22
- const VWR_URL_PATH_DEFAULT = `v1/${VWR_DEFAULT_VERSION}/vwr.js`;
23
20
  // Parse comma-separated env var, returning undefined if empty to allow fallback
24
21
  const parseTrustedOrigins = (envVar) => {
25
22
  const parsed = envVar === null || envVar === void 0 ? void 0 : envVar.split(",").filter(Boolean);
26
23
  return (parsed === null || parsed === void 0 ? void 0 : parsed.length) ? parsed : undefined;
27
24
  };
28
- const prodConfig = {
29
- hubUrl: "https://game-clients.volley.tv/hub",
30
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
31
- configUrl: CONFIG_URL_DEFAULT,
32
- configFile: CONFIG_FILE_DEFAULT,
33
- platformApiUrl: "https://platform.volley-services.net",
34
- platformAuthApiUrl: "https://auth.volley.tv",
35
- amplitudeKey: "",
36
- trustedOrigins: ["https://volley.tv", "https://vl.ly", "https://vly.gg"],
37
- trustedShellOrigins: DEFAULT_SHELL_ORIGINS,
38
- };
25
+ const prodConfig = Object.assign(Object.assign({}, getShellEnvDefaults("prod")), { amplitudeKey: "", trustedOrigins: ["https://volley.tv", "https://vl.ly", "https://vly.gg"], trustedShellOrigins: DEFAULT_SHELL_ORIGINS });
39
26
  export const ENV_DEFAULTS = {
40
27
  local: {
41
28
  hubUrl: import.meta.env.VITE_HUB_URL || "http://localhost:5173",
@@ -61,39 +48,19 @@ export const ENV_DEFAULTS = {
61
48
  "http://localhost:5174",
62
49
  ],
63
50
  },
64
- dev: {
65
- hubUrl: "https://game-clients-dev.volley.tv/hub",
66
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
67
- configUrl: CONFIG_URL_DEFAULT,
68
- configFile: CONFIG_FILE_DEFAULT,
69
- platformApiUrl: "https://platform-dev.volley-services.net",
70
- platformAuthApiUrl: "https://auth-dev.volley.tv",
71
- amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
72
- trustedOrigins: [
51
+ dev: Object.assign(Object.assign({}, getShellEnvDefaults("dev")), { amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ", trustedOrigins: [
73
52
  "https://volley.tv",
74
53
  "https://vl.ly",
75
54
  "https://dev.vl.ly",
76
55
  "https://staging.vl.ly",
77
56
  "https://vly.gg",
78
- ],
79
- trustedShellOrigins: DEFAULT_SHELL_ORIGINS,
80
- },
81
- staging: {
82
- hubUrl: "https://game-clients-staging.volley.tv/hub",
83
- vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
84
- configUrl: CONFIG_URL_DEFAULT,
85
- configFile: CONFIG_FILE_DEFAULT,
86
- platformApiUrl: "https://platform-staging.volley-services.net",
87
- platformAuthApiUrl: "https://auth-staging.volley.tv",
88
- amplitudeKey: "",
89
- trustedOrigins: [
57
+ ], trustedShellOrigins: DEFAULT_SHELL_ORIGINS }),
58
+ staging: Object.assign(Object.assign({}, getShellEnvDefaults("staging")), { amplitudeKey: "", trustedOrigins: [
90
59
  "https://volley.tv",
91
60
  "https://vl.ly",
92
61
  "https://staging.vl.ly",
93
62
  "https://vly.gg",
94
- ],
95
- trustedShellOrigins: DEFAULT_SHELL_ORIGINS,
96
- },
63
+ ], trustedShellOrigins: DEFAULT_SHELL_ORIGINS }),
97
64
  prod: prodConfig,
98
65
  production: prodConfig, // Alias for prod
99
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../../../../vwr/src/envDefaults.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,qBAAqB,GAAG;IAC1B,SAAS,EAAE,UAAU;IACrB,uCAAuC,EAAE,WAAW;IACpD,qCAAqC,EAAE,SAAS;IAChD,0CAA0C,EAAE,cAAc;IAC1D,yCAAyC,EAAE,aAAa;IACxD,8CAA8C,EAAE,kBAAkB;IAClE,sCAAsC,EAAE,uBAAuB;IAC/D,sCAAsC,EAAE,4BAA4B;IACpE,iCAAiC,EAAE,2BAA2B;IAC9D,mBAAmB,EAAE,SAAS;IAC9B,uCAAuC,EAAE,kBAAkB;IAC3D,aAAa,EAAE,cAAc;CAChC,CAAA;AAED,MAAM,kBAAkB,GAAG,+BAA+B,CAAA;AAC1D,MAAM,mBAAmB,GAAG,gBAAgB,CAAA;AAC5C,MAAM,mBAAmB,GAAG,OAAO,CAAA;AACnC,MAAM,oBAAoB,GAAG,MAAM,mBAAmB,SAAS,CAAA;AAE/D,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,CACxB,MAA0B,EACN,EAAE;IACtB,MAAM,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACjD,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC,CAAA;AAED,MAAM,UAAU,GAAc;IAC1B,MAAM,EAAE,oCAAoC;IAC5C,MAAM,EAAE,yBAAyB,oBAAoB,EAAE;IACvD,SAAS,EAAE,kBAAkB;IAC7B,UAAU,EAAE,mBAAmB;IAC/B,cAAc,EAAE,sCAAsC;IACtD,kBAAkB,EAAE,wBAAwB;IAC5C,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,CAAC;IACxE,mBAAmB,EAAE,qBAAqB;CAC7C,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAA8B;IACnD,KAAK,EAAE;QACH,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB;QAC/D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,8BAA8B;QACtE,SAAS,EACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,+BAA+B;QACtE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB;QACnE,cAAc,EACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB;YACrC,0CAA0C;QAC9C,kBAAkB,EACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B;YAC1C,4BAA4B;QAChC,YAAY,EAAE,yCAAyC;QACvD,cAAc,EAAE,mBAAmB,CAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CACvC,IAAI;YACD,uBAAuB;YACvB,uBAAuB;YACvB,eAAe;YACf,mBAAmB;YACnB,uBAAuB;YACvB,gBAAgB;SACnB;QACD,mBAAmB,EAAE;YACjB,GAAG,qBAAqB;YACxB,uBAAuB;YACvB,uBAAuB;SAC1B;KACJ;IACD,GAAG,EAAE;QACD,MAAM,EAAE,wCAAwC;QAChD,MAAM,EAAE,yBAAyB,oBAAoB,EAAE;QACvD,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,0CAA0C;QAC1D,kBAAkB,EAAE,4BAA4B;QAChD,YAAY,EAAE,yCAAyC;QACvD,cAAc,EAAE;YACZ,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,uBAAuB;YACvB,gBAAgB;SACnB;QACD,mBAAmB,EAAE,qBAAqB;KAC7C;IACD,OAAO,EAAE;QACL,MAAM,EAAE,4CAA4C;QACpD,MAAM,EAAE,yBAAyB,oBAAoB,EAAE;QACvD,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,8CAA8C;QAC9D,kBAAkB,EAAE,gCAAgC;QACpD,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE;YACZ,mBAAmB;YACnB,eAAe;YACf,uBAAuB;YACvB,gBAAgB;SACnB;QACD,mBAAmB,EAAE,qBAAqB;KAC7C;IACD,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,UAAU,EAAE,iBAAiB;CAC5C,CAAA"}
1
+ {"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../../../../vwr/src/envDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mBAAmB,EACnB,mBAAmB,GACtB,MAAM,oBAAoB,CAAA;AAc3B;;;GAGG;AACH,MAAM,qBAAqB,GAAG;IAC1B,SAAS,EAAE,UAAU;IACrB,uCAAuC,EAAE,WAAW;IACpD,qCAAqC,EAAE,SAAS;IAChD,0CAA0C,EAAE,cAAc;IAC1D,yCAAyC,EAAE,aAAa;IACxD,8CAA8C,EAAE,kBAAkB;IAClE,sCAAsC,EAAE,uBAAuB;IAC/D,sCAAsC,EAAE,4BAA4B;IACpE,iCAAiC,EAAE,2BAA2B;IAC9D,mBAAmB,EAAE,SAAS;IAC9B,uCAAuC,EAAE,kBAAkB;IAC3D,aAAa,EAAE,cAAc;CAChC,CAAA;AAED,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,CACxB,MAA0B,EACN,EAAE;IACtB,MAAM,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACjD,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC,CAAA;AAED,MAAM,UAAU,mCACT,mBAAmB,CAAC,MAAM,CAAC,KAC9B,YAAY,EAAE,EAAE,EAChB,cAAc,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,CAAC,EACxE,mBAAmB,EAAE,qBAAqB,GAC7C,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAA8B;IACnD,KAAK,EAAE;QACH,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,uBAAuB;QAC/D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,8BAA8B;QACtE,SAAS,EACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,+BAA+B;QACtE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB;QACnE,cAAc,EACV,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB;YACrC,0CAA0C;QAC9C,kBAAkB,EACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,0BAA0B;YAC1C,4BAA4B;QAChC,YAAY,EAAE,yCAAyC;QACvD,cAAc,EAAE,mBAAmB,CAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,CACvC,IAAI;YACD,uBAAuB;YACvB,uBAAuB;YACvB,eAAe;YACf,mBAAmB;YACnB,uBAAuB;YACvB,gBAAgB;SACnB;QACD,mBAAmB,EAAE;YACjB,GAAG,qBAAqB;YACxB,uBAAuB;YACvB,uBAAuB;SAC1B;KACJ;IACD,GAAG,kCACI,mBAAmB,CAAC,KAAK,CAAC,KAC7B,YAAY,EAAE,yCAAyC,EACvD,cAAc,EAAE;YACZ,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,uBAAuB;YACvB,gBAAgB;SACnB,EACD,mBAAmB,EAAE,qBAAqB,GAC7C;IACD,OAAO,kCACA,mBAAmB,CAAC,SAAS,CAAC,KACjC,YAAY,EAAE,EAAE,EAChB,cAAc,EAAE;YACZ,mBAAmB;YACnB,eAAe;YACf,uBAAuB;YACvB,gBAAgB;SACnB,EACD,mBAAmB,EAAE,qBAAqB,GAC7C;IACD,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,UAAU,EAAE,iBAAiB;CAC5C,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { VwrMessage } from "./types";
2
+ export interface IframeOptions {
3
+ src: string;
4
+ id?: string;
5
+ allow?: string;
6
+ style?: Partial<CSSStyleDeclaration>;
7
+ container?: HTMLElement;
8
+ onMessage?: (message: VwrMessage) => void;
9
+ }
10
+ export declare class Iframe {
11
+ private options;
12
+ private element;
13
+ private container;
14
+ private messageHandler;
15
+ get src(): string;
16
+ constructor(options?: IframeOptions);
17
+ getElement(): HTMLIFrameElement;
18
+ show(): void;
19
+ hide(): void;
20
+ destroy(): void;
21
+ focus(): void;
22
+ isVisible(): boolean;
23
+ postMessage(message: any): void;
24
+ }
25
+ //# sourceMappingURL=iframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../../../vwr/src/iframe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiC,UAAU,EAAE,MAAM,SAAS,CAAA;AAEnE,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,WAAW,CAAA;IACvB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAA;CAC5C;AAWD,qBAAa,MAAM;IAUX,OAAO,CAAC,OAAO;IATnB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,cAAc,CAA+C;IAErE,IAAI,GAAG,IAAI,MAAM,CAEhB;gBAGW,OAAO,GAAE,aAGhB;IAyCL,UAAU,IAAI,iBAAiB;IAI/B,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;IASf,KAAK,IAAI,IAAI;IAIb,SAAS,IAAI,OAAO;IAIpB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;CAIlC"}
@@ -0,0 +1,82 @@
1
+ // src/iframe.ts
2
+ import { isVwrMessage, isTrustedSource } from "./types";
3
+ const DEFAULT_STYLE = {
4
+ position: "absolute",
5
+ top: "0",
6
+ left: "0",
7
+ width: "100%",
8
+ height: "100%",
9
+ border: "none",
10
+ };
11
+ export class Iframe {
12
+ get src() {
13
+ return this.options.src;
14
+ }
15
+ constructor(options = {
16
+ src: "",
17
+ container: document.body,
18
+ }) {
19
+ this.options = options;
20
+ this.container = null;
21
+ this.messageHandler = null;
22
+ this.element = document.createElement("iframe");
23
+ if (options.id) {
24
+ this.element.id = options.id;
25
+ }
26
+ if (options.src) {
27
+ this.element.src = options.src;
28
+ }
29
+ if (options.allow) {
30
+ this.element.allow = options.allow;
31
+ }
32
+ const style = Object.assign(Object.assign({}, DEFAULT_STYLE), options.style);
33
+ Object.assign(this.element.style, style);
34
+ if (options.container) {
35
+ this.container = options.container;
36
+ this.container.appendChild(this.element);
37
+ }
38
+ if (options.onMessage) {
39
+ const handler = options.onMessage;
40
+ this.messageHandler = (event) => {
41
+ if (!isVwrMessage(event.data))
42
+ return;
43
+ if (!isTrustedSource(event.data.source))
44
+ return;
45
+ if (event.source === this.element.contentWindow) {
46
+ handler(event.data);
47
+ }
48
+ };
49
+ window.addEventListener("message", this.messageHandler);
50
+ }
51
+ this.element.style.display = "none";
52
+ }
53
+ getElement() {
54
+ return this.element;
55
+ }
56
+ show() {
57
+ this.element.style.display = "block";
58
+ }
59
+ hide() {
60
+ this.element.style.display = "none";
61
+ }
62
+ destroy() {
63
+ if (this.messageHandler) {
64
+ window.removeEventListener("message", this.messageHandler);
65
+ this.messageHandler = null;
66
+ }
67
+ this.element.remove();
68
+ this.container = null;
69
+ }
70
+ focus() {
71
+ this.element.focus();
72
+ }
73
+ isVisible() {
74
+ return this.element.style.display !== "none";
75
+ }
76
+ postMessage(message) {
77
+ var _a;
78
+ const origin = new URL(this.options.src).origin;
79
+ (_a = this.element.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, origin);
80
+ }
81
+ }
82
+ //# sourceMappingURL=iframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe.js","sourceRoot":"","sources":["../../../../vwr/src/iframe.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAEhB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAc,MAAM,SAAS,CAAA;AAWnE,MAAM,aAAa,GAAiC;IAChD,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACjB,CAAA;AAED,MAAM,OAAO,MAAM;IAKf,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;IAC3B,CAAC;IAED,YACY,UAAyB;QAC7B,GAAG,EAAE,EAAE;QACP,SAAS,EAAE,QAAQ,CAAC,IAAI;KAC3B;QAHO,YAAO,GAAP,OAAO,CAGd;QAXG,cAAS,GAAuB,IAAI,CAAA;QACpC,mBAAc,GAA2C,IAAI,CAAA;QAYjE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAE/C,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;QAChC,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QAClC,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QACtC,CAAC;QAED,MAAM,KAAK,mCAAQ,aAAa,GAAK,OAAO,CAAC,KAAK,CAAE,CAAA;QACpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAExC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAA;YACjC,IAAI,CAAC,cAAc,GAAG,CAAC,KAAmB,EAAE,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,OAAM;gBACrC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,OAAM;gBAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC9C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACvB,CAAC;YACL,CAAC,CAAA;YAED,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACvC,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAA;IACvB,CAAC;IAED,IAAI;QACA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACxC,CAAC;IAED,IAAI;QACA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACvC,CAAC;IAED,OAAO;QACH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAA;IAChD,CAAC;IAED,WAAW,CAAC,OAAY;;QACpB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;QAC/C,MAAA,IAAI,CAAC,OAAO,CAAC,aAAa,0CAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import type { ILogger } from "@volley/logger";
2
+ /**
3
+ * Get the platform-specific exit function for the RPC server.
4
+ * Returns null if the platform doesn't need exit bridging.
5
+ */
6
+ export declare function getNativeExitFn(platform: string, logger: ILogger): (() => void) | null;
7
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../../../vwr/src/native/app-lifecycle/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAI7C;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GAChB,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAqErB"}
@@ -0,0 +1,68 @@
1
+ const WEB_EXIT_REQUESTED_EVENT = "vwr:exit-requested";
2
+ /**
3
+ * Get the platform-specific exit function for the RPC server.
4
+ * Returns null if the platform doesn't need exit bridging.
5
+ */
6
+ export function getNativeExitFn(platform, logger) {
7
+ switch (platform) {
8
+ case "WEB":
9
+ return () => {
10
+ logger.info("WEB exit requested; no-op in desktop web shell");
11
+ if (typeof window !== "undefined") {
12
+ window.dispatchEvent(new CustomEvent(WEB_EXIT_REQUESTED_EVENT, {
13
+ detail: { platform: "WEB" },
14
+ }));
15
+ }
16
+ };
17
+ case "SAMSUNG_TV":
18
+ return () => {
19
+ var _a;
20
+ if (typeof tizen !== "undefined" &&
21
+ ((_a = tizen === null || tizen === void 0 ? void 0 : tizen.application) === null || _a === void 0 ? void 0 : _a.getCurrentApplication)) {
22
+ tizen.application.getCurrentApplication().exit();
23
+ }
24
+ else {
25
+ logger.warn("`tizen` not available; skipping exit");
26
+ }
27
+ };
28
+ case "LG_TV":
29
+ return () => {
30
+ window.close();
31
+ };
32
+ case "FIRE_TV":
33
+ return () => {
34
+ var _a, _b;
35
+ const capacitor = window.Capacitor;
36
+ if ((_b = (_a = capacitor === null || capacitor === void 0 ? void 0 : capacitor.Plugins) === null || _a === void 0 ? void 0 : _a.AppLifecycle) === null || _b === void 0 ? void 0 : _b.exitApp) {
37
+ capacitor.Plugins.AppLifecycle.exitApp();
38
+ }
39
+ else {
40
+ logger.warn("Capacitor AppLifecycle not available; skipping exit");
41
+ }
42
+ };
43
+ case "IOS_MOBILE":
44
+ return () => {
45
+ var _a, _b;
46
+ const webkit = window.webkit;
47
+ if ((_b = (_a = webkit === null || webkit === void 0 ? void 0 : webkit.messageHandlers) === null || _a === void 0 ? void 0 : _a.nativeBridge) === null || _b === void 0 ? void 0 : _b.postMessage) {
48
+ webkit.messageHandlers.nativeBridge.postMessage(JSON.stringify({ messageType: "Dismiss" }));
49
+ }
50
+ else {
51
+ logger.warn("iOS native bridge not available; skipping exit");
52
+ }
53
+ };
54
+ case "ANDROID_MOBILE":
55
+ return () => {
56
+ const bridge = window.androidNativeBridge;
57
+ if (bridge === null || bridge === void 0 ? void 0 : bridge.postMessage) {
58
+ bridge.postMessage(JSON.stringify({ messageType: "Dismiss" }));
59
+ }
60
+ else {
61
+ logger.warn("Android native bridge not available; skipping exit");
62
+ }
63
+ };
64
+ default:
65
+ return null;
66
+ }
67
+ }
68
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../../vwr/src/native/app-lifecycle/factory.ts"],"names":[],"mappings":"AAEA,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AAErD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAgB,EAChB,MAAe;IAEf,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,KAAK;YACN,OAAO,GAAG,EAAE;gBACR,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;gBAE7D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oBAChC,MAAM,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,wBAAwB,EAAE;wBACtC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;qBAC9B,CAAC,CACL,CAAA;gBACL,CAAC;YACL,CAAC,CAAA;QACL,KAAK,YAAY;YACb,OAAO,GAAG,EAAE;;gBACR,IACI,OAAO,KAAK,KAAK,WAAW;qBAC5B,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,0CAAE,qBAAqB,CAAA,EAC3C,CAAC;oBACC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,CAAA;gBACpD,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;gBACvD,CAAC;YACL,CAAC,CAAA;QACL,KAAK,OAAO;YACR,OAAO,GAAG,EAAE;gBACR,MAAM,CAAC,KAAK,EAAE,CAAA;YAClB,CAAC,CAAA;QACL,KAAK,SAAS;YACV,OAAO,GAAG,EAAE;;gBACR,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,CAAA;gBAC3C,IAAI,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAE,YAAY,0CAAE,OAAO,EAAE,CAAC;oBAC5C,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;gBAC5C,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CACP,qDAAqD,CACxD,CAAA;gBACL,CAAC;YACL,CAAC,CAAA;QACL,KAAK,YAAY;YACb,OAAO,GAAG,EAAE;;gBACR,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,CAAA;gBACrC,IAAI,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,0CAAE,YAAY,0CAAE,WAAW,EAAE,CAAC;oBACrD,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,CAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAC7C,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CACP,gDAAgD,CACnD,CAAA;gBACL,CAAC;YACL,CAAC,CAAA;QACL,KAAK,gBAAgB;YACjB,OAAO,GAAG,EAAE;gBACR,MAAM,MAAM,GAAI,MAAc,CAAC,mBAAmB,CAAA;gBAClD,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC;oBACtB,MAAM,CAAC,WAAW,CACd,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAC7C,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CACP,oDAAoD,CACvD,CAAA;gBACL,CAAC;YACL,CAAC,CAAA;QACL;YACI,OAAO,IAAI,CAAA;IACnB,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { BrowserIpcConnection } from "@volley/browser-ipc";
2
+ import type { ILogger } from "@volley/logger";
3
+ export declare class ExitAppRpcServer {
4
+ #private;
5
+ constructor(exitFn: () => void, ipcConnection: BrowserIpcConnection, logger: ILogger);
6
+ destroy(): void;
7
+ }
8
+ export declare class ExitAppRpcClient {
9
+ #private;
10
+ constructor(ipcConnection: BrowserIpcConnection, logger: ILogger);
11
+ init(): Promise<void>;
12
+ exitApp(): Promise<void>;
13
+ destroy(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../../../../vwr/src/native/app-lifecycle/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAO/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAK7C,qBAAa,gBAAgB;;gBAIrB,MAAM,EAAE,MAAM,IAAI,EAClB,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,OAAO;IAiBZ,OAAO,IAAI,IAAI;CAGzB;AAED,qBAAa,gBAAgB;;gBAOb,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,OAAO;IASnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,46 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _ExitAppRpcServer_rpcServer, _ExitAppRpcClient_rpcClient, _ExitAppRpcClient_exitApp;
13
+ import { BrowserRpcClient, BrowserRpcServer, UnaryRpcClientMethod, UnaryRpcServerMethod, } from "@volley/browser-ipc";
14
+ const EXIT_APP_API = "Native::AppLifecycle";
15
+ const EXIT_APP_METHOD = "exitApp";
16
+ export class ExitAppRpcServer {
17
+ constructor(exitFn, ipcConnection, logger) {
18
+ _ExitAppRpcServer_rpcServer.set(this, void 0);
19
+ const exitMethod = new UnaryRpcServerMethod(EXIT_APP_METHOD, async () => {
20
+ exitFn();
21
+ });
22
+ __classPrivateFieldSet(this, _ExitAppRpcServer_rpcServer, new BrowserRpcServer(EXIT_APP_API, new Set([exitMethod]), ipcConnection, logger), "f");
23
+ }
24
+ destroy() {
25
+ __classPrivateFieldGet(this, _ExitAppRpcServer_rpcServer, "f").destroy();
26
+ }
27
+ }
28
+ _ExitAppRpcServer_rpcServer = new WeakMap();
29
+ export class ExitAppRpcClient {
30
+ constructor(ipcConnection, logger) {
31
+ _ExitAppRpcClient_rpcClient.set(this, void 0);
32
+ _ExitAppRpcClient_exitApp.set(this, new UnaryRpcClientMethod(EXIT_APP_METHOD));
33
+ __classPrivateFieldSet(this, _ExitAppRpcClient_rpcClient, new BrowserRpcClient(EXIT_APP_API, new Set([__classPrivateFieldGet(this, _ExitAppRpcClient_exitApp, "f")]), ipcConnection, logger), "f");
34
+ }
35
+ async init() {
36
+ await __classPrivateFieldGet(this, _ExitAppRpcClient_rpcClient, "f").connect();
37
+ }
38
+ async exitApp() {
39
+ await __classPrivateFieldGet(this, _ExitAppRpcClient_exitApp, "f").call();
40
+ }
41
+ async destroy() {
42
+ await __classPrivateFieldGet(this, _ExitAppRpcClient_rpcClient, "f").destroy();
43
+ }
44
+ }
45
+ _ExitAppRpcClient_rpcClient = new WeakMap(), _ExitAppRpcClient_exitApp = new WeakMap();
46
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../../../../vwr/src/native/app-lifecycle/rpc.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACvB,MAAM,qBAAqB,CAAA;AAG5B,MAAM,YAAY,GAAG,sBAAsB,CAAA;AAC3C,MAAM,eAAe,GAAG,SAAS,CAAA;AAEjC,MAAM,OAAO,gBAAgB;IAGzB,YACI,MAAkB,EAClB,aAAmC,EACnC,MAAe;QALnB,8CAA4B;QAOxB,MAAM,UAAU,GAAG,IAAI,oBAAoB,CACvC,eAAe,EACf,KAAK,IAAmB,EAAE;YACtB,MAAM,EAAE,CAAA;QACZ,CAAC,CACJ,CAAA;QAED,uBAAA,IAAI,+BAAc,IAAI,gBAAgB,CAClC,YAAY,EACZ,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EACrB,aAAa,EACb,MAAM,CACT,MAAA,CAAA;IACL,CAAC;IAEM,OAAO;QACV,uBAAA,IAAI,mCAAW,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;CACJ;;AAED,MAAM,OAAO,gBAAgB;IAOzB,YAAY,aAAmC,EAAE,MAAe;QANhE,8CAA4B;QAC5B,oCAA6C,IAAI,oBAAoB,CAGnE,eAAe,CAAC,EAAA;QAGd,uBAAA,IAAI,+BAAc,IAAI,gBAAgB,CAClC,YAAY,EACZ,IAAI,GAAG,CAAC,CAAC,uBAAA,IAAI,iCAAS,CAAC,CAAC,EACxB,aAAa,EACb,MAAM,CACT,MAAA,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,MAAM,uBAAA,IAAI,mCAAW,CAAC,OAAO,EAAE,CAAA;IACnC,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,uBAAA,IAAI,iCAAS,CAAC,IAAI,EAAE,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,uBAAA,IAAI,mCAAW,CAAC,OAAO,EAAE,CAAA;IACnC,CAAC;CACJ"}