@prosopo/cli 3.10.3 → 3.10.4

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 (48) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +7 -7
  2. package/.turbo/turbo-build$colon$esm.log +5 -5
  3. package/.turbo/turbo-build$colon$tsc.log +33 -33
  4. package/CHANGELOG.md +41 -0
  5. package/Dockerfile +3 -2
  6. package/dist/bundle/decodePayload.js +1 -1
  7. package/dist/bundle/prosopo-native-bundle-payload.node +0 -0
  8. package/dist/bundle/provider.cli.bundle.js +10366 -10043
  9. package/dist/cjs/commands/ensureIndexes.cjs +1 -3
  10. package/dist/cjs/files.cjs +7 -1
  11. package/dist/cjs/prosopo.config.cjs +18 -2
  12. package/dist/cjs/start.cjs +1 -4
  13. package/dist/esm/commands/ensureIndexes.js +1 -3
  14. package/dist/esm/files.js +7 -1
  15. package/dist/esm/prosopo.config.js +18 -3
  16. package/dist/esm/start.js +1 -4
  17. package/dist/tsc/commands/ensureIndexes.d.ts.map +1 -1
  18. package/dist/tsc/commands/ensureIndexes.js +0 -3
  19. package/dist/tsc/commands/ensureIndexes.js.map +1 -1
  20. package/dist/tsc/files.d.ts.map +1 -1
  21. package/dist/tsc/files.js +7 -1
  22. package/dist/tsc/files.js.map +1 -1
  23. package/dist/tsc/prosopo.config.d.ts +2 -0
  24. package/dist/tsc/prosopo.config.d.ts.map +1 -1
  25. package/dist/tsc/prosopo.config.js +10 -6
  26. package/dist/tsc/prosopo.config.js.map +1 -1
  27. package/dist/tsc/start.d.ts.map +1 -1
  28. package/dist/tsc/start.js +1 -6
  29. package/dist/tsc/start.js.map +1 -1
  30. package/dist/tsc/tests/files.unit.test.d.ts +2 -0
  31. package/dist/tsc/tests/files.unit.test.d.ts.map +1 -0
  32. package/dist/tsc/tests/files.unit.test.js +45 -0
  33. package/dist/tsc/tests/files.unit.test.js.map +1 -0
  34. package/dist/tsc/tests/integerFromEnv.unit.test.d.ts +2 -0
  35. package/dist/tsc/tests/integerFromEnv.unit.test.d.ts.map +1 -0
  36. package/dist/tsc/tests/integerFromEnv.unit.test.js +21 -0
  37. package/dist/tsc/tests/integerFromEnv.unit.test.js.map +1 -0
  38. package/dist/types/commands/ensureIndexes.d.ts.map +1 -1
  39. package/dist/types/files.d.ts.map +1 -1
  40. package/dist/types/prosopo.config.d.ts +2 -0
  41. package/dist/types/prosopo.config.d.ts.map +1 -1
  42. package/dist/types/start.d.ts.map +1 -1
  43. package/dist/types/tests/files.unit.test.d.ts +2 -0
  44. package/dist/types/tests/files.unit.test.d.ts.map +1 -0
  45. package/dist/types/tests/integerFromEnv.unit.test.d.ts +2 -0
  46. package/dist/types/tests/integerFromEnv.unit.test.d.ts.map +1 -0
  47. package/package.json +10 -10
  48. package/vite.config.ts +8 -0
