payload 3.0.0-alpha.53 → 3.0.0-alpha.55

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 (132) hide show
  1. package/auth.d.ts +1 -1
  2. package/auth.js +1 -1
  3. package/database.d.ts +1 -1
  4. package/dist/admin/views/types.d.ts +1 -0
  5. package/dist/admin/views/types.d.ts.map +1 -1
  6. package/dist/admin/views/types.js.map +1 -1
  7. package/dist/auth/executeAuthStrategies.d.ts +3 -0
  8. package/dist/auth/executeAuthStrategies.d.ts.map +1 -0
  9. package/dist/auth/{getAuthenticatedUser.js → executeAuthStrategies.js} +2 -2
  10. package/dist/auth/executeAuthStrategies.js.map +1 -0
  11. package/dist/auth/operations/auth.d.ts +13 -0
  12. package/dist/auth/operations/auth.d.ts.map +1 -0
  13. package/dist/auth/operations/auth.js +35 -0
  14. package/dist/auth/operations/auth.js.map +1 -0
  15. package/dist/auth/operations/local/auth.d.ts +4 -0
  16. package/dist/auth/operations/local/auth.d.ts.map +1 -0
  17. package/dist/auth/operations/local/auth.js +13 -0
  18. package/dist/auth/operations/local/auth.js.map +1 -0
  19. package/dist/auth/operations/local/index.d.ts +1 -0
  20. package/dist/auth/operations/local/index.d.ts.map +1 -1
  21. package/dist/auth/operations/local/index.js +2 -0
  22. package/dist/auth/operations/local/index.js.map +1 -1
  23. package/dist/collections/config/client.d.ts +4 -2
  24. package/dist/collections/config/client.d.ts.map +1 -1
  25. package/dist/collections/config/sanitize.js +2 -2
  26. package/dist/collections/config/sanitize.js.map +1 -1
  27. package/dist/collections/config/schema.d.ts.map +1 -1
  28. package/dist/collections/config/schema.js +2 -5
  29. package/dist/collections/config/schema.js.map +1 -1
  30. package/dist/collections/config/types.d.ts +4 -1
  31. package/dist/collections/config/types.d.ts.map +1 -1
  32. package/dist/collections/config/types.js.map +1 -1
  33. package/dist/collections/operations/local/create.js +1 -1
  34. package/dist/collections/operations/local/create.js.map +1 -1
  35. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  36. package/dist/collections/operations/local/duplicate.js +4 -1
  37. package/dist/collections/operations/local/duplicate.js.map +1 -1
  38. package/dist/collections/operations/local/index.d.ts +1 -0
  39. package/dist/collections/operations/local/index.d.ts.map +1 -1
  40. package/dist/config/client.d.ts +1 -1
  41. package/dist/config/client.d.ts.map +1 -1
  42. package/dist/config/client.js +2 -1
  43. package/dist/config/client.js.map +1 -1
  44. package/dist/config/types.d.ts +3 -1
  45. package/dist/config/types.d.ts.map +1 -1
  46. package/dist/config/types.js.map +1 -1
  47. package/dist/database/types.d.ts +4 -0
  48. package/dist/database/types.d.ts.map +1 -1
  49. package/dist/database/types.js.map +1 -1
  50. package/dist/errors/MissingEditorProp.d.ts +7 -0
  51. package/dist/errors/MissingEditorProp.d.ts.map +1 -0
  52. package/dist/errors/MissingEditorProp.js +10 -0
  53. package/dist/errors/MissingEditorProp.js.map +1 -0
  54. package/dist/exports/auth.d.ts +1 -1
  55. package/dist/exports/auth.d.ts.map +1 -1
  56. package/dist/exports/auth.js +1 -1
  57. package/dist/exports/auth.js.map +1 -1
  58. package/dist/exports/database.d.ts +1 -1
  59. package/dist/exports/database.d.ts.map +1 -1
  60. package/dist/exports/database.js.map +1 -1
  61. package/dist/exports/node.d.ts +4 -0
  62. package/dist/exports/node.d.ts.map +1 -0
  63. package/dist/exports/node.js +5 -0
  64. package/dist/exports/node.js.map +1 -0
  65. package/dist/exports/types.d.ts +1 -1
  66. package/dist/exports/types.d.ts.map +1 -1
  67. package/dist/exports/types.js.map +1 -1
  68. package/dist/exports/utilities.d.ts.map +1 -1
  69. package/dist/exports/utilities.js.map +1 -1
  70. package/dist/exports/versions.d.ts +0 -1
  71. package/dist/exports/versions.d.ts.map +1 -1
  72. package/dist/exports/versions.js +0 -1
  73. package/dist/exports/versions.js.map +1 -1
  74. package/dist/fields/baseFields/baseBlockFields.d.ts +2 -2
  75. package/dist/fields/baseFields/baseBlockFields.d.ts.map +1 -1
  76. package/dist/fields/baseFields/baseBlockFields.js.map +1 -1
  77. package/dist/fields/baseFields/baseIDField.d.ts +2 -2
  78. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  79. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  80. package/dist/fields/config/client.d.ts +5 -0
  81. package/dist/fields/config/client.d.ts.map +1 -1
  82. package/dist/fields/config/sanitize.d.ts +7 -1
  83. package/dist/fields/config/sanitize.d.ts.map +1 -1
  84. package/dist/fields/config/sanitize.js +11 -3
  85. package/dist/fields/config/sanitize.js.map +1 -1
  86. package/dist/fields/config/schema.d.ts.map +1 -1
  87. package/dist/fields/config/schema.js +5 -0
  88. package/dist/fields/config/schema.js.map +1 -1
  89. package/dist/fields/config/types.d.ts +33 -2
  90. package/dist/fields/config/types.d.ts.map +1 -1
  91. package/dist/fields/config/types.js.map +1 -1
  92. package/dist/globals/config/schema.d.ts.map +1 -1
  93. package/dist/globals/config/schema.js +1 -0
  94. package/dist/globals/config/schema.js.map +1 -1
  95. package/dist/globals/config/types.d.ts +5 -0
  96. package/dist/globals/config/types.d.ts.map +1 -1
  97. package/dist/globals/config/types.js.map +1 -1
  98. package/dist/index.d.ts +8 -0
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +9 -0
  101. package/dist/index.js.map +1 -1
  102. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  103. package/dist/uploads/getBaseFields.js +25 -34
  104. package/dist/uploads/getBaseFields.js.map +1 -1
  105. package/dist/utilities/importConfig.d.ts +6 -0
  106. package/dist/utilities/importConfig.d.ts.map +1 -0
  107. package/dist/utilities/importConfig.js +32 -0
  108. package/dist/utilities/importConfig.js.map +1 -0
  109. package/dist/utilities/importWithoutClientFiles.d.ts +2 -0
  110. package/dist/utilities/importWithoutClientFiles.d.ts.map +1 -0
  111. package/dist/utilities/importWithoutClientFiles.js +13 -0
  112. package/dist/utilities/importWithoutClientFiles.js.map +1 -0
  113. package/node.d.ts +4 -0
  114. package/node.js +5 -0
  115. package/package.json +2 -2
  116. package/src/index.ts +12 -0
  117. package/types.d.ts +1 -1
  118. package/versions.d.ts +0 -1
  119. package/versions.js +0 -1
  120. package/dist/auth/getAuthenticatedUser.d.ts +0 -3
  121. package/dist/auth/getAuthenticatedUser.d.ts.map +0 -1
  122. package/dist/auth/getAuthenticatedUser.js.map +0 -1
  123. package/dist/exports/uploads.d.ts +0 -2
  124. package/dist/exports/uploads.d.ts.map +0 -1
  125. package/dist/exports/uploads.js +0 -3
  126. package/dist/exports/uploads.js.map +0 -1
  127. package/dist/versions/getVersionsModelName.d.ts +0 -4
  128. package/dist/versions/getVersionsModelName.d.ts.map +0 -1
  129. package/dist/versions/getVersionsModelName.js +0 -3
  130. package/dist/versions/getVersionsModelName.js.map +0 -1
  131. package/uploads.d.ts +0 -2
  132. package/uploads.js +0 -3
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'\nimport type { OperationArgs, Request as graphQLRequest } from 'graphql-http'\nimport type { SendMailOptions } from 'nodemailer'\nimport type pino from 'pino'\n\nimport crypto from 'crypto'\n\nimport type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'\nimport type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'\nimport type { Options as LoginOptions } from './auth/operations/local/login.js'\nimport type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'\nimport type { Options as UnlockOptions } from './auth/operations/local/unlock.js'\nimport type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'\nimport type { Result as LoginResult } from './auth/operations/login.js'\nimport type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'\nimport type { AuthStrategy } from './auth/types.js'\nimport type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'\nimport type { Options as CreateOptions } from './collections/operations/local/create.js'\nimport type {\n ByIDOptions as DeleteByIDOptions,\n ManyOptions as DeleteManyOptions,\n Options as DeleteOptions,\n} from './collections/operations/local/delete.js'\nimport type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'\nimport type { Options as FindOptions } from './collections/operations/local/find.js'\nimport type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'\nimport type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'\nimport type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'\nimport type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'\nimport type {\n ByIDOptions as UpdateByIDOptions,\n ManyOptions as UpdateManyOptions,\n Options as UpdateOptions,\n} from './collections/operations/local/update.js'\nimport type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { BuildEmailResult } from './email/types.js'\nimport type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'\nimport type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'\nimport type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'\nimport type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'\nimport type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'\nimport type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'\nimport type { TypeWithVersion } from './versions/types.js'\n\nimport { decrypt, encrypt } from './auth/crypto.js'\nimport { APIKeyAuthentication } from './auth/strategies/apiKey.js'\nimport { JWTAuthentication } from './auth/strategies/jwt.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { validateSchema } from './config/validate.js'\nimport buildEmail from './email/build.js'\nimport { defaults as emailDefaults } from './email/defaults.js'\nimport sendEmail from './email/sendEmail.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport Logger from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\n\n/**\n * @description Payload\n */\nexport class BasePayload<TGeneratedTypes extends GeneratedTypes> {\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: number | string | symbol]: Collection\n } = {}\n\n config: SanitizedConfig\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <T extends keyof TGeneratedTypes['collections']>(\n options: CreateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { create } = localOperations\n return create<T>(this, options)\n }\n\n db: DatabaseAdapter\n\n decrypt = decrypt\n\n duplicate = async <T extends keyof TGeneratedTypes['collections']>(\n options: DuplicateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { duplicate } = localOperations\n return duplicate<T>(this, options)\n }\n\n email: BuildEmailResult\n\n emailOptions: EmailOptions\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\n\n encrypt = encrypt\n\n extensions: (args: {\n args: OperationArgs<any>\n req: graphQLRequest<unknown, unknown>\n result: ExecutionResult\n }) => Promise<any>\n\n /**\n * @description Find documents with criteria\n * @param options\n * @returns documents satisfying query\n */\n find = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindOptions<T>,\n ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {\n const { find } = localOperations\n return find<T>(this, options)\n }\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n findByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { findByID } = localOperations\n return findByID<T>(this, options)\n }\n\n findGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { findOne } = localGlobalOperations\n return findOne<T>(this, options)\n }\n\n /**\n * @description Find global version by ID\n * @param options\n * @returns global version with specified ID\n */\n findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<T>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {\n const { findVersions } = localOperations\n return findVersions<T>(this, options)\n }\n\n forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ForgotPasswordOptions<T>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<T>(this, options)\n }\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n globals: Globals\n\n logger: pino.Logger\n\n login = async <T extends keyof TGeneratedTypes['collections']>(\n options: LoginOptions<T>,\n ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {\n const { login } = localOperations.auth\n return login<T>(this, options)\n }\n\n resetPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ResetPasswordOptions<T>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<T>(this, options)\n }\n\n /**\n * @description Restore global version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(\n options: RestoreGlobalVersionOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<T>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(\n options: RestoreVersionOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { restoreVersion } = localOperations\n return restoreVersion<T>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: (message: SendMailOptions) => Promise<unknown>\n\n types: {\n arrayTypes: any\n blockInputTypes: any\n blockTypes: any\n fallbackLocaleInputType?: any\n groupTypes: any\n localeInputType?: any\n tabTypes: any\n }\n\n unlock = async <T extends keyof TGeneratedTypes['collections']>(\n options: UnlockOptions<T>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock(this, options)\n }\n\n updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: UpdateGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { update } = localGlobalOperations\n return update<T>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(\n options: VerifyEmailOptions<T>,\n ): Promise<boolean> => {\n const { verifyEmail } = localOperations.auth\n return verifyEmail(this, options)\n }\n\n versions: {\n [slug: string]: any // TODO: Type this\n } = {}\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { deleteLocal } = localOperations\n return deleteLocal<T>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)\n\n this.config = await options.config\n\n if (process.env.NODE_ENV !== 'production') {\n validateSchema(this.config, this.logger)\n }\n\n if (!this.config.secret) {\n throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')\n }\n\n this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)\n\n this.globals = {\n config: this.config.globals,\n }\n\n this.config.collections.forEach((collection) => {\n this.collections[collection.slug] = {\n config: collection,\n }\n })\n\n this.db = this.config.db.init({ payload: this })\n this.db.payload = this\n\n if (this.db?.init) {\n await this.db.init()\n }\n\n if (!options.disableDBConnect && this.db.connect) {\n await this.db.connect()\n }\n\n // Configure email service\n const emailOptions = options.email ? { ...options.email } : this.config.email\n if (options.email && this.config.email) {\n this.logger.warn(\n 'Email options provided in both init options and config. Using init options.',\n )\n }\n\n this.emailOptions = emailOptions ?? emailDefaults\n this.email = buildEmail(this.emailOptions, this.logger)\n this.sendEmail = sendEmail.bind(this)\n\n serverInitTelemetry(this)\n\n // 1. loop over collections, if collection has auth strategy, initialize and push to array\n let jwtStrategyEnabled = false\n this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {\n if (collection?.auth) {\n if (collection.auth.strategies.length > 0) {\n authStrategies.push(...collection.auth.strategies)\n }\n\n // 2. if api key enabled, push api key strategy into the array\n if (collection.auth?.useAPIKey) {\n authStrategies.push({\n name: `${collection.slug}-api-key`,\n authenticate: APIKeyAuthentication(collection),\n })\n }\n\n // 3. if localStrategy flag is true\n if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {\n jwtStrategyEnabled = true\n }\n }\n\n return authStrategies\n }, [] as AuthStrategy[])\n\n // 4. if enabled, push jwt strategy into authStrategies last\n if (jwtStrategyEnabled) {\n this.authStrategies.push({\n name: 'local-jwt',\n authenticate: JWTAuthentication,\n })\n }\n\n if (!options.disableOnInit) {\n if (typeof options.onInit === 'function') await options.onInit(this)\n if (typeof this.config.onInit === 'function') await this.config.onInit(this)\n }\n\n return this\n }\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { update } = localOperations\n return update<T>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n // eslint-disable-next-line no-multi-assign\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {\n if (!options?.config) {\n throw new Error('Error: the payload config is required for getPayload to work.')\n }\n\n if (cached.payload) {\n return cached.payload\n }\n\n if (!cached.promise) {\n cached.promise = new BasePayload<GeneratedTypes>().init(options)\n }\n\n try {\n cached.payload = await cached.promise\n } catch (e) {\n cached.promise = null\n throw e\n }\n\n return cached.payload\n}\n\ntype GeneratedTypes = {\n collections: {\n [slug: number | string | symbol]: TypeWithID & Record<string, unknown>\n }\n globals: {\n [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>\n }\n}\n\ntype Payload = BasePayload<GeneratedTypes>\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\ntype DatabaseAdapter = BaseDatabaseAdapter\n\nexport type { DatabaseAdapter, GeneratedTypes, Payload, RequestContext }\n"],"names":["crypto","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","localOperations","validateSchema","buildEmail","defaults","emailDefaults","sendEmail","localGlobalOperations","Logger","serverInit","serverInitTelemetry","BasePayload","authStrategies","collections","config","create","options","db","duplicate","email","emailOptions","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","auth","getAPIURL","serverURL","routes","api","getAdminURL","admin","globals","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","delete","deleteLocal","init","Error","loggerOptions","loggerDestination","process","env","NODE_ENV","createHash","digest","slice","forEach","collection","slug","payload","disableDBConnect","connect","warn","bind","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","name","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ExecutionResult, GraphQLSchema, ValidationRule } from 'graphql'\nimport type { OperationArgs, Request as graphQLRequest } from 'graphql-http'\nimport type { SendMailOptions } from 'nodemailer'\nimport type pino from 'pino'\n\nimport crypto from 'crypto'\n\nimport type { AuthArgs } from './auth/operations/auth.js'\nimport type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'\nimport type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'\nimport type { Options as LoginOptions } from './auth/operations/local/login.js'\nimport type { Options as ResetPasswordOptions } from './auth/operations/local/resetPassword.js'\nimport type { Options as UnlockOptions } from './auth/operations/local/unlock.js'\nimport type { Options as VerifyEmailOptions } from './auth/operations/local/verifyEmail.js'\nimport type { Result as LoginResult } from './auth/operations/login.js'\nimport type { Result as ResetPasswordResult } from './auth/operations/resetPassword.js'\nimport type { AuthStrategy } from './auth/types.js'\nimport type { BulkOperationResult, Collection, TypeWithID } from './collections/config/types.js'\nimport type { Options as CreateOptions } from './collections/operations/local/create.js'\nimport type {\n ByIDOptions as DeleteByIDOptions,\n ManyOptions as DeleteManyOptions,\n Options as DeleteOptions,\n} from './collections/operations/local/delete.js'\nimport type { Options as DuplicateOptions } from './collections/operations/local/duplicate.js'\nimport type { Options as FindOptions } from './collections/operations/local/find.js'\nimport type { Options as FindByIDOptions } from './collections/operations/local/findByID.js'\nimport type { Options as FindVersionByIDOptions } from './collections/operations/local/findVersionByID.js'\nimport type { Options as FindVersionsOptions } from './collections/operations/local/findVersions.js'\nimport type { Options as RestoreVersionOptions } from './collections/operations/local/restoreVersion.js'\nimport type {\n ByIDOptions as UpdateByIDOptions,\n ManyOptions as UpdateManyOptions,\n Options as UpdateOptions,\n} from './collections/operations/local/update.js'\nimport type { EmailOptions, InitOptions, SanitizedConfig } from './config/types.js'\nimport type { BaseDatabaseAdapter, PaginatedDocs } from './database/types.js'\nimport type { BuildEmailResult } from './email/types.js'\nimport type { TypeWithID as GlobalTypeWithID, Globals } from './globals/config/types.js'\nimport type { Options as FindGlobalOptions } from './globals/operations/local/findOne.js'\nimport type { Options as FindGlobalVersionByIDOptions } from './globals/operations/local/findVersionByID.js'\nimport type { Options as FindGlobalVersionsOptions } from './globals/operations/local/findVersions.js'\nimport type { Options as RestoreGlobalVersionOptions } from './globals/operations/local/restoreVersion.js'\nimport type { Options as UpdateGlobalOptions } from './globals/operations/local/update.js'\nimport type { TypeWithVersion } from './versions/types.js'\n\nimport { decrypt, encrypt } from './auth/crypto.js'\nimport { APIKeyAuthentication } from './auth/strategies/apiKey.js'\nimport { JWTAuthentication } from './auth/strategies/jwt.js'\nimport localOperations from './collections/operations/local/index.js'\nimport { validateSchema } from './config/validate.js'\nimport buildEmail from './email/build.js'\nimport { defaults as emailDefaults } from './email/defaults.js'\nimport sendEmail from './email/sendEmail.js'\nimport localGlobalOperations from './globals/operations/local/index.js'\nimport Logger from './utilities/logger.js'\nimport { serverInit as serverInitTelemetry } from './utilities/telemetry/events/serverInit.js'\n\n/**\n * @description Payload\n */\nexport class BasePayload<TGeneratedTypes extends GeneratedTypes> {\n /**\n * @description Authorization and Authentication using headers and cookies to run auth user strategies\n * @returns cookies: Map<string, string>\n * @returns permissions: Permissions\n * @returns user: User\n */\n auth = async (options: AuthArgs) => {\n const { auth } = localOperations.auth\n return auth(this, options)\n }\n\n authStrategies: AuthStrategy[]\n\n collections: {\n [slug: number | string | symbol]: Collection\n } = {}\n\n config: SanitizedConfig\n\n /**\n * @description Performs create operation\n * @param options\n * @returns created document\n */\n create = async <T extends keyof TGeneratedTypes['collections']>(\n options: CreateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { create } = localOperations\n return create<T>(this, options)\n }\n\n db: DatabaseAdapter\n\n decrypt = decrypt\n\n duplicate = async <T extends keyof TGeneratedTypes['collections']>(\n options: DuplicateOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { duplicate } = localOperations\n return duplicate<T>(this, options)\n }\n\n email: BuildEmailResult\n\n emailOptions: EmailOptions\n\n // TODO: re-implement or remove?\n // errorHandler: ErrorHandler\n\n encrypt = encrypt\n\n extensions: (args: {\n args: OperationArgs<any>\n req: graphQLRequest<unknown, unknown>\n result: ExecutionResult\n }) => Promise<any>\n\n /**\n * @description Find documents with criteria\n * @param options\n * @returns documents satisfying query\n */\n find = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindOptions<T>,\n ): Promise<PaginatedDocs<TGeneratedTypes['collections'][T]>> => {\n const { find } = localOperations\n return find<T>(this, options)\n }\n\n /**\n * @description Find document by ID\n * @param options\n * @returns document with specified ID\n */\n findByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { findByID } = localOperations\n return findByID<T>(this, options)\n }\n\n findGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { findOne } = localGlobalOperations\n return findOne<T>(this, options)\n }\n\n /**\n * @description Find global version by ID\n * @param options\n * @returns global version with specified ID\n */\n findGlobalVersionByID = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['globals'][T]>> => {\n const { findVersionByID } = localGlobalOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find global versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findGlobalVersions = async <T extends keyof TGeneratedTypes['globals']>(\n options: FindGlobalVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['globals'][T]>>> => {\n const { findVersions } = localGlobalOperations\n return findVersions<T>(this, options)\n }\n\n /**\n * @description Find version by ID\n * @param options\n * @returns version with specified ID\n */\n findVersionByID = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionByIDOptions<T>,\n ): Promise<TypeWithVersion<TGeneratedTypes['collections'][T]>> => {\n const { findVersionByID } = localOperations\n return findVersionByID<T>(this, options)\n }\n\n /**\n * @description Find versions with criteria\n * @param options\n * @returns versions satisfying query\n */\n findVersions = async <T extends keyof TGeneratedTypes['collections']>(\n options: FindVersionsOptions<T>,\n ): Promise<PaginatedDocs<TypeWithVersion<TGeneratedTypes['collections'][T]>>> => {\n const { findVersions } = localOperations\n return findVersions<T>(this, options)\n }\n\n forgotPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ForgotPasswordOptions<T>,\n ): Promise<ForgotPasswordResult> => {\n const { forgotPassword } = localOperations.auth\n return forgotPassword<T>(this, options)\n }\n\n getAPIURL = (): string => `${this.config.serverURL}${this.config.routes.api}`\n\n getAdminURL = (): string => `${this.config.serverURL}${this.config.routes.admin}`\n\n globals: Globals\n\n logger: pino.Logger\n\n login = async <T extends keyof TGeneratedTypes['collections']>(\n options: LoginOptions<T>,\n ): Promise<LoginResult & { user: TGeneratedTypes['collections'][T] }> => {\n const { login } = localOperations.auth\n return login<T>(this, options)\n }\n\n resetPassword = async <T extends keyof TGeneratedTypes['collections']>(\n options: ResetPasswordOptions<T>,\n ): Promise<ResetPasswordResult> => {\n const { resetPassword } = localOperations.auth\n return resetPassword<T>(this, options)\n }\n\n /**\n * @description Restore global version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreGlobalVersion = async <T extends keyof TGeneratedTypes['globals']>(\n options: RestoreGlobalVersionOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { restoreVersion } = localGlobalOperations\n return restoreVersion<T>(this, options)\n }\n\n /**\n * @description Restore version by ID\n * @param options\n * @returns version with specified ID\n */\n restoreVersion = async <T extends keyof TGeneratedTypes['collections']>(\n options: RestoreVersionOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]> => {\n const { restoreVersion } = localOperations\n return restoreVersion<T>(this, options)\n }\n\n schema: GraphQLSchema\n\n secret: string\n\n sendEmail: (message: SendMailOptions) => Promise<unknown>\n\n types: {\n arrayTypes: any\n blockInputTypes: any\n blockTypes: any\n fallbackLocaleInputType?: any\n groupTypes: any\n localeInputType?: any\n tabTypes: any\n }\n\n unlock = async <T extends keyof TGeneratedTypes['collections']>(\n options: UnlockOptions<T>,\n ): Promise<boolean> => {\n const { unlock } = localOperations.auth\n return unlock(this, options)\n }\n\n updateGlobal = async <T extends keyof TGeneratedTypes['globals']>(\n options: UpdateGlobalOptions<T>,\n ): Promise<TGeneratedTypes['globals'][T]> => {\n const { update } = localGlobalOperations\n return update<T>(this, options)\n }\n\n validationRules: (args: OperationArgs<any>) => ValidationRule[]\n\n verifyEmail = async <T extends keyof TGeneratedTypes['collections']>(\n options: VerifyEmailOptions<T>,\n ): Promise<boolean> => {\n const { verifyEmail } = localOperations.auth\n return verifyEmail(this, options)\n }\n\n versions: {\n [slug: string]: any // TODO: Type this\n } = {}\n\n /**\n * @description delete one or more documents\n * @param options\n * @returns Updated document(s)\n */\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n delete<T extends keyof TGeneratedTypes['collections']>(\n options: DeleteOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { deleteLocal } = localOperations\n return deleteLocal<T>(this, options)\n }\n\n /**\n * @description Initializes Payload\n * @param options\n */\n async init(options: InitOptions): Promise<Payload> {\n if (!options?.config) {\n throw new Error('Error: the payload config is required to initialize payload.')\n }\n\n this.logger = Logger('payload', options.loggerOptions, options.loggerDestination)\n\n this.config = await options.config\n\n if (process.env.NODE_ENV !== 'production') {\n validateSchema(this.config, this.logger)\n }\n\n if (!this.config.secret) {\n throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')\n }\n\n this.secret = crypto.createHash('sha256').update(this.config.secret).digest('hex').slice(0, 32)\n\n this.globals = {\n config: this.config.globals,\n }\n\n this.config.collections.forEach((collection) => {\n this.collections[collection.slug] = {\n config: collection,\n }\n })\n\n this.db = this.config.db.init({ payload: this })\n this.db.payload = this\n\n if (this.db?.init) {\n await this.db.init()\n }\n\n if (!options.disableDBConnect && this.db.connect) {\n await this.db.connect()\n }\n\n // Configure email service\n const emailOptions = options.email ? { ...options.email } : this.config.email\n if (options.email && this.config.email) {\n this.logger.warn(\n 'Email options provided in both init options and config. Using init options.',\n )\n }\n\n this.emailOptions = emailOptions ?? emailDefaults\n this.email = buildEmail(this.emailOptions, this.logger)\n this.sendEmail = sendEmail.bind(this)\n\n serverInitTelemetry(this)\n\n // 1. loop over collections, if collection has auth strategy, initialize and push to array\n let jwtStrategyEnabled = false\n this.authStrategies = this.config.collections.reduce((authStrategies, collection) => {\n if (collection?.auth) {\n if (collection.auth.strategies.length > 0) {\n authStrategies.push(...collection.auth.strategies)\n }\n\n // 2. if api key enabled, push api key strategy into the array\n if (collection.auth?.useAPIKey) {\n authStrategies.push({\n name: `${collection.slug}-api-key`,\n authenticate: APIKeyAuthentication(collection),\n })\n }\n\n // 3. if localStrategy flag is true\n if (!collection.auth.disableLocalStrategy && !jwtStrategyEnabled) {\n jwtStrategyEnabled = true\n }\n }\n\n return authStrategies\n }, [] as AuthStrategy[])\n\n // 4. if enabled, push jwt strategy into authStrategies last\n if (jwtStrategyEnabled) {\n this.authStrategies.push({\n name: 'local-jwt',\n authenticate: JWTAuthentication,\n })\n }\n\n if (!options.disableOnInit) {\n if (typeof options.onInit === 'function') await options.onInit(this)\n if (typeof this.config.onInit === 'function') await this.config.onInit(this)\n }\n\n return this\n }\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateManyOptions<T>,\n ): Promise<BulkOperationResult<T>>\n\n /**\n * @description Update one or more documents\n * @param options\n * @returns Updated document(s)\n */\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateByIDOptions<T>,\n ): Promise<TGeneratedTypes['collections'][T]>\n\n update<T extends keyof TGeneratedTypes['collections']>(\n options: UpdateOptions<T>,\n ): Promise<BulkOperationResult<T> | TGeneratedTypes['collections'][T]> {\n const { update } = localOperations\n return update<T>(this, options)\n }\n}\n\nconst initialized = new BasePayload()\n\nexport default initialized\n\nlet cached = global._payload\n\nif (!cached) {\n // eslint-disable-next-line no-multi-assign\n cached = global._payload = { payload: null, promise: null }\n}\n\nexport const getPayload = async (options: InitOptions): Promise<BasePayload<GeneratedTypes>> => {\n if (!options?.config) {\n throw new Error('Error: the payload config is required for getPayload to work.')\n }\n\n if (cached.payload) {\n return cached.payload\n }\n\n if (!cached.promise) {\n cached.promise = new BasePayload<GeneratedTypes>().init(options)\n }\n\n try {\n cached.payload = await cached.promise\n } catch (e) {\n cached.promise = null\n throw e\n }\n\n return cached.payload\n}\n\ntype GeneratedTypes = {\n collections: {\n [slug: number | string | symbol]: TypeWithID & Record<string, unknown>\n }\n globals: {\n [slug: number | string | symbol]: GlobalTypeWithID & Record<string, unknown>\n }\n}\n\ntype Payload = BasePayload<GeneratedTypes>\n\ninterface RequestContext {\n [key: string]: unknown\n}\n\ntype DatabaseAdapter = BaseDatabaseAdapter\n\nexport type { DatabaseAdapter, GeneratedTypes, Payload, RequestContext }\n"],"names":["crypto","decrypt","encrypt","APIKeyAuthentication","JWTAuthentication","localOperations","validateSchema","buildEmail","defaults","emailDefaults","sendEmail","localGlobalOperations","Logger","serverInit","serverInitTelemetry","BasePayload","auth","options","authStrategies","collections","config","create","db","duplicate","email","emailOptions","extensions","find","findByID","findGlobal","findOne","findGlobalVersionByID","findVersionByID","findGlobalVersions","findVersions","forgotPassword","getAPIURL","serverURL","routes","api","getAdminURL","admin","globals","logger","login","resetPassword","restoreGlobalVersion","restoreVersion","schema","secret","types","unlock","updateGlobal","update","validationRules","verifyEmail","versions","delete","deleteLocal","init","Error","loggerOptions","loggerDestination","process","env","NODE_ENV","createHash","digest","slice","forEach","collection","slug","payload","disableDBConnect","connect","warn","bind","jwtStrategyEnabled","reduce","strategies","length","push","useAPIKey","name","authenticate","disableLocalStrategy","disableOnInit","onInit","initialized","cached","global","_payload","promise","getPayload","e"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAwDtD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA+J1E,CAAA"}
1
+ {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AA0BtD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA+K1E,CAAA"}
@@ -13,26 +13,6 @@ const generateURL = ({ collectionSlug, config, filename })=>{
13
13
  }
14
14
  return undefined;
15
15
  };
16
- const generateAdminThumbnails = ({ collectionConfig, config, doc })=>{
17
- const adminThumbnail = typeof collectionConfig.upload !== 'boolean' ? collectionConfig.upload?.adminThumbnail : undefined;
18
- if (typeof adminThumbnail === 'function') {
19
- return adminThumbnail({
20
- doc
21
- });
22
- }
23
- if ('sizes' in doc && doc.sizes?.[adminThumbnail]?.filename) {
24
- return generateURL({
25
- collectionSlug: collectionConfig.slug,
26
- config,
27
- filename: doc.sizes?.[adminThumbnail].filename
28
- });
29
- }
30
- return generateURL({
31
- collectionSlug: collectionConfig.slug,
32
- config,
33
- filename: doc.filename
34
- });
35
- };
36
16
  export const getBaseUploadFields = ({ collection, config })=>{
37
17
  const uploadOptions = typeof collection.upload === 'object' ? collection.upload : {};
38
18
  const mimeType = {
@@ -44,15 +24,6 @@ export const getBaseUploadFields = ({ collection, config })=>{
44
24
  },
45
25
  label: 'MIME Type'
46
26
  };
47
- const url = {
48
- name: 'url',
49
- type: 'text',
50
- admin: {
51
- hidden: true,
52
- readOnly: true
53
- },
54
- label: 'URL'
55
- };
56
27
  const thumbnailURL = {
57
28
  name: 'thumbnailURL',
58
29
  type: 'text',
@@ -62,11 +33,22 @@ export const getBaseUploadFields = ({ collection, config })=>{
62
33
  },
63
34
  hooks: {
64
35
  afterRead: [
65
- ({ data })=>generateAdminThumbnails({
66
- collectionConfig: collection,
67
- config,
68
- doc: data
69
- })
36
+ ({ originalDoc })=>{
37
+ const adminThumbnail = typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined;
38
+ if (typeof adminThumbnail === 'function') {
39
+ return adminThumbnail({
40
+ doc: originalDoc
41
+ });
42
+ }
43
+ if (typeof adminThumbnail === 'string' && 'sizes' in originalDoc && originalDoc.sizes?.[adminThumbnail]?.filename) {
44
+ return generateURL({
45
+ collectionSlug: collection.slug,
46
+ config,
47
+ filename: originalDoc.sizes?.[adminThumbnail].filename
48
+ });
49
+ }
50
+ return null;
51
+ }
70
52
  ]
71
53
  },
72
54
  label: 'Thumbnail URL'
@@ -110,6 +92,15 @@ export const getBaseUploadFields = ({ collection, config })=>{
110
92
  label: labels['upload:fileName'],
111
93
  unique: true
112
94
  };
95
+ const url = {
96
+ name: 'url',
97
+ type: 'text',
98
+ admin: {
99
+ hidden: true,
100
+ readOnly: true
101
+ },
102
+ label: 'URL'
103
+ };
113
104
  let uploadFields = [
114
105
  {
115
106
  ...url,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { extractTranslations } from '../translations/extractTranslations.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\nconst labels = extractTranslations([\n 'upload:width',\n 'upload:height',\n 'upload:fileSize',\n 'upload:fileName',\n 'upload:sizes',\n])\n\ntype GenerateURLArgs = {\n collectionSlug: string\n config: Config\n filename?: string\n}\nconst generateURL = ({ collectionSlug, config, filename }: GenerateURLArgs) => {\n if (filename) {\n return `${config.serverURL || ''}${config.routes.api || ''}/${collectionSlug}/file/${filename}`\n }\n return undefined\n}\n\ntype Args = {\n collectionConfig?: CollectionConfig\n config: Config\n doc: Record<string, unknown>\n}\nconst generateAdminThumbnails = ({ collectionConfig, config, doc }: Args) => {\n const adminThumbnail =\n typeof collectionConfig.upload !== 'boolean'\n ? collectionConfig.upload?.adminThumbnail\n : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc })\n }\n\n if ('sizes' in doc && doc.sizes?.[adminThumbnail]?.filename) {\n return generateURL({\n collectionSlug: collectionConfig.slug,\n config,\n filename: doc.sizes?.[adminThumbnail].filename as string,\n })\n }\n\n return generateURL({\n collectionSlug: collectionConfig.slug,\n config,\n filename: doc.filename as string,\n })\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ data }) =>\n generateAdminThumbnails({\n collectionConfig: collection,\n config,\n doc: data,\n }),\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:width'],\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:height'],\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:fileSize'],\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: labels['upload:fileName'],\n unique: true,\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) =>\n generateURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename,\n }),\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) => {\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${sizeFilename}`\n }\n\n return null\n },\n ],\n },\n },\n width,\n height,\n mimeType,\n filesize,\n {\n ...filename,\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: labels['upload:Sizes'],\n },\n ])\n }\n return uploadFields\n}\n"],"names":["extractTranslations","mimeTypeValidator","labels","generateURL","collectionSlug","config","filename","serverURL","routes","api","undefined","generateAdminThumbnails","collectionConfig","doc","adminThumbnail","upload","sizes","slug","getBaseUploadFields","collection","uploadOptions","mimeType","name","type","admin","hidden","readOnly","label","url","thumbnailURL","hooks","afterRead","data","width","height","filesize","disableBulkEdit","index","unique","uploadFields","mimeTypes","validate","imageSizes","concat","fields","map","size","sizeFilename"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { UploadConfig } from './types.js'\n\nimport { extractTranslations } from '../translations/extractTranslations.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\n\nconst labels = extractTranslations([\n 'upload:width',\n 'upload:height',\n 'upload:fileSize',\n 'upload:fileName',\n 'upload:sizes',\n])\n\ntype GenerateURLArgs = {\n collectionSlug: string\n config: Config\n filename?: string\n}\nconst generateURL = ({ collectionSlug, config, filename }: GenerateURLArgs) => {\n if (filename) {\n return `${config.serverURL || ''}${config.routes.api || ''}/${collectionSlug}/file/${filename}`\n }\n return undefined\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n const uploadOptions: UploadConfig = typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ originalDoc }) => {\n const adminThumbnail =\n typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc: originalDoc })\n }\n\n if (\n typeof adminThumbnail === 'string' &&\n 'sizes' in originalDoc &&\n originalDoc.sizes?.[adminThumbnail]?.filename\n ) {\n return generateURL({\n collectionSlug: collection.slug,\n config,\n filename: originalDoc.sizes?.[adminThumbnail].filename as string,\n })\n }\n\n return null\n },\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:width'],\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:height'],\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: labels['upload:fileSize'],\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: labels['upload:fileName'],\n unique: true,\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) =>\n generateURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename,\n }),\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n ]\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.imageSizes) {\n uploadFields = uploadFields.concat([\n {\n name: 'sizes',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.imageSizes.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data }) => {\n const sizeFilename = data?.sizes?.[size.name]?.filename\n\n if (sizeFilename) {\n return `${config.serverURL}${config.routes.api}/${collection.slug}/file/${sizeFilename}`\n }\n\n return null\n },\n ],\n },\n },\n width,\n height,\n mimeType,\n filesize,\n {\n ...filename,\n unique: false,\n },\n ],\n label: size.name,\n })),\n label: labels['upload:Sizes'],\n },\n ])\n }\n return uploadFields\n}\n"],"names":["extractTranslations","mimeTypeValidator","labels","generateURL","collectionSlug","config","filename","serverURL","routes","api","undefined","getBaseUploadFields","collection","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","thumbnailURL","hooks","afterRead","originalDoc","adminThumbnail","doc","sizes","slug","width","height","filesize","disableBulkEdit","index","unique","url","uploadFields","data","mimeTypes","validate","imageSizes","concat","fields","map","size","sizeFilename"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { SanitizedConfig } from '../config/types.js';
2
+ /**
3
+ * Resolve and load Payload config from either a relative or absolute path
4
+ */
5
+ export declare const importConfig: (configPath: string) => Promise<SanitizedConfig>;
6
+ //# sourceMappingURL=importConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importConfig.d.ts","sourceRoot":"","sources":["../../src/utilities/importConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIzD;;GAEG;AACH,eAAO,MAAM,YAAY,eAAsB,MAAM,6BAcpD,CAAA"}
@@ -0,0 +1,32 @@
1
+ import path from 'node:path';
2
+ import { importWithoutClientFiles } from './importWithoutClientFiles.js';
3
+ /**
4
+ * Resolve and load Payload config from either a relative or absolute path
5
+ */ export const importConfig = async (configPath)=>{
6
+ const isAbsolutePath = path.isAbsolute(configPath);
7
+ if (isAbsolutePath) {
8
+ const config = await importWithoutClientFiles(configPath);
9
+ return await config.default;
10
+ }
11
+ const callerDir = path.dirname(getCallerInfo()[1].getFileName()).replace('file://', '');
12
+ const fullConfigPath = path.resolve(callerDir, configPath);
13
+ const config = await importWithoutClientFiles(fullConfigPath);
14
+ return await config.default;
15
+ };
16
+ const getCallerInfo = ()=>{
17
+ const _prepareStackTrace = Error.prepareStackTrace;
18
+ try {
19
+ let result = [];
20
+ Error.prepareStackTrace = (_, callSites)=>{
21
+ const callSitesWithoutCurrent = callSites.slice(1);
22
+ result = callSitesWithoutCurrent;
23
+ return callSitesWithoutCurrent;
24
+ };
25
+ new Error().stack;
26
+ return result;
27
+ } finally{
28
+ Error.prepareStackTrace = _prepareStackTrace;
29
+ }
30
+ };
31
+
32
+ //# sourceMappingURL=importConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/importConfig.ts"],"sourcesContent":["import path from 'node:path'\n\nimport type { SanitizedConfig } from '../config/types.js'\n\nimport { importWithoutClientFiles } from './importWithoutClientFiles.js'\n\n/**\n * Resolve and load Payload config from either a relative or absolute path\n */\nexport const importConfig = async (configPath: string) => {\n const isAbsolutePath = path.isAbsolute(configPath)\n if (isAbsolutePath) {\n const config = await importWithoutClientFiles<{ default: Promise<SanitizedConfig> }>(configPath)\n return await config.default\n }\n\n const callerDir = path.dirname(getCallerInfo()[1].getFileName()).replace('file://', '')\n const fullConfigPath = path.resolve(callerDir, configPath)\n\n const config = await importWithoutClientFiles<{ default: Promise<SanitizedConfig> }>(\n fullConfigPath,\n )\n return await config.default\n}\n\nconst getCallerInfo = () => {\n const _prepareStackTrace = Error.prepareStackTrace\n try {\n let result = []\n Error.prepareStackTrace = (_, callSites) => {\n const callSitesWithoutCurrent = callSites.slice(1)\n result = callSitesWithoutCurrent\n return callSitesWithoutCurrent\n }\n\n new Error().stack\n return result\n } finally {\n Error.prepareStackTrace = _prepareStackTrace\n }\n}\n"],"names":["path","importWithoutClientFiles","importConfig","configPath","isAbsolutePath","isAbsolute","config","default","callerDir","dirname","getCallerInfo","getFileName","replace","fullConfigPath","resolve","_prepareStackTrace","Error","prepareStackTrace","result","_","callSites","callSitesWithoutCurrent","slice","stack"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAI5B,SAASC,wBAAwB,QAAQ,gCAA+B;AAExE;;CAEC,GACD,OAAO,MAAMC,eAAe,OAAOC;IACjC,MAAMC,iBAAiBJ,KAAKK,UAAU,CAACF;IACvC,IAAIC,gBAAgB;QAClB,MAAME,SAAS,MAAML,yBAAgEE;QACrF,OAAO,MAAMG,OAAOC,OAAO;IAC7B;IAEA,MAAMC,YAAYR,KAAKS,OAAO,CAACC,eAAe,CAAC,EAAE,CAACC,WAAW,IAAIC,OAAO,CAAC,WAAW;IACpF,MAAMC,iBAAiBb,KAAKc,OAAO,CAACN,WAAWL;IAE/C,MAAMG,SAAS,MAAML,yBACnBY;IAEF,OAAO,MAAMP,OAAOC,OAAO;AAC7B,EAAC;AAED,MAAMG,gBAAgB;IACpB,MAAMK,qBAAqBC,MAAMC,iBAAiB;IAClD,IAAI;QACF,IAAIC,SAAS,EAAE;QACfF,MAAMC,iBAAiB,GAAG,CAACE,GAAGC;YAC5B,MAAMC,0BAA0BD,UAAUE,KAAK,CAAC;YAChDJ,SAASG;YACT,OAAOA;QACT;QAEA,IAAIL,QAAQO,KAAK;QACjB,OAAOL;IACT,SAAU;QACRF,MAAMC,iBAAiB,GAAGF;IAC5B;AACF"}
@@ -0,0 +1,2 @@
1
+ export declare const importWithoutClientFiles: <T = unknown>(filePath: string) => Promise<T>;
2
+ //# sourceMappingURL=importWithoutClientFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importWithoutClientFiles.d.ts","sourceRoot":"","sources":["../../src/utilities/importWithoutClientFiles.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,wBAAwB,0BAAiC,MAAM,eAM3E,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { register } from 'node:module';
2
+ import { fileURLToPath, pathToFileURL } from 'node:url';
3
+ import path from 'path';
4
+ const filename = fileURLToPath(import.meta.url);
5
+ const dirname = path.dirname(filename);
6
+ export const importWithoutClientFiles = async (filePath)=>{
7
+ const url = pathToFileURL(filePath).toString();
8
+ register(path.resolve(dirname, '../../dist/bin/register/index.js'), url);
9
+ const result = await import(filePath);
10
+ return result;
11
+ };
12
+
13
+ //# sourceMappingURL=importWithoutClientFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/importWithoutClientFiles.ts"],"sourcesContent":["import { register } from 'node:module'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport path from 'path'\n\nconst filename = fileURLToPath(import.meta.url)\nconst dirname = path.dirname(filename)\n\nexport const importWithoutClientFiles = async <T = unknown>(filePath: string) => {\n const url = pathToFileURL(filePath).toString()\n\n register(path.resolve(dirname, '../../dist/bin/register/index.js'), url)\n const result = await import(filePath)\n return result as T\n}\n"],"names":["register","fileURLToPath","pathToFileURL","path","filename","url","dirname","importWithoutClientFiles","filePath","toString","resolve","result"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAa;AACtC,SAASC,aAAa,EAAEC,aAAa,QAAQ,WAAU;AACvD,OAAOC,UAAU,OAAM;AAEvB,MAAMC,WAAWH,cAAc,YAAYI,GAAG;AAC9C,MAAMC,UAAUH,KAAKG,OAAO,CAACF;AAE7B,OAAO,MAAMG,2BAA2B,OAAoBC;IAC1D,MAAMH,MAAMH,cAAcM,UAAUC,QAAQ;IAE5CT,SAASG,KAAKO,OAAO,CAACJ,SAAS,qCAAqCD;IACpE,MAAMM,SAAS,MAAM,MAAM,CAACH;IAC5B,OAAOG;AACT,EAAC"}
package/node.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export { getFileByPath } from './dist/uploads/getFileByPath.js';
2
+ export { importConfig } from './dist/utilities/importConfig.js';
3
+ export { importWithoutClientFiles } from './dist/utilities/importWithoutClientFiles.js';
4
+ //# sourceMappingURL=node.d.ts.map
package/node.js ADDED
@@ -0,0 +1,5 @@
1
+ export { getFileByPath } from './dist/uploads/getFileByPath.js';
2
+ export { importConfig } from './dist/utilities/importConfig.js';
3
+ export { importWithoutClientFiles } from './dist/utilities/importWithoutClientFiles.js';
4
+
5
+ //# sourceMappingURL=node.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.0.0-alpha.53",
3
+ "version": "3.0.0-alpha.55",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -50,7 +50,7 @@
50
50
  "sanitize-filename": "1.6.3",
51
51
  "scheduler": "0.23.0",
52
52
  "scmp": "2.1.0",
53
- "@payloadcms/translations": "3.0.0-alpha.53"
53
+ "@payloadcms/translations": "3.0.0-alpha.55"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@monaco-editor/react": "4.5.1",
package/src/index.ts CHANGED
@@ -5,6 +5,7 @@ import type pino from 'pino'
5
5
 
6
6
  import crypto from 'crypto'
7
7
 
8
+ import type { AuthArgs } from './auth/operations/auth.js'
8
9
  import type { Result as ForgotPasswordResult } from './auth/operations/forgotPassword.js'
9
10
  import type { Options as ForgotPasswordOptions } from './auth/operations/local/forgotPassword.js'
10
11
  import type { Options as LoginOptions } from './auth/operations/local/login.js'
@@ -59,6 +60,17 @@ import { serverInit as serverInitTelemetry } from './utilities/telemetry/events/
59
60
  * @description Payload
60
61
  */
61
62
  export class BasePayload<TGeneratedTypes extends GeneratedTypes> {
63
+ /**
64
+ * @description Authorization and Authentication using headers and cookies to run auth user strategies
65
+ * @returns cookies: Map<string, string>
66
+ * @returns permissions: Permissions
67
+ * @returns user: User
68
+ */
69
+ auth = async (options: AuthArgs) => {
70
+ const { auth } = localOperations.auth
71
+ return auth(this, options)
72
+ }
73
+
62
74
  authStrategies: AuthStrategy[]
63
75
 
64
76
  collections: {
package/types.d.ts CHANGED
@@ -9,7 +9,7 @@ export type { AfterChangeHook as CollectionAfterChangeHook, AfterDeleteHook as C
9
9
  export type { ClientConfig } from './dist/config/client.js';
10
10
  export type { Access, AccessArgs, EditViewComponent, EntityDescription, EntityDescriptionComponent, EntityDescriptionFunction, SanitizedConfig, } from './dist/config/types.js';
11
11
  export type { ClientFieldConfig } from './dist/fields/config/client.js';
12
- export type { ArrayField, Block, BlockField, CheckboxField, ClientValidate, CodeField, CollapsibleField, Condition, DateField, EmailField, Field, FieldAccess, FieldAffectingData, FieldBase, FieldHook, FieldHookArgs, FieldPresentationalOnly, FieldWithMany, FieldWithMaxDepth, FieldWithPath, FieldWithSubFields, FilterOptions, FilterOptionsProps, GroupField, HookName, JSONField, Labels, NamedTab, NonPresentationalField, NumberField, Option, OptionObject, PointField, PolymorphicRelationshipField, RadioField, RelationshipField, RelationshipValue, RichTextField, RowAdmin, RowField, SelectField, SingleRelationshipField, Tab, TabAsField, TabsAdmin, TabsField, TextField, TextareaField, UIField, UnnamedTab, UploadField, Validate, ValidateOptions, ValueWithRelation, } from './dist/fields/config/types.js';
12
+ export type { ArrayField, Block, BlockField, CheckboxField, ClientValidate, CodeField, CollapsibleField, Condition, DateField, EmailField, Field, FieldAccess, FieldAffectingData, FieldBase, FieldHook, FieldHookArgs, FieldPresentationalOnly, FieldWithMany, FieldWithMaxDepth, FieldWithPath, FieldWithRichTextRequiredEditor, FieldWithSubFields, FilterOptions, FilterOptionsProps, GroupField, HookName, JSONField, Labels, NamedTab, NonPresentationalField, NumberField, Option, OptionObject, PointField, PolymorphicRelationshipField, RadioField, RelationshipField, RelationshipValue, RichTextField, RichTextFieldRequiredEditor, RowAdmin, RowField, SelectField, SingleRelationshipField, Tab, TabAsField, TabsAdmin, TabsField, TextField, TextareaField, UIField, UnnamedTab, UploadField, Validate, ValidateOptions, ValueWithRelation, } from './dist/fields/config/types.js';
13
13
  export { fieldAffectsData, fieldHasMaxDepth, fieldHasSubFields, fieldIsArrayType, fieldIsBlockType, fieldIsGroupType, fieldIsLocalized, fieldIsPresentationalOnly, fieldSupportsMany, optionIsObject, optionIsValue, optionsAreObjects, tabHasName, valueIsValueWithRelation, } from './dist/fields/config/types.js';
14
14
  export type { ClientGlobalConfig } from './dist/globals/config/client.js';
15
15
  export type { AfterChangeHook as GlobalAfterChangeHook, AfterReadHook as GlobalAfterReadHook, BeforeChangeHook as GlobalBeforeChangeHook, BeforeReadHook as GlobalBeforeReadHook, BeforeValidateHook as GlobalBeforeValidateHook, GlobalConfig, SanitizedGlobalConfig, } from './dist/globals/config/types.js';
package/versions.d.ts CHANGED
@@ -4,7 +4,6 @@ export { deleteCollectionVersions } from './dist/versions/deleteCollectionVersio
4
4
  export { enforceMaxVersions } from './dist/versions/enforceMaxVersions.js';
5
5
  export { getLatestCollectionVersion } from './dist/versions/getLatestCollectionVersion.js';
6
6
  export { getLatestGlobalVersion } from './dist/versions/getLatestGlobalVersion.js';
7
- export { getVersionsModelName } from './dist/versions/getVersionsModelName.js';
8
7
  export { saveVersion } from './dist/versions/saveVersion.js';
9
8
  export type { TypeWithVersion } from './dist/versions/types.js';
10
9
  //# sourceMappingURL=versions.d.ts.map
package/versions.js CHANGED
@@ -4,7 +4,6 @@ export { deleteCollectionVersions } from './dist/versions/deleteCollectionVersio
4
4
  export { enforceMaxVersions } from './dist/versions/enforceMaxVersions.js';
5
5
  export { getLatestCollectionVersion } from './dist/versions/getLatestCollectionVersion.js';
6
6
  export { getLatestGlobalVersion } from './dist/versions/getLatestGlobalVersion.js';
7
- export { getVersionsModelName } from './dist/versions/getVersionsModelName.js';
8
7
  export { saveVersion } from './dist/versions/saveVersion.js';
9
8
 
10
9
  //# sourceMappingURL=versions.js.map
@@ -1,3 +0,0 @@
1
- import type { AuthStrategyFunctionArgs, User } from './index.js';
2
- export declare const getAuthenticatedUser: (args: AuthStrategyFunctionArgs) => Promise<User | null>;
3
- //# sourceMappingURL=getAuthenticatedUser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getAuthenticatedUser.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthenticatedUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEhE,eAAO,MAAM,oBAAoB,SACzB,wBAAwB,KAC7B,QAAQ,IAAI,GAAG,IAAI,CAQrB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/auth/getAuthenticatedUser.ts"],"sourcesContent":["import type { AuthStrategyFunctionArgs, User } from './index.js'\n\nexport const getAuthenticatedUser = async (\n args: AuthStrategyFunctionArgs,\n): Promise<User | null> => {\n return args.payload.authStrategies.reduce(async (accumulatorPromise, strategy) => {\n const authUser = await accumulatorPromise\n if (!authUser) {\n return strategy.authenticate(args)\n }\n return authUser\n }, Promise.resolve(null))\n}\n"],"names":["getAuthenticatedUser","args","payload","authStrategies","reduce","accumulatorPromise","strategy","authUser","authenticate","Promise","resolve"],"mappings":"AAEA,OAAO,MAAMA,uBAAuB,OAClCC;IAEA,OAAOA,KAAKC,OAAO,CAACC,cAAc,CAACC,MAAM,CAAC,OAAOC,oBAAoBC;QACnE,MAAMC,WAAW,MAAMF;QACvB,IAAI,CAACE,UAAU;YACb,OAAOD,SAASE,YAAY,CAACP;QAC/B;QACA,OAAOM;IACT,GAAGE,QAAQC,OAAO,CAAC;AACrB,EAAC"}
@@ -1,2 +0,0 @@
1
- export { getFileByPath } from '../uploads/getFileByPath.js';
2
- //# sourceMappingURL=uploads.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../src/exports/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA"}
@@ -1,3 +0,0 @@
1
- export { getFileByPath } from '../uploads/getFileByPath.js';
2
-
3
- //# sourceMappingURL=uploads.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/exports/uploads.ts"],"sourcesContent":["export { getFileByPath } from '../uploads/getFileByPath.js'\n"],"names":["getFileByPath"],"mappings":"AAAA,SAASA,aAAa,QAAQ,8BAA6B"}
@@ -1,4 +0,0 @@
1
- import type { SanitizedCollectionConfig } from '../collections/config/types.ts';
2
- import type { SanitizedGlobalConfig } from '../globals/config/types.js';
3
- export declare const getVersionsModelName: (entity: SanitizedCollectionConfig | SanitizedGlobalConfig) => string;
4
- //# sourceMappingURL=getVersionsModelName.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getVersionsModelName.d.ts","sourceRoot":"","sources":["../../src/versions/getVersionsModelName.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAEvE,eAAO,MAAM,oBAAoB,WACvB,yBAAyB,GAAG,qBAAqB,KACxD,MAAoC,CAAA"}
@@ -1,3 +0,0 @@
1
- export const getVersionsModelName = (entity)=>`_${entity.slug}_versions`;
2
-
3
- //# sourceMappingURL=getVersionsModelName.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/versions/getVersionsModelName.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.ts'\nimport type { SanitizedGlobalConfig } from '../globals/config/types.js'\n\nexport const getVersionsModelName = (\n entity: SanitizedCollectionConfig | SanitizedGlobalConfig,\n): string => `_${entity.slug}_versions`\n"],"names":["getVersionsModelName","entity","slug"],"mappings":"AAGA,OAAO,MAAMA,uBAAuB,CAClCC,SACW,CAAC,CAAC,EAAEA,OAAOC,IAAI,CAAC,SAAS,CAAC,CAAA"}
package/uploads.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { getFileByPath } from './dist/uploads/getFileByPath.js';
2
- //# sourceMappingURL=uploads.d.ts.map
package/uploads.js DELETED
@@ -1,3 +0,0 @@
1
- export { getFileByPath } from './dist/uploads/getFileByPath.js';
2
-
3
- //# sourceMappingURL=uploads.js.map