payload 3.0.0-beta.11 → 3.0.0-beta.13

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 (154) hide show
  1. package/dist/auth/cookies.d.ts +16 -4
  2. package/dist/auth/cookies.d.ts.map +1 -1
  3. package/dist/auth/cookies.js +45 -14
  4. package/dist/auth/cookies.js.map +1 -1
  5. package/dist/auth/operations/forgotPassword.js +3 -3
  6. package/dist/auth/operations/forgotPassword.js.map +1 -1
  7. package/dist/auth/operations/login.d.ts.map +1 -1
  8. package/dist/auth/operations/login.js +17 -1
  9. package/dist/auth/operations/login.js.map +1 -1
  10. package/dist/auth/sendVerificationEmail.d.ts +5 -6
  11. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  12. package/dist/auth/sendVerificationEmail.js +4 -5
  13. package/dist/auth/sendVerificationEmail.js.map +1 -1
  14. package/dist/collections/config/client.d.ts +4 -1
  15. package/dist/collections/config/client.d.ts.map +1 -1
  16. package/dist/collections/config/client.js +2 -1
  17. package/dist/collections/config/client.js.map +1 -1
  18. package/dist/collections/config/defaults.d.ts +1 -0
  19. package/dist/collections/config/defaults.d.ts.map +1 -1
  20. package/dist/collections/config/defaults.js +1 -0
  21. package/dist/collections/config/defaults.js.map +1 -1
  22. package/dist/collections/config/schema.d.ts.map +1 -1
  23. package/dist/collections/config/schema.js +1 -0
  24. package/dist/collections/config/schema.js.map +1 -1
  25. package/dist/collections/config/types.d.ts +5 -2
  26. package/dist/collections/config/types.d.ts.map +1 -1
  27. package/dist/collections/config/types.js.map +1 -1
  28. package/dist/collections/operations/count.d.ts +13 -0
  29. package/dist/collections/operations/count.d.ts.map +1 -0
  30. package/dist/collections/operations/count.js +75 -0
  31. package/dist/collections/operations/count.js.map +1 -0
  32. package/dist/collections/operations/create.d.ts.map +1 -1
  33. package/dist/collections/operations/create.js +3 -4
  34. package/dist/collections/operations/create.js.map +1 -1
  35. package/dist/collections/operations/local/count.d.ts +20 -0
  36. package/dist/collections/operations/local/count.d.ts.map +1 -0
  37. package/dist/collections/operations/local/count.js +19 -0
  38. package/dist/collections/operations/local/count.js.map +1 -0
  39. package/dist/collections/operations/local/index.d.ts +2 -0
  40. package/dist/collections/operations/local/index.d.ts.map +1 -1
  41. package/dist/collections/operations/local/index.js +2 -0
  42. package/dist/collections/operations/local/index.js.map +1 -1
  43. package/dist/collections/operations/update.d.ts.map +1 -1
  44. package/dist/collections/operations/update.js +2 -2
  45. package/dist/collections/operations/update.js.map +1 -1
  46. package/dist/collections/operations/updateByID.js +1 -1
  47. package/dist/collections/operations/updateByID.js.map +1 -1
  48. package/dist/collections/operations/utils.d.ts +6 -0
  49. package/dist/collections/operations/utils.d.ts.map +1 -1
  50. package/dist/collections/operations/utils.js.map +1 -1
  51. package/dist/config/client.d.ts +2 -1
  52. package/dist/config/client.d.ts.map +1 -1
  53. package/dist/config/client.js +2 -1
  54. package/dist/config/client.js.map +1 -1
  55. package/dist/config/defaults.d.ts.map +1 -1
  56. package/dist/config/defaults.js +1 -0
  57. package/dist/config/defaults.js.map +1 -1
  58. package/dist/config/schema.d.ts.map +1 -1
  59. package/dist/config/schema.js +1 -0
  60. package/dist/config/schema.js.map +1 -1
  61. package/dist/config/types.d.ts +7 -36
  62. package/dist/config/types.d.ts.map +1 -1
  63. package/dist/config/types.js +0 -12
  64. package/dist/config/types.js.map +1 -1
  65. package/dist/database/types.d.ts +10 -0
  66. package/dist/database/types.d.ts.map +1 -1
  67. package/dist/database/types.js.map +1 -1
  68. package/dist/email/consoleEmailAdapter.d.ts +3 -0
  69. package/dist/email/consoleEmailAdapter.d.ts.map +1 -0
  70. package/dist/email/consoleEmailAdapter.js +16 -0
  71. package/dist/email/consoleEmailAdapter.js.map +1 -0
  72. package/dist/email/defaults.d.ts +2 -2
  73. package/dist/email/defaults.d.ts.map +1 -1
  74. package/dist/email/defaults.js +3 -3
  75. package/dist/email/defaults.js.map +1 -1
  76. package/dist/email/getStringifiedToAddress.d.ts +3 -0
  77. package/dist/email/getStringifiedToAddress.d.ts.map +1 -0
  78. package/dist/email/getStringifiedToAddress.js +20 -0
  79. package/dist/email/getStringifiedToAddress.js.map +1 -0
  80. package/dist/email/sendEmail.d.ts +3 -2
  81. package/dist/email/sendEmail.d.ts.map +1 -1
  82. package/dist/email/sendEmail.js +8 -4
  83. package/dist/email/sendEmail.js.map +1 -1
  84. package/dist/email/types.d.ts +25 -18
  85. package/dist/email/types.d.ts.map +1 -1
  86. package/dist/email/types.js +5 -1
  87. package/dist/email/types.js.map +1 -1
  88. package/dist/exports/database.d.ts +1 -1
  89. package/dist/exports/database.d.ts.map +1 -1
  90. package/dist/exports/database.js.map +1 -1
  91. package/dist/exports/node.d.ts +3 -0
  92. package/dist/exports/node.d.ts.map +1 -1
  93. package/dist/exports/node.js +3 -1
  94. package/dist/exports/node.js.map +1 -1
  95. package/dist/exports/operations.d.ts +1 -0
  96. package/dist/exports/operations.d.ts.map +1 -1
  97. package/dist/exports/operations.js +1 -0
  98. package/dist/exports/operations.js.map +1 -1
  99. package/dist/exports/types.d.ts +1 -0
  100. package/dist/exports/types.d.ts.map +1 -1
  101. package/dist/exports/types.js.map +1 -1
  102. package/dist/exports/utilities.d.ts +3 -0
  103. package/dist/exports/utilities.d.ts.map +1 -1
  104. package/dist/exports/utilities.js +3 -1
  105. package/dist/exports/utilities.js.map +1 -1
  106. package/dist/fields/config/client.d.ts +26 -1
  107. package/dist/fields/config/client.d.ts.map +1 -1
  108. package/dist/fields/config/client.js +2 -1
  109. package/dist/fields/config/client.js.map +1 -1
  110. package/dist/fields/config/schema.d.ts.map +1 -1
  111. package/dist/fields/config/schema.js +7 -1
  112. package/dist/fields/config/schema.js.map +1 -1
  113. package/dist/fields/config/types.d.ts +12 -3
  114. package/dist/fields/config/types.d.ts.map +1 -1
  115. package/dist/fields/config/types.js.map +1 -1
  116. package/dist/fields/validations.d.ts +2 -0
  117. package/dist/fields/validations.d.ts.map +1 -1
  118. package/dist/fields/validations.js +44 -1
  119. package/dist/fields/validations.js.map +1 -1
  120. package/dist/globals/config/client.d.ts +1 -1
  121. package/dist/globals/config/client.d.ts.map +1 -1
  122. package/dist/globals/config/client.js +2 -1
  123. package/dist/globals/config/client.js.map +1 -1
  124. package/dist/globals/config/schema.d.ts.map +1 -1
  125. package/dist/globals/config/schema.js +1 -0
  126. package/dist/globals/config/schema.js.map +1 -1
  127. package/dist/globals/config/types.d.ts +3 -1
  128. package/dist/globals/config/types.d.ts.map +1 -1
  129. package/dist/globals/config/types.js.map +1 -1
  130. package/dist/index.d.ts +13 -6
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +25 -13
  133. package/dist/index.js.map +1 -1
  134. package/dist/uploads/getExternalFile.d.ts +1 -1
  135. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  136. package/dist/uploads/getExternalFile.js +1 -1
  137. package/dist/uploads/getExternalFile.js.map +1 -1
  138. package/dist/utilities/importWithoutClientFiles.d.ts.map +1 -1
  139. package/dist/utilities/importWithoutClientFiles.js +8 -5
  140. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  141. package/dist/utilities/telemetry/index.d.ts +3 -0
  142. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  143. package/dist/utilities/telemetry/index.js +32 -6
  144. package/dist/utilities/telemetry/index.js.map +1 -1
  145. package/package.json +5 -5
  146. package/dist/email/build.d.ts +0 -5
  147. package/dist/email/build.d.ts.map +0 -1
  148. package/dist/email/build.js +0 -63
  149. package/dist/email/build.js.map +0 -1
  150. package/dist/email/mockHandler.d.ts +0 -5
  151. package/dist/email/mockHandler.d.ts.map +0 -1
  152. package/dist/email/mockHandler.js +0 -24
  153. package/dist/email/mockHandler.js.map +0 -1
  154. package/src/index.ts +0 -499
