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.
- package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
- package/dist/database/queryValidation/validateSearchParams.js +14 -9
- package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
- package/dist/exports/shared.d.ts +1 -1
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +1 -1
- package/dist/exports/shared.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.js +3 -3
- package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
- package/dist/fields/baseFields/slug/generateSlug.spec.js +22 -0
- package/dist/fields/baseFields/slug/generateSlug.spec.js.map +1 -0
- package/dist/index.bundled.d.ts +1 -1
- package/dist/utilities/formatAdminURL.d.ts +1 -0
- package/dist/utilities/formatAdminURL.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.js +22 -4
- package/dist/utilities/formatAdminURL.js.map +1 -1
- package/dist/utilities/formatAdminURL.spec.js +98 -2
- package/dist/utilities/formatAdminURL.spec.js.map +1 -1
- package/dist/utilities/handleEndpoints.d.ts.map +1 -1
- package/dist/utilities/handleEndpoints.js +5 -3
- package/dist/utilities/handleEndpoints.js.map +1 -1
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts +4 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts.map +1 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js +248 -0
- package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -0
- package/dist/utilities/telemetry/featureInfo/types.d.ts +62 -0
- package/dist/utilities/telemetry/featureInfo/types.d.ts.map +1 -0
- package/dist/utilities/telemetry/featureInfo/types.js +3 -0
- package/dist/utilities/telemetry/featureInfo/types.js.map +1 -0
- package/dist/utilities/telemetry/getProjectContext.d.ts +14 -0
- package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
- package/dist/utilities/telemetry/getProjectContext.js +36 -0
- package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
- package/dist/utilities/telemetry/index.d.ts +7 -1
- package/dist/utilities/telemetry/index.d.ts.map +1 -1
- package/dist/utilities/telemetry/index.js +22 -0
- package/dist/utilities/telemetry/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/auth/baseFields/apiKey.d.ts +0 -3
- package/dist/auth/baseFields/apiKey.d.ts.map +0 -1
- package/dist/auth/baseFields/apiKey.js +0 -59
- 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 @@
|
|
|
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;
|
|
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.
|
|
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.
|
|
119
|
+
"@payloadcms/translations": "3.90.2"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
122
|
"@hyrious/esbuild-plugin-commonjs": "0.2.6",
|
|
@@ -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"}
|