@prosopo/scripts 3.1.207 → 3.1.209

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.
@@ -28,6 +28,8 @@ ViteCommonJSConfig: flux
28
28
  '/home/runner/work/captcha/captcha/packages/datasets/tsconfig.json',
29
29
  '/home/runner/work/captcha/captcha/packages/icon-order-assets/tsconfig.json',
30
30
  '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json',
31
+ '/home/runner/work/captcha/captcha/packages/fingerprint/tsconfig.json',
32
+ '/home/runner/work/captcha/captcha/packages/fingerprintjs/tsconfig.json',
31
33
  '/home/runner/work/captcha/captcha/packages/web-bot-auth/tsconfig.json'
32
34
  ]
33
35
  }
@@ -59,6 +61,8 @@ ViteCommonJSConfig: flux
59
61
  '@prosopo/datasets',
60
62
  '@prosopo/icon-order-assets',
61
63
  '@prosopo/load-balancer',
64
+ '@prosopo/fingerprint',
65
+ '@prosopo/fingerprintjs',
62
66
  '@prosopo/web-bot-auth'
63
67
  ]
64
68
  }
@@ -82,4 +86,4 @@ dist/cjs/cli/index.cjs 3.33 kB │ gzip: 1.19 kB
82
86
  dist/cjs/scripts/setVersion.cjs 5.33 kB │ gzip: 1.65 kB
83
87
  dist/cjs/setup/setup.cjs 5.65 kB │ gzip: 1.80 kB
84
88
 
85
- ✓ built in 30ms
89
+ ✓ built in 46ms
@@ -1,5 +1,5 @@
1
1
  $ tsc --build --verbose
2
- 7:41:30 PM - Projects in this build:
2
+ 4:00:44 PM - Projects in this build:
3
3
  * ../config/tsconfig.json
4
4
  * ../../packages/util/tsconfig.json
5
5
  * ../../packages/locale/tsconfig.json
@@ -25,71 +25,77 @@ $ tsc --build --verbose
25
25
  * ../../packages/datasets/tsconfig.json
26
26
  * ../../packages/icon-order-assets/tsconfig.json
27
27
  * ../../packages/load-balancer/tsconfig.json
28
+ * ../../packages/fingerprintjs/tsconfig.json
29
+ * ../../packages/fingerprint/tsconfig.json
28
30
  * ../../packages/web-bot-auth/tsconfig.json
29
31
  * ../../packages/provider/tsconfig.json
30
32
  * ../workspace/tsconfig.json
31
33
  * ../../packages/cli/tsconfig.json
32
34
  * tsconfig.json
33
35
 
34
- 7:41:30 PM - Project '../config/tsconfig.json' is up to date because newest input '../config/src/webpack/webpack.config.ts' is older than output '../config/tsconfig.tsbuildinfo'
36
+ 4:00:44 PM - Project '../config/tsconfig.json' is up to date because newest input '../config/src/webpack/webpack.config.ts' is older than output '../config/tsconfig.tsbuildinfo'
35
37
 
36
- 7:41:30 PM - Project '../../packages/util/tsconfig.json' is up to date because newest input '../../packages/util/src/url.ts' is older than output '../../packages/util/tsconfig.tsbuildinfo'
38
+ 4:00:44 PM - Project '../../packages/util/tsconfig.json' is up to date because newest input '../../packages/util/src/url.ts' is older than output '../../packages/util/tsconfig.tsbuildinfo'
37
39
 
38
- 7:41:30 PM - Project '../../packages/locale/tsconfig.json' is up to date because newest input '../../packages/locale/src/process.ts' is older than output '../../packages/locale/tsconfig.tsbuildinfo'
40
+ 4:00:44 PM - Project '../../packages/locale/tsconfig.json' is up to date because newest input '../../packages/locale/src/process.ts' is older than output '../../packages/locale/tsconfig.tsbuildinfo'
39
41
 
