diff --git a/apps/pwa/package-lock.json b/apps/pwa/package-lock.json index 2934e0e6..d2a18f6d 100644 --- a/apps/pwa/package-lock.json +++ b/apps/pwa/package-lock.json @@ -14,6 +14,7 @@ "@profullstack/footer": "latest", "@profullstack/libsql-pg": "^0.1.2", "@profullstack/notifications": "^0.1.0", + "@profullstack/player": "^0.17.0", "@profullstack/redeem-credits": "^0.2.0", "@profullstack/synconfig": "^0.1.1", "@simplewebauthn/browser": "^13.3.0", @@ -619,6 +620,27 @@ "node": ">=20.11" } }, + "node_modules/@profullstack/player": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@profullstack/player/-/player-0.17.0.tgz", + "integrity": "sha512-rd1aQzXqBwMMp6aIuyJ7K3O3+k7W83J1AXl7TG9PZmAVeK85lxEsuE1DwUnUbaa6zwBhJ9Xfcb0YxHVqtncYGg==", + "license": "MIT", + "dependencies": { + "hls.js": "^1.7.1", + "mpegts.js": "^1.8.2" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "react": ">=18" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, "node_modules/@profullstack/redeem-credits": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@profullstack/redeem-credits/-/redeem-credits-0.2.0.tgz", @@ -964,6 +986,12 @@ "node": ">= 0.4" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -979,6 +1007,15 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/express": { "version": "4.22.2", "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", @@ -1178,6 +1215,12 @@ "node": ">= 0.4" } }, + "node_modules/hls.js": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.7.4.tgz", + "integrity": "sha512-3GlxGdPvT2YHvQYOt+yOzT/DEior/qJVNIylHA77kgeoBTdQQqi70GwefNEUmHQeNGyjC8U62+bruqW/Tpm+tg==", + "license": "Apache-2.0" + }, "node_modules/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", @@ -1329,6 +1372,19 @@ "node": ">= 0.6" } }, + "node_modules/mpegts.js": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mpegts.js/-/mpegts.js-1.8.2.tgz", + "integrity": "sha512-cZYMa5muASH55wrS6JK5IGkUqnCA96c0f+WdnW91jIK9s/N6NzjmTQDJNYg9A5u/G2Q5nj2b3w1Zwzze/9guxA==", + "license": "Apache-2.0", + "dependencies": { + "es6-promise": "^4.2.8", + "events": "^3.3.0" + }, + "engines": { + "node": ">=20.9.0" + } + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/apps/pwa/package.json b/apps/pwa/package.json index 813047b1..5842afa5 100644 --- a/apps/pwa/package.json +++ b/apps/pwa/package.json @@ -20,6 +20,7 @@ "@profullstack/footer": "latest", "@profullstack/libsql-pg": "^0.1.2", "@profullstack/notifications": "^0.1.0", + "@profullstack/player": "^0.17.0", "@profullstack/redeem-credits": "^0.2.0", "@profullstack/synconfig": "^0.1.1", "@simplewebauthn/browser": "^13.3.0", diff --git a/apps/pwa/pnpm-lock.yaml b/apps/pwa/pnpm-lock.yaml index fd85ea58..0a91e9d5 100644 --- a/apps/pwa/pnpm-lock.yaml +++ b/apps/pwa/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: '@profullstack/notifications': specifier: ^0.1.0 version: 0.1.0 + '@profullstack/player': + specifier: ^0.17.0 + version: 0.17.0 '@profullstack/redeem-credits': specifier: ^0.2.0 version: 0.2.0 @@ -251,6 +254,15 @@ packages: resolution: {integrity: sha512-17jiBCRiZVDcIyWnWKYr5E2eVog/1iHgXaruGbmlw7j7Ob4zd6oOqGjh8BP8wm13iFwikczYObQwSrGadBdnGw==} engines: {node: '>=20.11'} + '@profullstack/player@0.17.0': + resolution: {integrity: sha512-rd1aQzXqBwMMp6aIuyJ7K3O3+k7W83J1AXl7TG9PZmAVeK85lxEsuE1DwUnUbaa6zwBhJ9Xfcb0YxHVqtncYGg==} + engines: {node: '>=20'} + peerDependencies: + react: '>=18' + peerDependenciesMeta: + react: + optional: true + '@profullstack/redeem-credits@0.2.0': resolution: {integrity: sha512-JLowb7mWYfouIK7O522tuPPhvLjQjhdEfm6g3xEYrlNLGzLhrIADDhrYldBlGHfiVBWUFX7wefLuCSLF9fnyog==} engines: {node: '>=20'} @@ -384,6 +396,9 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -391,6 +406,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + express@4.22.2: resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} engines: {node: '>= 0.10.0'} @@ -438,6 +457,9 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + hls.js@1.7.4: + resolution: {integrity: sha512-3GlxGdPvT2YHvQYOt+yOzT/DEior/qJVNIylHA77kgeoBTdQQqi70GwefNEUmHQeNGyjC8U62+bruqW/Tpm+tg==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -494,6 +516,10 @@ packages: engines: {node: '>=4'} hasBin: true + mpegts.js@1.8.2: + resolution: {integrity: sha512-cZYMa5muASH55wrS6JK5IGkUqnCA96c0f+WdnW91jIK9s/N6NzjmTQDJNYg9A5u/G2Q5nj2b3w1Zwzze/9guxA==} + engines: {node: '>=20.9.0'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -935,6 +961,11 @@ snapshots: '@profullstack/notifications@0.1.0': {} + '@profullstack/player@0.17.0': + dependencies: + hls.js: 1.7.4 + mpegts.js: 1.8.2 + '@profullstack/redeem-credits@0.2.0': {} '@profullstack/referrals@0.1.0': {} @@ -1055,10 +1086,14 @@ snapshots: dependencies: es-errors: 1.3.0 + es6-promise@4.2.8: {} + escape-html@1.0.3: {} etag@1.8.1: {} + events@3.3.0: {} + express@4.22.2: dependencies: accepts: 1.3.8 @@ -1148,6 +1183,8 @@ snapshots: dependencies: function-bind: 1.1.2 + hls.js@1.7.4: {} + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -1211,6 +1248,11 @@ snapshots: mime@1.6.0: {} + mpegts.js@1.8.2: + dependencies: + es6-promise: 4.2.8 + events: 3.3.0 + ms@2.0.0: {} ms@2.1.3: {} diff --git a/apps/pwa/public/pf-player-init.js b/apps/pwa/public/pf-player-init.js new file mode 100644 index 00000000..e777ec58 --- /dev/null +++ b/apps/pwa/public/pf-player-init.js @@ -0,0 +1,33 @@ +// Upgrades every server-rendered
to +// @profullstack/player (one control bar, auto-hide, fullscreen including iPhone). The