changelogs/CHANGELOG_beta.md
Parse.Query.distinct fails due to invalid aggregate stage 'hint' (#9295) (5f66c6a)databaseOptions nested keys incorrectly identified as invalid (#9213) (77206d8)maxLogFiles doesn't recognize day duration literals such as 1d to mean 1 day (#9215) (0319cee)Parse.Cloud.beforeSave and Parse.Cloud.afterSave for Parse Config (#9232) (90a1e4a)FilesAdapter.getFileLocation (#9271) (1a2da40)Parse.Cloud.startJob and Parse.Push.send not returning status ID when setting Parse Server option directAccess: true (#8766) (5b0efb2)Required option not handled correctly for special fields (File, GeoPoint, Polygon) on GraphQL API mutations (#8915) (907ad42)notEqualTo is set to null (#8835) (11d3e48)extendSessionOnUse not working for session lengths < 24 hours (#9113) (0a054e6)rateLimit.redisUrl with clusters (#8632) (c277739)silent log level for Cloud Code (#8803) (5f81efb)security.enableCheck to Features Router (#8679) (b07ec15)verifyUserEmails, preventLoginWithUnverifiedEmail set to functions (#8838) (8e7a6b1)masterKeyIps regardless of ACL and CLP (#8957) (a7b5b38)verifyEmail function if both username and email are changed (#8889) (1eb95ae)emailVerifyTokenReuseIfValid: true generates new token on every email verification request (#8885) (0023ce4)fileExtensions default value rejects file extensions that are less than 3 or more than 4 characters long (#8699) (2760381)Parse.Pointer in the request body (#8784) (66e3603)undefined in email verification link on email change (#8887) (e315c13)installationId to arguments for verifyUserEmails, preventLoginWithUnverifiedEmail (#8836) (a22dbe1)installationId, ip, resendRequest to arguments passed to verifyUserEmails on verification email request (#8873) (8adcbee)Parse.User as function parameter to Parse Server options verifyUserEmails, preventLoginWithUnverifiedEmail on login (#8850) (972f630)ignoreEmailVerification (#8895) (633a9d2)Parse.Session.current on expired session token instead of throwing error (#8722) (f9dde4a)allowClientClassCreation defaults to false (#8849) (29624e0)allowExpiredAuthDataToken defaults to false (#8860) (e29845f)fields option is renamed to keys (#8852) (38983e8)allowClientClassCreation defaults to false. (29624e0)masterKeyIps, even if the request does not require the master key permission, for example for a public object in a public class class. (a7b5b38)auth.<provider>.enabled: true (0cf58eb)allowExpiredAuthDataToken defaults to false; a 3rd party authentication token will be validated every time the user tries to log in and the login will fail if the token has expired; the effect of this change may differ for different authentication adapters, depending on the token lifetime and the token refresh logic of the adapter (e29845f)fields option is renamed to keys (38983e8)Parse.Cloud.beforeDeleteFile' has been changed to Parse.Cloud.beforeDelete(Parse.File, (request) => {})' (4e6a375)Parse.User passed as argument if verifyUserEmails is set to a function is renamed from user to object for consistency with invocations of verifyUserEmails on signup or login; the user object is not a plain JavaScript object anymore but an instance of Parse.User (8adcbee)Parse.Session.current() no longer throws an error if the session token is expired, but instead returns the session token with its expiration date to allow checking its validity (f9dde4a)Parse.Query no longer supports the BSON type code; although this feature was never officially documented, its removal is announced as a breaking change to protect deployments where it might be in use. (3de8494)beforeFind when using Parse.Query.include (#8765) (7d32d89)fileUpload.fileExtensions fails to determine file extension if filename contains multiple dots (#8754) (3d6d50e)$setOnInsert operator to Parse.Server.database.update (#8791) (f630a45)enableCollationCaseComparison, transformEmailToLowercase, transformUsernameToLowercase (#8805) (09fbeeb)beforeLogin and afterLogin (#8724) (a9c34ef)createdAt and updatedAt during Parse.Object creation with maintenance key (#8696) (77bbfb3)fileUpload.fileExtensions does not work with an array of extensions (#8688) (6a4a00c)auth option is set (#8666) (4e2000b)verifyUserEmails, sendUserEmailVerification that now accept functions (#8425) (44acd6d)Parse.Server.version to determine current version of Parse Server in Cloud Code (#8670) (a9d376b)afterSave executes even if not set (#8520) (afd0515)enableSchemaHooks settings (#8467) (d4cda4b)handleShutdown is called (#8491) (967700b)extendSessionOnUse (#8562) (fd6a007)extendSessionOnUse to automatically renew Parse Sessions (#8505) (6f885d3)preventSignupWithUnverifiedEmail to prevent returning a user without session token on sign-up with unverified email address (#8451) (82da308)$eq query constraint in LiveQuery (#8614) (656d673)ip, user, session, global (#8508) (03fba97)Parse.Object pointers in Cloud Code arguments (#8490) (28aeda3){} when fetching a Parse Object (#8446) (22d2446)afterFind trigger of authentication adapters (#8458) (ce34747)afterFind trigger to authentication adapters (#8444) (c793bb8)Access-Control-Allow-Origin (#8517) (4f15539)AuthAdapter to make it available for extension with custom authentication adapters (#8443) (40c1961)schemaCacheTtl for schema cache pulling as alternative to enableSchemaHooks (#8436) (b3b76de)resetPasswordSuccessOnInvalidEmail to choose success or error response on password reset with invalid email (#7551) (e5d610e)fields option in favor of keys for semantic consistency (#8388) (a49e323)ParseServer.verifyServerUrl may fail if server response headers are missing; remove unnecessary logging (#8391) (1c37a7c)beforeSave does not work with Parse.Role (#8320) (f29d972)masterKeyIps does not include localhost by default for IPv6 (#8322) (ab82635)masterKeyIps may be circumvented, see GHSA-vm5r-c87r-pf6x (#8372) (892040d)afterLogin, afterLogout crashes server (#8280) (130d290)maintenanceKey; the internal scope contains unofficial and undocumented fields (prefixed with underscore _) which are used internally by Parse Server; you may want to manipulate these fields for out-of-band changes such as data migration or correction tasks; changes within the internal scope of Parse Server may happen at any time without notice or changelog entry, it is therefore recommended to look at the source code of Parse Server to understand the effects of manipulating internal fields before using the key; it is discouraged to use the maintenanceKey for routine operations in a production environment; see access scopes (#8212) (f3bcc93)verifyServerUrl for new asynchronous Parse Server start-up states (#8366) (ffa4974)ParseQuery.watch to trigger LiveQuery only on update of specific fields (#8028) (fc92faa)DEPPS1: Native MongoDB syntax in aggregation pipeline (#8362) (d0d30c4)DEPPS2: Config option directAccess defaults to true (#8284) (f535ee6)DEPPS3: Config option enforcePrivateUsers defaults to true (#8283) (ed499e3)DEPPS4: Remove convenience method for http request Parse.Cloud.httpRequest (#8287) (2d79c08)masterKey to localhost by default (#8281) (6c16021)package-lock.json to version 2 (#8285) (ee72467)masterKeyIps (#8350) (e22b73d)RUN apk --no-cache add git (#8359) (40810b4)_) are only returned using the new maintenanceKey; previously the masterKey allowed reading of internal fields; see access scopes for a comparison of the keys' access permissions (#8212) (f3bcc93)ParseServer.verifyServerUrl now returns a promise instead of a callback. (ffa4974)$match and the MongoDB document ID is referenced using _id instead of objectId (#8362) (d0d30c4)trustProxy accordingly if Parse Server runs behind a proxy server, see the express framework's trust proxy setting (#8372) (892040d)package-lock.json is upgraded to version 2; while it is backwards with version 1 for the npm installer, consider this if you run any non-npm analysis tools that use the lock file (#8285) (ee72467)serverStartComplete; see the Parse Server 6 migration guide for more details (#8232) (99fcf45)Date object was saved as a JSON object like { "__type": "Date", "iso": "2020-01-01T00:00:00.000Z" } instead of its serialized representation 2020-01-01T00:00:00.000Z (#8209) (1412666)enforcePrivateUsers is set to true by default; in previous releases this option defaults to false; this change improves the default security configuration of Parse Server (#8283) (ed499e3)masterKey to localhost by default; if you are using Parse Dashboard on a different server to connect to Parse Server you need to add the IP address of the server that hosts Parse Dashboard to this option (#8281) (6c16021)afterLogin, afterLogout returns a rejected promise; in previous releases it crashed the server if you did not handle the error on the Node.js process level; consider adapting your code if your app currently handles these errors on the Node.js process level with process.on('unhandledRejection', ...) (130d290)directAccess defaults to true; set this to false in environments where multiple Parse Server instances run behind a load balancer and Parse requests within the current Node.js environment should be routed via the load balancer and distributed as HTTP requests among all instances via the serverURL. (f535ee6)Parse.Cloud.httpRequest is removed; use your preferred 3rd party library for making HTTP requests (2d79c08)appIds is set as a string (e.g. abc) instead of an array of strings (e.g. ["abc"]) (GHSA-r657-33vp-gp22) [skip release] (#8187) (8c8ec71)equalTo with value false (#8032) (7f5a15d)_Idempotency and _Role are not protected in defined schema (#8121) (c16f529)containedIn not working when object field is an array (#8128) (1d9605b)badge doesn't update with Installation beforeSave trigger (#8162) (3c75c2b)Date when directAccess: true (#8167) (e424137)Parse.Query.or, Parse.Query.and not working (#8203) (28f0d26)INVALID_SERVER_ERROR on Postgres (#8157) (3b775a1)Parse.Server (#8244) (9f11115)Parse.Query.limit() constraint (#8152) (0388956)Unexpected Error (#8045) (0d81887)Parse.Cloud.beforeSave(Parse.File, (request) => {}), the old syntax Parse.Cloud.beforeSaveFile((request) => {}) has been deprecated (#7966) (c6dcad8)ParseObject.fetch (#7779) (315290d)postgresql protocol in database URI (#7757) (caf4a23)databaseOptions.enableSchemaHooks: true to enable this feature and keep the schema in sync across all instances. Failing to do so will cause a schema change to not propagate to other instances and re-syncing will only happen when these instances restart. The options enableSingleSchemaCache and schemaCacheTTL have been removed. To use this feature with MongoDB, a replica set cluster with change stream support is required. (Diamond Lewis, SebC) #7214fileUpload parameter in the Parse Server Options (dblythy, Manuel Trezza) #7071@parse/s3-files-adapter (Manuel Trezza) #7324restricted; the field was a code artifact from a feature that never existed in Open Source Parse Server; if you have been using this field for custom purposes, consider that for new Parse Server installations the field does not exist anymore in the schema, and for existing installations the field default value false will not be set anymore when creating a new session (Manuel Trezza) #7543null. Previously, setting a field value to null would save a null value in the database, which was not according to the GraphQL specs. To delete a file field use file: null, the previous way of using file: { file: null } has become obsolete. (626fad2)/loginAs to create session of any user with master key; allows to impersonate another user. (GormanFletcher) #7406enforcePrivateUsers, which will remove public access by default on new Parse.Users (dblythy) #7319and query with relational query condition returns incorrect results (#7593) (174886e)Parse.Cloud.sendEmail(...) to send email via email adapter in Cloud Code (dblythy) #7089classNames (Nes-si) #7131requireAnyUserRoles and requireAllUserRoles for Parse Cloud validator (dblythy) #7097accountLockout.unlockOnPasswordReset to automatically unlock account on password reset (Manuel Trezza) #7146options to be async (dblythy) #7155Parse.Cloud.httpRequest; it is recommended to use a HTTP library instead. (Daniel Blyth) #7595