package/src/index.ts DELETED
@@ -1,499 +0,0 @@
1
- import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'
2
- import type { OperationArgs, Request as graphQLRequest } from 'graphql-http'
3
- import type { SendMailOptions } from 'nodemailer'
4
- import type pino from 'pino'
5
-
6
- import crypto from 'crypto'
7
-
8
- import type { AuthArgs } from './auth/operations/auth.js'
9
- import type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'
10
- import type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'
11
- import type { Options as LoginOptions } from './auth/operations/local/login.js'
12
- import type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'
13
- import type { Options as UnlockOptions } from './auth/operations/local/unlock.js'
14
- import type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'
15
- import type { Result as LoginResult } from './auth/operations/login.js'
16
- import type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'
17
- import type { AuthStrategy } from './auth/types.js'
18
- import type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'
19
- import type { Options as CreateOptions } from './collections/operations/local/create.js'
20
- import type {
21
- ByIDOptions as DeleteByIDOptions,
22
- ManyOptions as DeleteManyOptions,
23
- Options as DeleteOptions,
24
- } from './collections/operations/local/delete.js'
25
- import type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'
26
- import type { Options as FindOptions } from './collections/operations/local/find.js'
27
- import type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'
28
- import type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'
29
- import type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'
30
- import type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'
31
- import type {
32
- ByIDOptions as UpdateByIDOptions,
33
- ManyOptions as UpdateManyOptions,
34
- Options as UpdateOptions,
35
- } from './collections/operations/local/update.js'
36
- import type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'
37
- import type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'
38
- import type { BuildEmailResult } from './email/types.js'
39
- import type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'
40
- import type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'
41
- import type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'
42
- import type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'
43
- import type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'
44
- import type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'
45
- import type { TypeWithVersion } from './versions/types.js'
46
-
47
- import { decrypt, encrypt } from './auth/crypto.js'
48
- import { APIKeyAuthentication } from './auth/strategies/apiKey.js'
49
- import { JWTAuthentication } from './auth/strategies/jwt.js'
50
- import localOperations from './collections/operations/local/index.js'
51
- import { validateSchema } from './config/validate.js'
52
- import buildEmail from './email/build.js'
53
- import { defaults as emailDefaults } from './email/defaults.js'
54
- import sendEmail from './email/sendEmail.js'
55
- import { fieldAffectsData } from './exports/types.js'
56
- import localGlobalOperations from './globals/operations/local/index.js'
57
- import flattenFields from './utilities/flattenTopLevelFields.js'
58
- import Logger from './utilities/logger.js'
59
- import { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'
60
-
61
- /**
62
- * @description Payload
63
- */
64
- export class BasePayload<TGeneratedTypes extends GeneratedTypes> {
65
- /**
66
- * @description Authorization and Authentication using headers and cookies to run auth user strategies
67
- * @returns cookies: Map<string, string>
68
- * @returns permissions: Permissions
69
- * @returns user: User
70
- */
71
- auth = async (options: AuthArgs) => {
72
- const { auth } = localOperations.auth
73
- return auth(this, options)
74
- }
75
-
76
- authStrategies: AuthStrategy[]
77
-
78
- collections: {
79
- [slug: number | string | symbol]: Collection
80
- } = {}
81
-
82
- config: SanitizedConfig
83
-
84
- /**
85
- * @description Performs create operation
86
- * @param options
87
- * @returns created document
88
- */
89
- create = async <T extends keyof TGeneratedTypes['collections']>(
90
- options: CreateOptions<T>,
91
- ): Promise<TGeneratedTypes['collections'][T]> => {
92
- const { create } = localOperations
93
- return create<T>(this, options)
94
- }
95
-
96
- db: DatabaseAdapter
97
-
98
- decrypt = decrypt
99
-
100
- duplicate = async <T extends keyof TGeneratedTypes['collections']>(
101
- options: DuplicateOptions<T>,
102
- ): Promise<TGeneratedTypes['collections'][T]> => {
103
- const { duplicate } = localOperations
104
- return duplicate<T>(this, options)
105
- }
106
-
107
- email: BuildEmailResult
108
-
109
- emailOptions: EmailOptions
110
-
111
- // TODO: re-implement or remove?
112
- // errorHandler: ErrorHandler
113
-
114
- encrypt = encrypt
115
-
116
- extensions: (args: {
117
- args: OperationArgs<any>
118
- req: graphQLRequest<unknown, unknown>
119
- result: ExecutionResult
120
- }) => Promise<any>
121
-
122
- /**
123
- * @description Find documents with criteria
124
- * @param options
125
- * @returns documents satisfying query
126
- */
127
- find = async <T extends keyof TGeneratedTypes['collections']>(
128
- options: FindOptions<T>,
129
- ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {
130
- const { find } = localOperations
131
- return find<T>(this, options)
132
- }
133
-
134
- /**
135
- * @description Find document by ID
136
- * @param options
137
- * @returns document with specified ID
138
- */
139
- findByID = async <T extends keyof TGeneratedTypes['collections']>(
140
- options: FindByIDOptions<T>,
141
- ): Promise<TGeneratedTypes['collections'][T]> => {
142
- const { findByID } = localOperations
143
- return findByID<T>(this, options)
144
- }
145
-
146
- findGlobal = async <T extends keyof TGeneratedTypes['globals']>(
147
- options: FindGlobalOptions<T>,
148
- ): Promise<TGeneratedTypes['globals'][T]> => {
149
- const { findOne } = localGlobalOperations
150
- return findOne<T>(this, options)
151
- }
152
-
153
- /**
154
- * @description Find global version by ID
155
- * @param options
156
- * @returns global version with specified ID
157
- */
158
- findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(
159
- options: FindGlobalVersionByIDOptions<T>,
160
- ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {
161
- const { findVersionByID } = localGlobalOperations
162
- return findVersionByID<T>(this, options)
163
- }
164
-
165
- /**
166
- * @description Find global versions with criteria
167
- * @param options
168
- * @returns versions satisfying query
169
- */
170
- findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(
171
- options: FindGlobalVersionsOptions<T>,
172
- ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {
173
- const { findVersions } = localGlobalOperations
174
- return findVersions<T>(this, options)
175
- }
176
-
177
- /**
178
- * @description Find version by ID
179
- * @param options
180
- * @returns version with specified ID
181
- */
182
- findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(
183
- options: FindVersionByIDOptions<T>,
184
- ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {
185
- const { findVersionByID } = localOperations
186
- return findVersionByID<T>(this, options)
187
- }
188
-
189
- /**
190
- * @description Find versions with criteria
191
- * @param options
192
- * @returns versions satisfying query
193
- */
194
- findVersions = async <T extends keyof TGeneratedTypes['collections']>(
195
- options: FindVersionsOptions<T>,
196
- ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {
197
- const { findVersions } = localOperations
198
- return findVersions<T>(this, options)
199
- }
200
-
201
- forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(
202
- options: ForgotPasswordOptions<T>,
203
- ): Promise<ForgotPasswordResult> => {
204
- const { forgotPassword } = localOperations.auth
205
- return forgotPassword<T>(this, options)
206
- }
207
-
208
- getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`
209
-
210
- getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`
211
-
212
- globals: Globals
213
-
214
- logger: pino.Logger
215
-
216
- login = async <T extends keyof TGeneratedTypes['collections']>(
217
- options: LoginOptions<T>,
218
- ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {
219
- const { login } = localOperations.auth
220
- return login<T>(this, options)
221
- }
222
-
223
- resetPassword = async <T extends keyof TGeneratedTypes['collections']>(
224
- options: ResetPasswordOptions<T>,
225
- ): Promise<ResetPasswordResult> => {
226
- const { resetPassword } = localOperations.auth
227
- return resetPassword<T>(this, options)
228
- }
229
-
230
- /**
231
- * @description Restore global version by ID
232
- * @param options
233
- * @returns version with specified ID
234
- */
235
- restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(
236
- options: RestoreGlobalVersionOptions<T>,
237
- ): Promise<TGeneratedTypes['globals'][T]> => {
238
- const { restoreVersion } = localGlobalOperations
239
- return restoreVersion<T>(this, options)
240
- }
241
-
242
- /**
243
- * @description Restore version by ID
244
- * @param options
245
- * @returns version with specified ID
246
- */
247
- restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(
248
- options: RestoreVersionOptions<T>,
249
- ): Promise<TGeneratedTypes['collections'][T]> => {
250
- const { restoreVersion } = localOperations
251
- return restoreVersion<T>(this, options)
252
- }
253
-
254
- schema: GraphQLSchema
255
-
256
- secret: string
257
-
258
- sendEmail: (message: SendMailOptions) => Promise<unknown>
259
-
260
- types: {
261
- arrayTypes: any
262
- blockInputTypes: any
263
- blockTypes: any
264
- fallbackLocaleInputType?: any
265
- groupTypes: any
266
- localeInputType?: any
267
- tabTypes: any
268
- }
269
-
270
- unlock = async <T extends keyof TGeneratedTypes['collections']>(
271
- options: UnlockOptions<T>,
272
- ): Promise<boolean> => {
273
- const { unlock } = localOperations.auth
274
- return unlock(this, options)
275
- }
276
-
277
- updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(
278
- options: UpdateGlobalOptions<T>,
279
- ): Promise<TGeneratedTypes['globals'][T]> => {
280
- const { update } = localGlobalOperations
281
- return update<T>(this, options)
282
- }
283
-
284
- validationRules: (args: OperationArgs<any>) => ValidationRule[]
285
-
286
- verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(
287
- options: VerifyEmailOptions<T>,
288
- ): Promise<boolean> => {
289
- const { verifyEmail } = localOperations.auth
290
- return verifyEmail(this, options)
291
- }
292
-
293
- versions: {
294
- [slug: string]: any // TODO: Type this
295
- } = {}
296
-
297
- /**
298
- * @description delete one or more documents
299
- * @param options
300
- * @returns Updated document(s)
301
- */
302
- delete<T extends keyof TGeneratedTypes['collections']>(
303
- options: DeleteByIDOptions<T>,
304
- ): Promise<TGeneratedTypes['collections'][T]>
305
-
306
- delete<T extends keyof TGeneratedTypes['collections']>(
307
- options: DeleteManyOptions<T>,
308
- ): Promise<BulkOperationResult<T>>
309
-
310
- delete<T extends keyof TGeneratedTypes['collections']>(
311
- options: DeleteOptions<T>,
312
- ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {
313
- const { deleteLocal } = localOperations
314
- return deleteLocal<T>(this, options)
315
- }
316
-
317
- /**
318
- * @description Initializes Payload
319
- * @param options
320
- */
321
- async init(options: InitOptions): Promise<Payload> {
322
- if (!options?.config) {
323
- throw new Error('Error: the payload config is required to initialize payload.')
324
- }
325
-
326
- this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)
327
-
328
- this.config = await options.config
329
-
330
- if (process.env.NODE_ENV !== 'production') {
331
- validateSchema(this.config, this.logger)
332
- }
333
-
334
- if (!this.config.secret) {
335
- throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')
336
- }
337
-
338
- this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)
339
-
340
- this.globals = {
341
- config: this.config.globals,
342
- }
343
-
344
- this.config.collections.forEach((collection) => {
345
- const customID = flattenFields(collection.fields).find(
346
- (field) => fieldAffectsData(field) && field.name === 'id',
347
- )
348
-
349
- let customIDType
350
-
351
- if (customID?.type === 'number' || customID?.type === 'text') customIDType = customID.type
352
-
353
- this.collections[collection.slug] = {
354
- config: collection,
355
- customIDType,
356
- }
357
- })
358
-
359
- this.db = this.config.db.init({ payload: this })
360
- this.db.payload = this
361
-
362
- if (this.db?.init) {
363
- await this.db.init()
364
- }
365
-
366
- if (!options.disableDBConnect && this.db.connect) {
367
- await this.db.connect()
368
- }
369
-
370
- // Configure email service
371
- const emailOptions = options.email ? { ...options.email } : this.config.email
372
- if (options.email && this.config.email) {
373
- this.logger.warn(
374
- 'Email options provided in both init options and config. Using init options.',
375
- )
376
- }
377
-
378
- this.emailOptions = emailOptions ?? emailDefaults
379
- this.email = buildEmail(this.emailOptions, this.logger)
380
- this.sendEmail = sendEmail.bind(this)
381
-
382
- serverInitTelemetry(this)
383
-
384
- // 1. loop over collections, if collection has auth strategy, initialize and push to array
385
- let jwtStrategyEnabled = false
386
- this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {
387
- if (collection?.auth) {
388
- if (collection.auth.strategies.length > 0) {
389
- authStrategies.push(...collection.auth.strategies)
390
- }
391
-
392
- // 2. if api key enabled, push api key strategy into the array
393
- if (collection.auth?.useAPIKey) {
394
- authStrategies.push({
395
- name: `${collection.slug}-api-key`,
396
- authenticate: APIKeyAuthentication(collection),
397
- })
398
- }
399
-
400
- // 3. if localStrategy flag is true
401
- if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {
402
- jwtStrategyEnabled = true
403
- }
404
- }
405
-
406
- return authStrategies
407
- }, [] as AuthStrategy[])
408
-
409
- // 4. if enabled, push jwt strategy into authStrategies last
410
- if (jwtStrategyEnabled) {
411
- this.authStrategies.push({
412
- name: 'local-jwt',
413
- authenticate: JWTAuthentication,
414
- })
415
- }
416
-
417
- if (!options.disableOnInit) {
418
- if (typeof options.onInit === 'function') await options.onInit(this)
419
- if (typeof this.config.onInit === 'function') await this.config.onInit(this)
420
- }
421
-
422
- return this
423
- }
424
-
425
- update<T extends keyof TGeneratedTypes['collections']>(
426
- options: UpdateManyOptions<T>,
427
- ): Promise<BulkOperationResult<T>>
428
-
429
- /**
430
- * @description Update one or more documents
431
- * @param options
432
- * @returns Updated document(s)
433
- */
434
- update<T extends keyof TGeneratedTypes['collections']>(
435
- options: UpdateByIDOptions<T>,
436
- ): Promise<TGeneratedTypes['collections'][T]>
437
-
438
- update<T extends keyof TGeneratedTypes['collections']>(
439
- options: UpdateOptions<T>,
440
- ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {
441
- const { update } = localOperations
442
- return update<T>(this, options)
443
- }
444
- }
445
-
446
- const initialized = new BasePayload()
447
-
448
- export default initialized
449
-
450
- let cached = global._payload
451
-
452
- if (!cached) {
453
- // eslint-disable-next-line no-multi-assign
454
- cached = global._payload = { payload: null, promise: null }
455
- }
456
-
457
- export const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {
458
- if (!options?.config) {
459
- throw new Error('Error: the payload config is required for getPayload to work.')
460
- }
461
-
462
- if (cached.payload) {
463
- return cached.payload
464
- }
465
-
466
- if (!cached.promise) {
467
- cached.promise = new BasePayload<GeneratedTypes>().init(options)
468
- }
469
-
470
- try {
471
- cached.payload = await cached.promise
472
- } catch (e) {
473
- cached.promise = null
474
- throw e
475
- }
476
-
477
- return cached.payload
478
- }
479
-
480
- type GeneratedTypes = {
481
- collections: {
482
- [slug: number | string | symbol]: TypeWithID & Record<string, unknown>
483
- }
484
- globals: {
485
- [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>
486
- }
487
- locale: null | string
488
- user: TypeWithID & Record<string, unknown> & { collection: string }
489
- }
490
-
491
- type Payload = BasePayload<GeneratedTypes>
492
-
493
- interface RequestContext {
494
- [key: string]: unknown
495
- }
496
-
497
- type DatabaseAdapter = BaseDatabaseAdapter
498
-
499
- export type { DatabaseAdapter, GeneratedTypes, Payload, RequestContext }