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,231 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.GridFSBucketAdapter = void 0;
7
+ var _mongodb = require("mongodb");
8
+ var _FilesAdapter = require("./FilesAdapter");
9
+ var _defaults = _interopRequireWildcard(require("../../defaults"));
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ /**
12
+ GridFSBucketAdapter
13
+ Stores files in Mongo using GridFS
14
+ Requires the database adapter to be based on mongoclient
15
+
16
+
17
+ */
18
+
19
+ // -disable-next
20
+
21
+ const crypto = require('crypto');
22
+ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
23
+ constructor(mongoDatabaseURI = _defaults.default.DefaultMongoURI, mongoOptions = {}, encryptionKey = undefined) {
24
+ super();
25
+ this._databaseURI = mongoDatabaseURI;
26
+ this._algorithm = 'aes-256-gcm';
27
+ this._encryptionKey = encryptionKey !== undefined ? crypto.createHash('sha256').update(String(encryptionKey)).digest('base64').substring(0, 32) : null;
28
+ const defaultMongoOptions = {};
29
+ const _mongoOptions = Object.assign(defaultMongoOptions, mongoOptions);
30
+ // Remove Parse Server-specific options that should not be passed to MongoDB client
31
+ for (const key of _defaults.ParseServerDatabaseOptions) {
32
+ delete _mongoOptions[key];
33
+ }
34
+ this._mongoOptions = _mongoOptions;
35
+ }
36
+ _connect() {
37
+ if (!this._connectionPromise) {
38
+ this._connectionPromise = _mongodb.MongoClient.connect(this._databaseURI, this._mongoOptions).then(client => {
39
+ this._client = client;
40
+ return client.db(client.s.options.dbName);
41
+ });
42
+ }
43
+ return this._connectionPromise;
44
+ }
45
+ _getBucket() {
46
+ return this._connect().then(database => new _mongodb.GridFSBucket(database));
47
+ }
48
+
49
+ // For a given config object, filename, and data, store a file
50
+ // Returns a promise
51
+ async createFile(filename, data, contentType, options = {}) {
52
+ const bucket = await this._getBucket();
53
+ const stream = await bucket.openUploadStream(filename, {
54
+ metadata: options.metadata
55
+ });
56
+ if (this._encryptionKey !== null) {
57
+ try {
58
+ const iv = crypto.randomBytes(16);
59
+ const cipher = crypto.createCipheriv(this._algorithm, this._encryptionKey, iv);
60
+ const encryptedResult = Buffer.concat([cipher.update(data), cipher.final(), iv, cipher.getAuthTag()]);
61
+ await stream.write(encryptedResult);
62
+ } catch (err) {
63
+ return new Promise((resolve, reject) => {
64
+ return reject(err);
65
+ });
66
+ }
67
+ } else {
68
+ await stream.write(data);
69
+ }
70
+ stream.end();
71
+ return new Promise((resolve, reject) => {
72
+ stream.on('finish', resolve);
73
+ stream.on('error', reject);
74
+ });
75
+ }
76
+ async deleteFile(filename) {
77
+ const bucket = await this._getBucket();
78
+ const documents = await bucket.find({
79
+ filename
80
+ }).toArray();
81
+ if (documents.length === 0) {
82
+ throw new Error('FileNotFound');
83
+ }
84
+ return Promise.all(documents.map(doc => {
85
+ return bucket.delete(doc._id);
86
+ }));
87
+ }
88
+ async getFileData(filename) {
89
+ const bucket = await this._getBucket();
90
+ const stream = bucket.openDownloadStreamByName(filename);
91
+ stream.read();
92
+ return new Promise((resolve, reject) => {
93
+ const chunks = [];
94
+ stream.on('data', data => {
95
+ chunks.push(data);
96
+ });
97
+ stream.on('end', () => {
98
+ const data = Buffer.concat(chunks);
99
+ if (this._encryptionKey !== null) {
100
+ try {
101
+ const authTagLocation = data.length - 16;
102
+ const ivLocation = data.length - 32;
103
+ const authTag = data.slice(authTagLocation);
104
+ const iv = data.slice(ivLocation, authTagLocation);
105
+ const encrypted = data.slice(0, ivLocation);
106
+ const decipher = crypto.createDecipheriv(this._algorithm, this._encryptionKey, iv);
107
+ decipher.setAuthTag(authTag);
108
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
109
+ return resolve(decrypted);
110
+ } catch (err) {
111
+ return reject(err);
112
+ }
113
+ }
114
+ resolve(data);
115
+ });
116
+ stream.on('error', err => {
117
+ reject(err);
118
+ });
119
+ });
120
+ }
121
+ async rotateEncryptionKey(options = {}) {
122
+ let fileNames = [];
123
+ let oldKeyFileAdapter = {};
124
+ const bucket = await this._getBucket();
125
+ if (options.oldKey !== undefined) {
126
+ oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions, options.oldKey);
127
+ } else {
128
+ oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions);
129
+ }
130
+ if (options.fileNames !== undefined) {
131
+ fileNames = options.fileNames;
132
+ } else {
133
+ const fileNamesIterator = await bucket.find().toArray();
134
+ fileNamesIterator.forEach(file => {
135
+ fileNames.push(file.filename);
136
+ });
137
+ }
138
+ let fileNamesNotRotated = fileNames;
139
+ const fileNamesRotated = [];
140
+ for (const fileName of fileNames) {
141
+ try {
142
+ const plainTextData = await oldKeyFileAdapter.getFileData(fileName);
143
+ // Overwrite file with data encrypted with new key
144
+ await this.createFile(fileName, plainTextData);
145
+ fileNamesRotated.push(fileName);
146
+ fileNamesNotRotated = fileNamesNotRotated.filter(function (value) {
147
+ return value !== fileName;
148
+ });
149
+ } catch {
150
+ continue;
151
+ }
152
+ }
153
+ return {
154
+ rotated: fileNamesRotated,
155
+ notRotated: fileNamesNotRotated
156
+ };
157
+ }
158
+ getFileLocation(config, filename) {
159
+ return config.mount + '/files/' + config.applicationId + '/' + encodeURIComponent(filename);
160
+ }
161
+ async getMetadata(filename) {
162
+ const bucket = await this._getBucket();
163
+ const files = await bucket.find({
164
+ filename
165
+ }).toArray();
166
+ if (files.length === 0) {
167
+ return {};
168
+ }
169
+ const {
170
+ metadata
171
+ } = files[0];
172
+ return {
173
+ metadata
174
+ };
175
+ }
176
+ async handleFileStream(filename, req, res, contentType) {
177
+ const bucket = await this._getBucket();
178
+ const files = await bucket.find({
179
+ filename
180
+ }).toArray();
181
+ if (files.length === 0) {
182
+ throw new Error('FileNotFound');
183
+ }
184
+ const parts = req.get('Range').replace(/bytes=/, '').split('-');
185
+ const partialstart = parts[0];
186
+ const partialend = parts[1];
187
+ const fileLength = files[0].length;
188
+ const fileStart = parseInt(partialstart, 10);
189
+ const fileEnd = partialend ? parseInt(partialend, 10) : fileLength;
190
+ let start = Math.min(fileStart || 0, fileEnd, fileLength);
191
+ let end = Math.max(fileStart || 0, fileEnd) + 1 || fileLength;
192
+ if (isNaN(fileStart)) {
193
+ start = fileLength - end + 1;
194
+ end = fileLength;
195
+ }
196
+ end = Math.min(end, fileLength);
197
+ start = Math.max(start, 0);
198
+ res.status(206);
199
+ res.header('Accept-Ranges', 'bytes');
200
+ res.header('Content-Length', end - start);
201
+ res.header('Content-Range', 'bytes ' + start + '-' + end + '/' + fileLength);
202
+ res.header('Content-Type', contentType);
203
+ const stream = bucket.openDownloadStreamByName(filename);
204
+ stream.start(start);
205
+ if (end) {
206
+ stream.end(end);
207
+ }
208
+ stream.on('data', chunk => {
209
+ res.write(chunk);
210
+ });
211
+ stream.on('error', e => {
212
+ res.status(404);
213
+ res.send(e.message);
214
+ });
215
+ stream.on('end', () => {
216
+ res.end();
217
+ });
218
+ }
219
+ handleShutdown() {
220
+ if (!this._client) {
221
+ return Promise.resolve();
222
+ }
223
+ return this._client.close(false);
224
+ }
225
+ validateFilename(filename) {
226
+ return (0, _FilesAdapter.validateFilename)(filename);
227
+ }
228
+ }
229
+ exports.GridFSBucketAdapter = GridFSBucketAdapter;
230
+ var _default = exports.default = GridFSBucketAdapter;
231
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9uZ29kYiIsInJlcXVpcmUiLCJfRmlsZXNBZGFwdGVyIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcnlwdG8iLCJHcmlkRlNCdWNrZXRBZGFwdGVyIiwiRmlsZXNBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJtb25nb0RhdGFiYXNlVVJJIiwiZGVmYXVsdHMiLCJEZWZhdWx0TW9uZ29VUkkiLCJtb25nb09wdGlvbnMiLCJlbmNyeXB0aW9uS2V5IiwidW5kZWZpbmVkIiwiX2RhdGFiYXNlVVJJIiwiX2FsZ29yaXRobSIsIl9lbmNyeXB0aW9uS2V5IiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIlN0cmluZyIsImRpZ2VzdCIsInN1YnN0cmluZyIsImRlZmF1bHRNb25nb09wdGlvbnMiLCJfbW9uZ29PcHRpb25zIiwiYXNzaWduIiwia2V5IiwiUGFyc2VTZXJ2ZXJEYXRhYmFzZU9wdGlvbnMiLCJfY29ubmVjdCIsIl9jb25uZWN0aW9uUHJvbWlzZSIsIk1vbmdvQ2xpZW50IiwiY29ubmVjdCIsInRoZW4iLCJjbGllbnQiLCJfY2xpZW50IiwiZGIiLCJzIiwib3B0aW9ucyIsImRiTmFtZSIsIl9nZXRCdWNrZXQiLCJkYXRhYmFzZSIsIkdyaWRGU0J1Y2tldCIsImNyZWF0ZUZpbGUiLCJmaWxlbmFtZSIsImRhdGEiLCJjb250ZW50VHlwZSIsImJ1Y2tldCIsInN0cmVhbSIsIm9wZW5VcGxvYWRTdHJlYW0iLCJtZXRhZGF0YSIsIml2IiwicmFuZG9tQnl0ZXMiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuY3J5cHRlZFJlc3VsdCIsIkJ1ZmZlciIsImNvbmNhdCIsImZpbmFsIiwiZ2V0QXV0aFRhZyIsIndyaXRlIiwiZXJyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJlbmQiLCJvbiIsImRlbGV0ZUZpbGUiLCJkb2N1bWVudHMiLCJmaW5kIiwidG9BcnJheSIsImxlbmd0aCIsIkVycm9yIiwiYWxsIiwibWFwIiwiZG9jIiwiZGVsZXRlIiwiX2lkIiwiZ2V0RmlsZURhdGEiLCJvcGVuRG93bmxvYWRTdHJlYW1CeU5hbWUiLCJyZWFkIiwiY2h1bmtzIiwicHVzaCIsImF1dGhUYWdMb2NhdGlvbiIsIml2TG9jYXRpb24iLCJhdXRoVGFnIiwic2xpY2UiLCJlbmNyeXB0ZWQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJzZXRBdXRoVGFnIiwiZGVjcnlwdGVkIiwicm90YXRlRW5jcnlwdGlvbktleSIsImZpbGVOYW1lcyIsIm9sZEtleUZpbGVBZGFwdGVyIiwib2xkS2V5IiwiZmlsZU5hbWVzSXRlcmF0b3IiLCJmb3JFYWNoIiwiZmlsZSIsImZpbGVOYW1lc05vdFJvdGF0ZWQiLCJmaWxlTmFtZXNSb3RhdGVkIiwiZmlsZU5hbWUiLCJwbGFpblRleHREYXRhIiwiZmlsdGVyIiwidmFsdWUiLCJyb3RhdGVkIiwibm90Um90YXRlZCIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsIm1vdW50IiwiYXBwbGljYXRpb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE1ldGFkYXRhIiwiZmlsZXMiLCJoYW5kbGVGaWxlU3RyZWFtIiwicmVxIiwicmVzIiwicGFydHMiLCJyZXBsYWNlIiwic3BsaXQiLCJwYXJ0aWFsc3RhcnQiLCJwYXJ0aWFsZW5kIiwiZmlsZUxlbmd0aCIsImZpbGVTdGFydCIsInBhcnNlSW50IiwiZmlsZUVuZCIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsIm1heCIsImlzTmFOIiwic3RhdHVzIiwiaGVhZGVyIiwiY2h1bmsiLCJzZW5kIiwibWVzc2FnZSIsImhhbmRsZVNodXRkb3duIiwiY2xvc2UiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0ZpbGVzL0dyaWRGU0J1Y2tldEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gR3JpZEZTQnVja2V0QWRhcHRlclxuIFN0b3JlcyBmaWxlcyBpbiBNb25nbyB1c2luZyBHcmlkRlNcbiBSZXF1aXJlcyB0aGUgZGF0YWJhc2UgYWRhcHRlciB0byBiZSBiYXNlZCBvbiBtb25nb2NsaWVudFxuXG4gQGZsb3cgd2Vha1xuICovXG5cbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHsgTW9uZ29DbGllbnQsIEdyaWRGU0J1Y2tldCwgRGIgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciwgdmFsaWRhdGVGaWxlbmFtZSB9IGZyb20gJy4vRmlsZXNBZGFwdGVyJztcbmltcG9ydCBkZWZhdWx0cywgeyBQYXJzZVNlcnZlckRhdGFiYXNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RlZmF1bHRzJztcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuXG5leHBvcnQgY2xhc3MgR3JpZEZTQnVja2V0QWRhcHRlciBleHRlbmRzIEZpbGVzQWRhcHRlciB7XG4gIF9kYXRhYmFzZVVSSTogc3RyaW5nO1xuICBfY29ubmVjdGlvblByb21pc2U6IFByb21pc2U8RGI+O1xuICBfbW9uZ29PcHRpb25zOiBPYmplY3Q7XG4gIF9hbGdvcml0aG06IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtb25nb0RhdGFiYXNlVVJJID0gZGVmYXVsdHMuRGVmYXVsdE1vbmdvVVJJLFxuICAgIG1vbmdvT3B0aW9ucyA9IHt9LFxuICAgIGVuY3J5cHRpb25LZXkgPSB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhYmFzZVVSSSA9IG1vbmdvRGF0YWJhc2VVUkk7XG4gICAgdGhpcy5fYWxnb3JpdGhtID0gJ2Flcy0yNTYtZ2NtJztcbiAgICB0aGlzLl9lbmNyeXB0aW9uS2V5ID1cbiAgICAgIGVuY3J5cHRpb25LZXkgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNyeXB0b1xuICAgICAgICAgIC5jcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgICAgIC51cGRhdGUoU3RyaW5nKGVuY3J5cHRpb25LZXkpKVxuICAgICAgICAgIC5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICAgICAgLnN1YnN0cmluZygwLCAzMilcbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRlZmF1bHRNb25nb09wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBfbW9uZ29PcHRpb25zID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0TW9uZ29PcHRpb25zLCBtb25nb09wdGlvbnMpO1xuICAgIC8vIFJlbW92ZSBQYXJzZSBTZXJ2ZXItc3BlY2lmaWMgb3B0aW9ucyB0aGF0IHNob3VsZCBub3QgYmUgcGFzc2VkIHRvIE1vbmdvREIgY2xpZW50XG4gICAgZm9yIChjb25zdCBrZXkgb2YgUGFyc2VTZXJ2ZXJEYXRhYmFzZU9wdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSBfbW9uZ29PcHRpb25zW2tleV07XG4gICAgfVxuICAgIHRoaXMuX21vbmdvT3B0aW9ucyA9IF9tb25nb09wdGlvbnM7XG4gIH1cblxuICBfY29ubmVjdCgpIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IE1vbmdvQ2xpZW50LmNvbm5lY3QodGhpcy5fZGF0YWJhc2VVUkksIHRoaXMuX21vbmdvT3B0aW9ucykudGhlbihcbiAgICAgICAgY2xpZW50ID0+IHtcbiAgICAgICAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgICAgcmV0dXJuIGNsaWVudC5kYihjbGllbnQucy5vcHRpb25zLmRiTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZTtcbiAgfVxuXG4gIF9nZXRCdWNrZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoKS50aGVuKGRhdGFiYXNlID0+IG5ldyBHcmlkRlNCdWNrZXQoZGF0YWJhc2UpKTtcbiAgfVxuXG4gIC8vIEZvciBhIGdpdmVuIGNvbmZpZyBvYmplY3QsIGZpbGVuYW1lLCBhbmQgZGF0YSwgc3RvcmUgYSBmaWxlXG4gIC8vIFJldHVybnMgYSBwcm9taXNlXG4gIGFzeW5jIGNyZWF0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZywgZGF0YSwgY29udGVudFR5cGUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IGJ1Y2tldC5vcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lLCB7XG4gICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5fZW5jcnlwdGlvbktleSAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYodGhpcy5fYWxnb3JpdGhtLCB0aGlzLl9lbmNyeXB0aW9uS2V5LCBpdik7XG4gICAgICAgIGNvbnN0IGVuY3J5cHRlZFJlc3VsdCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICAgIGNpcGhlci51cGRhdGUoZGF0YSksXG4gICAgICAgICAgY2lwaGVyLmZpbmFsKCksXG4gICAgICAgICAgaXYsXG4gICAgICAgICAgY2lwaGVyLmdldEF1dGhUYWcoKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShlbmNyeXB0ZWRSZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgc3RyZWFtLndyaXRlKGRhdGEpO1xuICAgIH1cbiAgICBzdHJlYW0uZW5kKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGRvY3VtZW50cyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGVOb3RGb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBkb2N1bWVudHMubWFwKGRvYyA9PiB7XG4gICAgICAgIHJldHVybiBidWNrZXQuZGVsZXRlKGRvYy5faWQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmlsZURhdGEoZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW1CeU5hbWUoZmlsZW5hbWUpO1xuICAgIHN0cmVhbS5yZWFkKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgZGF0YSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXV0aFRhZ0xvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAxNjtcbiAgICAgICAgICAgIGNvbnN0IGl2TG9jYXRpb24gPSBkYXRhLmxlbmd0aCAtIDMyO1xuICAgICAgICAgICAgY29uc3QgYXV0aFRhZyA9IGRhdGEuc2xpY2UoYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGl2ID0gZGF0YS5zbGljZShpdkxvY2F0aW9uLCBhdXRoVGFnTG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZW5jcnlwdGVkID0gZGF0YS5zbGljZSgwLCBpdkxvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYodGhpcy5fYWxnb3JpdGhtLCB0aGlzLl9lbmNyeXB0aW9uS2V5LCBpdik7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKGF1dGhUYWcpO1xuICAgICAgICAgICAgY29uc3QgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRlY3J5cHRlZCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcm90YXRlRW5jcnlwdGlvbktleShvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZmlsZU5hbWVzID0gW107XG4gICAgbGV0IG9sZEtleUZpbGVBZGFwdGVyID0ge307XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgaWYgKG9wdGlvbnMub2xkS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9sZEtleUZpbGVBZGFwdGVyID0gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIoXG4gICAgICAgIHRoaXMuX2RhdGFiYXNlVVJJLFxuICAgICAgICB0aGlzLl9tb25nb09wdGlvbnMsXG4gICAgICAgIG9wdGlvbnMub2xkS2V5XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWxlTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZU5hbWVzID0gb3B0aW9ucy5maWxlTmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lc0l0ZXJhdG9yID0gYXdhaXQgYnVja2V0LmZpbmQoKS50b0FycmF5KCk7XG4gICAgICBmaWxlTmFtZXNJdGVyYXRvci5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICBmaWxlTmFtZXMucHVzaChmaWxlLmZpbGVuYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgZmlsZU5hbWVzTm90Um90YXRlZCA9IGZpbGVOYW1lcztcbiAgICBjb25zdCBmaWxlTmFtZXNSb3RhdGVkID0gW107XG4gICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBmaWxlTmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBsYWluVGV4dERhdGEgPSBhd2FpdCBvbGRLZXlGaWxlQWRhcHRlci5nZXRGaWxlRGF0YShmaWxlTmFtZSk7XG4gICAgICAgIC8vIE92ZXJ3cml0ZSBmaWxlIHdpdGggZGF0YSBlbmNyeXB0ZWQgd2l0aCBuZXcga2V5XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRmlsZShmaWxlTmFtZSwgcGxhaW5UZXh0RGF0YSk7XG4gICAgICAgIGZpbGVOYW1lc1JvdGF0ZWQucHVzaChmaWxlTmFtZSk7XG4gICAgICAgIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXNOb3RSb3RhdGVkLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IGZpbGVOYW1lO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCwgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCB9O1xuICB9XG5cbiAgZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gY29uZmlnLm1vdW50ICsgJy9maWxlcy8nICsgY29uZmlnLmFwcGxpY2F0aW9uSWQgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWV0YWRhdGEoZmlsZW5hbWUpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgeyBtZXRhZGF0YSB9ID0gZmlsZXNbMF07XG4gICAgcmV0dXJuIHsgbWV0YWRhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZpbGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgcmVxLCByZXMsIGNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGVOb3RGb3VuZCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IHJlcVxuICAgICAgLmdldCgnUmFuZ2UnKVxuICAgICAgLnJlcGxhY2UoL2J5dGVzPS8sICcnKVxuICAgICAgLnNwbGl0KCctJyk7XG4gICAgY29uc3QgcGFydGlhbHN0YXJ0ID0gcGFydHNbMF07XG4gICAgY29uc3QgcGFydGlhbGVuZCA9IHBhcnRzWzFdO1xuXG4gICAgY29uc3QgZmlsZUxlbmd0aCA9IGZpbGVzWzBdLmxlbmd0aDtcbiAgICBjb25zdCBmaWxlU3RhcnQgPSBwYXJzZUludChwYXJ0aWFsc3RhcnQsIDEwKTtcbiAgICBjb25zdCBmaWxlRW5kID0gcGFydGlhbGVuZCA/IHBhcnNlSW50KHBhcnRpYWxlbmQsIDEwKSA6IGZpbGVMZW5ndGg7XG5cbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1pbihmaWxlU3RhcnQgfHwgMCwgZmlsZUVuZCwgZmlsZUxlbmd0aCk7XG4gICAgbGV0IGVuZCA9IE1hdGgubWF4KGZpbGVTdGFydCB8fCAwLCBmaWxlRW5kKSArIDEgfHwgZmlsZUxlbmd0aDtcbiAgICBpZiAoaXNOYU4oZmlsZVN0YXJ0KSkge1xuICAgICAgc3RhcnQgPSBmaWxlTGVuZ3RoIC0gZW5kICsgMTtcbiAgICAgIGVuZCA9IGZpbGVMZW5ndGg7XG4gICAgfVxuICAgIGVuZCA9IE1hdGgubWluKGVuZCwgZmlsZUxlbmd0aCk7XG4gICAgc3RhcnQgPSBNYXRoLm1heChzdGFydCwgMCk7XG5cbiAgICByZXMuc3RhdHVzKDIwNik7XG4gICAgcmVzLmhlYWRlcignQWNjZXB0LVJhbmdlcycsICdieXRlcycpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgZW5kIC0gc3RhcnQpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtUmFuZ2UnLCAnYnl0ZXMgJyArIHN0YXJ0ICsgJy0nICsgZW5kICsgJy8nICsgZmlsZUxlbmd0aCk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW1CeU5hbWUoZmlsZW5hbWUpO1xuICAgIHN0cmVhbS5zdGFydChzdGFydCk7XG4gICAgaWYgKGVuZCkge1xuICAgICAgc3RyZWFtLmVuZChlbmQpO1xuICAgIH1cbiAgICBzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICByZXMud3JpdGUoY2h1bmspO1xuICAgIH0pO1xuICAgIHN0cmVhbS5vbignZXJyb3InLCBlID0+IHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgIHJlcy5zZW5kKGUubWVzc2FnZSk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTaHV0ZG93bigpIHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNsb3NlKGZhbHNlKTtcbiAgfVxuXG4gIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JpZEZTQnVja2V0QWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBU0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxH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
@@ -1,92 +1,5 @@
1
- 'use strict';
1
+ "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.GridStoreAdapter = undefined;
7
-
8
- var _mongodb = require('mongodb');
9
-
10
- var _FilesAdapter = require('./FilesAdapter');
11
-
12
- var _defaults = require('../../defaults');
13
-
14
- var _defaults2 = _interopRequireDefault(_defaults);
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- class GridStoreAdapter extends _FilesAdapter.FilesAdapter {
19
-
20
- constructor(mongoDatabaseURI = _defaults2.default.DefaultMongoURI) {
21
- super();
22
- this._databaseURI = mongoDatabaseURI;
23
- }
24
-
25
- _connect() {
26
- if (!this._connectionPromise) {
27
- this._connectionPromise = _mongodb.MongoClient.connect(this._databaseURI).then(client => client.db(client.s.options.dbName));
28
- }
29
- return this._connectionPromise;
30
- }
31
-
32
- // For a given config object, filename, and data, store a file
33
- // Returns a promise
34
- createFile(filename, data) {
35
- return this._connect().then(database => {
36
- const gridStore = new _mongodb.GridStore(database, filename, 'w');
37
- return gridStore.open();
38
- }).then(gridStore => {
39
- return gridStore.write(data);
40
- }).then(gridStore => {
41
- return gridStore.close();
42
- });
43
- }
44
-
45
- deleteFile(filename) {
46
- return this._connect().then(database => {
47
- const gridStore = new _mongodb.GridStore(database, filename, 'r');
48
- return gridStore.open();
49
- }).then(gridStore => {
50
- return gridStore.unlink();
51
- }).then(gridStore => {
52
- return gridStore.close();
53
- });
54
- }
55
-
56
- getFileData(filename) {
57
- return this._connect().then(database => {
58
- return _mongodb.GridStore.exist(database, filename).then(() => {
59
- const gridStore = new _mongodb.GridStore(database, filename, 'r');
60
- return gridStore.open();
61
- });
62
- }).then(gridStore => {
63
- return gridStore.read();
64
- });
65
- }
66
-
67
- getFileLocation(config, filename) {
68
- return config.mount + '/files/' + config.applicationId + '/' + encodeURIComponent(filename);
69
- }
70
-
71
- getFileStream(filename) {
72
- return this._connect().then(database => {
73
- return _mongodb.GridStore.exist(database, filename).then(() => {
74
- const gridStore = new _mongodb.GridStore(database, filename, 'r');
75
- return gridStore.open();
76
- });
77
- });
78
- }
79
- }
80
-
81
- exports.GridStoreAdapter = GridStoreAdapter; /**
82
- GridStoreAdapter
83
- Stores files in Mongo using GridStore
84
- Requires the database adapter to be based on mongoclient
85
-
86
- weak
87
- */
88
-
89
- // -disable-next
90
-
91
- exports.default = GridStoreAdapter;
92
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkU3RvcmVBZGFwdGVyLmpzIl0sIm5hbWVzIjpbIkdyaWRTdG9yZUFkYXB0ZXIiLCJGaWxlc0FkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsIm1vbmdvRGF0YWJhc2VVUkkiLCJkZWZhdWx0cyIsIkRlZmF1bHRNb25nb1VSSSIsIl9kYXRhYmFzZVVSSSIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsImRiIiwicyIsIm9wdGlvbnMiLCJkYk5hbWUiLCJjcmVhdGVGaWxlIiwiZmlsZW5hbWUiLCJkYXRhIiwiZGF0YWJhc2UiLCJncmlkU3RvcmUiLCJHcmlkU3RvcmUiLCJvcGVuIiwid3JpdGUiLCJjbG9zZSIsImRlbGV0ZUZpbGUiLCJ1bmxpbmsiLCJnZXRGaWxlRGF0YSIsImV4aXN0IiwicmVhZCIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsIm1vdW50IiwiYXBwbGljYXRpb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldEZpbGVTdHJlYW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRU8sTUFBTUEsZ0JBQU4sU0FBK0JDLDBCQUEvQixDQUE0Qzs7QUFJakRDLGNBQVlDLG1CQUFtQkMsbUJBQVNDLGVBQXhDLEVBQXlEO0FBQ3ZEO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQkgsZ0JBQXBCO0FBQ0Q7O0FBRURJLGFBQVc7QUFDVCxRQUFJLENBQUMsS0FBS0Msa0JBQVYsRUFBOEI7QUFDNUIsV0FBS0Esa0JBQUwsR0FBMEJDLHFCQUFZQyxPQUFaLENBQW9CLEtBQUtKLFlBQXpCLEVBQ3ZCSyxJQUR1QixDQUNqQkMsTUFBRCxJQUFZQSxPQUFPQyxFQUFQLENBQVVELE9BQU9FLENBQVAsQ0FBU0MsT0FBVCxDQUFpQkMsTUFBM0IsQ0FETSxDQUExQjtBQUVEO0FBQ0QsV0FBTyxLQUFLUixrQkFBWjtBQUNEOztBQUVEO0FBQ0E7QUFDQVMsYUFBV0MsUUFBWCxFQUE2QkMsSUFBN0IsRUFBbUM7QUFDakMsV0FBTyxLQUFLWixRQUFMLEdBQWdCSSxJQUFoQixDQUFzQlMsUUFBRCxJQUFjO0FBQ3hDLFlBQU1DLFlBQVksSUFBSUMsa0JBQUosQ0FBY0YsUUFBZCxFQUF3QkYsUUFBeEIsRUFBa0MsR0FBbEMsQ0FBbEI7QUFDQSxhQUFPRyxVQUFVRSxJQUFWLEVBQVA7QUFDRCxLQUhNLEVBR0paLElBSEksQ0FHQ1UsYUFBYTtBQUNuQixhQUFPQSxVQUFVRyxLQUFWLENBQWdCTCxJQUFoQixDQUFQO0FBQ0QsS0FMTSxFQUtKUixJQUxJLENBS0NVLGFBQWE7QUFDbkIsYUFBT0EsVUFBVUksS0FBVixFQUFQO0FBQ0QsS0FQTSxDQUFQO0FBUUQ7O0FBRURDLGFBQVdSLFFBQVgsRUFBNkI7QUFDM0IsV0FBTyxLQUFLWCxRQUFMLEdBQWdCSSxJQUFoQixDQUFxQlMsWUFBWTtBQUN0QyxZQUFNQyxZQUFZLElBQUlDLGtCQUFKLENBQWNGLFFBQWQsRUFBd0JGLFFBQXhCLEVBQWtDLEdBQWxDLENBQWxCO0FBQ0EsYUFBT0csVUFBVUUsSUFBVixFQUFQO0FBQ0QsS0FITSxFQUdKWixJQUhJLENBR0VVLFNBQUQsSUFBZTtBQUNyQixhQUFPQSxVQUFVTSxNQUFWLEVBQVA7QUFDRCxLQUxNLEVBS0poQixJQUxJLENBS0VVLFNBQUQsSUFBZTtBQUNyQixhQUFPQSxVQUFVSSxLQUFWLEVBQVA7QUFDRCxLQVBNLENBQVA7QUFRRDs7QUFFREcsY0FBWVYsUUFBWixFQUE4QjtBQUM1QixXQUFPLEtBQUtYLFFBQUwsR0FBZ0JJLElBQWhCLENBQXFCUyxZQUFZO0FBQ3RDLGFBQU9FLG1CQUFVTyxLQUFWLENBQWdCVCxRQUFoQixFQUEwQkYsUUFBMUIsRUFDSlAsSUFESSxDQUNDLE1BQU07QUFDVixjQUFNVSxZQUFZLElBQUlDLGtCQUFKLENBQWNGLFFBQWQsRUFBd0JGLFFBQXhCLEVBQWtDLEdBQWxDLENBQWxCO0FBQ0EsZUFBT0csVUFBVUUsSUFBVixFQUFQO0FBQ0QsT0FKSSxDQUFQO0FBS0QsS0FOTSxFQU1KWixJQU5JLENBTUNVLGFBQWE7QUFDbkIsYUFBT0EsVUFBVVMsSUFBVixFQUFQO0FBQ0QsS0FSTSxDQUFQO0FBU0Q7O0FBRURDLGtCQUFnQkMsTUFBaEIsRUFBd0JkLFFBQXhCLEVBQWtDO0FBQ2hDLFdBQVFjLE9BQU9DLEtBQVAsR0FBZSxTQUFmLEdBQTJCRCxPQUFPRSxhQUFsQyxHQUFrRCxHQUFsRCxHQUF3REMsbUJBQW1CakIsUUFBbkIsQ0FBaEU7QUFDRDs7QUFFRGtCLGdCQUFjbEIsUUFBZCxFQUFnQztBQUM5QixXQUFPLEtBQUtYLFFBQUwsR0FBZ0JJLElBQWhCLENBQXFCUyxZQUFZO0FBQ3RDLGFBQU9FLG1CQUFVTyxLQUFWLENBQWdCVCxRQUFoQixFQUEwQkYsUUFBMUIsRUFBb0NQLElBQXBDLENBQXlDLE1BQU07QUFDcEQsY0FBTVUsWUFBWSxJQUFJQyxrQkFBSixDQUFjRixRQUFkLEVBQXdCRixRQUF4QixFQUFrQyxHQUFsQyxDQUFsQjtBQUNBLGVBQU9HLFVBQVVFLElBQVYsRUFBUDtBQUNELE9BSE0sQ0FBUDtBQUlELEtBTE0sQ0FBUDtBQU1EO0FBaEVnRDs7UUFBdEN2QixnQixHQUFBQSxnQixFQWJiOzs7Ozs7OztBQVFBOztrQkF3RWVBLGdCIiwiZmlsZSI6IkdyaWRTdG9yZUFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiBHcmlkU3RvcmVBZGFwdGVyXG4gU3RvcmVzIGZpbGVzIGluIE1vbmdvIHVzaW5nIEdyaWRTdG9yZVxuIFJlcXVpcmVzIHRoZSBkYXRhYmFzZSBhZGFwdGVyIHRvIGJlIGJhc2VkIG9uIG1vbmdvY2xpZW50XG5cbiBAZmxvdyB3ZWFrXG4gKi9cblxuLy8gQGZsb3ctZGlzYWJsZS1uZXh0XG5pbXBvcnQgeyBNb25nb0NsaWVudCwgR3JpZFN0b3JlLCBEYn0gZnJvbSAnbW9uZ29kYic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIgfSAgICAgICAgICAgICAgZnJvbSAnLi9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IGRlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uLy4uL2RlZmF1bHRzJztcblxuZXhwb3J0IGNsYXNzIEdyaWRTdG9yZUFkYXB0ZXIgZXh0ZW5kcyBGaWxlc0FkYXB0ZXIge1xuICBfZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgX2Nvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlPERiPjtcblxuICBjb25zdHJ1Y3Rvcihtb25nb0RhdGFiYXNlVVJJID0gZGVmYXVsdHMuRGVmYXVsdE1vbmdvVVJJKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kYXRhYmFzZVVSSSA9IG1vbmdvRGF0YWJhc2VVUkk7XG4gIH1cblxuICBfY29ubmVjdCgpIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSA9IE1vbmdvQ2xpZW50LmNvbm5lY3QodGhpcy5fZGF0YWJhc2VVUkkpXG4gICAgICAgIC50aGVuKChjbGllbnQpID0+IGNsaWVudC5kYihjbGllbnQucy5vcHRpb25zLmRiTmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICAvLyBGb3IgYSBnaXZlbiBjb25maWcgb2JqZWN0LCBmaWxlbmFtZSwgYW5kIGRhdGEsIHN0b3JlIGEgZmlsZVxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZVxuICBjcmVhdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdCgpLnRoZW4oKGRhdGFiYXNlKSA9PiB7XG4gICAgICBjb25zdCBncmlkU3RvcmUgPSBuZXcgR3JpZFN0b3JlKGRhdGFiYXNlLCBmaWxlbmFtZSwgJ3cnKTtcbiAgICAgIHJldHVybiBncmlkU3RvcmUub3BlbigpO1xuICAgIH0pLnRoZW4oZ3JpZFN0b3JlID0+IHtcbiAgICAgIHJldHVybiBncmlkU3RvcmUud3JpdGUoZGF0YSk7XG4gICAgfSkudGhlbihncmlkU3RvcmUgPT4ge1xuICAgICAgcmV0dXJuIGdyaWRTdG9yZS5jbG9zZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlRmlsZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoKS50aGVuKGRhdGFiYXNlID0+IHtcbiAgICAgIGNvbnN0IGdyaWRTdG9yZSA9IG5ldyBHcmlkU3RvcmUoZGF0YWJhc2UsIGZpbGVuYW1lLCAncicpO1xuICAgICAgcmV0dXJuIGdyaWRTdG9yZS5vcGVuKCk7XG4gICAgfSkudGhlbigoZ3JpZFN0b3JlKSA9PiB7XG4gICAgICByZXR1cm4gZ3JpZFN0b3JlLnVubGluaygpO1xuICAgIH0pLnRoZW4oKGdyaWRTdG9yZSkgPT4ge1xuICAgICAgcmV0dXJuIGdyaWRTdG9yZS5jbG9zZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmlsZURhdGEoZmlsZW5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0KCkudGhlbihkYXRhYmFzZSA9PiB7XG4gICAgICByZXR1cm4gR3JpZFN0b3JlLmV4aXN0KGRhdGFiYXNlLCBmaWxlbmFtZSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyaWRTdG9yZSA9IG5ldyBHcmlkU3RvcmUoZGF0YWJhc2UsIGZpbGVuYW1lLCAncicpO1xuICAgICAgICAgIHJldHVybiBncmlkU3RvcmUub3BlbigpO1xuICAgICAgICB9KTtcbiAgICB9KS50aGVuKGdyaWRTdG9yZSA9PiB7XG4gICAgICByZXR1cm4gZ3JpZFN0b3JlLnJlYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIChjb25maWcubW91bnQgKyAnL2ZpbGVzLycgKyBjb25maWcuYXBwbGljYXRpb25JZCArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSkpO1xuICB9XG5cbiAgZ2V0RmlsZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3QoKS50aGVuKGRhdGFiYXNlID0+IHtcbiAgICAgIHJldHVybiBHcmlkU3RvcmUuZXhpc3QoZGF0YWJhc2UsIGZpbGVuYW1lKS50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ3JpZFN0b3JlID0gbmV3IEdyaWRTdG9yZShkYXRhYmFzZSwgZmlsZW5hbWUsICdyJyk7XG4gICAgICAgIHJldHVybiBncmlkU3RvcmUub3BlbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JpZFN0b3JlQWRhcHRlcjtcbiJdfQ==
3
+ // Note: GridStore was replaced by GridFSBucketAdapter by default in 2018 by @flovilmart
4
+ throw new Error('GridStoreAdapter: GridStore is no longer supported by parse server and mongodb, use GridFSBucketAdapter instead.');
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkU3RvcmVBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIE5vdGU6IEdyaWRTdG9yZSB3YXMgcmVwbGFjZWQgYnkgR3JpZEZTQnVja2V0QWRhcHRlciBieSBkZWZhdWx0IGluIDIwMTggYnkgQGZsb3ZpbG1hcnRcbnRocm93IG5ldyBFcnJvcihcbiAgJ0dyaWRTdG9yZUFkYXB0ZXI6IEdyaWRTdG9yZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IHBhcnNlIHNlcnZlciBhbmQgbW9uZ29kYiwgdXNlIEdyaWRGU0J1Y2tldEFkYXB0ZXIgaW5zdGVhZC4nXG4pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsTUFBTSxJQUFJQSxLQUFLLENBQ2Isa0hBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -3,21 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- /*eslint no-unused-vars: "off"*/
7
- // Logger Adapter
8
- //
9
- // Allows you to change the logger mechanism
10
- //
11
- // Adapter classes must implement the following functions:
12
- // * log() {}
13
- // * query(options, callback) /* optional */
14
- // Default is WinstonLoggerAdapter.js
15
-
6
+ exports.default = exports.LoggerAdapter = void 0;
7
+ /* eslint-disable unused-imports/no-unused-vars */
8
+ /**
9
+ * @interface
10
+ * @memberof module:Adapters
11
+ * Logger Adapter
12
+ * Allows you to change the logger mechanism
13
+ * Default is WinstonLoggerAdapter.js
14
+ */
16
15
  class LoggerAdapter {
17
16
  constructor(options) {}
18
- log(level, message) /* meta */{}
17
+ /**
18
+ * log
19
+ * @param {String} level
20
+ * @param {String} message
21
+ * @param {Object} metadata
22
+ */
23
+ log(level, message /* meta */) {}
19
24
  }
