This commit is contained in:
William Oldham
2023-12-19 21:39:42 +00:00
parent 207cdbb220
commit ea88ca7cc2
5 changed files with 343 additions and 9 deletions

View File

@@ -2,13 +2,18 @@
"name": "providers-api", "name": "providers-api",
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"type": "module",
"scripts": { "scripts": {
"build": "wrangler deploy --dry-run --outdir dist",
"dev": "wrangler dev src/index.ts", "dev": "wrangler dev src/index.ts",
"deploy": "wrangler deploy --minify src/index.ts", "deploy": "wrangler deploy --minify src/index.ts",
"preinstall": "npx only-allow pnpm" "preinstall": "npx only-allow pnpm"
}, },
"dependencies": { "dependencies": {
"@movie-web/providers": "^1.1.5", "@movie-web/providers": "^1.1.5",
"@tsndr/cloudflare-worker-jwt": "^2.3.2",
"@types/jsonwebtoken": "^9.0.5",
"esbuild": "^0.19.10",
"hono": "^3.11.8", "hono": "^3.11.8",
"zod": "^3.22.4" "zod": "^3.22.4"
}, },

259
pnpm-lock.yaml generated
View File

@@ -8,6 +8,15 @@ dependencies:
'@movie-web/providers': '@movie-web/providers':
specifier: ^1.1.5 specifier: ^1.1.5
version: 1.1.5 version: 1.1.5
'@tsndr/cloudflare-worker-jwt':
specifier: ^2.3.2
version: 2.3.2
'@types/jsonwebtoken':
specifier: ^9.0.5
version: 9.0.5
esbuild:
specifier: ^0.19.10
version: 0.19.10
hono: hono:
specifier: ^3.11.8 specifier: ^3.11.8
version: 3.11.8 version: 3.11.8
@@ -131,6 +140,15 @@ packages:
rollup-plugin-node-polyfills: 0.2.1 rollup-plugin-node-polyfills: 0.2.1
dev: true dev: true
/@esbuild/aix-ppc64@0.19.10:
resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-arm64@0.17.19: /@esbuild/android-arm64@0.17.19:
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -140,6 +158,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-arm64@0.19.10:
resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-arm@0.17.19: /@esbuild/android-arm@0.17.19:
resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -149,6 +176,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-arm@0.19.10:
resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-x64@0.17.19: /@esbuild/android-x64@0.17.19:
resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -158,6 +194,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-x64@0.19.10:
resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: false
optional: true
/@esbuild/darwin-arm64@0.17.19: /@esbuild/darwin-arm64@0.17.19:
resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -167,6 +212,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/darwin-arm64@0.19.10:
resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@esbuild/darwin-x64@0.17.19: /@esbuild/darwin-x64@0.17.19:
resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -176,6 +230,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/darwin-x64@0.19.10:
resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@esbuild/freebsd-arm64@0.17.19: /@esbuild/freebsd-arm64@0.17.19:
resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -185,6 +248,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/freebsd-arm64@0.19.10:
resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/freebsd-x64@0.17.19: /@esbuild/freebsd-x64@0.17.19:
resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -194,6 +266,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/freebsd-x64@0.19.10:
resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-arm64@0.17.19: /@esbuild/linux-arm64@0.17.19:
resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -203,6 +284,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-arm64@0.19.10:
resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-arm@0.17.19: /@esbuild/linux-arm@0.17.19:
resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -212,6 +302,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-arm@0.19.10:
resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-ia32@0.17.19: /@esbuild/linux-ia32@0.17.19:
resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -221,6 +320,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-ia32@0.19.10:
resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-loong64@0.17.19: /@esbuild/linux-loong64@0.17.19:
resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -230,6 +338,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-loong64@0.19.10:
resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-mips64el@0.17.19: /@esbuild/linux-mips64el@0.17.19:
resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -239,6 +356,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-mips64el@0.19.10:
resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-ppc64@0.17.19: /@esbuild/linux-ppc64@0.17.19:
resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -248,6 +374,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-ppc64@0.19.10:
resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-riscv64@0.17.19: /@esbuild/linux-riscv64@0.17.19:
resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -257,6 +392,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-riscv64@0.19.10:
resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-s390x@0.17.19: /@esbuild/linux-s390x@0.17.19:
resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -266,6 +410,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-s390x@0.19.10:
resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/linux-x64@0.17.19: /@esbuild/linux-x64@0.17.19:
resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -275,6 +428,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-x64@0.19.10:
resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@esbuild/netbsd-x64@0.17.19: /@esbuild/netbsd-x64@0.17.19:
resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -284,6 +446,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/netbsd-x64@0.19.10:
resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/openbsd-x64@0.17.19: /@esbuild/openbsd-x64@0.17.19:
resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -293,6 +464,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/openbsd-x64@0.19.10:
resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: false
optional: true
/@esbuild/sunos-x64@0.17.19: /@esbuild/sunos-x64@0.17.19:
resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -302,6 +482,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/sunos-x64@0.19.10:
resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-arm64@0.17.19: /@esbuild/win32-arm64@0.17.19:
resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -311,6 +500,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-arm64@0.19.10:
resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-ia32@0.17.19: /@esbuild/win32-ia32@0.17.19:
resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -320,6 +518,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-ia32@0.19.10:
resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@esbuild/win32-x64@0.17.19: /@esbuild/win32-x64@0.17.19:
resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -329,6 +536,15 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-x64@0.19.10:
resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -454,6 +670,10 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: true dev: true
/@tsndr/cloudflare-worker-jwt@2.3.2:
resolution: {integrity: sha512-g1jSm5olPqKh15kadnj0666YPudibHYGyFyM0URLXSeY5MzNIGkfhFedLgKHq8NCDBMzLUMX7Oz8d+jmQXqBuw==}
dev: false
/@types/json-schema@7.0.15: /@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true dev: true
@@ -462,6 +682,12 @@ packages:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true dev: true
/@types/jsonwebtoken@9.0.5:
resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==}
dependencies:
'@types/node': 20.10.4
dev: false
/@types/node-forge@1.3.10: /@types/node-forge@1.3.10:
resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==} resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==}
dependencies: dependencies:
@@ -472,7 +698,6 @@ packages:
resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==}
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
dev: true
/@types/semver@7.5.6: /@types/semver@7.5.6:
resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
@@ -1166,6 +1391,37 @@ packages:
'@esbuild/win32-x64': 0.17.19 '@esbuild/win32-x64': 0.17.19
dev: true dev: true
/esbuild@0.19.10:
resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/aix-ppc64': 0.19.10
'@esbuild/android-arm': 0.19.10
'@esbuild/android-arm64': 0.19.10
'@esbuild/android-x64': 0.19.10
'@esbuild/darwin-arm64': 0.19.10
'@esbuild/darwin-x64': 0.19.10
'@esbuild/freebsd-arm64': 0.19.10
'@esbuild/freebsd-x64': 0.19.10
'@esbuild/linux-arm': 0.19.10
'@esbuild/linux-arm64': 0.19.10
'@esbuild/linux-ia32': 0.19.10
'@esbuild/linux-loong64': 0.19.10
'@esbuild/linux-mips64el': 0.19.10
'@esbuild/linux-ppc64': 0.19.10
'@esbuild/linux-riscv64': 0.19.10
'@esbuild/linux-s390x': 0.19.10
'@esbuild/linux-x64': 0.19.10
'@esbuild/netbsd-x64': 0.19.10
'@esbuild/openbsd-x64': 0.19.10
'@esbuild/sunos-x64': 0.19.10
'@esbuild/win32-arm64': 0.19.10
'@esbuild/win32-ia32': 0.19.10
'@esbuild/win32-x64': 0.19.10
dev: false
/escape-string-regexp@4.0.0: /escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -2733,7 +2989,6 @@ packages:
/undici-types@5.26.5: /undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
dev: true
/undici@5.28.2: /undici@5.28.2:
resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==} resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==}

