parse-server 2.8.4 → 8.6.2

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 (240) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +929 -278
  4. package/lib/AccountLockout.js +47 -30
  5. package/lib/Adapters/AdapterLoader.js +21 -6
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +15 -12
  7. package/lib/Adapters/Auth/AuthAdapter.js +116 -13
  8. package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
  9. package/lib/Adapters/Auth/OAuth1Client.js +27 -46
  10. package/lib/Adapters/Auth/apple.js +123 -0
  11. package/lib/Adapters/Auth/facebook.js +162 -35
  12. package/lib/Adapters/Auth/gcenter.js +217 -0
  13. package/lib/Adapters/Auth/github.js +118 -48
  14. package/lib/Adapters/Auth/google.js +160 -51
  15. package/lib/Adapters/Auth/gpgames.js +125 -0
  16. package/lib/Adapters/Auth/httpsRequest.js +6 -7
  17. package/lib/Adapters/Auth/index.js +170 -62
  18. package/lib/Adapters/Auth/instagram.js +114 -40
  19. package/lib/Adapters/Auth/janraincapture.js +52 -23
  20. package/lib/Adapters/Auth/janrainengage.js +19 -36
  21. package/lib/Adapters/Auth/keycloak.js +148 -0
  22. package/lib/Adapters/Auth/ldap.js +167 -0
  23. package/lib/Adapters/Auth/line.js +125 -0
  24. package/lib/Adapters/Auth/linkedin.js +111 -55
  25. package/lib/Adapters/Auth/meetup.js +24 -34
  26. package/lib/Adapters/Auth/mfa.js +324 -0
  27. package/lib/Adapters/Auth/microsoft.js +111 -0
  28. package/lib/Adapters/Auth/oauth2.js +97 -162
  29. package/lib/Adapters/Auth/phantauth.js +53 -0
  30. package/lib/Adapters/Auth/qq.js +108 -49
  31. package/lib/Adapters/Auth/spotify.js +107 -55
  32. package/lib/Adapters/Auth/twitter.js +188 -48
  33. package/lib/Adapters/Auth/utils.js +28 -0
  34. package/lib/Adapters/Auth/vkontakte.js +26 -39
  35. package/lib/Adapters/Auth/wechat.js +106 -44
  36. package/lib/Adapters/Auth/weibo.js +132 -58
  37. package/lib/Adapters/Cache/CacheAdapter.js +13 -8
  38. package/lib/Adapters/Cache/InMemoryCache.js +3 -13
  39. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +5 -13
  40. package/lib/Adapters/Cache/LRUCache.js +13 -27
  41. package/lib/Adapters/Cache/NullCacheAdapter.js +3 -8
  42. package/lib/Adapters/Cache/RedisCacheAdapter.js +85 -76
  43. package/lib/Adapters/Cache/SchemaCache.js +25 -0
  44. package/lib/Adapters/Email/MailAdapter.js +10 -8
  45. package/lib/Adapters/Files/FilesAdapter.js +83 -25
  46. package/lib/Adapters/Files/GridFSBucketAdapter.js +231 -0
  47. package/lib/Adapters/Files/GridStoreAdapter.js +4 -91
  48. package/lib/Adapters/Logger/LoggerAdapter.js +18 -14
  49. package/lib/Adapters/Logger/WinstonLogger.js +69 -88
  50. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +7 -16
  51. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +8 -26
  52. package/lib/Adapters/PubSub/EventEmitterPubSub.js +12 -25
  53. package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
  54. package/lib/Adapters/PubSub/RedisPubSub.js +42 -19
  55. package/lib/Adapters/Push/PushAdapter.js +14 -7
  56. package/lib/Adapters/Storage/Mongo/MongoCollection.js +137 -45
  57. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +158 -63
  58. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +320 -168
  59. package/lib/Adapters/Storage/Mongo/MongoTransform.js +279 -306
  60. package/lib/Adapters/Storage/Postgres/PostgresClient.js +14 -10
  61. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +47 -21
  62. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +854 -468
  63. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -6
  64. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  65. package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
  66. package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
  67. package/lib/Auth.js +488 -125
  68. package/lib/ClientSDK.js +2 -6
  69. package/lib/Config.js +525 -94
  70. package/lib/Controllers/AdaptableController.js +5 -25
  71. package/lib/Controllers/AnalyticsController.js +22 -23
  72. package/lib/Controllers/CacheController.js +10 -31
  73. package/lib/Controllers/DatabaseController.js +767 -313
  74. package/lib/Controllers/FilesController.js +49 -54
  75. package/lib/Controllers/HooksController.js +80 -84
  76. package/lib/Controllers/LiveQueryController.js +35 -22
  77. package/lib/Controllers/LoggerController.js +22 -58
  78. package/lib/Controllers/ParseGraphQLController.js +293 -0
  79. package/lib/Controllers/PushController.js +58 -49
  80. package/lib/Controllers/SchemaController.js +916 -422
  81. package/lib/Controllers/UserController.js +265 -180
  82. package/lib/Controllers/index.js +90 -125
  83. package/lib/Controllers/types.js +1 -1
  84. package/lib/Deprecator/Deprecations.js +30 -0
  85. package/lib/Deprecator/Deprecator.js +127 -0
  86. package/lib/Error.js +48 -0
  87. package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
  88. package/lib/GraphQL/ParseGraphQLServer.js +214 -0
  89. package/lib/GraphQL/helpers/objectsMutations.js +30 -0
  90. package/lib/GraphQL/helpers/objectsQueries.js +246 -0
  91. package/lib/GraphQL/loaders/configMutations.js +87 -0
  92. package/lib/GraphQL/loaders/configQueries.js +79 -0
  93. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
  94. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
  95. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1098 -0
  96. package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
  97. package/lib/GraphQL/loaders/filesMutations.js +107 -0
  98. package/lib/GraphQL/loaders/functionsMutations.js +78 -0
  99. package/lib/GraphQL/loaders/parseClassMutations.js +268 -0
  100. package/lib/GraphQL/loaders/parseClassQueries.js +127 -0
  101. package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
  102. package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
  103. package/lib/GraphQL/loaders/schemaMutations.js +162 -0
  104. package/lib/GraphQL/loaders/schemaQueries.js +81 -0
  105. package/lib/GraphQL/loaders/schemaTypes.js +341 -0
  106. package/lib/GraphQL/loaders/usersMutations.js +433 -0
  107. package/lib/GraphQL/loaders/usersQueries.js +90 -0
  108. package/lib/GraphQL/parseGraphQLUtils.js +63 -0
  109. package/lib/GraphQL/transformers/className.js +14 -0
  110. package/lib/GraphQL/transformers/constraintType.js +53 -0
  111. package/lib/GraphQL/transformers/inputType.js +51 -0
  112. package/lib/GraphQL/transformers/mutation.js +274 -0
  113. package/lib/GraphQL/transformers/outputType.js +51 -0
  114. package/lib/GraphQL/transformers/query.js +237 -0
  115. package/lib/GraphQL/transformers/schemaFields.js +99 -0
  116. package/lib/KeyPromiseQueue.js +48 -0
  117. package/lib/LiveQuery/Client.js +25 -33
  118. package/lib/LiveQuery/Id.js +2 -5
  119. package/lib/LiveQuery/ParseCloudCodePublisher.js +26 -23
  120. package/lib/LiveQuery/ParseLiveQueryServer.js +560 -285
  121. package/lib/LiveQuery/ParsePubSub.js +7 -16
  122. package/lib/LiveQuery/ParseWebSocketServer.js +42 -39
  123. package/lib/LiveQuery/QueryTools.js +76 -15
  124. package/lib/LiveQuery/RequestSchema.js +111 -97
  125. package/lib/LiveQuery/SessionTokenCache.js +23 -36
  126. package/lib/LiveQuery/Subscription.js +8 -17
  127. package/lib/LiveQuery/equalObjects.js +2 -3
  128. package/lib/Options/Definitions.js +1355 -382
  129. package/lib/Options/docs.js +301 -62
  130. package/lib/Options/index.js +11 -1
  131. package/lib/Options/parsers.js +14 -10
  132. package/lib/Page.js +44 -0
  133. package/lib/ParseMessageQueue.js +6 -13
  134. package/lib/ParseServer.js +474 -235
  135. package/lib/ParseServerRESTController.js +102 -40
  136. package/lib/PromiseRouter.js +39 -50
  137. package/lib/Push/PushQueue.js +24 -30
  138. package/lib/Push/PushWorker.js +32 -56
  139. package/lib/Push/utils.js +22 -35
  140. package/lib/RestQuery.js +361 -139
  141. package/lib/RestWrite.js +713 -344
  142. package/lib/Routers/AggregateRouter.js +97 -71
  143. package/lib/Routers/AnalyticsRouter.js +8 -14
  144. package/lib/Routers/AudiencesRouter.js +16 -35
  145. package/lib/Routers/ClassesRouter.js +86 -72
  146. package/lib/Routers/CloudCodeRouter.js +28 -37
  147. package/lib/Routers/FeaturesRouter.js +22 -25
  148. package/lib/Routers/FilesRouter.js +266 -171
  149. package/lib/Routers/FunctionsRouter.js +87 -103
  150. package/lib/Routers/GlobalConfigRouter.js +94 -33
  151. package/lib/Routers/GraphQLRouter.js +41 -0
  152. package/lib/Routers/HooksRouter.js +43 -47
  153. package/lib/Routers/IAPValidationRouter.js +57 -70
  154. package/lib/Routers/InstallationsRouter.js +17 -25
  155. package/lib/Routers/LogsRouter.js +10 -25
  156. package/lib/Routers/PagesRouter.js +647 -0
  157. package/lib/Routers/PublicAPIRouter.js +104 -112
  158. package/lib/Routers/PurgeRouter.js +19 -29
  159. package/lib/Routers/PushRouter.js +14 -28
  160. package/lib/Routers/RolesRouter.js +7 -14
  161. package/lib/Routers/SchemasRouter.js +63 -42
  162. package/lib/Routers/SecurityRouter.js +34 -0
  163. package/lib/Routers/SessionsRouter.js +25 -38
  164. package/lib/Routers/UsersRouter.js +463 -190
  165. package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
  166. package/lib/SchemaMigrations/Migrations.js +30 -0
  167. package/lib/Security/Check.js +109 -0
  168. package/lib/Security/CheckGroup.js +44 -0
  169. package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
  170. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +96 -0
  171. package/lib/Security/CheckGroups/CheckGroups.js +21 -0
  172. package/lib/Security/CheckRunner.js +213 -0
  173. package/lib/SharedRest.js +29 -0
  174. package/lib/StatusHandler.js +96 -93
  175. package/lib/TestUtils.js +70 -14
  176. package/lib/Utils.js +468 -0
  177. package/lib/batch.js +74 -40
  178. package/lib/cache.js +8 -8
  179. package/lib/cli/definitions/parse-live-query-server.js +4 -3
  180. package/lib/cli/definitions/parse-server.js +4 -3
  181. package/lib/cli/parse-live-query-server.js +9 -17
  182. package/lib/cli/parse-server.js +49 -47
  183. package/lib/cli/utils/commander.js +20 -29
  184. package/lib/cli/utils/runner.js +31 -32
  185. package/lib/cloud-code/Parse.Cloud.js +711 -36
  186. package/lib/cloud-code/Parse.Server.js +21 -0
  187. package/lib/cryptoUtils.js +6 -11
  188. package/lib/defaults.js +21 -15
  189. package/lib/deprecated.js +1 -1
  190. package/lib/index.js +78 -67
  191. package/lib/logger.js +12 -20
  192. package/lib/middlewares.js +484 -160
  193. package/lib/password.js +10 -6
  194. package/lib/request.js +175 -0
  195. package/lib/requiredParameter.js +4 -3
  196. package/lib/rest.js +157 -82
  197. package/lib/triggers.js +627 -185
  198. package/lib/vendor/README.md +3 -3
  199. package/lib/vendor/mongodbUrl.js +224 -137
  200. package/package.json +135 -57
  201. package/postinstall.js +38 -50
  202. package/public_html/invalid_verification_link.html +3 -3
  203. package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
  204. package/types/@types/deepcopy/index.d.ts +5 -0
  205. package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
  206. package/types/Options/index.d.ts +301 -0
  207. package/types/ParseServer.d.ts +65 -0
  208. package/types/eslint.config.mjs +30 -0
  209. package/types/index.d.ts +21 -0
  210. package/types/logger.d.ts +2 -0
  211. package/types/tests.ts +44 -0
  212. package/types/tsconfig.json +24 -0
  213. package/CHANGELOG.md +0 -1246
  214. package/PATENTS +0 -37
  215. package/bin/dev +0 -37
  216. package/lib/.DS_Store +0 -0
  217. package/lib/Adapters/Auth/common.js +0 -2
  218. package/lib/Adapters/Auth/facebookaccountkit.js +0 -69
  219. package/lib/Controllers/SchemaCache.js +0 -97
  220. package/lib/LiveQuery/.DS_Store +0 -0
  221. package/lib/cli/utils/parsers.js +0 -77
  222. package/lib/cloud-code/.DS_Store +0 -0
  223. package/lib/cloud-code/HTTPResponse.js +0 -57
  224. package/lib/cloud-code/Untitled-1 +0 -123
  225. package/lib/cloud-code/httpRequest.js +0 -102
  226. package/lib/cloud-code/team.html +0 -123
  227. package/lib/graphql/ParseClass.js +0 -234
  228. package/lib/graphql/Schema.js +0 -197
  229. package/lib/graphql/index.js +0 -1
  230. package/lib/graphql/types/ACL.js +0 -35
  231. package/lib/graphql/types/Date.js +0 -25
  232. package/lib/graphql/types/File.js +0 -24
  233. package/lib/graphql/types/GeoPoint.js +0 -35
  234. package/lib/graphql/types/JSONObject.js +0 -30
  235. package/lib/graphql/types/NumberInput.js +0 -43
  236. package/lib/graphql/types/NumberQuery.js +0 -42
  237. package/lib/graphql/types/Pointer.js +0 -35
  238. package/lib/graphql/types/QueryConstraint.js +0 -61
  239. package/lib/graphql/types/StringQuery.js +0 -39
  240. package/lib/graphql/types/index.js +0 -110
