Ghost/ghost/core/package.json

293 lines
11 KiB
JSON
Raw Normal View History

{
"name": "ghost",
2024-08-28 00:29:15 +03:00
"version": "5.90.2",
"description": "The professional publishing platform",
"author": "Ghost Foundation",
"homepage": "https://ghost.org",
"keywords": [
"ghost",
"blog",
"cms",
"headless",
"content",
"markdown"
],
"repository": {
"type": "git",
"url": "git://github.com/TryGhost/Ghost.git"
},
"bugs": "https://github.com/TryGhost/Ghost/issues",
"contributors": "https://github.com/TryGhost/Ghost/graphs/contributors",
"license": "MIT",
"scripts": {
"archive": "npm pack",
"dev": "node --watch index.js",
"build": "postcss core/frontend/public/ghost.css --no-map --use cssnano -o core/frontend/public/ghost.min.css",
"test": "yarn test:unit",
"test:base": "mocha --reporter dot --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js",
"test:single": "yarn test:base --timeout=60000",
"test:all": "yarn test:unit && yarn test:integration && yarn test:e2e && yarn lint",
"test:debug": "DEBUG=ghost:test* yarn test",
"test:unit": "c8 yarn test:unit:base",
"test:unit:base": "yarn test:base './test/unit' --timeout=2000",
"test:integration": "yarn test:base './test/integration' --timeout=10000",
"test:e2e": "yarn test:base ./test/e2e-* --timeout=15000",
"test:regression": "yarn test:base './test/regression' --timeout=60000",
"test:browser": "NODE_ENV=testing-browser playwright test",
"test:browser:admin": "NODE_ENV=testing-browser playwright test test/e2e-browser --project=admin",
"test:browser:portal": "NODE_ENV=testing-browser playwright test test/e2e-browser --project=portal",
"test:browser:setup": "npx playwright install",
"test:ci:e2e": "c8 -c ./.c8rc.e2e.json -o coverage-e2e yarn test:e2e -b --retries=2 --reporter=./test/utils/mocha-retry-reporter.js",
"test:ci:regression": "yarn test:regression -b --retries=2 --reporter=./test/utils/mocha-retry-reporter.js",
"test:ci:integration": "c8 -c ./.c8rc.e2e.json -o coverage-integration --lines 57 --functions 47 --branches 77 --statements 57 yarn test:integration -b --retries=2 --reporter=./test/utils/mocha-retry-reporter.js",
"test:unit:slow": "yarn test:unit --reporter=mocha-slow-test-reporter",
"test:int:slow": "yarn test:integration --reporter=mocha-slow-test-reporter",
"test:e2e:slow": "yarn test:e2e --reporter=mocha-slow-test-reporter",
"test:reg:slow": "mocha --reporter dot --require=./test/utils/overrides.js --exit --trace-warnings --recursive --extension=test.js './test/regression' --timeout=60000 --reporter=mocha-slow-test-reporter",
"lint:server": "eslint --ignore-path .eslintignore 'core/server/**/*.js' 'core/*.js' '*.js' --cache",
"lint:shared": "eslint --ignore-path .eslintignore 'core/shared/**/*.js' --cache",
"lint:frontend": "eslint --ignore-path .eslintignore 'core/frontend/**/*.js' --cache",
"lint:test": "eslint -c test/.eslintrc.js --ignore-path test/.eslintignore 'test/**/*.js' --cache",
"lint:code": "yarn lint:server && yarn lint:shared && yarn lint:frontend",
"lint": "yarn lint:server && yarn lint:shared && yarn lint:frontend && yarn lint:test",
"prepack": "node monobundle.js"
},
"engines": {
"node": "^18.12.1 || ^20.11.1",
"cli": "^1.26.0"
},
"dependencies": {
"@extractus/oembed-extractor": "3.2.1",
2024-06-21 12:04:42 +03:00
"@opentelemetry/api": "1.9.0",
"@opentelemetry/exporter-prometheus": "0.52.1",
"@opentelemetry/instrumentation-runtime-node": "0.6.0",
2024-06-21 12:04:42 +03:00
"@opentelemetry/sdk-metrics": "1.25.1",
"@opentelemetry/sdk-node": "0.52.1",
"@opentelemetry/sdk-trace-node": "1.25.1",
"@sentry/node": "7.119.0",
2024-04-30 23:04:58 +03:00
"@tryghost/adapter-base-cache": "0.1.12",
"@tryghost/adapter-cache-redis": "0.0.0",
"@tryghost/adapter-manager": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/admin-api-schema": "4.5.5",
"@tryghost/announcement-bar-settings": "0.0.0",
"@tryghost/api-framework": "0.0.0",
"@tryghost/api-version-compatibility-service": "0.0.0",
"@tryghost/audience-feedback": "0.0.0",
"@tryghost/bookshelf-plugins": "0.6.23",
"@tryghost/bootstrap-socket": "0.0.0",
"@tryghost/collections": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/color-utils": "0.2.2",
"@tryghost/config-url-helpers": "1.0.12",
"@tryghost/constants": "0.0.0",
"@tryghost/custom-theme-settings-service": "0.0.0",
"@tryghost/data-generator": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/database-info": "0.3.27",
"@tryghost/debug": "0.1.32",
"@tryghost/domain-events": "0.0.0",
"@tryghost/donations": "0.0.0",
"@tryghost/dynamic-routing-events": "0.0.0",
"@tryghost/email-analytics-provider-mailgun": "0.0.0",
"@tryghost/email-analytics-service": "0.0.0",
"@tryghost/email-content-generator": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/email-mock-receiver": "0.3.8",
2022-11-25 18:00:47 +03:00
"@tryghost/email-service": "0.0.0",
"@tryghost/email-suppression-list": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/errors": "1.3.5",
"@tryghost/express-dynamic-redirects": "0.0.0",
"@tryghost/external-media-inliner": "0.0.0",
"@tryghost/ghost": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/helpers": "1.1.90",
"@tryghost/html-to-plaintext": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/http-cache-utils": "0.1.17",
"@tryghost/i18n": "0.0.0",
"@tryghost/image-transform": "1.3.0",
"@tryghost/importer-handler-content-files": "0.0.0",
"@tryghost/importer-revue": "0.0.0",
"@tryghost/job-manager": "0.0.0",
2024-08-12 22:34:41 +03:00
"@tryghost/kg-card-factory": "5.0.5",
"@tryghost/kg-converters": "1.0.7",
"@tryghost/kg-default-atoms": "5.0.3",
"@tryghost/kg-default-cards": "10.0.9",
"@tryghost/kg-default-nodes": "1.1.16",
"@tryghost/kg-html-to-lexical": "1.1.17",
"@tryghost/kg-lexical-html-renderer": "1.1.19",
2024-08-12 22:34:41 +03:00
"@tryghost/kg-mobiledoc-html-renderer": "7.0.6",
2024-04-30 23:04:58 +03:00
"@tryghost/limit-service": "1.2.14",
"@tryghost/link-redirects": "0.0.0",
"@tryghost/link-replacer": "0.0.0",
"@tryghost/link-tracking": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/logging": "2.4.18",
"@tryghost/magic-link": "0.0.0",
"@tryghost/mail-events": "0.0.0",
"@tryghost/mailgun-client": "0.0.0",
Added member attribution events and storage (#15243) refs https://github.com/TryGhost/Team/issues/1808 refs https://github.com/TryGhost/Team/issues/1809 refs https://github.com/TryGhost/Team/issues/1820 refs https://github.com/TryGhost/Team/issues/1814 ### Changes in `member-events` package - Added MemberCreatedEvent (event, not model) - Added SubscriptionCreatedEvent (event, not model) ### Added `member-attribution` package (new) - Added the AttributionBuilder class which is able to convert a url history to an attribution object (exposed as getAttribution on the service itself, which handles the dependencies) ``` [{ "path": "/", "time": 123 }] ``` to ``` { "url": "/", "id": null, "type": "url" } ``` - event handler listens for MemberCreatedEvent and SubscriptionCreatedEvent and creates the corresponding models in the database. ### Changes in `members-api` package - Added urlHistory to `sendMagicLink` endpoint body + convert the urlHistory to an attribution object that is stored in the tokenData of the magic link (sent by Portal in this PR: https://github.com/TryGhost/Portal/pull/256). - Added urlHistory to `createCheckoutSession` endpoint + convert the urlHistory to attribution keys that are saved in the Stripe Session metadata (sent by Portal in this PR: https://github.com/TryGhost/Portal/pull/256). - Added attribution data property to member repository's create method (when a member is created) - Dispatch MemberCreatedEvent with attribution ### Changes in `members-stripe-service` package (`ghost/stripe`) - Dispatch SubscriptionCreatedEvent in WebhookController on subscription checkout (with attribution from session metadata)
2022-08-18 18:38:42 +03:00
"@tryghost/member-attribution": "0.0.0",
"@tryghost/member-events": "0.0.0",
"@tryghost/members-api": "0.0.0",
"@tryghost/members-csv": "0.0.0",
"@tryghost/members-events-service": "0.0.0",
"@tryghost/members-importer": "0.0.0",
"@tryghost/members-offers": "0.0.0",
"@tryghost/members-ssr": "0.0.0",
"@tryghost/members-stripe-service": "0.0.0",
"@tryghost/mentions-email-report": "0.0.0",
"@tryghost/metrics": "1.0.34",
"@tryghost/milestones": "0.0.0",
"@tryghost/minifier": "0.0.0",
"@tryghost/model-to-domain-event-interceptor": "0.0.0",
"@tryghost/mw-api-version-mismatch": "0.0.0",
"@tryghost/mw-cache-control": "0.0.0",
"@tryghost/mw-error-handler": "0.0.0",
"@tryghost/mw-session-from-token": "0.0.0",
"@tryghost/mw-version-match": "0.0.0",
"@tryghost/mw-vhost": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/nodemailer": "0.3.45",
"@tryghost/nql": "0.12.4",
"@tryghost/oembed-service": "0.0.0",
"@tryghost/package-json": "0.0.0",
2023-04-17 16:59:13 +03:00
"@tryghost/post-revisions": "0.0.0",
"@tryghost/posts-service": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/pretty-cli": "1.2.44",
"@tryghost/promise": "0.3.12",
"@tryghost/recommendations": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/request": "1.0.8",
"@tryghost/security": "0.0.0",
"@tryghost/session-service": "0.0.0",
"@tryghost/settings-path-manager": "0.0.0",
2023-02-17 19:00:47 +03:00
"@tryghost/slack-notifications": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/social-urls": "0.1.43",
2022-08-26 18:00:32 +03:00
"@tryghost/staff-service": "0.0.0",
"@tryghost/stats-service": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/string": "0.2.12",
"@tryghost/tiers": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/tpl": "0.1.32",
"@tryghost/update-check-service": "0.0.0",
2024-04-30 23:04:58 +03:00
"@tryghost/url-utils": "4.4.8",
2024-07-30 17:14:06 +03:00
"@tryghost/validator": "0.2.14",
"@tryghost/verification-trigger": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/version": "0.1.30",
"@tryghost/webmentions": "0.0.0",
2024-07-30 17:14:06 +03:00
"@tryghost/zip": "1.1.46",
"amperize": "0.6.1",
"body-parser": "1.20.2",
"bookshelf": "1.2.0",
"bookshelf-relations": "2.7.0",
"brute-knex": "4.0.1",
"bson-objectid": "2.0.4",
"chalk": "4.1.2",
"cheerio": "0.22.0",
"common-tags": "1.8.2",
"compression": "1.7.4",
"connect-slashes": "1.4.0",
"cookie-session": "2.1.0",
"cors": "2.8.5",
"downsize": "0.0.8",
"express": "4.19.2",
"express-brute": "1.0.1",
"express-hbs": "2.5.0",
2023-05-11 12:28:53 +03:00
"express-jwt": "8.4.1",
"express-lazy-router": "1.0.6",
"express-query-boolean": "2.0.0",
"express-queue": "0.0.13",
"express-session": "1.18.0",
2023-11-28 07:21:28 +03:00
"fs-extra": "11.2.0",
"ghost-storage-base": "1.0.0",
2023-01-16 03:20:18 +03:00
"glob": "8.1.0",
"got": "11.8.6",
2024-08-28 10:50:41 +03:00
"gscan": "4.43.3",
"human-number": "2.0.4",
2024-01-02 20:16:50 +03:00
"image-size": "1.1.1",
"intl": "1.2.5",
"intl-messageformat": "5.4.3",
"js-yaml": "4.1.0",
"json-stable-stringify": "1.1.1",
"jsonpath": "1.1.1",
"jsonwebtoken": "8.5.1",
"keypair": "1.0.4",
2023-01-23 05:01:58 +03:00
"knex": "2.4.2",
"knex-migrator": "5.2.1",
2024-07-02 19:15:33 +03:00
"lib0": "0.2.94",
"lodash": "4.17.21",
2024-08-05 04:54:14 +03:00
"luxon": "3.5.0",
"moment": "2.24.0",
"moment-timezone": "0.5.45",
"multer": "1.4.4",
2024-07-29 04:38:16 +03:00
"mysql2": "3.11.0",
2023-10-23 06:22:58 +03:00
"nconf": "0.12.1",
"node-jose": "2.2.0",
"path-match": "1.2.4",
"probe-image-size": "7.2.3",
"rss": "1.2.2",
"sanitize-html": "2.13.0",
2024-07-22 10:16:32 +03:00
"semver": "7.6.3",
"stoppable": "1.1.0",
2023-09-12 12:22:36 +03:00
"uuid": "9.0.1",
2024-07-03 20:26:21 +03:00
"ws": "8.18.0",
Initial setup for Lexical multiplayer websockets service (#16611) no issue Rough prototype only, current limitations: - **No persistence**. Docs are in-memory only, YJS state will be lost on server restart although it could be re-populated by clients if they reconnect without closing their local doc (needs testing/investigation) - **No tie-in with saved lexical state**. Lexical state is updated in the post model via normal API requests from Admin which can mean the multiplayer doc and the saved lexical state become out of sync but there's no detection/indication of that state at present. Will also trigger the "someone else is editing" errors because multiplayer doesn't yet override the default post update collision detection - **New posts don't start in multiplayer**. New posts don't have an ID and so can't have a respective YJS doc, after initial save we don't transition to multiplayer because the React component in Ember doesn't re-render on prop changes yet - **No tests**. Experimental code just to get something working and help answer questions for what's next Changes: - added `lexicalMultiplayer` labs flag - updated `<KoenigLexicalEditor>` to pass through the required `<KoenigComposer>` props for multiplayer when enabled - added `lexical-multiplayer` service - `init()` called during boot, used to set up the `enable()` and `disable()` methods so the flag can be toggled without restarts - when enabled it adds `upgrade` request handling to the base Ghost server - returns 404 if the URL doesn't match `/ghost/api/admin/posts/multiplayer/*` - returns 401 if a valid session cookie is not present - if everything is good, hands off to code in `y-websocket.js` that handles YJS doc creation, awareness, keepalive, etc - uses doc names in the format `${post.id}/${docId}` where `docId` is `main` for the primary document and a GUID for any sub-documents like captions and nested editors in cards - updated `SettingsBREADService` to check if the `labs` setting is changed, and enables/disables the `lexical-multiplayer` service as needed so the websockets server can be started and shutdown when toggling without requiring a restart
2023-04-12 22:24:02 +03:00
"xml": "1.0.1",
"y-protocols": "1.0.6",
2024-06-18 19:53:50 +03:00
"yjs": "13.6.18"
},
"optionalDependencies": {
"@sentry/profiling-node": "7.119.0",
"@tryghost/html-to-mobiledoc": "3.1.2",
2024-01-05 12:27:53 +03:00
"sqlite3": "5.1.7"
},
"devDependencies": {
"@actions/core": "1.10.1",
"@playwright/test": "1.38.1",
2024-07-30 17:14:06 +03:00
"@tryghost/express-test": "0.13.15",
"@tryghost/webhook-mock-receiver": "0.2.14",
2023-11-07 11:19:44 +03:00
"@types/common-tags": "1.8.4",
2023-09-01 16:32:29 +03:00
"c8": "8.0.1",
"cli-progress": "3.12.0",
2024-07-05 12:30:21 +03:00
"cssnano": "7.0.4",
"detect-indent": "6.1.0",
"detect-newline": "3.1.0",
"expect": "29.3.1",
"find-root": "1.1.0",
"form-data": "4.0.0",
2023-08-02 21:29:05 +03:00
"inquirer": "8.2.6",
2023-10-05 19:31:50 +03:00
"jwks-rsa": "3.1.0",
2022-12-12 16:20:22 +03:00
"mocha": "10.2.0",
"mocha-slow-test-reporter": "0.1.2",
2023-03-02 11:48:54 +03:00
"mock-knex": "TryGhost/mock-knex#d8b93b1c20d4820323477f2c60db016ab3e73192",
2023-09-01 16:32:29 +03:00
"nock": "13.3.3",
"papaparse": "5.3.2",
2024-07-01 04:57:23 +03:00
"postcss": "8.4.39",
2024-05-09 11:27:02 +03:00
"postcss-cli": "11.0.0",
"rewire": "6.0.0",
"should": "13.2.3",
2023-07-11 16:11:02 +03:00
"sinon": "15.2.0",
2022-12-08 20:16:37 +03:00
"supertest": "6.3.3",
"tmp": "0.2.1",
"toml": "3.0.0"
},
"resolutions": {
2024-07-30 17:14:06 +03:00
"@tryghost/errors": "1.3.5",
"@tryghost/logging": "2.4.18",
"jackspeak": "2.1.1",
"moment": "2.24.0",
"moment-timezone": "0.5.45"
},
"nx": {
"targets": {
"archive": {
"dependsOn": [
"build",
"^build:ts",
{
"projects": [
"ghost-admin"
],
"target": "build"
}
]
},
"dev": {
"dependsOn": [
"^build:ts"
]
}
}
}
}