40
- 7:41:30 PM - Project '../../packages/util-crypto/tsconfig.json' is up to date because newest input '../../packages/util-crypto/src/types.ts' is older than output '../../packages/util-crypto/tsconfig.tsbuildinfo'
42
+ 4:00:44 PM - Project '../../packages/util-crypto/tsconfig.json' is up to date because newest input '../../packages/util-crypto/src/types.ts' is older than output '../../packages/util-crypto/tsconfig.tsbuildinfo'
41
43
 
42
- 7:41:30 PM - Project '../../packages/types/tsconfig.json' is up to date because newest input '../../packages/types/src/types.test-d.ts' is older than output '../../packages/types/tsconfig.tsbuildinfo'
44
+ 4:00:44 PM - Project '../../packages/types/tsconfig.json' is up to date because newest input '../../packages/types/src/types.test-d.ts' is older than output '../../packages/types/tsconfig.tsbuildinfo'
43
45
 
44
- 7:41:30 PM - Project '../../packages/api/tsconfig.json' is up to date because newest input '../../packages/api/src/index.ts' is older than output '../../packages/api/tsconfig.tsbuildinfo'
46
+ 4:00:44 PM - Project '../../packages/api/tsconfig.json' is up to date because newest input '../../packages/api/src/tests/apiHarness.ts' is older than output '../../packages/api/tsconfig.tsbuildinfo'
45
47
 
46
- 7:41:30 PM - Project '../../packages/common/tsconfig.json' is up to date because newest input '../../packages/common/src/tests/utils/objectUtils.unit.test.ts' is older than output '../../packages/common/tsconfig.tsbuildinfo'
48
+ 4:00:44 PM - Project '../../packages/common/tsconfig.json' is up to date because newest input '../../packages/common/src/tests/errorSites.unit.test.ts' is older than output '../../packages/common/tsconfig.tsbuildinfo'
47
49
 
48
- 7:41:30 PM - Project '../../packages/logger/tsconfig.json' is up to date because newest input '../../packages/logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../../packages/logger/tsconfig.tsbuildinfo'
50
+ 4:00:44 PM - Project '../../packages/logger/tsconfig.json' is up to date because newest input '../../packages/logger/src/tests/loggerBrowser.unit.test.ts' is older than output '../../packages/logger/tsconfig.tsbuildinfo'
49
51
 
50
- 7:41:30 PM - Project '../../packages/dotenv/tsconfig.json' is up to date because newest input '../../packages/dotenv/src/env.ts' is older than output '../../packages/dotenv/tsconfig.tsbuildinfo'
52
+ 4:00:44 PM - Project '../../packages/dotenv/tsconfig.json' is up to date because newest input '../../packages/dotenv/src/tests/env.unit.test.ts' is older than output '../../packages/dotenv/tsconfig.tsbuildinfo'
51
53
 
52
- 7:41:30 PM - Project '../../packages/ipinfo/tsconfig.json' is up to date because newest input '../../packages/ipinfo/src/types.ts' is older than output '../../packages/ipinfo/tsconfig.tsbuildinfo'
54
+ 4:00:44 PM - Project '../../packages/ipinfo/tsconfig.json' is up to date because newest input '../../packages/ipinfo/src/IpInfoService.ts' is older than output '../../packages/ipinfo/tsconfig.tsbuildinfo'
53
55
 
54
- 7:41:30 PM - Project '../../packages/api-route/tsconfig.json' is up to date because newest input '../../packages/api-route/src/tests/apiRoute.unit.test.ts' is older than output '../../packages/api-route/tsconfig.tsbuildinfo'
56
+ 4:00:44 PM - Project '../../packages/api-route/tsconfig.json' is up to date because newest input '../../packages/api-route/src/tests/apiRoute.unit.test.ts' is older than output '../../packages/api-route/tsconfig.tsbuildinfo'
55
57
 