@@ -0,0 +1,301 @@
1
+ // This file is manually updated to match src/Options/index.js until typed
2
+ import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter';
3
+ import { CacheAdapter } from '../Adapters/Cache/CacheAdapter';
4
+ import { MailAdapter } from '../Adapters/Email/MailAdapter';
5
+ import { FilesAdapter } from '../Adapters/Files/FilesAdapter';
6
+ import { LoggerAdapter } from '../Adapters/Logger/LoggerAdapter';
7
+ import { PubSubAdapter } from '../Adapters/PubSub/PubSubAdapter';
8
+ import { StorageAdapter } from '../Adapters/Storage/StorageAdapter';
9
+ import { WSSAdapter } from '../Adapters/WebSocketServer/WSSAdapter';
10
+ import { CheckGroup } from '../Security/CheckGroup';
11
+ export interface SchemaOptions {
12
+ definitions: any;
13
+ strict?: boolean;
14
+ deleteExtraFields?: boolean;
15
+ recreateModifiedFields?: boolean;
16
+ lockSchemas?: boolean;
17
+ beforeMigration?: () => void | Promise<void>;
18
+ afterMigration?: () => void | Promise<void>;
19
+ }
20
+ type Adapter<T> = string | T;
21
+ type NumberOrBoolean = number | boolean;
22
+ type NumberOrString = number | string;
23
+ type ProtectedFields = any;
24
+ type StringOrStringArray = string | string[];
25
+ type RequestKeywordDenylist = {
26
+ key: string;
27
+ value: any;
28
+ };
29
+ export interface ParseServerOptions {
30
+ appId: string;
31
+ masterKey: (() => void) | string;
32
+ masterKeyTtl?: number;
33
+ maintenanceKey: string;
34
+ serverURL: string;
35
+ masterKeyIps?: (string[]);
36
+ maintenanceKeyIps?: (string[]);
37
+ appName?: string;
38
+ allowHeaders?: (string[]);
39
+ allowOrigin?: StringOrStringArray;
40
+ analyticsAdapter?: Adapter<AnalyticsAdapter>;
41
+ filesAdapter?: Adapter<FilesAdapter>;
42
+ push?: any;
43
+ scheduledPush?: boolean;
44
+ loggerAdapter?: Adapter<LoggerAdapter>;
45
+ jsonLogs?: boolean;
46
+ logsFolder?: string;
47
+ verbose?: boolean;
48
+ logLevel?: string;
49
+ logLevels?: LogLevels;
50
+ maxLogFiles?: NumberOrString;
51
+ silent?: boolean;
52
+ databaseURI: string;
53
+ databaseOptions?: DatabaseOptions;
54
+ databaseAdapter?: Adapter<StorageAdapter>;
55
+ enableCollationCaseComparison?: boolean;
56
+ convertEmailToLowercase?: boolean;
57
+ convertUsernameToLowercase?: boolean;
58
+ cloud?: string;
59
+ collectionPrefix?: string;
60
+ clientKey?: string;
61
+ javascriptKey?: string;
62
+ dotNetKey?: string;
63
+ encryptionKey?: string;
64
+ restAPIKey?: string;
65
+ readOnlyMasterKey?: string;
66
+ webhookKey?: string;
67
+ fileKey?: string;
68
+ preserveFileName?: boolean;
69
+ userSensitiveFields?: (string[]);
70
+ protectedFields?: ProtectedFields;
71
+ enableAnonymousUsers?: boolean;
72
+ allowClientClassCreation?: boolean;
73
+ allowCustomObjectId?: boolean;
74
+ auth?: Record<string, AuthAdapter>;
75
+ enableInsecureAuthAdapters?: boolean;
76
+ maxUploadSize?: string;
77
+ verifyUserEmails?: (boolean | void);
78
+ preventLoginWithUnverifiedEmail?: boolean;
79
+ preventSignupWithUnverifiedEmail?: boolean;
80
+ emailVerifyTokenValidityDuration?: number;
81
+ emailVerifyTokenReuseIfValid?: boolean;
82
+ sendUserEmailVerification?: (boolean | void);
83
+ accountLockout?: AccountLockoutOptions;
84
+ passwordPolicy?: PasswordPolicyOptions;
85
+ cacheAdapter?: Adapter<CacheAdapter>;
86
+ emailAdapter?: Adapter<MailAdapter>;
87
+ encodeParseObjectInCloudFunction?: boolean;
88
+ publicServerURL?: string | (() => string) | (() => Promise<string>);
89
+ pages?: PagesOptions;
90
+ customPages?: CustomPagesOptions;
91
+ liveQuery?: LiveQueryOptions;
92
+ sessionLength?: number;
93
+ extendSessionOnUse?: boolean;
94
+ defaultLimit?: number;
95
+ maxLimit?: number;
96
+ expireInactiveSessions?: boolean;
97
+ revokeSessionOnPasswordReset?: boolean;
98
+ cacheTTL?: number;
99
+ cacheMaxSize?: number;
100
+ directAccess?: boolean;
101
+ enableExpressErrorHandler?: boolean;
102
+ objectIdSize?: number;
103
+ port?: number;
104
+ host?: string;
105
+ mountPath?: string;
106
+ cluster?: NumberOrBoolean;
107
+ middleware?: ((() => void) | string);
108
+ trustProxy?: any;
109
+ startLiveQueryServer?: boolean;
110
+ liveQueryServerOptions?: LiveQueryServerOptions;
111
+ idempotencyOptions?: IdempotencyOptions;
112
+ fileUpload?: FileUploadOptions;
113
+ graphQLSchema?: string;
114
+ mountGraphQL?: boolean;
115
+ graphQLPath?: string;
116
+ mountPlayground?: boolean;
117
+ playgroundPath?: string;
118
+ schema?: SchemaOptions;
119
+ serverCloseComplete?: () => void;
120
+ security?: SecurityOptions;
121
+ enforcePrivateUsers?: boolean;
122
+ allowExpiredAuthDataToken?: boolean;
123
+ requestKeywordDenylist?: (RequestKeywordDenylist[]);
124
+ rateLimit?: (RateLimitOptions[]);
125
+ verifyServerUrl?: boolean;
126
+ }
127
+ export interface RateLimitOptions {
128
+ requestPath: string;
129
+ requestTimeWindow?: number;
130
+ requestCount?: number;
131
+ errorResponseMessage?: string;
132
+ requestMethods?: (string[]);
133
+ includeMasterKey?: boolean;
134
+ includeInternalRequests?: boolean;
135
+ redisUrl?: string;
136
+ zone?: string;
137
+ }
138
+ export interface SecurityOptions {
139
+ enableCheck?: boolean;
140
+ enableCheckLog?: boolean;
141
+ checkGroups?: (CheckGroup[]);
142
+ }
143
+ export interface PagesOptions {
144
+ enableRouter?: boolean;
145
+ enableLocalization?: boolean;
146
+ localizationJsonPath?: string;
147
+ localizationFallbackLocale?: string;
148
+ placeholders?: any;
149
+ forceRedirect?: boolean;
150
+ pagesPath?: string;
151
+ pagesEndpoint?: string;
152
+ customUrls?: PagesCustomUrlsOptions;
153
+ customRoutes?: (PagesRoute[]);
154
+ }
155
+ export interface PagesRoute {
156
+ path: string;
157
+ method: string;
158
+ handler: () => void;
159
+ }
160
+ export interface PagesCustomUrlsOptions {
161
+ passwordReset?: string;
162
+ passwordResetLinkInvalid?: string;
163
+ passwordResetSuccess?: string;
164
+ emailVerificationSuccess?: string;
165
+ emailVerificationSendFail?: string;
166
+ emailVerificationSendSuccess?: string;
167
+ emailVerificationLinkInvalid?: string;
168
+ emailVerificationLinkExpired?: string;
169
+ }
170
+ export interface CustomPagesOptions {
171
+ invalidLink?: string;
172
+ linkSendFail?: string;
173
+ choosePassword?: string;
174
+ linkSendSuccess?: string;
175
+ verifyEmailSuccess?: string;
176
+ passwordResetSuccess?: string;
177
+ invalidVerificationLink?: string;
178
+ expiredVerificationLink?: string;
179
+ invalidPasswordResetLink?: string;
180
+ parseFrameURL?: string;
181
+ }
182
+ export interface LiveQueryOptions {
183
+ classNames?: (string[]);
184
+ redisOptions?: any;
185
+ redisURL?: string;
186
+ pubSubAdapter?: Adapter<PubSubAdapter>;
187
+ wssAdapter?: Adapter<WSSAdapter>;
188
+ }
189
+ export interface LiveQueryServerOptions {
190
+ appId?: string;
191
+ masterKey?: string;
192
+ serverURL?: string;
193
+ keyPairs?: any;
194
+ websocketTimeout?: number;
195
+ cacheTimeout?: number;
196
+ logLevel?: string;
197
+ port?: number;
198
+ redisOptions?: any;
199
+ redisURL?: string;
200
+ pubSubAdapter?: Adapter<PubSubAdapter>;
201
+ wssAdapter?: Adapter<WSSAdapter>;
202
+ }
203
+ export interface IdempotencyOptions {
204
+ paths?: (string[]);
205
+ ttl?: number;
206
+ }
207
+ export interface AccountLockoutOptions {
208
+ duration?: number;
209
+ threshold?: number;
210
+ unlockOnPasswordReset?: boolean;
211
+ }
212
+ export interface PasswordPolicyOptions {
213
+ validatorPattern?: string;
214
+ validatorCallback?: () => void;
215
+ validationError?: string;
216
+ doNotAllowUsername?: boolean;
217
+ maxPasswordAge?: number;
218
+ maxPasswordHistory?: number;
219
+ resetTokenValidityDuration?: number;
220
+ resetTokenReuseIfValid?: boolean;
221
+ resetPasswordSuccessOnInvalidEmail?: boolean;
222
+ }
223
+ export interface FileUploadOptions {
224
+ fileExtensions?: (string[]);
225
+ enableForAnonymousUser?: boolean;
226
+ enableForAuthenticatedUser?: boolean;
227
+ enableForPublic?: boolean;
228
+ }
229
+ export interface DatabaseOptions {
230
+ // Parse Server custom options
231
+ allowPublicExplain?: boolean;
232
+ createIndexRoleName?: boolean;
233
+ createIndexUserEmail?: boolean;
234
+ createIndexUserEmailCaseInsensitive?: boolean;
235
+ createIndexUserEmailVerifyToken?: boolean;
236
+ createIndexUserPasswordResetToken?: boolean;
237
+ createIndexUserUsername?: boolean;
238
+ createIndexUserUsernameCaseInsensitive?: boolean;
239
+ disableIndexFieldValidation?: boolean;
240
+ enableSchemaHooks?: boolean;
241
+ logClientEvents?: any[];
242
+ // maxTimeMS is a MongoDB option but Parse Server applies it per-operation, not as a global client option
243
+ maxTimeMS?: number;
244
+ schemaCacheTtl?: number;
245
+
246
+ // MongoDB driver options
247
+ appName?: string;
248
+ authMechanism?: string;
249
+ authMechanismProperties?: any;
250
+ authSource?: string;
251
+ autoSelectFamily?: boolean;
252
+ autoSelectFamilyAttemptTimeout?: number;
253
+ compressors?: string[] | string;
254
+ connectTimeoutMS?: number;
255
+ directConnection?: boolean;
256
+ forceServerObjectId?: boolean;
257
+ heartbeatFrequencyMS?: number;
258
+ loadBalanced?: boolean;
259
+ localThresholdMS?: number;
260
+ maxConnecting?: number;
261
+ maxIdleTimeMS?: number;
262
+ maxPoolSize?: number;
263
+ maxStalenessSeconds?: number;
264
+ minPoolSize?: number;
265
+ proxyHost?: string;
266
+ proxyPassword?: string;
267
+ proxyPort?: number;
268
+ proxyUsername?: string;
269
+ readConcernLevel?: string;
270
+ readPreference?: string;
271
+ readPreferenceTags?: any[];
272
+ replicaSet?: string;
273
+ retryReads?: boolean;
274
+ retryWrites?: boolean;
275
+ serverMonitoringMode?: string;
276
+ serverSelectionTimeoutMS?: number;
277
+ socketTimeoutMS?: number;
278
+ srvMaxHosts?: number;
279
+ srvServiceName?: string;
280
+ ssl?: boolean;
281
+ tls?: boolean;
282
+ tlsAllowInvalidCertificates?: boolean;
283
+ tlsAllowInvalidHostnames?: boolean;
284
+ tlsCAFile?: string;
285
+ tlsCertificateKeyFile?: string;
286
+ tlsCertificateKeyFilePassword?: string;
287
+ tlsInsecure?: boolean;
288
+ waitQueueTimeoutMS?: number;
289
+ zlibCompressionLevel?: number;
290
+ }
291
+ export interface AuthAdapter {
292
+ enabled?: boolean;
293
+ }
294
+ export interface LogLevels {
295
+ triggerAfter?: string;
296
+ triggerBeforeSuccess?: string;
297
+ triggerBeforeError?: string;
298
+ cloudFunctionSuccess?: string;
299
+ cloudFunctionError?: string;
300
+ }
301
+ export {};
@@ -0,0 +1,65 @@
1
+ import { ParseServerOptions, LiveQueryServerOptions } from './Options';
2
+ import { ParseLiveQueryServer } from './LiveQuery/ParseLiveQueryServer';
3
+ declare class ParseServer {
4
+ _app: any;
5
+ config: any;
6
+ server: any;
7
+ expressApp: any;
8
+ liveQueryServer: any;
9
+ /**
10
+ * @constructor
11
+ * @param {ParseServerOptions} options the parse server initialization options
12
+ */
13
+ constructor(options: ParseServerOptions);
14
+ /**
15
+ * Starts Parse Server as an express app; this promise resolves when Parse Server is ready to accept requests.
16
+ */
17
+ start(): Promise<this>;
18
+ get app(): any;
19
+ /**
20
+ * Stops the parse server, cancels any ongoing requests and closes all connections.
21
+ *
22
+ * Currently, express doesn't shut down immediately after receiving SIGINT/SIGTERM
23
+ * if it has client connections that haven't timed out.
24
+ * (This is a known issue with node - https://github.com/nodejs/node/issues/2642)
25
+ *
26
+ * @returns {Promise<void>} a promise that resolves when the server is stopped
27
+ */
28
+ handleShutdown(): Promise<void>;
29
+ /**
30
+ * @static
31
+ * Allow developers to customize each request with inversion of control/dependency injection
32
+ */
33
+ static applyRequestContextMiddleware(api: any, options: any): void;
34
+ /**
35
+ * @static
36
+ * Create an express app for the parse server
37
+ * @param {Object} options let you specify the maxUploadSize when creating the express app */
38
+ static app(options: any): any;
39
+ static promiseRouter({ appId }: {
40
+ appId: any;
41
+ }): any;
42
+ /**
43
+ * starts the parse server's express app
44
+ * @param {ParseServerOptions} options to use to start the server
45
+ * @returns {ParseServer} the parse server instance
46
+ */
47
+ startApp(options: ParseServerOptions): Promise<this>;
48
+ /**
49
+ * Creates a new ParseServer and starts it.
50
+ * @param {ParseServerOptions} options used to start the server
51
+ * @returns {ParseServer} the parse server instance
52
+ */
53
+ static startApp(options: ParseServerOptions): Promise<ParseServer>;
54
+ /**
55
+ * Helper method to create a liveQuery server
56
+ * @static
57
+ * @param {Server} httpServer an optional http server to pass
58
+ * @param {LiveQueryServerOptions} config options for the liveQueryServer
59
+ * @param {ParseServerOptions} options options for the ParseServer
60
+ * @returns {Promise<ParseLiveQueryServer>} the live query server instance
61
+ */
62
+ static createLiveQueryServer(httpServer: any, config: LiveQueryServerOptions, options: ParseServerOptions): Promise<ParseLiveQueryServer>;
63
+ static verifyServerUrl(): any;
64
+ }
65
+ export default ParseServer;
@@ -0,0 +1,30 @@
1
+ import eslint from '@eslint/js';
2
+ import tseslint from 'typescript-eslint';
3
+ import expectType from 'eslint-plugin-expect-type/configs/recommended';
4
+
5
+ export default tseslint.config({
6
+ files: ['**/*.js', '**/*.ts'],
7
+ extends: [
8
+ expectType,
9
+ eslint.configs.recommended,
10
+ ...tseslint.configs.recommended,
11
+ ...tseslint.configs.recommendedTypeChecked,
12
+ ],
13
+ plugins: {
14
+ '@typescript-eslint': tseslint.plugin,
15
+ },
16
+ rules: {
17
+ '@typescript-eslint/no-unused-vars': 'off',
18
+ '@typescript-eslint/no-unused-expressions': 'off',
19
+ '@typescript-eslint/no-unsafe-call': 'off',
20
+ "@typescript-eslint/no-explicit-any": "off",
21
+ "@typescript-eslint/no-unsafe-return": "off",
22
+ },
23
+ languageOptions: {
24
+ parser: tseslint.parser,
25
+ parserOptions: {
26
+ projectService: true,
27
+ tsconfigRootDir: import.meta.dirname,
28
+ },
29
+ },
30
+ });
@@ -0,0 +1,21 @@
1
+ import ParseServer from './ParseServer';
2
+ import FileSystemAdapter from '@parse/fs-files-adapter';
3
+ import InMemoryCacheAdapter from './Adapters/Cache/InMemoryCacheAdapter';
4
+ import NullCacheAdapter from './Adapters/Cache/NullCacheAdapter';
5
+ import RedisCacheAdapter from './Adapters/Cache/RedisCacheAdapter';
6
+ import LRUCacheAdapter from './Adapters/Cache/LRUCache.js';
7
+ import * as TestUtils from './TestUtils';
8
+ import * as SchemaMigrations from './SchemaMigrations/Migrations';
9
+ import AuthAdapter from './Adapters/Auth/AuthAdapter';
10
+ import { PushWorker } from './Push/PushWorker';
11
+ import { ParseServerOptions } from './Options';
12
+ import { ParseGraphQLServer } from './GraphQL/ParseGraphQLServer';
13
+ declare const _ParseServer: {
14
+ (options: ParseServerOptions): ParseServer;
15
+ createLiveQueryServer: typeof ParseServer.createLiveQueryServer;
16
+ startApp: typeof ParseServer.startApp;
17
+ };
18
+ declare const S3Adapter: any;
19
+ declare const GCSAdapter: any;
20
+ export default ParseServer;
21
+ export { S3Adapter, GCSAdapter, FileSystemAdapter, InMemoryCacheAdapter, NullCacheAdapter, RedisCacheAdapter, LRUCacheAdapter, TestUtils, PushWorker, ParseGraphQLServer, _ParseServer as ParseServer, SchemaMigrations, AuthAdapter, };
@@ -0,0 +1,2 @@
1
+ export declare function setLogger(aLogger: any): void;
2
+ export declare function getLogger(): any;
package/types/tests.ts ADDED
@@ -0,0 +1,44 @@
1
+ import ParseServer, { FileSystemAdapter } from 'parse-server';
2
+
3
+ async function server() {
4
+ // $ExpectType ParseServer
5
+ const parseServer = await ParseServer.startApp({});
6
+
7
+ // $ExpectType void
8
+ await parseServer.handleShutdown();
9
+
10
+ // $ExpectType any
11
+ parseServer.app;
12
+
13
+ // $ExpectType any
14
+ ParseServer.app({});
15
+
16
+ // $ExpectType any
17
+ ParseServer.promiseRouter({ appId: 'appId' });
18
+
19
+ // $ExpectType ParseLiveQueryServer
20
+ await ParseServer.createLiveQueryServer({}, {}, {});
21
+
22
+ // $ExpectType any
23
+ ParseServer.verifyServerUrl();
24
+
25
+ // $ExpectError
26
+ await ParseServer.startApp();
27
+
28
+ // $ExpectError
29
+ ParseServer.promiseRouter();
30
+
31
+ // $ExpectError
32
+ await ParseServer.createLiveQueryServer();
33
+
34
+ // $ExpectType ParseServer
35
+ const parseServer2 = new ParseServer({});
36
+
37
+ // $ExpectType ParseServer
38
+ await parseServer2.start();
39
+ }
40
+
41
+ function exports() {
42
+ // $ExpectType any
43
+ FileSystemAdapter;
44
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "lib": ["es6"],
5
+ "noImplicitAny": true,
6
+ "noImplicitThis": true,
7
+ "strictFunctionTypes": true,
8
+ "strictNullChecks": true,
9
+ "types": [],
10
+ "noEmit": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+
13
+ // If the library is an external module (uses `export`), this allows your test file to import "mylib" instead of "./index".
14
+ // If the library is global (cannot be imported via `import` or `require`), leave this out.
15
+ "baseUrl": ".",
16
+ "paths": {
17
+ "parse-server": ["."],
18
+ "@parse/fs-files-adapter": ["./@types/@parse/fs-files-adapter"],
19
+ }
20
+ },
21
+ "include": [
22
+ "tests.ts"
23
+ ]
24
+ }