View File

@@ -62,6 +62,8 @@ app.get('/scrape', async (context) => {
const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED); const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED);
let jwtResponse: string | undefined = undefined;
if (turnstileEnabled) { if (turnstileEnabled) {
const turnstileResponse = await validateTurnstile(context); const turnstileResponse = await validateTurnstile(context);
@@ -73,6 +75,8 @@ app.get('/scrape', async (context) => {
)}`, )}`,
); );
} }
jwtResponse = turnstileResponse.jwtToken;
} }
let media: ScrapeMedia; let media: ScrapeMedia;
@@ -88,6 +92,10 @@ app.get('/scrape', async (context) => {
} }
return streamSSE(context, async (stream) => { return streamSSE(context, async (stream) => {
if (jwtResponse) {
await writeSSEEvent(stream, 'token', jwtResponse);
}
try { try {
const output = await providers.runAll({ const output = await providers.runAll({
media, media,
@@ -130,6 +138,8 @@ app.get('/scrape/embed', async (context) => {
const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED); const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED);
let jwtResponse: string | undefined = undefined;
if (turnstileEnabled) { if (turnstileEnabled) {
const turnstileResponse = await validateTurnstile(context); const turnstileResponse = await validateTurnstile(context);
@@ -141,6 +151,8 @@ app.get('/scrape/embed', async (context) => {
)}`, )}`,
); );
} }
jwtResponse = turnstileResponse.jwtToken;
} }
let embedInput: z.infer<typeof embedSchema>; let embedInput: z.infer<typeof embedSchema>;
@@ -156,6 +168,9 @@ app.get('/scrape/embed', async (context) => {
} }
return streamSSE(context, async (stream) => { return streamSSE(context, async (stream) => {
if (jwtResponse) {
await writeSSEEvent(stream, 'token', jwtResponse);
}
try { try {
const output = await providers.runEmbedScraper({ const output = await providers.runEmbedScraper({
id: embedInput.id, id: embedInput.id,
@@ -190,6 +205,8 @@ app.get('/scrape/source', async (context) => {
const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED); const turnstileEnabled = Boolean(context.env?.TURNSTILE_ENABLED);
let jwtResponse: string | undefined = undefined;
if (turnstileEnabled) { if (turnstileEnabled) {
const turnstileResponse = await validateTurnstile(context); const turnstileResponse = await validateTurnstile(context);
@@ -201,6 +218,8 @@ app.get('/scrape/source', async (context) => {
)}`, )}`,
); );
} }
jwtResponse = turnstileResponse.jwtToken;
} }
let sourceInput: z.infer<typeof sourceSchema>; let sourceInput: z.infer<typeof sourceSchema>;
@@ -216,6 +235,9 @@ app.get('/scrape/source', async (context) => {
} }
return streamSSE(context, async (stream) => { return streamSSE(context, async (stream) => {
if (jwtResponse) {
await writeSSEEvent(stream, 'token', jwtResponse);
}
try { try {
const output = await providers.runSourceScraper({ const output = await providers.runSourceScraper({
id: sourceInput.id, id: sourceInput.id,

View File

@@ -1,16 +1,60 @@
import { Context, Env } from 'hono'; import { Context, Env } from 'hono';
import jsonwebtoken from '@tsndr/cloudflare-worker-jwt';
export async function validateTurnstile(context: Context<Env>) { export async function validateTurnstile(context: Context<Env>) {
const turnstileSecret = context.env?.TURNSTILE_SECRET as string | undefined; const turnstileSecret = context.env?.TURNSTILE_SECRET as string | undefined;
const jwtSecret = (context.env?.JWT_SECRET as string | undefined) ?? '';
const token = context.req.header('cf-turnstile-token') || ''; const token = context.req.query('token') || '';
// TODO: Make this cross platform // TODO: Make this cross platform
const ip = context.req.header('CF-Connecting-IP') || ''; const ip = context.req.header('CF-Connecting-IP') || '';
if (token.startsWith('jwt|')) {
try {
console.log(token, token.slice('jwt|'.length));
const isValid = await jsonwebtoken.verify(
token.slice('jwt|'.length),
jwtSecret,
{
algorithm: 'HS256',
},
);
if (!isValid) {
return {
success: false,
errorCodes: ['jwt-invalid'],
};
}
const { payload } = jsonwebtoken.decode(token.slice('jwt|'.length));
if (!payload || payload.ip !== ip) {
return {
success: false,
errorCodes: ['jwt-ip-invalid'],
};
}
return {
success: true,
errorCodes: [],
};
} catch (e: any) {}
}
if (!token.startsWith('turnstile|')) {
return {
success: false,
errorCodes: ['invalid-token-type'],
};
}
const formData = new FormData(); const formData = new FormData();
formData.append('secret', turnstileSecret || ''); formData.append('secret', turnstileSecret || '');
formData.append('response', token); formData.append('response', token.slice('turnstile|'.length));
formData.append('remoteip', ip); formData.append('remoteip', ip);
const url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; const url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
@@ -20,8 +64,21 @@ export async function validateTurnstile(context: Context<Env>) {
}); });
const outcome = await result.json<any>(); const outcome = await result.json<any>();
let jwt: string | undefined = undefined;
if (outcome.success) {
jwt = await jsonwebtoken.sign(
{
ip,
exp: Math.floor(Date.now() / 1000) + 60 * 10, // 10 Minutes
},
jwtSecret,
);
}
return { return {
success: outcome.success as boolean, success: outcome.success as boolean,
errorCodes: outcome['error-codes'] as string[], errorCodes: outcome['error-codes'] as string[],
jwtToken: jwt,
}; };
} }

View File

@@ -2,8 +2,3 @@ name = "providers-api"
main = "./src/index.ts" main = "./src/index.ts"
workers_dev = true workers_dev = true
compatibility_date = "2023-12-17" compatibility_date = "2023-12-17"
[vars]
TURNSTILE_ENABLED = false
TURNSTILE_SECRET = "1x0000000000000000000000000000000AA"
CORS_ALLOWED = "localhost,movie-web.app,dev.movie-web.app"