@prosopo/client-example-server 2.7.122 → 2.7.124

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 (68) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +15 -31
  2. package/.turbo/turbo-build$colon$tsc.log +21 -21
  3. package/.turbo/turbo-build.log +16 -31
  4. package/CHANGELOG.md +35 -0
  5. package/dist/_virtual/_rolldown/runtime.js +3 -0
  6. package/dist/app.d.ts +15 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +122 -93
  9. package/dist/app.js.map +1 -1
  10. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  11. package/dist/cjs/app.cjs +148 -106
  12. package/dist/cjs/controllers/auth.cjs +180 -244
  13. package/dist/cjs/models/user.cjs +21 -22
  14. package/dist/cjs/routes/routes.cjs +21 -24
  15. package/dist/cjs/utils/connection.cjs +20 -23
  16. package/dist/cjs/utils/database.cjs +3 -28
  17. package/dist/controllers/auth.d.ts +1 -1
  18. package/dist/controllers/auth.d.ts.map +1 -1
  19. package/dist/controllers/auth.js +173 -241
  20. package/dist/controllers/auth.js.map +1 -1
  21. package/dist/models/user.d.ts +2 -2
  22. package/dist/models/user.js +18 -22
  23. package/dist/routes/routes.d.ts.map +1 -1
  24. package/dist/routes/routes.js +18 -24
  25. package/dist/routes/routes.js.map +1 -1
  26. package/dist/tests/app.unit.test.d.ts +2 -0
  27. package/dist/tests/app.unit.test.d.ts.map +1 -0
  28. package/dist/tests/app.unit.test.js +318 -0
  29. package/dist/tests/app.unit.test.js.map +1 -0
  30. package/dist/tests/appEntrypoint.unit.test.d.ts +2 -0
  31. package/dist/tests/appEntrypoint.unit.test.d.ts.map +1 -0
  32. package/dist/tests/appEntrypoint.unit.test.js +100 -0
  33. package/dist/tests/appEntrypoint.unit.test.js.map +1 -0
  34. package/dist/tests/auth.unit.test.d.ts +2 -0
  35. package/dist/tests/auth.unit.test.d.ts.map +1 -0
  36. package/dist/tests/auth.unit.test.js +426 -0
  37. package/dist/tests/auth.unit.test.js.map +1 -0
  38. package/dist/tests/authHarness.d.ts +40 -0
  39. package/dist/tests/authHarness.d.ts.map +1 -0
  40. package/dist/tests/authHarness.js +57 -0
  41. package/dist/tests/authHarness.js.map +1 -0
  42. package/dist/tests/clientExampleServer.test-d.d.ts +2 -0
  43. package/dist/tests/clientExampleServer.test-d.d.ts.map +1 -0
  44. package/dist/tests/clientExampleServer.test-d.js +84 -0
  45. package/dist/tests/clientExampleServer.test-d.js.map +1 -0
  46. package/dist/tests/routes.unit.test.d.ts +2 -0
  47. package/dist/tests/routes.unit.test.d.ts.map +1 -0
  48. package/dist/tests/routes.unit.test.js +123 -0
  49. package/dist/tests/routes.unit.test.js.map +1 -0
  50. package/dist/tests/utils.unit.test.d.ts +2 -0
  51. package/dist/tests/utils.unit.test.d.ts.map +1 -0
  52. package/dist/tests/utils.unit.test.js +125 -0
  53. package/dist/tests/utils.unit.test.js.map +1 -0
  54. package/dist/utils/connection.js +14 -19
  55. package/dist/utils/database.js +4 -8
  56. package/package.json +17 -14
  57. package/src/app.ts +114 -73
  58. package/src/controllers/auth.ts +40 -31
  59. package/src/routes/routes.ts +5 -2
  60. package/src/tests/app.unit.test.ts +428 -0
  61. package/src/tests/appEntrypoint.unit.test.ts +154 -0
  62. package/src/tests/auth.unit.test.ts +859 -0
  63. package/src/tests/authHarness.ts +131 -0
  64. package/src/tests/clientExampleServer.test-d.ts +146 -0
  65. package/src/tests/routes.unit.test.ts +166 -0
  66. package/src/tests/utils.unit.test.ts +169 -0
  67. package/tsconfig.tsbuildinfo +1 -1
  68. package/vite.test.config.ts +18 -0
