@volley/vwr-loader 1.0.4 → 1.0.5
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/README.md +45 -21
- package/dist/envDefaults.d.ts +0 -3
- package/dist/envDefaults.d.ts.map +1 -1
- package/dist/envDefaults.js +4 -16
- package/dist/envDefaults.js.map +1 -1
- package/dist/getDeviceId.d.ts +10 -2
- package/dist/getDeviceId.d.ts.map +1 -1
- package/dist/getDeviceId.js +23 -39
- package/dist/getDeviceId.js.map +1 -1
- package/dist/getEnvironment.d.ts +25 -0
- package/dist/getEnvironment.d.ts.map +1 -0
- package/dist/getEnvironment.js +102 -0
- package/dist/getEnvironment.js.map +1 -0
- package/dist/getShellVersion.d.ts +2 -2
- package/dist/getShellVersion.d.ts.map +1 -1
- package/dist/getShellVersion.js +3 -5
- package/dist/getShellVersion.js.map +1 -1
- package/dist/index.html +1 -1
- package/dist/loadVwr.d.ts +6 -1
- package/dist/loadVwr.d.ts.map +1 -1
- package/dist/loadVwr.js +18 -10
- package/dist/loadVwr.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/vwrConfig.d.ts +0 -2
- package/dist/vwrConfig.d.ts.map +1 -1
- package/dist/vwrConfig.js +7 -25
- package/dist/vwrConfig.js.map +1 -1
- package/eslint.config.mjs +23 -0
- package/package.json +4 -15
- package/scripts/build.js +2 -0
- package/scripts/build.ts +207 -0
- package/src/amplitudeFlagFetcher.test.ts +0 -5
- package/src/envDefaults.ts +4 -23
- package/src/getDeviceId.test.ts +24 -79
- package/src/getDeviceId.ts +31 -56
- package/src/getEnvironment.ts +137 -0
- package/src/getShellVersion.test.ts +1 -1
- package/src/getShellVersion.ts +3 -7
- package/src/loadVwr.ts +25 -14
- package/src/main.ts +1 -3
- package/src/vite-env.d.ts +0 -3
- package/src/vwrConfig.ts +7 -28
- package/tsconfig.eslint.json +16 -0
- package/tsconfig.json +17 -0
- package/vite.config.ts +24 -0
- package/vitest.config.ts +8 -0
- package/dist/cli.js +0 -190
- package/dist/cli.js.map +0 -1
package/dist/loadVwr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadVwr.js","sourceRoot":"","sources":["../src/loadVwr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadVwr.js","sourceRoot":"","sources":["../src/loadVwr.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(){const
|
|
1
|
+
(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const n of t.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&i(n)}).observe(document,{childList:!0,subtree:!0});function l(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function i(e){if(e.ep)return;e.ep=!0;const t=l(e);fetch(e.href,t)}})();const c={info:(r,o)=>o?console.log(r,o):console.log(r),warn:(r,o)=>o?console.warn(r,o):console.warn(r),error:(r,o)=>o?console.error(r,o):console.error(r)},s=async(r=c)=>{throw new Error("[Shell] Build config not injected properly")},f=void 0,d=void 0;async function u(){try{await s()}catch(r){try{console.error("[Shell] ⚠️ FALLBACK TO HUB - Init failed:",r),window.DD_LOGS&&window.DD_LOGS.logger.error("shell_init_failed",{error:r.message,platform:f})}finally{window.location.href=d}}}u();
|
|
2
2
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/logger.ts","../src/loadVwr.ts","../src/main.ts"],"sourcesContent":["export interface Logger {\n info: (message: string, context?: Record<string, unknown>) => void\n warn: (message: string, context?: Record<string, unknown>) => void\n error: (message: string, context?: Record<string, unknown>) => void\n}\n\nexport const defaultLogger: Logger = {\n info: (message, context) =>\n context ? console.log(message, context) : console.log(message),\n warn: (message, context) =>\n context ? console.warn(message, context) : console.warn(message),\n error: (message, context) =>\n context ? console.error(message, context) : console.error(message),\n}\n","import
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/logger.ts","../src/loadVwr.ts","../src/main.ts"],"sourcesContent":["export interface Logger {\n info: (message: string, context?: Record<string, unknown>) => void\n warn: (message: string, context?: Record<string, unknown>) => void\n error: (message: string, context?: Record<string, unknown>) => void\n}\n\nexport const defaultLogger: Logger = {\n info: (message, context) =>\n context ? console.log(message, context) : console.log(message),\n warn: (message, context) =>\n context ? console.warn(message, context) : console.warn(message),\n error: (message, context) =>\n context ? console.error(message, context) : console.error(message),\n}\n","import { fetchAmplitudeFlags } from \"./amplitudeFlagFetcher\"\nimport { ENV_DEFAULTS } from \"./envDefaults\"\nimport { getDeviceId } from \"./getDeviceId\"\nimport { getEnvironment } from \"./getEnvironment\"\nimport { getShellVersion } from \"./getShellVersion\"\nimport { defaultLogger, type Logger } from \"./logger\"\nimport type { VWRConfig, VWRConfigRequest } from \"./vwrConfig\"\nimport { getVWRConfig, validateConfig } from \"./vwrConfig\"\n\n// Vite injects these at build time\n// VITE_ENVIRONMENT is optional for platforms that support native env reading (Fire TV)\nconst BUILD_TIME_ENVIRONMENT = import.meta.env.VITE_ENVIRONMENT as\n | string\n | undefined\nconst PLATFORM = import.meta.env.VITE_PLATFORM\nconst CONFIG_URL = import.meta.env.VITE_CONFIG_URL\nconst CONFIG_FILE = import.meta.env.VITE_CONFIG_FILE\n\n// AMPLITUDE_KEY can be optionally injected at build time (via build.ts script)\n// Falls back to envDefaults if not injected (e.g., vite.config.dev.ts)\nconst AMPLITUDE_KEY = import.meta.env.VITE_AMPLITUDE_DEPLOYMENT_KEY\n\nexport type { Logger }\n\n/**\n * Load VWR runtime.\n *\n * Optimized flow: checks vwr-enabled flag FIRST using baked-in Amplitude key,\n * before doing any config fetches. For flag-OFF users (100% at initial launch),\n * this reduces startup latency from ~2-4s to ~500ms by skipping config fetches.\n *\n * Flow:\n * 1. Get deviceId, shellVersion, environment (fast, local/native)\n * 2. Check vwr-enabled flag (single request, ~500ms)\n * 3. If OFF → throw immediately (no config fetches)\n * 4. If ON → fetch config, load VWR module, initialize\n *\n * Environment resolution:\n * - Fire TV: reads from native BuildConfig.ENVIRONMENT (prevents env mismatch)\n * - Other platforms: uses build-time injected VITE_ENVIRONMENT\n * - Fallback: \"dev\"\n *\n * @param logger - Optional logger, defaults to console\n */\nexport const loadVwr = async (logger: Logger = defaultLogger) => {\n if (!PLATFORM || !CONFIG_URL || !CONFIG_FILE) {\n throw new Error(\"[Shell] Build config not injected properly\")\n }\n\n const deviceId = await getDeviceId(PLATFORM, logger)\n if (!deviceId) {\n const message = `[Shell] Failed to retrieve device ID for platform: ${PLATFORM}`\n logger.error(message)\n throw new Error(message)\n }\n const shellVersion = await getShellVersion(PLATFORM, logger)\n\n // Get environment from native (Fire TV) or build-time injection\n // This ensures prod APKs cannot accidentally run dev VWR\n const { environment: ENVIRONMENT } = await getEnvironment(\n PLATFORM,\n BUILD_TIME_ENVIRONMENT,\n logger\n )\n\n // Get amplitude key: injected at build time OR from envDefaults\n // Precedence: build-time injection > envDefaults\n let amplitudeKey = AMPLITUDE_KEY\n if (!amplitudeKey) {\n const envDefaults = ENV_DEFAULTS[ENVIRONMENT]\n if (!envDefaults) {\n throw new Error(`[Shell] Unknown environment: ${ENVIRONMENT}`)\n }\n amplitudeKey = envDefaults.amplitudeKey\n }\n\n // FAST PATH: Check flag first using amplitude key\n // This avoids config fetches for flag-OFF users (majority at launch)\n const flags = await fetchAmplitudeFlags(\n deviceId,\n PLATFORM,\n {\n apiKey: amplitudeKey,\n timeout: 2000,\n },\n shellVersion\n )\n\n logger.info(\"[Shell] Flags fetched\", { flags })\n\n if (!flags[\"vwr-enabled\"]) {\n // Flag OFF: skip all config fetches, fail fast\n throw new Error(\"[Shell] VWR not enabled via Amplitude flags\")\n }\n\n // Flag ON: proceed with full config loading\n logger.info(\"[Shell] VWR flag enabled, fetching config...\")\n\n const vwrConfigRequest: VWRConfigRequest = {\n configUrl: CONFIG_URL,\n configFile: CONFIG_FILE,\n platform: PLATFORM,\n deviceId: deviceId,\n environment: ENVIRONMENT,\n shellVersion: shellVersion,\n }\n\n const vwrConfig: VWRConfig = await getVWRConfig(vwrConfigRequest, logger)\n\n if (!validateConfig(vwrConfig)) {\n throw new Error(\"Invalid config, falling back to default hub\")\n }\n\n logger.info(\"[Shell] VWR enabled, loading module\", {\n vwrUrl: vwrConfig.vwrUrl,\n })\n try {\n const vwr = await import(/* @vite-ignore */ vwrConfig.vwrUrl)\n logger.info(\"[Shell] VWR module loaded successfully\")\n\n if (typeof vwr.init !== \"function\") {\n throw new Error(\"[Shell] VWR module missing init() function\")\n }\n\n await vwr.init({\n hubUrl: vwrConfig.hubUrl,\n launchUrl: vwrConfig.launchUrl,\n platform: PLATFORM,\n deviceId,\n environment: ENVIRONMENT,\n trustedDomains: vwrConfig.trustedDomains,\n nativeShellVersion: shellVersion,\n })\n logger.info(\"[Shell] VWR initialized successfully\")\n } catch (vwrError) {\n logger.error(\"[Shell] VWR load failed\", {\n error:\n vwrError instanceof Error ? vwrError.message : String(vwrError),\n vwrUrl: vwrConfig.vwrUrl,\n })\n throw vwrError // Re-throw to outer catch for fallback\n }\n}\n","import { loadVwr } from \"./loadVwr\"\n\nconst PLATFORM = import.meta.env.VITE_PLATFORM\nconst HUB_URL = import.meta.env.VITE_HUB_URL\n\nasync function init() {\n try {\n await loadVwr()\n } catch (error) {\n try {\n console.error(\"[Shell] ⚠️ FALLBACK TO HUB - Init failed:\", error)\n\n if ((window as any).DD_LOGS) {\n ;(window as any).DD_LOGS.logger.error(\"shell_init_failed\", {\n error: (error as Error).message,\n platform: PLATFORM,\n })\n }\n } finally {\n //Fallback, can't trust config exists\n window.location.href = HUB_URL\n }\n }\n}\n\ninit()\n"],"names":["defaultLogger","message","context","loadVwr","logger","PLATFORM","HUB_URL","init","error"],"mappings":"ssBAMO,MAAMA,EAAwB,CACjC,KAAM,CAACC,EAASC,IACZA,EAAU,QAAQ,IAAID,EAASC,CAAO,EAAI,QAAQ,IAAID,CAAO,EACjE,KAAM,CAACA,EAASC,IACZA,EAAU,QAAQ,KAAKD,EAASC,CAAO,EAAI,QAAQ,KAAKD,CAAO,EACnE,MAAO,CAACA,EAASC,IACbA,EAAU,QAAQ,MAAMD,EAASC,CAAO,EAAI,QAAQ,MAAMD,CAAO,CACzE,EC+BaE,EAAU,MAAOC,EAAiBJ,IAAkB,CAEzD,MAAM,IAAI,MAAM,4CAA4C,CAgGpE,EC5IMK,EAAW,OACXC,EAAU,OAEhB,eAAeC,GAAO,CAClB,GAAI,CACA,MAAMJ,EAAA,CACV,OAASK,EAAO,CACZ,GAAI,CACA,QAAQ,MAAM,6CAA8CA,CAAK,EAE5D,OAAe,SACd,OAAe,QAAQ,OAAO,MAAM,oBAAqB,CACvD,MAAQA,EAAgB,QACxB,SAAUH,CAAA,CACb,CAET,QAAA,CAEI,OAAO,SAAS,KAAOC,CAC3B,CACJ,CACJ,CAEAC,EAAA"}
|
package/dist/vwrConfig.d.ts
CHANGED
package/dist/vwrConfig.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vwrConfig.d.ts","sourceRoot":"","sources":["../src/vwrConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD,MAAM,MAAM,SAAS,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"vwrConfig.d.ts","sourceRoot":"","sources":["../src/vwrConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD,MAAM,MAAM,SAAS,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAsBD,eAAO,MAAM,YAAY,GACrB,SAAS,gBAAgB,EACzB,SAAQ,MAAsB,KAC/B,OAAO,CAAC,SAAS,CAmEnB,CAAA;AAyJD,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,KAAG,OAWlD,CAAA"}
|
package/dist/vwrConfig.js
CHANGED
|
@@ -122,36 +122,25 @@ const tryGetVWRConfig = async (url, timeout) => {
|
|
|
122
122
|
};
|
|
123
123
|
const parseConfig = (config) => {
|
|
124
124
|
const defaultConfig = getDefaultConfig();
|
|
125
|
-
if (!config.platformApiUrl) {
|
|
126
|
-
config.platformApiUrl = defaultConfig.platformApiUrl;
|
|
127
|
-
}
|
|
128
|
-
if (!config.platformAuthApiUrl) {
|
|
129
|
-
config.platformAuthApiUrl = defaultConfig.platformAuthApiUrl;
|
|
130
|
-
}
|
|
131
125
|
if (!Array.isArray(config.trustedDomains) ||
|
|
132
126
|
config.trustedDomains.length === 0) {
|
|
133
127
|
config.trustedDomains = defaultConfig.trustedDomains;
|
|
134
128
|
}
|
|
135
129
|
if (!config.vwrUrl) {
|
|
136
130
|
config.vwrUrl = defaultConfig.vwrUrl;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
config.trustedDomains.push(vwrUrlOrigin);
|
|
131
|
+
if (!config.trustedDomains.includes(defaultConfig.vwrUrl)) {
|
|
132
|
+
config.trustedDomains.push(defaultConfig.vwrUrl);
|
|
140
133
|
}
|
|
141
134
|
}
|
|
142
135
|
if (!config.hubUrl) {
|
|
143
136
|
config.hubUrl = defaultConfig.hubUrl;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
config.trustedDomains.push(hubUrlOrigin);
|
|
137
|
+
if (!config.trustedDomains.includes(defaultConfig.hubUrl)) {
|
|
138
|
+
config.trustedDomains.push(defaultConfig.hubUrl);
|
|
147
139
|
}
|
|
148
140
|
}
|
|
149
141
|
// launchUrl is optional - only add to trustedDomains if explicitly set
|
|
150
|
-
if (config.launchUrl) {
|
|
151
|
-
|
|
152
|
-
if (!config.trustedDomains.includes(launchUrlOrigin)) {
|
|
153
|
-
config.trustedDomains.push(launchUrlOrigin);
|
|
154
|
-
}
|
|
142
|
+
if (config.launchUrl && !config.trustedDomains.includes(config.launchUrl)) {
|
|
143
|
+
config.trustedDomains.push(config.launchUrl);
|
|
155
144
|
}
|
|
156
145
|
return config;
|
|
157
146
|
};
|
|
@@ -168,7 +157,6 @@ export const validateConfig = (config) => {
|
|
|
168
157
|
return true;
|
|
169
158
|
};
|
|
170
159
|
const getDefaultConfig = () => {
|
|
171
|
-
var _a;
|
|
172
160
|
const ENVIRONMENT = import.meta.env.VITE_ENVIRONMENT || "dev";
|
|
173
161
|
const defaults = ENV_DEFAULTS[ENVIRONMENT];
|
|
174
162
|
if (!defaults) {
|
|
@@ -178,13 +166,7 @@ const getDefaultConfig = () => {
|
|
|
178
166
|
hubUrl: defaults.hubUrl,
|
|
179
167
|
vwrUrl: defaults.vwrUrl,
|
|
180
168
|
launchUrl: undefined,
|
|
181
|
-
|
|
182
|
-
platformAuthApiUrl: defaults.platformAuthApiUrl,
|
|
183
|
-
trustedDomains: [
|
|
184
|
-
new URL(defaults.hubUrl).origin,
|
|
185
|
-
new URL(defaults.vwrUrl).origin,
|
|
186
|
-
...((_a = defaults.trustedOrigins) !== null && _a !== void 0 ? _a : []),
|
|
187
|
-
],
|
|
169
|
+
trustedDomains: [defaults.hubUrl, defaults.vwrUrl],
|
|
188
170
|
};
|
|
189
171
|
};
|
|
190
172
|
//# sourceMappingURL=vwrConfig.js.map
|
package/dist/vwrConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vwrConfig.js","sourceRoot":"","sources":["../src/vwrConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"vwrConfig.js","sourceRoot":"","sources":["../src/vwrConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import baseConfig from "@platform/eslint-config"
|
|
2
|
+
|
|
3
|
+
export default [
|
|
4
|
+
...baseConfig,
|
|
5
|
+
{
|
|
6
|
+
ignores: ["dist/**", "node_modules/**"],
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
languageOptions: {
|
|
10
|
+
parserOptions: {
|
|
11
|
+
project: ["tsconfig.json", "tsconfig.eslint.json"],
|
|
12
|
+
tsconfigRootDir: import.meta.dirname,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
rules: {
|
|
16
|
+
"no-console": "off",
|
|
17
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
18
|
+
"@typescript-eslint/prefer-nullish-coalescing": "off",
|
|
19
|
+
"@typescript-eslint/prefer-optional-chain": "off",
|
|
20
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volley/vwr-loader",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Vite-based VWR loader for all Volley platforms",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,22 +13,16 @@
|
|
|
13
13
|
"./envDefaults": "./dist/envDefaults.js"
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
|
-
"build-loader": "./
|
|
16
|
+
"build-loader": "./scripts/build.js"
|
|
17
17
|
},
|
|
18
|
-
"files": [
|
|
19
|
-
"dist",
|
|
20
|
-
"src"
|
|
21
|
-
],
|
|
22
18
|
"scripts": {
|
|
23
|
-
"build": "tsc && vite build
|
|
24
|
-
"build:cli": "vite build -c vite.cli.config.ts",
|
|
19
|
+
"build": "tsc && vite build",
|
|
25
20
|
"build:loader": "vite build",
|
|
26
21
|
"typecheck": "tsc --noEmit",
|
|
27
22
|
"test": "vitest run",
|
|
28
23
|
"test:watch": "vitest",
|
|
29
24
|
"format": "eslint . --fix",
|
|
30
|
-
"lint": "eslint ."
|
|
31
|
-
"semantic-release": "semantic-release"
|
|
25
|
+
"lint": "eslint ."
|
|
32
26
|
},
|
|
33
27
|
"dependencies": {
|
|
34
28
|
"commander": "^12.0.0",
|
|
@@ -39,16 +33,11 @@
|
|
|
39
33
|
},
|
|
40
34
|
"devDependencies": {
|
|
41
35
|
"@platform/eslint-config": "workspace:*",
|
|
42
|
-
"@semantic-release/git": "^10.0.1",
|
|
43
|
-
"@semantic-release/npm": "^12.0.1",
|
|
44
36
|
"@types/fs-extra": "^11.0.0",
|
|
45
37
|
"@types/node": "^20.0.0",
|
|
46
|
-
"@volley/vwr": "workspace:*",
|
|
47
38
|
"eslint": "^9.25.1",
|
|
48
39
|
"jsdom": "^24.1.3",
|
|
49
40
|
"prettier": "~3.0.3",
|
|
50
|
-
"semantic-release": "^24.2.3",
|
|
51
|
-
"semantic-release-monorepo": "^8.0.2",
|
|
52
41
|
"typescript": "^5.0.0",
|
|
53
42
|
"vitest": "^1.0.0"
|
|
54
43
|
}
|
package/scripts/build.js
ADDED
package/scripts/build.ts
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander"
|
|
3
|
+
import { config as loadDotenv } from "dotenv"
|
|
4
|
+
import fs from "fs-extra"
|
|
5
|
+
import path from "path"
|
|
6
|
+
import { fileURLToPath } from "url"
|
|
7
|
+
import { build } from "vite"
|
|
8
|
+
|
|
9
|
+
import { ENV_DEFAULTS } from "../src/envDefaults.js"
|
|
10
|
+
|
|
11
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
12
|
+
|
|
13
|
+
const program = new Command()
|
|
14
|
+
|
|
15
|
+
// Platforms that support reading environment from native shell at runtime
|
|
16
|
+
// These platforms don't require --env flag (it's optional as an override)
|
|
17
|
+
const NATIVE_ENV_PLATFORMS = ["FIRE_TV", "FIRETV"]
|
|
18
|
+
|
|
19
|
+
program
|
|
20
|
+
.name("build-loader")
|
|
21
|
+
.description("Build vwr-loader with environment configuration")
|
|
22
|
+
.requiredOption(
|
|
23
|
+
"--platform <platform>",
|
|
24
|
+
"Platform: FIRE_TV, SAMSUNG_TV, LG_TV, MOBILE, WEB"
|
|
25
|
+
)
|
|
26
|
+
.option(
|
|
27
|
+
"--env <env>",
|
|
28
|
+
"Environment: local, dev, staging, prod (required for non-Fire TV platforms)"
|
|
29
|
+
)
|
|
30
|
+
.requiredOption("--output <path>", "Output directory")
|
|
31
|
+
.option("--hubUrl <url>", "Override Hub URL")
|
|
32
|
+
.option("--amplitudeKey <key>", "Override Amplitude deployment key")
|
|
33
|
+
.option("--vwrUrl <url>", "Override VWR URL")
|
|
34
|
+
.option("--configUrl <url>", "Override VWR Config URL")
|
|
35
|
+
.option("--configFile <filename>", "Override VWR Config Filename")
|
|
36
|
+
.option("--launchUrl <url>", "Override launch url")
|
|
37
|
+
.parse()
|
|
38
|
+
|
|
39
|
+
const opts = program.opts()
|
|
40
|
+
const normalizedPlatform = opts.platform.toUpperCase()
|
|
41
|
+
const supportsNativeEnv = NATIVE_ENV_PLATFORMS.includes(normalizedPlatform)
|
|
42
|
+
|
|
43
|
+
// Validate --env is provided for platforms that don't support native env reading
|
|
44
|
+
if (!opts.env && !supportsNativeEnv) {
|
|
45
|
+
console.error(
|
|
46
|
+
`❌ --env is required for platform "${opts.platform}"\n` +
|
|
47
|
+
` Only Fire TV can read environment from native shell at runtime.\n` +
|
|
48
|
+
` Valid environments: local, dev, staging, prod`
|
|
49
|
+
)
|
|
50
|
+
process.exit(1)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// For platforms with native env support, log that env will be read at runtime
|
|
54
|
+
if (!opts.env && supportsNativeEnv) {
|
|
55
|
+
console.log(
|
|
56
|
+
`ℹ️ --env not provided. ${opts.platform} will read environment from native shell at runtime.`
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Try to read from shell's .env file (run from shell directory)
|
|
61
|
+
let shellEnv: Record<string, string> = {}
|
|
62
|
+
if (opts.env) {
|
|
63
|
+
const envFile = path.join(process.cwd(), `.env.${opts.env}`)
|
|
64
|
+
if (fs.existsSync(envFile)) {
|
|
65
|
+
console.log(`📄 Reading config from ${envFile}`)
|
|
66
|
+
const result = loadDotenv({ path: envFile })
|
|
67
|
+
shellEnv = result.parsed || {}
|
|
68
|
+
} else {
|
|
69
|
+
console.log(`ℹ️ No .env.${opts.env} found, using defaults/CLI flags`)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Read shell version from package.json (for web shell)
|
|
74
|
+
let shellVersion = "unknown"
|
|
75
|
+
const packageJsonPath = path.join(process.cwd(), "package.json")
|
|
76
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
77
|
+
try {
|
|
78
|
+
const packageJson = JSON.parse(
|
|
79
|
+
fs.readFileSync(packageJsonPath, "utf-8")
|
|
80
|
+
)
|
|
81
|
+
shellVersion = packageJson.version || "unknown"
|
|
82
|
+
} catch {
|
|
83
|
+
console.warn(`⚠️ Could not read version from package.json`)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Get predefined defaults (use "dev" as fallback for config URL defaults when env not specified)
|
|
88
|
+
const envDefaults = opts.env ? ENV_DEFAULTS[opts.env] : undefined
|
|
89
|
+
if (opts.env && !envDefaults) {
|
|
90
|
+
console.error(`❌ Unknown environment: ${opts.env}`)
|
|
91
|
+
console.error(` Valid: local, dev, staging, prod`)
|
|
92
|
+
process.exit(1)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// For Fire TV without --env, use dev defaults for config URLs (actual env comes from native at runtime)
|
|
96
|
+
const fallbackDefaults = ENV_DEFAULTS["dev"]
|
|
97
|
+
|
|
98
|
+
// Config precedence: CLI > shell .env > defaults
|
|
99
|
+
const config = {
|
|
100
|
+
VITE_PLATFORM: normalizedPlatform,
|
|
101
|
+
VITE_ENVIRONMENT: opts.env, // undefined for Fire TV without --env (reads from native)
|
|
102
|
+
VITE_HUB_URL:
|
|
103
|
+
opts.hubUrl ||
|
|
104
|
+
shellEnv.VITE_HUB_URL ||
|
|
105
|
+
envDefaults?.hubUrl ||
|
|
106
|
+
fallbackDefaults.hubUrl,
|
|
107
|
+
VITE_AMPLITUDE_DEPLOYMENT_KEY:
|
|
108
|
+
opts.amplitudeKey ||
|
|
109
|
+
shellEnv.VITE_AMPLITUDE_DEPLOYMENT_KEY ||
|
|
110
|
+
envDefaults?.amplitudeKey ||
|
|
111
|
+
fallbackDefaults.amplitudeKey ||
|
|
112
|
+
"",
|
|
113
|
+
VITE_VWR_URL:
|
|
114
|
+
opts.vwrUrl ||
|
|
115
|
+
shellEnv.VITE_VWR_URL ||
|
|
116
|
+
envDefaults?.vwrUrl ||
|
|
117
|
+
fallbackDefaults.vwrUrl,
|
|
118
|
+
VITE_CONFIG_URL:
|
|
119
|
+
opts.configUrl ||
|
|
120
|
+
shellEnv.VITE_CONFIG_URL ||
|
|
121
|
+
envDefaults?.configUrl ||
|
|
122
|
+
fallbackDefaults.configUrl,
|
|
123
|
+
VITE_CONFIG_FILE:
|
|
124
|
+
opts.configFile ||
|
|
125
|
+
shellEnv.VITE_CONFIG_FILE ||
|
|
126
|
+
envDefaults?.configFile ||
|
|
127
|
+
fallbackDefaults.configFile,
|
|
128
|
+
VITE_LAUNCH_URL:
|
|
129
|
+
opts.launchUrl ||
|
|
130
|
+
shellEnv.VITE_LAUNCH_URL ||
|
|
131
|
+
opts.hubUrl ||
|
|
132
|
+
shellEnv.VITE_HUB_URL ||
|
|
133
|
+
envDefaults?.hubUrl ||
|
|
134
|
+
fallbackDefaults.hubUrl,
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
console.log("🔧 Build configuration:")
|
|
138
|
+
console.log(` Platform: ${config.VITE_PLATFORM}`)
|
|
139
|
+
console.log(
|
|
140
|
+
` Environment: ${config.VITE_ENVIRONMENT ?? "(from native at runtime)"}`
|
|
141
|
+
)
|
|
142
|
+
console.log(` Hub URL: ${config.VITE_HUB_URL}`)
|
|
143
|
+
console.log(` VWR URL: ${config.VITE_VWR_URL}`)
|
|
144
|
+
console.log(
|
|
145
|
+
` Amplitude: ${
|
|
146
|
+
config.VITE_AMPLITUDE_DEPLOYMENT_KEY ? "***" : "(not set)"
|
|
147
|
+
}`
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
// Build with Vite (inline config to avoid path resolution issues)
|
|
151
|
+
const loaderSrcDir = path.join(__dirname, "../src")
|
|
152
|
+
const loaderDistDir = path.join(__dirname, "../dist")
|
|
153
|
+
|
|
154
|
+
// Build define config - VITE_ENVIRONMENT is undefined for Fire TV (reads from native)
|
|
155
|
+
const defineConfig: Record<string, string> = {
|
|
156
|
+
"import.meta.env.VITE_PLATFORM": JSON.stringify(config.VITE_PLATFORM),
|
|
157
|
+
"import.meta.env.VITE_SHELL_VERSION": JSON.stringify(shellVersion),
|
|
158
|
+
"import.meta.env.VITE_HUB_URL": JSON.stringify(config.VITE_HUB_URL),
|
|
159
|
+
"import.meta.env.VITE_AMPLITUDE_DEPLOYMENT_KEY": JSON.stringify(
|
|
160
|
+
config.VITE_AMPLITUDE_DEPLOYMENT_KEY
|
|
161
|
+
),
|
|
162
|
+
"import.meta.env.VITE_VWR_URL": JSON.stringify(config.VITE_VWR_URL),
|
|
163
|
+
"import.meta.env.VITE_CONFIG_URL": JSON.stringify(config.VITE_CONFIG_URL),
|
|
164
|
+
"import.meta.env.VITE_CONFIG_FILE": JSON.stringify(config.VITE_CONFIG_FILE),
|
|
165
|
+
"import.meta.env.VITE_LAUNCH_URL": JSON.stringify(config.VITE_LAUNCH_URL),
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Only inject VITE_ENVIRONMENT if provided (Fire TV reads from native otherwise)
|
|
169
|
+
if (config.VITE_ENVIRONMENT) {
|
|
170
|
+
defineConfig["import.meta.env.VITE_ENVIRONMENT"] = JSON.stringify(
|
|
171
|
+
config.VITE_ENVIRONMENT
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
await build({
|
|
176
|
+
configFile: false,
|
|
177
|
+
root: loaderSrcDir,
|
|
178
|
+
mode: opts.env ?? "production", // Use production mode for minification when env not specified
|
|
179
|
+
build: {
|
|
180
|
+
outDir: loaderDistDir,
|
|
181
|
+
emptyOutDir: true,
|
|
182
|
+
target: "es2017",
|
|
183
|
+
minify: opts.env === "prod" || !opts.env ? "esbuild" : false,
|
|
184
|
+
sourcemap: true,
|
|
185
|
+
rollupOptions: {
|
|
186
|
+
input: {
|
|
187
|
+
main: path.join(loaderSrcDir, "index.html"),
|
|
188
|
+
},
|
|
189
|
+
output: {
|
|
190
|
+
entryFileNames: "[name].js",
|
|
191
|
+
assetFileNames: "[name].[ext]",
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
define: defineConfig,
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
// Copy build output to specified directory
|
|
199
|
+
const distPath = path.join(__dirname, "../dist")
|
|
200
|
+
const outputPath = path.resolve(opts.output)
|
|
201
|
+
|
|
202
|
+
await fs.ensureDir(outputPath)
|
|
203
|
+
await fs.copy(distPath, outputPath, { overwrite: true })
|
|
204
|
+
|
|
205
|
+
console.log(`✅ VWR loader built successfully`)
|
|
206
|
+
console.log(` Output: ${outputPath}`)
|
|
207
|
+
console.log(` Files: index.html, main.js`)
|
|
@@ -25,11 +25,6 @@ describe("fetchAmplitudeFlags", () => {
|
|
|
25
25
|
})
|
|
26
26
|
|
|
27
27
|
it("fetches flags successfully from Amplitude with context", async () => {
|
|
28
|
-
// Mock getShellVersion to return expected version for SAMSUNG_TV
|
|
29
|
-
vi.spyOn(getShellVersionModule, "getShellVersion").mockResolvedValue(
|
|
30
|
-
"1.0.0"
|
|
31
|
-
)
|
|
32
|
-
|
|
33
28
|
mockFetch.mockResolvedValueOnce({
|
|
34
29
|
ok: true,
|
|
35
30
|
json: async () => ({
|
package/src/envDefaults.ts
CHANGED
|
@@ -3,10 +3,7 @@ export interface EnvConfig {
|
|
|
3
3
|
vwrUrl: string
|
|
4
4
|
configUrl: string
|
|
5
5
|
configFile: string
|
|
6
|
-
platformApiUrl: string
|
|
7
|
-
platformAuthApiUrl: string
|
|
8
6
|
amplitudeKey: string // Used for amplitude flag fetch, not part of VWRConfig
|
|
9
|
-
trustedOrigins?: string[]
|
|
10
7
|
}
|
|
11
8
|
|
|
12
9
|
const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/"
|
|
@@ -18,36 +15,22 @@ const prodConfig: EnvConfig = {
|
|
|
18
15
|
vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
|
|
19
16
|
configUrl: CONFIG_URL_DEFAULT,
|
|
20
17
|
configFile: CONFIG_FILE_DEFAULT,
|
|
21
|
-
platformApiUrl: "https://platform.volley-services.net",
|
|
22
|
-
platformAuthApiUrl: "https://auth.volley.tv",
|
|
23
18
|
amplitudeKey: "",
|
|
24
19
|
}
|
|
25
20
|
|
|
26
21
|
export const ENV_DEFAULTS: Record<string, EnvConfig> = {
|
|
27
22
|
local: {
|
|
28
|
-
hubUrl:
|
|
29
|
-
vwrUrl:
|
|
30
|
-
configUrl:
|
|
31
|
-
|
|
32
|
-
configFile: import.meta.env.VITE_CONFIG_FILE || CONFIG_FILE_DEFAULT,
|
|
33
|
-
platformApiUrl:
|
|
34
|
-
import.meta.env.VITE_PLATFORM_API_URL ||
|
|
35
|
-
"https://platform-dev.volley-services.net",
|
|
36
|
-
platformAuthApiUrl:
|
|
37
|
-
import.meta.env.VITE_PLATFORM_AUTH_API_URL ||
|
|
38
|
-
"https://auth-dev.volley.tv",
|
|
23
|
+
hubUrl: "http://localhost:5173",
|
|
24
|
+
vwrUrl: "http://localhost:5174/vwr.js",
|
|
25
|
+
configUrl: "http://localhost:5174/config/",
|
|
26
|
+
configFile: CONFIG_FILE_DEFAULT,
|
|
39
27
|
amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
|
|
40
|
-
trustedOrigins: import.meta.env.VITE_TRUSTED_ORIGINS?.split(",").filter(
|
|
41
|
-
Boolean
|
|
42
|
-
),
|
|
43
28
|
},
|
|
44
29
|
dev: {
|
|
45
30
|
hubUrl: "https://game-clients-dev.volley.tv/hub",
|
|
46
31
|
vwrUrl: `https://vwr.volley.tv/dev/${VWR_URL_PATH_DEFAULT}`,
|
|
47
32
|
configUrl: CONFIG_URL_DEFAULT,
|
|
48
33
|
configFile: CONFIG_FILE_DEFAULT,
|
|
49
|
-
platformApiUrl: "https://platform-dev.volley-services.net",
|
|
50
|
-
platformAuthApiUrl: "https://auth-dev.volley.tv",
|
|
51
34
|
amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
|
|
52
35
|
},
|
|
53
36
|
staging: {
|
|
@@ -55,8 +38,6 @@ export const ENV_DEFAULTS: Record<string, EnvConfig> = {
|
|
|
55
38
|
vwrUrl: `https://vwr.volley.tv/staging/${VWR_URL_PATH_DEFAULT}`,
|
|
56
39
|
configUrl: CONFIG_URL_DEFAULT,
|
|
57
40
|
configFile: CONFIG_FILE_DEFAULT,
|
|
58
|
-
platformApiUrl: "https://platform-staging.volley-services.net",
|
|
59
|
-
platformAuthApiUrl: "https://auth-staging.volley.tv",
|
|
60
41
|
amplitudeKey: "",
|
|
61
42
|
},
|
|
62
43
|
prod: prodConfig,
|