@nymphjs/tilmeld 1.0.0-beta.80 → 1.0.0-beta.82

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 (67) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -1
  3. package/dist/AbleObject.js +2 -5
  4. package/dist/AbleObject.js.map +1 -1
  5. package/dist/Group.d.ts +3 -3
  6. package/dist/Group.js +42 -44
  7. package/dist/Group.js.map +1 -1
  8. package/dist/Group.test.js +11 -16
  9. package/dist/Group.test.js.map +1 -1
  10. package/dist/Tilmeld.d.ts +3 -4
  11. package/dist/Tilmeld.js +70 -76
  12. package/dist/Tilmeld.js.map +1 -1
  13. package/dist/Tilmeld.types.d.ts +2 -2
  14. package/dist/Tilmeld.types.js +1 -2
  15. package/dist/User.d.ts +4 -4
  16. package/dist/User.js +95 -89
  17. package/dist/User.js.map +1 -1
  18. package/dist/User.test.js +10 -15
  19. package/dist/User.test.js.map +1 -1
  20. package/dist/conf/d.d.ts +6 -4
  21. package/dist/conf/d.js +1 -2
  22. package/dist/conf/defaults.d.ts +1 -1
  23. package/dist/conf/defaults.js +59 -63
  24. package/dist/conf/defaults.js.map +1 -1
  25. package/dist/conf/index.d.ts +2 -2
  26. package/dist/conf/index.js +2 -8
  27. package/dist/conf/index.js.map +1 -1
  28. package/dist/enforceTilmeld.d.ts +1 -1
  29. package/dist/enforceTilmeld.js +4 -8
  30. package/dist/enforceTilmeld.js.map +1 -1
  31. package/dist/errors/AccessControlError.js +2 -6
  32. package/dist/errors/AccessControlError.js.map +1 -1
  33. package/dist/errors/BadDataError.js +2 -6
  34. package/dist/errors/BadDataError.js.map +1 -1
  35. package/dist/errors/BadEmailError.js +2 -6
  36. package/dist/errors/BadEmailError.js.map +1 -1
  37. package/dist/errors/BadUsernameError.js +2 -6
  38. package/dist/errors/BadUsernameError.js.map +1 -1
  39. package/dist/errors/CouldNotChangeDefaultPrimaryGroupError.js +1 -5
  40. package/dist/errors/CouldNotChangeDefaultPrimaryGroupError.js.map +1 -1
  41. package/dist/errors/EmailChangeRateLimitExceededError.js +1 -5
  42. package/dist/errors/EmailChangeRateLimitExceededError.js.map +1 -1
  43. package/dist/errors/index.d.ts +6 -6
  44. package/dist/errors/index.js +6 -22
  45. package/dist/errors/index.js.map +1 -1
  46. package/dist/index.d.ts +11 -11
  47. package/dist/index.js +16 -36
  48. package/dist/index.js.map +1 -1
  49. package/dist/tilmeldJoiProps.js +13 -18
  50. package/dist/tilmeldJoiProps.js.map +1 -1
  51. package/jest.config.js +11 -2
  52. package/package.json +27 -28
  53. package/src/Group.test.ts +2 -2
  54. package/src/Group.ts +12 -8
  55. package/src/Tilmeld.ts +9 -9
  56. package/src/Tilmeld.types.ts +2 -2
  57. package/src/User.test.ts +2 -2
  58. package/src/User.ts +77 -65
  59. package/src/conf/d.ts +6 -4
  60. package/src/conf/defaults.ts +7 -5
  61. package/src/conf/index.ts +2 -2
  62. package/src/enforceTilmeld.ts +1 -1
  63. package/src/errors/index.ts +6 -6
  64. package/src/index.ts +11 -11
  65. package/src/tilmeldJoiProps.ts +2 -2
  66. package/src/type/locutus.d.ts +3 -0
  67. package/tsconfig.json +3 -1
