From 855b5df758931ab422927073ecb666f843fe78b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Apr 2024 02:34:55 +0200 Subject: [PATCH 1/7] refactor: Bump @parse/fs-files-adapter from 2.0.1 to 3.0.0 (#9073) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e10591eb..7ad34f17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@graphql-tools/merge": "9.0.3", "@graphql-tools/schema": "10.0.3", "@graphql-tools/utils": "8.12.0", - "@parse/fs-files-adapter": "2.0.1", + "@parse/fs-files-adapter": "3.0.0", "@parse/push-adapter": "6.0.0", "bcryptjs": "2.4.3", "body-parser": "1.20.2", @@ -3713,9 +3713,9 @@ } }, "node_modules/@parse/fs-files-adapter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@parse/fs-files-adapter/-/fs-files-adapter-2.0.1.tgz", - "integrity": "sha512-9DY0T9lK73Ysw+wxxsBt9rpxWxJpMlHl/fTW175XSajusW0ZP5jERI3BTKeclV28eVmSU690EO2vnwCURsPZ7g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@parse/fs-files-adapter/-/fs-files-adapter-3.0.0.tgz", + "integrity": "sha512-Bb+qLtXQ/1SA2Ck6JLVhfD9JQf6cCwgeDZZJjcIdHzUtdPTFu1hj51xdD7tUCL47Ed2i3aAx6K/M6AjLWYVs3A==" }, "node_modules/@parse/node-apn": { "version": "6.0.1", @@ -22250,9 +22250,9 @@ } }, "@parse/fs-files-adapter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@parse/fs-files-adapter/-/fs-files-adapter-2.0.1.tgz", - "integrity": "sha512-9DY0T9lK73Ysw+wxxsBt9rpxWxJpMlHl/fTW175XSajusW0ZP5jERI3BTKeclV28eVmSU690EO2vnwCURsPZ7g==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@parse/fs-files-adapter/-/fs-files-adapter-3.0.0.tgz", + "integrity": "sha512-Bb+qLtXQ/1SA2Ck6JLVhfD9JQf6cCwgeDZZJjcIdHzUtdPTFu1hj51xdD7tUCL47Ed2i3aAx6K/M6AjLWYVs3A==" }, "@parse/node-apn": { "version": "6.0.1", diff --git a/package.json b/package.json index b3e8f3c7..deb5bfa9 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@graphql-tools/merge": "9.0.3", "@graphql-tools/schema": "10.0.3", "@graphql-tools/utils": "8.12.0", - "@parse/fs-files-adapter": "2.0.1", + "@parse/fs-files-adapter": "3.0.0", "@parse/push-adapter": "6.0.0", "bcryptjs": "2.4.3", "body-parser": "1.20.2", From f1469c6425e747dd21795fab9890ec2af4e76c42 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sat, 6 Apr 2024 22:29:22 +0200 Subject: [PATCH 2/7] ci: Upgrade to latest MongoDB version in CI (#9070) --- .github/workflows/ci.yml | 6 +++--- README.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d96930d4..00bb771d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -162,16 +162,16 @@ jobs: MONGODB_TOPOLOGY: replset NODE_VERSION: 20.12.0 - name: MongoDB 7, ReplicaSet - MONGODB_VERSION: 7.0.7 + MONGODB_VERSION: 7.0.8 MONGODB_TOPOLOGY: replset NODE_VERSION: 20.12.0 - name: Redis Cache PARSE_SERVER_TEST_CACHE: redis - MONGODB_VERSION: 7.0.7 + MONGODB_VERSION: 7.0.8 MONGODB_TOPOLOGY: standalone NODE_VERSION: 20.12.0 - name: Node 18 - MONGODB_VERSION: 7.0.7 + MONGODB_VERSION: 7.0.8 MONGODB_TOPOLOGY: standalone NODE_VERSION: 18.20.0 fail-fast: false diff --git a/README.md b/README.md index 2e74edf9..795a9e3e 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Parse Server is continuously tested with the most recent releases of MongoDB to | MongoDB 4.4 | 4.4.29 | February 2024 | ✅ Yes | | MongoDB 5 | 5.0.26 | October 2024 | ✅ Yes | | MongoDB 6 | 6.0.14 | July 2025 | ✅ Yes | -| MongoDB 7 | 7.0.7 | TDB | ✅ Yes | +| MongoDB 7 | 7.0.8 | TDB | ✅ Yes | #### PostgreSQL From 8758e6abb9dbb68757bddcbd332ad25100c24a0e Mon Sep 17 00:00:00 2001 From: Vivek Joshi <37882929+vivekjoshi556@users.noreply.github.com> Date: Sun, 7 Apr 2024 18:58:15 +0530 Subject: [PATCH 3/7] feat: Prevent Parse Server start in case of unknown option in server configuration (#8987) --- resources/buildConfigDefinitions.js | 17 +++++++++ spec/ParseConfigKey.spec.js | 52 +++++++++++++++++++++++++++ src/Config.js | 11 ++++++ src/Deprecator/Deprecations.js | 4 +-- src/Options/Definitions.js | 15 ++++++++ src/ParseServer.js | 55 ++++++++++++++++++++++++++++- 6 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 spec/ParseConfigKey.spec.js diff --git a/resources/buildConfigDefinitions.js b/resources/buildConfigDefinitions.js index 0be6e008..72a37cb9 100644 --- a/resources/buildConfigDefinitions.js +++ b/resources/buildConfigDefinitions.js @@ -254,6 +254,23 @@ function inject(t, list) { if (action) { props.push(t.objectProperty(t.stringLiteral('action'), action)); } + + if (t.isGenericTypeAnnotation(elt)) { + if (elt.typeAnnotation.id.name in nestedOptionEnvPrefix) { + props.push( + t.objectProperty(t.stringLiteral('type'), t.stringLiteral(elt.typeAnnotation.id.name)) + ); + } + } else if (t.isArrayTypeAnnotation(elt)) { + const elementType = elt.typeAnnotation.elementType; + if (t.isGenericTypeAnnotation(elementType)) { + if (elementType.id.name in nestedOptionEnvPrefix) { + props.push( + t.objectProperty(t.stringLiteral('type'), t.stringLiteral(elementType.id.name + '[]')) + ); + } + } + } if (elt.defaultValue) { let parsedValue = parseDefaultValue(elt, elt.defaultValue, t); if (!parsedValue) { diff --git a/spec/ParseConfigKey.spec.js b/spec/ParseConfigKey.spec.js new file mode 100644 index 00000000..84b2fc6e --- /dev/null +++ b/spec/ParseConfigKey.spec.js @@ -0,0 +1,52 @@ +const Config = require('../lib/Config'); +const ParseServer = require('../lib/index').ParseServer; + +describe('Config Keys', () => { + const tests = [ + { + name: 'Invalid Root Keys', + options: { unknow: 'val', masterKeyIPs: '' }, + error: 'unknow, masterKeyIPs', + }, + { name: 'Invalid Schema Keys', options: { schema: { Strict: 'val' } }, error: 'schema.Strict' }, + { + name: 'Invalid Pages Keys', + options: { pages: { customUrls: { EmailVerificationSendFail: 'val' } } }, + error: 'pages.customUrls.EmailVerificationSendFail', + }, + { + name: 'Invalid LiveQueryServerOptions Keys', + options: { liveQueryServerOptions: { MasterKey: 'value' } }, + error: 'liveQueryServerOptions.MasterKey', + }, + { + name: 'Invalid RateLimit Keys - Array Item', + options: { rateLimit: [{ RequestPath: '' }, { RequestTimeWindow: '' }] }, + error: 'rateLimit[0].RequestPath, rateLimit[1].RequestTimeWindow', + }, + ]; + + tests.forEach(test => { + it(test.name, async () => { + const logger = require('../lib/logger').logger; + spyOn(logger, 'error').and.callThrough(); + spyOn(Config, 'validateOptions').and.callFake(() => {}); + + new ParseServer({ + ...defaultConfiguration, + ...test.options, + }); + expect(logger.error).toHaveBeenCalledWith(`Invalid Option Keys Found: ${test.error}`); + }); + }); + + it('should run fine', async () => { + try { + await reconfigureServer({ + ...defaultConfiguration, + }); + } catch (err) { + fail('Should run without error'); + } + }); +}); diff --git a/src/Config.js b/src/Config.js index 933cf398..5dfd3f95 100644 --- a/src/Config.js +++ b/src/Config.js @@ -64,6 +64,7 @@ export class Config { } static validateOptions({ + customPages, publicServerURL, revokeSessionOnPasswordReset, expireInactiveSessions, @@ -133,9 +134,18 @@ export class Config { this.validateRateLimit(rateLimit); this.validateLogLevels(logLevels); this.validateDatabaseOptions(databaseOptions); + this.validateCustomPages(customPages); this.validateAllowClientClassCreation(allowClientClassCreation); } + static validateCustomPages(customPages) { + if (!customPages) return; + + if (Object.prototype.toString.call(customPages) !== '[object Object]') { + throw Error('Parse Server option customPages must be an object.'); + } + } + static validateControllers({ verifyUserEmails, userController, @@ -569,6 +579,7 @@ export class Config { if (Object.prototype.toString.call(databaseOptions) !== '[object Object]') { throw `databaseOptions must be an object`; } + if (databaseOptions.enableSchemaHooks === undefined) { databaseOptions.enableSchemaHooks = DatabaseOptions.enableSchemaHooks.default; } else if (typeof databaseOptions.enableSchemaHooks !== 'boolean') { diff --git a/src/Deprecator/Deprecations.js b/src/Deprecator/Deprecations.js index 6fbd358f..38e1d52d 100644 --- a/src/Deprecator/Deprecations.js +++ b/src/Deprecator/Deprecations.js @@ -15,6 +15,4 @@ * * If there are no deprecations, this must return an empty array. */ -module.exports = [ - { optionKey: 'encodeParseObjectInCloudFunction', changeNewDefault: 'true' }, -]; +module.exports = [{ optionKey: 'encodeParseObjectInCloudFunction', changeNewDefault: 'true' }]; diff --git a/src/Options/Definitions.js b/src/Options/Definitions.js index ee1137b7..27baac22 100644 --- a/src/Options/Definitions.js +++ b/src/Options/Definitions.js @@ -54,6 +54,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_ACCOUNT_LOCKOUT', help: 'The account lockout policy for failed login attempts.', action: parsers.objectParser, + type: 'AccountLockoutOptions', }, allowClientClassCreation: { env: 'PARSE_SERVER_ALLOW_CLIENT_CLASS_CREATION', @@ -157,6 +158,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_CUSTOM_PAGES', help: 'custom pages for password validation and reset', action: parsers.objectParser, + type: 'CustomPagesOptions', default: {}, }, databaseAdapter: { @@ -169,6 +171,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_DATABASE_OPTIONS', help: 'Options to pass to the database client', action: parsers.objectParser, + type: 'DatabaseOptions', }, databaseURI: { env: 'PARSE_SERVER_DATABASE_URI', @@ -273,6 +276,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_FILE_UPLOAD_OPTIONS', help: 'Options for file uploads', action: parsers.objectParser, + type: 'FileUploadOptions', default: {}, }, graphQLPath: { @@ -294,6 +298,7 @@ module.exports.ParseServerOptions = { help: 'Options for request idempotency to deduplicate identical requests that may be caused by network issues. Caution, this is an experimental feature that may not be appropriate for production.', action: parsers.objectParser, + type: 'IdempotencyOptions', default: {}, }, javascriptKey: { @@ -309,11 +314,13 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_LIVE_QUERY', help: "parse-server's LiveQuery configuration object", action: parsers.objectParser, + type: 'LiveQueryOptions', }, liveQueryServerOptions: { env: 'PARSE_SERVER_LIVE_QUERY_SERVER_OPTIONS', help: 'Live query server configuration options (will start the liveQuery server)', action: parsers.objectParser, + type: 'LiveQueryServerOptions', }, loggerAdapter: { env: 'PARSE_SERVER_LOGGER_ADAPTER', @@ -328,6 +335,7 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_LOG_LEVELS', help: '(Optional) Overrides the log levels used internally by Parse Server to log events.', action: parsers.objectParser, + type: 'LogLevels', default: {}, }, logsFolder: { @@ -408,12 +416,14 @@ module.exports.ParseServerOptions = { help: 'The options for pages such as password reset and email verification. Caution, this is an experimental feature that may not be appropriate for production.', action: parsers.objectParser, + type: 'PagesOptions', default: {}, }, passwordPolicy: { env: 'PARSE_SERVER_PASSWORD_POLICY', help: 'The password policy for enforcing password related rules.', action: parsers.objectParser, + type: 'PasswordPolicyOptions', }, playgroundPath: { env: 'PARSE_SERVER_PLAYGROUND_PATH', @@ -471,6 +481,7 @@ module.exports.ParseServerOptions = { help: "Options to limit repeated requests to Parse Server APIs. This can be used to protect sensitive endpoints such as `/requestPasswordReset` from brute-force attacks or Parse Server as a whole from denial-of-service (DoS) attacks.

\u2139\uFE0F Mind the following limitations:
- rate limits applied per IP address; this limits protection against distributed denial-of-service (DDoS) attacks where many requests are coming from various IP addresses
- if multiple Parse Server instances are behind a load balancer or ran in a cluster, each instance will calculate it's own request rates, independent from other instances; this limits the applicability of this feature when using a load balancer and another rate limiting solution that takes requests across all instances into account may be more suitable
- this feature provides basic protection against denial-of-service attacks, but a more sophisticated solution works earlier in the request flow and prevents a malicious requests to even reach a server instance; it's therefore recommended to implement a solution according to architecture and user case.", action: parsers.arrayParser, + type: 'RateLimitOptions[]', default: [], }, readOnlyMasterKey: { @@ -516,11 +527,13 @@ module.exports.ParseServerOptions = { env: 'PARSE_SERVER_SCHEMA', help: 'Defined schema', action: parsers.objectParser, + type: 'SchemaOptions', }, security: { env: 'PARSE_SERVER_SECURITY', help: 'The security options to identify and report weak security settings.', action: parsers.objectParser, + type: 'SecurityOptions', default: {}, }, sendUserEmailVerification: { @@ -665,12 +678,14 @@ module.exports.PagesOptions = { env: 'PARSE_SERVER_PAGES_CUSTOM_ROUTES', help: 'The custom routes.', action: parsers.arrayParser, + type: 'PagesRoute[]', default: [], }, customUrls: { env: 'PARSE_SERVER_PAGES_CUSTOM_URLS', help: 'The URLs to the custom pages.', action: parsers.objectParser, + type: 'PagesCustomUrlsOptions', default: {}, }, enableLocalization: { diff --git a/src/ParseServer.js b/src/ParseServer.js index 85a8acc4..e8c7078a 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -45,6 +45,7 @@ import { SecurityRouter } from './Routers/SecurityRouter'; import CheckRunner from './Security/CheckRunner'; import Deprecator from './Deprecator/Deprecator'; import { DefinedSchemas } from './SchemaMigrations/DefinedSchemas'; +import OptionsDefinitions from './Options/Definitions'; // Mutate the Parse object to add the Cloud Code handlers addParseCloud(); @@ -59,6 +60,58 @@ class ParseServer { constructor(options: ParseServerOptions) { // Scan for deprecated Parse Server options Deprecator.scanParseServerOptions(options); + + const interfaces = JSON.parse(JSON.stringify(OptionsDefinitions)); + + function getValidObject(root) { + const result = {}; + for (const key in root) { + if (Object.prototype.hasOwnProperty.call(root[key], 'type')) { + if (root[key].type.endsWith('[]')) { + result[key] = [getValidObject(interfaces[root[key].type.slice(0, -2)])]; + } else { + result[key] = getValidObject(interfaces[root[key].type]); + } + } else { + result[key] = ''; + } + } + return result; + } + + const optionsBlueprint = getValidObject(interfaces['ParseServerOptions']); + + function validateKeyNames(original, ref, name = '') { + let result = []; + const prefix = name + (name !== '' ? '.' : ''); + for (const key in original) { + if (!Object.prototype.hasOwnProperty.call(ref, key)) { + result.push(prefix + key); + } else { + if (ref[key] === '') continue; + let res = []; + if (Array.isArray(original[key]) && Array.isArray(ref[key])) { + const type = ref[key][0]; + original[key].forEach((item, idx) => { + if (typeof item === 'object' && item !== null) { + res = res.concat(validateKeyNames(item, type, prefix + key + `[${idx}]`)); + } + }); + } else if (typeof original[key] === 'object' && typeof ref[key] === 'object') { + res = validateKeyNames(original[key], ref[key], prefix + key); + } + result = result.concat(res); + } + } + return result; + } + + const diff = validateKeyNames(options, optionsBlueprint); + if (diff.length > 0) { + const logger = logging.logger; + logger.error(`Invalid Option Keys Found: ${diff.join(', ')}`); + } + // Set option defaults injectDefaults(options); const { @@ -70,9 +123,9 @@ class ParseServer { // Initialize the node client SDK automatically Parse.initialize(appId, javascriptKey || 'unused', masterKey); Parse.serverURL = serverURL; - Config.validateOptions(options); const allControllers = controllers.getControllers(options); + options.state = 'initialized'; this.config = Config.put(Object.assign({}, options, allControllers)); this.config.masterKeyIpsStore = new Map(); From 2c21aed89038b09e1b7639fde29b54a70d27f2b7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 7 Apr 2024 13:29:07 +0000 Subject: [PATCH 4/7] chore(release): 7.1.0-alpha.5 [skip ci] # [7.1.0-alpha.5](https://github.com/parse-community/parse-server/compare/7.1.0-alpha.4...7.1.0-alpha.5) (2024-04-07) ### Features * Prevent Parse Server start in case of unknown option in server configuration ([#8987](https://github.com/parse-community/parse-server/issues/8987)) ([8758e6a](https://github.com/parse-community/parse-server/commit/8758e6abb9dbb68757bddcbd332ad25100c24a0e)) --- changelogs/CHANGELOG_alpha.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/changelogs/CHANGELOG_alpha.md b/changelogs/CHANGELOG_alpha.md index 8a54cbdc..9f5cc88d 100644 --- a/changelogs/CHANGELOG_alpha.md +++ b/changelogs/CHANGELOG_alpha.md @@ -1,3 +1,10 @@ +# [7.1.0-alpha.5](https://github.com/parse-community/parse-server/compare/7.1.0-alpha.4...7.1.0-alpha.5) (2024-04-07) + + +### Features + +* Prevent Parse Server start in case of unknown option in server configuration ([#8987](https://github.com/parse-community/parse-server/issues/8987)) ([8758e6a](https://github.com/parse-community/parse-server/commit/8758e6abb9dbb68757bddcbd332ad25100c24a0e)) + # [7.1.0-alpha.4](https://github.com/parse-community/parse-server/compare/7.1.0-alpha.3...7.1.0-alpha.4) (2024-03-31) diff --git a/package-lock.json b/package-lock.json index 7ad34f17..6867a301 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "parse-server", - "version": "7.1.0-alpha.4", + "version": "7.1.0-alpha.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "parse-server", - "version": "7.1.0-alpha.4", + "version": "7.1.0-alpha.5", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index deb5bfa9..1d91f72c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "parse-server", - "version": "7.1.0-alpha.4", + "version": "7.1.0-alpha.5", "description": "An express module providing a Parse-compatible API server", "main": "lib/index.js", "repository": { From 2532acfce8119f2e34b5b99781d1c7d3eb15669f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 02:09:30 +0200 Subject: [PATCH 5/7] refactor: Bump graphql-relay from 0.10.0 to 0.10.1 (#9076) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6867a301..5715c410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "follow-redirects": "1.15.6", "graphql": "16.8.1", "graphql-list-fields": "2.0.4", - "graphql-relay": "0.10.0", + "graphql-relay": "0.10.1", "graphql-tag": "2.12.6", "graphql-upload": "15.0.2", "intersect": "1.0.1", @@ -8824,9 +8824,9 @@ "integrity": "sha512-q3prnhAL/dBsD+vaGr83B8DzkBijg+Yh+lbt7qp2dW1fpuO+q/upzDXvFJstVsSAA8m11MHGkSxxyxXeLou4MA==" }, "node_modules/graphql-relay": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.0.tgz", - "integrity": "sha512-44yBuw2/DLNEiMypbNZBt1yMDbBmyVPVesPywnteGGALiBmdyy1JP8jSg8ClLePg8ZZxk0O4BLhd1a6U/1jDOQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.1.tgz", + "integrity": "sha512-8AtwSe6B0/b4+YzynHr38PP7S+zX5Vs5LEo0BEzGCPq/THAiHa5H5ZLf3bRbKbok15ADxDQSsGJmlqXeJDDPIw==", "engines": { "node": "^12.20.0 || ^14.15.0 || >= 15.9.0" }, @@ -26154,9 +26154,9 @@ "integrity": "sha512-q3prnhAL/dBsD+vaGr83B8DzkBijg+Yh+lbt7qp2dW1fpuO+q/upzDXvFJstVsSAA8m11MHGkSxxyxXeLou4MA==" }, "graphql-relay": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.0.tgz", - "integrity": "sha512-44yBuw2/DLNEiMypbNZBt1yMDbBmyVPVesPywnteGGALiBmdyy1JP8jSg8ClLePg8ZZxk0O4BLhd1a6U/1jDOQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.1.tgz", + "integrity": "sha512-8AtwSe6B0/b4+YzynHr38PP7S+zX5Vs5LEo0BEzGCPq/THAiHa5H5ZLf3bRbKbok15ADxDQSsGJmlqXeJDDPIw==", "requires": {} }, "graphql-tag": { diff --git a/package.json b/package.json index 1d91f72c..9550023f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "follow-redirects": "1.15.6", "graphql": "16.8.1", "graphql-list-fields": "2.0.4", - "graphql-relay": "0.10.0", + "graphql-relay": "0.10.1", "graphql-tag": "2.12.6", "graphql-upload": "15.0.2", "intersect": "1.0.1", From bceb621a32f9b28675dacdd1a8644cf927856ade Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Sat, 13 Apr 2024 15:36:29 -0500 Subject: [PATCH 6/7] docs: Generate API documentation for release branch (#9081) --- jsdoc-conf.json | 2 +- release_docs.sh | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/jsdoc-conf.json b/jsdoc-conf.json index efbaa0a3..52bb51f4 100644 --- a/jsdoc-conf.json +++ b/jsdoc-conf.json @@ -29,7 +29,7 @@ "template": "./node_modules/clean-jsdoc-theme", "theme_opts": { "default_theme": "dark", - "title": "", + "title": "", "create_style": "header, .sidebar-section-title, .sidebar-title { color: #139cee !important } .logo { margin-left : 40px; margin-right: 40px }" } }, diff --git a/release_docs.sh b/release_docs.sh index a9cc5bf3..0c7cc2b3 100755 --- a/release_docs.sh +++ b/release_docs.sh @@ -1,10 +1,17 @@ #!/bin/sh -e set -x +# GITHUB_ACTIONS=true SOURCE_TAG=test ./release_docs.sh + if [ "${GITHUB_ACTIONS}" = "" ]; then echo "Cannot release docs without GITHUB_ACTIONS set" exit 0; fi +if [ "${SOURCE_TAG}" = "" ]; +then + echo "Cannot release docs without SOURCE_TAG set" + exit 0; +fi REPO="https://github.com/parse-community/parse-server" rm -rf docs @@ -13,20 +20,20 @@ cd docs git pull origin gh-pages cd .. -DEST="master" +RELEASE="release" +VERSION="${SOURCE_TAG}" -if [ "${SOURCE_TAG}" != "" ]; -then - DEST="${SOURCE_TAG}" - # change the default page to the latest - echo "" > "docs/api/index.html" -fi +# change the default page to the latest +echo "" > "docs/api/index.html" npm run definitions npm run docs -mkdir -p "docs/api/${DEST}" -cp -R out/* "docs/api/${DEST}" +mkdir -p "docs/api/${RELEASE}" +cp -R out/* "docs/api/${RELEASE}" + +mkdir -p "docs/api/${VERSION}" +cp -R out/* "docs/api/${VERSION}" # Copy other resources RESOURCE_DIR=".github" From e01c44a15b94d5959fb45845c000aa8ec8a7d4d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Apr 2024 23:46:02 +0200 Subject: [PATCH 7/7] refactor: Bump @apollo/client from 3.9.5 to 3.9.11 (#9080) --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5715c410..4d78e3e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ }, "devDependencies": { "@actions/core": "1.10.1", - "@apollo/client": "3.9.5", + "@apollo/client": "3.9.11", "@babel/cli": "7.23.9", "@babel/core": "7.24.3", "@babel/plugin-proposal-object-rest-spread": "7.10.0", @@ -161,9 +161,9 @@ } }, "node_modules/@apollo/client": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.5.tgz", - "integrity": "sha512-7y+c8MTPU+hhTwvcGVtMMGIgWduzrvG1mz5yJMRyqYbheBkkky3Lki6ADWVSBXG1lZoOtPYvB2zDgVfKb2HSsw==", + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.11.tgz", + "integrity": "sha512-H7e9m7cRcFO93tokwzqrsbnfKorkpV24xU30hFH5u2g6B+c1DMo/ouyF/YrBPdrTzqxQCjTUmds/FLmJ7626GA==", "dev": true, "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -174,7 +174,7 @@ "hoist-non-react-statics": "^3.3.2", "optimism": "^0.18.0", "prop-types": "^15.7.2", - "rehackt": "0.0.5", + "rehackt": "0.0.6", "response-iterator": "^0.2.6", "symbol-observable": "^4.0.0", "ts-invariant": "^0.10.3", @@ -16909,9 +16909,9 @@ } }, "node_modules/rehackt": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.5.tgz", - "integrity": "sha512-BI1rV+miEkaHj8zd2n+gaMgzu/fKz7BGlb4zZ6HAiY9adDmJMkaDcmuXlJFv0eyKUob+oszs3/2gdnXUrzx2Tg==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.6.tgz", + "integrity": "sha512-l3WEzkt4ntlEc/IB3/mF6SRgNHA6zfQR7BlGOgBTOmx7IJJXojDASav+NsgXHFjHn+6RmwqsGPFgZpabWpeOdw==", "dev": true, "peerDependencies": { "@types/react": "*", @@ -19688,9 +19688,9 @@ "requires": {} }, "@apollo/client": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.5.tgz", - "integrity": "sha512-7y+c8MTPU+hhTwvcGVtMMGIgWduzrvG1mz5yJMRyqYbheBkkky3Lki6ADWVSBXG1lZoOtPYvB2zDgVfKb2HSsw==", + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.9.11.tgz", + "integrity": "sha512-H7e9m7cRcFO93tokwzqrsbnfKorkpV24xU30hFH5u2g6B+c1DMo/ouyF/YrBPdrTzqxQCjTUmds/FLmJ7626GA==", "dev": true, "requires": { "@graphql-typed-document-node/core": "^3.1.1", @@ -19701,7 +19701,7 @@ "hoist-non-react-statics": "^3.3.2", "optimism": "^0.18.0", "prop-types": "^15.7.2", - "rehackt": "0.0.5", + "rehackt": "0.0.6", "response-iterator": "^0.2.6", "symbol-observable": "^4.0.0", "ts-invariant": "^0.10.3", @@ -32114,9 +32114,9 @@ } }, "rehackt": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.5.tgz", - "integrity": "sha512-BI1rV+miEkaHj8zd2n+gaMgzu/fKz7BGlb4zZ6HAiY9adDmJMkaDcmuXlJFv0eyKUob+oszs3/2gdnXUrzx2Tg==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.0.6.tgz", + "integrity": "sha512-l3WEzkt4ntlEc/IB3/mF6SRgNHA6zfQR7BlGOgBTOmx7IJJXojDASav+NsgXHFjHn+6RmwqsGPFgZpabWpeOdw==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index 9550023f..e6f8fa72 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ }, "devDependencies": { "@actions/core": "1.10.1", - "@apollo/client": "3.9.5", + "@apollo/client": "3.9.11", "@babel/cli": "7.23.9", "@babel/core": "7.24.3", "@babel/plugin-proposal-object-rest-spread": "7.10.0",