@beiguancyc/parse-server 9.9.0-ruixiang.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.
Files changed (251) hide show
  1. package/LICENSE +176 -0
  2. package/NOTICE +10 -0
  3. package/README.md +1311 -0
  4. package/bin/parse-live-query-server +3 -0
  5. package/bin/parse-server +3 -0
  6. package/lib/AccountLockout.js +149 -0
  7. package/lib/Adapters/AdapterLoader.js +60 -0
  8. package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
  9. package/lib/Adapters/Auth/AuthAdapter.js +132 -0
  10. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
  11. package/lib/Adapters/Auth/OAuth1Client.js +204 -0
  12. package/lib/Adapters/Auth/apple.js +125 -0
  13. package/lib/Adapters/Auth/facebook.js +187 -0
  14. package/lib/Adapters/Auth/gcenter.js +217 -0
  15. package/lib/Adapters/Auth/github.js +125 -0
  16. package/lib/Adapters/Auth/google.js +122 -0
  17. package/lib/Adapters/Auth/gpgames.js +125 -0
  18. package/lib/Adapters/Auth/httpsRequest.js +41 -0
  19. package/lib/Adapters/Auth/index.js +248 -0
  20. package/lib/Adapters/Auth/instagram.js +118 -0
  21. package/lib/Adapters/Auth/janraincapture.js +85 -0
  22. package/lib/Adapters/Auth/janrainengage.js +57 -0
  23. package/lib/Adapters/Auth/keycloak.js +168 -0
  24. package/lib/Adapters/Auth/ldap.js +193 -0
  25. package/lib/Adapters/Auth/line.js +125 -0
  26. package/lib/Adapters/Auth/linkedin.js +117 -0
  27. package/lib/Adapters/Auth/meetup.js +44 -0
  28. package/lib/Adapters/Auth/mfa.js +334 -0
  29. package/lib/Adapters/Auth/microsoft.js +111 -0
  30. package/lib/Adapters/Auth/oauth2.js +115 -0
  31. package/lib/Adapters/Auth/phantauth.js +53 -0
  32. package/lib/Adapters/Auth/qq.js +113 -0
  33. package/lib/Adapters/Auth/spotify.js +115 -0
  34. package/lib/Adapters/Auth/twitter.js +197 -0
  35. package/lib/Adapters/Auth/utils.js +28 -0
  36. package/lib/Adapters/Auth/vkontakte.js +55 -0
  37. package/lib/Adapters/Auth/wechat.js +110 -0
  38. package/lib/Adapters/Auth/weibo.js +141 -0
  39. package/lib/Adapters/Cache/CacheAdapter.js +40 -0
  40. package/lib/Adapters/Cache/InMemoryCache.js +61 -0
  41. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
  42. package/lib/Adapters/Cache/LRUCache.js +35 -0
  43. package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
  44. package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
  45. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  46. package/lib/Adapters/Email/MailAdapter.js +32 -0
  47. package/lib/Adapters/Files/FilesAdapter.js +129 -0
  48. package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
  49. package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
  50. package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
  51. package/lib/Adapters/Logger/WinstonLogger.js +107 -0
  52. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
  53. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
  54. package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
  55. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  56. package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
  57. package/lib/Adapters/Push/PushAdapter.js +40 -0
  58. package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
  59. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
  60. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
  61. package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
  62. package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
  63. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
  64. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
  65. package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
  66. package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
  67. package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
  68. package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
  69. package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
  70. package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
  71. package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
  72. package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
  73. package/lib/Adapters/Storage/StorageAdapter.js +2 -0
  74. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  75. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  76. package/lib/Auth.js +687 -0
  77. package/lib/AuthDataLock.js +53 -0
  78. package/lib/ClientSDK.js +39 -0
  79. package/lib/Config.js +879 -0
  80. package/lib/Controllers/AdaptableController.js +72 -0
  81. package/lib/Controllers/AnalyticsController.js +43 -0
  82. package/lib/Controllers/CacheController.js +71 -0
  83. package/lib/Controllers/DatabaseController.js +1685 -0
  84. package/lib/Controllers/FilesController.js +122 -0
  85. package/lib/Controllers/HooksController.js +254 -0
  86. package/lib/Controllers/LiveQueryController.js +72 -0
  87. package/lib/Controllers/LoggerController.js +222 -0
  88. package/lib/Controllers/ParseGraphQLController.js +294 -0
  89. package/lib/Controllers/PushController.js +224 -0
  90. package/lib/Controllers/SchemaController.js +1563 -0
  91. package/lib/Controllers/UserController.js +364 -0
  92. package/lib/Controllers/index.js +251 -0
  93. package/lib/Controllers/types.js +2 -0
  94. package/lib/Deprecator/Deprecations.js +100 -0
  95. package/lib/Deprecator/Deprecator.js +140 -0
  96. package/lib/Error.js +50 -0
  97. package/lib/FileUrlValidator.js +69 -0
  98. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  99. package/lib/GraphQL/ParseGraphQLServer.js +241 -0
  100. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  101. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  102. package/lib/GraphQL/helpers/queryComplexity.js +138 -0
  103. package/lib/GraphQL/loaders/configMutations.js +87 -0
  104. package/lib/GraphQL/loaders/configQueries.js +79 -0
  105. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  106. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  107. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1099 -0
  108. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  109. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  110. package/lib/GraphQL/loaders/functionsMutations.js +77 -0
  111. package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
  112. package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
  113. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  114. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  115. package/lib/GraphQL/loaders/schemaMutations.js +161 -0
  116. package/lib/GraphQL/loaders/schemaQueries.js +80 -0
  117. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  118. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  119. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  120. package/lib/GraphQL/parseGraphQLUtils.js +71 -0
  121. package/lib/GraphQL/transformers/className.js +14 -0
  122. package/lib/GraphQL/transformers/constraintType.js +53 -0
  123. package/lib/GraphQL/transformers/inputType.js +51 -0
  124. package/lib/GraphQL/transformers/mutation.js +280 -0
  125. package/lib/GraphQL/transformers/outputType.js +51 -0
  126. package/lib/GraphQL/transformers/query.js +237 -0
  127. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  128. package/lib/InstallationDedup.js +178 -0
  129. package/lib/KeyPromiseQueue.js +48 -0
  130. package/lib/LiveQuery/Client.js +90 -0
  131. package/lib/LiveQuery/Id.js +20 -0
  132. package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
  133. package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
  134. package/lib/LiveQuery/ParsePubSub.js +37 -0
  135. package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
  136. package/lib/LiveQuery/QueryTools.js +443 -0
  137. package/lib/LiveQuery/RequestSchema.js +161 -0
  138. package/lib/LiveQuery/SessionTokenCache.js +51 -0
  139. package/lib/LiveQuery/Subscription.js +47 -0
  140. package/lib/LiveQuery/equalObjects.js +50 -0
  141. package/lib/Options/Definitions.js +1599 -0
  142. package/lib/Options/docs.js +389 -0
  143. package/lib/Options/index.js +12 -0
  144. package/lib/Options/parsers.js +89 -0
  145. package/lib/Page.js +44 -0
  146. package/lib/ParseMessageQueue.js +24 -0
  147. package/lib/ParseServer.js +632 -0
  148. package/lib/ParseServerRESTController.js +173 -0
  149. package/lib/PromiseRouter.js +208 -0
  150. package/lib/Push/PushQueue.js +67 -0
  151. package/lib/Push/PushWorker.js +101 -0
  152. package/lib/Push/utils.js +129 -0
  153. package/lib/RestQuery.js +1208 -0
  154. package/lib/RestWrite.js +1671 -0
  155. package/lib/Routers/AggregateRouter.js +150 -0
  156. package/lib/Routers/AnalyticsRouter.js +26 -0
  157. package/lib/Routers/AudiencesRouter.js +54 -0
  158. package/lib/Routers/ClassesRouter.js +191 -0
  159. package/lib/Routers/CloudCodeRouter.js +87 -0
  160. package/lib/Routers/FeaturesRouter.js +72 -0
  161. package/lib/Routers/FilesRouter.js +772 -0
  162. package/lib/Routers/FunctionsRouter.js +341 -0
  163. package/lib/Routers/GlobalConfigRouter.js +123 -0
  164. package/lib/Routers/GraphQLRouter.js +41 -0
  165. package/lib/Routers/HooksRouter.js +121 -0
  166. package/lib/Routers/IAPValidationRouter.js +113 -0
  167. package/lib/Routers/InstallationsRouter.js +46 -0
  168. package/lib/Routers/LogsRouter.js +57 -0
  169. package/lib/Routers/PagesRouter.js +676 -0
  170. package/lib/Routers/PurgeRouter.js +45 -0
  171. package/lib/Routers/PushRouter.js +75 -0
  172. package/lib/Routers/RolesRouter.js +33 -0
  173. package/lib/Routers/SchemasRouter.js +118 -0
  174. package/lib/Routers/SecurityRouter.js +34 -0
  175. package/lib/Routers/SessionsRouter.js +126 -0
  176. package/lib/Routers/UsersRouter.js +733 -0
  177. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  178. package/lib/SchemaMigrations/Migrations.js +30 -0
  179. package/lib/Security/Check.js +109 -0
  180. package/lib/Security/CheckGroup.js +44 -0
  181. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  182. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +160 -0
  183. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  184. package/lib/Security/CheckRunner.js +213 -0
  185. package/lib/SharedRest.js +34 -0
  186. package/lib/StatusHandler.js +329 -0
  187. package/lib/TestUtils.js +87 -0
  188. package/lib/Utils.js +577 -0
  189. package/lib/batch.js +185 -0
  190. package/lib/cache.js +12 -0
  191. package/lib/cli/definitions/parse-live-query-server.js +9 -0
  192. package/lib/cli/definitions/parse-server.js +9 -0
  193. package/lib/cli/parse-live-query-server.js +14 -0
  194. package/lib/cli/parse-server.js +101 -0
  195. package/lib/cli/utils/commander.js +132 -0
  196. package/lib/cli/utils/runner.js +53 -0
  197. package/lib/cloud-code/Parse.Cloud.js +797 -0
  198. package/lib/cloud-code/Parse.Server.js +21 -0
  199. package/lib/cryptoUtils.js +54 -0
  200. package/lib/defaults.js +58 -0
  201. package/lib/deprecated.js +12 -0
  202. package/lib/index.js +89 -0
  203. package/lib/logger.js +40 -0
  204. package/lib/middlewares.js +810 -0
  205. package/lib/password.js +40 -0
  206. package/lib/request.js +175 -0
  207. package/lib/requiredParameter.js +11 -0
  208. package/lib/rest.js +264 -0
  209. package/lib/triggers.js +949 -0
  210. package/lib/vendor/README.md +8 -0
  211. package/lib/vendor/mongodbUrl.js +1012 -0
  212. package/package.json +172 -0
  213. package/postinstall.js +38 -0
  214. package/public/custom_json.html +17 -0
  215. package/public/custom_json.json +23 -0
  216. package/public/custom_page.html +15 -0
  217. package/public/de/email_verification_link_expired.html +24 -0
  218. package/public/de/email_verification_link_invalid.html +21 -0
  219. package/public/de/email_verification_send_fail.html +21 -0
  220. package/public/de/email_verification_send_success.html +19 -0
  221. package/public/de/email_verification_success.html +18 -0
  222. package/public/de/password_reset.html +65 -0
  223. package/public/de/password_reset_link_invalid.html +19 -0
  224. package/public/de/password_reset_success.html +18 -0
  225. package/public/de-AT/email_verification_link_expired.html +24 -0
  226. package/public/de-AT/email_verification_link_invalid.html +21 -0
  227. package/public/de-AT/email_verification_send_fail.html +21 -0
  228. package/public/de-AT/email_verification_send_success.html +19 -0
  229. package/public/de-AT/email_verification_success.html +18 -0
  230. package/public/de-AT/password_reset.html +65 -0
  231. package/public/de-AT/password_reset_link_invalid.html +19 -0
  232. package/public/de-AT/password_reset_success.html +18 -0
  233. package/public/email_verification_link_expired.html +24 -0
  234. package/public/email_verification_link_invalid.html +21 -0
  235. package/public/email_verification_send_fail.html +21 -0
  236. package/public/email_verification_send_success.html +19 -0
  237. package/public/email_verification_success.html +18 -0
  238. package/public/password_reset.html +65 -0
  239. package/public/password_reset_link_invalid.html +19 -0
  240. package/public/password_reset_success.html +18 -0
  241. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  242. package/types/@types/deepcopy/index.d.ts +5 -0
  243. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  244. package/types/Options/index.d.ts +320 -0
  245. package/types/ParseServer.d.ts +65 -0
  246. package/types/eslint.config.mjs +30 -0
  247. package/types/index.d.ts +21 -0
  248. package/types/logger.d.ts +2 -0
  249. package/types/tests.ts +44 -0
  250. package/types/tsconfig.json +24 -0
  251. package/views/choose_password +215 -0