56
- 7:41:30 PM - Project '../../packages/redis-client/tsconfig.json' is up to date because newest input '../../packages/redis-client/src/index.ts' is older than output '../../packages/redis-client/tsconfig.tsbuildinfo'
58
+ 4:00:44 PM - Project '../../packages/redis-client/tsconfig.json' is up to date because newest input '../../packages/redis-client/src/index.ts' is older than output '../../packages/redis-client/tsconfig.tsbuildinfo'
57
59
 
58
- 7:41:30 PM - Project '../../packages/user-access-policy/tsconfig.json' is up to date because newest input '../../packages/user-access-policy/src/transformRule.ts' is older than output '../../packages/user-access-policy/tsconfig.tsbuildinfo'
60
+ 4:00:44 PM - Project '../../packages/user-access-policy/tsconfig.json' is up to date because newest input '../../packages/user-access-policy/src/transformRule.ts' is older than output '../../packages/user-access-policy/tsconfig.tsbuildinfo'
59
61
 
60
- 7:41:30 PM - Project '../../packages/types-database/tsconfig.json' is up to date because newest input '../../packages/types-database/src/index.ts' is older than output '../../packages/types-database/tsconfig.tsbuildinfo'
62
+ 4:00:44 PM - Project '../../packages/types-database/tsconfig.json' is up to date because newest input '../../packages/types-database/src/index.ts' is older than output '../../packages/types-database/tsconfig.tsbuildinfo'
61
63
 
62
- 7:41:30 PM - Project '../../packages/database/tsconfig.json' is up to date because newest input '../../packages/database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../../packages/database/tsconfig.tsbuildinfo'
64
+ 4:00:44 PM - Project '../../packages/database/tsconfig.json' is up to date because newest input '../../packages/database/src/tests/unit/captchaLabel.unit.test.ts' is older than output '../../packages/database/tsconfig.tsbuildinfo'
63
65
 
64
- 7:41:31 PM - Project '../../packages/keyring/tsconfig.json' is up to date because newest input '../../packages/keyring/src/keyring/keyring.test.ts' is older than output '../../packages/keyring/tsconfig.tsbuildinfo'
66
+ 4:00:44 PM - Project '../../packages/keyring/tsconfig.json' is up to date because newest input '../../packages/keyring/src/keyring/keyring.test.ts' is older than output '../../packages/keyring/tsconfig.tsbuildinfo'
65
67
 
66
- 7:41:31 PM - Project '../../packages/types-env/tsconfig.json' is up to date because newest input '../../packages/types-env/src/env.ts' is older than output '../../packages/types-env/tsconfig.tsbuildinfo'
68
+ 4:00:44 PM - Project '../../packages/types-env/tsconfig.json' is up to date because newest input '../../packages/types-env/src/index.ts' is older than output '../../packages/types-env/tsconfig.tsbuildinfo'
67
69
 
68
- 7:41:31 PM - Project '../../packages/env/tsconfig.json' is up to date because newest input '../../packages/env/src/tests/env.maintenance.unit.test.ts' is older than output '../../packages/env/tsconfig.tsbuildinfo'
70
+ 4:00:44 PM - Project '../../packages/env/tsconfig.json' is up to date because newest input '../../packages/env/src/env.ts' is older than output '../../packages/env/tsconfig.tsbuildinfo'
69
71
 
70
- 7:41:31 PM - Project '../../packages/api-express-router/tsconfig.json' is up to date because newest input '../../packages/api-express-router/src/errorHandler.ts' is older than output '../../packages/api-express-router/tsconfig.tsbuildinfo'
72
+ 4:00:44 PM - Project '../../packages/api-express-router/tsconfig.json' is up to date because newest input '../../packages/api-express-router/src/tests/unit/testDoubles.ts' is older than output '../../packages/api-express-router/tsconfig.tsbuildinfo'
71
73
 
