@nymphjs/tilmeld-setup 1.0.0-beta.13 → 1.0.0-beta.130

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/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { NymphOptions } from '@nymphjs/client';
2
- import { Nymph } from '@nymphjs/nymph';
3
- export declare function setup(options: NymphOptions, nymph: Nymph): import("express-serve-static-core").Express;
1
+ import type { NymphOptions } from '@nymphjs/client';
2
+ import type { Nymph } from '@nymphjs/nymph';
3
+ export declare function setup(options: NymphOptions, nymph: Nymph, { allowRegistration }?: {
4
+ allowRegistration?: boolean;
5
+ }): import("express-serve-static-core").Express;
4
6
  export default setup;
package/dist/index.js CHANGED
@@ -1,17 +1,12 @@
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
- exports.setup = void 0;
7
- const express_1 = __importDefault(require("express"));
8
- const strtotime_1 = __importDefault(require("locutus/php/datetime/strtotime"));
9
- function setup(options, nymph) {
10
- const app = (0, express_1.default)();
11
- if (!nymph.tilmeld) {
12
- throw new Error('You need to configure Tilmeld on your Nymph instance first.');
13
- }
14
- const tilmeld = nymph.tilmeld;
1
+ import { dirname } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import express from 'express';
4
+ import { strtotime } from 'locutus/php/datetime/index';
5
+ import { enforceTilmeld } from '@nymphjs/tilmeld';
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ export function setup(options, nymph, { allowRegistration = false } = {}) {
8
+ const app = express();
9
+ const tilmeld = enforceTilmeld(nymph);
15
10
  app.use('/verify', async (request, response, next) => {
16
11
  if (!tilmeld.config.verifyEmail || request.query.action == null) {
17
12
  next();
@@ -74,6 +69,7 @@ function setup(options, nymph) {
74
69
  printError(500, 'An error occurred.');
75
70
  return;
76
71
  case 'verify':
72
+ // Verify new user's email address.
77
73
  if (user.secret == null || request.query.secret !== user.secret) {
78
74
  printError(500, 'An error occurred.');
79
75
  return;
@@ -85,6 +81,7 @@ function setup(options, nymph) {
85
81
  delete user.secret;
86
82
  break;
87
83
  case 'verifychange':
84
+ // Email address change.
88
85
  if (user.newEmailSecret == null ||
89
86
  user.newEmailAddress == null ||
90
87
  request.query.secret !== user.newEmailSecret) {
@@ -110,6 +107,7 @@ function setup(options, nymph) {
110
107
  delete user.newEmailSecret;
111
108
  break;
112
109
  case 'cancelchange':
110
+ // Cancel an email address change.
113
111
  if (user.cancelEmailSecret == null ||
114
112
  user.cancelEmailAddress == null ||
115
113
  request.query.secret !== user.cancelEmailSecret) {
@@ -119,7 +117,7 @@ function setup(options, nymph) {
119
117
  if (tilmeld.config.emailRateLimit !== '' &&
120
118
  user.emailChangeDate != null &&
121
119
  user.emailChangeDate <
122
- ((0, strtotime_1.default)('-' + tilmeld.config.emailRateLimit) || 0) * 1000) {
120
+ (strtotime('-' + tilmeld.config.emailRateLimit) || 0) * 1000) {
123
121
  printError(400, "That email change cancellation link has expired. Please contact an administrator if you can't access your account.");
124
122
  return;
125
123
  }
@@ -134,7 +132,8 @@ function setup(options, nymph) {
134
132
  delete user.cancelEmailSecret;
135
133
  break;
136
134
  }
137
- if (await user.$saveSkipAC()) {
135
+ try {
136
+ await user.$saveSkipAC();
138
137
  switch (request.query.action) {
139
138
  case 'verify':
140
139
  default:
@@ -148,20 +147,21 @@ function setup(options, nymph) {
148
147
  break;
149
148
  }
150
149
  }
151
- else {
150
+ catch (e) {
152
151
  printError(500, 'An error occurred.');
153
152
  }
154
153
  });
155
154
  app.get('/options.js', async (_request, response) => {
156
155
  response.type('text/javascript');
157
- response.send(`window.nymphOptions = ${JSON.stringify(options)};`);
156
+ response.send(`window.nymphOptions = ${JSON.stringify(options)};\n` +
157
+ `window.allowRegistration = ${JSON.stringify(allowRegistration)};\n` +
158
+ `window.appUrl = ${JSON.stringify(tilmeld.config.appUrl)};`);
158
159
  });
159
- app.use('/app', express_1.default.static(__dirname + '/app', {
160
+ app.use('/app', express.static(__dirname + '/app', {
160
161
  fallthrough: true,
161
162
  }));
162
- app.use(express_1.default.static(__dirname + '/../static', { fallthrough: false }));
163
+ app.use(express.static(__dirname + '/../static', { fallthrough: false }));
163
164
  return app;
164
165
  }
165
- exports.setup = setup;
166
- exports.default = setup;
166
+ export default setup;
167
167
  //# 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,KAAK,CACnB,OAAqB,EACrB,KAAY,EACZ,EAAE,iBAAiB,GAAG,KAAK,EAAE,GAAoC,EAAE;IAEnE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACnD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAChE,IAAI,EAAE,CAAC;QACT,CAAC;QAED,SAAS,UAAU,CAAC,IAAY;YAC9B,IAAI,GAAG,GAA4B;gBACjC,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,QAAQ;gBACb,GAAG,EAAE,QAAQ;aACd,CAAC;YAEF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;gBACzC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS,YAAY,CAAC,MAAc,EAAE,QAAgB;YACpD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEzC,QAAQ,CAAC,IAAI,CAAC;;;;;;kDAM8B,UAAU,CAAC,QAAQ,CAAC;;;;QAI9D,UAAU,CAAC,MAAM,CAAC;;;;;QAKlB,CAAC,CAAC;QACN,CAAC;QAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAAc;YAC9C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEtB,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;QASZ,UAAU,CAAC,MAAM,CAAC;;;QAGlB,CAAC,CAAC;QACN,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,QAAQ,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B;gBACE,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;gBACtC,OAAO;YACT,KAAK,QAAQ;gBACX,mCAAmC;gBACnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChE,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;oBACtC,OAAO;gBACT,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBACpC,IAAI,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CACnC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EACtC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CACjD,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,OAAO,IAAI,CAAC,MAAM,CAAC;gBACnB,MAAM;YACR,KAAK,cAAc;gBACjB,wBAAwB;gBACxB,IACE,IAAI,CAAC,cAAc,IAAI,IAAI;oBAC3B,IAAI,CAAC,eAAe,IAAI,IAAI;oBAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,EAC5C,CAAC;oBACD,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;oBACtC,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;gBAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC3C,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;wBACjC,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBAED,OAAO,IAAI,CAAC,eAAe,CAAC;gBAC5B,OAAO,IAAI,CAAC,cAAc,CAAC;gBAC3B,MAAM;YACR,KAAK,cAAc;gBACjB,kCAAkC;gBAClC,IACE,IAAI,CAAC,iBAAiB,IAAI,IAAI;oBAC9B,IAAI,CAAC,kBAAkB,IAAI,IAAI;oBAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAC/C,CAAC;oBACD,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;oBACtC,OAAO;gBACT,CAAC;gBAED,IACE,OAAO,CAAC,MAAM,CAAC,cAAc,KAAK,EAAE;oBACpC,IAAI,CAAC,eAAe,IAAI,IAAI;oBAC5B,IAAI,CAAC,eAAe;wBAClB,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAC9D,CAAC;oBACD,UAAU,CACR,GAAG,EACH,oHAAoH,CACrH,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC9C,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC7B,CAAC;gBAED,OAAO,IAAI,CAAC,eAAe,CAAC;gBAC5B,OAAO,IAAI,CAAC,cAAc,CAAC;gBAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC;gBAC/B,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC9B,MAAM;QACV,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,QAAQ,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC7B,KAAK,QAAQ,CAAC;gBACd;oBACE,YAAY,CACV,iCAAiC,EACjC,OAAO,CAAC,MAAM,CAAC,cAAc,CAC9B,CAAC;oBACF,MAAM;gBACR,KAAK,cAAc;oBACjB,YAAY,CACV,2CAA2C,EAC3C,OAAO,CAAC,MAAM,CAAC,oBAAoB,CACpC,CAAC;oBACF,MAAM;gBACR,KAAK,cAAc;oBACjB,YAAY,CACV,6CAA6C,EAC7C,OAAO,CAAC,MAAM,CAAC,oBAAoB,CACpC,CAAC;oBACF,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,UAAU,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAClD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,QAAQ,CAAC,IAAI,CACX,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK;YACnD,8BAA8B,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK;YACpE,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAC9D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,MAAM,EACN,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,EAAE;QACjC,WAAW,EAAE,IAAI;KAClB,CAAC,CACH,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,YAAY,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE1E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,eAAe,KAAK,CAAC"}
package/jest.config.js CHANGED
@@ -1,6 +1,32 @@
1
- /** @type {import('ts-jest').JestConfigWithTsJest} */
2
- module.exports = {
3
- preset: 'ts-jest',
4
- testEnvironment: 'node',
5
- rootDir: 'src/',
1
+ const jestConfig = {
2
+ extensionsToTreatAsEsm: ['.ts', '.tsx'],
3
+ testMatch: [
4
+ '<rootDir>/src/**/__tests__/**/*.{js,ts,jsx,tsx,mjs,mts}',
5
+ '<rootDir>/src/**/?(*.)(spec|test).{js,ts,jsx,tsx,mjs,mts}',
6
+ ],
7
+ transform: {
8
+ '^.+\\.(ts|tsx|mts)$': [
9
+ '@swc/jest',
10
+ {
11
+ jsc: {
12
+ parser: {
13
+ syntax: 'typescript',
14
+ tsx: true,
15
+ decorators: true,
16
+ },
17
+ target: 'es2024',
18
+ },
19
+ module: {
20
+ type: 'commonjs',
21
+ },
22
+ },
23
+ ],
24
+ },
25
+ transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$'],
26
+ moduleDirectories: ['node_modules', 'src'],
27
+ moduleNameMapper: {
28
+ '^(\\.|\\.\\.)\\/(.+)\\.js': '$1/$2',
29
+ },
6
30
  };
31
+
32
+ export default jestConfig;
package/package.json CHANGED
@@ -1,91 +1,102 @@
1
1
  {
2
2
  "name": "@nymphjs/tilmeld-setup",
3
- "version": "1.0.0-beta.13",
4
- "description": "NymphJS - Tilmeld Setup App",
5
- "type": "commonjs",
3
+ "version": "1.0.0-beta.130",
4
+ "description": "Nymph.js - Tilmeld Setup App",
5
+ "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "keywords": [
9
9
  "nymph",
10
- "ORM",
11
- "object relational mapper"
10
+ "nymph.js",
11
+ "application data framework",
12
+ "application data and access framework",
13
+ "tilmeld",
14
+ "user and group management"
12
15
  ],
13
16
  "scripts": {
14
17
  "clean": "test -d dist && rm -r dist || true",
15
18
  "build": "npm run build:server && npm run build:app && npm run build:app:theme",
16
19
  "build:server": "tsc -p tsconfig.server.json",
17
- "build:app": "webpack",
20
+ "build:app": "NODE_ENV=\"production\" rollup -c",
18
21
  "build:app:theme": "smui-theme compile dist/app/smui.css -i app/theme",
19
22
  "watch:server": "tsc --watch -p tsconfig.server.json",
20
- "watch:app": "webpack --watch",
21
- "prepare": "npm run clean && npm run build",
22
- "test": "jest",
23
- "test:watch": "jest --watch"
23
+ "watch:app": "NODE_ENV=\"development\" rollup -c --watch",
24
+ "prepublish": "npm run clean && npm run build",
25
+ "typecheck": "npx tsc --noEmit",
26
+ "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests",
27
+ "test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests --watch"
24
28
  },
25
29
  "publishConfig": {
26
30
  "access": "public"
27
31
  },
32
+ "homepage": "https://nymph.io",
28
33
  "repository": {
29
34
  "type": "git",
30
- "url": "git+https://github.com/sciactive/nymphjs.git"
35
+ "url": "https://forge.sciactive.com/sciactive/nymphjs.git",
36
+ "directory": "packages/tilmeld-setup"
31
37
  },
32
- "author": "Hunter Perrin <hperrin@gmail.com>",
38
+ "author": "Hunter Perrin <hperrin@port87.com>",
33
39
  "bugs": {
34
- "url": "https://github.com/sciactive/nymphjs/issues"
40
+ "url": "https://forge.sciactive.com/sciactive/nymphjs/issues"
35
41
  },
36
42
  "license": "Apache-2.0",
37
43
  "dependencies": {
38
- "@nymphjs/nymph": "^1.0.0-beta.13",
39
- "@nymphjs/tilmeld": "^1.0.0-beta.13",
40
- "express": "^4.18.2",
41
- "locutus": "^2.0.16"
44
+ "@nymphjs/nymph": "^1.0.0-beta.130",
45
+ "@nymphjs/tilmeld": "^1.0.0-beta.130",
46
+ "express": "^5.2.1",
47
+ "locutus": "^3.0.36"
42
48
  },
43
49
  "devDependencies": {
44
50
  "@material/elevation": "^14.0.0",
45
51
  "@material/typography": "^14.0.0",
46
- "@mdi/js": "^7.1.96",
47
- "@nymphjs/client": "^1.0.0-beta.13",
48
- "@nymphjs/driver-sqlite3": "^1.0.0-beta.13",
49
- "@nymphjs/query-parser": "^1.0.0-beta.13",
50
- "@nymphjs/server": "^1.0.0-beta.13",
51
- "@nymphjs/tilmeld-client": "^1.0.0-beta.13",
52
- "@nymphjs/tilmeld-components": "^1.0.0-beta.13",
53
- "@smui/button": "^7.0.0-beta.0",
54
- "@smui/card": "^7.0.0-beta.0",
55
- "@smui/checkbox": "^7.0.0-beta.0",
56
- "@smui/circular-progress": "^7.0.0-beta.0",
57
- "@smui/common": "^7.0.0-beta.0",
58
- "@smui/data-table": "^7.0.0-beta.0",
59
- "@smui/dialog": "^7.0.0-beta.0",
60
- "@smui/drawer": "^7.0.0-beta.0",
61
- "@smui/fab": "^7.0.0-beta.0",
62
- "@smui/form-field": "^7.0.0-beta.0",
63
- "@smui/icon-button": "^7.0.0-beta.0",
64
- "@smui/layout-grid": "^7.0.0-beta.0",
65
- "@smui/list": "^7.0.0-beta.0",
66
- "@smui/menu": "^7.0.0-beta.0",
67
- "@smui/paper": "^7.0.0-beta.0",
68
- "@smui/radio": "^7.0.0-beta.0",
69
- "@smui/tab": "^7.0.0-beta.0",
70
- "@smui/tab-bar": "^7.0.0-beta.0",
71
- "@smui/textfield": "^7.0.0-beta.0",
72
- "@smui/top-app-bar": "^7.0.0-beta.0",
73
- "@tsconfig/recommended": "^1.0.2",
74
- "@tsconfig/svelte": "^3.0.0",
75
- "@types/express": "^4.17.17",
76
- "@types/jest": "^29.4.0",
77
- "@types/locutus": "^0.0.6",
78
- "jest": "^29.4.3",
79
- "smui-theme": "^7.0.0-beta.0",
80
- "svelte": "^3.55.1",
81
- "svelte-check": "^3.0.4",
82
- "svelte-loader": "^3.1.7",
83
- "svelte-preprocess": "^5.0.1",
84
- "ts-jest": "^29.0.5",
85
- "ts-loader": "^9.4.2",
86
- "typescript": "~4.9.5",
87
- "webpack": "^5.75.0",
88
- "webpack-cli": "^5.0.1"
52
+ "@mdi/js": "^7.4.47",
53
+ "@nymphjs/client": "^1.0.0-beta.130",
54
+ "@nymphjs/driver-sqlite3": "^1.0.0-beta.130",
55
+ "@nymphjs/query-parser": "^1.0.0-beta.130",
56
+ "@nymphjs/server": "^1.0.0-beta.130",
57
+ "@nymphjs/tilmeld-client": "^1.0.0-beta.130",
58
+ "@nymphjs/tilmeld-components": "^1.0.0-beta.130",
59
+ "@rollup/plugin-commonjs": "^29.0.3",
60
+ "@rollup/plugin-node-resolve": "^16.0.3",
61
+ "@rollup/plugin-sucrase": "^5.1.0",
62
+ "@rollup/plugin-typescript": "^12.3.0",
63
+ "@smui/button": "^9.0.2",
64
+ "@smui/card": "^9.0.2",
65
+ "@smui/checkbox": "^9.0.2",
66
+ "@smui/circular-progress": "^9.0.2",
67
+ "@smui/common": "^9.0.2",
68
+ "@smui/data-table": "^9.0.2",
69
+ "@smui/dialog": "^9.0.2",
70
+ "@smui/drawer": "^9.0.2",
71
+ "@smui/fab": "^9.0.2",
72
+ "@smui/form-field": "^9.0.2",
73
+ "@smui/icon-button": "^9.0.2",
74
+ "@smui/layout-grid": "^9.0.2",
75
+ "@smui/list": "^9.0.2",
76
+ "@smui/menu": "^9.0.2",
77
+ "@smui/paper": "^9.0.2",
78
+ "@smui/radio": "^9.0.2",
79
+ "@smui/tab": "^9.0.2",
80
+ "@smui/tab-bar": "^9.0.2",
81
+ "@smui/textfield": "^9.0.2",
82
+ "@smui/top-app-bar": "^9.0.2",
83
+ "@swc/core": "^1.16.1",
84
+ "@swc/jest": "^0.2.39",
85
+ "@tsconfig/recommended": "^1.0.13",
86
+ "@tsconfig/svelte": "^5.0.8",
87
+ "@types/express": "^5.0.6",
88
+ "@types/jest": "^30.0.0",
89
+ "@types/locutus": "^0.0.8",
90
+ "cross-env": "^10.1.0",
91
+ "jest": "^30.4.2",
92
+ "rollup": "^4.62.5",
93
+ "rollup-plugin-postcss": "^4.0.2",
94
+ "rollup-plugin-svelte": "^7.2.3",
95
+ "smui-theme": "^9.0.3",
96
+ "svelte": "^5.56.10",
97
+ "svelte-spa-router": "^5.1.1",
98
+ "tslib": "^2.8.1",
99
+ "typescript": "^7.0.2"
89
100
  },
90
- "gitHead": "fcc750b12db6426cbf9dbd38618280c1ba965491"
101
+ "gitHead": "c6f7f2da04eec397ac1f9c64f1ce2ccc7fd47292"
91
102
  }
@@ -0,0 +1,36 @@
1
+ import svelte from 'rollup-plugin-svelte';
2
+ import resolve from '@rollup/plugin-node-resolve';
3
+ // This doesn't work with TS7
4
+ // import typescript from '@rollup/plugin-typescript';
5
+ import sucrase from '@rollup/plugin-sucrase';
6
+ import commonjs from '@rollup/plugin-commonjs';
7
+ import postcss from 'rollup-plugin-postcss';
8
+
9
+ export default {
10
+ input: 'app/index.ts',
11
+ output: {
12
+ file: 'dist/app/index.js',
13
+ format: 'iife',
14
+ },
15
+ plugins: [
16
+ resolve({
17
+ browser: true,
18
+ exportConditions: ['svelte'],
19
+ extensions: ['.svelte', '.mjs', '.js', '.json', '.node'],
20
+ dedupe: ['svelte'],
21
+ }),
22
+ commonjs(),
23
+ // typescript(),
24
+ sucrase({
25
+ exclude: ['node_modules/**'],
26
+ include: ['**/*.ts', '**/*.tsx', '**/*.mts'],
27
+ transforms: ['typescript'],
28
+ }),
29
+ svelte({
30
+ emitCss: true,
31
+ }),
32
+ postcss({
33
+ extract: true,
34
+ }),
35
+ ],
36
+ };
package/src/index.ts CHANGED
@@ -1,19 +1,20 @@
1
+ import { dirname } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
1
3
  import express from 'express';
2
- import strtotime from 'locutus/php/datetime/strtotime';
3
- import { NymphOptions } from '@nymphjs/client';
4
- import { Nymph } from '@nymphjs/nymph';
5
- import type { Tilmeld } from '@nymphjs/tilmeld';
6
-
7
- export function setup(options: NymphOptions, nymph: Nymph) {
4
+ import { strtotime } from 'locutus/php/datetime/index';
5
+ import type { NymphOptions } from '@nymphjs/client';
6
+ import type { Nymph } from '@nymphjs/nymph';
7
+ import { enforceTilmeld } from '@nymphjs/tilmeld';
8
+
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+
11
+ export function setup(
12
+ options: NymphOptions,
13
+ nymph: Nymph,
14
+ { allowRegistration = false }: { allowRegistration?: boolean } = {},
15
+ ) {
8
16
  const app = express();
9
-
10
- if (!nymph.tilmeld) {
11
- throw new Error(
12
- 'You need to configure Tilmeld on your Nymph instance first.'
13
- );
14
- }
15
-
16
- const tilmeld = nymph.tilmeld as Tilmeld;
17
+ const tilmeld = enforceTilmeld(nymph);
17
18
 
18
19
  app.use('/verify', async (request, response, next) => {
19
20
  if (!tilmeld.config.verifyEmail || request.query.action == null) {
@@ -95,7 +96,7 @@ export function setup(options: NymphOptions, nymph: Nymph) {
95
96
  if (tilmeld.config.unverifiedAccess) {
96
97
  user.groups = await nymph.getEntities(
97
98
  { class: tilmeld.Group, skipAc: true },
98
- { type: '&', equal: ['defaultSecondary', true] }
99
+ { type: '&', equal: ['defaultSecondary', true] },
99
100
  );
100
101
  }
101
102
  user.enabled = true;
@@ -151,7 +152,7 @@ export function setup(options: NymphOptions, nymph: Nymph) {
151
152
  ) {
152
153
  printError(
153
154
  400,
154
- "That email change cancellation link has expired. Please contact an administrator if you can't access your account."
155
+ "That email change cancellation link has expired. Please contact an administrator if you can't access your account.",
155
156
  );
156
157
  return;
157
158
  }
@@ -169,43 +170,48 @@ export function setup(options: NymphOptions, nymph: Nymph) {
169
170
  break;
170
171
  }
171
172
 
172
- if (await user.$saveSkipAC()) {
173
+ try {
174
+ await user.$saveSkipAC();
173
175
  switch (request.query.action) {
174
176
  case 'verify':
175
177
  default:
176
178
  printSuccess(
177
179
  'Your account has been verified.',
178
- tilmeld.config.verifyRedirect
180
+ tilmeld.config.verifyRedirect,
179
181
  );
180
182
  break;
181
183
  case 'verifychange':
182
184
  printSuccess(
183
185
  'Your new email address has been verified.',
184
- tilmeld.config.verifyChangeRedirect
186
+ tilmeld.config.verifyChangeRedirect,
185
187
  );
186
188
  break;
187
189
  case 'cancelchange':
188
190
  printSuccess(
189
191
  'The email address change has been canceled.',
190
- tilmeld.config.cancelChangeRedirect
192
+ tilmeld.config.cancelChangeRedirect,
191
193
  );
192
194
  break;
193
195
  }
194
- } else {
196
+ } catch (e: any) {
195
197
  printError(500, 'An error occurred.');
196
198
  }
197
199
  });
198
200
 
199
201
  app.get('/options.js', async (_request, response) => {
200
202
  response.type('text/javascript');
201
- response.send(`window.nymphOptions = ${JSON.stringify(options)};`);
203
+ response.send(
204
+ `window.nymphOptions = ${JSON.stringify(options)};\n` +
205
+ `window.allowRegistration = ${JSON.stringify(allowRegistration)};\n` +
206
+ `window.appUrl = ${JSON.stringify(tilmeld.config.appUrl)};`,
207
+ );
202
208
  });
203
209
 
204
210
  app.use(
205
211
  '/app',
206
212
  express.static(__dirname + '/app', {
207
213
  fallthrough: true,
208
- })
214
+ }),
209
215
  );
210
216
  app.use(express.static(__dirname + '/../static', { fallthrough: false }));
211
217
 
package/static/index.html CHANGED
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <head>
3
3
  <title>Tilmeld Setup App</title>
4
4
 
@@ -24,6 +24,9 @@
24
24
  <!-- SMUI CSS -->
25
25
  <link rel="stylesheet" href="app/smui.css" />
26
26
 
27
+ <!-- App CSS -->
28
+ <link rel="stylesheet" href="app/index.css" />
29
+
27
30
  <style>
28
31
  html,
29
32
  body {
package/test.mjs CHANGED
@@ -2,11 +2,8 @@ import express from 'express';
2
2
  import { SQLite3Driver } from '@nymphjs/driver-sqlite3';
3
3
  import { Nymph } from '@nymphjs/nymph';
4
4
  import { Tilmeld } from '@nymphjs/tilmeld';
5
- import server from '@nymphjs/server';
6
- import setupApp from './dist/index.js';
7
-
8
- const createServer = server.default;
9
- const setup = setupApp.default;
5
+ import createServer from '@nymphjs/server';
6
+ import setup from './dist/index.js';
10
7
 
11
8
  const nymph = new Nymph(
12
9
  {},
@@ -20,12 +17,13 @@ const nymph = new Nymph(
20
17
  cookiePath: '/',
21
18
  setupPath: '/user',
22
19
  emailUsernames: false,
20
+ domainSupport: true,
23
21
  clientEnabledUIDs: ['test'],
24
22
  verifyRedirect: 'http://localhost:8080',
25
23
  verifyChangeRedirect: 'http://localhost:8080',
26
24
  cancelChangeRedirect: 'http://localhost:8080',
27
25
  jwtSecret: 'shhhhh',
28
- })
26
+ }),
29
27
  );
30
28
 
31
29
  const app = express();
@@ -37,11 +35,14 @@ app.use(
37
35
  {
38
36
  restUrl: 'http://localhost:8080/rest',
39
37
  },
40
- nymph
41
- )
38
+ nymph,
39
+ {
40
+ allowRegistration: true,
41
+ },
42
+ ),
42
43
  );
43
44
 
44
- app.listen(8080);
45
-
46
- console.log('App is loaded. Go here in your browser:');
47
- console.log(' http://localhost:8080/user/');
45
+ app.listen(8080, () => {
46
+ console.log('App is loaded. Go here in your browser:');
47
+ console.log(' http://localhost:8080/user/');
48
+ });
package/tsconfig.json CHANGED
@@ -2,8 +2,20 @@
2
2
  "extends": "@tsconfig/svelte/tsconfig.json",
3
3
 
4
4
  "compilerOptions": {
5
+ "types": ["jest"],
6
+ "module": "nodenext",
7
+ "moduleResolution": "nodenext",
8
+ "lib": ["DOM", "es2024"],
9
+ "target": "es2024",
5
10
  "noImplicitAny": true,
6
- "strict": true
11
+ "strict": true,
12
+
13
+ "removeComments": false,
14
+ "sourceMap": true,
15
+ "rootDir": "app/",
16
+ "outDir": "dist/app",
17
+ "resolveJsonModule": true,
18
+ "declaration": true
7
19
  },
8
20
  "include": ["app/**/*"],
9
21
  "exclude": ["node_modules/*"]
@@ -2,10 +2,13 @@
2
2
  "extends": "@tsconfig/recommended/tsconfig.json",
3
3
 
4
4
  "compilerOptions": {
5
- "lib": ["ES2021"],
6
- "target": "ES2021",
5
+ "types": ["node", "jest"],
6
+ "module": "nodenext",
7
+ "moduleResolution": "nodenext",
8
+ "lib": ["es2024"],
9
+ "target": "es2024",
7
10
  "noImplicitAny": true,
8
- "removeComments": true,
11
+ "removeComments": false,
9
12
  "sourceMap": true,
10
13
  "outDir": "dist",
11
14
  "resolveJsonModule": true,
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": ["../../typedoc.base.json"],
3
+ "entryPoints": ["src/index.ts"],
4
+ "tsconfig": "./tsconfig.server.json"
5
+ }