payload 3.90.0 → 3.90.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  2. package/dist/database/queryValidation/validateSearchParams.js +14 -9
  3. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  4. package/dist/exports/shared.d.ts +1 -1
  5. package/dist/exports/shared.d.ts.map +1 -1
  6. package/dist/exports/shared.js +1 -1
  7. package/dist/exports/shared.js.map +1 -1
  8. package/dist/fields/baseFields/slug/generateSlug.js +3 -3
  9. package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
  10. package/dist/fields/baseFields/slug/generateSlug.spec.js +22 -0
  11. package/dist/fields/baseFields/slug/generateSlug.spec.js.map +1 -0
  12. package/dist/index.bundled.d.ts +1 -1
  13. package/dist/utilities/formatAdminURL.d.ts +1 -0
  14. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  15. package/dist/utilities/formatAdminURL.js +22 -4
  16. package/dist/utilities/formatAdminURL.js.map +1 -1
  17. package/dist/utilities/formatAdminURL.spec.js +98 -2
  18. package/dist/utilities/formatAdminURL.spec.js.map +1 -1
  19. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  20. package/dist/utilities/handleEndpoints.js +5 -3
  21. package/dist/utilities/handleEndpoints.js.map +1 -1
  22. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts +4 -0
  23. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts.map +1 -0
  24. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js +248 -0
  25. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -0
  26. package/dist/utilities/telemetry/featureInfo/types.d.ts +62 -0
  27. package/dist/utilities/telemetry/featureInfo/types.d.ts.map +1 -0
  28. package/dist/utilities/telemetry/featureInfo/types.js +3 -0
  29. package/dist/utilities/telemetry/featureInfo/types.js.map +1 -0
  30. package/dist/utilities/telemetry/getProjectContext.d.ts +14 -0
  31. package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
  32. package/dist/utilities/telemetry/getProjectContext.js +36 -0
  33. package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
  34. package/dist/utilities/telemetry/index.d.ts +7 -1
  35. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  36. package/dist/utilities/telemetry/index.js +22 -0
  37. package/dist/utilities/telemetry/index.js.map +1 -1
  38. package/package.json +2 -2
  39. package/dist/auth/baseFields/apiKey.d.ts +0 -3
  40. package/dist/auth/baseFields/apiKey.d.ts.map +0 -1
  41. package/dist/auth/baseFields/apiKey.js +0 -59
  42. package/dist/auth/baseFields/apiKey.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ export type RichTextFeature = 'blocks' | 'relationship' | 'table' | 'upload';