package/dist/index.js CHANGED
@@ -1,37 +1,17 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.User = exports.tilmeldJoiProps = exports.Tilmeld = exports.Group = exports.AbleObject = void 0;
21
- __exportStar(require("./conf"), exports);
22
- __exportStar(require("./enforceTilmeld"), exports);
23
- __exportStar(require("./errors"), exports);
24
- const AbleObject_1 = __importDefault(require("./AbleObject"));
25
- exports.AbleObject = AbleObject_1.default;
26
- __exportStar(require("./Group"), exports);
27
- const Group_1 = __importDefault(require("./Group"));
28
- exports.Group = Group_1.default;
29
- const Tilmeld_1 = __importDefault(require("./Tilmeld"));
30
- exports.Tilmeld = Tilmeld_1.default;
31
- __exportStar(require("./Tilmeld.types"), exports);
32
- const tilmeldJoiProps_1 = __importDefault(require("./tilmeldJoiProps"));
33
- exports.tilmeldJoiProps = tilmeldJoiProps_1.default;
34
- __exportStar(require("./User"), exports);
35
- const User_1 = __importDefault(require("./User"));
36
- exports.User = User_1.default;
1
+ export * from './conf/index.js';
2
+ export * from './enforceTilmeld.js';
3
+ export * from './errors/index.js';
4
+ import AbleObject from './AbleObject.js';
5
+ export { AbleObject };
6
+ export * from './Group.js';
7
+ import Group from './Group.js';
8
+ export { Group };
9
+ import Tilmeld from './Tilmeld.js';
10
+ export { Tilmeld };
11
+ export * from './Tilmeld.types.js';
12
+ import tilmeldJoiProps from './tilmeldJoiProps.js';
13
+ export { tilmeldJoiProps };
14
+ export * from './User.js';
15
+ import User from './User.js';
16
+ export { User };
37
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,yCAAuB;AAEvB,mDAAiC;AAEjC,2CAAyB;AAEzB,8DAAsC;AAC7B,qBADF,oBAAU,CACE;AAEnB,0CAAwB;AACxB,oDAA4B;AACnB,gBADF,eAAK,CACE;AAEd,wDAAgC;AACvB,kBADF,iBAAO,CACE;AAEhB,kDAAgC;AAEhC,wEAAgD;AACvC,0BADF,yBAAe,CACE;AAExB,yCAAuB;AACvB,kDAA0B;AACjB,eADF,cAAI,CACE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,cAAc,oBAAoB,CAAC;AAEnC,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,cAAc,WAAW,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -1,20 +1,15 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const nymph_1 = require("@nymphjs/nymph");
7
- const joi_1 = __importDefault(require("joi"));
8
- const User_1 = __importDefault(require("./User"));
9
- const Group_1 = __importDefault(require("./Group"));
10
- exports.default = {
11
- user: joi_1.default.object().instance(User_1.default),
12
- group: joi_1.default.object().instance(Group_1.default),
13
- acUser: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
14
- acGroup: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
15
- acOther: joi_1.default.number().valid(nymph_1.TilmeldAccessLevels.NO_ACCESS, nymph_1.TilmeldAccessLevels.READ_ACCESS, nymph_1.TilmeldAccessLevels.WRITE_ACCESS, nymph_1.TilmeldAccessLevels.FULL_ACCESS),
16
- acRead: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
17
- acWrite: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
18
- acFull: joi_1.default.array().items(joi_1.default.alternatives().try(joi_1.default.object().instance(User_1.default), joi_1.default.object().instance(Group_1.default))),
1
+ import { TilmeldAccessLevels } from '@nymphjs/nymph';
2
+ import Joi from 'joi';
3
+ import User from './User.js';
4
+ import Group from './Group.js';
5
+ export default {
6
+ user: Joi.object().instance(User),
7
+ group: Joi.object().instance(Group),
8
+ acUser: Joi.number().valid(TilmeldAccessLevels.NO_ACCESS, TilmeldAccessLevels.READ_ACCESS, TilmeldAccessLevels.WRITE_ACCESS, TilmeldAccessLevels.FULL_ACCESS),
9
+ acGroup: Joi.number().valid(TilmeldAccessLevels.NO_ACCESS, TilmeldAccessLevels.READ_ACCESS, TilmeldAccessLevels.WRITE_ACCESS, TilmeldAccessLevels.FULL_ACCESS),
10
+ acOther: Joi.number().valid(TilmeldAccessLevels.NO_ACCESS, TilmeldAccessLevels.READ_ACCESS, TilmeldAccessLevels.WRITE_ACCESS, TilmeldAccessLevels.FULL_ACCESS),
11
+ acRead: Joi.array().items(Joi.alternatives().try(Joi.object().instance(User), Joi.object().instance(Group))),
12
+ acWrite: Joi.array().items(Joi.alternatives().try(Joi.object().instance(User), Joi.object().instance(Group))),
13
+ acFull: Joi.array().items(Joi.alternatives().try(Joi.object().instance(User), Joi.object().instance(Group))),
19
14
  };
20
15
  //# sourceMappingURL=tilmeldJoiProps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tilmeldJoiProps.js","sourceRoot":"","sources":["../src/tilmeldJoiProps.ts"],"names":[],"mappings":";;;;;AAAA,0CAAqD;AACrD,8CAAsB;AAEtB,kDAA0B;AAC1B,oDAA4B;AAE5B,kBAAe;IACb,IAAI,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC;IACjC,KAAK,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC;IACnC,MAAM,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACxB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,2BAAmB,CAAC,SAAS,EAC7B,2BAAmB,CAAC,WAAW,EAC/B,2BAAmB,CAAC,YAAY,EAChC,2BAAmB,CAAC,WAAW,CAChC;IACD,MAAM,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;IACD,OAAO,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACxB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;IACD,MAAM,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,aAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAI,CAAC,EAC3B,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,CAC7B,CACF;CACF,CAAC"}
1
+ {"version":3,"file":"tilmeldJoiProps.js","sourceRoot":"","sources":["../src/tilmeldJoiProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,eAAe;IACb,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACxB,mBAAmB,CAAC,SAAS,EAC7B,mBAAmB,CAAC,WAAW,EAC/B,mBAAmB,CAAC,YAAY,EAChC,mBAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,mBAAmB,CAAC,SAAS,EAC7B,mBAAmB,CAAC,WAAW,EAC/B,mBAAmB,CAAC,YAAY,EAChC,mBAAmB,CAAC,WAAW,CAChC;IACD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACzB,mBAAmB,CAAC,SAAS,EAC7B,mBAAmB,CAAC,WAAW,EAC/B,mBAAmB,CAAC,YAAY,EAChC,mBAAmB,CAAC,WAAW,CAChC;IACD,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7B,CACF;IACD,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACxB,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7B,CACF;IACD,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CACvB,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CACpB,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7B,CACF;CACF,CAAC"}
package/jest.config.js CHANGED
@@ -1,6 +1,15 @@
1
+ import { createDefaultEsmPreset } from 'ts-jest';
2
+
3
+ const presetConfig = createDefaultEsmPreset();
4
+
1
5
  /** @type {import('ts-jest').JestConfigWithTsJest} */
2
- module.exports = {
3
- preset: 'ts-jest',
6
+ const jestConfig = {
7
+ ...presetConfig,
4
8
  testEnvironment: 'node',
5
9
  rootDir: 'src/',
10
+ moduleNameMapper: {
11
+ '^(\\.|\\.\\.)\\/(.+)\\.js': '$1/$2',
12
+ },
6
13
  };
14
+
15
+ export default jestConfig;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@nymphjs/tilmeld",
3
- "version": "1.0.0-beta.80",
3
+ "version": "1.0.0-beta.82",
4
4
  "description": "Nymph.js - Tilmeld User and Group System",
5
- "type": "commonjs",
5
+ "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "keywords": [
@@ -15,8 +15,8 @@
15
15
  "build": "tsc",
16
16
  "watch": "tsc --watch",
17
17
  "prepublish": "npm run clean && npm run build",
18
- "test": "jest",
19
- "test:watch": "jest --watch"
18
+ "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest",
19
+ "test:watch": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest --watch"
20
20
  },
21
21
  "publishConfig": {
22
22
  "access": "public"
@@ -31,36 +31,35 @@
31
31
  },
32
32
  "license": "Apache-2.0",
33
33
  "dependencies": {
34
- "@nymphjs/guid": "^1.0.0-beta.80",
35
- "@nymphjs/nymph": "^1.0.0-beta.80",
36
- "@nymphjs/server": "^1.0.0-beta.80",
37
- "crypto-js": "^4.2.0",
38
- "email-templates": "^11.1.1",
39
- "express": "^4.18.3",
40
- "joi": "^17.12.2",
34
+ "@nymphjs/guid": "^1.0.0-beta.82",
35
+ "@nymphjs/nymph": "^1.0.0-beta.82",
36
+ "@nymphjs/server": "^1.0.0-beta.82",
37
+ "email-templates": "^12.0.1",
38
+ "express": "^4.21.2",
39
+ "joi": "^17.13.3",
41
40
  "jsonwebtoken": "^9.0.2",
42
- "locutus": "^2.0.16",
43
- "lodash": "^4.17.21",
44
- "otpauth": "^9.2.2",
45
- "pug": "^3.0.2",
46
- "qrcode": "^1.5.3"
41
+ "locutus": "^2.0.32",
42
+ "lodash-es": "^4.17.21",
43
+ "otpauth": "^9.3.5",
44
+ "pug": "^3.0.3",
45
+ "qrcode": "^1.5.4"
47
46
  },
48
47
  "devDependencies": {
49
- "@nymphjs/client": "^1.0.0-beta.80",
50
- "@nymphjs/client-node": "^1.0.0-beta.80",
51
- "@nymphjs/driver-sqlite3": "^1.0.0-beta.80",
52
- "@tsconfig/recommended": "^1.0.3",
53
- "@types/crypto-js": "^4.2.2",
48
+ "@nymphjs/client": "^1.0.0-beta.82",
49
+ "@nymphjs/client-node": "^1.0.0-beta.82",
50
+ "@nymphjs/driver-sqlite3": "^1.0.0-beta.82",
51
+ "@tsconfig/recommended": "^1.0.8",
54
52
  "@types/email-templates": "^10.0.4",
55
- "@types/express": "^4.17.21",
56
- "@types/jest": "^29.5.12",
57
- "@types/jsonwebtoken": "^9.0.6",
53
+ "@types/express": "^5.0.0",
54
+ "@types/jest": "^29.5.14",
55
+ "@types/jsonwebtoken": "^9.0.7",
58
56
  "@types/locutus": "^0.0.8",
59
- "@types/lodash": "^4.14.202",
57
+ "@types/lodash-es": "^4.17.12",
60
58
  "@types/qrcode": "^1.5.5",
61
59
  "jest": "^29.7.0",
62
- "ts-jest": "^29.1.2",
63
- "typescript": "^5.3.3"
60
+ "ts-jest": "^29.2.5",
61
+ "ts-node": "^10.9.2",
62
+ "typescript": "^5.7.2"
64
63
  },
65
- "gitHead": "685cfbb55dbc7826d97af1f05c7cc32f06852a6f"
64
+ "gitHead": "d58504e21341daa0c374d7139306542504f0165e"
66
65
  }
package/src/Group.test.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
2
2
  import { Nymph, EntityUniqueConstraintError } from '@nymphjs/nymph';
3
3
 
4
- import Tilmeld from './Tilmeld';
5
- import defaults from './conf/defaults';
4
+ import Tilmeld from './Tilmeld.js';
5
+ import defaults from './conf/defaults.js';
6
6
 
7
7
  const tilmeld = new Tilmeld({
8
8
  appName: 'My App',
package/src/Group.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import crypto from 'node:crypto';
1
2
  import type {
2
3
  Nymph,
3
4
  EntityData,
@@ -7,19 +8,18 @@ import type {
7
8
  Selector,
8
9
  SerializedEntityData,
9
10
  } from '@nymphjs/nymph';
10
- import md5 from 'crypto-js/md5';
11
- import { difference } from 'lodash';
11
+ import { difference } from 'lodash-es';
12
12
 
13
- import { enforceTilmeld } from './enforceTilmeld';
14
- import AbleObject from './AbleObject';
13
+ import { enforceTilmeld } from './enforceTilmeld.js';
14
+ import AbleObject from './AbleObject.js';
15
15
  import {
16
16
  BadDataError,
17
17
  BadEmailError,
18
18
  BadUsernameError,
19
19
  CouldNotChangeDefaultPrimaryGroupError,
20
- } from './errors';
21
- import type User from './User';
22
- import type { UserData } from './User';
20
+ } from './errors/index.js';
21
+ import type User from './User.js';
22
+ import type { UserData } from './User.js';
23
23
 
24
24
  export type GroupData = {
25
25
  /**
@@ -271,7 +271,11 @@ export default class Group extends AbleObject<GroupData> {
271
271
  }
272
272
  return (
273
273
  'https://secure.gravatar.com/avatar/' +
274
- md5(this.$data.email.trim().toLowerCase()).toString() +
274
+ crypto
275
+ .createHash('sha256')
276
+ .update(this.$data.email.trim().toLowerCase())
277
+ .digest('hex')
278
+ .toLowerCase() +
275
279
  '?d=identicon&s=40'
276
280
  );
277
281
  }
package/src/Tilmeld.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { URL } from 'node:url';
1
2
  import {
2
3
  Nymph,
3
4
  EntityInterface,
@@ -7,16 +8,15 @@ import {
7
8
  TilmeldAccessLevels,
8
9
  ACProperties,
9
10
  } from '@nymphjs/nymph';
10
- import { URL } from 'url';
11
11
  import { Request, Response } from 'express';
12
- import { xor } from 'lodash';
13
-
14
- import { Config, ConfigDefaults as defaults } from './conf';
15
- import { AccessControlError } from './errors';
16
- import Group from './Group';
17
- import User, { UserData } from './User';
18
- import { AccessControlData } from './Tilmeld.types';
19
- import { enforceTilmeld } from './enforceTilmeld';
12
+ import { xor } from 'lodash-es';
13
+
14
+ import { Config, ConfigDefaults as defaults } from './conf/index.js';
15
+ import { AccessControlError } from './errors/index.js';
16
+ import Group from './Group.js';
17
+ import User, { UserData } from './User.js';
18
+ import { AccessControlData } from './Tilmeld.types.js';
19
+ import { enforceTilmeld } from './enforceTilmeld.js';
20
20
 
21
21
  /**
22
22
  * A user and group system for Nymph.js.
@@ -1,5 +1,5 @@
1
- import Group, { GroupData } from './Group';
2
- import User, { UserData } from './User';
1
+ import Group, { GroupData } from './Group.js';
2
+ import User, { UserData } from './User.js';
3
3
 
4
4
  export type AccessControlData = {
5
5
  user?: User & UserData;
package/src/User.test.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
2
2
  import { Nymph, EntityUniqueConstraintError } from '@nymphjs/nymph';
3
3
 
4
- import Tilmeld from './Tilmeld';
5
- import defaults from './conf/defaults';
4
+ import Tilmeld from './Tilmeld.js';
5
+ import defaults from './conf/defaults.js';
6
6
 
7
7
  const tilmeld = new Tilmeld({
8
8
  appName: 'My App',
package/src/User.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import crypto from 'node:crypto';
1
2
  import type {
2
3
  Nymph,
3
4
  EntityData,
@@ -8,24 +9,21 @@ import type {
8
9
  } from '@nymphjs/nymph';
9
10
  import { humanSecret, nanoid } from '@nymphjs/guid';
10
11
  import type { EmailOptions } from 'email-templates';
11
- import strtotime from 'locutus/php/datetime/strtotime';
12
- import Base64 from 'crypto-js/enc-base64';
13
- import sha256 from 'crypto-js/sha256';
14
- import md5 from 'crypto-js/md5';
15
- import { difference } from 'lodash';
12
+ import strtotime from 'locutus/php/datetime/strtotime.js';
13
+ import { difference } from 'lodash-es';
16
14
  import { TOTP, Secret } from 'otpauth';
17
15
  import { toDataURL } from 'qrcode';
18
16
 
19
- import { enforceTilmeld } from './enforceTilmeld';
20
- import AbleObject from './AbleObject';
21
- import type Group from './Group';
22
- import type { GroupData } from './Group';
17
+ import { enforceTilmeld } from './enforceTilmeld.js';
18
+ import AbleObject from './AbleObject.js';
19
+ import type Group from './Group.js';
20
+ import type { GroupData } from './Group.js';
23
21
  import {
24
22
  BadDataError,
25
23
  BadEmailError,
26
24
  BadUsernameError,
27
25
  EmailChangeRateLimitExceededError,
28
- } from './errors';
26
+ } from './errors/index.js';
29
27
 
30
28
  export type EventType =
31
29
  | 'checkUsername'
@@ -764,7 +762,11 @@ export default class User extends AbleObject<UserData> {
764
762
  }
765
763
  return (
766
764
  'https://secure.gravatar.com/avatar/' +
767
- md5(this.$data.email.trim().toLowerCase()).toString() +
765
+ crypto
766
+ .createHash('sha256')
767
+ .update(this.$data.email.trim().toLowerCase())
768
+ .digest('hex')
769
+ .toLowerCase() +
768
770
  '?d=identicon&s=40'
769
771
  );
770
772
  }
@@ -1206,12 +1208,18 @@ export default class User extends AbleObject<UserData> {
1206
1208
  case 'plain':
1207
1209
  return this.$data.password === password;
1208
1210
  case 'digest':
1209
- return this.$data.password === sha256(password).toString(Base64);
1211
+ return (
1212
+ this.$data.password ===
1213
+ crypto.createHash('sha256').update(password).digest('base64')
1214
+ );
1210
1215
  case 'salt':
1211
1216
  default:
1212
1217
  return (
1213
1218
  this.$data.password ===
1214
- sha256(password + this.$data.salt).toString(Base64)
1219
+ crypto
1220
+ .createHash('sha256')
1221
+ .update(password + this.$data.salt)
1222
+ .digest('base64')
1215
1223
  );
1216
1224
  }
1217
1225
  }
@@ -1341,14 +1349,18 @@ export default class User extends AbleObject<UserData> {
1341
1349
  break;
1342
1350
  case 'digest':
1343
1351
  delete this.$data.salt;
1344
- this.$data.password = sha256(password).toString(Base64);
1352
+ this.$data.password = crypto
1353
+ .createHash('sha256')
1354
+ .update(password)
1355
+ .digest('base64');
1345
1356
  break;
1346
1357
  case 'salt':
1347
1358
  default:
1348
1359
  this.$data.salt = nanoid();
1349
- this.$data.password = sha256(password + this.$data.salt).toString(
1350
- Base64,
1351
- );
1360
+ this.$data.password = crypto
1361
+ .createHash('sha256')
1362
+ .update(password + this.$data.salt)
1363
+ .digest('base64');
1352
1364
  break;
1353
1365
  }
1354
1366
  return this.$data.password;
@@ -2466,34 +2478,34 @@ export default class User extends AbleObject<UserData> {
2466
2478
  callback: T extends 'checkUsername'
2467
2479
  ? TilmeldCheckUsernameCallback
2468
2480
  : T extends 'beforeRegister'
2469
- ? TilmeldBeforeRegisterCallback
2470
- : T extends 'afterRegister'
2471
- ? TilmeldAfterRegisterCallback
2472
- : T extends 'beforeLogin'
2473
- ? TilmeldBeforeLoginCallback
2474
- : T extends 'afterLogin'
2475
- ? TilmeldAfterLoginCallback
2476
- : T extends 'beforeLogout'
2477
- ? TilmeldBeforeLogoutCallback
2478
- : T extends 'afterLogout'
2479
- ? TilmeldAfterLogoutCallback
2480
- : never,
2481
+ ? TilmeldBeforeRegisterCallback
2482
+ : T extends 'afterRegister'
2483
+ ? TilmeldAfterRegisterCallback
2484
+ : T extends 'beforeLogin'
2485
+ ? TilmeldBeforeLoginCallback
2486
+ : T extends 'afterLogin'
2487
+ ? TilmeldAfterLoginCallback
2488
+ : T extends 'beforeLogout'
2489
+ ? TilmeldBeforeLogoutCallback
2490
+ : T extends 'afterLogout'
2491
+ ? TilmeldAfterLogoutCallback
2492
+ : never,
2481
2493
  ) {
2482
2494
  const prop = (event + 'Callbacks') as T extends 'checkUsername'
2483
2495
  ? 'checkUsernameCallbacks'
2484
2496
  : T extends 'beforeRegister'
2485
- ? 'beforeRegisterCallbacks'
2486
- : T extends 'afterRegister'
2487
- ? 'afterRegisterCallbacks'
2488
- : T extends 'beforeLogin'
2489
- ? 'beforeLoginCallbacks'
2490
- : T extends 'afterLogin'
2491
- ? 'afterLoginCallbacks'
2492
- : T extends 'beforeLogout'
2493
- ? 'beforeLogoutCallbacks'
2494
- : T extends 'afterLogout'
2495
- ? 'afterLogoutCallbacks'
2496
- : never;
2497
+ ? 'beforeRegisterCallbacks'
2498
+ : T extends 'afterRegister'
2499
+ ? 'afterRegisterCallbacks'
2500
+ : T extends 'beforeLogin'
2501
+ ? 'beforeLoginCallbacks'
2502
+ : T extends 'afterLogin'
2503
+ ? 'afterLoginCallbacks'
2504
+ : T extends 'beforeLogout'
2505
+ ? 'beforeLogoutCallbacks'
2506
+ : T extends 'afterLogout'
2507
+ ? 'afterLogoutCallbacks'
2508
+ : never;
2497
2509
  if (!(prop in this)) {
2498
2510
  throw new Error('Invalid event type.');
2499
2511
  }
@@ -2507,34 +2519,34 @@ export default class User extends AbleObject<UserData> {
2507
2519
  callback: T extends 'checkUsername'
2508
2520
  ? TilmeldCheckUsernameCallback
2509
2521
  : T extends 'beforeRegister'
2510
- ? TilmeldBeforeRegisterCallback
2511
- : T extends 'afterRegister'
2512
- ? TilmeldAfterRegisterCallback
2513
- : T extends 'beforeLogin'
2514
- ? TilmeldBeforeLoginCallback
2515
- : T extends 'afterLogin'
2516
- ? TilmeldAfterLoginCallback
2517
- : T extends 'beforeLogout'
2518
- ? TilmeldBeforeLogoutCallback
2519
- : T extends 'afterLogout'
2520
- ? TilmeldAfterLogoutCallback
2521
- : never,
2522
+ ? TilmeldBeforeRegisterCallback
2523
+ : T extends 'afterRegister'
2524
+ ? TilmeldAfterRegisterCallback
2525
+ : T extends 'beforeLogin'
2526
+ ? TilmeldBeforeLoginCallback
2527
+ : T extends 'afterLogin'
2528
+ ? TilmeldAfterLoginCallback
2529
+ : T extends 'beforeLogout'
2530
+ ? TilmeldBeforeLogoutCallback
2531
+ : T extends 'afterLogout'
2532
+ ? TilmeldAfterLogoutCallback
2533
+ : never,
2522
2534
  ) {
2523
2535
  const prop = (event + 'Callbacks') as T extends 'checkUsername'
2524
2536
  ? 'checkUsernameCallbacks'
2525
2537
  : T extends 'beforeRegister'
2526
- ? 'beforeRegisterCallbacks'
2527
- : T extends 'afterRegister'
2528
- ? 'afterRegisterCallbacks'
2529
- : T extends 'beforeLogin'
2530
- ? 'beforeLoginCallbacks'
2531
- : T extends 'afterLogin'
2532
- ? 'afterLoginCallbacks'
2533
- : T extends 'beforeLogout'
2534
- ? 'beforeLogoutCallbacks'
2535
- : T extends 'afterLogout'
2536
- ? 'afterLogoutCallbacks'
2537
- : never;
2538
+ ? 'beforeRegisterCallbacks'
2539
+ : T extends 'afterRegister'
2540
+ ? 'afterRegisterCallbacks'
2541
+ : T extends 'beforeLogin'
2542
+ ? 'beforeLoginCallbacks'
2543
+ : T extends 'afterLogin'
2544
+ ? 'afterLoginCallbacks'
2545
+ : T extends 'beforeLogout'
2546
+ ? 'beforeLogoutCallbacks'
2547
+ : T extends 'afterLogout'
2548
+ ? 'afterLogoutCallbacks'
2549
+ : never;
2538
2550
  if (!(prop in this)) {
2539
2551
  return false;
2540
2552
  }
package/src/conf/d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import { EmailOptions, EmailConfig } from 'email-templates';
1
+ import type { EmailOptions, EmailConfig } from 'email-templates';
2
2
 
3
- import type Tilmeld from '../Tilmeld';
4
- import Group, { GroupData } from '../Group';
5
- import User, { UserData } from '../User';
3
+ import type Tilmeld from '../Tilmeld.js';
4
+ import type Group from '../Group.js';
5
+ import type { GroupData } from '../Group.js';
6
+ import type User from '../User.js';
7
+ import type { UserData } from '../User.js';
6
8
 
7
9
  /**
8
10
  * Tilmeld Config
@@ -1,14 +1,16 @@
1
- import path from 'path';
2
- import { URL } from 'url';
1
+ import path from 'node:path';
2
+ import { URL, fileURLToPath } from 'node:url';
3
3
  import jwt from 'jsonwebtoken';
4
4
  import Email from 'email-templates';
5
5
  import Joi from 'joi';
6
6
  import { nanoid } from '@nymphjs/guid';
7
7
  import { nymphJoiProps } from '@nymphjs/nymph';
8
8
 
9
- import { Config } from './d';
10
- import User from '../User';
11
- import Group from '../Group';
9
+ import type { Config } from './d.js';
10
+ import User from '../User.js';
11
+ import Group from '../Group.js';
12
+
13
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
14
 
13
15
  export default {
14
16
  appName: 'My Nymph App',
package/src/conf/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Config } from './d';
1
+ export { Config } from './d.js';
2
2
 
3
- import defaults from './defaults';
3
+ import defaults from './defaults.js';
4
4
  export { defaults as ConfigDefaults };
@@ -1,6 +1,6 @@
1
1
  import { Entity, EntityConstructor, Nymph } from '@nymphjs/nymph';
2
2
 
3
- import Tilmeld from './Tilmeld';
3
+ import Tilmeld from './Tilmeld.js';
4
4
 
5
5
  export function enforceTilmeld(object: Nymph | Entity | EntityConstructor) {
6
6
  let tilmeld: Tilmeld | undefined;
@@ -1,11 +1,11 @@
1
- export * from './AccessControlError';
1
+ export * from './AccessControlError.js';
2
2
 
3
- export * from './BadDataError';
3
+ export * from './BadDataError.js';
4
4
 
5
- export * from './BadEmailError';
5
+ export * from './BadEmailError.js';
6
6
 
7
- export * from './BadUsernameError';
7
+ export * from './BadUsernameError.js';
8
8
 
9
- export * from './CouldNotChangeDefaultPrimaryGroupError';
9
+ export * from './CouldNotChangeDefaultPrimaryGroupError.js';
10
10
 
11
- export * from './EmailChangeRateLimitExceededError';
11
+ export * from './EmailChangeRateLimitExceededError.js';
package/src/index.ts CHANGED
@@ -1,24 +1,24 @@
1
- export * from './conf';
1
+ export * from './conf/index.js';
2
2
 
3
- export * from './enforceTilmeld';
3
+ export * from './enforceTilmeld.js';
4
4
 
5
- export * from './errors';
5
+ export * from './errors/index.js';
6
6
 
7
- import AbleObject from './AbleObject';
7
+ import AbleObject from './AbleObject.js';
8
8
  export { AbleObject };
9
9
 
10
- export * from './Group';
11
- import Group from './Group';
10
+ export * from './Group.js';
11
+ import Group from './Group.js';
12
12
  export { Group };
13
13
 
14
- import Tilmeld from './Tilmeld';
14
+ import Tilmeld from './Tilmeld.js';
15
15
  export { Tilmeld };
16
16
 
17
- export * from './Tilmeld.types';
17
+ export * from './Tilmeld.types.js';
18
18
 
19
- import tilmeldJoiProps from './tilmeldJoiProps';
19
+ import tilmeldJoiProps from './tilmeldJoiProps.js';
20
20
  export { tilmeldJoiProps };
21
21
 
22
- export * from './User';
23
- import User from './User';
22
+ export * from './User.js';
23
+ import User from './User.js';
24
24
  export { User };