72
- 7:41:31 PM - Project '../../packages/puzzle-assets/tsconfig.json' is up to date because newest input '../../packages/puzzle-assets/src/types.ts' is older than output '../../packages/puzzle-assets/tsconfig.tsbuildinfo'
74
+ 4:00:44 PM - Project '../../packages/puzzle-assets/tsconfig.json' is up to date because newest input '../../packages/puzzle-assets/src/browser.ts' is older than output '../../packages/puzzle-assets/tsconfig.tsbuildinfo'
73
75
 
74
- 7:41:31 PM - Project '../../packages/audio-assets/tsconfig.json' is up to date because newest input '../../packages/audio-assets/src/distort.ts' is older than output '../../packages/audio-assets/tsconfig.tsbuildinfo'
76
+ 4:00:44 PM - Project '../../packages/audio-assets/tsconfig.json' is up to date because newest input '../../packages/audio-assets/src/distort.ts' is older than output '../../packages/audio-assets/tsconfig.tsbuildinfo'
75
77
 
76
- 7:41:31 PM - Project '../../packages/captcha-severity/tsconfig.json' is up to date because newest input '../../packages/captcha-severity/src/index.ts' is older than output '../../packages/captcha-severity/tsconfig.tsbuildinfo'
78
+ 4:00:44 PM - Project '../../packages/captcha-severity/tsconfig.json' is up to date because newest input '../../packages/captcha-severity/src/index.test.ts' is older than output '../../packages/captcha-severity/tsconfig.tsbuildinfo'
77
79
 
78
- 7:41:31 PM - Project '../../packages/datasets/tsconfig.json' is up to date because newest input '../../packages/datasets/src/errorSites.ts' is older than output '../../packages/datasets/tsconfig.tsbuildinfo'
80
+ 4:00:44 PM - Project '../../packages/datasets/tsconfig.json' is up to date because newest input '../../packages/datasets/src/tests/mocks/data/captchas.ts' is older than output '../../packages/datasets/tsconfig.tsbuildinfo'
79
81
 
80
- 7:41:31 PM - Project '../../packages/icon-order-assets/tsconfig.json' is up to date because newest input '../../packages/icon-order-assets/src/background.ts' is older than output '../../packages/icon-order-assets/tsconfig.tsbuildinfo'
82
+ 4:00:44 PM - Project '../../packages/icon-order-assets/tsconfig.json' is up to date because newest input '../../packages/icon-order-assets/src/background.ts' is older than output '../../packages/icon-order-assets/tsconfig.tsbuildinfo'
81
83
 
82
- 7:41:31 PM - Project '../../packages/load-balancer/tsconfig.json' is up to date because newest input '../../packages/load-balancer/src/balancer.ts' is older than output '../../packages/load-balancer/tsconfig.tsbuildinfo'
84
+ 4:00:44 PM - Project '../../packages/load-balancer/tsconfig.json' is up to date because newest input '../../packages/load-balancer/src/tests/productionProviderList.unit.test.ts' is older than output '../../packages/load-balancer/tsconfig.tsbuildinfo'
83
85
 
84
- 7:41:31 PM - Project '../../packages/web-bot-auth/tsconfig.json' is up to date because newest input '../../packages/web-bot-auth/src/base64.ts' is older than output '../../packages/web-bot-auth/tsconfig.tsbuildinfo'
86
+ 4:00:44 PM - Project '../../packages/fingerprintjs/tsconfig.json' is up to date because newest input '../../packages/fingerprintjs/src/utils/browser.ts' is older than output '../../packages/fingerprintjs/tsconfig.tsbuildinfo'
85
87
 
86
- 7:41:31 PM - Project '../../packages/provider/tsconfig.json' is up to date because newest input '../../packages/provider/src/utils/devicePlatform.ts' is older than output '../../packages/provider/tsconfig.tsbuildinfo'
88
+ 4:00:44 PM - Project '../../packages/fingerprint/tsconfig.json' is up to date because newest input '../../packages/fingerprint/src/index.test.ts' is older than output '../../packages/fingerprint/tsconfig.tsbuildinfo'
87
89
 
