@volley/vwr-loader 1.0.0-feat-vwr-milestone-1.3 → 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/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 -188
- package/dist/cli.js.map +0 -1
package/README.md
CHANGED
|
@@ -18,27 +18,6 @@ pnpm add @volley/vwr-loader
|
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
21
|
-
### CLI Build (Recommended)
|
|
22
|
-
|
|
23
|
-
You can build the loader for a specific platform and environment using the CLI. This is useful for native shells (iOS, Android, FireTV, Samsung, LG) and CI/CD pipelines.
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# Using npx (if installed globally or in project)
|
|
27
|
-
npx build-loader --platform IOS_MOBILE --env dev --output ./dist-ios
|
|
28
|
-
|
|
29
|
-
# Or via pnpm
|
|
30
|
-
pnpm build-loader --platform IOS_MOBILE --env dev --output ./dist-ios
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Options:**
|
|
34
|
-
|
|
35
|
-
- `--platform`: Target platform (`IOS_MOBILE`, `ANDROID_MOBILE`, `FIRE_TV`, `SAMSUNG_TV`, `LG_TV`, `WEB`)
|
|
36
|
-
- `--env`: Environment (`local`, `dev`, `staging`, `prod`)
|
|
37
|
-
- `--output`: Output directory for `index.html` and `main.js`
|
|
38
|
-
- `--hubUrl`: Override Hub URL (optional)
|
|
39
|
-
- `--vwrUrl`: Override VWR URL (optional)
|
|
40
|
-
- `--amplitudeKey`: Override Amplitude deployment key (optional)
|
|
41
|
-
|
|
42
21
|
### Fetching Amplitude Flags
|
|
43
22
|
|
|
44
23
|
```typescript
|
|
@@ -72,6 +51,51 @@ The package includes a `vwr-loader.html` template that can be used as the entry
|
|
|
72
51
|
- `__HUB_URL__` - Hub application URL
|
|
73
52
|
- `__VWR_URL__` - Default VWR bundle URL
|
|
74
53
|
|
|
54
|
+
## CLI: build-loader
|
|
55
|
+
|
|
56
|
+
The `build-loader` CLI builds platform-specific VWR loader bundles.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx build-loader --platform <platform> --output <path> [--env <env>] [options]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Required Options
|
|
63
|
+
|
|
64
|
+
| Option | Description |
|
|
65
|
+
|--------|-------------|
|
|
66
|
+
| `--platform` | Platform: `FIRE_TV`, `SAMSUNG_TV`, `LG_TV`, `MOBILE`, `WEB` |
|
|
67
|
+
| `--output` | Output directory path |
|
|
68
|
+
|
|
69
|
+
### Optional Options
|
|
70
|
+
|
|
71
|
+
| Option | Description |
|
|
72
|
+
|--------|-------------|
|
|
73
|
+
| `--env` | Environment: `local`, `dev`, `staging`, `prod` |
|
|
74
|
+
| `--hubUrl` | Override Hub URL |
|
|
75
|
+
| `--vwrUrl` | Override VWR URL |
|
|
76
|
+
| `--configUrl` | Override VWR Config URL |
|
|
77
|
+
| `--configFile` | Override VWR Config filename |
|
|
78
|
+
| `--amplitudeKey` | Override Amplitude deployment key |
|
|
79
|
+
| `--launchUrl` | Override launch URL |
|
|
80
|
+
|
|
81
|
+
### Environment Handling
|
|
82
|
+
|
|
83
|
+
- **Fire TV**: `--env` is **optional**. If omitted, environment is read from native `BuildConfig.ENVIRONMENT` at runtime. This ensures prod APKs cannot accidentally run dev VWR.
|
|
84
|
+
- **Other platforms**: `--env` is **required** since they don't support native environment reading.
|
|
85
|
+
|
|
86
|
+
### Examples
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Fire TV (reads env from native at runtime)
|
|
90
|
+
npx build-loader --platform FIRE_TV --output ./www
|
|
91
|
+
|
|
92
|
+
# Fire TV with env override (for testing)
|
|
93
|
+
npx build-loader --platform FIRE_TV --env dev --output ./www
|
|
94
|
+
|
|
95
|
+
# Samsung TV (env required)
|
|
96
|
+
npx build-loader --platform SAMSUNG_TV --env prod --output ./www
|
|
97
|
+
```
|
|
98
|
+
|
|
75
99
|
## Development Commands
|
|
76
100
|
|
|
77
101
|
```bash
|
package/dist/envDefaults.d.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;
|
|
9
|
-
trustedOrigins?: string[];
|
|
10
7
|
}
|
|
11
8
|
export declare const ENV_DEFAULTS: Record<string, EnvConfig>;
|
|
12
9
|
//# sourceMappingURL=envDefaults.d.ts.map
|
|
@@ -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,
|
|
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,YAAY,EAAE,MAAM,CAAA;CACvB;AAcD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAwBlD,CAAA"}
|
package/dist/envDefaults.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var _a;
|
|
2
1
|
const CONFIG_URL_DEFAULT = "https://vwr.volley.tv/config/";
|
|
3
2
|
const CONFIG_FILE_DEFAULT = "vwrConfig.json";
|
|
4
3
|
const VWR_URL_PATH_DEFAULT = "v1/latest/vwr.js";
|
|
@@ -7,30 +6,21 @@ const prodConfig = {
|
|
|
7
6
|
vwrUrl: `https://vwr.volley.tv/${VWR_URL_PATH_DEFAULT}`,
|
|
8
7
|
configUrl: CONFIG_URL_DEFAULT,
|
|
9
8
|
configFile: CONFIG_FILE_DEFAULT,
|
|
10
|
-
platformApiUrl: "https://platform.volley-services.net",
|
|
11
|
-
platformAuthApiUrl: "https://auth.volley.tv",
|
|
12
9
|
amplitudeKey: "",
|
|
13
10
|
};
|
|
14
11
|
export const ENV_DEFAULTS = {
|
|
15
12
|
local: {
|
|
16
|
-
hubUrl:
|
|
17
|
-
vwrUrl:
|
|
18
|
-
configUrl:
|
|
19
|
-
configFile:
|
|
20
|
-
platformApiUrl: import.meta.env.VITE_PLATFORM_API_URL ||
|
|
21
|
-
"https://platform-dev.volley-services.net",
|
|
22
|
-
platformAuthApiUrl: import.meta.env.VITE_PLATFORM_AUTH_API_URL ||
|
|
23
|
-
"https://auth-dev.volley.tv",
|
|
13
|
+
hubUrl: "http://localhost:5173",
|
|
14
|
+
vwrUrl: "http://localhost:5174/vwr.js",
|
|
15
|
+
configUrl: "http://localhost:5174/config/",
|
|
16
|
+
configFile: CONFIG_FILE_DEFAULT,
|
|
24
17
|
amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
|
|
25
|
-
trustedOrigins: (_a = import.meta.env.VITE_TRUSTED_ORIGINS) === null || _a === void 0 ? void 0 : _a.split(",").filter(Boolean),
|
|
26
18
|
},
|
|
27
19
|
dev: {
|
|
28
20
|
hubUrl: "https://game-clients-dev.volley.tv/hub",
|
|
29
21
|
vwrUrl: `https://vwr.volley.tv/dev/${VWR_URL_PATH_DEFAULT}`,
|
|
30
22
|
configUrl: CONFIG_URL_DEFAULT,
|
|
31
23
|
configFile: CONFIG_FILE_DEFAULT,
|
|
32
|
-
platformApiUrl: "https://platform-dev.volley-services.net",
|
|
33
|
-
platformAuthApiUrl: "https://auth-dev.volley.tv",
|
|
34
24
|
amplitudeKey: "client-uJJVW3zKPC1G9kqPhUumLnZN6eaY42iQ",
|
|
35
25
|
},
|
|
36
26
|
staging: {
|
|
@@ -38,8 +28,6 @@ export const ENV_DEFAULTS = {
|
|
|
38
28
|
vwrUrl: `https://vwr.volley.tv/staging/${VWR_URL_PATH_DEFAULT}`,
|
|
39
29
|
configUrl: CONFIG_URL_DEFAULT,
|
|
40
30
|
configFile: CONFIG_FILE_DEFAULT,
|
|
41
|
-
platformApiUrl: "https://platform-staging.volley-services.net",
|
|
42
|
-
platformAuthApiUrl: "https://auth-staging.volley.tv",
|
|
43
31
|
amplitudeKey: "",
|
|
44
32
|
},
|
|
45
33
|
prod: prodConfig,
|
package/dist/envDefaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../src/envDefaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"envDefaults.js","sourceRoot":"","sources":["../src/envDefaults.ts"],"names":[],"mappings":"AAQA,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,YAAY,EAAE,EAAE;CACnB,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAA8B;IACnD,KAAK,EAAE;QACH,MAAM,EAAE,uBAAuB;QAC/B,MAAM,EAAE,8BAA8B;QACtC,SAAS,EAAE,+BAA+B;QAC1C,UAAU,EAAE,mBAAmB;QAC/B,YAAY,EAAE,yCAAyC;KAC1D;IACD,GAAG,EAAE;QACD,MAAM,EAAE,wCAAwC;QAChD,MAAM,EAAE,6BAA6B,oBAAoB,EAAE;QAC3D,SAAS,EAAE,kBAAkB;QAC7B,UAAU,EAAE,mBAAmB;QAC/B,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,YAAY,EAAE,EAAE;KACnB;IACD,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,UAAU,EAAE,iBAAiB;CAC5C,CAAA"}
|
package/dist/getDeviceId.d.ts
CHANGED
|
@@ -6,12 +6,12 @@ import { type Logger } from "./logger";
|
|
|
6
6
|
*
|
|
7
7
|
* Platform handling:
|
|
8
8
|
* - FireTV: DeviceInfo (Capacitor plugin)
|
|
9
|
-
* - Android/iOS:
|
|
9
|
+
* - Android/iOS: NativeBridge
|
|
10
10
|
* - Samsung TV: webapis
|
|
11
11
|
* - LG TV: webOS Luna service
|
|
12
12
|
* - Web: localStorage (with generated UUID fallback)
|
|
13
13
|
*
|
|
14
|
-
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', '
|
|
14
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'MOBILE', 'WEB')
|
|
15
15
|
* @param logger - Optional logger for error reporting. Defaults to defaultLogger.
|
|
16
16
|
* @returns A promise that resolves to a unique device identifier string, or null if retrieval fails
|
|
17
17
|
*
|
|
@@ -31,6 +31,14 @@ interface LGDeviceIdResponse {
|
|
|
31
31
|
}
|
|
32
32
|
declare global {
|
|
33
33
|
interface Window {
|
|
34
|
+
DeviceInfo?: {
|
|
35
|
+
getAndroidId: () => Promise<{
|
|
36
|
+
androidId: string;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
NativeBridge?: {
|
|
40
|
+
getDeviceId: () => Promise<string>;
|
|
41
|
+
};
|
|
34
42
|
webapis?: {
|
|
35
43
|
productinfo?: {
|
|
36
44
|
getDuid: () => string;
|
|
@@ -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;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"getDeviceId.d.ts","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,WAAW,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AA8JD,UAAU,kBAAkB;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;CACL;AAMD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,UAAU,CAAC,EAAE;YACT,YAAY,EAAE,MAAM,OAAO,CAAC;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SACrD,CAAA;QACD,YAAY,CAAC,EAAE;YACX,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;SACrC,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;SACJ,CAAA;KACJ;CACJ"}
|
package/dist/getDeviceId.js
CHANGED
|
@@ -6,12 +6,12 @@ import { defaultLogger } from "./logger";
|
|
|
6
6
|
*
|
|
7
7
|
* Platform handling:
|
|
8
8
|
* - FireTV: DeviceInfo (Capacitor plugin)
|
|
9
|
-
* - Android/iOS:
|
|
9
|
+
* - Android/iOS: NativeBridge
|
|
10
10
|
* - Samsung TV: webapis
|
|
11
11
|
* - LG TV: webOS Luna service
|
|
12
12
|
* - Web: localStorage (with generated UUID fallback)
|
|
13
13
|
*
|
|
14
|
-
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', '
|
|
14
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'MOBILE', 'WEB')
|
|
15
15
|
* @param logger - Optional logger for error reporting. Defaults to defaultLogger.
|
|
16
16
|
* @returns A promise that resolves to a unique device identifier string, or null if retrieval fails
|
|
17
17
|
*
|
|
@@ -32,9 +32,7 @@ export async function getDeviceId(platform, logger = defaultLogger) {
|
|
|
32
32
|
return await getSamsungDeviceId(logger);
|
|
33
33
|
case "LG_TV":
|
|
34
34
|
return await getLGDeviceId(logger);
|
|
35
|
-
case "
|
|
36
|
-
case "IOS_MOBILE":
|
|
37
|
-
case "MOBILE": // Legacy/Generic
|
|
35
|
+
case "MOBILE": // iOS and Android
|
|
38
36
|
return await getMobileDeviceId(logger);
|
|
39
37
|
case "WEB":
|
|
40
38
|
return getLocalStorageDeviceId();
|
|
@@ -59,60 +57,46 @@ function getLocalStorageDeviceId() {
|
|
|
59
57
|
* Attempt to get device ID from Capacitor DeviceInfo plugin (FireTV)
|
|
60
58
|
*/
|
|
61
59
|
async function getFireTVDeviceId(logger) {
|
|
62
|
-
var _a;
|
|
60
|
+
var _a, _b, _c;
|
|
63
61
|
try {
|
|
64
|
-
|
|
65
|
-
const Capacitor = window.Capacitor;
|
|
66
|
-
const DeviceInfo = (_a = Capacitor === null || Capacitor === void 0 ? void 0 : Capacitor.Plugins) === null || _a === void 0 ? void 0 : _a.DeviceInfo;
|
|
67
|
-
if (!(DeviceInfo === null || DeviceInfo === void 0 ? void 0 : DeviceInfo.getAndroidId)) {
|
|
62
|
+
if (!((_c = (_b = (_a = window.Capacitor) === null || _a === void 0 ? void 0 : _a.Plugins) === null || _b === void 0 ? void 0 : _b.DeviceInfo) === null || _c === void 0 ? void 0 : _c.getAndroidId)) {
|
|
68
63
|
return null;
|
|
69
64
|
}
|
|
70
|
-
const result = await DeviceInfo.getAndroidId();
|
|
65
|
+
const result = await window.Capacitor.Plugins.DeviceInfo.getAndroidId();
|
|
71
66
|
if ((result === null || result === void 0 ? void 0 : result.androidId) && result.androidId.trim()) {
|
|
72
67
|
return result.androidId;
|
|
73
68
|
}
|
|
74
69
|
else {
|
|
75
|
-
logger.error("DeviceInfo.getAndroidId returned empty");
|
|
70
|
+
logger.error("Capacitor.Plugins.DeviceInfo.getAndroidId returned empty");
|
|
76
71
|
}
|
|
77
72
|
}
|
|
78
73
|
catch (error) {
|
|
79
|
-
const message = "DeviceInfo.getAndroidId failed:";
|
|
74
|
+
const message = "Capacitor.Plugins.DeviceInfo.getAndroidId failed:";
|
|
80
75
|
logger.error(message, { error });
|
|
81
76
|
}
|
|
82
77
|
return null;
|
|
83
78
|
}
|
|
84
79
|
/**
|
|
85
|
-
* Attempt to get device ID from
|
|
86
|
-
*
|
|
87
|
-
* iOS exposes phoneDeviceId via window.iosAppContext
|
|
88
|
-
* Android exposes phoneDeviceId via window.androidAppContext (also check window.top for iframes)
|
|
80
|
+
* Attempt to get device ID from Native Bridge (Android/iOS)
|
|
89
81
|
*/
|
|
90
|
-
function getMobileDeviceId(logger) {
|
|
91
|
-
var _a
|
|
92
|
-
// Try iOS first
|
|
93
|
-
const iosId = (_a = window.iosAppContext) === null || _a === void 0 ? void 0 : _a.phoneDeviceId;
|
|
94
|
-
if (iosId && iosId.trim()) {
|
|
95
|
-
return iosId;
|
|
96
|
-
}
|
|
97
|
-
// Try Android (check both window and window.top for iframe scenarios)
|
|
98
|
-
const androidContext = window.androidAppContext;
|
|
82
|
+
async function getMobileDeviceId(logger) {
|
|
83
|
+
var _a;
|
|
99
84
|
try {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return androidId;
|
|
85
|
+
if (!((_a = window.NativeBridge) === null || _a === void 0 ? void 0 : _a.getDeviceId)) {
|
|
86
|
+
return null;
|
|
103
87
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
88
|
+
const id = await window.NativeBridge.getDeviceId();
|
|
89
|
+
if (id && id.trim()) {
|
|
90
|
+
return id;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
logger.error("NativeBridge.getDeviceId returned empty");
|
|
110
94
|
}
|
|
111
95
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const message = "NativeBridge.getDeviceId failed:";
|
|
98
|
+
logger.error(message, { error });
|
|
99
|
+
}
|
|
116
100
|
return null;
|
|
117
101
|
}
|
|
118
102
|
/**
|
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;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,QAAgB,EAChB,SAAiB,aAAa;IAE9B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IACjD,QAAQ,kBAAkB,EAAE,CAAC;QACzB,KAAK,SAAS;YACV,OAAO,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC1C,KAAK,YAAY;YACb,OAAO,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC3C,KAAK,OAAO;YACR,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;QACtC,KAAK,
|
|
1
|
+
{"version":3,"file":"getDeviceId.js","sourceRoot":"","sources":["../src/getDeviceId.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Logger } from "./logger";
|
|
2
|
+
export type Environment = "local" | "dev" | "staging" | "prod";
|
|
3
|
+
export type EnvironmentSource = "native" | "build-time" | "default";
|
|
4
|
+
export interface EnvironmentResult {
|
|
5
|
+
environment: Environment;
|
|
6
|
+
source: EnvironmentSource;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get the environment for the current platform.
|
|
10
|
+
*
|
|
11
|
+
* Precedence:
|
|
12
|
+
* 1. Native shell (Fire TV only) - reads from BuildConfig.ENVIRONMENT
|
|
13
|
+
* 2. Build-time injection (VITE_ENVIRONMENT) - CLI override
|
|
14
|
+
* 3. Default fallback ("dev")
|
|
15
|
+
*
|
|
16
|
+
* This ensures production APKs cannot accidentally run dev VWR,
|
|
17
|
+
* since the native Android build variant determines the environment.
|
|
18
|
+
*
|
|
19
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'MOBILE', 'WEB')
|
|
20
|
+
* @param buildTimeEnv - Optional build-time injected environment (from CLI)
|
|
21
|
+
* @param logger - Optional logger for reporting
|
|
22
|
+
* @returns Environment result with source information for logging
|
|
23
|
+
*/
|
|
24
|
+
export declare function getEnvironment(platform: string, buildTimeEnv: string | undefined, logger?: Logger): Promise<EnvironmentResult>;
|
|
25
|
+
//# sourceMappingURL=getEnvironment.d.ts.map
|
|
@@ -0,0 +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,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,CAoC5B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { defaultLogger } from "./logger";
|
|
2
|
+
/**
|
|
3
|
+
* Get the environment for the current platform.
|
|
4
|
+
*
|
|
5
|
+
* Precedence:
|
|
6
|
+
* 1. Native shell (Fire TV only) - reads from BuildConfig.ENVIRONMENT
|
|
7
|
+
* 2. Build-time injection (VITE_ENVIRONMENT) - CLI override
|
|
8
|
+
* 3. Default fallback ("dev")
|
|
9
|
+
*
|
|
10
|
+
* This ensures production APKs cannot accidentally run dev VWR,
|
|
11
|
+
* since the native Android build variant determines the environment.
|
|
12
|
+
*
|
|
13
|
+
* @param platform - Platform identifier ('FIRE_TV', 'SAMSUNG_TV', 'LG_TV', 'MOBILE', 'WEB')
|
|
14
|
+
* @param buildTimeEnv - Optional build-time injected environment (from CLI)
|
|
15
|
+
* @param logger - Optional logger for reporting
|
|
16
|
+
* @returns Environment result with source information for logging
|
|
17
|
+
*/
|
|
18
|
+
export async function getEnvironment(platform, buildTimeEnv, logger = defaultLogger) {
|
|
19
|
+
const normalizedPlatform = platform.toUpperCase();
|
|
20
|
+
// For Fire TV, try to read from native first (safest - prevents env mismatch)
|
|
21
|
+
if (normalizedPlatform === "FIRE_TV") {
|
|
22
|
+
const nativeEnv = await getFireTVEnvironment(logger);
|
|
23
|
+
if (nativeEnv) {
|
|
24
|
+
const mapped = mapNativeEnvironment(nativeEnv);
|
|
25
|
+
logger.info(`[Shell] Environment: "${mapped}" (source: native BuildConfig.ENVIRONMENT="${nativeEnv}")`);
|
|
26
|
+
return { environment: mapped, source: "native" };
|
|
27
|
+
}
|
|
28
|
+
// Fall through to build-time if native fails
|
|
29
|
+
logger.warn("[Shell] Failed to read environment from native, falling back to build-time");
|
|
30
|
+
}
|
|
31
|
+
// Build-time injection (CLI --env flag)
|
|
32
|
+
if (buildTimeEnv && isValidEnvironment(buildTimeEnv)) {
|
|
33
|
+
logger.info(`[Shell] Environment: "${buildTimeEnv}" (source: build-time CLI injection)`);
|
|
34
|
+
return {
|
|
35
|
+
environment: buildTimeEnv,
|
|
36
|
+
source: "build-time",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Default fallback
|
|
40
|
+
const defaultEnv = "dev";
|
|
41
|
+
logger.warn(`[Shell] Environment: "${defaultEnv}" (source: default fallback - no native or build-time env found)`);
|
|
42
|
+
return { environment: defaultEnv, source: "default" };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Read environment from Fire TV native shell via Capacitor plugin.
|
|
46
|
+
*/
|
|
47
|
+
async function getFireTVEnvironment(logger) {
|
|
48
|
+
var _a, _b, _c;
|
|
49
|
+
try {
|
|
50
|
+
if (!((_c = (_b = (_a = window.Capacitor) === null || _a === void 0 ? void 0 : _a.Plugins) === null || _b === void 0 ? void 0 : _b.DeviceInfo) === null || _c === void 0 ? void 0 : _c.getNativeShellAppEnvironment)) {
|
|
51
|
+
logger.warn("[Shell] DeviceInfo.getNativeShellAppEnvironment not available");
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const result = await window.Capacitor.Plugins.DeviceInfo.getNativeShellAppEnvironment();
|
|
55
|
+
if ((result === null || result === void 0 ? void 0 : result.environment) && result.environment.trim()) {
|
|
56
|
+
return result.environment;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
logger.error("[Shell] DeviceInfo.getNativeShellAppEnvironment returned empty");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.error("[Shell] DeviceInfo.getNativeShellAppEnvironment failed:", { error });
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Map native Android BuildConfig.ENVIRONMENT values to vwr-loader environment names.
|
|
69
|
+
*
|
|
70
|
+
* Android BuildConfig values:
|
|
71
|
+
* - "development" (debug build)
|
|
72
|
+
* - "staging" (staging build)
|
|
73
|
+
* - "production" (release build)
|
|
74
|
+
*
|
|
75
|
+
* VWR environment names:
|
|
76
|
+
* - "dev"
|
|
77
|
+
* - "staging"
|
|
78
|
+
* - "prod"
|
|
79
|
+
*/
|
|
80
|
+
function mapNativeEnvironment(nativeEnv) {
|
|
81
|
+
const normalized = nativeEnv.toLowerCase();
|
|
82
|
+
switch (normalized) {
|
|
83
|
+
case "development":
|
|
84
|
+
return "dev";
|
|
85
|
+
case "staging":
|
|
86
|
+
return "staging";
|
|
87
|
+
case "production":
|
|
88
|
+
return "prod";
|
|
89
|
+
default:
|
|
90
|
+
// If it's already in vwr format, use it
|
|
91
|
+
if (isValidEnvironment(normalized)) {
|
|
92
|
+
return normalized;
|
|
93
|
+
}
|
|
94
|
+
return "dev";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function isValidEnvironment(env) {
|
|
98
|
+
return ["local", "dev", "staging", "prod"].includes(env);
|
|
99
|
+
}
|
|
100
|
+
// Note: Window.Capacitor type is declared in getDeviceId.ts
|
|
101
|
+
// We just need to add the getNativeShellAppEnvironment method type there
|
|
102
|
+
//# sourceMappingURL=getEnvironment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getEnvironment.js","sourceRoot":"","sources":["../src/getEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ 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
|
-
* -
|
|
9
|
+
* - MOBILE: Native bridge (future implementation)
|
|
10
10
|
* - WEB/Unknown: Returns 'unknown'
|
|
11
11
|
*
|
|
12
|
-
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV,
|
|
12
|
+
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV, MOBILE, WEB)
|
|
13
13
|
* @param logger - Optional logger for warning reporting. Defaults to defaultLogger.
|
|
14
14
|
* @returns Shell version string or 'unknown' if not available
|
|
15
15
|
*/
|
|
@@ -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;AAErD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"getShellVersion.d.ts","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAErD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAuEjB;AAGD,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,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;KACJ;CACJ"}
|
package/dist/getShellVersion.js
CHANGED
|
@@ -6,10 +6,10 @@ 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
|
-
* -
|
|
9
|
+
* - MOBILE: Native bridge (future implementation)
|
|
10
10
|
* - WEB/Unknown: Returns 'unknown'
|
|
11
11
|
*
|
|
12
|
-
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV,
|
|
12
|
+
* @param platform - Platform identifier (SAMSUNG_TV, LG_TV, FIRE_TV, MOBILE, WEB)
|
|
13
13
|
* @param logger - Optional logger for warning reporting. Defaults to defaultLogger.
|
|
14
14
|
* @returns Shell version string or 'unknown' if not available
|
|
15
15
|
*/
|
|
@@ -59,9 +59,7 @@ export async function getShellVersion(platform, logger = defaultLogger) {
|
|
|
59
59
|
return "unknown";
|
|
60
60
|
}
|
|
61
61
|
// Mobile: Future implementation via native bridge
|
|
62
|
-
if (normalizedPlatform === "
|
|
63
|
-
normalizedPlatform === "IOS_MOBILE" ||
|
|
64
|
-
normalizedPlatform === "MOBILE") {
|
|
62
|
+
if (normalizedPlatform === "MOBILE") {
|
|
65
63
|
// TODO: Implement native bridge version retrieval when available
|
|
66
64
|
return "unknown";
|
|
67
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getShellVersion.js","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;AAErD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,QAAgB,EAChB,SAAiB,aAAa;;IAE9B,IAAI,CAAC;QACD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QAEjD,qDAAqD;QACrD,IAAI,kBAAkB,KAAK,YAAY,EAAE,CAAC;YACtC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,KAAK,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAI,MAAc,CAAC,KAAK,CAAA;gBACnC,IAAI,MAAA,KAAK,CAAC,WAAW,0CAAE,UAAU,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;oBAC9C,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,SAAS,CAAA;gBACxC,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,oCAAoC;QACpC,sFAAsF;QACtF,yEAAyE;QACzE,IAAI,kBAAkB,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,KAAK,EAAE,CAAC;gBACzD,MAAM,KAAK,GAAI,MAAc,CAAC,KAAK,CAAA;gBACnC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;oBACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;wBAC3B,KAAK,CAAC,YAAY,CAAC,CAAC,OAA8B,EAAE,EAAE;;4BAClD,OAAO,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,SAAS,CAAC,CAAA;wBAC1C,CAAC,CAAC,CAAA;oBACN,CAAC,CAAC,CAAA;gBACN,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,uDAAuD;QACvD,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACnC,kCAAkC;YAClC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,SAAS,EAAE,CAAC;gBAC7D,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,CAAA;gBAC3C,MAAM,UAAU,GAAG,MAAA,SAAS,CAAC,OAAO,0CAAE,UAAU,CAAA;gBAEhD,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAA;oBACnD,OAAO,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,mCAAI,SAAS,CAAA;gBAC/C,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAA;QACpB,CAAC;QAED,kDAAkD;QAClD,
|
|
1
|
+
{"version":3,"file":"getShellVersion.js","sourceRoot":"","sources":["../src/getShellVersion.ts"],"names":[],"mappings":"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"}
|
package/dist/loadVwr.d.ts
CHANGED
|
@@ -8,11 +8,16 @@ export type { Logger };
|
|
|
8
8
|
* this reduces startup latency from ~2-4s to ~500ms by skipping config fetches.
|
|
9
9
|
*
|
|
10
10
|
* Flow:
|
|
11
|
-
* 1. Get deviceId, shellVersion (fast, local)
|
|
11
|
+
* 1. Get deviceId, shellVersion, environment (fast, local/native)
|
|
12
12
|
* 2. Check vwr-enabled flag (single request, ~500ms)
|
|
13
13
|
* 3. If OFF → throw immediately (no config fetches)
|
|
14
14
|
* 4. If ON → fetch config, load VWR module, initialize
|
|
15
15
|
*
|
|
16
|
+
* Environment resolution:
|
|
17
|
+
* - Fire TV: reads from native BuildConfig.ENVIRONMENT (prevents env mismatch)
|
|
18
|
+
* - Other platforms: uses build-time injected VITE_ENVIRONMENT
|
|
19
|
+
* - Fallback: "dev"
|
|
20
|
+
*
|
|
16
21
|
* @param logger - Optional logger, defaults to console
|
|
17
22
|
*/
|
|
18
23
|
export declare const loadVwr: (logger?: Logger) => Promise<void>;
|
package/dist/loadVwr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadVwr.d.ts","sourceRoot":"","sources":["../src/loadVwr.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadVwr.d.ts","sourceRoot":"","sources":["../src/loadVwr.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAiBrD,YAAY,EAAE,MAAM,EAAE,CAAA;AAEtB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,OAAO,GAAU,SAAQ,MAAsB,kBAkG3D,CAAA"}
|
package/dist/loadVwr.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { fetchAmplitudeFlags } from "./amplitudeFlagFetcher";
|
|
2
2
|
import { ENV_DEFAULTS } from "./envDefaults";
|
|
3
3
|
import { getDeviceId } from "./getDeviceId";
|
|
4
|
+
import { getEnvironment } from "./getEnvironment";
|
|
4
5
|
import { getShellVersion } from "./getShellVersion";
|
|
5
6
|
import { defaultLogger } from "./logger";
|
|
6
7
|
import { getVWRConfig, validateConfig } from "./vwrConfig";
|
|
7
8
|
// Vite injects these at build time
|
|
8
|
-
|
|
9
|
+
// VITE_ENVIRONMENT is optional for platforms that support native env reading (Fire TV)
|
|
10
|
+
const BUILD_TIME_ENVIRONMENT = import.meta.env.VITE_ENVIRONMENT;
|
|
9
11
|
const PLATFORM = import.meta.env.VITE_PLATFORM;
|
|
10
12
|
const CONFIG_URL = import.meta.env.VITE_CONFIG_URL;
|
|
11
13
|
const CONFIG_FILE = import.meta.env.VITE_CONFIG_FILE;
|
|
@@ -20,15 +22,20 @@ const AMPLITUDE_KEY = import.meta.env.VITE_AMPLITUDE_DEPLOYMENT_KEY;
|
|
|
20
22
|
* this reduces startup latency from ~2-4s to ~500ms by skipping config fetches.
|
|
21
23
|
*
|
|
22
24
|
* Flow:
|
|
23
|
-
* 1. Get deviceId, shellVersion (fast, local)
|
|
25
|
+
* 1. Get deviceId, shellVersion, environment (fast, local/native)
|
|
24
26
|
* 2. Check vwr-enabled flag (single request, ~500ms)
|
|
25
27
|
* 3. If OFF → throw immediately (no config fetches)
|
|
26
28
|
* 4. If ON → fetch config, load VWR module, initialize
|
|
27
29
|
*
|
|
30
|
+
* Environment resolution:
|
|
31
|
+
* - Fire TV: reads from native BuildConfig.ENVIRONMENT (prevents env mismatch)
|
|
32
|
+
* - Other platforms: uses build-time injected VITE_ENVIRONMENT
|
|
33
|
+
* - Fallback: "dev"
|
|
34
|
+
*
|
|
28
35
|
* @param logger - Optional logger, defaults to console
|
|
29
36
|
*/
|
|
30
37
|
export const loadVwr = async (logger = defaultLogger) => {
|
|
31
|
-
if (!
|
|
38
|
+
if (!PLATFORM || !CONFIG_URL || !CONFIG_FILE) {
|
|
32
39
|
throw new Error("[Shell] Build config not injected properly");
|
|
33
40
|
}
|
|
34
41
|
const deviceId = await getDeviceId(PLATFORM, logger);
|
|
@@ -38,6 +45,9 @@ export const loadVwr = async (logger = defaultLogger) => {
|
|
|
38
45
|
throw new Error(message);
|
|
39
46
|
}
|
|
40
47
|
const shellVersion = await getShellVersion(PLATFORM, logger);
|
|
48
|
+
// Get environment from native (Fire TV) or build-time injection
|
|
49
|
+
// This ensures prod APKs cannot accidentally run dev VWR
|
|
50
|
+
const { environment: ENVIRONMENT } = await getEnvironment(PLATFORM, BUILD_TIME_ENVIRONMENT, logger);
|
|
41
51
|
// Get amplitude key: injected at build time OR from envDefaults
|
|
42
52
|
// Precedence: build-time injection > envDefaults
|
|
43
53
|
let amplitudeKey = AMPLITUDE_KEY;
|
|
@@ -77,20 +87,18 @@ export const loadVwr = async (logger = defaultLogger) => {
|
|
|
77
87
|
vwrUrl: vwrConfig.vwrUrl,
|
|
78
88
|
});
|
|
79
89
|
try {
|
|
80
|
-
const vwr =
|
|
81
|
-
/* @vite-ignore */ vwrConfig.vwrUrl));
|
|
90
|
+
const vwr = await import(/* @vite-ignore */ vwrConfig.vwrUrl);
|
|
82
91
|
logger.info("[Shell] VWR module loaded successfully");
|
|
83
92
|
if (typeof vwr.init !== "function") {
|
|
84
93
|
throw new Error("[Shell] VWR module missing init() function");
|
|
85
94
|
}
|
|
86
95
|
await vwr.init({
|
|
87
96
|
hubUrl: vwrConfig.hubUrl,
|
|
97
|
+
launchUrl: vwrConfig.launchUrl,
|
|
88
98
|
platform: PLATFORM,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
platformAuthApiUrl: vwrConfig.platformAuthApiUrl,
|
|
93
|
-
trustedOrigins: new Set(vwrConfig.trustedDomains),
|
|
99
|
+
deviceId,
|
|
100
|
+
environment: ENVIRONMENT,
|
|
101
|
+
trustedDomains: vwrConfig.trustedDomains,
|
|
94
102
|
nativeShellVersion: shellVersion,
|
|
95
103
|
});
|
|
96
104
|
logger.info("[Shell] VWR initialized successfully");
|