@@ -11,9 +11,7 @@ var ensureIndexes_default = (pair, config, cmdArgs) => {
11
11
  try {
12
12
  const env = new _prosopo_env.ProviderEnvironment(config, pair);
13
13
  await env.isReady();
14
- const tasks = new _prosopo_provider.Tasks(env);
15
- if (!env.config.mongoCaptchaUri) throw new Error("mongoCaptchaUri not set in config");
16
- await tasks.db.ensureIndexes();
14
+ await new _prosopo_provider.Tasks(env).db.ensureIndexes();
17
15
  } catch (err) {
18
16
  logger.error(() => ({ err }));
19
17
  }
@@ -3,6 +3,7 @@ let node_fs = require("node:fs");
3
3
  node_fs = require_runtime.__toESM(node_fs, 1);
4
4
  let node_stream = require("node:stream");
5
5
  let _prosopo_common = require("@prosopo/common");
6
+ let _prosopo_util = require("@prosopo/util");
6
7
  //#region src/files.ts
7
8
  function loadJSONFile(filePath) {
8
9
  try {
@@ -19,6 +20,11 @@ function loadJSONFile(filePath) {
19
20
  }
20
21
  function writeJSONFile(filePath, jsonData) {
21
22
  return new Promise((resolve, reject) => {
23
+ const json = (0, _prosopo_util.stringifyJson)(jsonData);
24
+ if (!json.ok) {
25
+ reject(json.error);
26
+ return;
27
+ }
22
28
  const writeStream = (0, node_fs.createWriteStream)(filePath);
23
29
  writeStream.setDefaultEncoding("utf-8");
24
30
  writeStream.on("finish", () => {
@@ -27,7 +33,7 @@ function writeJSONFile(filePath, jsonData) {
27
33
  writeStream.on("error", (err) => {
28
34
  reject(err);
29
35
  });
30
- node_stream.Readable.from(JSON.stringify(jsonData)).pipe(writeStream);
36
+ node_stream.Readable.from(json.value).pipe(writeStream);
31
37
  });
32
38
  }
33
39
  async function readFile(filePath) {
@@ -2,6 +2,7 @@ const require_RateLimiter = require("./RateLimiter.cjs");
2
2
  const require_process_env = require("./process.env.cjs");
3
3
  let _prosopo_logger = require("@prosopo/logger");
4
4
  let _prosopo_types = require("@prosopo/types");
5
+ let _prosopo_util = require("@prosopo/util");
5
6
  //#region src/prosopo.config.ts
6
7
  function getMongoURI() {
7
8
  const protocol = process.env.PROSOPO_DATABASE_PROTOCOL || "mongodb";
@@ -38,6 +39,17 @@ var getSpamEmailDomainsUrls = () => {
38
39
  return;
39
40
  }
40
41
  };
42
+ /**
43
+ * An integer setting from the environment, or `fallback` when unset. A set
44
+ * but malformed value throws: parseInt would read "80a" as 80 and "abc" as
45
+ * NaN, and a provider listening on the wrong port or trusting the wrong
46
+ * number of proxies is worse than one that refuses to start.
47
+ */
48
+ var integerFromEnv = (name, fallback, bounds = {}) => {
49
+ const raw = process.env[name];
50
+ if (raw === void 0 || raw === "") return fallback;
51
+ return (0, _prosopo_util.parseInteger)(raw, bounds).expect(`environment variable ${name}`);
52
+ };
41
53
  var getHost = () => {
42
54
  return process.env.CADDY_DOMAIN || {}.env?.VITE_CADDY_DOMAIN;
43
55
  };
@@ -73,7 +85,10 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
73
85
  },
74
86
  server: {
75
87
  baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
76
- port: process.env.PROSOPO_API_PORT ? Number.parseInt(process.env.PROSOPO_API_PORT) : 9229
88
+ port: integerFromEnv("PROSOPO_API_PORT", 9229, {
89
+ min: 0,
90
+ max: 65535
91
+ })
77
92
  },
78
93
  captchaSolutions: captchaSolutionsConfig,
79
94
  captchas: captchaServeConfig,
@@ -90,7 +105,7 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
90
105
  password: process.env.REDIS_CONNECTION_PASSWORD || ""
91
106
  },
92
107
  rateLimits: require_RateLimiter.getRateLimitConfig(),
93
- proxyCount: process.env.PROSOPO_PROXY_COUNT ? Number.parseInt(process.env.PROSOPO_PROXY_COUNT) : 0,
108
+ proxyCount: integerFromEnv("PROSOPO_PROXY_COUNT", 0, { min: 0 }),
94
109
  scheduledTasks: {
95
110
  captchaScheduler: { schedule: process.env.CAPTCHA_STORAGE_SCHEDULE },
96
111
  clientListScheduler: { schedule: process.env.CLIENT_LIST_SCHEDULE },
@@ -115,3 +130,4 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
115
130
  }
116
131
  //#endregion
117
132
  exports.default = getConfig;
133
+ exports.integerFromEnv = integerFromEnv;
@@ -18,10 +18,7 @@ async function start(env, admin, port) {
18
18
  let authAccount;
19
19
  if (config.authAccount) authAccount = (0, _prosopo_keyring.getPair)(void 0, config.authAccount.address);
20
20
  env = new _prosopo_env.ProviderEnvironment(config, pair, authAccount);
21
- } else env.logger.debug(() => ({
22
- msg: "Env already defined",
23
- data: { config: env?.config }
24
- }));
21
+ } else env.logger.debug(() => ({ msg: "Env already defined" }));
25
22
  await env.isReady();
26
23
  env.cleanup();
27
24
  const maintenanceMode = process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
@@ -11,9 +11,7 @@ var ensureIndexes_default = (pair, config, cmdArgs) => {
11
11
  try {
12
12
  const env = new ProviderEnvironment(config, pair);
13
13
  await env.isReady();
14
- const tasks = new Tasks(env);
15
- if (!env.config.mongoCaptchaUri) throw new Error("mongoCaptchaUri not set in config");
16
- await tasks.db.ensureIndexes();
14
+ await new Tasks(env).db.ensureIndexes();
17
15
  } catch (err) {
18
16
  logger.error(() => ({ err }));
19
17
  }
package/dist/esm/files.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import fs, { createWriteStream } from "node:fs";
2
2
  import { Readable } from "node:stream";
3
3
  import { ProsopoError } from "@prosopo/common";
4
+ import { stringifyJson } from "@prosopo/util";
4
5
  //#region src/files.ts
5
6
  function loadJSONFile(filePath) {
6
7
  try {
@@ -17,6 +18,11 @@ function loadJSONFile(filePath) {
17
18
  }
18
19
  function writeJSONFile(filePath, jsonData) {
19
20
  return new Promise((resolve, reject) => {
21
+ const json = stringifyJson(jsonData);
22
+ if (!json.ok) {
23
+ reject(json.error);
24
+ return;
25
+ }
20
26
  const writeStream = createWriteStream(filePath);
21
27
  writeStream.setDefaultEncoding("utf-8");
22
28
  writeStream.on("finish", () => {
@@ -25,7 +31,7 @@ function writeJSONFile(filePath, jsonData) {
25
31
  writeStream.on("error", (err) => {
26
32
  reject(err);
27
33
  });
28
- Readable.from(JSON.stringify(jsonData)).pipe(writeStream);
34
+ Readable.from(json.value).pipe(writeStream);
29
35
  });
30
36
  }
31
37
  async function readFile(filePath) {
@@ -2,6 +2,7 @@ import { getRateLimitConfig } from "./RateLimiter.js";
2
2
  import { getAddress, getPassword, getSecret } from "./process.env.js";
3
3
  import { parseLogLevel } from "@prosopo/logger";
4
4
  import { DatabaseTypes, EnvironmentTypesSchema, FrictionlessPenalties, ProsopoConfigSchema } from "@prosopo/types";
5
+ import { parseInteger } from "@prosopo/util";
5
6
  //#region src/prosopo.config.ts
6
7
  function getMongoURI() {
7
8
  const protocol = process.env.PROSOPO_DATABASE_PROTOCOL || "mongodb";
@@ -38,6 +39,17 @@ var getSpamEmailDomainsUrls = () => {
38
39
  return;
39
40
  }
40
41
  };
42
+ /**
43
+ * An integer setting from the environment, or `fallback` when unset. A set
44
+ * but malformed value throws: parseInt would read "80a" as 80 and "abc" as
45
+ * NaN, and a provider listening on the wrong port or trusting the wrong
46
+ * number of proxies is worse than one that refuses to start.
47
+ */
48
+ var integerFromEnv = (name, fallback, bounds = {}) => {
49
+ const raw = process.env[name];
50
+ if (raw === void 0 || raw === "") return fallback;
51
+ return parseInteger(raw, bounds).expect(`environment variable ${name}`);
52
+ };
41
53
  var getHost = () => {
42
54
  const importMeta = import.meta;
43
55
  return process.env.CADDY_DOMAIN || importMeta.env?.VITE_CADDY_DOMAIN;
@@ -74,7 +86,10 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
74
86
  },
75
87
  server: {
76
88
  baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
77
- port: process.env.PROSOPO_API_PORT ? Number.parseInt(process.env.PROSOPO_API_PORT) : 9229
89
+ port: integerFromEnv("PROSOPO_API_PORT", 9229, {
90
+ min: 0,
91
+ max: 65535
92
+ })
78
93
  },
79
94
  captchaSolutions: captchaSolutionsConfig,
80
95
  captchas: captchaServeConfig,
@@ -91,7 +106,7 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
91
106
  password: process.env.REDIS_CONNECTION_PASSWORD || ""
92
107
  },
93
108
  rateLimits: getRateLimitConfig(),
94
- proxyCount: process.env.PROSOPO_PROXY_COUNT ? Number.parseInt(process.env.PROSOPO_PROXY_COUNT) : 0,
109
+ proxyCount: integerFromEnv("PROSOPO_PROXY_COUNT", 0, { min: 0 }),
95
110
  scheduledTasks: {
96
111
  captchaScheduler: { schedule: process.env.CAPTCHA_STORAGE_SCHEDULE },
97
112
  clientListScheduler: { schedule: process.env.CLIENT_LIST_SCHEDULE },
@@ -115,4 +130,4 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
115
130
  });
116
131
  }
117
132
  //#endregion
118
- export { getConfig as default };
133
+ export { getConfig as default, integerFromEnv };
package/dist/esm/start.js CHANGED
@@ -18,10 +18,7 @@ async function start(env, admin, port) {
18
18
  let authAccount;
19
19
  if (config.authAccount) authAccount = getPair(void 0, config.authAccount.address);
20
20
  env = new ProviderEnvironment(config, pair, authAccount);
21
- } else env.logger.debug(() => ({
22
- msg: "Env already defined",
23
- data: { config: env?.config }
24
- }));
21
+ } else env.logger.debug(() => ({ msg: "Env already defined" }));
25
22
  await env.isReady();
26
23
  env.cleanup();
27
24
  const maintenanceMode = process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
@@ -1 +1 @@
1
- {"version":3,"file":"ensureIndexes.d.ts","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBA0BE"}
1
+ {"version":3,"file":"ensureIndexes.d.ts","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBAuBE"}
@@ -11,9 +11,6 @@ export default (pair, config, cmdArgs) => {
11
11
  const env = new ProviderEnvironment(config, pair);
12
12
  await env.isReady();
13
13
  const tasks = new Tasks(env);
14
- if (!env.config.mongoCaptchaUri) {
15
- throw new Error("mongoCaptchaUri not set in config");
16
- }
17
14
  await tasks.db.ensureIndexes();
18
15
  }
19
16
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"ensureIndexes.js","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,eAAe,CACd,IAAiB,EACjB,MAA2B,EAC3B,OAA6B,EAC5B,EAAE;IACH,MAAM,MAAM,GACX,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAExE,OAAO;QACN,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,sCAAsC;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,WAAW,EAAE,EAAE;KACf,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"ensureIndexes.js","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,eAAe,CACd,IAAiB,EACjB,MAA2B,EAC3B,OAA6B,EAC5B,EAAE;IACH,MAAM,MAAM,GACX,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAExE,OAAO;QACN,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,sCAAsC;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,WAAW,EAAE,EAAE;KACf,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAiBA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,OAY5C;AAED,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAoBjC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAkBA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,OAY5C;AAED,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBA2BjC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
package/dist/tsc/files.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import fs, { createWriteStream } from "node:fs";
2
2
  import { Readable } from "node:stream";
3
3
  import { ProsopoError } from "@prosopo/common";
4
+ import { stringifyJson } from "@prosopo/util";
4
5
  export function loadJSONFile(filePath) {
5
6
  try {
6
7
  return JSON.parse(fs.readFileSync(filePath, "utf8"));
@@ -17,6 +18,11 @@ export function loadJSONFile(filePath) {
17
18
  }
18
19
  export function writeJSONFile(filePath, jsonData) {
19
20
  return new Promise((resolve, reject) => {
21
+ const json = stringifyJson(jsonData);
22
+ if (!json.ok) {
23
+ reject(json.error);
24
+ return;
25
+ }
20
26
  const writeStream = createWriteStream(filePath);
21
27
  writeStream.setDefaultEncoding("utf-8");
22
28
  writeStream.on("finish", () => {
@@ -25,7 +31,7 @@ export function writeJSONFile(filePath, jsonData) {
25
31
  writeStream.on("error", (err) => {
26
32
  reject(err);
27
33
  });
28
- const readable = Readable.from(JSON.stringify(jsonData));
34
+ const readable = Readable.from(json.value);
29
35
  readable.pipe(writeStream);
30
36
  });
31
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAoB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAcvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,0BAA0B;YACnC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,EAAE,QAAQ,EAAE;SACrB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,QAAgB,EAChB,QAAiC;IAEjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,WAAW,GAAgB,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE7D,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAExC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACnC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,CAAC,IAAc,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAoB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAcvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,0BAA0B;YACnC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,EAAE,QAAQ,EAAE;SACrB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,QAAgB,EAChB,QAAiC;IAEjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAGtC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QACD,MAAM,WAAW,GAAgB,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE7D,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAExC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACnC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,CAAC,IAAc,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import { type ProsopoCaptchaCountConfigSchemaInput, type ProsopoCaptchaSolutionConfigSchema, type ProsopoConfigOutput } from "@prosopo/types";
2
+ import { type NumberBounds } from "@prosopo/util";
3
+ export declare const integerFromEnv: (name: string, fallback: number, bounds?: NumberBounds) => number;
2
4
  export default function getConfig(captchaSolutionsConfig?: typeof ProsopoCaptchaSolutionConfigSchema, captchaServeConfig?: ProsopoCaptchaCountConfigSchemaInput, who?: string, admin?: string): ProsopoConfigOutput;
3
5
  //# sourceMappingURL=prosopo.config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosopo.config.d.ts","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"AAeA,OAAO,EAIN,KAAK,oCAAoC,EACzC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAC;AAiExB,MAAM,CAAC,OAAO,UAAU,SAAS,CAChC,sBAAsB,CAAC,EAAE,OAAO,kCAAkC,EAClE,kBAAkB,CAAC,EAAE,oCAAoC,EACzD,GAAG,SAAa,EAChB,KAAK,SAAU,GACb,mBAAmB,CAyFrB"}
1
+ {"version":3,"file":"prosopo.config.d.ts","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"AAeA,OAAO,EAIN,KAAK,oCAAoC,EACzC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,eAAe,CAAC;AAkEhE,eAAO,MAAM,cAAc,SACpB,MAAM,YACF,MAAM,WACR,YAAY,KAClB,MAMF,CAAC;AAOF,MAAM,CAAC,OAAO,UAAU,SAAS,CAChC,sBAAsB,CAAC,EAAE,OAAO,kCAAkC,EAClE,kBAAkB,CAAC,EAAE,oCAAoC,EACzD,GAAG,SAAa,EAChB,KAAK,SAAU,GACb,mBAAmB,CAqFrB"}
@@ -1,5 +1,6 @@
1
1
  import { parseLogLevel } from "@prosopo/logger";
2
2
  import { DatabaseTypes, EnvironmentTypesSchema, FrictionlessPenalties, ProsopoConfigSchema, } from "@prosopo/types";
3
+ import { parseInteger } from "@prosopo/util";
3
4
  import { getRateLimitConfig } from "./RateLimiter.js";
4
5
  import { getAddress, getPassword, getSecret } from "./process.env.js";
5
6
  function getMongoURI() {
@@ -55,6 +56,13 @@ const getSpamEmailDomainsUrls = () => {
55
56
  return undefined;
56
57
  }
57
58
  };
59
+ export const integerFromEnv = (name, fallback, bounds = {}) => {
60
+ const raw = process.env[name];
61
+ if (raw === undefined || raw === "") {
62
+ return fallback;
63
+ }
64
+ return parseInteger(raw, bounds).expect(`environment variable ${name}`);
65
+ };
58
66
  const getHost = () => {
59
67
  const importMeta = import.meta;
60
68
  return process.env.CADDY_DOMAIN || importMeta.env?.VITE_CADDY_DOMAIN;
@@ -93,9 +101,7 @@ export default function getConfig(captchaSolutionsConfig, captchaServeConfig, wh
93
101
  },
94
102
  server: {
95
103
  baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
96
- port: process.env.PROSOPO_API_PORT
97
- ? Number.parseInt(process.env.PROSOPO_API_PORT)
98
- : 9229,
104
+ port: integerFromEnv("PROSOPO_API_PORT", 9229, { min: 0, max: 65535 }),
99
105
  },
100
106
  captchaSolutions: captchaSolutionsConfig,
101
107
  captchas: captchaServeConfig,
@@ -112,9 +118,7 @@ export default function getConfig(captchaSolutionsConfig, captchaServeConfig, wh
112
118
  password: process.env.REDIS_CONNECTION_PASSWORD || "",
113
119
  },
114
120
  rateLimits: getRateLimitConfig(),
115
- proxyCount: process.env.PROSOPO_PROXY_COUNT
116
- ? Number.parseInt(process.env.PROSOPO_PROXY_COUNT)
117
- : 0,
121
+ proxyCount: integerFromEnv("PROSOPO_PROXY_COUNT", 0, { min: 0 }),
118
122
  scheduledTasks: {
119
123
  captchaScheduler: {
120
124
  schedule: process.env.CAPTCHA_STORAGE_SCHEDULE,
@@ -1 +1 @@
1
- {"version":3,"file":"prosopo.config.js","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prosopo.config.js","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAanD,wBAAsB,KAAK,CAC1B,GAAG,CAAC,EAAE,mBAAmB,EACzB,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,iCAyFb"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAanD,wBAAsB,KAAK,CAC1B,GAAG,CAAC,EAAE,mBAAmB,EACzB,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,iCAoFb"}
package/dist/tsc/start.js CHANGED
@@ -21,12 +21,7 @@ export async function start(env, admin, port) {
21
21
  env = new ProviderEnvironment(config, pair, authAccount);
22
22
  }
23
23
  else {
24
- env.logger.debug(() => ({
25
- msg: "Env already defined",
26
- data: {
27
- config: env?.config,
28
- },
29
- }));
24
+ env.logger.debug(() => ({ msg: "Env already defined" }));
30
25
  }
31
26
  await env.isReady();
32
27
  env.cleanup();
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=files.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/files.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { loadJSONFile, writeJSONFile } from "../files.js";
6
+ describe("writeJSONFile", () => {
7
+ let dir;
8
+ beforeEach(() => {
9
+ dir = fs.mkdtempSync(path.join(os.tmpdir(), "cli-files-"));
10
+ });
11
+ afterEach(() => {
12
+ fs.rmSync(dir, { recursive: true, force: true });
13
+ });
14
+ it("round-trips through loadJSONFile", async () => {
15
+ const file = path.join(dir, "out.json");
16
+ await writeJSONFile(file, { a: [1, "b"] });
17
+ expect(loadJSONFile(file)).toEqual({ a: [1, "b"] });
18
+ });
19
+ it("writes bigints as decimal strings instead of throwing", async () => {
20
+ const file = path.join(dir, "big.json");
21
+ await writeJSONFile(file, { n: 12345678901234567890n });
22
+ expect(loadJSONFile(file)).toEqual({ n: "12345678901234567890" });
23
+ });
24
+ it("rejects a cycle without creating the file", async () => {
25
+ const file = path.join(dir, "cyclic.json");
26
+ const cyclic = {};
27
+ cyclic.self = cyclic;
28
+ await expect(writeJSONFile(file, cyclic)).rejects.toThrow(/stringify/);
29
+ expect(fs.existsSync(file)).toBe(false);
30
+ });
31
+ });
32
+ describe("loadJSONFile", () => {
33
+ it("throws a FILE_ERROR for invalid JSON", () => {
34
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "cli-files-"));
35
+ try {
36
+ const file = path.join(dir, "bad.json");
37
+ fs.writeFileSync(file, "{not json");
38
+ expect(() => loadJSONFile(file)).toThrow(expect.objectContaining({ code: "FILE_ERROR" }));
39
+ }
40
+ finally {
41
+ fs.rmSync(dir, { recursive: true, force: true });
42
+ }
43
+ });
44
+ });
45
+ //# sourceMappingURL=files.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.unit.test.js","sourceRoot":"","sources":["../../../src/tests/files.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integerFromEnv.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integerFromEnv.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integerFromEnv.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { integerFromEnv } from "../prosopo.config.js";
3
+ const NAME = "PROSOPO_TEST_INTEGER_FROM_ENV";
4
+ describe("integerFromEnv", () => {
5
+ afterEach(() => {
6
+ vi.unstubAllEnvs();
7
+ });
8
+ it.each([undefined, ""])("returns the fallback when the value is %j", (v) => {
9
+ vi.stubEnv(NAME, v);
10
+ expect(integerFromEnv(NAME, 9229)).toBe(9229);
11
+ });
12
+ it("reads a whole integer", () => {
13
+ vi.stubEnv(NAME, "8080");
14
+ expect(integerFromEnv(NAME, 9229, { min: 0, max: 65535 })).toBe(8080);
15
+ });
16
+ it.each(["80a", "abc", "1.5", "70000", "-1"])("throws for %j instead of starting with a partial or NaN value", (v) => {
17
+ vi.stubEnv(NAME, v);
18
+ expect(() => integerFromEnv(NAME, 9229, { min: 0, max: 65535 })).toThrow(NAME);
19
+ });
20
+ });
21
+ //# sourceMappingURL=integerFromEnv.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integerFromEnv.unit.test.js","sourceRoot":"","sources":["../../../src/tests/integerFromEnv.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAE7C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC/B,SAAS,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3E,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAC5C,+DAA+D,EAC/D,CAAC,CAAC,EAAE,EAAE;QACL,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CACvE,IAAI,CACJ,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ensureIndexes.d.ts","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBA0BE"}
1
+ {"version":3,"file":"ensureIndexes.d.ts","sourceRoot":"","sources":["../../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAeA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBAuBE"}
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAiBA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,OAY5C;AAED,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAoBjC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAkBA,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,OAY5C;AAED,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBA2BjC;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
@@ -1,3 +1,5 @@
1
1
  import { type ProsopoCaptchaCountConfigSchemaInput, type ProsopoCaptchaSolutionConfigSchema, type ProsopoConfigOutput } from "@prosopo/types";
2
+ import { type NumberBounds } from "@prosopo/util";
3
+ export declare const integerFromEnv: (name: string, fallback: number, bounds?: NumberBounds) => number;
2
4
  export default function getConfig(captchaSolutionsConfig?: typeof ProsopoCaptchaSolutionConfigSchema, captchaServeConfig?: ProsopoCaptchaCountConfigSchemaInput, who?: string, admin?: string): ProsopoConfigOutput;
3
5
  //# sourceMappingURL=prosopo.config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosopo.config.d.ts","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"AAeA,OAAO,EAIN,KAAK,oCAAoC,EACzC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAC;AAiExB,MAAM,CAAC,OAAO,UAAU,SAAS,CAChC,sBAAsB,CAAC,EAAE,OAAO,kCAAkC,EAClE,kBAAkB,CAAC,EAAE,oCAAoC,EACzD,GAAG,SAAa,EAChB,KAAK,SAAU,GACb,mBAAmB,CAyFrB"}
1
+ {"version":3,"file":"prosopo.config.d.ts","sourceRoot":"","sources":["../../src/prosopo.config.ts"],"names":[],"mappings":"AAeA,OAAO,EAIN,KAAK,oCAAoC,EACzC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,eAAe,CAAC;AAkEhE,eAAO,MAAM,cAAc,SACpB,MAAM,YACF,MAAM,WACR,YAAY,KAClB,MAMF,CAAC;AAOF,MAAM,CAAC,OAAO,UAAU,SAAS,CAChC,sBAAsB,CAAC,EAAE,OAAO,kCAAkC,EAClE,kBAAkB,CAAC,EAAE,oCAAoC,EACzD,GAAG,SAAa,EAChB,KAAK,SAAU,GACb,mBAAmB,CAqFrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAanD,wBAAsB,KAAK,CAC1B,GAAG,CAAC,EAAE,mBAAmB,EACzB,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,iCAyFb"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAanD,wBAAsB,KAAK,CAC1B,GAAG,CAAC,EAAE,mBAAmB,EACzB,KAAK,CAAC,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,MAAM,iCAoFb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=files.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/files.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integerFromEnv.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integerFromEnv.unit.test.d.ts","sourceRoot":"","sources":["../../../src/tests/integerFromEnv.unit.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/cli",
3
- "version": "3.10.3",
3
+ "version": "3.10.4",
4
4
  "description": "CLI for Prosopo Provider",
5
5
  "main": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -17,16 +17,16 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@polkadot/types-codec": "17.0.2",
20
- "@prosopo/api": "4.8.6",
20
+ "@prosopo/api": "4.8.7",
21
21
  "@prosopo/common": "3.3.2",
22
- "@prosopo/logger": "2.1.7",
23
- "@prosopo/dotenv": "3.0.64",
24
- "@prosopo/env": "3.6.88",
25
- "@prosopo/keyring": "2.10.19",
26
- "@prosopo/locale": "3.13.2",
27
- "@prosopo/provider": "5.26.1",
28
- "@prosopo/types": "5.23.1",
29
- "@prosopo/util": "3.4.0",
22
+ "@prosopo/logger": "2.1.8",
23
+ "@prosopo/dotenv": "3.0.65",
24
+ "@prosopo/env": "3.6.89",
25
+ "@prosopo/keyring": "2.10.20",
26
+ "@prosopo/locale": "3.14.0",
27
+ "@prosopo/provider": "5.26.2",
28
+ "@prosopo/types": "5.24.0",
29
+ "@prosopo/util": "3.5.0",
30
30
  "@prosopo/workspace": "3.2.6",
31
31
  "cron-parser": "5.10.2",
32
32
  "dotenv": "18.0.8",
package/vite.config.ts CHANGED
@@ -58,6 +58,14 @@ const nativeBinaryPaths = [
58
58
  ),
59
59
  dest: "prosopo-native-puzzle.node",
60
60
  },
61
+ // Published from Protect rather than built here. The obfuscated
62
+ // decodePayload.js loads it from beside itself under this name.
63
+ {
64
+ src: nativeRequire.resolve(
65
+ "@prosopo/native-bundle-payload/dist/native/prosopo-native-bundle-payload.linux-x64-gnu.node",
66
+ ),
67
+ dest: "prosopo-native-bundle-payload.node",
68
+ },
61
69
  ];
62
70
  // The obfuscated decoders are loaded by URL at runtime, not by import, so a
63
71
  // decoder worker can load the same file the main thread would — a bundled