88
- 7:41:31 PM - Project '../workspace/tsconfig.json' is up to date because newest input '../workspace/src/projectInfo.ts' is older than output '../workspace/tsconfig.tsbuildinfo'
90
+ 4:00:44 PM - Project '../../packages/web-bot-auth/tsconfig.json' is up to date because newest input '../../packages/web-bot-auth/src/base64.ts' is older than output '../../packages/web-bot-auth/tsconfig.tsbuildinfo'
89
91
 
90
- 7:41:31 PM - Project '../../packages/cli/tsconfig.json' is up to date because newest input '../../packages/cli/src/tests/bundle/bundle.integration.test.ts' is older than output '../../packages/cli/tsconfig.tsbuildinfo'
92
+ 4:00:44 PM - Project '../../packages/provider/tsconfig.json' is up to date because newest input '../../packages/provider/src/utils/devicePlatform.ts' is older than output '../../packages/provider/tsconfig.tsbuildinfo'
91
93
 
92
- 7:41:31 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
94
+ 4:00:44 PM - Project '../workspace/tsconfig.json' is up to date because newest input '../workspace/src/index.ts' is older than output '../workspace/tsconfig.tsbuildinfo'
93
95
 
94
- 7:41:31 PM - Building project '/home/runner/work/captcha/captcha/dev/scripts/tsconfig.json'...
96
+ 4:00:44 PM - Project '../../packages/cli/tsconfig.json' is up to date because newest input '../../packages/cli/src/tests/bundle/bundle.integration.test.ts' is older than output '../../packages/cli/tsconfig.tsbuildinfo'
97
+
98
+ 4:00:44 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
99
+
100
+ 4:00:44 PM - Building project '/home/runner/work/captcha/captcha/dev/scripts/tsconfig.json'...
95
101
 
@@ -29,6 +29,8 @@ ViteEsmConfig: .
29
29
  '/home/runner/work/captcha/captcha/packages/datasets/tsconfig.json',
30
30
  '/home/runner/work/captcha/captcha/packages/icon-order-assets/tsconfig.json',
31
31
  '/home/runner/work/captcha/captcha/packages/load-balancer/tsconfig.json',
32
+ '/home/runner/work/captcha/captcha/packages/fingerprint/tsconfig.json',
33
+ '/home/runner/work/captcha/captcha/packages/fingerprintjs/tsconfig.json',
32
34
  '/home/runner/work/captcha/captcha/packages/web-bot-auth/tsconfig.json'
33
35
  ]
34
36
  }
@@ -60,6 +62,8 @@ ViteEsmConfig: .
60
62
  '@prosopo/datasets',
61
63
  '@prosopo/icon-order-assets',
62
64
  '@prosopo/load-balancer',
65
+ '@prosopo/fingerprint',
66
+ '@prosopo/fingerprintjs',
63
67
  '@prosopo/web-bot-auth'
64
68
  ]
65
69
  }
@@ -87,4 +91,4 @@ dist/workspace/dist/projectInfo.js 4.71 kB │ gzip: 1.52 kB
87
91
  dist/scripts/setVersion.js 4.73 kB │ gzip: 1.58 kB
88
92
  dist/setup/setup.js 4.83 kB │ gzip: 1.66 kB
89
93
 
90
- ✓ built in 31ms
94
+ ✓ built in 66ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,82 @@
1
1
  # @prosopo/scripts
2
2
 
