@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.
- package/.turbo/turbo-build$colon$cjs.log +15 -31
- package/.turbo/turbo-build$colon$tsc.log +21 -21
- package/.turbo/turbo-build.log +16 -31
- package/CHANGELOG.md +35 -0
- package/dist/_virtual/_rolldown/runtime.js +3 -0
- package/dist/app.d.ts +15 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +122 -93
- package/dist/app.js.map +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/app.cjs +148 -106
- package/dist/cjs/controllers/auth.cjs +180 -244
- package/dist/cjs/models/user.cjs +21 -22
- package/dist/cjs/routes/routes.cjs +21 -24
- package/dist/cjs/utils/connection.cjs +20 -23
- package/dist/cjs/utils/database.cjs +3 -28
- package/dist/controllers/auth.d.ts +1 -1
- package/dist/controllers/auth.d.ts.map +1 -1
- package/dist/controllers/auth.js +173 -241
- package/dist/controllers/auth.js.map +1 -1
- package/dist/models/user.d.ts +2 -2
- package/dist/models/user.js +18 -22
- package/dist/routes/routes.d.ts.map +1 -1
- package/dist/routes/routes.js +18 -24
- package/dist/routes/routes.js.map +1 -1
- package/dist/tests/app.unit.test.d.ts +2 -0
- package/dist/tests/app.unit.test.d.ts.map +1 -0
- package/dist/tests/app.unit.test.js +318 -0
- package/dist/tests/app.unit.test.js.map +1 -0
- package/dist/tests/appEntrypoint.unit.test.d.ts +2 -0
- package/dist/tests/appEntrypoint.unit.test.d.ts.map +1 -0
- package/dist/tests/appEntrypoint.unit.test.js +100 -0
- package/dist/tests/appEntrypoint.unit.test.js.map +1 -0
- package/dist/tests/auth.unit.test.d.ts +2 -0
- package/dist/tests/auth.unit.test.d.ts.map +1 -0
- package/dist/tests/auth.unit.test.js +426 -0
- package/dist/tests/auth.unit.test.js.map +1 -0
- package/dist/tests/authHarness.d.ts +40 -0
- package/dist/tests/authHarness.d.ts.map +1 -0
- package/dist/tests/authHarness.js +57 -0
- package/dist/tests/authHarness.js.map +1 -0
- package/dist/tests/clientExampleServer.test-d.d.ts +2 -0
- package/dist/tests/clientExampleServer.test-d.d.ts.map +1 -0
- package/dist/tests/clientExampleServer.test-d.js +84 -0
- package/dist/tests/clientExampleServer.test-d.js.map +1 -0
- package/dist/tests/routes.unit.test.d.ts +2 -0
- package/dist/tests/routes.unit.test.d.ts.map +1 -0
- package/dist/tests/routes.unit.test.js +123 -0
- package/dist/tests/routes.unit.test.js.map +1 -0
- package/dist/tests/utils.unit.test.d.ts +2 -0
- package/dist/tests/utils.unit.test.d.ts.map +1 -0
- package/dist/tests/utils.unit.test.js +125 -0
- package/dist/tests/utils.unit.test.js.map +1 -0
- package/dist/utils/connection.js +14 -19
- package/dist/utils/database.js +4 -8
- package/package.json +17 -14
- package/src/app.ts +114 -73
- package/src/controllers/auth.ts +40 -31
- package/src/routes/routes.ts +5 -2
- package/src/tests/app.unit.test.ts +428 -0
- package/src/tests/appEntrypoint.unit.test.ts +154 -0
- package/src/tests/auth.unit.test.ts +859 -0
- package/src/tests/authHarness.ts +131 -0
- package/src/tests/clientExampleServer.test-d.ts +146 -0
- package/src/tests/routes.unit.test.ts +166 -0
- package/src/tests/utils.unit.test.ts +169 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.test.config.ts +18 -0
package/dist/cjs/app.cjs
CHANGED
|
@@ -1,110 +1,152 @@
|
|
|
1
|
-
"
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
137
|
+
if ((0, _prosopo_util.isMain)(require("url").pathToFileURL(__filename).href)) main().then(() => {
|
|
138
|
+
logger.info(() => ({ msg: "Server started" }));
|
|
107
139
|
}).catch((err) => {
|
|
108
|
-
|
|
109
|
-
|
|
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;
|