@24i/smartapps-bigscreen-rnv-build-engine 5.0.0-alpha.16 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/build-freshness.js +158 -0
  2. package/dist/.build-freshness.json +1010 -0
  3. package/dist/templates/platforms/firetv/project/README.md +196 -0
  4. package/dist/templates/platforms/firetv/project/amazoniap/build.gradle +41 -0
  5. package/dist/templates/platforms/firetv/project/amazoniap/consumer-rules.pro +0 -0
  6. package/dist/templates/platforms/firetv/project/amazoniap/proguard-rules.pro +21 -0
  7. package/dist/templates/platforms/firetv/project/amazoniap/src/main/kotlin/com/twentyfouri/bridgetv/amazoniap/AmazonIapService.kt +91 -0
  8. package/dist/templates/platforms/firetv/project/amazoniap/src/main/kotlin/com/twentyfouri/bridgetv/amazoniap/AmazonIapServiceFactory.kt +13 -0
  9. package/dist/templates/platforms/firetv/project/app/build.gradle +138 -0
  10. package/dist/templates/platforms/firetv/project/app/proguard-rules.pro +47 -0
  11. package/dist/templates/platforms/firetv/project/app/src/bigscreenAppstage/kotlin/com/twentyfouri/tvbridge/Flavor.kt +9 -0
  12. package/dist/templates/platforms/firetv/project/app/src/bigscreenAppstage/res/raw/configuration.json +8 -0
  13. package/dist/templates/platforms/firetv/project/app/src/main/AndroidManifest.xml +52 -0
  14. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/FlavorBase.kt +9 -0
  15. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/bridge/BridgeFromJavaScript.kt +421 -0
  16. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/bridge/BridgeToJavaScript.kt +121 -0
  17. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/BridgeConfig.kt +19 -0
  18. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/ConfigCallback.kt +6 -0
  19. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/ConfigProvider.kt +27 -0
  20. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/Drm.kt +10 -0
  21. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/configuration/UserAgent.kt +6 -0
  22. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/BaseApplication.kt +73 -0
  23. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ActivityComponent.kt +13 -0
  24. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ActivityModule.kt +14 -0
  25. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ApplicationComponent.kt +23 -0
  26. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/ApplicationModule.kt +51 -0
  27. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/di/PerActivity.kt +26 -0
  28. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/LocalStorage.kt +30 -0
  29. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/LoggingDrmCallback.kt +38 -0
  30. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/OverriddenHttpMediaDrmCallback.kt +134 -0
  31. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryBitmovinCustomized.kt +19 -0
  32. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryConfigured.kt +37 -0
  33. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerCustomized.kt +106 -0
  34. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryExoPlayerNpaw.kt +581 -0
  35. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/PlayerFactoryVersion.kt +27 -0
  36. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/SimpleActivityLifecycleCallback.kt +32 -0
  37. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/global/utils/SourceDrmOverridden.kt +91 -0
  38. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/sound/TouchPlayer.kt +86 -0
  39. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/client/BridgeWebView.kt +82 -0
  40. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/client/BridgeWebViewClient.kt +114 -0
  41. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/AnalyticsPlaybackInfo.kt +10 -0
  42. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/ContentModel.kt +14 -0
  43. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/DrmModel.kt +20 -0
  44. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/model/MediaEventType.kt +31 -0
  45. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/PlaybackInfoParser.kt +10 -0
  46. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/SourceParser.kt +89 -0
  47. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/parser/TrackJsonModelParser.kt +58 -0
  48. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/Mainview.kt +18 -0
  49. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/PlayerCache.kt +15 -0
  50. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/view/WebViewActivity.kt +252 -0
  51. package/dist/templates/platforms/firetv/project/app/src/main/kotlin/com/twentyfouri/tvbridge/webview/viewmodel/WebViewModel.kt +748 -0
  52. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_focus.xml +10 -0
  53. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_normal.xml +7 -0
  54. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_background_pressed.xml +7 -0
  55. package/dist/templates/platforms/firetv/project/app/src/main/res/drawable/button_focus.xml +8 -0
  56. package/dist/templates/platforms/firetv/project/app/src/main/res/layout/activity_web_view.xml +28 -0
  57. package/dist/templates/platforms/firetv/project/app/src/main/res/raw/click.ogg +0 -0
  58. package/dist/templates/platforms/firetv/project/app/src/main/res/values/styles.xml +12 -0
  59. package/dist/templates/platforms/firetv/project/app/src/main/res/xml/network_security_config.xml +4 -0
  60. package/dist/templates/platforms/firetv/project/build.gradle +45 -0
  61. package/dist/templates/platforms/firetv/project/common/build.gradle +41 -0
  62. package/dist/templates/platforms/firetv/project/common/consumer-rules.pro +0 -0
  63. package/dist/templates/platforms/firetv/project/common/proguard-rules.pro +21 -0
  64. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/Util.kt +11 -0
  65. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapCallback.kt +11 -0
  66. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapException.kt +14 -0
  67. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapProduct.kt +16 -0
  68. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapPurchase.kt +9 -0
  69. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapService.kt +14 -0
  70. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/IapServiceFactory.kt +8 -0
  71. package/dist/templates/platforms/firetv/project/common/src/main/kotlin/com/twentyfouri/tvbridge/common/iap/NullIapService.kt +32 -0
  72. package/dist/templates/platforms/firetv/project/googleiap/build.gradle +41 -0
  73. package/dist/templates/platforms/firetv/project/googleiap/consumer-rules.pro +0 -0
  74. package/dist/templates/platforms/firetv/project/googleiap/proguard-rules.pro +21 -0
  75. package/dist/templates/platforms/firetv/project/googleiap/src/main/kotlin/com/twentyfouri/tvbridge/googleiap/GoogleIapService.kt +6 -0
  76. package/dist/templates/platforms/firetv/project/googleiap/src/main/kotlin/com/twentyfouri/tvbridge/googleiap/GoogleIapServiceFactory.kt +13 -0
  77. package/dist/templates/platforms/firetv/project/gradle/wrapper/gradle-wrapper.jar +0 -0
  78. package/dist/templates/platforms/firetv/project/gradle/wrapper/gradle-wrapper.properties +7 -0
  79. package/dist/templates/platforms/firetv/project/gradle.properties +4 -0
  80. package/dist/templates/platforms/firetv/project/gradlew +251 -0
  81. package/dist/templates/platforms/firetv/project/gradlew.bat +94 -0
  82. package/dist/templates/platforms/firetv/project/proguard-rules.pro +42 -0
  83. package/dist/templates/platforms/firetv/project/settings.gradle +4 -0
  84. package/index.js +2 -31
  85. package/package.json +7 -3
  86. package/project.json +96 -0