3
+ ## 3.1.209
4
+ ### Patch Changes
5
+
6
+ - b4235b4: Document and support self-hosting on Cloudflare's free plan, for anyone without a server that has a public IP.
7
+
8
+ A Worker on the free `workers.dev` subdomain serves the widget and forwards API calls through a Workers VPC binding to a
9
+ Cloudflare Tunnel, so the provider can run on any machine with Docker: no domain, no open ports, no certificates.
10
+
11
+ - `docker/cloudflare/worker.ts` and `wrangler.jsonc`: the Worker. It also serves a demo page at `/` that shows whether
12
+ the provider is reachable, renders the CAPTCHA and displays the response token. It sets `X-Forwarded-For` to the
13
+ visitor's address, because without it the provider sees every visitor as the tunnel and per-IP limits apply to all of
14
+ them together.
15
+ - `docker-compose.self-hosted.cloudflare.yml`: adds `cloudflared` and leaves Caddy out, since Cloudflare terminates TLS.
16
+ - `generateSelfHostedEnv.ts --cloudflare`: writes a `COMPOSE_FILE` that loads both compose files and a
17
+ `CLOUDFLARE_TUNNEL_TOKEN` to fill in.
18
+ - `SELF_HOSTING.md`: a "No server? Run it on Cloudflare's free plan" section.
19
+ - 159766a: Let a self-hosted provider run a detector you built yourself, and ship a working example built on BotD.
20
+
21
+ Until now the only detector a provider could load was ours. Its output can only be read by the closed decoder in the
22
+ provider, so a self-hosted node with any other detector had nothing to score visitors with.
23
+
24
+ **Open detector format.** A pool bundle can now be marked `format: "open-v1"`. The provider reads those bundles with a
25
+ short, documented decoder: an AES-256-GCM payload whose key is wrapped with the bundle's RSA-OAEP public key, carrying
26
+ `{ score, timestamp, userId, userAgent, headHash, d }`. The same checks apply as for our detector — the token must
27
+ match this visitor's account, user agent and page, and be under ten minutes old — and `d` reaches decision and routing
28
+ machines as `input.d`. Open bundles are only loaded when `PROSOPO_DETECTOR_OPEN_FORMAT=1`; the hosted fleet never sets
29
+ it, so nothing changes there.
30
+
31
+ **`demos/detector-botd`.** A detector built on BotD that scores automated browsers as 1 and everything else as 0, plus a
32
+ `pool` script that builds the bundles with a fresh keypair each. Writing your own detector means replacing one function;
33
+ the encryption is done for you.
34
+
35
+ **`detector_pool_set` CLI command.** Writes a pool read from stdin into the provider's pool directory. Stdin rather than a
36
+ file because the provider image runs as a non-root user and cannot read a file copied in as root.
37
+
38
+ **Self-hosted compose and image.** The image now creates its pool directory owned by the runtime user, and the
39
+ self-hosted compose file mounts a `detector_pool` volume there and turns the open format on. The compose file no longer
40
+ defaults to provider 3.8.19, which it had silently stayed on for nineteen releases: `generateSelfHostedEnv.ts` writes
41
+ the version of the checkout it runs from.
42
+
43
+ `SELF_HOSTING.md` gains a "Bring your own detector" section and now loads the widget with `type="module"`, which the
44
+ bundle has needed since it was split into chunks.
45
+
46
+ Tested end to end on a stack built from this branch: stock headless Chromium was flagged by BotD and served a puzzle,
47
+ headed Chromium passed with proof of work, the detector's signals were stored on the session, and a provider without
48
+ the flag rejected the pool.
49
+ - 5a1db28: Fix four things that broke the self-hosting guide for anyone starting from a fresh clone.
50
+
51
+ - **The `fingerprintjs` submodule used an SSH URL**, so it could only be fetched by someone with GitHub SSH keys. It is
52
+ now HTTPS. The repository is public, so nobody needs credentials for it. Without it `pnpm run build:all` fails.
53
+ - **The guide ran the env script before anything was built.** The script imports built workspace packages, so on a fresh
54
+ clone it crashed with `ERR_MODULE_NOT_FOUND`. The guide now clones with `--recurse-submodules` and runs
55
+ `pnpm run build:all` in step 1.
56
+ - **Every `docker compose exec` in the guide failed** with "no configuration file provided", because the compose file is
57
+ not named `docker-compose.yml`. `generateSelfHostedEnv.ts` now writes `COMPOSE_FILE=docker-compose.self-hosted.yml`
58
+ into `.env`, which Compose reads on its own, so plain `docker compose` commands work.
59
+ - **The provider CLI exited 0 on a command it did not have.** An older image given `detector_pool_set` did nothing and
60
+ reported success. It now fails with `Unknown command`.
61
+ - Updated dependencies [d02b3bc]
62
+ - Updated dependencies [159766a]
63
+ - Updated dependencies [5a1db28]
64
+ - @prosopo/provider@5.21.0
65
+ - @prosopo/types@5.18.0
66
+ - @prosopo/cli@3.9.0
67
+ - @prosopo/env@3.6.80
68
+ - @prosopo/common@3.3.0
69
+ - @prosopo/datasets@3.2.11
70
+ - @prosopo/keyring@2.10.11
71
+ - @prosopo/types-env@2.11.26
72
+
73
+ ## 3.1.208
74
+ ### Patch Changes
75
+
76
+ - Updated dependencies [749fe8a]
77
+ - @prosopo/provider@5.20.2
78
+ - @prosopo/cli@3.8.38
79
+
3
80
  ## 3.1.207
