@volley/vwr-loader 1.0.6 → 1.1.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.
- package/dist/cli.js +5 -26
- package/dist/cli.js.map +1 -1
- package/dist/envDefaults.d.ts.map +1 -1
- package/dist/envDefaults.js +0 -10
- package/dist/envDefaults.js.map +1 -1
- package/dist/getDeviceId.d.ts +0 -30
- package/dist/getDeviceId.d.ts.map +1 -1
- package/dist/getDeviceId.js +1 -1
- package/dist/getDeviceId.js.map +1 -1
- package/dist/getEnvironment.d.ts +2 -2
- package/dist/getEnvironment.d.ts.map +1 -1
- package/dist/getEnvironment.js +7 -2
- package/dist/getEnvironment.js.map +1 -1
- package/dist/getShellVersion.d.ts +1 -18
- package/dist/getShellVersion.d.ts.map +1 -1
- package/dist/getShellVersion.js +39 -6
- package/dist/getShellVersion.js.map +1 -1
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +2 -2
- package/src/envDefaults.ts +0 -10
- package/src/getDeviceId.test.ts +25 -18
- package/src/getDeviceId.ts +6 -54
- package/src/getEnvironment.test.ts +29 -7
- package/src/getEnvironment.ts +8 -3
- package/src/getShellVersion.test.ts +122 -3
- package/src/getShellVersion.ts +42 -21
- package/src/types.ts +88 -0
package/dist/cli.js
CHANGED
|
@@ -48,18 +48,8 @@ const ENV_DEFAULTS = {
|
|
|
48
48
|
amplitudeKey: ""
|
|
49
49
|
},
|
|
50
50
|
prod: prodConfig,
|
|
51
|
-
production: prodConfig
|
|
51
|
+
production: prodConfig
|
|
52
52
|
// Alias for prod
|
|
53
|
-
qa: {
|
|
54
|
-
// QA uses staging infrastructure
|
|
55
|
-
hubUrl: "https://game-clients-staging.volley.tv/hub",
|
|
56
|
-
vwrUrl: `https://vwr.volley.tv/staging/${VWR_URL_PATH_DEFAULT}`,
|
|
57
|
-
configUrl: CONFIG_URL_DEFAULT,
|
|
58
|
-
configFile: CONFIG_FILE_DEFAULT,
|
|
59
|
-
platformApiUrl: "https://platform-staging.volley-services.net",
|
|
60
|
-
platformAuthApiUrl: "https://auth-staging.volley.tv",
|
|
61
|
-
amplitudeKey: ""
|
|
62
|
-
}
|
|
63
53
|
};
|
|
64
54
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
65
55
|
const cliPackageJson = JSON.parse(
|
|
@@ -83,18 +73,8 @@ program.name("build-loader").version(cliPackageJson.version).description("Build
|
|
|
83
73
|
"Environment: local, dev, staging, prod (required for non-Fire TV platforms)"
|
|
84
74
|
).requiredOption("--output <path>", "Output directory").option("--hubUrl <url>", "Override Hub URL").option("--amplitudeKey <key>", "Override Amplitude deployment key").option("--vwrUrl <url>", "Override VWR URL").option("--configUrl <url>", "Override VWR Config URL").option("--configFile <filename>", "Override VWR Config Filename").option("--launchUrl <url>", "Override launch url").parse();
|
|
85
75
|
const opts = program.opts();
|
|
86
|
-
const
|
|
87
|
-
const supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(
|
|
88
|
-
function normalizePlatform(platform) {
|
|
89
|
-
const aliases = {
|
|
90
|
-
FIRETV: "FIRE_TV",
|
|
91
|
-
SAMSUNGTV: "SAMSUNG_TV",
|
|
92
|
-
LGTV: "LG_TV",
|
|
93
|
-
ANDROIDMOBILE: "ANDROID_MOBILE",
|
|
94
|
-
IOSMOBILE: "IOS_MOBILE"
|
|
95
|
-
};
|
|
96
|
-
return aliases[platform] || platform;
|
|
97
|
-
}
|
|
76
|
+
const platform = opts.platform.toUpperCase();
|
|
77
|
+
const supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(platform);
|
|
98
78
|
if (!opts.env && !supportsNativeEnv) {
|
|
99
79
|
console.error(
|
|
100
80
|
`❌ --env is required for platform "${opts.platform}"
|
|
@@ -108,12 +88,11 @@ if (!opts.env && supportsNativeEnv) {
|
|
|
108
88
|
`ℹ️ --env not provided. ${opts.platform} will read environment from native shell at runtime.`
|
|
109
89
|
);
|
|
110
90
|
}
|
|
111
|
-
if (!VALID_PLATFORMS.includes(
|
|
91
|
+
if (!VALID_PLATFORMS.includes(platform)) {
|
|
112
92
|
console.error(`❌ Unknown platform: ${opts.platform}`);
|
|
113
93
|
console.error(` Valid: ${VALID_PLATFORMS.join(", ")}`);
|
|
114
94
|
process.exit(1);
|
|
115
95
|
}
|
|
116
|
-
opts.platform = normalizedPlatform;
|
|
117
96
|
let shellEnv = {};
|
|
118
97
|
if (opts.env) {
|
|
119
98
|
const envFile = path.join(process.cwd(), `.env.${opts.env}`);
|
|
@@ -145,7 +124,7 @@ if (opts.env && !envDefaults) {
|
|
|
145
124
|
}
|
|
146
125
|
const effectiveDefaults = envDefaults ?? ENV_DEFAULTS["dev"];
|
|
147
126
|
const config = {
|
|
148
|
-
VITE_PLATFORM:
|
|
127
|
+
VITE_PLATFORM: platform,
|
|
149
128
|
VITE_ENVIRONMENT: opts.env,
|
|
150
129
|
// undefined for Fire TV without --env (reads from native)
|
|
151
130
|
VITE_HUB_URL: opts.hubUrl || shellEnv.VITE_HUB_URL || effectiveDefaults.hubUrl,
|
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_URL_PATH_DEFAULT = \"v1/latest/vwr.js\"\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}\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: import.meta.env.VITE_TRUSTED_ORIGINS?.split(\",\").filter(\n Boolean\n ),\n },\n dev: {\n hubUrl: \"https://game-clients-dev.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/dev/${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 },\n staging: {\n hubUrl: \"https://game-clients-staging.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/staging/${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 },\n prod: prodConfig,\n production: prodConfig, // Alias for prod\n qa: {\n // QA uses staging infrastructure\n hubUrl: \"https://game-clients-staging.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/staging/${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 },\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(\"--vwrUrl <url>\", \"Override VWR URL\")\n .option(\"--configUrl <url>\", \"Override VWR Config URL\")\n .option(\"--configFile <filename>\", \"Override VWR Config Filename\")\n .option(\"--launchUrl <url>\", \"Override launch url\")\n .parse()\n\nconst opts = program.opts()\n// Normalize platform name (handle FIRETV -> FIRE_TV, etc.)\nconst normalizedPlatform = normalizePlatform(opts.platform.toUpperCase())\nconst supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(normalizedPlatform)\n\nfunction normalizePlatform(platform: string): string {\n // Handle common variants\n const aliases: Record<string, string> = {\n FIRETV: \"FIRE_TV\",\n SAMSUNGTV: \"SAMSUNG_TV\",\n LGTV: \"LG_TV\",\n ANDROIDMOBILE: \"ANDROID_MOBILE\",\n IOSMOBILE: \"IOS_MOBILE\",\n }\n return aliases[platform] || platform\n}\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(normalizedPlatform)) {\n console.error(`❌ Unknown platform: ${opts.platform}`)\n console.error(` Valid: ${VALID_PLATFORMS.join(\", \")}`)\n process.exit(1)\n}\nopts.platform = normalizedPlatform\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: normalizedPlatform,\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:\n opts.vwrUrl || 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}\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}\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}\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":["../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_URL_PATH_DEFAULT = \"v1/latest/vwr.js\"\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}\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: import.meta.env.VITE_TRUSTED_ORIGINS?.split(\",\").filter(\n Boolean\n ),\n },\n dev: {\n hubUrl: \"https://game-clients-dev.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/dev/${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 },\n staging: {\n hubUrl: \"https://game-clients-staging.volley.tv/hub\",\n vwrUrl: `https://vwr.volley.tv/staging/${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 },\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(\"--vwrUrl <url>\", \"Override VWR URL\")\n .option(\"--configUrl <url>\", \"Override VWR Config URL\")\n .option(\"--configFile <filename>\", \"Override VWR Config Filename\")\n .option(\"--launchUrl <url>\", \"Override launch url\")\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:\n opts.vwrUrl || 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}\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}\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}\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envDefaults.d.ts","sourceRoot":"","sources":["../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;CAC5B;AAgBD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"envDefaults.d.ts","sourceRoot":"","sources":["../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;CAC5B;AAgBD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAsClD,CAAA"}
|
package/dist/envDefaults.js
CHANGED
|
@@ -44,15 +44,5 @@ export const ENV_DEFAULTS = {
|
|
|
44
44
|
},
|
|
45
45
|
prod: prodConfig,
|
|
46
46
|
production: prodConfig, // Alias for prod
|
|
47
|
-
qa: {
|
|
48
|
-
// QA uses staging infrastructure
|
|
49
|
-
hubUrl: "https://game-clients-staging.volley.tv/hub",
|
|
50
|
-
vwrUrl: `https://vwr.volley.tv/staging/${VWR_URL_PATH_DEFAULT}`,
|
|
51
|
-
configUrl: CONFIG_URL_DEFAULT,
|
|
52
|
-
configFile: CONFIG_FILE_DEFAULT,
|
|
53
|
-
platformApiUrl: "https://platform-staging.volley-services.net",
|
|
54
|
-
platformAuthApiUrl: "https://auth-staging.volley.tv",
|
|
55
|
-
amplitudeKey: "",
|
|
56
|
-
},
|
|
57
47
|
};
|
|
58
48
|
//# sourceMappingURL=envDefaults.js.map
|
package/dist/envDefaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../src/envDefaults.ts"],"names":[],"mappings":";AAWA,MAAM,kBAAkB,GAAG,+BAA+B,CAAA;AAC1D,MAAM,mBAAmB,GAAG,gBAAgB,CAAA;AAC5C,MAAM,oBAAoB,GAAG,kBAAkB,CAAA;AAE/C,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;CACnB,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,MAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,0CAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CACnE,OAAO,CACV;KACJ;IACD,GAAG,EAAE;QACD,MAAM,EAAE,wCAAwC;QAChD,MAAM,EAAE,6BAA6B,oBAAoB,EAAE;QAC3D,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,0CAA0C;QAC1D,kBAAkB,EAAE,4BAA4B;QAChD,YAAY,EAAE,yCAAyC;KAC1D;IACD,OAAO,EAAE;QACL,MAAM,EAAE,4CAA4C;QACpD,MAAM,EAAE,iCAAiC,oBAAoB,EAAE;QAC/D,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,8CAA8C;QAC9D,kBAAkB,EAAE,gCAAgC;QACpD,YAAY,EAAE,EAAE;KACnB;IACD,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,UAAU,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../src/envDefaults.ts"],"names":[],"mappings":";AAWA,MAAM,kBAAkB,GAAG,+BAA+B,CAAA;AAC1D,MAAM,mBAAmB,GAAG,gBAAgB,CAAA;AAC5C,MAAM,oBAAoB,GAAG,kBAAkB,CAAA;AAE/C,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;CACnB,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,MAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,0CAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CACnE,OAAO,CACV;KACJ;IACD,GAAG,EAAE;QACD,MAAM,EAAE,wCAAwC;QAChD,MAAM,EAAE,6BAA6B,oBAAoB,EAAE;QAC3D,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,0CAA0C;QAC1D,kBAAkB,EAAE,4BAA4B;QAChD,YAAY,EAAE,yCAAyC;KAC1D;IACD,OAAO,EAAE;QACL,MAAM,EAAE,4CAA4C;QACpD,MAAM,EAAE,iCAAiC,oBAAoB,EAAE;QAC/D,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,cAAc,EAAE,8CAA8C;QAC9D,kBAAkB,EAAE,gCAAgC;QACpD,YAAY,EAAE,EAAE;KACnB;IACD,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,UAAU,EAAE,iBAAiB;CAC5C,CAAA"}
|
package/dist/getDeviceId.d.ts
CHANGED
|
@@ -24,34 +24,4 @@ import { type Logger } from "./logger";
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
export declare function getDeviceId(platform: string, logger?: Logger): Promise<string | null>;
|
|
27
|
-
interface LGDeviceIdResponse {
|
|
28
|
-
idList?: Array<{
|
|
29
|
-
idValue?: string;
|
|
30
|
-
}>;
|
|
31
|
-
}
|
|
32
|
-
declare global {
|
|
33
|
-
interface Window {
|
|
34
|
-
webapis?: {
|
|
35
|
-
productinfo?: {
|
|
36
|
-
getDuid: () => string;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
webOS?: {
|
|
40
|
-
service?: {
|
|
41
|
-
request: (uri: string, options: {
|
|
42
|
-
method?: string;
|
|
43
|
-
parameters?: Record<string, unknown>;
|
|
44
|
-
onSuccess?: (response: LGDeviceIdResponse) => void;
|
|
45
|
-
onFailure?: (error: {
|
|
46
|
-
errorText?: string;
|
|
47
|
-
}) => void;
|
|
48
|
-
subscribe?: boolean;
|
|
49
|
-
}) => {
|
|
50
|
-
cancel: () => void;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export {};
|
|
57
27
|
//# sourceMappingURL=getDeviceId.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDeviceId.d.ts","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"getDeviceId.d.ts","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAGrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
|
package/dist/getDeviceId.js
CHANGED
|
@@ -34,7 +34,6 @@ export async function getDeviceId(platform, logger = defaultLogger) {
|
|
|
34
34
|
return await getLGDeviceId(logger);
|
|
35
35
|
case "ANDROID_MOBILE":
|
|
36
36
|
case "IOS_MOBILE":
|
|
37
|
-
case "MOBILE": // Legacy/Generic
|
|
38
37
|
return await getMobileDeviceId(logger);
|
|
39
38
|
case "WEB":
|
|
40
39
|
return getLocalStorageDeviceId();
|
|
@@ -204,4 +203,5 @@ async function getLGDeviceId(logger) {
|
|
|
204
203
|
}
|
|
205
204
|
});
|
|
206
205
|
}
|
|
206
|
+
// Types imported from ./types.ts
|
|
207
207
|
//# sourceMappingURL=getDeviceId.js.map
|
package/dist/getDeviceId.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDeviceId.js","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"getDeviceId.js","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"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"}
|
package/dist/getEnvironment.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Logger } from "./logger";
|
|
2
|
-
export type Environment = "local" | "dev" | "
|
|
2
|
+
export type Environment = "local" | "dev" | "staging" | "prod";
|
|
3
3
|
export type EnvironmentSource = "native" | "build-time" | "default";
|
|
4
4
|
export interface EnvironmentResult {
|
|
5
5
|
environment: Environment;
|
|
@@ -16,7 +16,7 @@ export interface EnvironmentResult {
|
|
|
16
16
|
* This ensures production APKs cannot accidentally run dev VWR,
|
|
17
17
|
* since the native Android build variant determines the environment.
|
|
18
18
|
*
|
|
19
|
-
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', '
|
|
19
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'ANDROID_MOBILE', 'IOS_MOBILE', 'WEB')
|
|
20
20
|
* @param buildTimeEnv - Optional build-time injected environment (from CLI)
|
|
21
21
|
* @param logger - Optional logger for reporting
|
|
22
22
|
* @returns Environment result with source information for logging
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEnvironment.d.ts","sourceRoot":"","sources":["../src/getEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"getEnvironment.d.ts","sourceRoot":"","sources":["../src/getEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAA;AAC9D,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAA;AAEnE,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,iBAAiB,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAuC5B"}
|
package/dist/getEnvironment.js
CHANGED
|
@@ -10,7 +10,7 @@ import { defaultLogger } from "./logger";
|
|
|
10
10
|
* This ensures production APKs cannot accidentally run dev VWR,
|
|
11
11
|
* since the native Android build variant determines the environment.
|
|
12
12
|
*
|
|
13
|
-
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', '
|
|
13
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'ANDROID_MOBILE', 'IOS_MOBILE', 'WEB')
|
|
14
14
|
* @param buildTimeEnv - Optional build-time injected environment (from CLI)
|
|
15
15
|
* @param logger - Optional logger for reporting
|
|
16
16
|
* @returns Environment result with source information for logging
|
|
@@ -79,12 +79,17 @@ async function getFireTVEnvironment(logger) {
|
|
|
79
79
|
* - "dev"
|
|
80
80
|
* - "staging"
|
|
81
81
|
* - "prod"
|
|
82
|
+
*
|
|
83
|
+
* Note: Legacy "qa" values are mapped to "staging".
|
|
82
84
|
*/
|
|
83
85
|
function mapNativeEnvironment(nativeEnv) {
|
|
84
86
|
const normalized = nativeEnv.toLowerCase();
|
|
85
87
|
switch (normalized) {
|
|
86
88
|
case "development":
|
|
87
89
|
return "dev";
|
|
90
|
+
case "qa":
|
|
91
|
+
// Legacy: map qa to staging
|
|
92
|
+
return "staging";
|
|
88
93
|
case "staging":
|
|
89
94
|
return "staging";
|
|
90
95
|
case "production":
|
|
@@ -98,7 +103,7 @@ function mapNativeEnvironment(nativeEnv) {
|
|
|
98
103
|
}
|
|
99
104
|
}
|
|
100
105
|
function isValidEnvironment(env) {
|
|
101
|
-
return ["local", "dev", "
|
|
106
|
+
return ["local", "dev", "staging", "prod"].includes(env);
|
|
102
107
|
}
|
|
103
108
|
// Note: Window.Capacitor type is declared in getDeviceId.ts
|
|
104
109
|
// We just need to add the getNativeShellAppEnvironment method type there
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEnvironment.js","sourceRoot":"","sources":["../src/getEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;AAUrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,QAAgB,EAChB,YAAgC,EAChC,SAAiB,aAAa;IAE9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IAEjD,8EAA8E;IAC9E,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;YAC9C,MAAM,CAAC,IAAI,CACP,yBAAyB,MAAM,8CAA8C,SAAS,IAAI,CAC7F,CAAA;YACD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACpD,CAAC;QACD,6CAA6C;QAC7C,MAAM,CAAC,IAAI,CACP,4EAA4E,CAC/E,CAAA;IACL,CAAC;IAED,wCAAwC;IACxC,IAAI,YAAY,EAAE,CAAC;QACf,MAAM,sBAAsB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;QACzD,IAAI,kBAAkB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CACP,yBAAyB,sBAAsB,sCAAsC,CACxF,CAAA;YACD,OAAO;gBACH,WAAW,EAAE,sBAAqC;gBAClD,MAAM,EAAE,YAAY;aACvB,CAAA;QACL,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAgB,KAAK,CAAA;IACrC,MAAM,CAAC,IAAI,CACP,yBAAyB,UAAU,kEAAkE,CACxG,CAAA;IACD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AACzD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,MAAc;;IAC9C,IAAI,CAAC;QACD,IACI,CAAC,CAAA,MAAA,MAAA,MAAA,MAAM,CAAC,SAAS,0CAAE,OAAO,0CAAE,UAAU,0CAAE,4BAA4B,CAAA,EACtE,CAAC;YACC,MAAM,CAAC,IAAI,CACP,+DAA+D,CAClE,CAAA;YACD,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,MAAM,GACR,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAA;QAC5E,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,OAAO,MAAM,CAAC,WAAW,CAAA;QAC7B,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,KAAK,CACR,gEAAgE,CACnE,CAAA;QACL,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACR,yDAAyD,EACzD,EAAE,KAAK,EAAE,CACZ,CAAA;IACL,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"getEnvironment.js","sourceRoot":"","sources":["../src/getEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { type Logger } from "./logger";
|
|
|
6
6
|
* - SAMSUNG_TV: Tizen Application API `tizen.application.getAppInfo().version`
|
|
7
7
|
* - LG_TV: webOS Application API `webOS.fetchAppInfo()`
|
|
8
8
|
* - FIRE_TV: Native bridge via Capacitor DeviceInfo plugin
|
|
9
|
-
* - ANDROID_MOBILE/IOS_MOBILE: Native
|
|
9
|
+
* - ANDROID_MOBILE/IOS_MOBILE: Native app context `window.iosAppContext.appVersion` / `window.androidAppContext.appVersion`
|
|
10
10
|
* - WEB/Unknown: Returns 'unknown'
|
|
11
11
|
*
|
|
12
12
|
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV, ANDROID_MOBILE, IOS_MOBILE, WEB)
|
|
@@ -14,21 +14,4 @@ import { type Logger } from "./logger";
|
|
|
14
14
|
* @returns Shell version string or 'unknown' if not available
|
|
15
15
|
*/
|
|
16
16
|
export declare function getShellVersion(platform: string, logger?: Logger): Promise<string>;
|
|
17
|
-
declare global {
|
|
18
|
-
interface Window {
|
|
19
|
-
Capacitor?: {
|
|
20
|
-
Plugins?: {
|
|
21
|
-
DeviceInfo?: {
|
|
22
|
-
getDeviceInfo(): Promise<{
|
|
23
|
-
versionName?: string;
|
|
24
|
-
[key: string]: any;
|
|
25
|
-
}>;
|
|
26
|
-
[key: string]: any;
|
|
27
|
-
};
|
|
28
|
-
[key: string]: any;
|
|
29
|
-
};
|
|
30
|
-
[key: string]: any;
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
17
|
//# sourceMappingURL=getShellVersion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getShellVersion.d.ts","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"getShellVersion.d.ts","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAGrD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAyEjB"}
|
package/dist/getShellVersion.js
CHANGED
|
@@ -6,7 +6,7 @@ import { defaultLogger } from "./logger";
|
|
|
6
6
|
* - SAMSUNG_TV: Tizen Application API `tizen.application.getAppInfo().version`
|
|
7
7
|
* - LG_TV: webOS Application API `webOS.fetchAppInfo()`
|
|
8
8
|
* - FIRE_TV: Native bridge via Capacitor DeviceInfo plugin
|
|
9
|
-
* - ANDROID_MOBILE/IOS_MOBILE: Native
|
|
9
|
+
* - ANDROID_MOBILE/IOS_MOBILE: Native app context `window.iosAppContext.appVersion` / `window.androidAppContext.appVersion`
|
|
10
10
|
* - WEB/Unknown: Returns 'unknown'
|
|
11
11
|
*
|
|
12
12
|
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV, ANDROID_MOBILE, IOS_MOBILE, WEB)
|
|
@@ -58,12 +58,10 @@ export async function getShellVersion(platform, logger = defaultLogger) {
|
|
|
58
58
|
}
|
|
59
59
|
return "unknown";
|
|
60
60
|
}
|
|
61
|
-
// Mobile:
|
|
61
|
+
// Mobile: Get version from native app context
|
|
62
62
|
if (normalizedPlatform === "ANDROID_MOBILE" ||
|
|
63
|
-
normalizedPlatform === "IOS_MOBILE"
|
|
64
|
-
|
|
65
|
-
// TODO: Implement native bridge version retrieval when available
|
|
66
|
-
return "unknown";
|
|
63
|
+
normalizedPlatform === "IOS_MOBILE") {
|
|
64
|
+
return getMobileAppVersion(logger);
|
|
67
65
|
}
|
|
68
66
|
// Web platform: Check for injected version at build time
|
|
69
67
|
if (normalizedPlatform === "WEB") {
|
|
@@ -81,4 +79,39 @@ export async function getShellVersion(platform, logger = defaultLogger) {
|
|
|
81
79
|
return "unknown";
|
|
82
80
|
}
|
|
83
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Get app version from mobile native app context (iOS/Android)
|
|
84
|
+
*
|
|
85
|
+
* iOS exposes appVersion via window.iosAppContext
|
|
86
|
+
* Android exposes appVersion via window.androidAppContext (also check window.top for iframes)
|
|
87
|
+
*/
|
|
88
|
+
function getMobileAppVersion(logger) {
|
|
89
|
+
var _a, _b, _c, _d;
|
|
90
|
+
// Try iOS first
|
|
91
|
+
const iosVersion = (_a = window.iosAppContext) === null || _a === void 0 ? void 0 : _a.appVersion;
|
|
92
|
+
if (iosVersion && iosVersion.trim()) {
|
|
93
|
+
return iosVersion;
|
|
94
|
+
}
|
|
95
|
+
// Try Android (check both window and window.top for iframe scenarios)
|
|
96
|
+
const androidContext = window.androidAppContext;
|
|
97
|
+
try {
|
|
98
|
+
const androidVersion = (_b = androidContext === null || androidContext === void 0 ? void 0 : androidContext.appVersion) !== null && _b !== void 0 ? _b : (_d = (_c = window.top) === null || _c === void 0 ? void 0 : _c.androidAppContext) === null || _d === void 0 ? void 0 : _d.appVersion;
|
|
99
|
+
if (androidVersion && androidVersion.trim()) {
|
|
100
|
+
return androidVersion;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (_e) {
|
|
104
|
+
// window.top access can throw if cross-origin
|
|
105
|
+
const androidVersion = androidContext === null || androidContext === void 0 ? void 0 : androidContext.appVersion;
|
|
106
|
+
if (androidVersion && androidVersion.trim()) {
|
|
107
|
+
return androidVersion;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
logger.warn("[VWR:MobileAppVersion] appVersion not found", {
|
|
111
|
+
iosAppContext: !!window.iosAppContext,
|
|
112
|
+
androidAppContext: !!androidContext,
|
|
113
|
+
});
|
|
114
|
+
return "unknown";
|
|
115
|
+
}
|
|
116
|
+
// Types imported from ./types.ts
|
|
84
117
|
//# sourceMappingURL=getShellVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getShellVersion.js","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"getShellVersion.js","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for vwr-loader platform APIs
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extended window interface for mobile app context.
|
|
6
|
+
* Matches the types from @volley/sdk ExtendedWindow.ts
|
|
7
|
+
*/
|
|
8
|
+
export interface MobileExtendedWindow extends Window {
|
|
9
|
+
iosAppContext?: {
|
|
10
|
+
appVersion: string;
|
|
11
|
+
environment?: string;
|
|
12
|
+
phoneDeviceId?: string;
|
|
13
|
+
};
|
|
14
|
+
androidAppContext?: {
|
|
15
|
+
appVersion: string;
|
|
16
|
+
environment?: string;
|
|
17
|
+
phoneDeviceId?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Global type declarations for platform APIs
|
|
22
|
+
*/
|
|
23
|
+
declare global {
|
|
24
|
+
interface Window {
|
|
25
|
+
Capacitor?: {
|
|
26
|
+
Plugins?: {
|
|
27
|
+
DeviceInfo?: {
|
|
28
|
+
getDeviceInfo(): Promise<{
|
|
29
|
+
versionName?: string;
|
|
30
|
+
[key: string]: any;
|
|
31
|
+
}>;
|
|
32
|
+
getAndroidId(): Promise<{
|
|
33
|
+
androidId?: string;
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}>;
|
|
36
|
+
getNativeShellAppEnvironment(): Promise<{
|
|
37
|
+
environment?: string;
|
|
38
|
+
}>;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
};
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
};
|
|
43
|
+
[key: string]: any;
|
|
44
|
+
};
|
|
45
|
+
webapis?: {
|
|
46
|
+
productinfo?: {
|
|
47
|
+
getDuid: () => string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
webOS?: {
|
|
51
|
+
service?: {
|
|
52
|
+
request: (uri: string, options: {
|
|
53
|
+
method?: string;
|
|
54
|
+
parameters?: Record<string, unknown>;
|
|
55
|
+
onSuccess?: (response: LGDeviceIdResponse) => void;
|
|
56
|
+
onFailure?: (error: {
|
|
57
|
+
errorText?: string;
|
|
58
|
+
}) => void;
|
|
59
|
+
subscribe?: boolean;
|
|
60
|
+
}) => {
|
|
61
|
+
cancel: () => void;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
fetchAppInfo?: (callback: (appInfo?: {
|
|
65
|
+
version?: string;
|
|
66
|
+
}) => void) => void;
|
|
67
|
+
};
|
|
68
|
+
tizen?: {
|
|
69
|
+
application?: {
|
|
70
|
+
getAppInfo: () => {
|
|
71
|
+
version?: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* LG Luna service response for device ID
|
|
79
|
+
*/
|
|
80
|
+
export interface LGDeviceIdResponse {
|
|
81
|
+
idList?: Array<{
|
|
82
|
+
idType?: string;
|
|
83
|
+
idValue?: string;
|
|
84
|
+
}>;
|
|
85
|
+
returnValue?: boolean;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,MAAM;IAChD,aAAa,CAAC,EAAE;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,aAAa,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,iBAAiB,CAAC,EAAE;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,aAAa,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;CACJ;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,CAAC,EAAE;YACR,OAAO,CAAC,EAAE;gBACN,UAAU,CAAC,EAAE;oBACT,aAAa,IAAI,OAAO,CAAC;wBACrB,WAAW,CAAC,EAAE,MAAM,CAAA;wBACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;qBACrB,CAAC,CAAA;oBACF,YAAY,IAAI,OAAO,CAAC;wBACpB,SAAS,CAAC,EAAE,MAAM,CAAA;wBAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;qBACrB,CAAC,CAAA;oBACF,4BAA4B,IAAI,OAAO,CAAC;wBACpC,WAAW,CAAC,EAAE,MAAM,CAAA;qBACvB,CAAC,CAAA;oBACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;iBACrB,CAAA;gBACD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;aACrB,CAAA;YACD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SACrB,CAAA;QACD,OAAO,CAAC,EAAE;YACN,WAAW,CAAC,EAAE;gBACV,OAAO,EAAE,MAAM,MAAM,CAAA;aACxB,CAAA;SACJ,CAAA;QACD,KAAK,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE;gBACN,OAAO,EAAE,CACL,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;oBACL,MAAM,CAAC,EAAE,MAAM,CAAA;oBACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;oBACpC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAA;oBAClD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;wBAAE,SAAS,CAAC,EAAE,MAAM,CAAA;qBAAE,KAAK,IAAI,CAAA;oBACnD,SAAS,CAAC,EAAE,OAAO,CAAA;iBACtB,KACA;oBACD,MAAM,EAAE,MAAM,IAAI,CAAA;iBACrB,CAAA;aACJ,CAAA;YACD,YAAY,CAAC,EAAE,CACX,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;gBAAE,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,KAAK,IAAI,KACjD,IAAI,CAAA;SACZ,CAAA;QACD,KAAK,CAAC,EAAE;YACJ,WAAW,CAAC,EAAE;gBACV,UAAU,EAAE,MAAM;oBAAE,OAAO,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAA;aACzC,CAAA;SACJ,CAAA;KACJ;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;IACF,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volley/vwr-loader",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Vite-based VWR loader for all Volley platforms",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"./envDefaults": "./dist/envDefaults.js"
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
|
-
"build-loader": "
|
|
16
|
+
"build-loader": "dist/cli.js"
|
|
17
17
|
},
|
|
18
18
|
"files": [
|
|
19
19
|
"dist",
|
package/src/envDefaults.ts
CHANGED
|
@@ -61,14 +61,4 @@ export const ENV_DEFAULTS: Record<string, EnvConfig> = {
|
|
|
61
61
|
},
|
|
62
62
|
prod: prodConfig,
|
|
63
63
|
production: prodConfig, // Alias for prod
|
|
64
|
-
qa: {
|
|
65
|
-
// QA uses staging infrastructure
|
|
66
|
-
hubUrl: "https://game-clients-staging.volley.tv/hub",
|
|
67
|
-
vwrUrl: `https://vwr.volley.tv/staging/${VWR_URL_PATH_DEFAULT}`,
|
|
68
|
-
configUrl: CONFIG_URL_DEFAULT,
|
|
69
|
-
configFile: CONFIG_FILE_DEFAULT,
|
|
70
|
-
platformApiUrl: "https://platform-staging.volley-services.net",
|
|
71
|
-
platformAuthApiUrl: "https://auth-staging.volley.tv",
|
|
72
|
-
amplitudeKey: "",
|
|
73
|
-
},
|
|
74
64
|
}
|
package/src/getDeviceId.test.ts
CHANGED
|
@@ -165,7 +165,7 @@ describe("getDeviceId", () => {
|
|
|
165
165
|
})
|
|
166
166
|
})
|
|
167
167
|
|
|
168
|
-
describe("
|
|
168
|
+
describe("IOS_MOBILE platform", () => {
|
|
169
169
|
it("returns device ID from iosAppContext when available", async () => {
|
|
170
170
|
const mockDeviceId = "ios-device-123"
|
|
171
171
|
Object.defineProperty(window, "iosAppContext", {
|
|
@@ -176,10 +176,30 @@ describe("getDeviceId", () => {
|
|
|
176
176
|
configurable: true,
|
|
177
177
|
})
|
|
178
178
|
|
|
179
|
-
const result = await getDeviceId("
|
|
179
|
+
const result = await getDeviceId("IOS_MOBILE")
|
|
180
180
|
expect(result).toBe(mockDeviceId)
|
|
181
181
|
})
|
|
182
182
|
|
|
183
|
+
it("returns null when no app context is available", async () => {
|
|
184
|
+
const result = await getDeviceId("IOS_MOBILE")
|
|
185
|
+
expect(result).toBeNull()
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it("returns null when phoneDeviceId is empty", async () => {
|
|
189
|
+
Object.defineProperty(window, "iosAppContext", {
|
|
190
|
+
value: {
|
|
191
|
+
phoneDeviceId: "",
|
|
192
|
+
},
|
|
193
|
+
writable: true,
|
|
194
|
+
configurable: true,
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
const result = await getDeviceId("IOS_MOBILE")
|
|
198
|
+
expect(result).toBeNull()
|
|
199
|
+
})
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
describe("ANDROID_MOBILE platform", () => {
|
|
183
203
|
it("returns device ID from androidAppContext when available", async () => {
|
|
184
204
|
const mockDeviceId = "android-device-123"
|
|
185
205
|
Object.defineProperty(window, "androidAppContext", {
|
|
@@ -190,7 +210,7 @@ describe("getDeviceId", () => {
|
|
|
190
210
|
configurable: true,
|
|
191
211
|
})
|
|
192
212
|
|
|
193
|
-
const result = await getDeviceId("
|
|
213
|
+
const result = await getDeviceId("ANDROID_MOBILE")
|
|
194
214
|
expect(result).toBe(mockDeviceId)
|
|
195
215
|
})
|
|
196
216
|
|
|
@@ -210,25 +230,12 @@ describe("getDeviceId", () => {
|
|
|
210
230
|
configurable: true,
|
|
211
231
|
})
|
|
212
232
|
|
|
213
|
-
const result = await getDeviceId("
|
|
233
|
+
const result = await getDeviceId("ANDROID_MOBILE")
|
|
214
234
|
expect(result).toBe("ios-id")
|
|
215
235
|
})
|
|
216
236
|
|
|
217
237
|
it("returns null when no app context is available", async () => {
|
|
218
|
-
const result = await getDeviceId("
|
|
219
|
-
expect(result).toBeNull()
|
|
220
|
-
})
|
|
221
|
-
|
|
222
|
-
it("returns null when phoneDeviceId is empty", async () => {
|
|
223
|
-
Object.defineProperty(window, "iosAppContext", {
|
|
224
|
-
value: {
|
|
225
|
-
phoneDeviceId: "",
|
|
226
|
-
},
|
|
227
|
-
writable: true,
|
|
228
|
-
configurable: true,
|
|
229
|
-
})
|
|
230
|
-
|
|
231
|
-
const result = await getDeviceId("MOBILE")
|
|
238
|
+
const result = await getDeviceId("ANDROID_MOBILE")
|
|
232
239
|
expect(result).toBeNull()
|
|
233
240
|
})
|
|
234
241
|
})
|
package/src/getDeviceId.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defaultLogger, type Logger } from "./logger"
|
|
2
|
+
import type { LGDeviceIdResponse, MobileExtendedWindow } from "./types"
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Get a unique device identifier for the current platform.
|
|
@@ -38,7 +39,6 @@ export async function getDeviceId(
|
|
|
38
39
|
return await getLGDeviceId(logger)
|
|
39
40
|
case "ANDROID_MOBILE":
|
|
40
41
|
case "IOS_MOBILE":
|
|
41
|
-
case "MOBILE": // Legacy/Generic
|
|
42
42
|
return await getMobileDeviceId(logger)
|
|
43
43
|
case "WEB":
|
|
44
44
|
return getLocalStorageDeviceId()
|
|
@@ -93,17 +93,17 @@ async function getFireTVDeviceId(logger: Logger): Promise<string | null> {
|
|
|
93
93
|
*/
|
|
94
94
|
function getMobileDeviceId(logger: Logger): string | null {
|
|
95
95
|
// Try iOS first
|
|
96
|
-
const iosId = (window as
|
|
96
|
+
const iosId = (window as MobileExtendedWindow).iosAppContext?.phoneDeviceId
|
|
97
97
|
if (iosId && iosId.trim()) {
|
|
98
98
|
return iosId
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
// Try Android (check both window and window.top for iframe scenarios)
|
|
102
|
-
const androidContext = (window as
|
|
102
|
+
const androidContext = (window as MobileExtendedWindow).androidAppContext
|
|
103
103
|
try {
|
|
104
104
|
const androidId =
|
|
105
105
|
androidContext?.phoneDeviceId ??
|
|
106
|
-
(window.top as
|
|
106
|
+
(window.top as MobileExtendedWindow | null)?.androidAppContext
|
|
107
107
|
?.phoneDeviceId
|
|
108
108
|
if (androidId && androidId.trim()) {
|
|
109
109
|
return androidId
|
|
@@ -117,7 +117,7 @@ function getMobileDeviceId(logger: Logger): string | null {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
logger.error("[VWR:MobileDeviceId] phoneDeviceId not found", {
|
|
120
|
-
iosAppContext: !!(window as
|
|
120
|
+
iosAppContext: !!(window as MobileExtendedWindow).iosAppContext,
|
|
121
121
|
androidAppContext: !!androidContext,
|
|
122
122
|
})
|
|
123
123
|
return null
|
|
@@ -220,52 +220,4 @@ async function getLGDeviceId(logger: Logger): Promise<string | null> {
|
|
|
220
220
|
})
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
//
|
|
224
|
-
interface LGDeviceIdResponse {
|
|
225
|
-
idList?: Array<{
|
|
226
|
-
idValue?: string
|
|
227
|
-
}>
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Extended window interface for mobile app context
|
|
232
|
-
* Matches the types from @volley/sdk ExtendedWindow.ts
|
|
233
|
-
*/
|
|
234
|
-
interface ExtendedWindow extends Window {
|
|
235
|
-
iosAppContext?: {
|
|
236
|
-
phoneDeviceId: string
|
|
237
|
-
}
|
|
238
|
-
androidAppContext?: {
|
|
239
|
-
phoneDeviceId: string
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Type augmentation for platform-specific APIs
|
|
244
|
-
// Note: Capacitor types are declared in getShellVersion.ts with index signatures
|
|
245
|
-
// to allow extensibility. Additional methods used here are accessed via
|
|
246
|
-
// the index signatures [key: string]: any
|
|
247
|
-
declare global {
|
|
248
|
-
interface Window {
|
|
249
|
-
webapis?: {
|
|
250
|
-
productinfo?: {
|
|
251
|
-
getDuid: () => string
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
webOS?: {
|
|
255
|
-
service?: {
|
|
256
|
-
request: (
|
|
257
|
-
uri: string,
|
|
258
|
-
options: {
|
|
259
|
-
method?: string
|
|
260
|
-
parameters?: Record<string, unknown>
|
|
261
|
-
onSuccess?: (response: LGDeviceIdResponse) => void
|
|
262
|
-
onFailure?: (error: { errorText?: string }) => void
|
|
263
|
-
subscribe?: boolean
|
|
264
|
-
}
|
|
265
|
-
) => {
|
|
266
|
-
cancel: () => void
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
223
|
+
// Types imported from ./types.ts
|
|
@@ -111,6 +111,33 @@ describe("getEnvironment", () => {
|
|
|
111
111
|
expect(result.source).toBe("native")
|
|
112
112
|
})
|
|
113
113
|
|
|
114
|
+
it("should map legacy 'qa' to 'staging'", async () => {
|
|
115
|
+
Object.defineProperty(window, "Capacitor", {
|
|
116
|
+
value: {
|
|
117
|
+
Plugins: {
|
|
118
|
+
DeviceInfo: {
|
|
119
|
+
getNativeShellAppEnvironment: vi
|
|
120
|
+
.fn()
|
|
121
|
+
.mockResolvedValue({
|
|
122
|
+
environment: "qa",
|
|
123
|
+
}),
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
writable: true,
|
|
128
|
+
configurable: true,
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
const result = await getEnvironment(
|
|
132
|
+
"FIRE_TV",
|
|
133
|
+
undefined,
|
|
134
|
+
mockLogger
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
expect(result.environment).toBe("staging")
|
|
138
|
+
expect(result.source).toBe("native")
|
|
139
|
+
})
|
|
140
|
+
|
|
114
141
|
it("should handle native env already in vwr format (dev)", async () => {
|
|
115
142
|
Object.defineProperty(window, "Capacitor", {
|
|
116
143
|
value: {
|
|
@@ -373,13 +400,7 @@ describe("getEnvironment", () => {
|
|
|
373
400
|
|
|
374
401
|
describe("Environment Validation", () => {
|
|
375
402
|
it("should accept valid environments", async () => {
|
|
376
|
-
const validEnvs: Environment[] = [
|
|
377
|
-
"local",
|
|
378
|
-
"dev",
|
|
379
|
-
"qa",
|
|
380
|
-
"staging",
|
|
381
|
-
"prod",
|
|
382
|
-
]
|
|
403
|
+
const validEnvs: Environment[] = ["local", "dev", "staging", "prod"]
|
|
383
404
|
|
|
384
405
|
for (const env of validEnvs) {
|
|
385
406
|
const result = await getEnvironment("WEB", env, mockLogger)
|
|
@@ -392,6 +413,7 @@ describe("getEnvironment", () => {
|
|
|
392
413
|
const invalidEnvs = [
|
|
393
414
|
"development",
|
|
394
415
|
"production",
|
|
416
|
+
"qa",
|
|
395
417
|
"test",
|
|
396
418
|
"",
|
|
397
419
|
"random",
|
package/src/getEnvironment.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defaultLogger, type Logger } from "./logger"
|
|
2
2
|
|
|
3
|
-
export type Environment = "local" | "dev" | "
|
|
3
|
+
export type Environment = "local" | "dev" | "staging" | "prod"
|
|
4
4
|
export type EnvironmentSource = "native" | "build-time" | "default"
|
|
5
5
|
|
|
6
6
|
export interface EnvironmentResult {
|
|
@@ -19,7 +19,7 @@ export interface EnvironmentResult {
|
|
|
19
19
|
* This ensures production APKs cannot accidentally run dev VWR,
|
|
20
20
|
* since the native Android build variant determines the environment.
|
|
21
21
|
*
|
|
22
|
-
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', '
|
|
22
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'ANDROID_MOBILE', 'IOS_MOBILE', 'WEB')
|
|
23
23
|
* @param buildTimeEnv - Optional build-time injected environment (from CLI)
|
|
24
24
|
* @param logger - Optional logger for reporting
|
|
25
25
|
* @returns Environment result with source information for logging
|
|
@@ -113,12 +113,17 @@ async function getFireTVEnvironment(logger: Logger): Promise<string | null> {
|
|
|
113
113
|
* - "dev"
|
|
114
114
|
* - "staging"
|
|
115
115
|
* - "prod"
|
|
116
|
+
*
|
|
117
|
+
* Note: Legacy "qa" values are mapped to "staging".
|
|
116
118
|
*/
|
|
117
119
|
function mapNativeEnvironment(nativeEnv: string): Environment {
|
|
118
120
|
const normalized = nativeEnv.toLowerCase()
|
|
119
121
|
switch (normalized) {
|
|
120
122
|
case "development":
|
|
121
123
|
return "dev"
|
|
124
|
+
case "qa":
|
|
125
|
+
// Legacy: map qa to staging
|
|
126
|
+
return "staging"
|
|
122
127
|
case "staging":
|
|
123
128
|
return "staging"
|
|
124
129
|
case "production":
|
|
@@ -133,7 +138,7 @@ function mapNativeEnvironment(nativeEnv: string): Environment {
|
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
function isValidEnvironment(env: string): boolean {
|
|
136
|
-
return ["local", "dev", "
|
|
141
|
+
return ["local", "dev", "staging", "prod"].includes(env)
|
|
137
142
|
}
|
|
138
143
|
|
|
139
144
|
// Note: Window.Capacitor type is declared in getDeviceId.ts
|
|
@@ -220,11 +220,130 @@ describe("getShellVersion", () => {
|
|
|
220
220
|
})
|
|
221
221
|
})
|
|
222
222
|
|
|
223
|
-
describe("Mobile", () => {
|
|
224
|
-
|
|
225
|
-
|
|
223
|
+
describe("Mobile (iOS)", () => {
|
|
224
|
+
afterEach(() => {
|
|
225
|
+
delete (window as any).iosAppContext
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
it("returns version from iosAppContext.appVersion", async () => {
|
|
229
|
+
;(window as any).iosAppContext = {
|
|
230
|
+
appVersion: "2.1.0",
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const version = await getShellVersion("IOS_MOBILE")
|
|
234
|
+
|
|
235
|
+
expect(version).toBe("2.1.0")
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
it("returns unknown when iosAppContext is not available", async () => {
|
|
239
|
+
const consoleWarnSpy = vi
|
|
240
|
+
.spyOn(console, "warn")
|
|
241
|
+
.mockImplementation(() => {})
|
|
242
|
+
|
|
243
|
+
const version = await getShellVersion("IOS_MOBILE")
|
|
244
|
+
|
|
245
|
+
expect(version).toBe("unknown")
|
|
246
|
+
|
|
247
|
+
consoleWarnSpy.mockRestore()
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
it("returns unknown when appVersion is empty", async () => {
|
|
251
|
+
const consoleWarnSpy = vi
|
|
252
|
+
.spyOn(console, "warn")
|
|
253
|
+
.mockImplementation(() => {})
|
|
254
|
+
|
|
255
|
+
;(window as any).iosAppContext = {
|
|
256
|
+
appVersion: " ",
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const version = await getShellVersion("IOS_MOBILE")
|
|
260
|
+
|
|
261
|
+
expect(version).toBe("unknown")
|
|
262
|
+
|
|
263
|
+
consoleWarnSpy.mockRestore()
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
it("is case insensitive", async () => {
|
|
267
|
+
;(window as any).iosAppContext = {
|
|
268
|
+
appVersion: "2.2.0",
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const version = await getShellVersion("ios_mobile")
|
|
272
|
+
|
|
273
|
+
expect(version).toBe("2.2.0")
|
|
274
|
+
})
|
|
275
|
+
})
|
|
276
|
+
|
|
277
|
+
describe("Mobile (Android)", () => {
|
|
278
|
+
afterEach(() => {
|
|
279
|
+
delete (window as any).androidAppContext
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
it("returns version from androidAppContext.appVersion", async () => {
|
|
283
|
+
;(window as any).androidAppContext = {
|
|
284
|
+
appVersion: "3.1.0",
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const version = await getShellVersion("ANDROID_MOBILE")
|
|
288
|
+
|
|
289
|
+
expect(version).toBe("3.1.0")
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
it("returns unknown when androidAppContext is not available", async () => {
|
|
293
|
+
const consoleWarnSpy = vi
|
|
294
|
+
.spyOn(console, "warn")
|
|
295
|
+
.mockImplementation(() => {})
|
|
296
|
+
|
|
297
|
+
const version = await getShellVersion("ANDROID_MOBILE")
|
|
298
|
+
|
|
299
|
+
expect(version).toBe("unknown")
|
|
300
|
+
|
|
301
|
+
consoleWarnSpy.mockRestore()
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
it("returns unknown when appVersion is empty", async () => {
|
|
305
|
+
const consoleWarnSpy = vi
|
|
306
|
+
.spyOn(console, "warn")
|
|
307
|
+
.mockImplementation(() => {})
|
|
308
|
+
|
|
309
|
+
;(window as any).androidAppContext = {
|
|
310
|
+
appVersion: "",
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const version = await getShellVersion("ANDROID_MOBILE")
|
|
226
314
|
|
|
227
315
|
expect(version).toBe("unknown")
|
|
316
|
+
|
|
317
|
+
consoleWarnSpy.mockRestore()
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
it("is case insensitive", async () => {
|
|
321
|
+
;(window as any).androidAppContext = {
|
|
322
|
+
appVersion: "3.2.0",
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const version = await getShellVersion("android_mobile")
|
|
326
|
+
|
|
327
|
+
expect(version).toBe("3.2.0")
|
|
328
|
+
})
|
|
329
|
+
|
|
330
|
+
it("prefers iOS context when both are available", async () => {
|
|
331
|
+
;(window as any).iosAppContext = {
|
|
332
|
+
appVersion: "1.0.0-ios",
|
|
333
|
+
}
|
|
334
|
+
;(window as any).androidAppContext = {
|
|
335
|
+
appVersion: "1.0.0-android",
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// When calling with IOS_MOBILE, should get iOS version
|
|
339
|
+
const iosVersion = await getShellVersion("IOS_MOBILE")
|
|
340
|
+
expect(iosVersion).toBe("1.0.0-ios")
|
|
341
|
+
|
|
342
|
+
// When calling with ANDROID_MOBILE, should still check iOS first (matching SDK behavior)
|
|
343
|
+
const androidVersion = await getShellVersion("ANDROID_MOBILE")
|
|
344
|
+
expect(androidVersion).toBe("1.0.0-ios")
|
|
345
|
+
|
|
346
|
+
delete (window as any).iosAppContext
|
|
228
347
|
})
|
|
229
348
|
})
|
|
230
349
|
|
package/src/getShellVersion.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { defaultLogger, type Logger } from "./logger"
|
|
2
|
+
import type { MobileExtendedWindow } from "./types"
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Retrieve shell app version for different platforms.
|
|
@@ -7,7 +8,7 @@ import { defaultLogger, type Logger } from "./logger"
|
|
|
7
8
|
* - SAMSUNG_TV: Tizen Application API `tizen.application.getAppInfo().version`
|
|
8
9
|
* - LG_TV: webOS Application API `webOS.fetchAppInfo()`
|
|
9
10
|
* - FIRE_TV: Native bridge via Capacitor DeviceInfo plugin
|
|
10
|
-
* - ANDROID_MOBILE/IOS_MOBILE: Native
|
|
11
|
+
* - ANDROID_MOBILE/IOS_MOBILE: Native app context `window.iosAppContext.appVersion` / `window.androidAppContext.appVersion`
|
|
11
12
|
* - WEB/Unknown: Returns 'unknown'
|
|
12
13
|
*
|
|
13
14
|
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV, ANDROID_MOBILE, IOS_MOBILE, WEB)
|
|
@@ -65,14 +66,12 @@ export async function getShellVersion(
|
|
|
65
66
|
return "unknown"
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
// Mobile:
|
|
69
|
+
// Mobile: Get version from native app context
|
|
69
70
|
if (
|
|
70
71
|
normalizedPlatform === "ANDROID_MOBILE" ||
|
|
71
|
-
normalizedPlatform === "IOS_MOBILE"
|
|
72
|
-
normalizedPlatform === "MOBILE"
|
|
72
|
+
normalizedPlatform === "IOS_MOBILE"
|
|
73
73
|
) {
|
|
74
|
-
|
|
75
|
-
return "unknown"
|
|
74
|
+
return getMobileAppVersion(logger)
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
// Web platform: Check for injected version at build time
|
|
@@ -94,21 +93,43 @@ export async function getShellVersion(
|
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Get app version from mobile native app context (iOS/Android)
|
|
98
|
+
*
|
|
99
|
+
* iOS exposes appVersion via window.iosAppContext
|
|
100
|
+
* Android exposes appVersion via window.androidAppContext (also check window.top for iframes)
|
|
101
|
+
*/
|
|
102
|
+
function getMobileAppVersion(logger: Logger): string {
|
|
103
|
+
// Try iOS first
|
|
104
|
+
const iosVersion = (window as MobileExtendedWindow).iosAppContext
|
|
105
|
+
?.appVersion
|
|
106
|
+
if (iosVersion && iosVersion.trim()) {
|
|
107
|
+
return iosVersion
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Try Android (check both window and window.top for iframe scenarios)
|
|
111
|
+
const androidContext = (window as MobileExtendedWindow).androidAppContext
|
|
112
|
+
try {
|
|
113
|
+
const androidVersion =
|
|
114
|
+
androidContext?.appVersion ??
|
|
115
|
+
(window.top as MobileExtendedWindow | null)?.androidAppContext
|
|
116
|
+
?.appVersion
|
|
117
|
+
if (androidVersion && androidVersion.trim()) {
|
|
118
|
+
return androidVersion
|
|
119
|
+
}
|
|
120
|
+
} catch {
|
|
121
|
+
// window.top access can throw if cross-origin
|
|
122
|
+
const androidVersion = androidContext?.appVersion
|
|
123
|
+
if (androidVersion && androidVersion.trim()) {
|
|
124
|
+
return androidVersion
|
|
112
125
|
}
|
|
113
126
|
}
|
|
127
|
+
|
|
128
|
+
logger.warn("[VWR:MobileAppVersion] appVersion not found", {
|
|
129
|
+
iosAppContext: !!(window as MobileExtendedWindow).iosAppContext,
|
|
130
|
+
androidAppContext: !!androidContext,
|
|
131
|
+
})
|
|
132
|
+
return "unknown"
|
|
114
133
|
}
|
|
134
|
+
|
|
135
|
+
// Types imported from ./types.ts
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for vwr-loader platform APIs
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Extended window interface for mobile app context.
|
|
7
|
+
* Matches the types from @volley/sdk ExtendedWindow.ts
|
|
8
|
+
*/
|
|
9
|
+
export interface MobileExtendedWindow extends Window {
|
|
10
|
+
iosAppContext?: {
|
|
11
|
+
appVersion: string
|
|
12
|
+
environment?: string
|
|
13
|
+
phoneDeviceId?: string
|
|
14
|
+
}
|
|
15
|
+
androidAppContext?: {
|
|
16
|
+
appVersion: string
|
|
17
|
+
environment?: string
|
|
18
|
+
phoneDeviceId?: string
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Global type declarations for platform APIs
|
|
24
|
+
*/
|
|
25
|
+
declare global {
|
|
26
|
+
interface Window {
|
|
27
|
+
Capacitor?: {
|
|
28
|
+
Plugins?: {
|
|
29
|
+
DeviceInfo?: {
|
|
30
|
+
getDeviceInfo(): Promise<{
|
|
31
|
+
versionName?: string
|
|
32
|
+
[key: string]: any
|
|
33
|
+
}>
|
|
34
|
+
getAndroidId(): Promise<{
|
|
35
|
+
androidId?: string
|
|
36
|
+
[key: string]: any
|
|
37
|
+
}>
|
|
38
|
+
getNativeShellAppEnvironment(): Promise<{
|
|
39
|
+
environment?: string
|
|
40
|
+
}>
|
|
41
|
+
[key: string]: any
|
|
42
|
+
}
|
|
43
|
+
[key: string]: any
|
|
44
|
+
}
|
|
45
|
+
[key: string]: any
|
|
46
|
+
}
|
|
47
|
+
webapis?: {
|
|
48
|
+
productinfo?: {
|
|
49
|
+
getDuid: () => string
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
webOS?: {
|
|
53
|
+
service?: {
|
|
54
|
+
request: (
|
|
55
|
+
uri: string,
|
|
56
|
+
options: {
|
|
57
|
+
method?: string
|
|
58
|
+
parameters?: Record<string, unknown>
|
|
59
|
+
onSuccess?: (response: LGDeviceIdResponse) => void
|
|
60
|
+
onFailure?: (error: { errorText?: string }) => void
|
|
61
|
+
subscribe?: boolean
|
|
62
|
+
}
|
|
63
|
+
) => {
|
|
64
|
+
cancel: () => void
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
fetchAppInfo?: (
|
|
68
|
+
callback: (appInfo?: { version?: string }) => void
|
|
69
|
+
) => void
|
|
70
|
+
}
|
|
71
|
+
tizen?: {
|
|
72
|
+
application?: {
|
|
73
|
+
getAppInfo: () => { version?: string }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* LG Luna service response for device ID
|
|
81
|
+
*/
|
|
82
|
+
export interface LGDeviceIdResponse {
|
|
83
|
+
idList?: Array<{
|
|
84
|
+
idType?: string
|
|
85
|
+
idValue?: string
|
|
86
|
+
}>
|
|
87
|
+
returnValue?: boolean
|
|
88
|
+
}
|