Parse Server for Node.js / Express
This report summarizes scanner evidence for parse-community/parse-server, a JavaScript project with 21,400 GitHub stars. SynthScan examined 190,572 lines of code across 454 source files, recording 223 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 5.2 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 72 finding(s).
Are imports declared and package/API names verified? 151 finding(s).
Are wrappers, guards, and repeated structures necessary? 45 finding(s).
Which changes need focused human review? 223 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 223 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | spec/ParseGraphQLServer.spec.js | 5179 | result.data.createClass.class.schemaFields = result.data.createClass.class.schemaFields.sort( | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 5182 | result.data.updateClass.class.schemaFields = result.data.updateClass.class.schemaFields.sort( | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 5517 | result.data.createClass.class.schemaFields = result.data.createClass.class.schemaFields.sort( | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 5520 | result.data.deleteClass.class.schemaFields = result.data.deleteClass.class.schemaFields.sort( | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6240 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6243 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6286 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6289 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6332 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 6335 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7220 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7223 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7264 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7267 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7310 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7313 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7367 | if (call.object.s.namespace.collection.indexOf('GraphQLClass') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7370 | } else if (call.object.s.namespace.collection.indexOf('_User') >= 0) { | CODE |
| CRITICAL | spec/ParseGraphQLServer.spec.js | 7466 | result.data.parentClass.graphQLClasses.edges.map(edge => edge.node.objectId) | CODE |
| CRITICAL | spec/Auth.spec.js | 37 | const firstSet = config.cacheController.role.set.calls.first(); | CODE |
| CRITICAL | spec/Auth.spec.js | 40 | const firstGet = config.cacheController.role.get.calls.first(); | CODE |
| CRITICAL | spec/Auth.spec.js | 59 | expect(config.cacheController.role.get.calls.count()).toEqual(1); | CODE |
| CRITICAL | spec/Auth.spec.js | 62 | const firstGet = config.cacheController.role.get.calls.first(); | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 727 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 730 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 733 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 778 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 781 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 784 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 831 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 834 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 837 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 885 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 888 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 891 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 936 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 939 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 942 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 988 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 991 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 994 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1040 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1043 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1046 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1093 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1096 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1099 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1161 | if (call.object.s.namespace.collection.indexOf('MyObject0') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1164 | if (call.object.s.namespace.collection.indexOf('MyObject1') >= 0) { | CODE |
| CRITICAL⚡ | spec/ReadPreferenceOption.spec.js | 1167 | if (call.object.s.namespace.collection.indexOf('MyObject2') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 32 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 75 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 107 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 139 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 171 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 207 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 242 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 273 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 304 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| CRITICAL | spec/ReadPreferenceOption.spec.js | 335 | if (call.object.s.namespace.collection.indexOf('MyObject') >= 0) { | CODE |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | benchmark/compare.js | 181 | print('⚠️ Benchmark results are empty or invalid'); | CODE |
| HIGH⚡ | benchmark/compare.js | 184 | print('# Performance Benchmark Results'); | CODE |
| HIGH⚡ | benchmark/compare.js | 185 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 186 | print('> ℹ️ Baseline not available - this appears to be a new feature'); | CODE |
| HIGH⚡ | benchmark/compare.js | 187 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 188 | print('| Benchmark | Value | Details |'); | CODE |
| HIGH⚡ | benchmark/compare.js | 189 | print('|-----------|-------|---------|'); | CODE |
| HIGH⚡ | benchmark/compare.js | 191 | print(`| ${result.name} | ${result.value.toFixed(2)} ms | ${result.extra} |`); | CODE |
| HIGH⚡ | benchmark/compare.js | 193 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 194 | print('✅ **New benchmarks established for this feature.**'); | CODE |
| HIGH⚡ | benchmark/compare.js | 199 | print('⚠️ PR benchmark results are empty or invalid'); | CODE |
| HIGH⚡ | benchmark/compare.js | 204 | print('# Performance Comparison'); | CODE |
| HIGH⚡ | benchmark/compare.js | 205 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 207 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 211 | print('## Retest'); | CODE |
| HIGH⚡ | benchmark/compare.js | 212 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 213 | print( | CODE |
| HIGH⚡ | benchmark/compare.js | 216 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 219 | print(''); | CODE |
| HIGH⚡ | benchmark/compare.js | 224 | print('⚠️ **Performance regressions detected.** Please review the changes.'); | CODE |
| HIGH⚡ | benchmark/compare.js | 228 | print('🚀 **Performance improvements detected!** Great work!'); | CODE |
| HIGH⚡ | benchmark/compare.js | 230 | print('✅ **No significant performance changes.**'); | CODE |
| HIGH | benchmark/compare.js | 274 | print('⚠️ Could not parse benchmark results'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | spec/EmailVerificationToken.spec.js | 242 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 322 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 387 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 569 | newUser.set('email', 'user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 573 | await Parse.User.requestEmailVerification('user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 610 | user.setEmail('user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 1036 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/EmailVerificationToken.spec.js | 1054 | email: 'user@example.com', | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 142 | user.set('email', 'user@example.com'); | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 144 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 145 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 171 | user.set('email', 'user@example.com'); | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 173 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW⚡ | spec/PasswordPolicy.spec.js | 174 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW | spec/vulnerabilities.spec.js | 6988 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/vulnerabilities.spec.js | 7091 | expect(response.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/vulnerabilities.spec.js | 8383 | post('/users', { username: 'user', password: 'password', email: 'user@example.com' }); | CODE |
| LOW | spec/vulnerabilities.spec.js | 8570 | const res = await post('/verificationEmailRequest', { email: 'user@example.com' }); | CODE |
| LOW | spec/vulnerabilities.spec.js | 8596 | const res = await post('/requestPasswordReset', { email: 'user@example.com' }); | CODE |
| LOW | spec/UserPII.spec.js | 8 | const EMAIL = 'foo@bar.com'; | CODE |
| LOW | spec/ParseLiveQuery.spec.js | 1330 | owner.set('phone', '555-1234'); | CODE |
| LOW | spec/ParseLiveQuery.spec.js | 1375 | expect(object.get('phone')).toBe('555-1234'); | CODE |
| LOW | spec/ParseLiveQuery.spec.js | 1376 | expect(original.get('phone')).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 1914 | user1.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 1930 | expect(response.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 1959 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 1981 | expect(masterResponse.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2022 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2049 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2079 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2107 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2120 | expect(response.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2136 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2149 | expect(response.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2163 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2176 | expect(response.data.phone).toBe('555-1234'); | CODE |
| LOW | spec/ProtectedFields.spec.js | 2191 | user.set('phone', '555-1234'); | CODE |
| LOW | spec/Middlewares.spec.js | 404 | fakeReq.userFromJWT = 'fake-user'; | CODE |
| LOW | spec/Middlewares.spec.js | 406 | expect(fakeReq.auth.user).toEqual('fake-user'); | CODE |
| LOW | spec/ParseQuery.spec.js | 2891 | new PostObject({ author: postAuthor, title: 'Lorem ipsum' }), | CODE |
| LOW⚡ | spec/index.spec.js | 806 | user.setEmail('user@example.com'); | CODE |
| LOW⚡ | spec/index.spec.js | 811 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW⚡ | spec/index.spec.js | 819 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW | spec/ValidationAndPasswordsReset.spec.js | 335 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/ValidationAndPasswordsReset.spec.js | 1198 | user.set('email', 'user@example.com'); | CODE |
| LOW | spec/ValidationAndPasswordsReset.spec.js | 1200 | await Parse.User.requestPasswordReset('user@example.com'); | CODE |
| LOW | spec/ParseUser.spec.js | 2627 | user.set('email', 'test@test.com'); | CODE |
| LOW | spec/ParseUser.spec.js | 2634 | user2.set('email', 'test@test.com'); | CODE |
| LOW | spec/ParseUser.spec.js | 2737 | user.set('email', 'test@test.com'); | CODE |
| LOW | spec/ParseUser.spec.js | 2747 | user2.set('email', 'test@test.com'); | CODE |
| LOW | spec/ParseUser.spec.js | 2765 | user.set('email', 'test@test.com'); | CODE |
| LOW | spec/RouteAllowList.spec.js | 427 | body: JSON.stringify({ email: 'user@example.com' }), | CODE |
| LOW | spec/RouteAllowList.spec.js | 482 | user.set('email', 'user@example.com'); | CODE |
| LOW⚡ | spec/support/lorem.txt | 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lobortis semper diam, ac euismod diam pharetra sed. Eti | CODE |
| LOW⚡ | spec/support/lorem.txt | 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lobortis semper diam, ac euismod diam pharetra sed. Eti | CODE |
| LOW⚡ | spec/support/lorem.txt | 3 | Sed porttitor commodo orci, ut pretium eros convallis eget. Curabitur pretium velit in odio dictum luctus. Vivamus ac tr | CODE |
| LOW⚡ | spec/support/lorem.txt | 3 | Sed porttitor commodo orci, ut pretium eros convallis eget. Curabitur pretium velit in odio dictum luctus. Vivamus ac tr | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmark/performance.js | 497 | async function benchmarkQueryWithIncludeParallel(name) { | CODE |
| LOW | benchmark/performance.js | 560 | async function benchmarkQueryWithIncludeNested(name) { | CODE |
| LOW | benchmark/performance.js | 646 | async function benchmarkLargeResultMemory(name) { | CODE |
| LOW | benchmark/performance.js | 682 | async function benchmarkConcurrentQueryMemory(name) { | CODE |
| LOW | benchmark/performance.js | 811 | async function benchmarkObjectCreateNestedDenylist(name) { | CODE |
| LOW | spec/PagesRouter.spec.js | 170 | async function reconfigureServerWithPagesConfig(pagesConfig) { | CODE |
| LOW | spec/vulnerabilities.spec.js | 7359 | async function subscribeWithoutSubscriptionToken(className) { | CODE |
| LOW | spec/ParseInstallation.spec.js | 1414 | async function reconfigureWithInstallationOptions(installationOpts) { | CODE |
| LOW | spec/ParseInstallation.spec.js | 1424 | async function setInstallationClassLevelPermissions(overrides) { | CODE |
| LOW | spec/ParseInstallation.spec.js | 1694 | async function reconfigureWithInstallationOptions(installationOpts) { | CODE |
| LOW | spec/ParseInstallation.spec.js | 1800 | async function reconfigureWithInstallationOptions(installationOpts) { | CODE |
| LOW | spec/OAuth1.spec.js | 80 | function validateCannotAuthenticateError(data, done) { | CODE |
| LOW | spec/SecurityCheck.spec.js | 21 | async function reconfigureServerWithSecurityConfig(security) { | CODE |
| LOW | spec/AuthenticationAdapters.spec.js | 254 | function validateAuthenticationHandler(authenticationHandler) { | CODE |
| LOW | spec/AuthenticationAdapters.spec.js | 260 | function validateAuthenticationAdapter(authAdapter) { | CODE |
| LOW | spec/Schema.spec.js | 1383 | function validateSchemaDataStructure(schemaData) { | CODE |
| LOW | spec/helper.js | 391 | function mockFacebookAuthenticator(id, token) { | CODE |
| LOW | src/rest.js | 320 | function handleSessionMissingError(error, className, auth, config) { | CODE |
| LOW | src/batch.js | 23 | function makeBatchRoutingPathFunction(originalUrl, serverURL, publicServerURL) { | CODE |
| LOW | src/TestUtils.js | 8 | export function destroyAllDataPermanently(fast) { | CODE |
| LOW | src/Auth.js | 78 | function shouldUpdateSessionExpiry(config, session) { | CODE |
| LOW | src/AuthDataLock.js | 15 | export function applyAuthDataOptimisticLock(query, originalAuthData, newAuthData) { | CODE |
| LOW | src/triggers.js | 66 | function validateClassNameForTriggers(className, type) { | CODE |
| LOW | src/triggers.js | 440 | function logTriggerSuccessBeforeHook(triggerType, className, input, result, auth, logLevel) { | CODE |
| LOW | src/triggers.js | 458 | function logTriggerErrorBeforeHook(triggerType, className, input, auth, error, logLevel) { | CODE |
| LOW | src/triggers.js | 1043 | export function runLiveQueryEventHandlers(data, applicationId = Parse.applicationId) { | CODE |
| LOW | src/triggers.js | 1121 | export async function maybeRunGlobalConfigTrigger(triggerType, auth, configObject, originalConfigObject, config, context | CODE |
| LOW | src/InstallationDedup.js | 65 | export async function removeConflictingDeviceToken({ | CODE |
| LOW | src/InstallationDedup.js | 117 | export async function applyDuplicateDeviceTokenMerge({ | CODE |
| LOW | src/middlewares.js | 525 | function normalizeRouteAllowListPath(path, mount) { | CODE |
| LOW | src/middlewares.js | 661 | export function promiseEnforceMasterKeyAccess(request) { | CODE |
| LOW | src/ParseServerRESTController.js | 32 | function ParseServerRESTController(applicationId, router) { | CODE |
| LOW | src/Routers/IAPValidationRouter.js | 46 | function getFileForProductIdentifier(productIdentifier, req) { | CODE |
| LOW | src/Routers/SchemasRouter.js | 10 | function classNameMismatchResponse(bodyClass, pathClass) { | CODE |
| LOW | src/Adapters/Storage/Postgres/PostgresConfigParser.js | 2 | function getDatabaseOptionsFromURI(uri) { | CODE |
| LOW | src/Adapters/Storage/Postgres/PostgresStorageAdapter.js | 2756 | function isAnyValueRegexStartsWith(values) { | CODE |
| LOW | src/Adapters/Storage/Mongo/MongoSchemaCollection.js | 4 | function mongoFieldToParseSchemaField(type) { | CODE |
| LOW | src/Adapters/Storage/Mongo/MongoSchemaCollection.js | 43 | function mongoSchemaFieldsToParseSchemaFields(schema) { | CODE |
| LOW | src/Adapters/Storage/Mongo/MongoSchemaCollection.js | 126 | function parseFieldTypeToMongoFieldType({ type, targetClass }) { | CODE |
| LOW | src/Push/utils.js | 43 | export function transformPushBodyForLocale(body, locale) { | CODE |
| LOW | src/GraphQL/helpers/queryComplexity.js | 74 | function createComplexityValidationPlugin(getConfig) { | CODE |
| LOW | src/Controllers/SchemaController.js | 237 | function validateProtectedFieldsKey(key, userIdRegExp) { | CODE |
| LOW | src/Controllers/SchemaController.js | 422 | function validatePointerPermission(fieldName: string, fields: Object, operation: string) { | CODE |
| LOW | src/Controllers/SchemaController.js | 1544 | function thenValidateRequiredColumns(schemaPromise, className, object, query) { | CODE |
| LOW | src/Controllers/index.js | 119 | export function getParseGraphQLController( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/CiVersionCheck.js | 121 | * @param {String} versionComponent The latest version component. | COMMENT |
| LOW | spec/ParseObject.spec.js | 1 | 'use strict'; | COMMENT |
| LOW | src/AuthDataLock.js | 1 | // Apply optimistic locking for authData provider field changes. For each lockable | COMMENT |
| LOW | src/RestQuery.js | 881 | }); | COMMENT |
| LOW | src/RestWrite.js | 1401 | }); | COMMENT |
| LOW | src/PromiseRouter.js | 1 | // A router that is based on promises rather than req/res/next. | COMMENT |
| LOW | src/Routers/UsersRouter.js | 381 | ); | COMMENT |
| LOW | src/LiveQuery/ParseLiveQueryServer.ts | 821 | // group. The REST path builds the same group in `RestQuery.getUserAndRoleACL`; | COMMENT |
| LOW | src/Adapters/Cache/LRUCache.js | 21 | COMMENT | |
| LOW | src/Adapters/Auth/OAuth1Client.js | 81 | OAuth.encode = function (str) { | COMMENT |
| LOW | src/Adapters/Storage/Postgres/PostgresStorageAdapter.js | 1301 | debug(`deleteAllClasses done in ${new Date().getTime() - now}`); | COMMENT |
| LOW | src/Adapters/Storage/Mongo/MongoStorageAdapter.js | 501 | // attempts to delete non-existent fields is the responsibility of Parse Server. | COMMENT |
| LOW | src/Adapters/Storage/Mongo/MongoStorageAdapter.js | 1021 | // For dates, the driver expects a Date object, but we have a string coming in. So we'll convert | COMMENT |
| LOW | src/Adapters/Storage/Mongo/MongoCollection.js | 1 | const mongodb = require('mongodb'); | COMMENT |
| LOW | src/Adapters/Push/PushAdapter.js | 1 | /* eslint-disable unused-imports/no-unused-vars */ | COMMENT |
| LOW | src/Adapters/Files/FilesAdapter.js | 1 | /* eslint-disable unused-imports/no-unused-vars */ | COMMENT |
| LOW | src/Adapters/WebSocketServer/WSSAdapter.js | 21 | constructor(options) { | COMMENT |
| LOW | src/GraphQL/ParseGraphQLServer.js | 101 | }); | COMMENT |
| LOW | src/GraphQL/ParseGraphQLServer.js | 121 | // a field name the caller never supplied. Redact the quoted identifiers from this | COMMENT |
| LOW | src/GraphQL/ParseGraphQLServer.js | 141 | // an invalid `options.readPreference` value still names its enum, just as `CloudCodeFunction` | COMMENT |
| LOW | src/GraphQL/ParseGraphQLServer.js | 161 | // RegExp from the captured name: this avoids substring false-matches (e.g. preserving | COMMENT |
| LOW | src/Controllers/SchemaController.js | 1 | // @flow | COMMENT |
| LOW | src/Controllers/DatabaseController.js | 41 | _password_changed_at: { clientRead: false, masterRead: true, masterWrite: true }, | COMMENT |
| LOW | src/Controllers/DatabaseController.js | 1281 | // its join table is read by `relatedIds`. Without this check, `$relatedTo` | COMMENT |
| LOW | src/Controllers/DatabaseController.js | 1401 | return query; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/GraphQL/loaders/filesMutations.js | 9 | // `createFile` is not directly called by Parse Server to leverage standard file upload mechanism | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/ParseServerRESTController.js | 33 | function handleRequest(method, path, data = {}, options = {}, config) { | CODE |