4
81
  ### Patch Changes
5
82
 
@@ -7,12 +7,15 @@ const logger = getLogger(parseLogLevel(process.env.PROSOPO_LOG_LEVEL || LogLevel
7
7
  const usage = `
8
8
  Generate a complete .env file for a self-hosted Procaptcha provider.
9
9
 
10
- npx tsx ./dev/scripts/src/scripts/generateSelfHostedEnv.ts --host captcha.example.com
10
+ pnpm exec tsx ./dev/scripts/src/scripts/generateSelfHostedEnv.ts --host captcha.example.com
11
11
 
12
12
  Options:
13
13
  --host <domain> Hostname clients will reach this provider on (required)
14
14
  --output <path> Where to write (default: .env)
15
15
  --force Overwrite the output file if it already exists
16
+ --cloudflare Run behind a Cloudflare Tunnel instead of Caddy. Adds the
17
+ cloudflared service and a CLOUDFLARE_TUNNEL_TOKEN to fill in.
18
+ --host is then the Worker's workers.dev hostname.
16
19
  `;
17
20
  const parseArgs = (argv) => {
18
21
  const flagValue = (flag) => {
@@ -33,10 +36,22 @@ const parseArgs = (argv) => {
33
36
  host,
34
37
  output: flagValue("--output") ?? ".env",
35
38
  force: argv.includes("--force"),
39
+ cloudflare: argv.includes("--cloudflare"),
36
40
  };
37
41
  };
38
42
  const generatePassword = () => randomBytes(24).toString("base64url");
39
- const buildEnvFile = async (host) => {
43
+ const composeFileSection = (cloudflare) => cloudflare
44
+ ? `# Lets every docker compose command find both compose files without -f.
45
+ # The second runs cloudflared and leaves Caddy out.
46
+ COMPOSE_FILE=docker-compose.self-hosted.yml:docker-compose.self-hosted.cloudflare.yml
47
+
48
+ # The token from your tunnel's page in the Cloudflare dashboard.
49
+ CLOUDFLARE_TUNNEL_TOKEN=`
50
+ : `# Lets every docker compose command find docker-compose.self-hosted.yml
51
+ # without -f.
52
+ COMPOSE_FILE=docker-compose.self-hosted.yml`;
53
+ const buildEnvFile = async (host, cloudflare) => {
54
+ const providerImageVersion = readProviderImageVersion();
40
55
  const [providerMnemonic, providerAddress] = await generateMnemonic();
41
56
  const [siteKeyMnemonic, siteKeyAddress] = await generateMnemonic();
42
57
  const databasePassword = generatePassword();
@@ -52,6 +67,12 @@ NODE_ENV=production
52
67
  PROSOPO_DEFAULT_ENVIRONMENT=production
53
68
  PROSOPO_LOG_LEVEL=info
54
69
 
70
+ ${composeFileSection(cloudflare)}
71
+
72
+ # The provider release this checkout documents. Change it when you pull a
73
+ # newer checkout, so the image and the instructions you follow stay in step.
74
+ PROSOPO_PROVIDER_IMAGE_VERSION=${providerImageVersion}
75
+
55
76
  # Read by the provider as its own host identity, and by Caddy as the
56
77
  # certificate subject.
57
78
  CADDY_DOMAIN=${host}
@@ -103,13 +124,21 @@ MAXMIND_CITY_DB_PATH=./GeoLite2-City.mmdb
103
124
  MAXMIND_ASN_DB_PATH=./GeoLite2-ASN.mmdb
104
125
  `;
105
126
  };
127
+ const readProviderImageVersion = () => {
128
+ const manifestPath = path.resolve(import.meta.dirname, "../../../../packages/cli/package.json");
129
+ const { version } = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
130
+ if (typeof version !== "string") {
131
+ throw new Error(`No version in ${manifestPath}`);
132
+ }
133
+ return version;
134
+ };
106
135
  const main = async () => {
107
136
  const args = parseArgs(process.argv.slice(2));
108
137
  const outputPath = path.resolve(process.cwd(), args.output);
109
138
  if (fs.existsSync(outputPath) && !args.force) {
110
139
  throw new Error(`${outputPath} already exists. Pass --force to overwrite it, but note that this regenerates every key and password: an existing provider would lose its identity and its database credentials.`);
111
140
  }
112
- const contents = await buildEnvFile(args.host);
141
+ const contents = await buildEnvFile(args.host, args.cloudflare);
113
142
  fs.writeFileSync(outputPath, contents, { mode: 0o600 });
114
143
  logger.info(() => ({
115
144
  data: { outputPath },
@@ -1 +1 @@
1
- {"version":3,"file":"generateSelfHostedEnv.js","sourceRoot":"","sources":["../../src/scripts/generateSelfHostedEnv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateSelfHostedEnv.js","sourceRoot":"","sources":["../../src/scripts/generateSelfHostedEnv.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/scripts",
3
- "version": "3.1.207",
3
+ "version": "3.1.209",
4
4
  "description": "Dev scripts for working with prosopo packages",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,16 +21,16 @@
21
21
  "@iarna/toml": "2.2.5",
22
22
  "@polkadot/util": "14.0.3",
23
23
  "@polkadot/util-crypto": "14.0.3",
24
- "@prosopo/cli": "3.8.37",
24
+ "@prosopo/cli": "3.9.0",
25
25
  "@prosopo/common": "3.3.0",
26
26
  "@prosopo/logger": "2.1.5",
27
- "@prosopo/datasets": "3.2.10",
27
+ "@prosopo/datasets": "3.2.11",
28
28
  "@prosopo/dotenv": "3.0.62",
29
- "@prosopo/env": "3.6.79",
30
- "@prosopo/keyring": "2.10.10",
31
- "@prosopo/provider": "5.20.1",
32
- "@prosopo/types": "5.17.1",
33
- "@prosopo/types-env": "2.11.25",
29
+ "@prosopo/env": "3.6.80",
30
+ "@prosopo/keyring": "2.10.11",
31
+ "@prosopo/provider": "5.21.0",
32
+ "@prosopo/types": "5.18.0",
33
+ "@prosopo/types-env": "2.11.26",
34
34
  "@prosopo/util": "3.3.16",
35
35
  "@prosopo/util-crypto": "13.6.1",
36
36
  "@prosopo/workspace": "3.2.4",