@strapi/admin 5.54.0 → 5.55.0

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 (92) hide show
  1. package/dist/admin/admin/src/components/LanguageProvider.js +35 -1
  2. package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
  3. package/dist/admin/admin/src/components/LanguageProvider.mjs +17 -2
  4. package/dist/admin/admin/src/components/LanguageProvider.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/SubNav.js +113 -35
  6. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  7. package/dist/admin/admin/src/components/SubNav.mjs +115 -37
  8. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/SubNavFolder.js +188 -0
  10. package/dist/admin/admin/src/components/SubNavFolder.js.map +1 -0
  11. package/dist/admin/admin/src/components/SubNavFolder.mjs +186 -0
  12. package/dist/admin/admin/src/components/SubNavFolder.mjs.map +1 -0
  13. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  14. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  15. package/dist/admin/admin/src/render.js +1 -1
  16. package/dist/admin/admin/src/render.js.map +1 -1
  17. package/dist/admin/admin/src/render.mjs +1 -1
  18. package/dist/admin/admin/src/render.mjs.map +1 -1
  19. package/dist/admin/admin/src/translations/en.json.js +4 -0
  20. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  21. package/dist/admin/admin/src/translations/en.json.mjs +4 -0
  22. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  23. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +1 -6
  24. package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -1
  25. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +1 -6
  26. package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -1
  27. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +7 -1
  28. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
  29. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +7 -1
  30. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
  31. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +5 -1
  32. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  33. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +5 -1
  34. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  35. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +0 -4
  36. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  37. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +0 -4
  38. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  39. package/dist/admin/src/components/SubNav.d.ts +27 -8
  40. package/dist/admin/src/components/SubNavFolder.d.ts +15 -0
  41. package/dist/admin/src/features/Tracking.d.ts +2 -1
  42. package/dist/admin/src/services/admin.d.ts +1 -0
  43. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +4 -0
  44. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  45. package/dist/ee/server/src/index.d.ts.map +1 -1
  46. package/dist/server/ee/server/src/controllers/admin.js +1 -5
  47. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  48. package/dist/server/ee/server/src/controllers/admin.mjs +1 -5
  49. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  50. package/dist/server/ee/server/src/index.js +2 -0
  51. package/dist/server/ee/server/src/index.js.map +1 -1
  52. package/dist/server/ee/server/src/index.mjs +2 -0
  53. package/dist/server/ee/server/src/index.mjs.map +1 -1
  54. package/dist/server/server/src/ai/controllers/ai.js +3 -3
  55. package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
  56. package/dist/server/server/src/ai/controllers/ai.mjs +3 -3
  57. package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
  58. package/dist/server/server/src/ai/services/ai.js +37 -12
  59. package/dist/server/server/src/ai/services/ai.js.map +1 -1
  60. package/dist/server/server/src/ai/services/ai.mjs +37 -12
  61. package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
  62. package/dist/server/server/src/audit-logs/tokens.js +106 -0
  63. package/dist/server/server/src/audit-logs/tokens.js.map +1 -0
  64. package/dist/server/server/src/audit-logs/tokens.mjs +99 -0
  65. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -0
  66. package/dist/server/server/src/controllers/admin.js +10 -1
  67. package/dist/server/server/src/controllers/admin.js.map +1 -1
  68. package/dist/server/server/src/controllers/admin.mjs +10 -1
  69. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  70. package/dist/server/server/src/services/api-token.js +106 -4
  71. package/dist/server/server/src/services/api-token.js.map +1 -1
  72. package/dist/server/server/src/services/api-token.mjs +107 -5
  73. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  74. package/dist/server/server/src/services/transfer/token.js +56 -4
  75. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  76. package/dist/server/server/src/services/transfer/token.mjs +57 -5
  77. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  78. package/dist/server/src/ai/services/ai.d.ts +3 -1
  79. package/dist/server/src/ai/services/ai.d.ts.map +1 -1
  80. package/dist/server/src/audit-logs/tokens.d.ts +86 -0
  81. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -0
  82. package/dist/server/src/controllers/admin.d.ts +1 -0
  83. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  84. package/dist/server/src/controllers/index.d.ts +1 -0
  85. package/dist/server/src/controllers/index.d.ts.map +1 -1
  86. package/dist/server/src/index.d.ts +1 -0
  87. package/dist/server/src/index.d.ts.map +1 -1
  88. package/dist/server/src/services/api-token.d.ts.map +1 -1
  89. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  90. package/dist/shared/contracts/admin.d.ts +1 -0
  91. package/dist/shared/contracts/admin.d.ts.map +1 -1
  92. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sources":["../../../../../../server/src/services/transfer/token.ts"],"sourcesContent":["import crypto from 'crypto';\nimport assert from 'assert';\nimport { map, isArray, omit, uniq, isNil, difference, isEmpty, isNumber } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport '@strapi/types';\nimport constants from '../constants';\nimport { getService } from '../../utils';\nimport {\n DatabaseTransferToken,\n SanitizedTransferToken,\n TokenCreatePayload,\n TokenUpdatePayload,\n TransferToken,\n TransferTokenPermission,\n} from '../../../../shared/contracts/transfer';\n\nconst { ValidationError, NotFoundError } = errors;\n\nconst TRANSFER_TOKEN_UID = 'admin::transfer-token';\nconst TRANSFER_TOKEN_PERMISSION_UID = 'admin::transfer-token-permission';\n\nconst SELECT_FIELDS = [\n 'id',\n 'name',\n 'description',\n 'lastUsedAt',\n 'lifespan',\n 'expiresAt',\n 'createdAt',\n 'updatedAt',\n] as const;\n\nconst POPULATE_FIELDS = ['permissions'] as const;\n\n/**\n * Return a list of all tokens and their permissions\n */\nconst list = async (): Promise<SanitizedTransferToken[]> => {\n const tokens: DatabaseTransferToken[] = await strapi.db.query(TRANSFER_TOKEN_UID).findMany({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n orderBy: { name: 'ASC' },\n });\n\n if (!tokens) return tokens;\n return tokens.map((token) => flattenTokenPermissions(token));\n};\n\n/**\n * Create a random token's access key\n */\nconst generateRandomAccessKey = (): string => crypto.randomBytes(128).toString('hex');\n\n/**\n * Validate the given access key's format and returns it if valid\n */\nconst validateAccessKey = (accessKey: string): string => {\n assert(typeof accessKey === 'string', 'Access key needs to be a string');\n assert(accessKey.length >= 15, 'Access key needs to have at least 15 characters');\n\n return accessKey;\n};\n\nexport const hasAccessKey = <T extends { accessKey?: string }>(\n attributes: T\n): attributes is T & { accessKey: string } => {\n return 'accessKey' in attributes;\n};\n\n/**\n * Create a token and its permissions\n */\nconst create = async (attributes: TokenCreatePayload): Promise<TransferToken> => {\n const accessKey = hasAccessKey(attributes)\n ? validateAccessKey(attributes.accessKey)\n : generateRandomAccessKey();\n\n // Make sure the access key isn't picked up directly from the attributes for the next steps\n delete attributes.accessKey;\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const result = (await strapi.db.transaction(async () => {\n const transferToken = await strapi.db.query(TRANSFER_TOKEN_UID).create({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n data: {\n ...omit('permissions', attributes),\n accessKey: hash(accessKey),\n ...getExpirationFields(attributes.lifespan),\n },\n });\n\n await Promise.all(\n uniq(attributes.permissions).map((action) =>\n strapi.db\n .query(TRANSFER_TOKEN_PERMISSION_UID)\n .create({ data: { action, token: transferToken } })\n )\n );\n\n const currentPermissions: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(transferToken, 'permissions');\n\n if (currentPermissions) {\n Object.assign(transferToken, { permissions: map('action', currentPermissions) });\n }\n\n return transferToken;\n })) as TransferToken;\n\n return { ...result, accessKey };\n};\n\n/**\n * Update a token and its permissions\n */\nconst update = async (\n id: string | number,\n attributes: TokenUpdatePayload\n): Promise<SanitizedTransferToken> => {\n // retrieve token without permissions\n const originalToken = await strapi.db.query(TRANSFER_TOKEN_UID).findOne({ where: { id } });\n\n if (!originalToken) {\n throw new NotFoundError('Token not found');\n }\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n return strapi.db.transaction(async () => {\n const updatedToken = await strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: SELECT_FIELDS,\n where: { id },\n data: {\n ...omit('permissions', attributes),\n },\n });\n\n if (attributes.permissions) {\n const currentPermissionsResult = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n const currentPermissions = map('action', currentPermissionsResult || []);\n const newPermissions = uniq(attributes.permissions);\n\n const actionsToDelete = difference(currentPermissions, newPermissions);\n const actionsToAdd = difference(newPermissions, currentPermissions);\n\n // TODO: improve efficiency here\n // method using a loop -- works but very inefficient\n await Promise.all(\n actionsToDelete.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).delete({\n where: { action, token: id },\n })\n )\n );\n\n // TODO: improve efficiency here\n // using a loop -- works but very inefficient\n await Promise.all(\n actionsToAdd.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).create({\n data: { action, token: id },\n })\n )\n );\n }\n\n // retrieve permissions\n const permissionsFromDb: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n return {\n ...updatedToken,\n permissions: permissionsFromDb ? permissionsFromDb.map((p) => p.action) : undefined,\n };\n }) as unknown as Promise<SanitizedTransferToken>;\n};\n\n/**\n * Revoke (delete) a token\n */\nconst revoke = async (id: string | number): Promise<SanitizedTransferToken> => {\n return strapi.db.transaction(async () =>\n strapi.db\n .query(TRANSFER_TOKEN_UID)\n .delete({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: { id } })\n ) as unknown as Promise<SanitizedTransferToken>;\n};\n\n/**\n * Get a token\n */\nconst getBy = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<SanitizedTransferToken | null> => {\n if (Object.keys(whereParams).length === 0) {\n return null;\n }\n\n const token = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: whereParams });\n\n if (!token) {\n return token;\n }\n\n return flattenTokenPermissions(token);\n};\n\n/**\n * Retrieve a token by id\n */\nconst getById = async (id: string | number): Promise<SanitizedTransferToken | null> => {\n return getBy({ id });\n};\n\n/**\n * Retrieve a token by name\n */\nconst getByName = async (name: string): Promise<SanitizedTransferToken | null> => {\n return getBy({ name });\n};\n\n/**\n * Check if token exists\n */\nconst exists = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<boolean> => {\n const transferToken = await getBy(whereParams);\n\n return !!transferToken;\n};\n\nconst regenerate = async (id: string | number): Promise<TransferToken> => {\n const accessKey = crypto.randomBytes(128).toString('hex');\n const transferToken = (await strapi.db.transaction(async () =>\n strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: ['id', 'accessKey'],\n where: { id },\n data: {\n accessKey: hash(accessKey),\n },\n })\n )) as Promise<TransferToken>;\n\n if (!transferToken) {\n throw new NotFoundError('The provided token id does not exist');\n }\n\n return {\n ...transferToken,\n accessKey,\n };\n};\n\nconst getExpirationFields = (lifespan: TransferToken['lifespan']) => {\n // it must be nil or a finite number >= 0\n const isValidNumber = isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;\n if (!isValidNumber && !isNil(lifespan)) {\n throw new ValidationError('lifespan must be a positive number or null');\n }\n\n return {\n lifespan: lifespan || null,\n expiresAt: lifespan ? Date.now() + lifespan : null,\n };\n};\n\n/**\n * Return a secure sha512 hash of an accessKey\n */\nconst hash = (accessKey: string): string => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n if (!hasValidTokenSalt()) {\n throw new TypeError('Required token salt is not defined');\n }\n\n return crypto\n .createHmac('sha512', strapi.config.get('admin.transfer.token.salt'))\n .update(accessKey)\n .digest('hex');\n};\n\nconst checkSaltIsDefined = () => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n // Ignore the check if the data-transfer feature is manually disabled\n if (!strapi.config.get('server.transfer.remote.enabled')) {\n return;\n }\n\n if (!hasValidTokenSalt()) {\n process.emitWarning(\n `Missing transfer.token.salt: Data transfer features have been disabled.\nPlease set transfer.token.salt in config/admin.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`)\nFor security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n};\n\n/**\n * Flatten a token's database permissions objects to an array of strings\n */\nconst flattenTokenPermissions = (token: DatabaseTransferToken): TransferToken => {\n if (!token) {\n return token;\n }\n\n return {\n ...token,\n permissions: isArray(token.permissions)\n ? map('action', token.permissions as TransferTokenPermission[])\n : token.permissions,\n };\n};\n\n/**\n * Assert that a token's permissions are valid\n */\nconst assertTokenPermissionsValidity = (attributes: TokenUpdatePayload) => {\n const permissionService = strapi.service('admin::transfer').permission;\n const validPermissions = permissionService.providers.action.keys();\n const invalidPermissions = difference(attributes.permissions, validPermissions);\n\n if (!isEmpty(invalidPermissions)) {\n throw new ValidationError(`Unknown permissions provided: ${invalidPermissions.join(', ')}`);\n }\n};\n\n/**\n * Check if a token's lifespan is valid\n */\nconst isValidLifespan = (lifespan: unknown) => {\n if (isNil(lifespan)) {\n return true;\n }\n\n if (\n !isNumber(lifespan) ||\n !Object.values(constants.TRANSFER_TOKEN_LIFESPANS).includes(lifespan)\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Assert that a token's lifespan is valid\n */\nconst assertValidLifespan = (lifespan: unknown) => {\n if (!isValidLifespan(lifespan)) {\n throw new ValidationError(\n `lifespan must be one of the following values:\n ${Object.values(constants.TRANSFER_TOKEN_LIFESPANS).join(', ')}`\n );\n }\n};\n\nexport {\n create,\n list,\n exists,\n getBy,\n getById,\n getByName,\n update,\n revoke,\n regenerate,\n hash,\n checkSaltIsDefined,\n};\n"],"names":["ValidationError","NotFoundError","errors","TRANSFER_TOKEN_UID","TRANSFER_TOKEN_PERMISSION_UID","SELECT_FIELDS","POPULATE_FIELDS","list","tokens","strapi","db","query","findMany","select","populate","orderBy","name","map","token","flattenTokenPermissions","generateRandomAccessKey","crypto","randomBytes","toString","validateAccessKey","accessKey","assert","length","hasAccessKey","attributes","create","assertTokenPermissionsValidity","assertValidLifespan","lifespan","result","transaction","transferToken","data","omit","hash","getExpirationFields","Promise","all","uniq","permissions","action","currentPermissions","load","Object","assign","update","id","originalToken","findOne","where","updatedToken","currentPermissionsResult","newPermissions","actionsToDelete","difference","actionsToAdd","delete","permissionsFromDb","p","undefined","revoke","getBy","whereParams","keys","getById","getByName","exists","regenerate","isValidNumber","isNumber","Number","isFinite","isNil","expiresAt","Date","now","hasValidTokenSalt","getService","utils","TypeError","createHmac","config","get","digest","checkSaltIsDefined","process","emitWarning","isArray","permissionService","service","permission","validPermissions","providers","invalidPermissions","isEmpty","join","isValidLifespan","values","constants","TRANSFER_TOKEN_LIFESPANS","includes"],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sources":["../../../../../../server/src/services/transfer/token.ts"],"sourcesContent":["import crypto from 'crypto';\nimport assert from 'assert';\nimport { map, isArray, omit, uniq, isNil, difference, isEmpty, isNumber } from 'lodash/fp';\nimport { errors, emitAudit } from '@strapi/utils';\nimport '@strapi/types';\nimport constants from '../constants';\nimport { getService } from '../../utils';\nimport { AUDITED_EVENTS, getTokenChanges, toActionRefs } from '../../audit-logs/tokens';\nimport {\n DatabaseTransferToken,\n SanitizedTransferToken,\n TokenCreatePayload,\n TokenUpdatePayload,\n TransferToken,\n TransferTokenPermission,\n} from '../../../../shared/contracts/transfer';\n\nconst { ValidationError, NotFoundError } = errors;\n\nconst TRANSFER_TOKEN_UID = 'admin::transfer-token';\nconst TRANSFER_TOKEN_PERMISSION_UID = 'admin::transfer-token-permission';\n\nconst SELECT_FIELDS = [\n 'id',\n 'name',\n 'description',\n 'lastUsedAt',\n 'lifespan',\n 'expiresAt',\n 'createdAt',\n 'updatedAt',\n] as const;\n\nconst POPULATE_FIELDS = ['permissions'] as const;\n\n/**\n * Return a list of all tokens and their permissions\n */\nconst list = async (): Promise<SanitizedTransferToken[]> => {\n const tokens: DatabaseTransferToken[] = await strapi.db.query(TRANSFER_TOKEN_UID).findMany({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n orderBy: { name: 'ASC' },\n });\n\n if (!tokens) return tokens;\n return tokens.map((token) => flattenTokenPermissions(token));\n};\n\n/**\n * Create a random token's access key\n */\nconst generateRandomAccessKey = (): string => crypto.randomBytes(128).toString('hex');\n\n/**\n * Validate the given access key's format and returns it if valid\n */\nconst validateAccessKey = (accessKey: string): string => {\n assert(typeof accessKey === 'string', 'Access key needs to be a string');\n assert(accessKey.length >= 15, 'Access key needs to have at least 15 characters');\n\n return accessKey;\n};\n\nexport const hasAccessKey = <T extends { accessKey?: string }>(\n attributes: T\n): attributes is T & { accessKey: string } => {\n return 'accessKey' in attributes;\n};\n\n/**\n * Create a token and its permissions\n */\nconst create = async (attributes: TokenCreatePayload): Promise<TransferToken> => {\n const accessKey = hasAccessKey(attributes)\n ? validateAccessKey(attributes.accessKey)\n : generateRandomAccessKey();\n\n // Make sure the access key isn't picked up directly from the attributes for the next steps\n delete attributes.accessKey;\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const result = (await strapi.db.transaction(async () => {\n const transferToken = await strapi.db.query(TRANSFER_TOKEN_UID).create({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n data: {\n ...omit('permissions', attributes),\n accessKey: hash(accessKey),\n ...getExpirationFields(attributes.lifespan),\n },\n });\n\n await Promise.all(\n uniq(attributes.permissions).map((action) =>\n strapi.db\n .query(TRANSFER_TOKEN_PERMISSION_UID)\n .create({ data: { action, token: transferToken } })\n )\n );\n\n const currentPermissions: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(transferToken, 'permissions');\n\n if (currentPermissions) {\n Object.assign(transferToken, { permissions: map('action', currentPermissions) });\n }\n\n return transferToken;\n })) as TransferToken;\n\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_CREATE, {\n tokenId: result.id,\n name: result.name,\n kind: 'transfer',\n description: result.description ?? null,\n lifespan: result.lifespan,\n expiresAt: result.expiresAt,\n permissions: result.permissions ?? [],\n });\n\n return { ...result, accessKey };\n};\n\n/**\n * Update a token and its permissions\n */\nconst update = async (\n id: string | number,\n attributes: TokenUpdatePayload\n): Promise<SanitizedTransferToken> => {\n // Populated with its permissions: the audit row for this update lists what changed,\n // so the state before the write is needed.\n const originalToken: DatabaseTransferToken | null = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ where: { id }, populate: POPULATE_FIELDS });\n\n if (!originalToken) {\n throw new NotFoundError('Token not found');\n }\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const updated = (await strapi.db.transaction(async () => {\n const updatedToken = await strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: SELECT_FIELDS,\n where: { id },\n data: {\n ...omit('permissions', attributes),\n },\n });\n\n if (attributes.permissions) {\n const currentPermissionsResult = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n const currentPermissions = map('action', currentPermissionsResult || []);\n const newPermissions = uniq(attributes.permissions);\n\n const actionsToDelete = difference(currentPermissions, newPermissions);\n const actionsToAdd = difference(newPermissions, currentPermissions);\n\n // TODO: improve efficiency here\n // method using a loop -- works but very inefficient\n await Promise.all(\n actionsToDelete.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).delete({\n where: { action, token: id },\n })\n )\n );\n\n // TODO: improve efficiency here\n // using a loop -- works but very inefficient\n await Promise.all(\n actionsToAdd.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).create({\n data: { action, token: id },\n })\n )\n );\n }\n\n // retrieve permissions\n const permissionsFromDb: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n return {\n ...updatedToken,\n permissions: permissionsFromDb ? permissionsFromDb.map((p) => p.action) : undefined,\n };\n })) as SanitizedTransferToken;\n\n const changes = getTokenChanges(\n {\n name: originalToken.name,\n description: originalToken.description,\n permissions: toActionRefs(originalToken.permissions),\n },\n { name: updated.name, description: updated.description, permissions: updated.permissions ?? [] }\n );\n\n if (Object.keys(changes).length > 0) {\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_UPDATE, {\n tokenId: originalToken.id,\n name: updated.name,\n kind: 'transfer',\n changes,\n });\n }\n\n return updated;\n};\n\n/**\n * Revoke (delete) a token\n */\nconst revoke = async (id: string | number): Promise<SanitizedTransferToken> => {\n const deleted = (await strapi.db.transaction(async () =>\n strapi.db\n .query(TRANSFER_TOKEN_UID)\n .delete({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: { id } })\n )) as SanitizedTransferToken | null;\n\n if (deleted) {\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_DELETE, {\n tokenId: deleted.id,\n name: deleted.name,\n kind: 'transfer',\n });\n }\n\n return deleted as SanitizedTransferToken;\n};\n\n/**\n * Get a token\n */\nconst getBy = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<SanitizedTransferToken | null> => {\n if (Object.keys(whereParams).length === 0) {\n return null;\n }\n\n const token = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: whereParams });\n\n if (!token) {\n return token;\n }\n\n return flattenTokenPermissions(token);\n};\n\n/**\n * Retrieve a token by id\n */\nconst getById = async (id: string | number): Promise<SanitizedTransferToken | null> => {\n return getBy({ id });\n};\n\n/**\n * Retrieve a token by name\n */\nconst getByName = async (name: string): Promise<SanitizedTransferToken | null> => {\n return getBy({ name });\n};\n\n/**\n * Check if token exists\n */\nconst exists = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<boolean> => {\n const transferToken = await getBy(whereParams);\n\n return !!transferToken;\n};\n\nconst regenerate = async (id: string | number): Promise<TransferToken> => {\n const accessKey = crypto.randomBytes(128).toString('hex');\n const transferToken = (await strapi.db.transaction(async () =>\n strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: ['id', 'name', 'accessKey'],\n where: { id },\n data: {\n accessKey: hash(accessKey),\n },\n })\n )) as TransferToken;\n\n if (!transferToken) {\n throw new NotFoundError('The provided token id does not exist');\n }\n\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_REGENERATE, {\n tokenId: transferToken.id,\n name: transferToken.name,\n kind: 'transfer',\n });\n\n return {\n ...transferToken,\n accessKey,\n };\n};\n\nconst getExpirationFields = (lifespan: TransferToken['lifespan']) => {\n // it must be nil or a finite number >= 0\n const isValidNumber = isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;\n if (!isValidNumber && !isNil(lifespan)) {\n throw new ValidationError('lifespan must be a positive number or null');\n }\n\n return {\n lifespan: lifespan || null,\n expiresAt: lifespan ? Date.now() + lifespan : null,\n };\n};\n\n/**\n * Return a secure sha512 hash of an accessKey\n */\nconst hash = (accessKey: string): string => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n if (!hasValidTokenSalt()) {\n throw new TypeError('Required token salt is not defined');\n }\n\n return crypto\n .createHmac('sha512', strapi.config.get('admin.transfer.token.salt'))\n .update(accessKey)\n .digest('hex');\n};\n\nconst checkSaltIsDefined = () => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n // Ignore the check if the data-transfer feature is manually disabled\n if (!strapi.config.get('server.transfer.remote.enabled')) {\n return;\n }\n\n if (!hasValidTokenSalt()) {\n process.emitWarning(\n `Missing transfer.token.salt: Data transfer features have been disabled.\nPlease set transfer.token.salt in config/admin.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`)\nFor security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n};\n\n/**\n * Flatten a token's database permissions objects to an array of strings\n */\nconst flattenTokenPermissions = (token: DatabaseTransferToken): TransferToken => {\n if (!token) {\n return token;\n }\n\n return {\n ...token,\n permissions: isArray(token.permissions)\n ? map('action', token.permissions as TransferTokenPermission[])\n : token.permissions,\n };\n};\n\n/**\n * Assert that a token's permissions are valid\n */\nconst assertTokenPermissionsValidity = (attributes: TokenUpdatePayload) => {\n const permissionService = strapi.service('admin::transfer').permission;\n const validPermissions = permissionService.providers.action.keys();\n const invalidPermissions = difference(attributes.permissions, validPermissions);\n\n if (!isEmpty(invalidPermissions)) {\n throw new ValidationError(`Unknown permissions provided: ${invalidPermissions.join(', ')}`);\n }\n};\n\n/**\n * Check if a token's lifespan is valid\n */\nconst isValidLifespan = (lifespan: unknown) => {\n if (isNil(lifespan)) {\n return true;\n }\n\n if (\n !isNumber(lifespan) ||\n !Object.values(constants.TRANSFER_TOKEN_LIFESPANS).includes(lifespan)\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Assert that a token's lifespan is valid\n */\nconst assertValidLifespan = (lifespan: unknown) => {\n if (!isValidLifespan(lifespan)) {\n throw new ValidationError(\n `lifespan must be one of the following values:\n ${Object.values(constants.TRANSFER_TOKEN_LIFESPANS).join(', ')}`\n );\n }\n};\n\nexport {\n create,\n list,\n exists,\n getBy,\n getById,\n getByName,\n update,\n revoke,\n regenerate,\n hash,\n checkSaltIsDefined,\n};\n"],"names":["ValidationError","NotFoundError","errors","TRANSFER_TOKEN_UID","TRANSFER_TOKEN_PERMISSION_UID","SELECT_FIELDS","POPULATE_FIELDS","list","tokens","strapi","db","query","findMany","select","populate","orderBy","name","map","token","flattenTokenPermissions","generateRandomAccessKey","crypto","randomBytes","toString","validateAccessKey","accessKey","assert","length","hasAccessKey","attributes","create","assertTokenPermissionsValidity","assertValidLifespan","lifespan","result","transaction","transferToken","data","omit","hash","getExpirationFields","Promise","all","uniq","permissions","action","currentPermissions","load","Object","assign","emitAudit","AUDITED_EVENTS","TOKEN_CREATE","tokenId","id","kind","description","expiresAt","update","originalToken","findOne","where","updated","updatedToken","currentPermissionsResult","newPermissions","actionsToDelete","difference","actionsToAdd","delete","permissionsFromDb","p","undefined","changes","getTokenChanges","toActionRefs","keys","TOKEN_UPDATE","revoke","deleted","TOKEN_DELETE","getBy","whereParams","getById","getByName","exists","regenerate","TOKEN_REGENERATE","isValidNumber","isNumber","Number","isFinite","isNil","Date","now","hasValidTokenSalt","getService","utils","TypeError","createHmac","config","get","digest","checkSaltIsDefined","process","emitWarning","isArray","permissionService","service","permission","validPermissions","providers","invalidPermissions","isEmpty","join","isValidLifespan","values","constants","TRANSFER_TOKEN_LIFESPANS","includes"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import crypto from 'crypto';
2
2
  import assert from 'assert';
3
3
  import { omit, uniq, map, difference, isEmpty, isNumber, isNil, isArray } from 'lodash/fp';
4
- import { errors } from '@strapi/utils';
4
+ import { errors, emitAudit } from '@strapi/utils';
5
5
  import '@strapi/types';
6
6
  import constants from '../constants.mjs';
7
7
  import { getService } from '../../utils/index.mjs';
8
+ import { AUDITED_EVENTS, getTokenChanges, toActionRefs } from '../../audit-logs/tokens.mjs';
8
9
 
9
10
  const { ValidationError, NotFoundError } = errors;
10
11
  const TRANSFER_TOKEN_UID = 'admin::transfer-token';
@@ -80,6 +81,17 @@ const hasAccessKey = (attributes)=>{
80
81
  }
81
82
  return transferToken;
82
83
  });
