modelence 0.9.0-dev.0 → 0.9.0
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/dist/bin/modelence.js +3 -57
- package/dist/bin/modelence.js.map +1 -1
- package/dist/chunk-3S2FFBNS.js +2 -0
- package/dist/chunk-3S2FFBNS.js.map +1 -0
- package/dist/chunk-55J6XMHW.js +2 -0
- package/dist/chunk-55J6XMHW.js.map +1 -0
- package/dist/chunk-C3UESBRX.js +2 -0
- package/dist/chunk-C3UESBRX.js.map +1 -0
- package/dist/chunk-DO5TZLF5.js +2 -0
- package/dist/chunk-DO5TZLF5.js.map +1 -0
- package/dist/chunk-PB6WQQ4L.js +3 -0
- package/dist/chunk-PB6WQQ4L.js.map +1 -0
- package/dist/chunk-YOLALUSB.js +3 -0
- package/dist/chunk-YOLALUSB.js.map +1 -0
- package/dist/client.d.ts +133 -10
- package/dist/client.js +1 -14
- package/dist/client.js.map +1 -1
- package/dist/index-CwdohC5n.d.ts +15 -0
- package/dist/index.d.ts +31 -6
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/mongo.d.ts +3 -2
- package/dist/mongo.js +1 -2
- package/dist/mongo.js.map +1 -1
- package/dist/package-FGEKA4ES.js +2 -0
- package/dist/package-FGEKA4ES.js.map +1 -0
- package/dist/server.d.ts +537 -19
- package/dist/server.js +18 -15
- package/dist/server.js.map +1 -1
- package/dist/telemetry.d.ts +11 -2
- package/dist/telemetry.js +1 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/types-BOFsm7A2.d.ts +155 -0
- package/dist/{data/store.d.ts → types-SXHKNPNY.d.ts} +196 -14
- package/dist/types.d.ts +7 -10
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -5
- package/dist/app/authConfig.d.ts +0 -68
- package/dist/app/authConfig.d.ts.map +0 -1
- package/dist/app/authConfig.js +0 -8
- package/dist/app/authConfig.js.map +0 -1
- package/dist/app/backendApi.d.ts +0 -29
- package/dist/app/backendApi.d.ts.map +0 -1
- package/dist/app/backendApi.js +0 -69
- package/dist/app/backendApi.js.map +0 -1
- package/dist/app/email.d.ts +0 -3
- package/dist/app/email.d.ts.map +0 -1
- package/dist/app/email.js +0 -8
- package/dist/app/email.js.map +0 -1
- package/dist/app/emailConfig.d.ts +0 -27
- package/dist/app/emailConfig.d.ts.map +0 -1
- package/dist/app/emailConfig.js +0 -8
- package/dist/app/emailConfig.js.map +0 -1
- package/dist/app/index.d.ts +0 -20
- package/dist/app/index.d.ts.map +0 -1
- package/dist/app/index.js +0 -258
- package/dist/app/index.js.map +0 -1
- package/dist/app/loggerProcess.d.ts +0 -5
- package/dist/app/loggerProcess.d.ts.map +0 -1
- package/dist/app/loggerProcess.js +0 -90
- package/dist/app/loggerProcess.js.map +0 -1
- package/dist/app/metrics.d.ts +0 -6
- package/dist/app/metrics.d.ts.map +0 -1
- package/dist/app/metrics.js +0 -92
- package/dist/app/metrics.js.map +0 -1
- package/dist/app/module.d.ts +0 -77
- package/dist/app/module.d.ts.map +0 -1
- package/dist/app/module.js +0 -46
- package/dist/app/module.js.map +0 -1
- package/dist/app/server.d.ts +0 -37
- package/dist/app/server.d.ts.map +0 -1
- package/dist/app/server.js +0 -198
- package/dist/app/server.js.map +0 -1
- package/dist/app/state.d.ts +0 -19
- package/dist/app/state.d.ts.map +0 -1
- package/dist/app/state.js +0 -27
- package/dist/app/state.js.map +0 -1
- package/dist/app/websocketConfig.d.ts +0 -7
- package/dist/app/websocketConfig.d.ts.map +0 -1
- package/dist/app/websocketConfig.js +0 -8
- package/dist/app/websocketConfig.js.map +0 -1
- package/dist/auth/client/index.d.ts +0 -69
- package/dist/auth/client/index.d.ts.map +0 -1
- package/dist/auth/client/index.js +0 -79
- package/dist/auth/client/index.js.map +0 -1
- package/dist/auth/db.d.ts +0 -176
- package/dist/auth/db.d.ts.map +0 -1
- package/dist/auth/db.js +0 -117
- package/dist/auth/db.js.map +0 -1
- package/dist/auth/deleteUser.d.ts +0 -5
- package/dist/auth/deleteUser.d.ts.map +0 -1
- package/dist/auth/deleteUser.js +0 -34
- package/dist/auth/deleteUser.js.map +0 -1
- package/dist/auth/disposableEmails.d.ts +0 -6
- package/dist/auth/disposableEmails.d.ts.map +0 -1
- package/dist/auth/disposableEmails.js +0 -47
- package/dist/auth/disposableEmails.js.map +0 -1
- package/dist/auth/index.d.ts +0 -7
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -33
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/login.d.ts +0 -9
- package/dist/auth/login.d.ts.map +0 -1
- package/dist/auth/login.js +0 -100
- package/dist/auth/login.js.map +0 -1
- package/dist/auth/password.d.ts +0 -14
- package/dist/auth/password.d.ts.map +0 -1
- package/dist/auth/password.js +0 -26
- package/dist/auth/password.js.map +0 -1
- package/dist/auth/profile.d.ts +0 -10
- package/dist/auth/profile.d.ts.map +0 -1
- package/dist/auth/profile.js +0 -13
- package/dist/auth/profile.js.map +0 -1
- package/dist/auth/providers/github.d.ts +0 -3
- package/dist/auth/providers/github.d.ts.map +0 -1
- package/dist/auth/providers/github.js +0 -122
- package/dist/auth/providers/github.js.map +0 -1
- package/dist/auth/providers/google.d.ts +0 -3
- package/dist/auth/providers/google.d.ts.map +0 -1
- package/dist/auth/providers/google.js +0 -108
- package/dist/auth/providers/google.js.map +0 -1
- package/dist/auth/providers/oauth-common.d.ts +0 -13
- package/dist/auth/providers/oauth-common.d.ts.map +0 -1
- package/dist/auth/providers/oauth-common.js +0 -109
- package/dist/auth/providers/oauth-common.js.map +0 -1
- package/dist/auth/resetPassword.d.ts +0 -10
- package/dist/auth/resetPassword.d.ts.map +0 -1
- package/dist/auth/resetPassword.js +0 -108
- package/dist/auth/resetPassword.js.map +0 -1
- package/dist/auth/role.d.ts +0 -8
- package/dist/auth/role.d.ts.map +0 -1
- package/dist/auth/role.js +0 -37
- package/dist/auth/role.js.map +0 -1
- package/dist/auth/session.d.ts +0 -24
- package/dist/auth/session.d.ts.map +0 -1
- package/dist/auth/session.js +0 -84
- package/dist/auth/session.js.map +0 -1
- package/dist/auth/signup.d.ts +0 -3
- package/dist/auth/signup.d.ts.map +0 -1
- package/dist/auth/signup.js +0 -89
- package/dist/auth/signup.js.map +0 -1
- package/dist/auth/templates/emailVerficationTemplate.d.ts +0 -6
- package/dist/auth/templates/emailVerficationTemplate.d.ts.map +0 -1
- package/dist/auth/templates/emailVerficationTemplate.js +0 -9
- package/dist/auth/templates/emailVerficationTemplate.js.map +0 -1
- package/dist/auth/types.d.ts +0 -22
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -2
- package/dist/auth/types.js.map +0 -1
- package/dist/auth/user.d.ts +0 -5
- package/dist/auth/user.d.ts.map +0 -1
- package/dist/auth/user.js +0 -152
- package/dist/auth/user.js.map +0 -1
- package/dist/auth/validators.d.ts +0 -3
- package/dist/auth/validators.d.ts.map +0 -1
- package/dist/auth/validators.js +0 -8
- package/dist/auth/validators.js.map +0 -1
- package/dist/auth/verification.d.ts +0 -8
- package/dist/auth/verification.d.ts.map +0 -1
- package/dist/auth/verification.js +0 -94
- package/dist/auth/verification.js.map +0 -1
- package/dist/bin/auth.d.ts +0 -4
- package/dist/bin/auth.d.ts.map +0 -1
- package/dist/bin/auth.js +0 -48
- package/dist/bin/auth.js.map +0 -1
- package/dist/bin/build.d.ts +0 -2
- package/dist/bin/build.d.ts.map +0 -1
- package/dist/bin/build.js +0 -78
- package/dist/bin/build.js.map +0 -1
- package/dist/bin/config.d.ts +0 -11
- package/dist/bin/config.d.ts.map +0 -1
- package/dist/bin/config.js +0 -91
- package/dist/bin/config.js.map +0 -1
- package/dist/bin/deploy.d.ts +0 -6
- package/dist/bin/deploy.d.ts.map +0 -1
- package/dist/bin/deploy.js +0 -129
- package/dist/bin/deploy.js.map +0 -1
- package/dist/bin/dev.d.ts +0 -2
- package/dist/bin/dev.d.ts.map +0 -1
- package/dist/bin/dev.js +0 -14
- package/dist/bin/dev.js.map +0 -1
- package/dist/bin/modelence.d.ts +0 -3
- package/dist/bin/modelence.d.ts.map +0 -1
- package/dist/bin/setup.d.ts +0 -5
- package/dist/bin/setup.d.ts.map +0 -1
- package/dist/bin/setup.js +0 -91
- package/dist/bin/setup.js.map +0 -1
- package/dist/bin/start.d.ts +0 -2
- package/dist/bin/start.d.ts.map +0 -1
- package/dist/bin/start.js +0 -15
- package/dist/bin/start.js.map +0 -1
- package/dist/client/AppProvider.d.ts +0 -8
- package/dist/client/AppProvider.d.ts.map +0 -1
- package/dist/client/AppProvider.js +0 -31
- package/dist/client/AppProvider.js.map +0 -1
- package/dist/client/errorHandler.d.ts +0 -4
- package/dist/client/errorHandler.d.ts.map +0 -1
- package/dist/client/errorHandler.js +0 -10
- package/dist/client/errorHandler.js.map +0 -1
- package/dist/client/localStorage.d.ts +0 -3
- package/dist/client/localStorage.d.ts.map +0 -1
- package/dist/client/localStorage.js +0 -14
- package/dist/client/localStorage.js.map +0 -1
- package/dist/client/method.d.ts +0 -6
- package/dist/client/method.d.ts.map +0 -1
- package/dist/client/method.js +0 -52
- package/dist/client/method.js.map +0 -1
- package/dist/client/renderApp.d.ts +0 -9
- package/dist/client/renderApp.d.ts.map +0 -1
- package/dist/client/renderApp.js +0 -28
- package/dist/client/renderApp.js.map +0 -1
- package/dist/client/session.d.ts +0 -34
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -83
- package/dist/client/session.js.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/config/client.d.ts +0 -10
- package/dist/config/client.d.ts.map +0 -1
- package/dist/config/client.js +0 -14
- package/dist/config/client.js.map +0 -1
- package/dist/config/server.d.ts +0 -48
- package/dist/config/server.d.ts.map +0 -1
- package/dist/config/server.js +0 -85
- package/dist/config/server.js.map +0 -1
- package/dist/config/sync.d.ts +0 -2
- package/dist/config/sync.d.ts.map +0 -1
- package/dist/config/sync.js +0 -32
- package/dist/config/sync.js.map +0 -1
- package/dist/config/types.d.ts +0 -19
- package/dist/config/types.d.ts.map +0 -1
- package/dist/config/types.js +0 -2
- package/dist/config/types.js.map +0 -1
- package/dist/cron/jobs.d.ts +0 -13
- package/dist/cron/jobs.d.ts.map +0 -1
- package/dist/cron/jobs.js +0 -155
- package/dist/cron/jobs.js.map +0 -1
- package/dist/cron/types.d.ts +0 -29
- package/dist/cron/types.d.ts.map +0 -1
- package/dist/cron/types.js +0 -2
- package/dist/cron/types.js.map +0 -1
- package/dist/data/schemaSerializer.d.ts +0 -37
- package/dist/data/schemaSerializer.d.ts.map +0 -1
- package/dist/data/schemaSerializer.js +0 -104
- package/dist/data/schemaSerializer.js.map +0 -1
- package/dist/data/store.d.ts.map +0 -1
- package/dist/data/store.js +0 -501
- package/dist/data/store.js.map +0 -1
- package/dist/data/types.d.ts +0 -47
- package/dist/data/types.d.ts.map +0 -1
- package/dist/data/types.js +0 -35
- package/dist/data/types.js.map +0 -1
- package/dist/db/client.d.ts +0 -5
- package/dist/db/client.d.ts.map +0 -1
- package/dist/db/client.js +0 -41
- package/dist/db/client.js.map +0 -1
- package/dist/error.d.ts +0 -16
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -24
- package/dist/error.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lock/db.d.ts +0 -19
- package/dist/lock/db.d.ts.map +0 -1
- package/dist/lock/db.js +0 -28
- package/dist/lock/db.js.map +0 -1
- package/dist/lock/helpers.d.ts +0 -28
- package/dist/lock/helpers.d.ts.map +0 -1
- package/dist/lock/helpers.js +0 -107
- package/dist/lock/helpers.js.map +0 -1
- package/dist/lock/index.d.ts +0 -4
- package/dist/lock/index.d.ts.map +0 -1
- package/dist/lock/index.js +0 -4
- package/dist/lock/index.js.map +0 -1
- package/dist/lock/module.d.ts +0 -7
- package/dist/lock/module.d.ts.map +0 -1
- package/dist/lock/module.js +0 -9
- package/dist/lock/module.js.map +0 -1
- package/dist/methods/index.d.ts +0 -7
- package/dist/methods/index.d.ts.map +0 -1
- package/dist/methods/index.js +0 -65
- package/dist/methods/index.js.map +0 -1
- package/dist/methods/serialize.d.ts +0 -15
- package/dist/methods/serialize.d.ts.map +0 -1
- package/dist/methods/serialize.js +0 -56
- package/dist/methods/serialize.js.map +0 -1
- package/dist/methods/types.d.ts +0 -37
- package/dist/methods/types.d.ts.map +0 -1
- package/dist/methods/types.js +0 -2
- package/dist/methods/types.js.map +0 -1
- package/dist/migration/db.d.ts +0 -17
- package/dist/migration/db.d.ts.map +0 -1
- package/dist/migration/db.js +0 -13
- package/dist/migration/db.js.map +0 -1
- package/dist/migration/index.d.ts +0 -11
- package/dist/migration/index.d.ts.map +0 -1
- package/dist/migration/index.js +0 -85
- package/dist/migration/index.js.map +0 -1
- package/dist/mongo.d.ts.map +0 -1
- package/dist/rate-limit/db.d.ts +0 -29
- package/dist/rate-limit/db.d.ts.map +0 -1
- package/dist/rate-limit/db.js +0 -25
- package/dist/rate-limit/db.js.map +0 -1
- package/dist/rate-limit/index.d.ts +0 -4
- package/dist/rate-limit/index.d.ts.map +0 -1
- package/dist/rate-limit/index.js +0 -6
- package/dist/rate-limit/index.js.map +0 -1
- package/dist/rate-limit/rules.d.ts +0 -22
- package/dist/rate-limit/rules.d.ts.map +0 -1
- package/dist/rate-limit/rules.js +0 -112
- package/dist/rate-limit/rules.js.map +0 -1
- package/dist/rate-limit/types.d.ts +0 -12
- package/dist/rate-limit/types.d.ts.map +0 -1
- package/dist/rate-limit/types.js +0 -2
- package/dist/rate-limit/types.js.map +0 -1
- package/dist/routes/handler.d.ts +0 -4
- package/dist/routes/handler.d.ts.map +0 -1
- package/dist/routes/handler.js +0 -66
- package/dist/routes/handler.js.map +0 -1
- package/dist/routes/types.d.ts +0 -45
- package/dist/routes/types.d.ts.map +0 -1
- package/dist/routes/types.js +0 -2
- package/dist/routes/types.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/system/index.d.ts +0 -4
- package/dist/system/index.d.ts.map +0 -1
- package/dist/system/index.js +0 -21
- package/dist/system/index.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -11
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -79
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/time.d.ts +0 -8
- package/dist/time.d.ts.map +0 -1
- package/dist/time.js +0 -13
- package/dist/time.js.map +0 -1
- package/dist/types/email.d.ts +0 -25
- package/dist/types/email.d.ts.map +0 -1
- package/dist/types/email.js +0 -2
- package/dist/types/email.js.map +0 -1
- package/dist/types/index.d.ts +0 -14
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -15
- package/dist/utils/index.js.map +0 -1
- package/dist/viteServer.d.ts +0 -13
- package/dist/viteServer.d.ts.map +0 -1
- package/dist/viteServer.js +0 -132
- package/dist/viteServer.js.map +0 -1
- package/dist/websocket/client.d.ts +0 -9
- package/dist/websocket/client.d.ts.map +0 -1
- package/dist/websocket/client.js +0 -16
- package/dist/websocket/client.js.map +0 -1
- package/dist/websocket/clientChannel.d.ts +0 -9
- package/dist/websocket/clientChannel.d.ts.map +0 -1
- package/dist/websocket/clientChannel.js +0 -26
- package/dist/websocket/clientChannel.js.map +0 -1
- package/dist/websocket/serverChannel.d.ts +0 -14
- package/dist/websocket/serverChannel.d.ts.map +0 -1
- package/dist/websocket/serverChannel.js +0 -21
- package/dist/websocket/serverChannel.js.map +0 -1
- package/dist/websocket/socketio/client.d.ts +0 -4
- package/dist/websocket/socketio/client.d.ts.map +0 -1
- package/dist/websocket/socketio/client.js +0 -48
- package/dist/websocket/socketio/client.js.map +0 -1
- package/dist/websocket/socketio/server.d.ts +0 -10
- package/dist/websocket/socketio/server.d.ts.map +0 -1
- package/dist/websocket/socketio/server.js +0 -80
- package/dist/websocket/socketio/server.js.map +0 -1
- package/dist/websocket/types.d.ts +0 -45
- package/dist/websocket/types.d.ts.map +0 -1
- package/dist/websocket/types.js +0 -2
- package/dist/websocket/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/auth/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAsB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO;;;;;;;GAYjE"}
|
package/dist/auth/profile.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { usersCollection } from './db';
|
|
2
|
-
export async function getOwnProfile(_args, { user }) {
|
|
3
|
-
if (!user) {
|
|
4
|
-
throw new Error('Not authenticated');
|
|
5
|
-
}
|
|
6
|
-
const profile = await usersCollection.requireById(user.id);
|
|
7
|
-
return {
|
|
8
|
-
handle: profile.handle,
|
|
9
|
-
emails: profile.emails,
|
|
10
|
-
authMethods: Object.keys(profile.authMethods || {}),
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=profile.js.map
|
package/dist/auth/profile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/auth/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAW,EAAE,EAAE,IAAI,EAAW;IAChE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/github.ts"],"names":[],"mappings":"AA6HA,iBAAS,SAAS,+CA2DjB;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { getConfig } from '../../server';
|
|
2
|
-
import { time } from '../../time';
|
|
3
|
-
import { randomBytes } from 'crypto';
|
|
4
|
-
import { Router } from 'express';
|
|
5
|
-
import { getRedirectUri, handleOAuthUserAuthentication, validateOAuthCode, } from './oauth-common';
|
|
6
|
-
async function exchangeCodeForToken(code, clientId, clientSecret, redirectUri) {
|
|
7
|
-
const tokenResponse = await fetch('https://github.com/login/oauth/access_token', {
|
|
8
|
-
method: 'POST',
|
|
9
|
-
headers: {
|
|
10
|
-
'Content-Type': 'application/json',
|
|
11
|
-
Accept: 'application/json',
|
|
12
|
-
},
|
|
13
|
-
body: JSON.stringify({
|
|
14
|
-
client_id: clientId,
|
|
15
|
-
client_secret: clientSecret,
|
|
16
|
-
code,
|
|
17
|
-
redirect_uri: redirectUri,
|
|
18
|
-
}),
|
|
19
|
-
});
|
|
20
|
-
if (!tokenResponse.ok) {
|
|
21
|
-
throw new Error(`Failed to exchange code for token: ${tokenResponse.statusText}`);
|
|
22
|
-
}
|
|
23
|
-
return tokenResponse.json();
|
|
24
|
-
}
|
|
25
|
-
async function fetchGitHubUserInfo(accessToken) {
|
|
26
|
-
const userInfoResponse = await fetch('https://api.github.com/user', {
|
|
27
|
-
headers: {
|
|
28
|
-
Authorization: `Bearer ${accessToken}`,
|
|
29
|
-
Accept: 'application/vnd.github.v3+json',
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
if (!userInfoResponse.ok) {
|
|
33
|
-
throw new Error(`Failed to fetch user info: ${userInfoResponse.statusText}`);
|
|
34
|
-
}
|
|
35
|
-
return userInfoResponse.json();
|
|
36
|
-
}
|
|
37
|
-
async function handleGitHubAuthenticationCallback(req, res) {
|
|
38
|
-
const code = validateOAuthCode(req.query.code);
|
|
39
|
-
const state = req.query.state;
|
|
40
|
-
const storedState = req.cookies.authStateGithub;
|
|
41
|
-
if (!code) {
|
|
42
|
-
res.status(400).json({ error: 'Missing authorization code' });
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
if (!state || !storedState || state !== storedState) {
|
|
46
|
-
res.status(400).json({ error: 'Invalid OAuth state - possible CSRF attack' });
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
res.clearCookie('authStateGithub');
|
|
50
|
-
const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
|
|
51
|
-
const githubClientSecret = String(getConfig('_system.user.auth.github.clientSecret'));
|
|
52
|
-
const redirectUri = getRedirectUri('github');
|
|
53
|
-
try {
|
|
54
|
-
// Exchange code for access token
|
|
55
|
-
const tokenData = await exchangeCodeForToken(code, githubClientId, githubClientSecret, redirectUri);
|
|
56
|
-
// Fetch user info
|
|
57
|
-
const githubUser = await fetchGitHubUserInfo(tokenData.access_token);
|
|
58
|
-
// Use the public email from user profile
|
|
59
|
-
const githubEmail = githubUser.email || '';
|
|
60
|
-
if (!githubEmail) {
|
|
61
|
-
res.status(400).json({
|
|
62
|
-
error: 'Unable to retrieve email from GitHub. Please ensure your email is public or grant email permissions.',
|
|
63
|
-
});
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const userData = {
|
|
67
|
-
id: String(githubUser.id),
|
|
68
|
-
email: githubEmail,
|
|
69
|
-
emailVerified: true, // Assume public email is verified
|
|
70
|
-
providerName: 'github',
|
|
71
|
-
};
|
|
72
|
-
await handleOAuthUserAuthentication(req, res, userData);
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
console.error('GitHub OAuth error:', error);
|
|
76
|
-
res.status(500).json({ error: 'Authentication failed' });
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
function getRouter() {
|
|
80
|
-
const githubAuthRouter = Router();
|
|
81
|
-
// Middleware to check if GitHub auth is enabled and configured
|
|
82
|
-
const checkGitHubEnabled = (_req, res, next) => {
|
|
83
|
-
const githubEnabled = Boolean(getConfig('_system.user.auth.github.enabled'));
|
|
84
|
-
const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
|
|
85
|
-
const githubClientSecret = String(getConfig('_system.user.auth.github.clientSecret'));
|
|
86
|
-
if (!githubEnabled || !githubClientId || !githubClientSecret) {
|
|
87
|
-
res.status(503).json({ error: 'GitHub authentication is not configured' });
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
next();
|
|
91
|
-
};
|
|
92
|
-
// Initiate OAuth flow
|
|
93
|
-
githubAuthRouter.get('/api/_internal/auth/github', checkGitHubEnabled, (req, res) => {
|
|
94
|
-
const githubClientId = String(getConfig('_system.user.auth.github.clientId'));
|
|
95
|
-
const redirectUri = getRedirectUri('github');
|
|
96
|
-
const githubScopes = getConfig('_system.user.auth.github.scopes');
|
|
97
|
-
const scopes = githubScopes
|
|
98
|
-
? String(githubScopes)
|
|
99
|
-
.split(',')
|
|
100
|
-
.map((s) => s.trim())
|
|
101
|
-
.join(' ')
|
|
102
|
-
: 'user:email';
|
|
103
|
-
const state = randomBytes(32).toString('hex');
|
|
104
|
-
res.cookie('authStateGithub', state, {
|
|
105
|
-
httpOnly: true,
|
|
106
|
-
secure: process.env.NODE_ENV === 'production',
|
|
107
|
-
sameSite: 'lax',
|
|
108
|
-
maxAge: time.minutes(10), // 10 minutes
|
|
109
|
-
});
|
|
110
|
-
const authUrl = new URL('https://github.com/login/oauth/authorize');
|
|
111
|
-
authUrl.searchParams.append('client_id', githubClientId);
|
|
112
|
-
authUrl.searchParams.append('redirect_uri', redirectUri);
|
|
113
|
-
authUrl.searchParams.append('scope', scopes);
|
|
114
|
-
authUrl.searchParams.append('state', state);
|
|
115
|
-
res.redirect(authUrl.toString());
|
|
116
|
-
});
|
|
117
|
-
// Handle OAuth callback
|
|
118
|
-
githubAuthRouter.get('/api/_internal/auth/github/callback', checkGitHubEnabled, handleGitHubAuthenticationCallback);
|
|
119
|
-
return githubAuthRouter;
|
|
120
|
-
}
|
|
121
|
-
export default getRouter;
|
|
122
|
-
//# sourceMappingURL=github.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/auth/providers/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/google.ts"],"names":[],"mappings":"AAmHA,iBAAS,SAAS,+CAsDjB;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { getConfig } from '../../server';
|
|
2
|
-
import { time } from '../../time';
|
|
3
|
-
import { randomBytes } from 'crypto';
|
|
4
|
-
import { Router } from 'express';
|
|
5
|
-
import { getRedirectUri, handleOAuthUserAuthentication, validateOAuthCode, } from './oauth-common';
|
|
6
|
-
async function exchangeCodeForToken(code, clientId, clientSecret, redirectUri) {
|
|
7
|
-
const tokenResponse = await fetch('https://oauth2.googleapis.com/token', {
|
|
8
|
-
method: 'POST',
|
|
9
|
-
headers: {
|
|
10
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
11
|
-
},
|
|
12
|
-
body: new URLSearchParams({
|
|
13
|
-
code,
|
|
14
|
-
client_id: clientId,
|
|
15
|
-
client_secret: clientSecret,
|
|
16
|
-
redirect_uri: redirectUri,
|
|
17
|
-
grant_type: 'authorization_code',
|
|
18
|
-
}),
|
|
19
|
-
});
|
|
20
|
-
if (!tokenResponse.ok) {
|
|
21
|
-
throw new Error(`Failed to exchange code for token: ${tokenResponse.statusText}`);
|
|
22
|
-
}
|
|
23
|
-
return tokenResponse.json();
|
|
24
|
-
}
|
|
25
|
-
async function fetchGoogleUserInfo(accessToken) {
|
|
26
|
-
const userInfoResponse = await fetch('https://www.googleapis.com/oauth2/v2/userinfo', {
|
|
27
|
-
headers: {
|
|
28
|
-
Authorization: `Bearer ${accessToken}`,
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
if (!userInfoResponse.ok) {
|
|
32
|
-
throw new Error(`Failed to fetch user info: ${userInfoResponse.statusText}`);
|
|
33
|
-
}
|
|
34
|
-
return userInfoResponse.json();
|
|
35
|
-
}
|
|
36
|
-
async function handleGoogleAuthenticationCallback(req, res) {
|
|
37
|
-
const code = validateOAuthCode(req.query.code);
|
|
38
|
-
const state = req.query.state;
|
|
39
|
-
const storedState = req.cookies.authStateGoogle;
|
|
40
|
-
if (!code) {
|
|
41
|
-
res.status(400).json({ error: 'Missing authorization code' });
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (!state || !storedState || state !== storedState) {
|
|
45
|
-
res.status(400).json({ error: 'Invalid OAuth state - possible CSRF attack' });
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
res.clearCookie('authStateGoogle');
|
|
49
|
-
const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
|
|
50
|
-
const googleClientSecret = String(getConfig('_system.user.auth.google.clientSecret'));
|
|
51
|
-
const redirectUri = getRedirectUri('google');
|
|
52
|
-
try {
|
|
53
|
-
// Exchange code for tokens
|
|
54
|
-
const tokenData = await exchangeCodeForToken(code, googleClientId, googleClientSecret, redirectUri);
|
|
55
|
-
// Fetch user info
|
|
56
|
-
const googleUser = await fetchGoogleUserInfo(tokenData.access_token);
|
|
57
|
-
const userData = {
|
|
58
|
-
id: googleUser.id,
|
|
59
|
-
email: googleUser.email,
|
|
60
|
-
emailVerified: googleUser.verified_email,
|
|
61
|
-
providerName: 'google',
|
|
62
|
-
};
|
|
63
|
-
await handleOAuthUserAuthentication(req, res, userData);
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
console.error('Google OAuth error:', error);
|
|
67
|
-
res.status(500).json({ error: 'Authentication failed' });
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function getRouter() {
|
|
71
|
-
const googleAuthRouter = Router();
|
|
72
|
-
// Middleware to check if Google auth is enabled and configured
|
|
73
|
-
const checkGoogleEnabled = (_req, res, next) => {
|
|
74
|
-
const googleEnabled = Boolean(getConfig('_system.user.auth.google.enabled'));
|
|
75
|
-
const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
|
|
76
|
-
const googleClientSecret = String(getConfig('_system.user.auth.google.clientSecret'));
|
|
77
|
-
if (!googleEnabled || !googleClientId || !googleClientSecret) {
|
|
78
|
-
res.status(503).json({ error: 'Google authentication is not configured' });
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
next();
|
|
82
|
-
};
|
|
83
|
-
// Initiate OAuth flow
|
|
84
|
-
googleAuthRouter.get('/api/_internal/auth/google', checkGoogleEnabled, (req, res) => {
|
|
85
|
-
const googleClientId = String(getConfig('_system.user.auth.google.clientId'));
|
|
86
|
-
const redirectUri = getRedirectUri('google');
|
|
87
|
-
const state = randomBytes(32).toString('hex');
|
|
88
|
-
res.cookie('authStateGoogle', state, {
|
|
89
|
-
httpOnly: true,
|
|
90
|
-
secure: process.env.NODE_ENV === 'production',
|
|
91
|
-
sameSite: 'lax',
|
|
92
|
-
maxAge: time.minutes(10), // 10 minutes
|
|
93
|
-
});
|
|
94
|
-
const authUrl = new URL('https://accounts.google.com/o/oauth2/v2/auth');
|
|
95
|
-
authUrl.searchParams.append('client_id', googleClientId);
|
|
96
|
-
authUrl.searchParams.append('redirect_uri', redirectUri);
|
|
97
|
-
authUrl.searchParams.append('response_type', 'code');
|
|
98
|
-
authUrl.searchParams.append('scope', 'profile email');
|
|
99
|
-
authUrl.searchParams.append('access_type', 'online');
|
|
100
|
-
authUrl.searchParams.append('state', state);
|
|
101
|
-
res.redirect(authUrl.toString());
|
|
102
|
-
});
|
|
103
|
-
// Handle OAuth callback
|
|
104
|
-
googleAuthRouter.get('/api/_internal/auth/google/callback', checkGoogleEnabled, handleGoogleAuthenticationCallback);
|
|
105
|
-
return googleAuthRouter;
|
|
106
|
-
}
|
|
107
|
-
export default getRouter;
|
|
108
|
-
//# sourceMappingURL=google.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/auth/providers/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type Request, type Response } from 'express';
|
|
2
|
-
import { ObjectId } from 'mongodb';
|
|
3
|
-
export interface OAuthUserData {
|
|
4
|
-
id: string;
|
|
5
|
-
email: string;
|
|
6
|
-
emailVerified: boolean;
|
|
7
|
-
providerName: 'google' | 'github';
|
|
8
|
-
}
|
|
9
|
-
export declare function authenticateUser(res: Response, userId: ObjectId): Promise<void>;
|
|
10
|
-
export declare function getRedirectUri(provider: string): string;
|
|
11
|
-
export declare function handleOAuthUserAuthentication(req: Request, res: Response, userData: OAuthUserData): Promise<void>;
|
|
12
|
-
export declare function validateOAuthCode(code: unknown): string | null;
|
|
13
|
-
//# sourceMappingURL=oauth-common.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-common.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/oauth-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACnC;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,iBAUrE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAqGf;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK9D"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { usersCollection } from '../../auth/db';
|
|
2
|
-
import { createSession } from '../../auth/session';
|
|
3
|
-
import { getAuthConfig } from '../../app/authConfig';
|
|
4
|
-
import { getCallContext } from '../../app/server';
|
|
5
|
-
import { getConfig } from '../../config/server';
|
|
6
|
-
export async function authenticateUser(res, userId) {
|
|
7
|
-
const { authToken } = await createSession(userId);
|
|
8
|
-
res.cookie('authToken', authToken, {
|
|
9
|
-
httpOnly: true,
|
|
10
|
-
secure: process.env.NODE_ENV === 'production',
|
|
11
|
-
sameSite: 'strict',
|
|
12
|
-
});
|
|
13
|
-
res.status(301);
|
|
14
|
-
res.redirect('/');
|
|
15
|
-
}
|
|
16
|
-
export function getRedirectUri(provider) {
|
|
17
|
-
return `${getConfig('_system.site.url')}/api/_internal/auth/${provider}/callback`;
|
|
18
|
-
}
|
|
19
|
-
export async function handleOAuthUserAuthentication(req, res, userData) {
|
|
20
|
-
const existingUser = await usersCollection.findOne({
|
|
21
|
-
[`authMethods.${userData.providerName}.id`]: userData.id,
|
|
22
|
-
});
|
|
23
|
-
const { session, connectionInfo } = await getCallContext(req);
|
|
24
|
-
try {
|
|
25
|
-
if (existingUser) {
|
|
26
|
-
await authenticateUser(res, existingUser._id);
|
|
27
|
-
getAuthConfig().onAfterLogin?.({
|
|
28
|
-
user: existingUser,
|
|
29
|
-
session,
|
|
30
|
-
connectionInfo,
|
|
31
|
-
});
|
|
32
|
-
getAuthConfig().login?.onSuccess?.(existingUser);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
if (error instanceof Error) {
|
|
38
|
-
getAuthConfig().login?.onError?.(error);
|
|
39
|
-
getAuthConfig().onLoginError?.({
|
|
40
|
-
error,
|
|
41
|
-
session,
|
|
42
|
-
connectionInfo,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
try {
|
|
48
|
-
if (!userData.email) {
|
|
49
|
-
res.status(400).json({
|
|
50
|
-
error: `Email address is required for ${userData.providerName} authentication.`,
|
|
51
|
-
});
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const existingUserByEmail = await usersCollection.findOne({ 'emails.address': userData.email }, { collation: { locale: 'en', strength: 2 } });
|
|
55
|
-
// TODO: check if the email is verified
|
|
56
|
-
if (existingUserByEmail) {
|
|
57
|
-
// TODO: handle case with an HTML page
|
|
58
|
-
res.status(400).json({
|
|
59
|
-
error: 'User with this email already exists. Please log in instead.',
|
|
60
|
-
});
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
// If the user does not exist, create a new user
|
|
64
|
-
const newUser = await usersCollection.insertOne({
|
|
65
|
-
handle: userData.email,
|
|
66
|
-
status: 'active',
|
|
67
|
-
emails: [
|
|
68
|
-
{
|
|
69
|
-
address: userData.email,
|
|
70
|
-
verified: userData.emailVerified,
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
createdAt: new Date(),
|
|
74
|
-
authMethods: {
|
|
75
|
-
[userData.providerName]: {
|
|
76
|
-
id: userData.id,
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
await authenticateUser(res, newUser.insertedId);
|
|
81
|
-
const userDocument = await usersCollection.findOne({ _id: newUser.insertedId }, { readPreference: 'primary' });
|
|
82
|
-
if (userDocument) {
|
|
83
|
-
getAuthConfig().onAfterSignup?.({
|
|
84
|
-
user: userDocument,
|
|
85
|
-
session,
|
|
86
|
-
connectionInfo,
|
|
87
|
-
});
|
|
88
|
-
getAuthConfig().signup?.onSuccess?.(userDocument);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
if (error instanceof Error) {
|
|
93
|
-
getAuthConfig().onSignupError?.({
|
|
94
|
-
error,
|
|
95
|
-
session,
|
|
96
|
-
connectionInfo,
|
|
97
|
-
});
|
|
98
|
-
getAuthConfig().signup?.onError?.(error);
|
|
99
|
-
}
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export function validateOAuthCode(code) {
|
|
104
|
-
if (!code || typeof code !== 'string') {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
return code;
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=oauth-common.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-common.js","sourceRoot":"","sources":["../../../src/auth/providers/oauth-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Args, Context } from '../methods/types';
|
|
2
|
-
export declare function handleSendResetPasswordToken(args: Args, { connectionInfo }: Context): Promise<{
|
|
3
|
-
success: boolean;
|
|
4
|
-
message: string;
|
|
5
|
-
}>;
|
|
6
|
-
export declare function handleResetPassword(args: Args, {}: Context): Promise<{
|
|
7
|
-
success: boolean;
|
|
8
|
-
message: string;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=resetPassword.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../src/auth/resetPassword.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAqChD,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,OAAO;;;GAyDzF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO;;;GAuChE"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { randomBytes } from 'crypto';
|
|
3
|
-
import { usersCollection, resetPasswordTokensCollection } from './db';
|
|
4
|
-
import { getEmailConfig } from '../app/emailConfig';
|
|
5
|
-
import { time } from '../time';
|
|
6
|
-
import { htmlToText } from '../utils';
|
|
7
|
-
import { validateEmail, validatePassword } from './validators';
|
|
8
|
-
import { hashPassword } from './password';
|
|
9
|
-
function resolveUrl(baseUrl, configuredUrl) {
|
|
10
|
-
if (!configuredUrl) {
|
|
11
|
-
return baseUrl;
|
|
12
|
-
}
|
|
13
|
-
if (configuredUrl.startsWith('http://') || configuredUrl.startsWith('https://')) {
|
|
14
|
-
return configuredUrl;
|
|
15
|
-
}
|
|
16
|
-
// Handle relative URL
|
|
17
|
-
return `${baseUrl}${configuredUrl.startsWith('/') ? '' : '/'}${configuredUrl}`;
|
|
18
|
-
}
|
|
19
|
-
function defaultPasswordResetTemplate({ email, resetUrl }) {
|
|
20
|
-
return `
|
|
21
|
-
<p>Hi,</p>
|
|
22
|
-
<p>We received a request to reset your password for ${email}.</p>
|
|
23
|
-
<p>Click the link below to reset your password:</p>
|
|
24
|
-
<p><a href="${resetUrl}">${resetUrl}</a></p>
|
|
25
|
-
<p>This link will expire in 1 hour.</p>
|
|
26
|
-
<p>If you did not request this password reset, please ignore this email.</p>
|
|
27
|
-
`;
|
|
28
|
-
}
|
|
29
|
-
const passwordResetSent = {
|
|
30
|
-
success: true,
|
|
31
|
-
message: 'If an account with that email exists, a password reset link has been sent',
|
|
32
|
-
};
|
|
33
|
-
export async function handleSendResetPasswordToken(args, { connectionInfo }) {
|
|
34
|
-
const email = validateEmail(args.email);
|
|
35
|
-
// Find user by email
|
|
36
|
-
const userDoc = await usersCollection.findOne({ 'emails.address': email, status: { $nin: ['deleted', 'disabled'] } }, { collation: { locale: 'en', strength: 2 } });
|
|
37
|
-
if (!userDoc) {
|
|
38
|
-
// For security, don't reveal if email exists or not
|
|
39
|
-
return passwordResetSent;
|
|
40
|
-
}
|
|
41
|
-
// Check if user has password auth method
|
|
42
|
-
if (!userDoc.authMethods?.password) {
|
|
43
|
-
return passwordResetSent;
|
|
44
|
-
}
|
|
45
|
-
const emailProvider = getEmailConfig().provider;
|
|
46
|
-
if (!emailProvider) {
|
|
47
|
-
throw new Error('Email provider is not configured');
|
|
48
|
-
}
|
|
49
|
-
// Generate reset token
|
|
50
|
-
const resetToken = randomBytes(32).toString('hex');
|
|
51
|
-
const now = Date.now();
|
|
52
|
-
const createdAt = new Date(now);
|
|
53
|
-
const expiresAt = new Date(now + time.hours(1)); // 1 hour expiry
|
|
54
|
-
// Store reset token
|
|
55
|
-
await resetPasswordTokensCollection.insertOne({
|
|
56
|
-
userId: userDoc._id,
|
|
57
|
-
token: resetToken,
|
|
58
|
-
createdAt,
|
|
59
|
-
expiresAt,
|
|
60
|
-
});
|
|
61
|
-
// Build reset URL
|
|
62
|
-
const baseUrl = process.env.MODELENCE_SITE_URL || connectionInfo?.baseUrl;
|
|
63
|
-
const resetPasswordUrl = resolveUrl(baseUrl, getEmailConfig().passwordReset?.redirectUrl);
|
|
64
|
-
const resetUrl = `${resetPasswordUrl}?token=${resetToken}`;
|
|
65
|
-
// Send email
|
|
66
|
-
const template = getEmailConfig()?.passwordReset?.template || defaultPasswordResetTemplate;
|
|
67
|
-
const htmlTemplate = template({ email, resetUrl, name: '' });
|
|
68
|
-
const textContent = htmlToText(htmlTemplate);
|
|
69
|
-
await emailProvider.sendEmail({
|
|
70
|
-
to: email,
|
|
71
|
-
from: getEmailConfig()?.from || 'noreply@modelence.com',
|
|
72
|
-
subject: getEmailConfig()?.passwordReset?.subject || 'Reset your password',
|
|
73
|
-
text: textContent,
|
|
74
|
-
html: htmlTemplate,
|
|
75
|
-
});
|
|
76
|
-
return passwordResetSent;
|
|
77
|
-
}
|
|
78
|
-
export async function handleResetPassword(args, {}) {
|
|
79
|
-
const token = z.string().parse(args.token);
|
|
80
|
-
const password = validatePassword(args.password);
|
|
81
|
-
// Find the reset token
|
|
82
|
-
const resetTokenDoc = await resetPasswordTokensCollection.findOne({ token });
|
|
83
|
-
if (!resetTokenDoc) {
|
|
84
|
-
throw new Error('Invalid or expired reset token');
|
|
85
|
-
}
|
|
86
|
-
// Check if token is expired
|
|
87
|
-
if (resetTokenDoc.expiresAt < new Date()) {
|
|
88
|
-
await resetPasswordTokensCollection.deleteOne({ token });
|
|
89
|
-
throw new Error('Reset token has expired');
|
|
90
|
-
}
|
|
91
|
-
// Find the user
|
|
92
|
-
const userDoc = await usersCollection.findOne({ _id: resetTokenDoc.userId });
|
|
93
|
-
if (!userDoc) {
|
|
94
|
-
throw new Error('User not found');
|
|
95
|
-
}
|
|
96
|
-
// Hash the new password
|
|
97
|
-
const hash = await hashPassword(password);
|
|
98
|
-
// Update user's password
|
|
99
|
-
await usersCollection.updateOne({ _id: userDoc._id }, {
|
|
100
|
-
$set: {
|
|
101
|
-
'authMethods.password.hash': hash,
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
// Delete the used reset token
|
|
105
|
-
await resetPasswordTokensCollection.deleteOne({ token });
|
|
106
|
-
return { success: true, message: 'Password has been reset successfully' };
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=resetPassword.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../src/auth/resetPassword.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/role.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { RoleDefinition, Role, Permission } from './types';
|
|
2
|
-
export declare function initRoles(roles: Record<Role, RoleDefinition>, _defaultRoles: Record<string, Role>): void;
|
|
3
|
-
export declare function getUnauthenticatedRoles(): string[];
|
|
4
|
-
export declare function getDefaultAuthenticatedRoles(): string[];
|
|
5
|
-
export declare function hasAccess(roles: Role[], requiredPermissions: Permission[]): boolean;
|
|
6
|
-
export declare function requireAccess(roles: Role[], requiredPermissions: Permission[]): void;
|
|
7
|
-
export declare function hasPermission(roles: Role[], permission: Permission): boolean;
|
|
8
|
-
//# sourceMappingURL=role.d.ts.map
|
package/dist/auth/role.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../src/auth/role.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAgB,UAAU,EAAE,MAAM,SAAS,CAAC;AAQzE,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,EACnC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAQpC;AAED,wBAAgB,uBAAuB,aAEtC;AAED,wBAAgB,4BAA4B,aAE3C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAEzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAQ7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,WAUlE"}
|
package/dist/auth/role.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
const roleMap = new Map();
|
|
2
|
-
const defaultRoles = {
|
|
3
|
-
authenticated: null,
|
|
4
|
-
unauthenticated: null,
|
|
5
|
-
};
|
|
6
|
-
export function initRoles(roles, _defaultRoles) {
|
|
7
|
-
defaultRoles.authenticated = _defaultRoles.authenticated;
|
|
8
|
-
defaultRoles.unauthenticated = _defaultRoles.unauthenticated;
|
|
9
|
-
for (const [name, definition] of Object.entries(roles)) {
|
|
10
|
-
roleMap.set(name, definition);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export function getUnauthenticatedRoles() {
|
|
14
|
-
return defaultRoles.unauthenticated ? [defaultRoles.unauthenticated] : [];
|
|
15
|
-
}
|
|
16
|
-
export function getDefaultAuthenticatedRoles() {
|
|
17
|
-
return defaultRoles.authenticated ? [defaultRoles.authenticated] : [];
|
|
18
|
-
}
|
|
19
|
-
export function hasAccess(roles, requiredPermissions) {
|
|
20
|
-
return requiredPermissions.every((permission) => hasPermission(roles, permission));
|
|
21
|
-
}
|
|
22
|
-
export function requireAccess(roles, requiredPermissions) {
|
|
23
|
-
const missingPermission = requiredPermissions.find((permission) => !hasPermission(roles, permission));
|
|
24
|
-
if (missingPermission) {
|
|
25
|
-
throw new Error(`Access denied - missing permission: '${missingPermission}'`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export function hasPermission(roles, permission) {
|
|
29
|
-
for (const role of roles) {
|
|
30
|
-
const definition = roleMap.get(role);
|
|
31
|
-
if (definition && definition.permissions.includes(permission)) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=role.js.map
|
package/dist/auth/role.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/auth/role.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;AAChD,MAAM,YAAY,GAAiB;IACjC,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,UAAU,SAAS,CACvB,KAAmC,EACnC,aAAmC;IAEnC,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC;IACzD,YAAY,CAAC,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,mBAAiC;IACxE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,mBAAiC;IAC5E,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAChD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAClD,CAAC;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,iBAAiB,GAAG,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,UAAsB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/auth/session.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { ObjectId } from 'mongodb';
|
|
2
|
-
import { Module } from '../app/module';
|
|
3
|
-
import { Store } from '../data/store';
|
|
4
|
-
import { Session } from './types';
|
|
5
|
-
export declare const sessionsCollection: Store<{
|
|
6
|
-
authToken: import("zod").ZodString;
|
|
7
|
-
createdAt: import("zod").ZodDate;
|
|
8
|
-
expiresAt: import("zod").ZodDate;
|
|
9
|
-
userId: import("zod").ZodNullable<import("zod").ZodType<ObjectId, import("zod").ZodTypeDef, ObjectId>>;
|
|
10
|
-
}, Record<string, (this: Pick<import("../types").InferDocumentType<{
|
|
11
|
-
authToken: import("zod").ZodString;
|
|
12
|
-
createdAt: import("zod").ZodDate;
|
|
13
|
-
expiresAt: import("zod").ZodDate;
|
|
14
|
-
userId: import("zod").ZodNullable<import("zod").ZodType<ObjectId, import("zod").ZodTypeDef, ObjectId>>;
|
|
15
|
-
}>, "authToken" | "createdAt" | "expiresAt" | "userId"> & {
|
|
16
|
-
_id: ObjectId;
|
|
17
|
-
}, ...args: any[]) => any>>;
|
|
18
|
-
export declare function obtainSession(authToken: string | null): Promise<Session>;
|
|
19
|
-
export declare function setSessionUser(authToken: string, userId: ObjectId): Promise<void>;
|
|
20
|
-
export declare function clearSessionUser(authToken: string): Promise<void>;
|
|
21
|
-
export declare function createSession(userId?: ObjectId | null): Promise<Session>;
|
|
22
|
-
declare const _default: Module;
|
|
23
|
-
export default _default;
|
|
24
|
-
//# sourceMappingURL=session.d.ts.map
|