20
-
21
25
  exports.LoggerAdapter = LoggerAdapter;
22
- exports.default = LoggerAdapter;
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9Mb2dnZXIvTG9nZ2VyQWRhcHRlci5qcyJdLCJuYW1lcyI6WyJMb2dnZXJBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwibG9nIiwibGV2ZWwiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxNQUFNQSxhQUFOLENBQW9CO0FBQ3pCQyxjQUFZQyxPQUFaLEVBQXFCLENBQUU7QUFDdkJDLE1BQUlDLEtBQUosRUFBV0MsT0FBWCxFQUFvQixVQUFZLENBQUU7QUFGVDs7UUFBZEwsYSxHQUFBQSxhO2tCQUtFQSxhIiwiZmlsZSI6IkxvZ2dlckFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiovXG4vLyBMb2dnZXIgQWRhcHRlclxuLy9cbi8vIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBsb2dnZXIgbWVjaGFuaXNtXG4vL1xuLy8gQWRhcHRlciBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiBsb2coKSB7fVxuLy8gKiBxdWVyeShvcHRpb25zLCBjYWxsYmFjaykgLyogb3B0aW9uYWwgKi9cbi8vIERlZmF1bHQgaXMgV2luc3RvbkxvZ2dlckFkYXB0ZXIuanNcblxuZXhwb3J0IGNsYXNzIExvZ2dlckFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7fVxuICBsb2cobGV2ZWwsIG1lc3NhZ2UsIC8qIG1ldGEgKi8pIHt9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlckFkYXB0ZXI7XG4iXX0=
26
+ var _default = exports.default = LoggerAdapter;
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2dnZXJBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwibG9nIiwibGV2ZWwiLCJtZXNzYWdlIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9Mb2dnZXIvTG9nZ2VyQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBAaW50ZXJmYWNlXG4gKiBAbWVtYmVyb2YgbW9kdWxlOkFkYXB0ZXJzXG4gKiBMb2dnZXIgQWRhcHRlclxuICogQWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGxvZ2dlciBtZWNoYW5pc21cbiAqIERlZmF1bHQgaXMgV2luc3RvbkxvZ2dlckFkYXB0ZXIuanNcbiAqL1xuZXhwb3J0IGNsYXNzIExvZ2dlckFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7fVxuICAvKipcbiAgICogbG9nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsZXZlbFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge09iamVjdH0gbWV0YWRhdGFcbiAgICovXG4gIGxvZyhsZXZlbCwgbWVzc2FnZSAvKiBtZXRhICovKSB7fVxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsYUFBYSxDQUFDO0VBQ3pCQyxXQUFXQSxDQUFDQyxPQUFPLEVBQUUsQ0FBQztFQUN0QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ2xDO0FBQUNDLE9BQUEsQ0FBQU4sYUFBQSxHQUFBQSxhQUFBO0FBQUEsSUFBQU8sUUFBQSxHQUFBRCxPQUFBLENBQUFFLE9BQUEsR0FFY1IsYUFBYSIsImlnbm9yZUxpc3QiOltdfQ==