2
+ type CompleteFeatureInfo = {
3
+ adminCustomization: {
4
+ customAdminComponentCount: number;
5
+ customAdminViewCount: number;
6
+ customDashboardWidgetCount: number;
7
+ };
8
+ authentication: {
9
+ apiKeyCollectionCount: number;
10
+ authCollectionCount: number;
11
+ customAuthStrategyCount: number;
12
+ localAuthDisabledCollectionCount: number;
13
+ sessionsDisabledCollectionCount: number;
14
+ usernameCollectionCount: number;
15
+ verifiedCollectionCount: number;
16
+ };
17
+ basicDenominators: {
18
+ collectionCount: number;
19
+ globalCount: number;
20
+ };
21
+ i18n: {
22
+ hasCustomAdminTranslations: boolean;
23
+ supportedAdminLanguageCount: number;
24
+ };
25
+ jobsAndQueues: {
26
+ jobsAutoRunConfigured: boolean;
27
+ jobsConcurrencyEnabled: boolean;
28
+ jobsEnabled: boolean;
29
+ jobsSchedulingEnabled: boolean;
30
+ taskCount: number;
31
+ workflowCount: number;
32
+ };
33
+ orderableCollectionCount: number;
34
+ previewAndLivePreview: {
35
+ livePreviewCollectionCount: number;
36
+ livePreviewGlobalCount: number;
37
+ previewCollectionCount: number;
38
+ previewGlobalCount: number;
39
+ };
40
+ queryPresetCollectionCount: number;
41
+ richTextFeatures: RichTextFeature[];
42
+ trashCollectionCount: number;
43
+ uploadAndMedia: {
44
+ cropDisabledCollectionCount: number;
45
+ focalPointDisabledCollectionCount: number;
46
+ imageSizesCollectionCount: number;
47
+ mimeRestrictedCollectionCount: number;
48
+ uploadCollectionCount: number;
49
+ };
50
+ versionsAndDrafts: {
51
+ autosaveEntityCount: number;
52
+ draftCollectionCount: number;
53
+ draftGlobalCount: number;
54
+ scheduledPublishingEntityCount: number;
55
+ versionsDisabledCollectionCount: number;
56
+ versionsDisabledGlobalCount: number;
57
+ };
58
+ };
59
+ /** Feature families are omitted individually if their collection fails. */
60
+ export type FeatureInfo = Partial<CompleteFeatureInfo>;
61
+ export {};
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utilities/telemetry/featureInfo/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5E,KAAK,mBAAmB,GAAG;IACzB,kBAAkB,EAAE;QAClB,yBAAyB,EAAE,MAAM,CAAA;QACjC,oBAAoB,EAAE,MAAM,CAAA;QAC5B,0BAA0B,EAAE,MAAM,CAAA;KACnC,CAAA;IACD,cAAc,EAAE;QACd,qBAAqB,EAAE,MAAM,CAAA;QAC7B,mBAAmB,EAAE,MAAM,CAAA;QAC3B,uBAAuB,EAAE,MAAM,CAAA;QAC/B,gCAAgC,EAAE,MAAM,CAAA;QACxC,+BAA+B,EAAE,MAAM,CAAA;QACvC,uBAAuB,EAAE,MAAM,CAAA;QAC/B,uBAAuB,EAAE,MAAM,CAAA;KAChC,CAAA;IACD,iBAAiB,EAAE;QACjB,eAAe,EAAE,MAAM,CAAA;QACvB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,IAAI,EAAE;QACJ,0BAA0B,EAAE,OAAO,CAAA;QACnC,2BAA2B,EAAE,MAAM,CAAA;KACpC,CAAA;IACD,aAAa,EAAE;QACb,qBAAqB,EAAE,OAAO,CAAA;QAC9B,sBAAsB,EAAE,OAAO,CAAA;QAC/B,WAAW,EAAE,OAAO,CAAA;QACpB,qBAAqB,EAAE,OAAO,CAAA;QAC9B,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,wBAAwB,EAAE,MAAM,CAAA;IAChC,qBAAqB,EAAE;QACrB,0BAA0B,EAAE,MAAM,CAAA;QAClC,sBAAsB,EAAE,MAAM,CAAA;QAC9B,sBAAsB,EAAE,MAAM,CAAA;QAC9B,kBAAkB,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,0BAA0B,EAAE,MAAM,CAAA;IAClC,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE;QACd,2BAA2B,EAAE,MAAM,CAAA;QACnC,iCAAiC,EAAE,MAAM,CAAA;QACzC,yBAAyB,EAAE,MAAM,CAAA;QACjC,6BAA6B,EAAE,MAAM,CAAA;QACrC,qBAAqB,EAAE,MAAM,CAAA;KAC9B,CAAA;IACD,iBAAiB,EAAE;QACjB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,oBAAoB,EAAE,MAAM,CAAA;QAC5B,gBAAgB,EAAE,MAAM,CAAA;QACxB,8BAA8B,EAAE,MAAM,CAAA;QACtC,+BAA+B,EAAE,MAAM,CAAA;QACvC,2BAA2B,EAAE,MAAM,CAAA;KACpC,CAAA;CACF,CAAA;AAED,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Feature families are omitted individually if their collection fails. */ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utilities/telemetry/featureInfo/types.ts"],"sourcesContent":["export type RichTextFeature = 'blocks' | 'relationship' | 'table' | 'upload'\n\ntype CompleteFeatureInfo = {\n adminCustomization: {\n customAdminComponentCount: number\n customAdminViewCount: number\n customDashboardWidgetCount: number\n }\n authentication: {\n apiKeyCollectionCount: number\n authCollectionCount: number\n customAuthStrategyCount: number\n localAuthDisabledCollectionCount: number\n sessionsDisabledCollectionCount: number\n usernameCollectionCount: number\n verifiedCollectionCount: number\n }\n basicDenominators: {\n collectionCount: number\n globalCount: number\n }\n i18n: {\n hasCustomAdminTranslations: boolean\n supportedAdminLanguageCount: number\n }\n jobsAndQueues: {\n jobsAutoRunConfigured: boolean\n jobsConcurrencyEnabled: boolean\n jobsEnabled: boolean\n jobsSchedulingEnabled: boolean\n taskCount: number\n workflowCount: number\n }\n orderableCollectionCount: number\n previewAndLivePreview: {\n livePreviewCollectionCount: number\n livePreviewGlobalCount: number\n previewCollectionCount: number\n previewGlobalCount: number\n }\n queryPresetCollectionCount: number\n richTextFeatures: RichTextFeature[]\n trashCollectionCount: number\n uploadAndMedia: {\n cropDisabledCollectionCount: number\n focalPointDisabledCollectionCount: number\n imageSizesCollectionCount: number\n mimeRestrictedCollectionCount: number\n uploadCollectionCount: number\n }\n versionsAndDrafts: {\n autosaveEntityCount: number\n draftCollectionCount: number\n draftGlobalCount: number\n scheduledPublishingEntityCount: number\n versionsDisabledCollectionCount: number\n versionsDisabledGlobalCount: number\n }\n}\n\n/** Feature families are omitted individually if their collection fails. */\nexport type FeatureInfo = Partial<CompleteFeatureInfo>\n"],"names":[],"mappings":"AA4DA,yEAAyE,GACzE,WAAsD"}
@@ -0,0 +1,14 @@
1
+ import type { Payload } from '../../types/index.js';
2
+ export type ProjectCohort = 'cloud' | 'enterprise' | 'oss';
3
+ type Args = {
4
+ env?: NodeJS.ProcessEnv;
5
+ packages?: string[];
6
+ payload: Payload;
7
+ plugins: string[];
8
+ };
9
+ export declare const enterprisePackageNames: Set<string>;
10
+ export declare const getProjectContext: ({ env, packages, payload, plugins, }: Args) => {
11
+ projectCohorts: ProjectCohort[];
12
+ };
13
+ export {};
14
+ //# sourceMappingURL=getProjectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectContext.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/getProjectContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,GAAG,KAAK,CAAA;AAE1D,KAAK,IAAI,GAAG;IACV,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,sBAAsB,aAcjC,CAAA;AAEF,eAAO,MAAM,iBAAiB,yCAK3B,IAAI,KAAG;IAAE,cAAc,EAAE,aAAa,EAAE,CAAA;CAoB1C,CAAA"}
@@ -0,0 +1,36 @@
1
+ export const enterprisePackageNames = new Set([
2
+ '@payloadcms/ai-model-adapter',
3
+ '@payloadcms/plugin-ab-testing',
4
+ '@payloadcms/plugin-admin-only',
5
+ '@payloadcms/plugin-ai-embeddings',
6
+ '@payloadcms/plugin-ai-translate',
7
+ '@payloadcms/plugin-audit-logs',
8
+ '@payloadcms/plugin-csm',
9
+ '@payloadcms/plugin-email-builder',
10
+ '@payloadcms/plugin-environments',
11
+ '@payloadcms/plugin-oauth2',
12
+ '@payloadcms/plugin-publication-workflows',
13
+ '@payloadcms/plugin-visual-editing',
14
+ '@payloadcms/visual-editing'
15
+ ]);
16
+ export const getProjectContext = ({ env = process.env, packages = [], payload, plugins })=>{
17
+ const projectCohorts = [];
18
+ if ([
19
+ ...packages,
20
+ ...plugins
21
+ ].some((name)=>enterprisePackageNames.has(name))) {
22
+ projectCohorts.push('enterprise');
23
+ }
24
+ const hasPayloadCloudConfig = payload.config.globals.some((global)=>global.slug === 'payload-cloud-instance');
25
+ if (env.PAYLOAD_CLOUD === 'true' && hasPayloadCloudConfig) {
26
+ projectCohorts.push('cloud');
27
+ }
28
+ if (projectCohorts.length === 0) {
29
+ projectCohorts.push('oss');
30
+ }
31
+ return {
32
+ projectCohorts
33
+ };
34
+ };
35
+
36
+ //# sourceMappingURL=getProjectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utilities/telemetry/getProjectContext.ts"],"sourcesContent":["import type { Payload } from '../../types/index.js'\n\nexport type ProjectCohort = 'cloud' | 'enterprise' | 'oss'\n\ntype Args = {\n env?: NodeJS.ProcessEnv\n packages?: string[]\n payload: Payload\n plugins: string[]\n}\n\nexport const enterprisePackageNames = new Set([\n '@payloadcms/ai-model-adapter',\n '@payloadcms/plugin-ab-testing',\n '@payloadcms/plugin-admin-only',\n '@payloadcms/plugin-ai-embeddings',\n '@payloadcms/plugin-ai-translate',\n '@payloadcms/plugin-audit-logs',\n '@payloadcms/plugin-csm',\n '@payloadcms/plugin-email-builder',\n '@payloadcms/plugin-environments',\n '@payloadcms/plugin-oauth2',\n '@payloadcms/plugin-publication-workflows',\n '@payloadcms/plugin-visual-editing',\n '@payloadcms/visual-editing',\n])\n\nexport const getProjectContext = ({\n env = process.env,\n packages = [],\n payload,\n plugins,\n}: Args): { projectCohorts: ProjectCohort[] } => {\n const projectCohorts: ProjectCohort[] = []\n\n if ([...packages, ...plugins].some((name) => enterprisePackageNames.has(name))) {\n projectCohorts.push('enterprise')\n }\n\n const hasPayloadCloudConfig = payload.config.globals.some(\n (global) => global.slug === 'payload-cloud-instance',\n )\n\n if (env.PAYLOAD_CLOUD === 'true' && hasPayloadCloudConfig) {\n projectCohorts.push('cloud')\n }\n\n if (projectCohorts.length === 0) {\n projectCohorts.push('oss')\n }\n\n return { projectCohorts }\n}\n"],"names":["enterprisePackageNames","Set","getProjectContext","env","process","packages","payload","plugins","projectCohorts","some","name","has","push","hasPayloadCloudConfig","config","globals","global","slug","PAYLOAD_CLOUD","length"],"mappings":"AAWA,OAAO,MAAMA,yBAAyB,IAAIC,IAAI;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD,EAAC;AAEF,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAMC,QAAQD,GAAG,EACjBE,WAAW,EAAE,EACbC,OAAO,EACPC,OAAO,EACF;IACL,MAAMC,iBAAkC,EAAE;IAE1C,IAAI;WAAIH;WAAaE;KAAQ,CAACE,IAAI,CAAC,CAACC,OAASV,uBAAuBW,GAAG,CAACD,QAAQ;QAC9EF,eAAeI,IAAI,CAAC;IACtB;IAEA,MAAMC,wBAAwBP,QAAQQ,MAAM,CAACC,OAAO,CAACN,IAAI,CACvD,CAACO,SAAWA,OAAOC,IAAI,KAAK;IAG9B,IAAId,IAAIe,aAAa,KAAK,UAAUL,uBAAuB;QACzDL,eAAeI,IAAI,CAAC;IACtB;IAEA,IAAIJ,eAAeW,MAAM,KAAK,GAAG;QAC/BX,eAAeI,IAAI,CAAC;IACtB;IAEA,OAAO;QAAEJ;IAAe;AAC1B,EAAC"}
@@ -1,11 +1,14 @@
1
1
  import type { Payload } from '../../types/index.js';