package/dist/cjs/app.cjs CHANGED
@@ -1,110 +1,152 @@
1
- "use strict";
2
- const fs = require("node:fs");
3
- const http = require("node:http");
4
- const https = require("node:https");
5
- const path = require("node:path");
6
- const node_url = require("node:url");
7
- const common = require("@prosopo/common");
8
- const dotenv = require("@prosopo/dotenv");
9
- const logger$1 = require("@prosopo/logger");
10
- const server = require("@prosopo/server");
11
- const util = require("@prosopo/util");
12
- const cors = require("cors");
13
- const express = require("express");
14
- const routes = require("./routes/routes.cjs");
15
- const connection = require("./utils/connection.cjs");
16
- const database = require("./utils/database.cjs");
17
- var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
18
- dotenv.loadEnv();
19
- var ProsopoVerificationType = /* @__PURE__ */ ((ProsopoVerificationType2) => {
20
- ProsopoVerificationType2["api"] = "api";
21
- ProsopoVerificationType2["local"] = "local";
22
- return ProsopoVerificationType2;
23
- })(ProsopoVerificationType || {});
24
- const logger = logger$1.getLogger("info", "client-example-server:app");
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_routes = require("./routes/routes.cjs");
4
+ const require_connection = require("./utils/connection.cjs");
5
+ const require_database = require("./utils/database.cjs");
6
+ let node_fs = require("node:fs");
7
+ node_fs = require_runtime.__toESM(node_fs, 1);
8
+ let node_http = require("node:http");
9
+ node_http = require_runtime.__toESM(node_http, 1);
10
+ let node_https = require("node:https");
11
+ node_https = require_runtime.__toESM(node_https, 1);
12
+ let node_path = require("node:path");
13
+ node_path = require_runtime.__toESM(node_path, 1);
14
+ let node_url = require("node:url");
15
+ let _prosopo_common = require("@prosopo/common");
16
+ let _prosopo_dotenv = require("@prosopo/dotenv");
17
+ let _prosopo_logger = require("@prosopo/logger");
18
+ let _prosopo_server = require("@prosopo/server");
19
+ let _prosopo_util = require("@prosopo/util");
20
+ let cors = require("cors");
21
+ cors = require_runtime.__toESM(cors, 1);
22
+ let express = require("express");
23
+ express = require_runtime.__toESM(express, 1);
24
+ //#region src/app.ts
25
+ var ProsopoVerificationType = /* @__PURE__ */ function(ProsopoVerificationType) {
26
+ ProsopoVerificationType["api"] = "api";
27
+ ProsopoVerificationType["local"] = "local";
28
+ return ProsopoVerificationType;
29
+ }({});
30
+ var logger = (0, _prosopo_logger.getLogger)("info", "client-example-server:app");
31
+ /**
32
+ * The siteverify endpoint the deployment talks to. Non-production
33
+ * environments get their name as a subdomain prefix. An unset NODE_ENV is
34
+ * treated as production: prefixing it produced `undefined-api.prosopo.io`,
35
+ * a host that does not exist.
36
+ */
37
+ var resolveVerifyEndpoint = () => {
38
+ const environment = process.env.NODE_ENV;
39
+ const apiPrefix = !environment || environment === "production" ? "" : `${environment}-`;
40
+ return process.env.PROSOPO_VERIFY_ENDPOINT || `https://${apiPrefix}api.prosopo.io/siteverify`;
41
+ };
42
+ /** Anything the enum doesn't name falls back to the hosted API. */
43
+ var resolveVerifyType = () => Object.keys(ProsopoVerificationType).includes(process.env.PROSOPO_VERIFICATION_TYPE) ? process.env.PROSOPO_VERIFICATION_TYPE : "api";
44
+ var isDevelopmentOrTest = () => process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
45
+ /** The express app, minus the routes, which need a database connection. */
46
+ var createApp = () => {
47
+ const app = (0, express.default)();
48
+ app.set("trust proxy", 1);
49
+ app.use((0, cors.default)({
50
+ origin: true,
51
+ credentials: true
52
+ }));
53
+ app.use(express.default.urlencoded({ extended: true }));
54
+ app.use(express.default.json());
55
+ app.use((_, res, next) => {
56
+ res.setHeader("Access-Control-Allow-Origin", "*");
57
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE");
58
+ res.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, Authorization");
59
+ next();
60
+ });
61
+ return app;
62
+ };
63
+ var DEFAULT_PORT = 9228;
64
+ /**
65
+ * The port is the last segment of the configured server URL. A URL without
66
+ * one used to yield NaN, which node turns into an arbitrary free port — the
67
+ * server came up on an address nothing was configured to talk to.
68
+ */
69
+ var resolvePort = (config) => {
70
+ if (!config.serverUrl) return DEFAULT_PORT;
71
+ const segments = config.serverUrl.split(":");
72
+ if (segments.length < 3) return DEFAULT_PORT;
73
+ const port = Number.parseInt((0, _prosopo_util.at)(segments, 2));
74
+ return Number.isNaN(port) ? DEFAULT_PORT : port;
75
+ };
76
+ /**
77
+ * HTTPS in development/test when the repo's certificates exist, plain HTTP
78
+ * otherwise — in production Caddy terminates TLS.
79
+ */
80
+ var startServer = (app, port, dirname = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href))) => {
81
+ if (isDevelopmentOrTest()) {
82
+ const certsDir = node_path.default.resolve(dirname, "../../../certs");
83
+ const keyPath = node_path.default.join(certsDir, "server.key");
84
+ const certPath = node_path.default.join(certsDir, "server.crt");
85
+ if (node_fs.default.existsSync(keyPath) && node_fs.default.existsSync(certPath)) {
86
+ const httpsOptions = {
87
+ key: node_fs.default.readFileSync(keyPath),
88
+ cert: node_fs.default.readFileSync(certPath)
89
+ };
90
+ return node_https.default.createServer(httpsOptions, app).listen(port, () => {
91
+ logger.info(() => ({ msg: `HTTPS server started on port ${port}` }));
92
+ });
93
+ }
94
+ logger.warn(() => ({ msg: "Certificates not found, starting HTTP server instead. Run ./setup_certs.sh to enable HTTPS in development." }));
95
+ return node_http.default.createServer(app).listen(port, () => {
96
+ logger.info(() => ({ msg: `HTTP server started on port ${port}` }));
97
+ });
98
+ }
99
+ return node_http.default.createServer(app).listen(port, () => {
100
+ logger.info(() => ({ msg: `HTTP server started on port ${port} (TLS handled by reverse proxy)` }));
101
+ });
102
+ };
25
103
  async function main() {
26
- dotenv.loadEnv();
27
- const apiPrefix = process.env.NODE_ENV && process.env.NODE_ENV === "production" ? "" : `${process.env.NODE_ENV}-`;
28
- const verifyEndpoint = process.env.PROSOPO_VERIFY_ENDPOINT || `https://${apiPrefix}api.prosopo.io/siteverify`;
29
- logger.info(() => ({ data: { verifyEndpoint } }));
30
- const verifyType = Object.keys(
31
- ProsopoVerificationType
32
- ).includes(process.env.PROSOPO_VERIFICATION_TYPE) ? process.env.PROSOPO_VERIFICATION_TYPE : "api";
33
- const app = express();
34
- app.set("trust proxy", 1);
35
- app.use(cors({ origin: true, credentials: true }));
36
- app.use(express.urlencoded({ extended: true }));
37
- app.use(express.json());
38
- app.use((_, res, next) => {
39
- res.setHeader("Access-Control-Allow-Origin", "*");
40
- res.setHeader(
41
- "Access-Control-Allow-Methods",
42
- "GET, POST, PUT, PATCH, DELETE"
43
- );
44
- res.setHeader(
45
- "Access-Control-Allow-Headers",
46
- "Origin, Content-Type, X-Auth-Token, Authorization"
47
- );
48
- next();
49
- });
50
- app.options("/*", (_, res) => {
51
- res.sendStatus(200);
52
- });
53
- if (!process.env.MONGO_URI && process.env.NODE_ENV !== "development" && process.env.NODE_ENV !== "test") {
54
- throw new Error(
55
- "Cannot run mongo memory when NODE_ENV is neither development nor test"
56
- );
57
- }
58
- logger.info(() => ({ msg: process.env.MONGO_URI }));
59
- const uri = process.env.MONGO_URI || await database.memoryServerSetup();
60
- logger.info(() => ({ msg: "mongo uri", data: { uri } }));
61
- const mongoose = connection(uri);
62
- if (!process.env.PROSOPO_SITE_PRIVATE_KEY) {
63
- const mnemonicError = new common.ProsopoEnvError("GENERAL.MNEMONIC_UNDEFINED", {
64
- context: { missingParams: ["PROSOPO_SITE_PRIVATE_KEY"] },
65
- logger
66
- });
67
- logger.error(() => ({ err: mnemonicError }));
68
- }
69
- const config = server.getServerConfig();
70
- logger.info(() => ({ msg: "Config", data: { config } }));
71
- app.use(routes(mongoose, config, verifyEndpoint, verifyType));
72
- const port = config.serverUrl ? Number.parseInt(util.at(config.serverUrl.split(":"), 2)) : 9228;
73
- logger.info(() => ({ msg: "Listening on port", data: { port } }));
74
- const isDev = process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
75
- if (isDev) {
76
- const __filename = node_url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("app.cjs", document.baseURI).href);
77
- const __dirname = path.dirname(__filename);
78
- const certsDir = path.resolve(__dirname, "../../../certs");
79
- const keyPath = path.join(certsDir, "server.key");
80
- const certPath = path.join(certsDir, "server.crt");
81
- if (fs.existsSync(keyPath) && fs.existsSync(certPath)) {
82
- const httpsOptions = {
83
- key: fs.readFileSync(keyPath),
84
- cert: fs.readFileSync(certPath)
85
- };
86
- https.createServer(httpsOptions, app).listen(port, () => {
87
- logger.info(() => ({ msg: `HTTPS server started on port ${port}` }));
88
- });
89
- } else {
90
- logger.warn(() => ({
91
- msg: "Certificates not found, starting HTTP server instead. Run ./setup_certs.sh to enable HTTPS in development."
92
- }));
93
- http.createServer(app).listen(port, () => {
94
- logger.info(() => ({ msg: `HTTP server started on port ${port}` }));
95
- });
96
- }
97
- } else {
98
- http.createServer(app).listen(port, () => {
99
- logger.info(() => ({
100
- msg: `HTTP server started on port ${port} (TLS handled by reverse proxy)`
101
- }));
102
- });
103
- }
104
+ (0, _prosopo_dotenv.loadEnv)();
105
+ const verifyEndpoint = resolveVerifyEndpoint();
106
+ logger.info(() => ({ data: { verifyEndpoint } }));
107
+ const verifyType = resolveVerifyType();
108
+ const app = createApp();
109
+ if (!process.env.MONGO_URI && !isDevelopmentOrTest()) throw new Error("Cannot run mongo memory when NODE_ENV is neither development nor test");
110
+ logger.info(() => ({ msg: process.env.MONGO_URI }));
111
+ const uri = process.env.MONGO_URI || await require_database.default();
112
+ logger.info(() => ({
113
+ msg: "mongo uri",
114
+ data: { uri }
115
+ }));
116
+ const mongoose = require_connection.default(uri);
117
+ if (!process.env.PROSOPO_SITE_PRIVATE_KEY) {
118
+ const mnemonicError = new _prosopo_common.ProsopoEnvError("GENERAL.MNEMONIC_UNDEFINED", {
119
+ context: { missingParams: ["PROSOPO_SITE_PRIVATE_KEY"] },
120
+ logger
121
+ });
122
+ logger.error(() => ({ err: mnemonicError }));
123
+ }
124
+ const config = (0, _prosopo_server.getServerConfig)();
125
+ logger.info(() => ({
126
+ msg: "Config",
127
+ data: { config }
128
+ }));
129
+ app.use(require_routes.default(mongoose, config, verifyEndpoint, verifyType));
130
+ const port = resolvePort(config);
131
+ logger.info(() => ({
132
+ msg: "Listening on port",
133
+ data: { port }
134
+ }));
135
+ return startServer(app, port);
104
136
  }
105
- main().then(() => {
106
- logger.info(() => ({ msg: "Server started" }));
137
+ if ((0, _prosopo_util.isMain)(require("url").pathToFileURL(__filename).href)) main().then(() => {
138
+ logger.info(() => ({ msg: "Server started" }));
107
139
  }).catch((err) => {
108
- logger.error(() => ({ err }));
109
- process.exit();
140
+ logger.error(() => ({ err }));
141
+ process.exit(1);
110
142
  });
143
+ //#endregion
144
+ exports.DEFAULT_PORT = DEFAULT_PORT;
145
+ exports.ProsopoVerificationType = ProsopoVerificationType;
146
+ exports.createApp = createApp;
147
+ exports.isDevelopmentOrTest = isDevelopmentOrTest;
148
+ exports.main = main;
149
+ exports.resolvePort = resolvePort;
150
+ exports.resolveVerifyEndpoint = resolveVerifyEndpoint;
151
+ exports.resolveVerifyType = resolveVerifyType;
152
+ exports.startServer = startServer;