84
+ await emitAudit({
85
+ strapi
86
+ }, AUDITED_EVENTS.TOKEN_CREATE, {
87
+ tokenId: result.id,
88
+ name: result.name,
89
+ kind: 'transfer',
90
+ description: result.description ?? null,
91
+ lifespan: result.lifespan,
92
+ expiresAt: result.expiresAt,
93
+ permissions: result.permissions ?? []
94
+ });
83
95
  return {
84
96
  ...result,
85
97
  accessKey
@@ -88,18 +100,20 @@ const hasAccessKey = (attributes)=>{
88
100
  /**
89
101
  * Update a token and its permissions
90
102
  */ const update = async (id, attributes)=>{
91
- // retrieve token without permissions
103
+ // Populated with its permissions: the audit row for this update lists what changed,
104
+ // so the state before the write is needed.
92
105
  const originalToken = await strapi.db.query(TRANSFER_TOKEN_UID).findOne({
93
106
  where: {
94
107
  id
95
- }
108
+ },
109
+ populate: POPULATE_FIELDS
96
110
  });
97
111
  if (!originalToken) {
98
112
  throw new NotFoundError('Token not found');
99
113
  }
100
114
  assertTokenPermissionsValidity(attributes);
101
115
  assertValidLifespan(attributes.lifespan);
102
- return strapi.db.transaction(async ()=>{
116
+ const updated = await strapi.db.transaction(async ()=>{
103
117
  const updatedToken = await strapi.db.query(TRANSFER_TOKEN_UID).update({
104
118
  select: SELECT_FIELDS,
105
119
  where: {
@@ -139,17 +153,47 @@ const hasAccessKey = (attributes)=>{
139
153
  permissions: permissionsFromDb ? permissionsFromDb.map((p)=>p.action) : undefined
140
154
  };
141
155
  });
156
+ const changes = getTokenChanges({
157
+ name: originalToken.name,
158
+ description: originalToken.description,
159
+ permissions: toActionRefs(originalToken.permissions)
160
+ }, {
161
+ name: updated.name,
162
+ description: updated.description,
163
+ permissions: updated.permissions ?? []
164
+ });
165
+ if (Object.keys(changes).length > 0) {
166
+ await emitAudit({
167
+ strapi
168
+ }, AUDITED_EVENTS.TOKEN_UPDATE, {
169
+ tokenId: originalToken.id,
170
+ name: updated.name,
171
+ kind: 'transfer',
172
+ changes
173
+ });
174
+ }
175
+ return updated;
142
176
  };
143
177
  /**
144
178
  * Revoke (delete) a token
145
179
  */ const revoke = async (id)=>{
146
- return strapi.db.transaction(async ()=>strapi.db.query(TRANSFER_TOKEN_UID).delete({
180
+ const deleted = await strapi.db.transaction(async ()=>strapi.db.query(TRANSFER_TOKEN_UID).delete({
147
181
  select: SELECT_FIELDS,
148
182
  populate: POPULATE_FIELDS,
149
183
  where: {
150
184
  id
151
185
  }
152
186
  }));
187
+ if (deleted) {
188
+ await emitAudit({
189
+ strapi
190
+ }, AUDITED_EVENTS.TOKEN_DELETE, {
191
+ tokenId: deleted.id,
192
+ name: deleted.name,
193
+ kind: 'transfer'
194
+ });
195
+ }
196
+ return deleted;
153
197
  };
154
198
  /**
155
199
  * Get a token
@@ -192,6 +236,7 @@ const regenerate = async (id)=>{
192
236
  const transferToken = await strapi.db.transaction(async ()=>strapi.db.query(TRANSFER_TOKEN_UID).update({
193
237
  select: [
194
238
  'id',
239
+ 'name',
195
240
  'accessKey'
196
241
  ],
197
242
  where: {
@@ -204,6 +249,13 @@ const regenerate = async (id)=>{
204
249
  if (!transferToken) {
205
250
  throw new NotFoundError('The provided token id does not exist');
206
251
  }
252
+ await emitAudit({
253
+ strapi
254
+ }, AUDITED_EVENTS.TOKEN_REGENERATE, {
255
+ tokenId: transferToken.id,
256
+ name: transferToken.name,
257
+ kind: 'transfer'
258
+ });
207
259
  return {
208
260
  ...transferToken,
209
261
  accessKey
@@ -1 +1 @@
1
- {"version":3,"file":"token.mjs","sources":["../../../../../../server/src/services/transfer/token.ts"],"sourcesContent":["import crypto from 'crypto';\nimport assert from 'assert';\nimport { map, isArray, omit, uniq, isNil, difference, isEmpty, isNumber } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\nimport '@strapi/types';\nimport constants from '../constants';\nimport { getService } from '../../utils';\nimport {\n DatabaseTransferToken,\n SanitizedTransferToken,\n TokenCreatePayload,\n TokenUpdatePayload,\n TransferToken,\n TransferTokenPermission,\n} from '../../../../shared/contracts/transfer';\n\nconst { ValidationError, NotFoundError } = errors;\n\nconst TRANSFER_TOKEN_UID = 'admin::transfer-token';\nconst TRANSFER_TOKEN_PERMISSION_UID = 'admin::transfer-token-permission';\n\nconst SELECT_FIELDS = [\n 'id',\n 'name',\n 'description',\n 'lastUsedAt',\n 'lifespan',\n 'expiresAt',\n 'createdAt',\n 'updatedAt',\n] as const;\n\nconst POPULATE_FIELDS = ['permissions'] as const;\n\n/**\n * Return a list of all tokens and their permissions\n */\nconst list = async (): Promise<SanitizedTransferToken[]> => {\n const tokens: DatabaseTransferToken[] = await strapi.db.query(TRANSFER_TOKEN_UID).findMany({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n orderBy: { name: 'ASC' },\n });\n\n if (!tokens) return tokens;\n return tokens.map((token) => flattenTokenPermissions(token));\n};\n\n/**\n * Create a random token's access key\n */\nconst generateRandomAccessKey = (): string => crypto.randomBytes(128).toString('hex');\n\n/**\n * Validate the given access key's format and returns it if valid\n */\nconst validateAccessKey = (accessKey: string): string => {\n assert(typeof accessKey === 'string', 'Access key needs to be a string');\n assert(accessKey.length >= 15, 'Access key needs to have at least 15 characters');\n\n return accessKey;\n};\n\nexport const hasAccessKey = <T extends { accessKey?: string }>(\n attributes: T\n): attributes is T & { accessKey: string } => {\n return 'accessKey' in attributes;\n};\n\n/**\n * Create a token and its permissions\n */\nconst create = async (attributes: TokenCreatePayload): Promise<TransferToken> => {\n const accessKey = hasAccessKey(attributes)\n ? validateAccessKey(attributes.accessKey)\n : generateRandomAccessKey();\n\n // Make sure the access key isn't picked up directly from the attributes for the next steps\n delete attributes.accessKey;\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const result = (await strapi.db.transaction(async () => {\n const transferToken = await strapi.db.query(TRANSFER_TOKEN_UID).create({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n data: {\n ...omit('permissions', attributes),\n accessKey: hash(accessKey),\n ...getExpirationFields(attributes.lifespan),\n },\n });\n\n await Promise.all(\n uniq(attributes.permissions).map((action) =>\n strapi.db\n .query(TRANSFER_TOKEN_PERMISSION_UID)\n .create({ data: { action, token: transferToken } })\n )\n );\n\n const currentPermissions: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(transferToken, 'permissions');\n\n if (currentPermissions) {\n Object.assign(transferToken, { permissions: map('action', currentPermissions) });\n }\n\n return transferToken;\n })) as TransferToken;\n\n return { ...result, accessKey };\n};\n\n/**\n * Update a token and its permissions\n */\nconst update = async (\n id: string | number,\n attributes: TokenUpdatePayload\n): Promise<SanitizedTransferToken> => {\n // retrieve token without permissions\n const originalToken = await strapi.db.query(TRANSFER_TOKEN_UID).findOne({ where: { id } });\n\n if (!originalToken) {\n throw new NotFoundError('Token not found');\n }\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n return strapi.db.transaction(async () => {\n const updatedToken = await strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: SELECT_FIELDS,\n where: { id },\n data: {\n ...omit('permissions', attributes),\n },\n });\n\n if (attributes.permissions) {\n const currentPermissionsResult = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n const currentPermissions = map('action', currentPermissionsResult || []);\n const newPermissions = uniq(attributes.permissions);\n\n const actionsToDelete = difference(currentPermissions, newPermissions);\n const actionsToAdd = difference(newPermissions, currentPermissions);\n\n // TODO: improve efficiency here\n // method using a loop -- works but very inefficient\n await Promise.all(\n actionsToDelete.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).delete({\n where: { action, token: id },\n })\n )\n );\n\n // TODO: improve efficiency here\n // using a loop -- works but very inefficient\n await Promise.all(\n actionsToAdd.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).create({\n data: { action, token: id },\n })\n )\n );\n }\n\n // retrieve permissions\n const permissionsFromDb: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n return {\n ...updatedToken,\n permissions: permissionsFromDb ? permissionsFromDb.map((p) => p.action) : undefined,\n };\n }) as unknown as Promise<SanitizedTransferToken>;\n};\n\n/**\n * Revoke (delete) a token\n */\nconst revoke = async (id: string | number): Promise<SanitizedTransferToken> => {\n return strapi.db.transaction(async () =>\n strapi.db\n .query(TRANSFER_TOKEN_UID)\n .delete({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: { id } })\n ) as unknown as Promise<SanitizedTransferToken>;\n};\n\n/**\n * Get a token\n */\nconst getBy = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<SanitizedTransferToken | null> => {\n if (Object.keys(whereParams).length === 0) {\n return null;\n }\n\n const token = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: whereParams });\n\n if (!token) {\n return token;\n }\n\n return flattenTokenPermissions(token);\n};\n\n/**\n * Retrieve a token by id\n */\nconst getById = async (id: string | number): Promise<SanitizedTransferToken | null> => {\n return getBy({ id });\n};\n\n/**\n * Retrieve a token by name\n */\nconst getByName = async (name: string): Promise<SanitizedTransferToken | null> => {\n return getBy({ name });\n};\n\n/**\n * Check if token exists\n */\nconst exists = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<boolean> => {\n const transferToken = await getBy(whereParams);\n\n return !!transferToken;\n};\n\nconst regenerate = async (id: string | number): Promise<TransferToken> => {\n const accessKey = crypto.randomBytes(128).toString('hex');\n const transferToken = (await strapi.db.transaction(async () =>\n strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: ['id', 'accessKey'],\n where: { id },\n data: {\n accessKey: hash(accessKey),\n },\n })\n )) as Promise<TransferToken>;\n\n if (!transferToken) {\n throw new NotFoundError('The provided token id does not exist');\n }\n\n return {\n ...transferToken,\n accessKey,\n };\n};\n\nconst getExpirationFields = (lifespan: TransferToken['lifespan']) => {\n // it must be nil or a finite number >= 0\n const isValidNumber = isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;\n if (!isValidNumber && !isNil(lifespan)) {\n throw new ValidationError('lifespan must be a positive number or null');\n }\n\n return {\n lifespan: lifespan || null,\n expiresAt: lifespan ? Date.now() + lifespan : null,\n };\n};\n\n/**\n * Return a secure sha512 hash of an accessKey\n */\nconst hash = (accessKey: string): string => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n if (!hasValidTokenSalt()) {\n throw new TypeError('Required token salt is not defined');\n }\n\n return crypto\n .createHmac('sha512', strapi.config.get('admin.transfer.token.salt'))\n .update(accessKey)\n .digest('hex');\n};\n\nconst checkSaltIsDefined = () => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n // Ignore the check if the data-transfer feature is manually disabled\n if (!strapi.config.get('server.transfer.remote.enabled')) {\n return;\n }\n\n if (!hasValidTokenSalt()) {\n process.emitWarning(\n `Missing transfer.token.salt: Data transfer features have been disabled.\nPlease set transfer.token.salt in config/admin.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`)\nFor security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n};\n\n/**\n * Flatten a token's database permissions objects to an array of strings\n */\nconst flattenTokenPermissions = (token: DatabaseTransferToken): TransferToken => {\n if (!token) {\n return token;\n }\n\n return {\n ...token,\n permissions: isArray(token.permissions)\n ? map('action', token.permissions as TransferTokenPermission[])\n : token.permissions,\n };\n};\n\n/**\n * Assert that a token's permissions are valid\n */\nconst assertTokenPermissionsValidity = (attributes: TokenUpdatePayload) => {\n const permissionService = strapi.service('admin::transfer').permission;\n const validPermissions = permissionService.providers.action.keys();\n const invalidPermissions = difference(attributes.permissions, validPermissions);\n\n if (!isEmpty(invalidPermissions)) {\n throw new ValidationError(`Unknown permissions provided: ${invalidPermissions.join(', ')}`);\n }\n};\n\n/**\n * Check if a token's lifespan is valid\n */\nconst isValidLifespan = (lifespan: unknown) => {\n if (isNil(lifespan)) {\n return true;\n }\n\n if (\n !isNumber(lifespan) ||\n !Object.values(constants.TRANSFER_TOKEN_LIFESPANS).includes(lifespan)\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Assert that a token's lifespan is valid\n */\nconst assertValidLifespan = (lifespan: unknown) => {\n if (!isValidLifespan(lifespan)) {\n throw new ValidationError(\n `lifespan must be one of the following values:\n ${Object.values(constants.TRANSFER_TOKEN_LIFESPANS).join(', ')}`\n );\n }\n};\n\nexport {\n create,\n list,\n exists,\n getBy,\n getById,\n getByName,\n update,\n revoke,\n regenerate,\n hash,\n checkSaltIsDefined,\n};\n"],"names":["ValidationError","NotFoundError","errors","TRANSFER_TOKEN_UID","TRANSFER_TOKEN_PERMISSION_UID","SELECT_FIELDS","POPULATE_FIELDS","list","tokens","strapi","db","query","findMany","select","populate","orderBy","name","map","token","flattenTokenPermissions","generateRandomAccessKey","crypto","randomBytes","toString","validateAccessKey","accessKey","assert","length","hasAccessKey","attributes","create","assertTokenPermissionsValidity","assertValidLifespan","lifespan","result","transaction","transferToken","data","omit","hash","getExpirationFields","Promise","all","uniq","permissions","action","currentPermissions","load","Object","assign","update","id","originalToken","findOne","where","updatedToken","currentPermissionsResult","newPermissions","actionsToDelete","difference","actionsToAdd","delete","permissionsFromDb","p","undefined","revoke","getBy","whereParams","keys","getById","getByName","exists","regenerate","isValidNumber","isNumber","Number","isFinite","isNil","expiresAt","Date","now","hasValidTokenSalt","getService","utils","TypeError","createHmac","config","get","digest","checkSaltIsDefined","process","emitWarning","isArray","permissionService","service","permission","validPermissions","providers","invalidPermissions","isEmpty","join","isValidLifespan","values","constants","TRANSFER_TOKEN_LIFESPANS","includes"],"mappings":"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"}
1
+ {"version":3,"file":"token.mjs","sources":["../../../../../../server/src/services/transfer/token.ts"],"sourcesContent":["import crypto from 'crypto';\nimport assert from 'assert';\nimport { map, isArray, omit, uniq, isNil, difference, isEmpty, isNumber } from 'lodash/fp';\nimport { errors, emitAudit } from '@strapi/utils';\nimport '@strapi/types';\nimport constants from '../constants';\nimport { getService } from '../../utils';\nimport { AUDITED_EVENTS, getTokenChanges, toActionRefs } from '../../audit-logs/tokens';\nimport {\n DatabaseTransferToken,\n SanitizedTransferToken,\n TokenCreatePayload,\n TokenUpdatePayload,\n TransferToken,\n TransferTokenPermission,\n} from '../../../../shared/contracts/transfer';\n\nconst { ValidationError, NotFoundError } = errors;\n\nconst TRANSFER_TOKEN_UID = 'admin::transfer-token';\nconst TRANSFER_TOKEN_PERMISSION_UID = 'admin::transfer-token-permission';\n\nconst SELECT_FIELDS = [\n 'id',\n 'name',\n 'description',\n 'lastUsedAt',\n 'lifespan',\n 'expiresAt',\n 'createdAt',\n 'updatedAt',\n] as const;\n\nconst POPULATE_FIELDS = ['permissions'] as const;\n\n/**\n * Return a list of all tokens and their permissions\n */\nconst list = async (): Promise<SanitizedTransferToken[]> => {\n const tokens: DatabaseTransferToken[] = await strapi.db.query(TRANSFER_TOKEN_UID).findMany({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n orderBy: { name: 'ASC' },\n });\n\n if (!tokens) return tokens;\n return tokens.map((token) => flattenTokenPermissions(token));\n};\n\n/**\n * Create a random token's access key\n */\nconst generateRandomAccessKey = (): string => crypto.randomBytes(128).toString('hex');\n\n/**\n * Validate the given access key's format and returns it if valid\n */\nconst validateAccessKey = (accessKey: string): string => {\n assert(typeof accessKey === 'string', 'Access key needs to be a string');\n assert(accessKey.length >= 15, 'Access key needs to have at least 15 characters');\n\n return accessKey;\n};\n\nexport const hasAccessKey = <T extends { accessKey?: string }>(\n attributes: T\n): attributes is T & { accessKey: string } => {\n return 'accessKey' in attributes;\n};\n\n/**\n * Create a token and its permissions\n */\nconst create = async (attributes: TokenCreatePayload): Promise<TransferToken> => {\n const accessKey = hasAccessKey(attributes)\n ? validateAccessKey(attributes.accessKey)\n : generateRandomAccessKey();\n\n // Make sure the access key isn't picked up directly from the attributes for the next steps\n delete attributes.accessKey;\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const result = (await strapi.db.transaction(async () => {\n const transferToken = await strapi.db.query(TRANSFER_TOKEN_UID).create({\n select: SELECT_FIELDS,\n populate: POPULATE_FIELDS,\n data: {\n ...omit('permissions', attributes),\n accessKey: hash(accessKey),\n ...getExpirationFields(attributes.lifespan),\n },\n });\n\n await Promise.all(\n uniq(attributes.permissions).map((action) =>\n strapi.db\n .query(TRANSFER_TOKEN_PERMISSION_UID)\n .create({ data: { action, token: transferToken } })\n )\n );\n\n const currentPermissions: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(transferToken, 'permissions');\n\n if (currentPermissions) {\n Object.assign(transferToken, { permissions: map('action', currentPermissions) });\n }\n\n return transferToken;\n })) as TransferToken;\n\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_CREATE, {\n tokenId: result.id,\n name: result.name,\n kind: 'transfer',\n description: result.description ?? null,\n lifespan: result.lifespan,\n expiresAt: result.expiresAt,\n permissions: result.permissions ?? [],\n });\n\n return { ...result, accessKey };\n};\n\n/**\n * Update a token and its permissions\n */\nconst update = async (\n id: string | number,\n attributes: TokenUpdatePayload\n): Promise<SanitizedTransferToken> => {\n // Populated with its permissions: the audit row for this update lists what changed,\n // so the state before the write is needed.\n const originalToken: DatabaseTransferToken | null = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ where: { id }, populate: POPULATE_FIELDS });\n\n if (!originalToken) {\n throw new NotFoundError('Token not found');\n }\n\n assertTokenPermissionsValidity(attributes);\n assertValidLifespan(attributes.lifespan);\n\n const updated = (await strapi.db.transaction(async () => {\n const updatedToken = await strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: SELECT_FIELDS,\n where: { id },\n data: {\n ...omit('permissions', attributes),\n },\n });\n\n if (attributes.permissions) {\n const currentPermissionsResult = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n const currentPermissions = map('action', currentPermissionsResult || []);\n const newPermissions = uniq(attributes.permissions);\n\n const actionsToDelete = difference(currentPermissions, newPermissions);\n const actionsToAdd = difference(newPermissions, currentPermissions);\n\n // TODO: improve efficiency here\n // method using a loop -- works but very inefficient\n await Promise.all(\n actionsToDelete.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).delete({\n where: { action, token: id },\n })\n )\n );\n\n // TODO: improve efficiency here\n // using a loop -- works but very inefficient\n await Promise.all(\n actionsToAdd.map((action) =>\n strapi.db.query(TRANSFER_TOKEN_PERMISSION_UID).create({\n data: { action, token: id },\n })\n )\n );\n }\n\n // retrieve permissions\n const permissionsFromDb: TransferTokenPermission[] = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .load(updatedToken, 'permissions');\n\n return {\n ...updatedToken,\n permissions: permissionsFromDb ? permissionsFromDb.map((p) => p.action) : undefined,\n };\n })) as SanitizedTransferToken;\n\n const changes = getTokenChanges(\n {\n name: originalToken.name,\n description: originalToken.description,\n permissions: toActionRefs(originalToken.permissions),\n },\n { name: updated.name, description: updated.description, permissions: updated.permissions ?? [] }\n );\n\n if (Object.keys(changes).length > 0) {\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_UPDATE, {\n tokenId: originalToken.id,\n name: updated.name,\n kind: 'transfer',\n changes,\n });\n }\n\n return updated;\n};\n\n/**\n * Revoke (delete) a token\n */\nconst revoke = async (id: string | number): Promise<SanitizedTransferToken> => {\n const deleted = (await strapi.db.transaction(async () =>\n strapi.db\n .query(TRANSFER_TOKEN_UID)\n .delete({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: { id } })\n )) as SanitizedTransferToken | null;\n\n if (deleted) {\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_DELETE, {\n tokenId: deleted.id,\n name: deleted.name,\n kind: 'transfer',\n });\n }\n\n return deleted as SanitizedTransferToken;\n};\n\n/**\n * Get a token\n */\nconst getBy = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<SanitizedTransferToken | null> => {\n if (Object.keys(whereParams).length === 0) {\n return null;\n }\n\n const token = await strapi.db\n .query(TRANSFER_TOKEN_UID)\n .findOne({ select: SELECT_FIELDS, populate: POPULATE_FIELDS, where: whereParams });\n\n if (!token) {\n return token;\n }\n\n return flattenTokenPermissions(token);\n};\n\n/**\n * Retrieve a token by id\n */\nconst getById = async (id: string | number): Promise<SanitizedTransferToken | null> => {\n return getBy({ id });\n};\n\n/**\n * Retrieve a token by name\n */\nconst getByName = async (name: string): Promise<SanitizedTransferToken | null> => {\n return getBy({ name });\n};\n\n/**\n * Check if token exists\n */\nconst exists = async (\n whereParams = {} as {\n id?: string | number;\n name?: string;\n lastUsedAt?: number;\n description?: string;\n accessKey?: string;\n }\n): Promise<boolean> => {\n const transferToken = await getBy(whereParams);\n\n return !!transferToken;\n};\n\nconst regenerate = async (id: string | number): Promise<TransferToken> => {\n const accessKey = crypto.randomBytes(128).toString('hex');\n const transferToken = (await strapi.db.transaction(async () =>\n strapi.db.query(TRANSFER_TOKEN_UID).update({\n select: ['id', 'name', 'accessKey'],\n where: { id },\n data: {\n accessKey: hash(accessKey),\n },\n })\n )) as TransferToken;\n\n if (!transferToken) {\n throw new NotFoundError('The provided token id does not exist');\n }\n\n await emitAudit({ strapi }, AUDITED_EVENTS.TOKEN_REGENERATE, {\n tokenId: transferToken.id,\n name: transferToken.name,\n kind: 'transfer',\n });\n\n return {\n ...transferToken,\n accessKey,\n };\n};\n\nconst getExpirationFields = (lifespan: TransferToken['lifespan']) => {\n // it must be nil or a finite number >= 0\n const isValidNumber = isNumber(lifespan) && Number.isFinite(lifespan) && lifespan > 0;\n if (!isValidNumber && !isNil(lifespan)) {\n throw new ValidationError('lifespan must be a positive number or null');\n }\n\n return {\n lifespan: lifespan || null,\n expiresAt: lifespan ? Date.now() + lifespan : null,\n };\n};\n\n/**\n * Return a secure sha512 hash of an accessKey\n */\nconst hash = (accessKey: string): string => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n if (!hasValidTokenSalt()) {\n throw new TypeError('Required token salt is not defined');\n }\n\n return crypto\n .createHmac('sha512', strapi.config.get('admin.transfer.token.salt'))\n .update(accessKey)\n .digest('hex');\n};\n\nconst checkSaltIsDefined = () => {\n const { hasValidTokenSalt } = getService('transfer').utils;\n\n // Ignore the check if the data-transfer feature is manually disabled\n if (!strapi.config.get('server.transfer.remote.enabled')) {\n return;\n }\n\n if (!hasValidTokenSalt()) {\n process.emitWarning(\n `Missing transfer.token.salt: Data transfer features have been disabled.\nPlease set transfer.token.salt in config/admin.js (ex: you can generate one using Node with \\`crypto.randomBytes(16).toString('base64')\\`)\nFor security reasons, prefer storing the secret in an environment variable and read it in config/admin.js. See https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/configurations/optional/environment.html#configuration-using-environment-variables.`\n );\n }\n};\n\n/**\n * Flatten a token's database permissions objects to an array of strings\n */\nconst flattenTokenPermissions = (token: DatabaseTransferToken): TransferToken => {\n if (!token) {\n return token;\n }\n\n return {\n ...token,\n permissions: isArray(token.permissions)\n ? map('action', token.permissions as TransferTokenPermission[])\n : token.permissions,\n };\n};\n\n/**\n * Assert that a token's permissions are valid\n */\nconst assertTokenPermissionsValidity = (attributes: TokenUpdatePayload) => {\n const permissionService = strapi.service('admin::transfer').permission;\n const validPermissions = permissionService.providers.action.keys();\n const invalidPermissions = difference(attributes.permissions, validPermissions);\n\n if (!isEmpty(invalidPermissions)) {\n throw new ValidationError(`Unknown permissions provided: ${invalidPermissions.join(', ')}`);\n }\n};\n\n/**\n * Check if a token's lifespan is valid\n */\nconst isValidLifespan = (lifespan: unknown) => {\n if (isNil(lifespan)) {\n return true;\n }\n\n if (\n !isNumber(lifespan) ||\n !Object.values(constants.TRANSFER_TOKEN_LIFESPANS).includes(lifespan)\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Assert that a token's lifespan is valid\n */\nconst assertValidLifespan = (lifespan: unknown) => {\n if (!isValidLifespan(lifespan)) {\n throw new ValidationError(\n `lifespan must be one of the following values:\n ${Object.values(constants.TRANSFER_TOKEN_LIFESPANS).join(', ')}`\n );\n }\n};\n\nexport {\n create,\n list,\n exists,\n getBy,\n getById,\n getByName,\n update,\n revoke,\n regenerate,\n hash,\n checkSaltIsDefined,\n};\n"],"names":["ValidationError","NotFoundError","errors","TRANSFER_TOKEN_UID","TRANSFER_TOKEN_PERMISSION_UID","SELECT_FIELDS","POPULATE_FIELDS","list","tokens","strapi","db","query","findMany","select","populate","orderBy","name","map","token","flattenTokenPermissions","generateRandomAccessKey","crypto","randomBytes","toString","validateAccessKey","accessKey","assert","length","hasAccessKey","attributes","create","assertTokenPermissionsValidity","assertValidLifespan","lifespan","result","transaction","transferToken","data","omit","hash","getExpirationFields","Promise","all","uniq","permissions","action","currentPermissions","load","Object","assign","emitAudit","AUDITED_EVENTS","TOKEN_CREATE","tokenId","id","kind","description","expiresAt","update","originalToken","findOne","where","updated","updatedToken","currentPermissionsResult","newPermissions","actionsToDelete","difference","actionsToAdd","delete","permissionsFromDb","p","undefined","changes","getTokenChanges","toActionRefs","keys","TOKEN_UPDATE","revoke","deleted","TOKEN_DELETE","getBy","whereParams","getById","getByName","exists","regenerate","TOKEN_REGENERATE","isValidNumber","isNumber","Number","isFinite","isNil","Date","now","hasValidTokenSalt","getService","utils","TypeError","createHmac","config","get","digest","checkSaltIsDefined","process","emitWarning","isArray","permissionService","service","permission","validPermissions","providers","invalidPermissions","isEmpty","join","isValidLifespan","values","constants","TRANSFER_TOKEN_LIFESPANS","includes"],"mappings":";;;;;;;;;AAiBA,MAAM,EAAEA,eAAe,EAAEC,aAAa,EAAE,GAAGC,MAAAA;AAE3C,MAAMC,kBAAAA,GAAqB,uBAAA;AAC3B,MAAMC,6BAAAA,GAAgC,kCAAA;AAEtC,MAAMC,aAAAA,GAAgB;AACpB,IAAA,IAAA;AACA,IAAA,MAAA;AACA,IAAA,aAAA;AACA,IAAA,YAAA;AACA,IAAA,UAAA;AACA,IAAA,WAAA;AACA,IAAA,WAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,eAAAA,GAAkB;AAAC,IAAA;AAAc,CAAA;AAEvC;;AAEC,UACKC,IAAAA,GAAO,UAAA;IACX,MAAMC,MAAAA,GAAkC,MAAMC,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,kBAAAA,CAAAA,CAAoBS,QAAQ,CAAC;QACzFC,MAAAA,EAAQR,aAAAA;QACRS,QAAAA,EAAUR,eAAAA;QACVS,OAAAA,EAAS;YAAEC,IAAAA,EAAM;AAAM;AACzB,KAAA,CAAA;IAEA,IAAI,CAACR,QAAQ,OAAOA,MAAAA;AACpB,IAAA,OAAOA,MAAAA,CAAOS,GAAG,CAAC,CAACC,QAAUC,uBAAAA,CAAwBD,KAAAA,CAAAA,CAAAA;AACvD;AAEA;;IAGA,MAAME,0BAA0B,IAAcC,MAAAA,CAAOC,WAAW,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAAC,KAAA,CAAA;AAE/E;;IAGA,MAAMC,oBAAoB,CAACC,SAAAA,GAAAA;IACzBC,MAAAA,CAAO,OAAOD,cAAc,QAAA,EAAU,iCAAA,CAAA;IACtCC,MAAAA,CAAOD,SAAAA,CAAUE,MAAM,IAAI,EAAA,EAAI,iDAAA,CAAA;IAE/B,OAAOF,SAAAA;AACT,CAAA;AAEO,MAAMG,eAAe,CAC1BC,UAAAA,GAAAA;AAEA,IAAA,OAAO,WAAA,IAAeA,UAAAA;AACxB;AAEA;;IAGA,MAAMC,SAAS,OAAOD,UAAAA,GAAAA;AACpB,IAAA,MAAMJ,YAAYG,YAAAA,CAAaC,UAAAA,CAAAA,GAC3BL,iBAAAA,CAAkBK,UAAAA,CAAWJ,SAAS,CAAA,GACtCL,uBAAAA,EAAAA;;AAGJ,IAAA,OAAOS,WAAWJ,SAAS;IAE3BM,8BAAAA,CAA+BF,UAAAA,CAAAA;AAC/BG,IAAAA,mBAAAA,CAAoBH,WAAWI,QAAQ,CAAA;AAEvC,IAAA,MAAMC,SAAU,MAAMzB,MAAAA,CAAOC,EAAE,CAACyB,WAAW,CAAC,UAAA;QAC1C,MAAMC,aAAAA,GAAgB,MAAM3B,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,kBAAAA,CAAAA,CAAoB2B,MAAM,CAAC;YACrEjB,MAAAA,EAAQR,aAAAA;YACRS,QAAAA,EAAUR,eAAAA;YACV+B,IAAAA,EAAM;gBACJ,GAAGC,IAAAA,CAAK,eAAeT,UAAAA,CAAW;AAClCJ,gBAAAA,SAAAA,EAAWc,IAAAA,CAAKd,SAAAA,CAAAA;gBAChB,GAAGe,mBAAAA,CAAoBX,UAAAA,CAAWI,QAAQ;AAC5C;AACF,SAAA,CAAA;AAEA,QAAA,MAAMQ,QAAQC,GAAG,CACfC,KAAKd,UAAAA,CAAWe,WAAW,EAAE3B,GAAG,CAAC,CAAC4B,MAAAA,GAChCpC,OAAOC,EAAE,CACNC,KAAK,CAACP,6BAAAA,CAAAA,CACN0B,MAAM,CAAC;gBAAEO,IAAAA,EAAM;AAAEQ,oBAAAA,MAAAA;oBAAQ3B,KAAAA,EAAOkB;AAAc;AAAE,aAAA,CAAA,CAAA,CAAA;QAIvD,MAAMU,kBAAAA,GAAgD,MAAMrC,MAAAA,CAAOC,EAAE,CAClEC,KAAK,CAACR,kBAAAA,CAAAA,CACN4C,IAAI,CAACX,aAAAA,EAAe,aAAA,CAAA;AAEvB,QAAA,IAAIU,kBAAAA,EAAoB;YACtBE,MAAAA,CAAOC,MAAM,CAACb,aAAAA,EAAe;AAAEQ,gBAAAA,WAAAA,EAAa3B,IAAI,QAAA,EAAU6B,kBAAAA;AAAoB,aAAA,CAAA;AAChF,QAAA;QAEA,OAAOV,aAAAA;AACT,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMc,SAAAA,CAAU;AAAEzC,QAAAA;KAAO,EAAG0C,cAAAA,CAAeC,YAAY,EAAE;AACvDC,QAAAA,OAAAA,EAASnB,OAAOoB,EAAE;AAClBtC,QAAAA,IAAAA,EAAMkB,OAAOlB,IAAI;QACjBuC,IAAAA,EAAM,UAAA;QACNC,WAAAA,EAAatB,MAAAA,CAAOsB,WAAW,IAAI,IAAA;AACnCvB,QAAAA,QAAAA,EAAUC,OAAOD,QAAQ;AACzBwB,QAAAA,SAAAA,EAAWvB,OAAOuB,SAAS;QAC3Bb,WAAAA,EAAaV,MAAAA,CAAOU,WAAW,IAAI;AACrC,KAAA,CAAA;IAEA,OAAO;AAAE,QAAA,GAAGV,MAAM;AAAET,QAAAA;AAAU,KAAA;AAChC;AAEA;;IAGA,MAAMiC,MAAAA,GAAS,OACbJ,EAAAA,EACAzB,UAAAA,GAAAA;;;IAIA,MAAM8B,aAAAA,GAA8C,MAAMlD,MAAAA,CAAOC,EAAE,CAChEC,KAAK,CAACR,kBAAAA,CAAAA,CACNyD,OAAO,CAAC;QAAEC,KAAAA,EAAO;AAAEP,YAAAA;AAAG,SAAA;QAAGxC,QAAAA,EAAUR;AAAgB,KAAA,CAAA;AAEtD,IAAA,IAAI,CAACqD,aAAAA,EAAe;AAClB,QAAA,MAAM,IAAI1D,aAAAA,CAAc,iBAAA,CAAA;AAC1B,IAAA;IAEA8B,8BAAAA,CAA+BF,UAAAA,CAAAA;AAC/BG,IAAAA,mBAAAA,CAAoBH,WAAWI,QAAQ,CAAA;AAEvC,IAAA,MAAM6B,UAAW,MAAMrD,MAAAA,CAAOC,EAAE,CAACyB,WAAW,CAAC,UAAA;QAC3C,MAAM4B,YAAAA,GAAe,MAAMtD,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,kBAAAA,CAAAA,CAAoBuD,MAAM,CAAC;YACpE7C,MAAAA,EAAQR,aAAAA;YACRwD,KAAAA,EAAO;AAAEP,gBAAAA;AAAG,aAAA;YACZjB,IAAAA,EAAM;gBACJ,GAAGC,IAAAA,CAAK,eAAeT,UAAAA;AACzB;AACF,SAAA,CAAA;QAEA,IAAIA,UAAAA,CAAWe,WAAW,EAAE;YAC1B,MAAMoB,wBAAAA,GAA2B,MAAMvD,MAAAA,CAAOC,EAAE,CAC7CC,KAAK,CAACR,kBAAAA,CAAAA,CACN4C,IAAI,CAACgB,YAAAA,EAAc,aAAA,CAAA;AAEtB,YAAA,MAAMjB,kBAAAA,GAAqB7B,GAAAA,CAAI,QAAA,EAAU+C,wBAAAA,IAA4B,EAAE,CAAA;YACvE,MAAMC,cAAAA,GAAiBtB,IAAAA,CAAKd,UAAAA,CAAWe,WAAW,CAAA;YAElD,MAAMsB,eAAAA,GAAkBC,WAAWrB,kBAAAA,EAAoBmB,cAAAA,CAAAA;YACvD,MAAMG,YAAAA,GAAeD,WAAWF,cAAAA,EAAgBnB,kBAAAA,CAAAA;;;AAIhD,YAAA,MAAML,OAAAA,CAAQC,GAAG,CACfwB,eAAAA,CAAgBjD,GAAG,CAAC,CAAC4B,MAAAA,GACnBpC,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACP,6BAAAA,CAAAA,CAA+BiE,MAAM,CAAC;oBACpDR,KAAAA,EAAO;AAAEhB,wBAAAA,MAAAA;wBAAQ3B,KAAAA,EAAOoC;AAAG;AAC7B,iBAAA,CAAA,CAAA,CAAA;;;AAMJ,YAAA,MAAMb,OAAAA,CAAQC,GAAG,CACf0B,YAAAA,CAAanD,GAAG,CAAC,CAAC4B,MAAAA,GAChBpC,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACP,6BAAAA,CAAAA,CAA+B0B,MAAM,CAAC;oBACpDO,IAAAA,EAAM;AAAEQ,wBAAAA,MAAAA;wBAAQ3B,KAAAA,EAAOoC;AAAG;AAC5B,iBAAA,CAAA,CAAA,CAAA;AAGN,QAAA;;QAGA,MAAMgB,iBAAAA,GAA+C,MAAM7D,MAAAA,CAAOC,EAAE,CACjEC,KAAK,CAACR,kBAAAA,CAAAA,CACN4C,IAAI,CAACgB,YAAAA,EAAc,aAAA,CAAA;QAEtB,OAAO;AACL,YAAA,GAAGA,YAAY;YACfnB,WAAAA,EAAa0B,iBAAAA,GAAoBA,kBAAkBrD,GAAG,CAAC,CAACsD,CAAAA,GAAMA,CAAAA,CAAE1B,MAAM,CAAA,GAAI2B;AAC5E,SAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,UAAUC,eAAAA,CACd;AACE1D,QAAAA,IAAAA,EAAM2C,cAAc3C,IAAI;AACxBwC,QAAAA,WAAAA,EAAaG,cAAcH,WAAW;QACtCZ,WAAAA,EAAa+B,YAAAA,CAAahB,cAAcf,WAAW;KACrD,EACA;AAAE5B,QAAAA,IAAAA,EAAM8C,QAAQ9C,IAAI;AAAEwC,QAAAA,WAAAA,EAAaM,QAAQN,WAAW;QAAEZ,WAAAA,EAAakB,OAAAA,CAAQlB,WAAW,IAAI;AAAG,KAAA,CAAA;AAGjG,IAAA,IAAII,OAAO4B,IAAI,CAACH,OAAAA,CAAAA,CAAS9C,MAAM,GAAG,CAAA,EAAG;AACnC,QAAA,MAAMuB,SAAAA,CAAU;AAAEzC,YAAAA;SAAO,EAAG0C,cAAAA,CAAe0B,YAAY,EAAE;AACvDxB,YAAAA,OAAAA,EAASM,cAAcL,EAAE;AACzBtC,YAAAA,IAAAA,EAAM8C,QAAQ9C,IAAI;YAClBuC,IAAAA,EAAM,UAAA;AACNkB,YAAAA;AACF,SAAA,CAAA;AACF,IAAA;IAEA,OAAOX,OAAAA;AACT;AAEA;;IAGA,MAAMgB,SAAS,OAAOxB,EAAAA,GAAAA;AACpB,IAAA,MAAMyB,OAAAA,GAAW,MAAMtE,MAAAA,CAAOC,EAAE,CAACyB,WAAW,CAAC,UAC3C1B,MAAAA,CAAOC,EAAE,CACNC,KAAK,CAACR,kBAAAA,CAAAA,CACNkE,MAAM,CAAC;YAAExD,MAAAA,EAAQR,aAAAA;YAAeS,QAAAA,EAAUR,eAAAA;YAAiBuD,KAAAA,EAAO;AAAEP,gBAAAA;AAAG;AAAE,SAAA,CAAA,CAAA;AAG9E,IAAA,IAAIyB,OAAAA,EAAS;AACX,QAAA,MAAM7B,SAAAA,CAAU;AAAEzC,YAAAA;SAAO,EAAG0C,cAAAA,CAAe6B,YAAY,EAAE;AACvD3B,YAAAA,OAAAA,EAAS0B,QAAQzB,EAAE;AACnBtC,YAAAA,IAAAA,EAAM+D,QAAQ/D,IAAI;YAClBuC,IAAAA,EAAM;AACR,SAAA,CAAA;AACF,IAAA;IAEA,OAAOwB,OAAAA;AACT;AAEA;;AAEC,IACD,MAAME,KAAAA,GAAQ,OACZC,WAAAA,GAAc,EAMb,GAAA;AAED,IAAA,IAAIlC,OAAO4B,IAAI,CAACM,WAAAA,CAAAA,CAAavD,MAAM,KAAK,CAAA,EAAG;QACzC,OAAO,IAAA;AACT,IAAA;IAEA,MAAMT,KAAAA,GAAQ,MAAMT,MAAAA,CAAOC,EAAE,CAC1BC,KAAK,CAACR,kBAAAA,CAAAA,CACNyD,OAAO,CAAC;QAAE/C,MAAAA,EAAQR,aAAAA;QAAeS,QAAAA,EAAUR,eAAAA;QAAiBuD,KAAAA,EAAOqB;AAAY,KAAA,CAAA;AAElF,IAAA,IAAI,CAAChE,KAAAA,EAAO;QACV,OAAOA,KAAAA;AACT,IAAA;AAEA,IAAA,OAAOC,uBAAAA,CAAwBD,KAAAA,CAAAA;AACjC;AAEA;;IAGA,MAAMiE,UAAU,OAAO7B,EAAAA,GAAAA;AACrB,IAAA,OAAO2B,KAAAA,CAAM;AAAE3B,QAAAA;AAAG,KAAA,CAAA;AACpB;AAEA;;IAGA,MAAM8B,YAAY,OAAOpE,IAAAA,GAAAA;AACvB,IAAA,OAAOiE,KAAAA,CAAM;AAAEjE,QAAAA;AAAK,KAAA,CAAA;AACtB;AAEA;;AAEC,IACD,MAAMqE,MAAAA,GAAS,OACbH,WAAAA,GAAc,EAMb,GAAA;IAED,MAAM9C,aAAAA,GAAgB,MAAM6C,KAAAA,CAAMC,WAAAA,CAAAA;AAElC,IAAA,OAAO,CAAC,CAAC9C,aAAAA;AACX;AAEA,MAAMkD,aAAa,OAAOhC,EAAAA,GAAAA;AACxB,IAAA,MAAM7B,YAAYJ,MAAAA,CAAOC,WAAW,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAAC,KAAA,CAAA;AACnD,IAAA,MAAMa,aAAAA,GAAiB,MAAM3B,MAAAA,CAAOC,EAAE,CAACyB,WAAW,CAAC,UACjD1B,MAAAA,CAAOC,EAAE,CAACC,KAAK,CAACR,kBAAAA,CAAAA,CAAoBuD,MAAM,CAAC;YACzC7C,MAAAA,EAAQ;AAAC,gBAAA,IAAA;AAAM,gBAAA,MAAA;AAAQ,gBAAA;AAAY,aAAA;YACnCgD,KAAAA,EAAO;AAAEP,gBAAAA;AAAG,aAAA;YACZjB,IAAAA,EAAM;AACJZ,gBAAAA,SAAAA,EAAWc,IAAAA,CAAKd,SAAAA;AAClB;AACF,SAAA,CAAA,CAAA;AAGF,IAAA,IAAI,CAACW,aAAAA,EAAe;AAClB,QAAA,MAAM,IAAInC,aAAAA,CAAc,sCAAA,CAAA;AAC1B,IAAA;AAEA,IAAA,MAAMiD,SAAAA,CAAU;AAAEzC,QAAAA;KAAO,EAAG0C,cAAAA,CAAeoC,gBAAgB,EAAE;AAC3DlC,QAAAA,OAAAA,EAASjB,cAAckB,EAAE;AACzBtC,QAAAA,IAAAA,EAAMoB,cAAcpB,IAAI;QACxBuC,IAAAA,EAAM;AACR,KAAA,CAAA;IAEA,OAAO;AACL,QAAA,GAAGnB,aAAa;AAChBX,QAAAA;AACF,KAAA;AACF;AAEA,MAAMe,sBAAsB,CAACP,QAAAA,GAAAA;;AAE3B,IAAA,MAAMuD,gBAAgBC,QAAAA,CAASxD,QAAAA,CAAAA,IAAayD,OAAOC,QAAQ,CAAC1D,aAAaA,QAAAA,GAAW,CAAA;AACpF,IAAA,IAAI,CAACuD,aAAAA,IAAiB,CAACI,KAAAA,CAAM3D,QAAAA,CAAAA,EAAW;AACtC,QAAA,MAAM,IAAIjC,eAAAA,CAAgB,4CAAA,CAAA;AAC5B,IAAA;IAEA,OAAO;AACLiC,QAAAA,QAAAA,EAAUA,QAAAA,IAAY,IAAA;AACtBwB,QAAAA,SAAAA,EAAWxB,QAAAA,GAAW4D,IAAAA,CAAKC,GAAG,EAAA,GAAK7D,QAAAA,GAAW;AAChD,KAAA;AACF,CAAA;AAEA;;IAGA,MAAMM,OAAO,CAACd,SAAAA,GAAAA;AACZ,IAAA,MAAM,EAAEsE,iBAAiB,EAAE,GAAGC,UAAAA,CAAW,YAAYC,KAAK;AAE1D,IAAA,IAAI,CAACF,iBAAAA,EAAAA,EAAqB;AACxB,QAAA,MAAM,IAAIG,SAAAA,CAAU,oCAAA,CAAA;AACtB,IAAA;AAEA,IAAA,OAAO7E,MAAAA,CACJ8E,UAAU,CAAC,QAAA,EAAU1F,OAAO2F,MAAM,CAACC,GAAG,CAAC,2BAAA,CAAA,CAAA,CACvC3C,MAAM,CAACjC,SAAAA,CAAAA,CACP6E,MAAM,CAAC,KAAA,CAAA;AACZ;AAEA,MAAMC,kBAAAA,GAAqB,IAAA;AACzB,IAAA,MAAM,EAAER,iBAAiB,EAAE,GAAGC,UAAAA,CAAW,YAAYC,KAAK;;AAG1D,IAAA,IAAI,CAACxF,MAAAA,CAAO2F,MAAM,CAACC,GAAG,CAAC,gCAAA,CAAA,EAAmC;AACxD,QAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAACN,iBAAAA,EAAAA,EAAqB;QACxBS,OAAAA,CAAQC,WAAW,CACjB,CAAC;;uQAEgQ,CAAC,CAAA;AAEtQ,IAAA;AACF;AAEA;;IAGA,MAAMtF,0BAA0B,CAACD,KAAAA,GAAAA;AAC/B,IAAA,IAAI,CAACA,KAAAA,EAAO;QACV,OAAOA,KAAAA;AACT,IAAA;IAEA,OAAO;AACL,QAAA,GAAGA,KAAK;QACR0B,WAAAA,EAAa8D,OAAAA,CAAQxF,KAAAA,CAAM0B,WAAW,CAAA,GAClC3B,GAAAA,CAAI,UAAUC,KAAAA,CAAM0B,WAAW,CAAA,GAC/B1B,KAAAA,CAAM0B;AACZ,KAAA;AACF,CAAA;AAEA;;IAGA,MAAMb,iCAAiC,CAACF,UAAAA,GAAAA;AACtC,IAAA,MAAM8E,iBAAAA,GAAoBlG,MAAAA,CAAOmG,OAAO,CAAC,mBAAmBC,UAAU;AACtE,IAAA,MAAMC,mBAAmBH,iBAAAA,CAAkBI,SAAS,CAAClE,MAAM,CAAC+B,IAAI,EAAA;AAChE,IAAA,MAAMoC,kBAAAA,GAAqB7C,UAAAA,CAAWtC,UAAAA,CAAWe,WAAW,EAAEkE,gBAAAA,CAAAA;IAE9D,IAAI,CAACG,QAAQD,kBAAAA,CAAAA,EAAqB;QAChC,MAAM,IAAIhH,gBAAgB,CAAC,8BAA8B,EAAEgH,kBAAAA,CAAmBE,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAC5F,IAAA;AACF,CAAA;AAEA;;IAGA,MAAMC,kBAAkB,CAAClF,QAAAA,GAAAA;AACvB,IAAA,IAAI2D,MAAM3D,QAAAA,CAAAA,EAAW;QACnB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IACE,CAACwD,QAAAA,CAASxD,QAAAA,CAAAA,IACV,CAACe,MAAAA,CAAOoE,MAAM,CAACC,SAAAA,CAAUC,wBAAwB,CAAA,CAAEC,QAAQ,CAACtF,QAAAA,CAAAA,EAC5D;QACA,OAAO,KAAA;AACT,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AAEA;;IAGA,MAAMD,sBAAsB,CAACC,QAAAA,GAAAA;IAC3B,IAAI,CAACkF,gBAAgBlF,QAAAA,CAAAA,EAAW;QAC9B,MAAM,IAAIjC,gBACR,CAAC;MACD,EAAEgD,MAAAA,CAAOoE,MAAM,CAACC,SAAAA,CAAUC,wBAAwB,CAAA,CAAEJ,IAAI,CAAC,IAAA,CAAA,CAAA,CAAO,CAAA;AAEpE,IAAA;AACF,CAAA;;;;"}
@@ -2,7 +2,9 @@ import type { Core } from '@strapi/types';
2
2
  declare const createAiAdminService: ({ strapi }: {
3
3
  strapi: Core.Strapi;
4
4
  }) => {
5
- isEnabled: () => boolean;
5
+ isAvailable: () => boolean;
6
+ isStrapiManagedAiEnabled: () => boolean;
7
+ authorizeCustomProvider: () => boolean;
6
8
  getAiFeatureConfig: () => Promise<{
7
9
  isAiI18nConfigured: boolean;
8
10
  isAiMediaLibraryConfigured: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/services/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAM1C,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;qBAczC,OAAO;;;;;;;;;;;4BAyOH,MAAM;yBACT,MAAM;gCACC,MAAM;kCACJ,OAAO;0BACf,OAAO;8BACH,MAAM;kCACF,MAAM;8BACV,MAAM;4BACR,MAAM;;0BAVE,MAAM;;CAsCzC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../../../server/src/ai/services/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,QAAA,MAAM,oBAAoB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;uBAkBvC,OAAO;oCAGM,OAAO;mCAKR,OAAO;;;;;;;;;;;4BAiQjB,MAAM;yBACT,MAAM;gCACC,MAAM;kCACJ,OAAO;0BACf,OAAO;8BACH,MAAM;kCACF,MAAM;8BACV,MAAM;4BACR,MAAM;;0BAVE,MAAM;;CA4CzC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,86 @@
1
+ import type { Data, Modules } from '@strapi/types';
2
+ import type { Permission } from '../../../shared/contracts/shared';
3
+ export declare const AUDITED_EVENTS: {
4
+ readonly TOKEN_CREATE: "token.create";
5
+ readonly TOKEN_UPDATE: "token.update";
6
+ readonly TOKEN_DELETE: "token.delete";
7
+ readonly TOKEN_REGENERATE: "token.regenerate";
8
+ };
9
+ export type TokenKind = 'content-api' | 'admin' | 'transfer';
10
+ /**
11
+ * A token permission as recorded in the audit log: action, subject and properties.
12
+ * The row id says nothing to an auditor, and conditions are not part of the token:
13
+ * they are copied from the owner's role and cannot be set per token.
14
+ */
15
+ export interface AdminPermissionRef {
16
+ action: string;
17
+ subject: string | null;
18
+ properties: Permission['properties'];
19
+ }
20
+ export type PermissionRef = string | AdminPermissionRef;
21
+ export declare const toAdminPermissionRefs: (permissions: Array<Pick<Permission, "action" | "subject" | "properties">> | null | undefined) => AdminPermissionRef[];
22
+ export declare const toActionRefs: (permissions: Array<string | {
23
+ action: string;
24
+ }> | null | undefined) => string[];
25
+ /**
26
+ * The owner is recorded as an id: the user object carries the email, which has no place
27
+ * in the log.
28
+ */
29
+ export interface TokenEvent {
30
+ tokenId: Data.ID;
31
+ name: string;
32
+ kind: TokenKind;
33
+ adminUserOwner?: Data.ID;
34
+ }
35
+ export interface TokenResource extends Modules.AuditLogs.Resource {
36
+ type: TokenKind;
37
+ }
38
+ export interface CreateDetails {
39
+ description: string | null;
40
+ /** Milliseconds. The column is a biginteger and comes back as a string. */
41
+ lifespan: number | null;
42
+ expiresAt: string | null;
43
+ /** content-api only: read-only | full-access | custom */
44
+ type?: string;
45
+ /** content-api (custom), transfer and admin tokens */
46
+ permissions?: PermissionRef[];
47
+ adminUserOwner?: Data.ID;
48
+ }
49
+ export type CreateEvent = TokenEvent & {
50
+ description?: string | null;
51
+ lifespan?: string | number | null;
52
+ expiresAt?: string | number | Date | null;
53
+ type?: string;
54
+ permissions?: PermissionRef[];
55
+ };
56
+ export declare const TOKEN_EDITABLE_FIELDS: readonly ["name", "description", "type"];
57
+ export type TokenChanges = Partial<{
58
+ name: Modules.AuditLogs.FieldChange<string | null>;
59
+ description: Modules.AuditLogs.FieldChange<string | null>;
60
+ type: Modules.AuditLogs.FieldChange<string | null>;
61
+ permissions: Modules.AuditLogs.FieldChange<PermissionRef[]>;
62
+ }>;
63
+ export interface UpdateDetails {
64
+ changes: TokenChanges;
65
+ adminUserOwner?: Data.ID;
66
+ }
67
+ export type UpdateEvent = TokenEvent & {
68
+ changes: TokenChanges;
69
+ };
70
+ export interface TokenSnapshot {
71
+ name?: string | null;
72
+ description?: string | null;
73
+ type?: string | null;
74
+ permissions?: PermissionRef[];
75
+ }
76
+ export declare const getTokenChanges: (previous: TokenSnapshot, next: TokenSnapshot) => TokenChanges;
77
+ /**
78
+ * The part of the audit-logs lifecycle service used here.
79
+ * The full service type lives in the Admin EE package.
80
+ */
81
+ interface AuditLogsLifecycle {
82
+ registerEvent<TDetails>(name: string, transform: Modules.AuditLogs.EventTransformer<TDetails>): void;
83
+ }
84
+ export declare const registerTokenAuditEvents: (auditLogsLifecycle: AuditLogsLifecycle) => void;
85
+ export {};
86
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../server/src/audit-logs/tokens.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ declare const _default: {
32
32
  numberOfAllContentTypes: number;
33
33
  numberOfComponents: number;
34
34
  numberOfDynamicZones: number;
35
+ numberOfContentTypeFolders: number;
35
36
  };
36
37
  } | undefined>;
37
38
  information(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAenC,OAAO,KAAK,EAEV,kBAAkB,EAMnB,MAAM,iCAAiC,CAAC;AAezC;;GAEG;;;;;;;;;;;;;;;;;;;;;+BA2CgC,OAAO;6BAmBT,OAAO;;;;;;;;;;;;;;;;;;;;;;iBA6DnB,OAAO;;;;2BAmCG,OAAO;;;;;;;AA7JtC,wBAuKE"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAenC,OAAO,KAAK,EAEV,kBAAkB,EAMnB,MAAM,iCAAiC,CAAC;AAezC;;GAEG;;;;;;;;;;;;;;;;;;;;;+BA2CgC,OAAO;6BAmBT,OAAO;;;;;;;;;;;;;;;;;;;;;;;iBA0EnB,OAAO;;;;2BAmCG,OAAO;;;;;;;AA1KtC,wBAoLE"}
@@ -28,6 +28,7 @@ declare const _default: {
28
28
  numberOfAllContentTypes: number;
29
29
  numberOfComponents: number;
30
30
  numberOfDynamicZones: number;
31
+ numberOfContentTypeFolders: number;
31
32
  };
32
33
  } | undefined>;
33
34
  information(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,wBAeE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,wBAeE"}
@@ -244,6 +244,7 @@ declare let admin: {
244
244
  numberOfAllContentTypes: number;
245
245
  numberOfComponents: number;
246
246
  numberOfDynamicZones: number;
247
+ numberOfContentTypeFolders: number;
247
248
  };
248
249
  } | undefined>;
249
250
  information(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;sBAPG,GAAG;;;;;sBAAH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6Bu9C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA3Bn9C,0BAAW,EAAC,wBAAW;gCAN5B,0BAAW,EAAC,wBACtB;;CAqBJ,CAAC;AAUF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"AAeA,QAAA,IAAI,KAAK;;;;;;;;;;;;;;;;;;;;;;sBAPG,GAAG;;;;;sBAAH,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6Bu9C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA3Bn9C,0BAAW,EAAC,wBAAW;gCAN5B,0BAAW,EAAC,wBACtB;;CAqBJ,CAAC;AAUF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/api-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-token.d.ts","sourceRoot":"","sources":["../../../../server/src/services/api-token.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/transfer/token.ts"],"names":[],"mappings":"AAIA,OAAO,eAAe,CAAC;AAGvB,OAAO,EAEL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EAEd,MAAM,uCAAuC,CAAC;AAoB/C;;GAEG;AACH,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,sBAAsB,EAAE,CAStD,CAAC;AAiBF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,YAAY,CAAC,KACZ,UAAU,IAAI,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAEvC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GAAU,YAAY,kBAAkB,KAAG,OAAO,CAAC,aAAa,CA0C3E,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GACV,IAAI,MAAM,GAAG,MAAM,EACnB,YAAY,kBAAkB,KAC7B,OAAO,CAAC,sBAAsB,CA8DhC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAMzE,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,KAAK,GACT,cAAoB;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KACA,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAcvC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAEjF,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAE5E,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GACV,cAAoB;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KACA,OAAO,CAAC,OAAO,CAIjB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,aAAa,CAoBpE,CAAC;AAeF;;GAEG;AACH,QAAA,MAAM,IAAI,GAAI,WAAW,MAAM,KAAG,MAWjC,CAAC;AAEF,QAAA,MAAM,kBAAkB,YAevB,CAAC;AA6DF,OAAO,EACL,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,UAAU,EACV,IAAI,EACJ,kBAAkB,GACnB,CAAC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../../server/src/services/transfer/token.ts"],"names":[],"mappings":"AAIA,OAAO,eAAe,CAAC;AAIvB,OAAO,EAEL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EAEd,MAAM,uCAAuC,CAAC;AAoB/C;;GAEG;AACH,QAAA,MAAM,IAAI,QAAa,OAAO,CAAC,sBAAsB,EAAE,CAStD,CAAC;AAiBF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,YAAY,CAAC,KACZ,UAAU,IAAI,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAEvC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GAAU,YAAY,kBAAkB,KAAG,OAAO,CAAC,aAAa,CAoD3E,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GACV,IAAI,MAAM,GAAG,MAAM,EACnB,YAAY,kBAAkB,KAC7B,OAAO,CAAC,sBAAsB,CAqFhC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAgBzE,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,KAAK,GACT,cAAoB;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KACA,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAcvC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAEjF,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAE5E,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,MAAM,GACV,cAAoB;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,KACA,OAAO,CAAC,OAAO,CAIjB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAU,IAAI,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,aAAa,CA0BpE,CAAC;AAeF;;GAEG;AACH,QAAA,MAAM,IAAI,GAAI,WAAW,MAAM,KAAG,MAWjC,CAAC;AAEF,QAAA,MAAM,kBAAkB,YAevB,CAAC;AA6DF,OAAO,EACL,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,UAAU,EACV,IAAI,EACJ,kBAAkB,GACnB,CAAC"}
@@ -100,6 +100,7 @@ export declare namespace TelemetryProperties {
100
100
  numberOfAllContentTypes: number;
101
101
  numberOfComponents: number;
102
102
  numberOfDynamicZones: number;
103
+ numberOfContentTypeFolders: number;
103
104
  };
104
105
  error?: errors.ApplicationError;
105
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../shared/contracts/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../shared/contracts/admin.ts"],"names":[],"mappings":"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"}