apostrophe 4.30.0 → 4.30.1-beta.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.30.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Sites with a custom filterByIndexPage method no longer experience failures in the sitemap module and potential creeping CPU performance penalties. A regression introduced with our static site support, but not specific to static sites.
8
+
3
9
  ## 4.30.0
4
10
 
5
11
  ### Adds
@@ -21,7 +27,7 @@
21
27
  - **XSS via full name field:** A malicious full name containing HTML was executed in the page title tooltip in the admin bar, posing an XSS risk to other users. All multi-user projects should update promptly. Thanks to [Muhammad Uwais](https://github.com/MuhammadUwais) for reporting.
22
28
  - **XSS via image widget link URL:** Users with editing privileges could trigger arbitrary JavaScript via a `javascript:` URL in the image widget's link URL field. A migration is included to strip any such URLs already in the database. Thanks to [Muhammad Uwais](https://github.com/MuhammadUwais) for reporting.
23
29
  - **SSRF via rich text HTML import:** The rich text widget's HTML import feature no longer fetches images from arbitrary hosts, which could be used to probe internal networks or exfiltrate internal images. Configure `imageImportAllowedHostnames` on `@apostrophecms/rich-text-widget` to opt in. Thanks to [Yiğit Şengezer](https://github.com/yigitsengezer) and [Sainithin0309](https://github.com/Sainithin0309) for reporting.
24
- - **the xmp tag could be used to pass forbidden markup through sanitize-html**, even when xmp itself. This was fixed in `sanitize-html` and the dependency was bumped. Thanks to [Vincenzo Turturro](https://github.com/sushi-gif) for reporting the vulnerability.
30
+ - **the xmp tag could be used to pass forbidden markup through sanitize-html**, even when xmp itself. This was fixed in `sanitize-html` and the dependency was bumped. Thanks to [Vincenzo Turturro](https://github.com/sushi-gif) for reporting the vulnerability.
25
31
  - **the `linkHref` field of image widgets was an XSS vulnerability** because it did not use the `url` field type. This means that a user with editing privileges could potentially carry out XSS. In addition, we have updated the `launder` module to sanitize URLs more robustly for the `url` field type, and bumped that dependency. Also, a database migration is included to clean any XSS attacks that could be present in existing links. Thanks to [Muhammad Uwais](https://github.com/MuhammadUwais) for reporting the issue.
26
32
 
27
33
  ### Accessibility
@@ -33,7 +39,6 @@
33
39
  - Fixed `.apos-sr-only` so screen-reader-only content is correctly exposed to the accessibility tree.
34
40
  - Icon-only context-utility buttons in the admin bar tray (e.g. the global settings cog) now expose their action via `aria-label`.
35
41
 
36
-
37
42
  ## 4.29.0 (2026-04-15)
38
43
 
39
44
  ### Adds
@@ -427,7 +427,14 @@ module.exports = {
427
427
  return metadata;
428
428
  }
429
429
  const [ pm ] = metadata;
430
+ // indexQuery is designed to be called with the
431
+ // index page in question as req.data.page. To
432
+ // reuse it for URL metadata purposes we must
433
+ // meet that expectation
434
+ const pageWas = req.data.page;
435
+ req.data.page = doc;
430
436
  const query = self.indexQuery(req);
437
+ req.data.page = pageWas;
431
438
  const filters = await self.getFiltersWithChoices(query, { allCounts: true });
432
439
 
433
440
  // 1. Enumerate every filter + choice combination
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apostrophe",
3
- "version": "4.30.0",
3
+ "version": "4.30.1-beta.1",
4
4
  "description": "The Apostrophe Content Management System.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -117,12 +117,12 @@
117
117
  "webpack-merge": "^5.7.3",
118
118
  "xregexp": "^2.0.0",
119
119
  "@apostrophecms/emulate-mongo-3-driver": "^1.0.6",
120
- "broadband": "^1.1.0",
121
120
  "boring": "^1.1.1",
122
121
  "express-cache-on-demand": "^1.0.4",
122
+ "broadband": "^1.1.0",
123
123
  "launder": "^1.7.1",
124
- "oembetter": "^1.1.4",
125
124
  "postcss-viewport-to-container-toggle": "^2.3.0",
125
+ "oembetter": "^1.2.0",
126
126
  "sanitize-html": "^2.17.4",
127
127
  "uploadfs": "^1.26.1"
128
128
  },
@@ -132,8 +132,8 @@
132
132
  "mocha": "^11.7.5",
133
133
  "nyc": "^17.1.0",
134
134
  "stylelint": "^16.5.0",
135
- "stylelint-config-apostrophe": "^4.4.0",
136
- "eslint-config-apostrophe": "^6.0.2"
135
+ "eslint-config-apostrophe": "^6.0.2",
136
+ "stylelint-config-apostrophe": "^4.4.0"
137
137
  },
138
138
  "browserslist": [
139
139
  "ie >= 10"
@@ -1,15 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(timeout 180 npx mocha:*)",
5
- "Bash(timeout 600 npx mocha:*)",
6
- "Bash(npm ls:*)",
7
- "Bash(timeout 540 npx mocha:*)",
8
- "Bash(echo:*)",
9
- "Bash(timeout 10 node:*)",
10
- "Bash(timeout 300 npx mocha:*)",
11
- "Bash(timeout 60 npx mocha:*)",
12
- "Bash(timeout 120 npx mocha:*)"
13
- ]
14
- }
15
- }
@@ -1,131 +0,0 @@
1
- {
2
- "name": "add-missing-schema-fields-project",
3
- "version": "1.0.0",
4
- "lockfileVersion": 3,
5
- "requires": true,
6
- "packages": {
7
- "../..": {
8
- "version": "4.28.0",
9
- "license": "MIT",
10
- "dependencies": {
11
- "@apostrophecms/emulate-mongo-3-driver": "workspace:^",
12
- "@apostrophecms/vue-material-design-icons": "^1.0.0",
13
- "@ctrl/tinycolor": "^4.1.0",
14
- "@floating-ui/dom": "^1.5.3",
15
- "@opentelemetry/api": "^1.9.0",
16
- "@opentelemetry/semantic-conventions": "^1.0.1",
17
- "@paralleldrive/cuid2": "^2.2.2",
18
- "@tiptap/extension-color": "^2.4.0",
19
- "@tiptap/extension-floating-menu": "^2.0.3",
20
- "@tiptap/extension-highlight": "^2.0.3",
21
- "@tiptap/extension-link": "^2.0.3",
22
- "@tiptap/extension-placeholder": "^2.0.3",
23
- "@tiptap/extension-subscript": "^2.0.3",
24
- "@tiptap/extension-superscript": "^2.0.3",
25
- "@tiptap/extension-table": "^2.0.3",
26
- "@tiptap/extension-table-cell": "^2.0.3",
27
- "@tiptap/extension-table-header": "^2.0.3",
28
- "@tiptap/extension-table-row": "^2.0.3",
29
- "@tiptap/extension-text-align": "^2.0.3",
30
- "@tiptap/extension-text-style": "^2.0.3",
31
- "@tiptap/extension-underline": "^2.0.3",
32
- "@tiptap/starter-kit": "^2.0.3",
33
- "@tiptap/vue-3": "^2.0.3",
34
- "@vue/compiler-sfc": "^3.3.8",
35
- "autoprefixer": "^10.4.1",
36
- "bluebird": "^3.7.2",
37
- "body-parser": "^1.18.2",
38
- "boring": "workspace:^",
39
- "broadband": "workspace:^",
40
- "cheerio": "^1.0.0-rc.10",
41
- "chokidar": "^3.5.2",
42
- "common-tags": "^1.8.0",
43
- "concat-with-sourcemaps": "^1.1.0",
44
- "connect-mongo": "^5.1.0",
45
- "cookie-parser": "^1.4.5",
46
- "cors": "^2.8.5",
47
- "css-loader": "^5.2.4",
48
- "cssnano": "^7.1.1",
49
- "csv-parse": "^5.6.0",
50
- "dayjs": "^1.9.8",
51
- "dompurify": "^3.2.5",
52
- "encodeurl": "^2.0.0",
53
- "express": "^4.16.4",
54
- "express-bearer-token": "^3.0.0",
55
- "express-cache-on-demand": "workspace:^",
56
- "express-session": "^1.18.2",
57
- "fs-extra": "^7.0.1",
58
- "glob": "^10.4.5",
59
- "he": "^1.2.0",
60
- "html-to-text": "^9.0.5",
61
- "i18next": "^20.3.2",
62
- "i18next-http-middleware": "^3.1.5",
63
- "import-fresh": "^3.3.0",
64
- "is-wsl": "^2.2.0",
65
- "jsdom": "^24.1.0",
66
- "klona": "^2.0.4",
67
- "launder": "^1.4.0",
68
- "lodash": "^4.17.21",
69
- "mini-css-extract-plugin": "^1.6.0",
70
- "minimatch": "^3.0.4",
71
- "mkdirp": "^0.5.5",
72
- "multer": "^2.0.2",
73
- "node-fetch": "^2.6.1",
74
- "nodemailer": "^7.0.10",
75
- "nunjucks": "^3.2.1",
76
- "oembetter": "^1.1.3",
77
- "parseurl": "^1.3.3",
78
- "passport": "^0.6.0",
79
- "passport-local": "^1.0.0",
80
- "path-to-regexp": "^1.8.0",
81
- "performance-now": "^2.1.0",
82
- "pinia": "^2.1.7",
83
- "postcss": "^8.4.47",
84
- "postcss-html": "^1.3.0",
85
- "postcss-loader": "^8.1.1",
86
- "postcss-scss": "^4.0.3",
87
- "postcss-viewport-to-container-toggle": "workspace:^",
88
- "prompts": "^2.4.1",
89
- "qs": "^6.10.1",
90
- "regexp-quote": "0.0.0",
91
- "resolve": "^1.19.0",
92
- "resolve-from": "^5.0.0",
93
- "sanitize-html": "workspace:^",
94
- "sass": "^1.80.3",
95
- "sass-loader": "^16.0.0",
96
- "server-destroy": "^1.0.1",
97
- "sluggo": "^1.0.0",
98
- "sortablejs": "^1.15.0",
99
- "sortablejs-vue3": "^1.2.11",
100
- "tiny-emitter": "^2.1.0",
101
- "tough-cookie": "^4.0.0",
102
- "underscore.string": "^3.3.4",
103
- "uploadfs": "workspace:^",
104
- "void-elements": "^3.1.0",
105
- "vue": "^3.5.20",
106
- "vue-advanced-cropper": "^2.8.8",
107
- "vue-loader": "^17.1.0",
108
- "vue-style-loader": "^4.1.3",
109
- "webpack": "^5.72.0",
110
- "webpack-merge": "^5.7.3",
111
- "xregexp": "^2.0.0"
112
- },
113
- "devDependencies": {
114
- "eslint": "^9.39.1",
115
- "eslint-config-apostrophe": "workspace:^",
116
- "form-data": "^4.0.4",
117
- "mocha": "^11.7.1",
118
- "nyc": "^17.1.0",
119
- "stylelint": "^16.5.0",
120
- "stylelint-config-apostrophe": "workspace:^"
121
- },
122
- "engines": {
123
- "node": ">=16.0.0"
124
- }
125
- },
126
- "node_modules/apostrophe": {
127
- "resolved": "../..",
128
- "link": true
129
- }
130
- }
131
- }