package/package.json ADDED
@@ -0,0 +1,172 @@
1
+ {
2
+ "name": "@beiguancyc/parse-server",
3
+ "version": "9.9.0-ruixiang.1",
4
+ "description": "An express module providing a Parse-compatible API server",
5
+ "main": "lib/index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/parse-community/parse-server"
9
+ },
10
+ "files": [
11
+ "bin/",
12
+ "lib/",
13
+ "public/",
14
+ "views/",
15
+ "LICENSE",
16
+ "NOTICE",
17
+ "postinstall.js",
18
+ "README.md",
19
+ "types"
20
+ ],
21
+ "license": "Apache-2.0",
22
+ "dependencies": {
23
+ "@apollo/server": "5.5.0",
24
+ "@as-integrations/express5": "1.1.2",
25
+ "@fastify/busboy": "3.2.0",
26
+ "@graphql-tools/merge": "9.1.7",
27
+ "@graphql-tools/schema": "10.0.31",
28
+ "@graphql-tools/utils": "11.0.0",
29
+ "@parse/fs-files-adapter": "3.0.0",
30
+ "@parse/push-adapter": "8.4.0",
31
+ "bcryptjs": "3.0.3",
32
+ "commander": "14.0.3",
33
+ "cors": "2.8.6",
34
+ "express": "5.2.1",
35
+ "express-rate-limit": "8.3.1",
36
+ "follow-redirects": "1.15.11",
37
+ "graphql": "16.13.2",
38
+ "graphql-list-fields": "2.0.4",
39
+ "graphql-relay": "0.10.2",
40
+ "graphql-upload": "15.0.2",
41
+ "intersect": "1.0.1",
42
+ "jsonwebtoken": "9.0.3",
43
+ "jwks-rsa": "3.2.0",
44
+ "ldapjs": "3.0.7",
45
+ "lodash": "4.18.1",
46
+ "lru-cache": "11.2.7",
47
+ "mime": "4.1.0",
48
+ "mongodb": "7.1.0",
49
+ "mustache": "4.2.0",
50
+ "otpauth": "9.5.0",
51
+ "parse": "8.6.0",
52
+ "path-to-regexp": "8.4.2",
53
+ "pg-monitor": "3.1.0",
54
+ "pg-promise": "12.6.0",
55
+ "pluralize": "8.0.0",
56
+ "punycode": "2.3.1",
57
+ "rate-limit-redis": "4.3.1",
58
+ "redis": "5.11.0",
59
+ "semver": "7.7.4",
60
+ "tv4": "1.3.0",
61
+ "winston": "3.19.0",
62
+ "winston-daily-rotate-file": "5.0.0",
63
+ "ws": "8.20.0"
64
+ },
65
+ "devDependencies": {
66
+ "@actions/core": "3.0.0",
67
+ "@apollo/client": "3.13.8",
68
+ "@babel/cli": "7.28.6",
69
+ "@babel/core": "7.29.0",
70
+ "@babel/eslint-parser": "7.28.6",
71
+ "@babel/plugin-proposal-object-rest-spread": "7.20.7",
72
+ "@babel/plugin-transform-flow-strip-types": "7.27.1",
73
+ "@babel/preset-env": "7.29.2",
74
+ "@babel/preset-typescript": "7.27.1",
75
+ "@saithodev/semantic-release-backmerge": "4.0.1",
76
+ "@semantic-release/changelog": "6.0.3",
77
+ "@semantic-release/commit-analyzer": "13.0.1",
78
+ "@semantic-release/git": "10.0.1",
79
+ "@semantic-release/github": "12.0.6",
80
+ "@semantic-release/npm": "13.0.0",
81
+ "@semantic-release/release-notes-generator": "14.1.0",
82
+ "all-node-versions": "13.0.1",
83
+ "apollo-upload-client": "18.0.1",
84
+ "clean-jsdoc-theme": "4.3.0",
85
+ "cross-env": "7.0.3",
86
+ "deep-diff": "1.0.2",
87
+ "eslint": "9.27.0",
88
+ "eslint-plugin-expect-type": "0.6.2",
89
+ "eslint-plugin-unused-imports": "4.4.1",
90
+ "form-data": "4.0.5",
91
+ "globals": "17.3.0",
92
+ "graphql-tag": "2.12.6",
93
+ "jasmine": "6.1.0",
94
+ "jasmine-spec-reporter": "7.0.0",
95
+ "jsdoc": "4.0.5",
96
+ "jsdoc-babel": "0.5.0",
97
+ "lint-staged": "16.4.0",
98
+ "m": "1.10.0",
99
+ "madge": "8.0.0",
100
+ "mock-files-adapter": "file:spec/dependencies/mock-files-adapter",
101
+ "mock-mail-adapter": "file:spec/dependencies/mock-mail-adapter",
102
+ "mongodb-runner": "5.9.3",
103
+ "node-abort-controller": "3.1.1",
104
+ "node-fetch": "3.3.2",
105
+ "nyc": "17.1.0",
106
+ "prettier": "3.8.1",
107
+ "semantic-release": "25.0.3",
108
+ "typescript": "5.9.3",
109
+ "typescript-eslint": "8.58.0",
110
+ "yaml": "2.8.3"
111
+ },
112
+ "scripts": {
113
+ "ci:check": "node ./ci/ciCheck.js",
114
+ "ci:checkNodeEngine": "node ./ci/nodeEngineCheck.js",
115
+ "ci:definitionsCheck": "node ./ci/definitionsCheck.js",
116
+ "definitions": "node ./resources/buildConfigDefinitions.js && prettier --write 'src/Options/*.js'",
117
+ "docs": "jsdoc -c ./jsdoc-conf.json",
118
+ "lint": "eslint --cache ./ --flag unstable_config_lookup_from_file",
119
+ "lint-fix": "eslint --fix --cache ./ --flag unstable_config_lookup_from_file",
120
+ "build": "babel src/ -d lib/ --copy-files --extensions '.ts,.js'",
121
+ "build:types": "tsc",
122
+ "watch": "babel --watch src/ -d lib/ --copy-files",
123
+ "watch:ts": "tsc --watch",
124
+ "test:mongodb:7.0.16": "MONGODB_VERSION=7.0.16 npm run test",
125
+ "test:mongodb:8.0.4": "MONGODB_VERSION=8.0.4 npm run test",
126
+ "test:postgres:testonly": "cross-env PARSE_SERVER_TEST_DB=postgres PARSE_SERVER_TEST_DATABASE_URI=postgres://postgres:password@localhost:5432/parse_server_postgres_adapter_test_database npm run testonly",
127
+ "testonly": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=8.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} TESTING=1 jasmine",
128
+ "test": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=8.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} mongodb-runner exec -t ${MONGODB_TOPOLOGY} --version ${MONGODB_VERSION} -- --port 27017 -- npm run testonly",
129
+ "test:types": "eslint types/tests.ts -c ./types/eslint.config.mjs",
130
+ "coverage:mongodb": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=8.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} mongodb-runner exec -t ${MONGODB_TOPOLOGY} --version ${MONGODB_VERSION} -- --port 27017 -- npm run coverage",
131
+ "coverage": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=8.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} TESTING=1 nyc jasmine",
132
+ "start": "node ./bin/parse-server",
133
+ "prettier": "prettier --write {src,spec}/{**/*,*}.js",
134
+ "prepare": "npm run build",
135
+ "postinstall": "node -p 'require(\"./postinstall.js\")()'",
136
+ "madge:circular": "node_modules/.bin/madge ./src --circular",
137
+ "benchmark": "cross-env MONGODB_VERSION=8.0.4 MONGODB_TOPOLOGY=standalone mongodb-runner exec -t standalone --version 8.0.4 -- --port 27017 -- npm run benchmark:only",
138
+ "benchmark:only": "node --expose-gc --max-old-space-size=1024 benchmark/performance.js",
139
+ "benchmark:quick": "cross-env BENCHMARK_ITERATIONS=10 npm run benchmark:only"
140
+ },
141
+ "types": "types/index.d.ts",
142
+ "engines": {
143
+ "node": ">=20.19.0 <21.0.0 || >=22.13.0 <23.0.0 || >=24.11.0 <25.0.0"
144
+ },
145
+ "bin": {
146
+ "parse-server": "bin/parse-server"
147
+ },
148
+ "optionalDependencies": {
149
+ "@node-rs/bcrypt": "1.10.7"
150
+ },
151
+ "collective": {
152
+ "type": "opencollective",
153
+ "url": "https://opencollective.com/parse-server",
154
+ "logo": "https://opencollective.com/parse-server/logo.txt?reverse=true&variant=binary"
155
+ },
156
+ "funding": {
157
+ "type": "opencollective",
158
+ "url": "https://opencollective.com/parse-server"
159
+ },
160
+ "husky": {
161
+ "hooks": {
162
+ "pre-commit": "lint-staged"
163
+ }
164
+ },
165
+ "lint-staged": {
166
+ "{src,spec}/{**/*,*}.js": [
167
+ "prettier --write",
168
+ "eslint --fix --cache",
169
+ "git add"
170
+ ]
171
+ }
172
+ }
package/postinstall.js ADDED
@@ -0,0 +1,38 @@
1
+ const message = `
2
+ 1111111111
3
+ 1111111111111111
4
+ 1111111111111111111111
5
+ 11111111111111111111111111
6
+ 111111111111111 11111111
7
+ 1111111111111 111 111111
8
+ 1111111111111 111111111 111111
9
+ 111111111111 11111111111 111111
10
+ 1111111111111 11111111111 111111
11
+ 1111111111111 1111111111 111111
12
+ 1111111111111111111111111 1111111
13
+ 11111111 11111111
14
+ 111111 111 1111111111111111111
15
+ 11111 11111 111111111111111111
16
+ 11111 1 11111111111111111
17
+ 111111 111111111111111111
18
+ 11111111111111111111111111
19
+ 1111111111111111111111
20
+ 111111111111111111
21
+ 11111111111
22
+
23
+ Thank you for using Parse Platform!
24
+ https://parseplatform.org
25
+
26
+ Please consider donating to help us maintain
27
+ this package:
28
+
29
+ 👉 https://opencollective.com/parse-server 👈
30
+
31
+ `;
32
+
33
+ function main() {
34
+ process.stdout.write(message);
35
+ process.exit(0);
36
+ }
37
+
38
+ module.exports = main;
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page demonstrates how to localize using a JSON file that contains the
4
+ translations for each placeholder.
5
+ -->
6
+ <html>
7
+
8
+ <head>
9
+ <title>{{title}}</title>
10
+ </head>
11
+
12
+ <body>
13
+ <h1>{{heading}}</h1>
14
+ <p>{{body}}</p>
15
+ </body>
16
+
17
+ </html>
@@ -0,0 +1,23 @@
1
+ {
2
+ "en": {
3
+ "translation": {
4
+ "title": "Hello!",
5
+ "heading": "Welcome to {{appName}}!",
6
+ "body": "We are delighted to welcome you on board."
7
+ }
8
+ },
9
+ "de": {
10
+ "translation": {
11
+ "title": "Hallo!",
12
+ "heading": "Willkommen bei {{appName}}!",
13
+ "body": "Wir freuen uns, dich begrüßen zu dürfen."
14
+ }
15
+ },
16
+ "de-AT": {
17
+ "translation": {
18
+ "title": "Servus!",
19
+ "heading": "Willkommen bei {{appName}}!",
20
+ "body": "Wir freuen uns, dich begrüßen zu dürfen."
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page demonstrates how to use custom pages in custom routes.
4
+ -->
5
+ <html>
6
+
7
+ <head>
8
+ <title>{{appName}}</title>
9
+ </head>
10
+
11
+ <body>
12
+ <h1>{{appName}}</h1>
13
+ </body>
14
+
15
+ </html>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a security
4
+ token that is expired or incorrect. This can either mean the user has clicked
5
+ on a stale link (i.e. re-clicked on the link) or this could be a sign of a
6
+ malicious user trying to tamper with your app.
7
+ -->
8
+ <html>
9
+
10
+ <head>
11
+ <title>Email Verification</title>
12
+ </head>
13
+
14
+ <body>
15
+ <h1>{{appName}}</h1>
16
+ <h1>Expired verification link!</h1>
17
+ <form method="POST" action="{{publicServerUrl}}/apps/{{appId}}/resend_verification_email">
18
+ <input name="token" type="hidden" value="{{token}}">
19
+ <input name="locale" type="hidden" value="{{locale}}">
20
+ <button type="submit">Resend Link</button>
21
+ </form>
22
+ </body>
23
+
24
+ </html>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with parameters
4
+ that are missing or incorrect. This can either mean the user has incorrectly
5
+ entered a link or this could be a sign of a malicious user trying to tamper
6
+ with your app.
7
+ If the link contains an expired security token (or the email has already
8
+ been verified), this page is not displayed, there is another page for that.
9
+ -->
10
+ <html>
11
+
12
+ <head>
13
+ <title>Email Verification</title>
14
+ </head>
15
+
16
+ <body>
17
+ <h1>{{appName}}</h1>
18
+ <h1>Invalid verification link!</h1>
19
+ </body>
20
+
21
+ </html>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a security
4
+ token that is expired or incorrect, then requests to receive another link,
5
+ but it fails because the username is invalid or the email has already been
6
+ verified. This can either mean the user has previously verified the email
7
+ or this could be a sign of a malicious user trying to tamper with your app.
8
+ -->
9
+ <html>
10
+
11
+ <head>
12
+ <title>Email Verification</title>
13
+ </head>
14
+
15
+ <body>
16
+ <h1>{{appName}}</h1>
17
+ <h1>Invalid link!</h1>
18
+ <p>No link sent. User not found or email already verified.</p>
19
+ </body>
20
+
21
+ </html>
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a
4
+ security token that is expired, then requests to receive another email
5
+ with a new link and the email is sent successfully.
6
+ -->
7
+ <html>
8
+
9
+ <head>
10
+ <title>Email Verification</title>
11
+ </head>
12
+
13
+ <body>
14
+ <h1>{{appName}}</h1>
15
+ <h1>Link sent!</h1>
16
+ <p>A new link has been sent. Check your email.</p>
17
+ </body>
18
+
19
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link and the
4
+ email gets verified successfully.
5
+ -->
6
+ <html>
7
+
8
+ <head>
9
+ <title>Email Verification</title>
10
+ </head>
11
+
12
+ <body>
13
+ <h1>{{appName}}</h1>
14
+ <h1>Email verified!</h1>
15
+ <p>Successfully verified your email for account: {{username}}.</p>
16
+ </body>
17
+
18
+ </html>
@@ -0,0 +1,65 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when someone clicks a valid 'reset password' link.
4
+ Users should feel free to add to this page (i.e. branding or security widgets)
5
+ but should be sure not to delete any of the form inputs or the javascript from the
6
+ template file. This javascript is what adds the necessary values to authenticate
7
+ this session with Parse.
8
+ The query params 'username' and 'app' hold the friendly names for your current user and
9
+ your app. You should feel free to incorporate their values to make the page more personal.
10
+ If you are missing form parameters in your POST, Parse will navigate back to this page and
11
+ add an 'error' query parameter.
12
+ -->
13
+ <html>
14
+
15
+ <head>
16
+ <title>Password Reset</title>
17
+ </head>
18
+
19
+ <body>
20
+ <h1>{{appName}}</h1>
21
+ <h1>Reset Your Password</h1>
22
+ <noscript><p>We apologize, but resetting your password requires javascript</p></noscript>
23
+ <p>You can set a new Password for your account: {{username}}</p>
24
+ <br />
25
+ <p>{{error}}</p>
26
+ <form id='form' action='{{publicServerUrl}}/apps/{{appId}}/request_password_reset' method='POST'>
27
+ <input name='utf-8' type='hidden' value='✓' />
28
+ <input name="username" type="hidden" id="username" value="{{username}}" />
29
+ <input name="token" type="hidden" id="token" value="{{token}}" />
30
+ <input name="locale" type="hidden" id="locale" value="{{locale}}" />
31
+
32
+ <p>New Password</p>
33
+ <input name="new_password" type="password" id="password" />
34
+ <p>Confirm New Password</p>
35
+ <input name="confirm_new_password" type="password" id="password_confirm" />
36
+ <br />
37
+ <p id="password_match_info"></p>
38
+ <br />
39
+ <button id="change_password">Change Password</button>
40
+ </form>
41
+
42
+ <script>
43
+ window.onload = function() {
44
+ document.getElementById("password").oninput = validatePassword;
45
+ document.getElementById("password_confirm").oninput = validatePassword;
46
+ document.getElementById("change_password").disabled = true;
47
+
48
+ function validatePassword() {
49
+ var pass2 = document.getElementById("password").value;
50
+ var pass1 = document.getElementById("password_confirm").value;
51
+ if(pass1 !== pass2) {
52
+ if(document.getElementById("password_confirm").value) {
53
+ document.getElementById("change_password").disabled = true;
54
+ document.getElementById("password_match_info").innerHTML = "Must match the previous entry";
55
+ }
56
+ } else {
57
+ document.getElementById("change_password").disabled = false;
58
+ document.getElementById("password_match_info").innerHTML = "";
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+ </body>
64
+
65
+ </html>
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a password reset link with parameters
4
+ that are missing or incorrect. This can either mean the user has incorrectly
5
+ entered a link or this could be a sign of a malicious user trying to tamper
6
+ with your app.
7
+ -->
8
+ <html>
9
+
10
+ <head>
11
+ <title>Password Reset</title>
12
+ </head>
13
+
14
+ <body>
15
+ <h1>{{appName}}</h1>
16
+ <h1>Invalid password reset link!</h1>
17
+ </body>
18
+
19
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a reset password link, then submits
4
+ the form with a new password and the password gets updated successfully.
5
+ -->
6
+ <html>
7
+
8
+ <head>
9
+ <title>Password Reset</title>
10
+ </head>
11
+
12
+ <body>
13
+ <h1>{{appName}}</h1>
14
+ <h1>Success!</h1>
15
+ <p>Your password has been updated.</p>
16
+ </body>
17
+
18
+ </html>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a security
4
+ token that is expired or incorrect. This can either mean the user has clicked
5
+ on a stale link (i.e. re-clicked on the link) or this could be a sign of a
6
+ malicious user trying to tamper with your app.
7
+ -->
8
+ <html>
9
+
10
+ <head>
11
+ <title>Email Verification</title>
12
+ </head>
13
+
14
+ <body>
15
+ <h1>{{appName}}</h1>
16
+ <h1>Expired verification link!</h1>
17
+ <form method="POST" action="{{publicServerUrl}}/apps/{{appId}}/resend_verification_email">
18
+ <input name="token" type="hidden" value="{{token}}">
19
+ <input name="locale" type="hidden" value="{{locale}}">
20
+ <button type="submit">Resend Link</button>
21
+ </form>
22
+ </body>
23
+
24
+ </html>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with parameters
4
+ that are missing or incorrect. This can either mean the user has incorrectly
5
+ entered a link or this could be a sign of a malicious user trying to tamper
6
+ with your app.
7
+ If the link contains an expired security token (or the email has already
8
+ been verified), this page is not displayed, there is another page for that.
9
+ -->
10
+ <html>
11
+
12
+ <head>
13
+ <title>Email Verification</title>
14
+ </head>
15
+
16
+ <body>
17
+ <h1>{{appName}}</h1>
18
+ <h1>Invalid verification link!</h1>
19
+ </body>
20
+
21
+ </html>
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a security
4
+ token that is expired or incorrect, then requests to receive another link,
5
+ but it fails because the username is invalid or the email has already been
6
+ verified. This can either mean the user has previously verified the email
7
+ or this could be a sign of a malicious user trying to tamper with your app.
8
+ -->
9
+ <html>
10
+
11
+ <head>
12
+ <title>Email Verification</title>
13
+ </head>
14
+
15
+ <body>
16
+ <h1>{{appName}}</h1>
17
+ <h1>Invalid link!</h1>
18
+ <p>No link sent. User not found or email already verified.</p>
19
+ </body>
20
+
21
+ </html>
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link with a
4
+ security token that is expired, then requests to receive another email
5
+ with a new link and the email is sent successfully.
6
+ -->
7
+ <html>
8
+
9
+ <head>
10
+ <title>Email Verification</title>
11
+ </head>
12
+
13
+ <body>
14
+ <h1>{{appName}}</h1>
15
+ <h1>Link sent!</h1>
16
+ <p>A new link has been sent. Check your email.</p>
17
+ </body>
18
+
19
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when a user opens a verify email link and the
4
+ email gets verified successfully.
5
+ -->
6
+ <html>
7
+
8
+ <head>
9
+ <title>Email Verification</title>
10
+ </head>
11
+
12
+ <body>
13
+ <h1>{{appName}}</h1>
14
+ <h1>Email verified!</h1>
15
+ <p>Successfully verified your email for account: {{username}}.</p>
16
+ </body>
17
+
18
+ </html>
@@ -0,0 +1,65 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ This page is displayed when someone clicks a valid 'reset password' link.
4
+ Users should feel free to add to this page (i.e. branding or security widgets)
5
+ but should be sure not to delete any of the form inputs or the javascript from the
6
+ template file. This javascript is what adds the necessary values to authenticate
7
+ this session with Parse.
8
+ The query params 'username' and 'app' hold the friendly names for your current user and
9
+ your app. You should feel free to incorporate their values to make the page more personal.
10
+ If you are missing form parameters in your POST, Parse will navigate back to this page and
11
+ add an 'error' query parameter.
12
+ -->
13
+ <html>
14
+
15
+ <head>
16
+ <title>Password Reset</title>
17
+ </head>
18
+
19
+ <body>
20
+ <h1>{{appName}}</h1>
21
+ <h1>Reset Your Password</h1>
22
+ <noscript><p>We apologize, but resetting your password requires javascript</p></noscript>
23
+ <p>You can set a new Password for your account: {{username}}</p>
24
+ <br />
25
+ <p>{{error}}</p>
26
+ <form id='form' action='{{publicServerUrl}}/apps/{{appId}}/request_password_reset' method='POST'>
27
+ <input name='utf-8' type='hidden' value='✓' />
28
+ <input name="username" type="hidden" id="username" value="{{username}}" />
29
+ <input name="token" type="hidden" id="token" value="{{token}}" />
30
+ <input name="locale" type="hidden" id="locale" value="{{locale}}" />
31
+
32
+ <p>New Password</p>
33
+ <input name="new_password" type="password" id="password" />
34
+ <p>Confirm New Password</p>
35
+ <input name="confirm_new_password" type="password" id="password_confirm" />
36
+ <br />
37
+ <p id="password_match_info"></p>
38
+ <br />
39
+ <button id="change_password">Change Password</button>
40
+ </form>
41
+
42
+ <script>
43
+ window.onload = function() {
44
+ document.getElementById("password").oninput = validatePassword;
45
+ document.getElementById("password_confirm").oninput = validatePassword;
46
+ document.getElementById("change_password").disabled = true;
47
+
48
+ function validatePassword() {
49
+ var pass2 = document.getElementById("password").value;
50
+ var pass1 = document.getElementById("password_confirm").value;
51
+ if(pass1 !== pass2) {
52
+ if(document.getElementById("password_confirm").value) {
53
+ document.getElementById("change_password").disabled = true;
54
+ document.getElementById("password_match_info").innerHTML = "Must match the previous entry";
55
+ }
56
+ } else {
57
+ document.getElementById("change_password").disabled = false;
58
+ document.getElementById("password_match_info").innerHTML = "";
59
+ }
60
+ }
61
+ }
62
+ </script>
63
+ </body>
64
+
65
+ </html>