2
2
  import type { AdminInitEvent } from './events/adminInit.js';
3
3
  import type { ServerInitEvent } from './events/serverInit.js';
4
+ import type { FeatureInfo } from './featureInfo/types.js';
5
+ import type { ProjectCohort } from './getProjectContext.js';
4
6
  export type BaseEvent = {
5
7
  ciName: null | string;
6
8
  dbAdapter: string;
7
9
  emailAdapter: null | string;
8
10
  envID: string;
11
+ frameworkAdapter: 'next' | 'tanstack-start' | 'unknown';
9
12
  isCI: boolean;
10
13
  locales: string[];
11
14
  localizationDefaultLocale: null | string;
@@ -13,10 +16,12 @@ export type BaseEvent = {
13
16
  nodeEnv: string;
14
17
  nodeVersion: string;
15
18
  payloadVersion: string;
19
+ plugins: string[];
20
+ projectCohorts: ProjectCohort[];
16
21
  projectID: string;
17
22
  projectIDSource: 'cwd' | 'git' | 'packageJSON' | 'serverURL';
18
23
  uploadAdapters: string[];
19
- };
24
+ } & FeatureInfo;
20
25
  type PackageJSON = {
21
26
  dependencies: Record<string, string | undefined>;
22
27
  name: string;
@@ -28,6 +33,7 @@ type Args = {
28
33
  };
29
34
  export declare const sendEvent: ({ event, payload }: Args) => Promise<void>;
30
35
  export declare const getPayloadVersion: (packageJSON: PackageJSON) => string;
36
+ export declare const getInstalledPluginSlugs: (payload: Payload) => string[];
31
37
  export declare const getLocalizationInfo: (payload: Payload) => Pick<BaseEvent, "locales" | "localizationDefaultLocale" | "localizationEnabled">;
32
38
  export {};
33
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAM7D,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,IAAI,GAAG,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yBAAyB,EAAE,IAAI,GAAG,MAAM,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAA;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,eAAO,MAAM,SAAS,uBAA8B,IAAI,KAAG,OAAO,CAAC,IAAI,CA2CtE,CAAA;AAiFD,eAAO,MAAM,iBAAiB,gBAAiB,WAAW,KAAG,MAE5D,CAAA;AAED,eAAO,MAAM,mBAAmB,YACrB,OAAO,KACf,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,2BAA2B,GAAG,qBAAqB,CAcjF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utilities/telemetry/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAQ3D,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,IAAI,GAAG,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACvD,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,yBAAyB,EAAE,IAAI,GAAG,MAAM,CAAA;IACxC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,WAAW,CAAA;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB,GAAG,WAAW,CAAA;AAEf,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAChD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA;AAEtD,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,cAAc,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAID,eAAO,MAAM,SAAS,uBAA8B,IAAI,KAAG,OAAO,CAAC,IAAI,CAiDtE,CAAA;AAiFD,eAAO,MAAM,iBAAiB,gBAAiB,WAAW,KAAG,MAE5D,CAAA;AAcD,eAAO,MAAM,uBAAuB,YAAa,OAAO,KAAG,MAAM,EAGiC,CAAA;AAElG,eAAO,MAAM,mBAAmB,YACrB,OAAO,KACf,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,2BAA2B,GAAG,qBAAqB,CAcjF,CAAA"}
@@ -6,6 +6,8 @@ import path from 'path';
6
6
  import { fileURLToPath } from 'url';
7
7
  import { findUp } from '../findUp.js';
8
8
  import { Conf } from './conf/index.js';
9
+ import { getFeatureInfo } from './featureInfo/getFeatureInfo.js';
10
+ import { getProjectContext } from './getProjectContext.js';
9
11
  import { oneWayHash } from './oneWayHash.js';
10
12
  let baseEvent = null;
11
13
  export const sendEvent = async ({ event, payload })=>{
@@ -15,6 +17,8 @@ export const sendEvent = async ({ event, payload })=>{
15
17
  // Only generate the base event once
16
18
  if (!baseEvent) {
17
19
  const { projectID, source: projectIDSource } = getProjectID(payload, packageJSON);
20
+ const plugins = getInstalledPluginSlugs(payload);
21
+ const packages = Object.keys(packageJSON.dependencies ?? {});
18
22
  baseEvent = {
19
23
  ciName: ciInfo.isCI ? ciInfo.name : null,
20
24
  envID: getEnvID(),
@@ -24,9 +28,17 @@ export const sendEvent = async ({ event, payload })=>{
24
28
  payloadVersion: getPayloadVersion(packageJSON),
25
29
  projectID,
26
30
  projectIDSource,
31
+ ...getProjectContext({
32
+ packages,
33
+ payload,
34
+ plugins
35
+ }),
36
+ frameworkAdapter: getFrameworkAdapter(packages),
37
+ ...getFeatureInfo(payload.config),
27
38
  ...getLocalizationInfo(payload),
28
39
  dbAdapter: payload.db.name,
29
40
  emailAdapter: payload.email?.name || null,
41
+ plugins,
30
42
  uploadAdapters: payload.config.upload.adapters
31
43
  };
32
44
  }
@@ -135,6 +147,16 @@ const getPackageJSONID = (payload, packageJSON)=>{
135
147
  export const getPayloadVersion = (packageJSON)=>{
136
148
  return packageJSON?.dependencies?.payload ?? '';
137
149
  };
150
+ const getFrameworkAdapter = (packages)=>{
151
+ if (packages.includes('@payloadcms/tanstack-start')) {
152
+ return 'tanstack-start';
153
+ }
154
+ if (packages.includes('@payloadcms/next')) {
155
+ return 'next';
156
+ }
157
+ return 'unknown';
158
+ };
159
+ export const getInstalledPluginSlugs = (payload)=>(payload.config.plugins ?? []).map((plugin)=>plugin.slug).filter((slug)=>typeof slug === 'string' && slug.startsWith('@payloadcms/'));
138
160
  export const getLocalizationInfo = (payload)=>{
139
161
  if (!payload.config.localization) {
140
162
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utilities/telemetry/index.ts"],"sourcesContent":["import { execSync } from 'child_process'\nimport ciInfo from 'ci-info'\nimport { randomBytes } from 'crypto'\nimport fs from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport type { Payload } from '../../types/index.js'\nimport type { AdminInitEvent } from './events/adminInit.js'\nimport type { ServerInitEvent } from './events/serverInit.js'\n\nimport { findUp } from '../findUp.js'\nimport { Conf } from './conf/index.js'\nimport { oneWayHash } from './oneWayHash.js'\n\nexport type BaseEvent = {\n ciName: null | string\n dbAdapter: string\n emailAdapter: null | string\n envID: string\n isCI: boolean\n locales: string[]\n localizationDefaultLocale: null | string\n localizationEnabled: boolean\n nodeEnv: string\n nodeVersion: string\n payloadVersion: string\n projectID: string\n projectIDSource: 'cwd' | 'git' | 'packageJSON' | 'serverURL'\n uploadAdapters: string[]\n}\n\ntype PackageJSON = {\n dependencies: Record<string, string | undefined>\n name: string\n}\n\ntype TelemetryEvent = AdminInitEvent | ServerInitEvent\n\ntype Args = {\n event: TelemetryEvent\n payload: Payload\n}\n\nlet baseEvent: BaseEvent | null = null\n\nexport const sendEvent = async ({ event, payload }: Args): Promise<void> => {\n try {\n if (payload.config.telemetry !== false) {\n const { packageJSON, packageJSONPath } = await getPackageJSON()\n\n // Only generate the base event once\n if (!baseEvent) {\n const { projectID, source: projectIDSource } = getProjectID(payload, packageJSON!)\n baseEvent = {\n ciName: ciInfo.isCI ? ciInfo.name : null,\n envID: getEnvID(),\n isCI: ciInfo.isCI,\n nodeEnv: process.env.NODE_ENV || 'development',\n nodeVersion: process.version,\n payloadVersion: getPayloadVersion(packageJSON!),\n projectID,\n projectIDSource,\n ...getLocalizationInfo(payload),\n dbAdapter: payload.db.name,\n emailAdapter: payload.email?.name || null,\n uploadAdapters: payload.config.upload.adapters,\n }\n }\n\n if (process.env.PAYLOAD_TELEMETRY_DEBUG) {\n payload.logger.info({\n event: { ...baseEvent, ...event, packageJSONPath },\n msg: 'Telemetry Event',\n })\n return\n }\n\n await fetch('https://telemetry.payloadcms.com/events', {\n body: JSON.stringify({ ...baseEvent, ...event }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n }\n } catch (_) {\n // Eat any errors in sending telemetry event\n }\n}\n\n/**\n * This is a quasi-persistent identifier used to dedupe recurring events. It's\n * generated from random data and completely anonymous.\n */\nconst getEnvID = (): string => {\n const conf = new Conf()\n const ENV_ID = 'envID'\n\n const val = conf.get(ENV_ID)\n if (val) {\n return val as string\n }\n\n const generated = randomBytes(32).toString('hex')\n conf.set(ENV_ID, generated)\n return generated\n}\n\nconst getProjectID = (\n payload: Payload,\n packageJSON: PackageJSON,\n): { projectID: string; source: BaseEvent['projectIDSource'] } => {\n const gitID = getGitID(payload)\n if (gitID) {\n return { projectID: oneWayHash(gitID, payload.secret), source: 'git' }\n }\n\n const packageJSONID = getPackageJSONID(payload, packageJSON)\n if (packageJSONID) {\n return { projectID: oneWayHash(packageJSONID, payload.secret), source: 'packageJSON' }\n }\n\n const serverURL = payload.config.serverURL\n if (serverURL) {\n return { projectID: oneWayHash(serverURL, payload.secret), source: 'serverURL' }\n }\n\n const cwd = process.cwd()\n return { projectID: oneWayHash(cwd, payload.secret), source: 'cwd' }\n}\n\nconst getGitID = (payload: Payload) => {\n try {\n const originBuffer = execSync('git config --local --get remote.origin.url', {\n stdio: 'pipe',\n timeout: 1000,\n })\n\n return oneWayHash(String(originBuffer).trim(), payload.secret)\n } catch (_) {\n return null\n }\n}\n\nconst getPackageJSON = async (): Promise<{\n packageJSON?: PackageJSON\n packageJSONPath: string\n}> => {\n let packageJSONPath = path.resolve(process.cwd(), 'package.json')\n\n if (!fs.existsSync(packageJSONPath)) {\n // Old logic\n const filename = fileURLToPath(import.meta.url)\n const dirname = path.dirname(filename)\n packageJSONPath = (await findUp({\n dir: dirname,\n fileNames: ['package.json'],\n }))!\n }\n\n const jsonContentString = await fs.promises.readFile(packageJSONPath, 'utf-8')\n const jsonContent: PackageJSON = JSON.parse(jsonContentString)\n return { packageJSON: jsonContent, packageJSONPath }\n}\n\nconst getPackageJSONID = (payload: Payload, packageJSON: PackageJSON): string => {\n return oneWayHash(packageJSON.name, payload.secret)\n}\n\nexport const getPayloadVersion = (packageJSON: PackageJSON): string => {\n return packageJSON?.dependencies?.payload ?? ''\n}\n\nexport const getLocalizationInfo = (\n payload: Payload,\n): Pick<BaseEvent, 'locales' | 'localizationDefaultLocale' | 'localizationEnabled'> => {\n if (!payload.config.localization) {\n return {\n locales: [],\n localizationDefaultLocale: null,\n localizationEnabled: false,\n }\n }\n\n return {\n locales: payload.config.localization.localeCodes,\n localizationDefaultLocale: payload.config.localization.defaultLocale,\n localizationEnabled: true,\n }\n}\n"],"names":["execSync","ciInfo","randomBytes","fs","path","fileURLToPath","findUp","Conf","oneWayHash","baseEvent","sendEvent","event","payload","config","telemetry","packageJSON","packageJSONPath","getPackageJSON","projectID","source","projectIDSource","getProjectID","ciName","isCI","name","envID","getEnvID","nodeEnv","process","env","NODE_ENV","nodeVersion","version","payloadVersion","getPayloadVersion","getLocalizationInfo","dbAdapter","db","emailAdapter","email","uploadAdapters","upload","adapters","PAYLOAD_TELEMETRY_DEBUG","logger","info","msg","fetch","body","JSON","stringify","headers","method","_","conf","ENV_ID","val","get","generated","toString","set","gitID","getGitID","secret","packageJSONID","getPackageJSONID","serverURL","cwd","originBuffer","stdio","timeout","String","trim","resolve","existsSync","filename","url","dirname","dir","fileNames","jsonContentString","promises","readFile","jsonContent","parse","dependencies","localization","locales","localizationDefaultLocale","localizationEnabled","localeCodes","defaultLocale"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utilities/telemetry/index.ts"],"sourcesContent":["import { execSync } from 'child_process'\nimport ciInfo from 'ci-info'\nimport { randomBytes } from 'crypto'\nimport fs from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\n\nimport type { Payload } from '../../types/index.js'\nimport type { AdminInitEvent } from './events/adminInit.js'\nimport type { ServerInitEvent } from './events/serverInit.js'\nimport type { FeatureInfo } from './featureInfo/types.js'\nimport type { ProjectCohort } from './getProjectContext.js'\n\nimport { findUp } from '../findUp.js'\nimport { Conf } from './conf/index.js'\nimport { getFeatureInfo } from './featureInfo/getFeatureInfo.js'\nimport { getProjectContext } from './getProjectContext.js'\nimport { oneWayHash } from './oneWayHash.js'\n\nexport type BaseEvent = {\n ciName: null | string\n dbAdapter: string\n emailAdapter: null | string\n envID: string\n frameworkAdapter: 'next' | 'tanstack-start' | 'unknown'\n isCI: boolean\n locales: string[]\n localizationDefaultLocale: null | string\n localizationEnabled: boolean\n nodeEnv: string\n nodeVersion: string\n payloadVersion: string\n plugins: string[]\n projectCohorts: ProjectCohort[]\n projectID: string\n projectIDSource: 'cwd' | 'git' | 'packageJSON' | 'serverURL'\n uploadAdapters: string[]\n} & FeatureInfo\n\ntype PackageJSON = {\n dependencies: Record<string, string | undefined>\n name: string\n}\n\ntype TelemetryEvent = AdminInitEvent | ServerInitEvent\n\ntype Args = {\n event: TelemetryEvent\n payload: Payload\n}\n\nlet baseEvent: BaseEvent | null = null\n\nexport const sendEvent = async ({ event, payload }: Args): Promise<void> => {\n try {\n if (payload.config.telemetry !== false) {\n const { packageJSON, packageJSONPath } = await getPackageJSON()\n\n // Only generate the base event once\n if (!baseEvent) {\n const { projectID, source: projectIDSource } = getProjectID(payload, packageJSON!)\n const plugins = getInstalledPluginSlugs(payload)\n const packages = Object.keys(packageJSON!.dependencies ?? {})\n baseEvent = {\n ciName: ciInfo.isCI ? ciInfo.name : null,\n envID: getEnvID(),\n isCI: ciInfo.isCI,\n nodeEnv: process.env.NODE_ENV || 'development',\n nodeVersion: process.version,\n payloadVersion: getPayloadVersion(packageJSON!),\n projectID,\n projectIDSource,\n ...getProjectContext({ packages, payload, plugins }),\n frameworkAdapter: getFrameworkAdapter(packages),\n ...getFeatureInfo(payload.config),\n ...getLocalizationInfo(payload),\n dbAdapter: payload.db.name,\n emailAdapter: payload.email?.name || null,\n plugins,\n uploadAdapters: payload.config.upload.adapters,\n }\n }\n\n if (process.env.PAYLOAD_TELEMETRY_DEBUG) {\n payload.logger.info({\n event: { ...baseEvent, ...event, packageJSONPath },\n msg: 'Telemetry Event',\n })\n return\n }\n\n await fetch('https://telemetry.payloadcms.com/events', {\n body: JSON.stringify({ ...baseEvent, ...event }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'post',\n })\n }\n } catch (_) {\n // Eat any errors in sending telemetry event\n }\n}\n\n/**\n * This is a quasi-persistent identifier used to dedupe recurring events. It's\n * generated from random data and completely anonymous.\n */\nconst getEnvID = (): string => {\n const conf = new Conf()\n const ENV_ID = 'envID'\n\n const val = conf.get(ENV_ID)\n if (val) {\n return val as string\n }\n\n const generated = randomBytes(32).toString('hex')\n conf.set(ENV_ID, generated)\n return generated\n}\n\nconst getProjectID = (\n payload: Payload,\n packageJSON: PackageJSON,\n): { projectID: string; source: BaseEvent['projectIDSource'] } => {\n const gitID = getGitID(payload)\n if (gitID) {\n return { projectID: oneWayHash(gitID, payload.secret), source: 'git' }\n }\n\n const packageJSONID = getPackageJSONID(payload, packageJSON)\n if (packageJSONID) {\n return { projectID: oneWayHash(packageJSONID, payload.secret), source: 'packageJSON' }\n }\n\n const serverURL = payload.config.serverURL\n if (serverURL) {\n return { projectID: oneWayHash(serverURL, payload.secret), source: 'serverURL' }\n }\n\n const cwd = process.cwd()\n return { projectID: oneWayHash(cwd, payload.secret), source: 'cwd' }\n}\n\nconst getGitID = (payload: Payload) => {\n try {\n const originBuffer = execSync('git config --local --get remote.origin.url', {\n stdio: 'pipe',\n timeout: 1000,\n })\n\n return oneWayHash(String(originBuffer).trim(), payload.secret)\n } catch (_) {\n return null\n }\n}\n\nconst getPackageJSON = async (): Promise<{\n packageJSON?: PackageJSON\n packageJSONPath: string\n}> => {\n let packageJSONPath = path.resolve(process.cwd(), 'package.json')\n\n if (!fs.existsSync(packageJSONPath)) {\n // Old logic\n const filename = fileURLToPath(import.meta.url)\n const dirname = path.dirname(filename)\n packageJSONPath = (await findUp({\n dir: dirname,\n fileNames: ['package.json'],\n }))!\n }\n\n const jsonContentString = await fs.promises.readFile(packageJSONPath, 'utf-8')\n const jsonContent: PackageJSON = JSON.parse(jsonContentString)\n return { packageJSON: jsonContent, packageJSONPath }\n}\n\nconst getPackageJSONID = (payload: Payload, packageJSON: PackageJSON): string => {\n return oneWayHash(packageJSON.name, payload.secret)\n}\n\nexport const getPayloadVersion = (packageJSON: PackageJSON): string => {\n return packageJSON?.dependencies?.payload ?? ''\n}\n\nconst getFrameworkAdapter = (packages: string[]): 'next' | 'tanstack-start' | 'unknown' => {\n if (packages.includes('@payloadcms/tanstack-start')) {\n return 'tanstack-start'\n }\n\n if (packages.includes('@payloadcms/next')) {\n return 'next'\n }\n\n return 'unknown'\n}\n\nexport const getInstalledPluginSlugs = (payload: Payload): string[] =>\n (payload.config.plugins ?? [])\n .map((plugin) => plugin.slug)\n .filter((slug): slug is string => typeof slug === 'string' && slug.startsWith('@payloadcms/'))\n\nexport const getLocalizationInfo = (\n payload: Payload,\n): Pick<BaseEvent, 'locales' | 'localizationDefaultLocale' | 'localizationEnabled'> => {\n if (!payload.config.localization) {\n return {\n locales: [],\n localizationDefaultLocale: null,\n localizationEnabled: false,\n }\n }\n\n return {\n locales: payload.config.localization.localeCodes,\n localizationDefaultLocale: payload.config.localization.defaultLocale,\n localizationEnabled: true,\n }\n}\n"],"names":["execSync","ciInfo","randomBytes","fs","path","fileURLToPath","findUp","Conf","getFeatureInfo","getProjectContext","oneWayHash","baseEvent","sendEvent","event","payload","config","telemetry","packageJSON","packageJSONPath","getPackageJSON","projectID","source","projectIDSource","getProjectID","plugins","getInstalledPluginSlugs","packages","Object","keys","dependencies","ciName","isCI","name","envID","getEnvID","nodeEnv","process","env","NODE_ENV","nodeVersion","version","payloadVersion","getPayloadVersion","frameworkAdapter","getFrameworkAdapter","getLocalizationInfo","dbAdapter","db","emailAdapter","email","uploadAdapters","upload","adapters","PAYLOAD_TELEMETRY_DEBUG","logger","info","msg","fetch","body","JSON","stringify","headers","method","_","conf","ENV_ID","val","get","generated","toString","set","gitID","getGitID","secret","packageJSONID","getPackageJSONID","serverURL","cwd","originBuffer","stdio","timeout","String","trim","resolve","existsSync","filename","url","dirname","dir","fileNames","jsonContentString","promises","readFile","jsonContent","parse","includes","map","plugin","slug","filter","startsWith","localization","locales","localizationDefaultLocale","localizationEnabled","localeCodes","defaultLocale"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.90.0",
3
+ "version": "3.90.2",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -116,7 +116,7 @@
116
116
  "undici": "7.29.0",
117
117
  "uuid": "13.0.2",
118
118
  "ws": "^8.16.0",
119
- "@payloadcms/translations": "3.90.0"
119
+ "@payloadcms/translations": "3.90.2"
120
120
  },
121
121
  "devDependencies": {
122
122
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",
@@ -1,3 +0,0 @@
1
- import type { Field } from '../../fields/config/types.js';
2
- export declare const apiKeyFields: Field[];
3
- //# sourceMappingURL=apiKey.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/apiKey.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;AAOpE,eAAO,MAAM,YAAY,EAoDpB,KAAK,EAAE,CAAA"}
@@ -1,59 +0,0 @@
1
- import crypto from 'crypto';
2
- const encryptKey = ({ req, value })=>value ? req.payload.encrypt(value) : null;
3
- const decryptKey = ({ req, value })=>value ? req.payload.decrypt(value) : undefined;
4
- export const apiKeyFields = [
5
- {
6
- name: 'enableAPIKey',
7
- type: 'checkbox',
8
- admin: {
9
- components: {
10
- Field: false
11
- }
12
- },
13
- label: ({ t })=>t('authentication:enableAPIKey')
14
- },
15
- {
16
- name: 'apiKey',
17
- type: 'text',
18
- admin: {
19
- components: {
20
- Field: false
21
- }
22
- },
23
- hooks: {
24
- afterRead: [
25
- decryptKey
26
- ],
27
- beforeChange: [
28
- encryptKey
29
- ]
30
- },
31
- label: ({ t })=>t('authentication:apiKey')
32
- },
33
- {
34
- name: 'apiKeyIndex',
35
- type: 'text',
36
- admin: {
37
- disabled: true
38
- },
39
- hidden: true,
40
- hooks: {
41
- beforeValidate: [
42
- ({ data, req, value })=>{
43
- if (data?.apiKey === false || data?.apiKey === null) {
44
- return null;
45
- }
46
- if (data?.enableAPIKey === false || data?.enableAPIKey === null) {
47
- return null;
48
- }
49
- if (data?.apiKey) {
50
- return crypto.createHmac('sha256', req.payload.secret).update(data.apiKey).digest('hex');
51
- }
52
- return value;
53
- }
54
- ]
55
- }
56
- }
57
- ];
58
-
59
- //# sourceMappingURL=apiKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst encryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.encrypt(value as string) : null\nconst decryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.decrypt(value as string) : undefined\n\nexport const apiKeyFields = [\n {\n name: 'enableAPIKey',\n type: 'checkbox',\n admin: {\n components: {\n Field: false,\n },\n },\n label: ({ t }) => t('authentication:enableAPIKey'),\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: false,\n },\n },\n hooks: {\n afterRead: [decryptKey],\n beforeChange: [encryptKey],\n },\n label: ({ t }) => t('authentication:apiKey'),\n },\n {\n name: 'apiKeyIndex',\n type: 'text',\n admin: {\n disabled: true,\n },\n hidden: true,\n hooks: {\n beforeValidate: [\n ({ data, req, value }) => {\n if (data?.apiKey === false || data?.apiKey === null) {\n return null\n }\n if (data?.enableAPIKey === false || data?.enableAPIKey === null) {\n return null\n }\n if (data?.apiKey) {\n return crypto\n .createHmac('sha256', req.payload.secret)\n .update(data.apiKey as string)\n .digest('hex')\n }\n return value\n },\n ],\n },\n },\n] as Field[]\n"],"names":["crypto","encryptKey","req","value","payload","encrypt","decryptKey","decrypt","undefined","apiKeyFields","name","type","admin","components","Field","label","t","hooks","afterRead","beforeChange","disabled","hidden","beforeValidate","data","apiKey","enableAPIKey","createHmac","secret","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAI3B,MAAMC,aAAwB,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACC,OAAO,CAACF,SAAmB;AACjD,MAAMG,aAAwB,CAAC,EAAEJ,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACG,OAAO,CAACJ,SAAmBK;AAEjD,OAAO,MAAMC,eAAe;IAC1B;QACEC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO;YACT;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO;YACT;QACF;QACAG,OAAO;YACLC,WAAW;gBAACZ;aAAW;YACvBa,cAAc;gBAAClB;aAAW;QAC5B;QACAc,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLQ,UAAU;QACZ;QACAC,QAAQ;QACRJ,OAAO;YACLK,gBAAgB;gBACd,CAAC,EAAEC,IAAI,EAAErB,GAAG,EAAEC,KAAK,EAAE;oBACnB,IAAIoB,MAAMC,WAAW,SAASD,MAAMC,WAAW,MAAM;wBACnD,OAAO;oBACT;oBACA,IAAID,MAAME,iBAAiB,SAASF,MAAME,iBAAiB,MAAM;wBAC/D,OAAO;oBACT;oBACA,IAAIF,MAAMC,QAAQ;wBAChB,OAAOxB,OACJ0B,UAAU,CAAC,UAAUxB,IAAIE,OAAO,CAACuB,MAAM,EACvCC,MAAM,CAACL,KAAKC,MAAM,EAClBK,MAAM,CAAC;oBACZ;oBACA,OAAO1B;gBACT;aACD;QACH;IACF;CACD,CAAW"}