@@ -0,0 +1,158 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const crypto = require('crypto');
6
+ const os = require('os');
7
+ const { spawnSync } = require('child_process');
8
+
9
+ const MARKER_NAME = '.build-freshness.json';
10
+ const digest = (value) => crypto.createHash('sha256').update(value).digest('hex');
11
+ const hashFile = (file) => digest(fs.readFileSync(file));
12
+ const sameRecord = (left, right) => JSON.stringify(Object.entries(left || {}).sort(([a], [b]) => a.localeCompare(b)))
13
+ === JSON.stringify(Object.entries(right || {}).sort(([a], [b]) => a.localeCompare(b)));
14
+
15
+ function walkFiles(directory) {
16
+ if (!fs.existsSync(directory)) return [];
17
+ return fs.readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
18
+ const file = path.join(directory, entry.name);
19
+ if (entry.isDirectory()) return walkFiles(file);
20
+ if (entry.isFile() || entry.isSymbolicLink()) return [file];
21
+ return [];
22
+ });
23
+ }
24
+
25
+ function sdkBaseConfig(packageDir) {
26
+ const sdkRoot = path.resolve(packageDir, '../..');
27
+ const manifest = path.join(sdkRoot, 'package.json');
28
+ const baseConfig = path.join(sdkRoot, 'tsconfig.base.json');
29
+ // Only require the inherited config in the monorepo. Published packages do
30
+ // not ship the SDK root, so its absence is part of their normal layout.
31
+ if (fs.existsSync(manifest)) {
32
+ try {
33
+ if (JSON.parse(fs.readFileSync(manifest, 'utf8')).name === '@24i/bigscreen-sdk') return baseConfig;
34
+ } catch { /* malformed/non-SDK ancestor is not a workspace input */ }
35
+ }
36
+ return null;
37
+ }
38
+
39
+ function inputFiles(packageDir) {
40
+ const inputs = [
41
+ ...walkFiles(path.join(packageDir, 'src')),
42
+ ...walkFiles(path.join(packageDir, 'templates')),
43
+ path.join(packageDir, 'src'),
44
+ path.join(packageDir, 'templates'),
45
+ path.join(packageDir, 'tsconfig.json'),
46
+ path.join(packageDir, 'package.json'),
47
+ path.join(packageDir, '.npmignore'),
48
+ path.join(packageDir, 'build-freshness.js'),
49
+ ];
50
+ const inherited = sdkBaseConfig(packageDir);
51
+ if (inherited) {
52
+ inputs.push(inherited, path.resolve(path.dirname(inherited), '..', 'package-lock.json'));
53
+ }
54
+ return inputs;
55
+ }
56
+
57
+ function relativeKey(packageDir, file) {
58
+ const relative = path.relative(packageDir, file);
59
+ return relative.startsWith('..') ? `../../${path.basename(path.dirname(file))}/${path.basename(file)}` : relative;
60
+ }
61
+
62
+ function fingerprintInputs(packageDir) {
63
+ const hashes = {};
64
+ for (const file of inputFiles(packageDir).sort()) {
65
+ const key = relativeKey(packageDir, file);
66
+ if (!fs.existsSync(file)) hashes[key] = 'missing';
67
+ else if (fs.statSync(file).isFile()) {
68
+ if (path.basename(file) === 'package.json') {
69
+ const manifest = JSON.parse(fs.readFileSync(file, 'utf8'));
70
+ for (const field of ['version', 'dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) delete manifest[field];
71
+ hashes[key] = digest(JSON.stringify(manifest));
72
+ } else hashes[key] = hashFile(file);
73
+ }
74
+ else hashes[key] = 'directory';
75
+ }
76
+ return hashes;
77
+ }
78
+
79
+ function outputsSnapshot(packageDir) {
80
+ const distDir = path.join(packageDir, 'dist');
81
+ const outputs = {};
82
+ for (const file of walkFiles(distDir).sort()) {
83
+ if (path.basename(file) === MARKER_NAME) continue;
84
+ outputs[path.relative(distDir, file).split(path.sep).join('/')] = hashFile(file);
85
+ }
86
+ return outputs;
87
+ }
88
+
89
+ function getPublishedOutputPaths(packageDir) {
90
+ const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'rnv-pack-list-'));
91
+ try {
92
+ const args = ['pack', '--dry-run', '--json', '--ignore-scripts', '--workspaces=false', '--cache', path.join(tempRoot, 'npm-cache')];
93
+ const npmCli = process.env.npm_execpath;
94
+ const result = npmCli
95
+ ? spawnSync(process.execPath, [npmCli, ...args], { cwd: packageDir, encoding: 'utf8', env: process.env })
96
+ : spawnSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', args, { cwd: packageDir, encoding: 'utf8', env: process.env });
97
+ if (result.error) throw result.error;
98
+ if (result.status !== 0) {
99
+ throw new Error(`npm pack --dry-run failed for ${packageDir}: ${result.stderr || result.stdout}`);
100
+ }
101
+ const packResult = JSON.parse(result.stdout);
102
+ if (!Array.isArray(packResult) || !Array.isArray(packResult[0]?.files)) {
103
+ throw new Error(`npm pack --dry-run returned an unexpected file list for ${packageDir}`);
104
+ }
105
+ return packResult[0].files.map((file) => file.path.replace(/\\/g, '/'));
106
+ } finally {
107
+ fs.rmSync(tempRoot, { recursive: true, force: true });
108
+ }
109
+ }
110
+
111
+ function isCurrent(packageDir) {
112
+ const distDir = path.join(packageDir, 'dist');
113
+ const markerPath = path.join(distDir, MARKER_NAME);
114
+ const runtimeEntry = path.join(distDir, 'src', 'index.js');
115
+ if (!fs.existsSync(runtimeEntry) || !fs.existsSync(markerPath)) return false;
116
+ try {
117
+ const marker = JSON.parse(fs.readFileSync(markerPath, 'utf8'));
118
+ const publishedShape = !fs.existsSync(path.join(packageDir, 'src'))
119
+ && !fs.existsSync(path.join(packageDir, 'templates'))
120
+ && !fs.existsSync(path.join(packageDir, 'tsconfig.json'))
121
+ && sdkBaseConfig(packageDir) === null;
122
+ const actualOutputs = outputsSnapshot(packageDir);
123
+ return marker.schemaVersion === 2
124
+ && marker.publishedOutputs && typeof marker.publishedOutputs === 'object'
125
+ && (publishedShape || sameRecord(marker.inputs, fingerprintInputs(packageDir)))
126
+ && sameRecord(publishedShape ? marker.publishedOutputs : marker.outputs, actualOutputs)
127
+ && Object.keys(marker.outputs).length > 0;
128
+ } catch {
129
+ return false;
130
+ }
131
+ }
132
+
133
+ function stamp(packageDir = __dirname) {
134
+ const distDir = path.join(packageDir, 'dist');
135
+ if (!fs.existsSync(path.join(distDir, 'src', 'index.js'))) {
136
+ throw new Error(`Cannot stamp RNV build output without ${path.join(distDir, 'src', 'index.js')}`);
137
+ }
138
+ const marker = {
139
+ schemaVersion: 2,
140
+ inputs: fingerprintInputs(packageDir),
141
+ outputs: outputsSnapshot(packageDir),
142
+ publishedOutputs: {},
143
+ };
144
+ const outputPaths = new Set(Object.keys(marker.outputs));
145
+ for (const file of getPublishedOutputPaths(packageDir)) {
146
+ const relative = file.startsWith('package/') ? file.slice('package/'.length) : file;
147
+ if (!relative.startsWith('dist/')) continue;
148
+ const outputPath = relative.slice('dist/'.length);
149
+ if (outputPath === MARKER_NAME) continue;
150
+ if (!outputPaths.has(outputPath)) throw new Error(`npm pack includes an untracked RNV build output: ${relative}`);
151
+ if (outputPaths.has(outputPath)) marker.publishedOutputs[outputPath] = marker.outputs[outputPath];
152
+ }
153
+ fs.writeFileSync(path.join(distDir, MARKER_NAME), `${JSON.stringify(marker, null, 2)}\n`);
154
+ }
155
+
156
+ module.exports = { MARKER_NAME, fingerprintInputs, getPublishedOutputPaths, isCurrent, outputsSnapshot, stamp };
157
+
158
+ if (require.main === module) stamp(path.resolve(process.argv[2] || __dirname));