payload-zitadel-plugin 0.5.1 → 0.5.3

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/README.md CHANGED
@@ -10,7 +10,7 @@ Thus, the user collection in PayloadCMS becomes just a shadow of the information
10
10
  ## Install
11
11
 
12
12
  ```shell
13
- pnpm add payload-zitadel-plugin@0.5.1
13
+ pnpm add payload-zitadel-plugin@0.5.3
14
14
  ```
15
15
 
16
16
  ## Configuration
@@ -144,12 +144,18 @@ export default withPayload({
144
144
  ZITADEL_API_CLIENT_ID: '123456789123456789',
145
145
  ZITADEL_API_CLIENT_SECRET: '...',
146
146
  // if you use JWT auth
147
- ZITADEL_API_JWT='{"type":"application","keyId":"123456789123456789","key":"-----BEGIN RSA PRIVATE KEY-----\n ... \n-----END RSA PRIVATE KEY-----\n","appId":"123456789123456789","clientId":"123456789123456789"}'
147
+ ZITADEL_API_JWT = '{"type":"application","keyId":"123456789123456789","key":"-----BEGIN RSA PRIVATE KEY-----\n ... \n-----END RSA PRIVATE KEY-----\n","appId":"123456789123456789","clientId":"123456789123456789"}'
148
148
  },
149
149
  ...
150
150
  })
151
151
  ```
152
152
 
153
+ Also, every environment variable has a `<ENV_NAME>_FILE` variant if you want to load the data via Docker secrets.
154
+ For instance, you could set the `ZITADEL_API_JWT_FILE=/run/secrets/zitadel_api_jwt` environment variable
155
+ and provide a Docker secret `zitadel_api_jwt` via Docker Compose.
156
+ Please keep in mind that for the `<ENV_NAME>_FILE` variant to be used,
157
+ the `<ENV_NAME>` variable needs to be unset (as the base variable takes precedence).
158
+
153
159
  ### further configuration
154
160
 
155
161
  If you want to use the Zitadel profile picture as the avatar in PayloadCMS,
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { ZitadelPlugin } from './types.js';
1
+ import type { ZitadelPlugin } from './types.js';
2
2
  export declare const zitadelPlugin: ZitadelPlugin;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiC,aAAa,EAAC,MAAM,YAAY,CAAA;AAIxE,eAAO,MAAM,aAAa,EAAE,aA4M3B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAiC,aAAa,EAAC,MAAM,YAAY,CAAA;AAG7E,eAAO,MAAM,aAAa,EAAE,aA6M3B,CAAA"}
package/dist/index.js CHANGED
@@ -1,13 +1,20 @@
1
+ import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER } from 'next/constants.js';
1
2
  import { cookies } from 'next/headers.js';
2
3
  import { AvatarComponent, LoginButtonComponent } from './components/index.js';
3
4
  import { COOKIES, DEFAULT_CONFIG, ERRORS, ROUTES } from './constants.js';
4
5
  import { authorize, callback } from './handlers/index.js';
5
6
  import { zitadelStrategy } from './strategy.js';
6
7
  import { translations } from './translations.js';
7
- import { defaultRedirect, getAuthSlug, requestRedirect } from './utils/index.js';
8
- import { PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER } from 'next/constants.js';
8
+ import { defaultRedirect, getAuthSlug, loadEnv, requestRedirect } from './utils/index.js';
9
9
  export const zitadelPlugin = (config)=>{
10
- let { issuerURL = process.env.ZITADEL_URL ?? '', clientId = process.env.ZITADEL_CLIENT_ID ?? '', fields, strategyName = DEFAULT_CONFIG.strategyName, api, callbacks, components } = config ?? {};
10
+ const envs = loadEnv([
11
+ 'ZITADEL_URL',
12
+ 'ZITADEL_CLIENT_ID',
13
+ 'ZITADEL_API_JWT',
14
+ 'ZITADEL_API_CLIENT_ID',
15
+ 'ZITADEL_API_CLIENT_SECRET'
16
+ ]);
17
+ let { issuerURL = envs.ZITADEL_URL ?? '', clientId = envs.ZITADEL_CLIENT_ID ?? '', fields, strategyName = DEFAULT_CONFIG.strategyName, api, callbacks, components } = config ?? {};
11
18
  let errors = [];
12
19
  if (!issuerURL) {
13
20
  errors.push(ERRORS.issuerURL);
@@ -16,25 +23,25 @@ export const zitadelPlugin = (config)=>{
16
23
  errors.push(ERRORS.clientId);
17
24
  }
18
25
  if (!api) {
19
- if (process.env.ZITADEL_API_JWT) {
26
+ if (envs.ZITADEL_API_JWT) {
20
27
  try {
21
28
  api = {
22
29
  type: 'jwt',
23
- jwt: JSON.parse(process.env.ZITADEL_API_JWT)
30
+ jwt: JSON.parse(envs.ZITADEL_API_JWT)
24
31
  };
25
32
  } catch (e) {
26
33
  errors.push(ERRORS.apiJWT);
27
34
  }
28
- } else if (process.env.ZITADEL_API_CLIENT_ID) {
29
- const clientSecret = process.env.ZITADEL_API_CLIENT_SECRET ?? '';
30
- if (!clientSecret) {
35
+ } else if (envs.ZITADEL_API_CLIENT_ID) {
36
+ if (envs.ZITADEL_API_CLIENT_SECRET) {
37
+ api = {
38
+ type: 'basic',
39
+ clientId: envs.ZITADEL_API_CLIENT_ID,
40
+ clientSecret: envs.ZITADEL_API_CLIENT_SECRET
41
+ };
42
+ } else {
31
43
  errors.push(ERRORS.apiClientSecret);
32
44
  }
33
- api = {
34
- type: 'basic',
35
- clientId: process.env.ZITADEL_API_CLIENT_ID,
36
- clientSecret
37
- };
38
45
  }
39
46
  }
40
47
  if (errors.length && [
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {cookies} from 'next/headers.js'\nimport {AvatarComponent, LoginButtonComponent} from './components/index.js'\nimport {COOKIES, DEFAULT_CONFIG, ERRORS, ROUTES} from './constants.js'\nimport {authorize, callback} from './handlers/index.js'\nimport {zitadelStrategy} from './strategy.js'\nimport {translations} from './translations.js'\nimport {ZitadelAvatarProps, ZitadelJWT, ZitadelPlugin} from './types.js'\nimport {defaultRedirect, getAuthSlug, requestRedirect} from './utils/index.js'\nimport {PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER} from 'next/constants.js'\n\nexport const zitadelPlugin: ZitadelPlugin = (config) => {\n\n let {\n issuerURL = process.env.ZITADEL_URL ?? '',\n clientId = process.env.ZITADEL_CLIENT_ID ?? '',\n fields,\n strategyName = DEFAULT_CONFIG.strategyName,\n api,\n callbacks,\n components\n } = config ?? {}\n\n let errors = []\n\n if (!issuerURL) {\n errors.push(ERRORS.issuerURL)\n }\n\n if (!clientId) {\n errors.push(ERRORS.clientId)\n }\n\n if (!api) {\n\n if (process.env.ZITADEL_API_JWT) {\n\n try {\n api = {\n type: 'jwt',\n jwt: JSON.parse(process.env.ZITADEL_API_JWT) as ZitadelJWT\n }\n } catch (e) {\n errors.push(ERRORS.apiJWT)\n }\n\n } else if (process.env.ZITADEL_API_CLIENT_ID) {\n\n const clientSecret = process.env.ZITADEL_API_CLIENT_SECRET ?? ''\n if (!clientSecret) {\n errors.push(ERRORS.apiClientSecret)\n }\n\n api = {\n type: 'basic',\n clientId: process.env.ZITADEL_API_CLIENT_ID,\n clientSecret\n }\n\n }\n\n }\n\n if (errors.length && [PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER].includes(process.env.NEXT_PHASE ?? '')) {\n console.warn('The following errors occurred during initialization of the payload zitadel plugin:')\n for (const error of errors)\n console.warn(error)\n }\n\n const fieldsConfig = {...DEFAULT_CONFIG.fields, ...fields}\n\n return (incomingConfig) => ({\n ...incomingConfig,\n admin: {\n ...incomingConfig.admin,\n ...components?.avatar ? {} : {\n avatar: {\n Component: {\n ...AvatarComponent,\n clientProps: {\n imageFieldName: fieldsConfig.image.name\n } satisfies ZitadelAvatarProps\n }\n }\n },\n ...components?.loginButton ? {} : {\n components: {\n ...incomingConfig.admin?.components,\n afterLogin: [\n ...incomingConfig.admin?.components?.afterLogin ?? [],\n {\n ...LoginButtonComponent,\n serverProps: {\n label: components?.loginButton?.label ?? DEFAULT_CONFIG.label\n }\n }\n ]\n }\n }\n },\n collections: (incomingConfig.collections || []).map((collection) => {\n\n const authConfig = typeof collection.auth == 'boolean' ? {} : collection.auth\n\n return {\n ...collection,\n ...collection.slug == getAuthSlug(incomingConfig) ? {\n auth: {\n ...authConfig,\n disableLocalStrategy: true,\n strategies: [\n ...authConfig?.strategies ?? [],\n zitadelStrategy({\n strategyName: strategyName,\n issuerURL,\n fields: fieldsConfig,\n api: api ?? false\n })\n ]\n },\n hooks: {\n afterLogout: [async () => (await cookies()).set(COOKIES.logout)]\n },\n endpoints: [\n {\n path: ROUTES.authorize,\n method: 'get',\n handler: authorize({\n issuerURL,\n clientId\n })\n },\n {\n path: ROUTES.callback,\n method: 'get',\n handler: callback({\n issuerURL,\n clientId,\n fields: fieldsConfig,\n afterLogin: callbacks?.afterLogin ?? defaultRedirect,\n afterLogout: callbacks?.afterLogout ?? defaultRedirect\n })\n },\n {\n path: ROUTES.end_session,\n method: 'get',\n handler: (req) => requestRedirect({req, issuerURL, clientId, invokedBy: 'end_session'})\n }\n ],\n fields: [\n ...collection.fields,\n {\n ...fieldsConfig.id,\n type: 'text',\n admin: {\n readOnly: true\n },\n index: true,\n unique: true,\n required: true\n },\n {\n ...fieldsConfig.name,\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.email,\n type: 'email',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.image,\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.roles,\n type: 'array',\n admin: {\n readOnly: true\n },\n fields: [\n {\n ...fieldsConfig.roleFields.name,\n type: 'text'\n }\n ]\n }\n ]\n } : {}\n }\n }),\n i18n: {\n ...incomingConfig.i18n,\n translations: {\n ...incomingConfig.i18n?.translations,\n de: {\n ...incomingConfig.i18n?.translations?.de,\n ...translations.de\n },\n en: {\n ...incomingConfig.i18n?.translations?.en,\n ...translations.en\n }\n }\n }\n })\n\n}"],"names":["cookies","AvatarComponent","LoginButtonComponent","COOKIES","DEFAULT_CONFIG","ERRORS","ROUTES","authorize","callback","zitadelStrategy","translations","defaultRedirect","getAuthSlug","requestRedirect","PHASE_DEVELOPMENT_SERVER","PHASE_PRODUCTION_SERVER","zitadelPlugin","config","issuerURL","process","env","ZITADEL_URL","clientId","ZITADEL_CLIENT_ID","fields","strategyName","api","callbacks","components","errors","push","ZITADEL_API_JWT","type","jwt","JSON","parse","e","apiJWT","ZITADEL_API_CLIENT_ID","clientSecret","ZITADEL_API_CLIENT_SECRET","apiClientSecret","length","includes","NEXT_PHASE","console","warn","error","fieldsConfig","incomingConfig","admin","avatar","Component","clientProps","imageFieldName","image","name","loginButton","afterLogin","serverProps","label","collections","map","collection","authConfig","auth","slug","disableLocalStrategy","strategies","hooks","afterLogout","set","logout","endpoints","path","method","handler","end_session","req","invokedBy","id","readOnly","index","unique","required","email","roles","roleFields","i18n","de","en"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER} from 'next/constants.js'\nimport {cookies} from 'next/headers.js'\nimport {AvatarComponent, LoginButtonComponent} from './components/index.js'\nimport {COOKIES, DEFAULT_CONFIG, ERRORS, ROUTES} from './constants.js'\nimport {authorize, callback} from './handlers/index.js'\nimport {zitadelStrategy} from './strategy.js'\nimport {translations} from './translations.js'\nimport type {ZitadelAvatarProps, ZitadelJWT, ZitadelPlugin} from './types.js'\nimport {defaultRedirect, getAuthSlug, loadEnv, requestRedirect} from './utils/index.js'\n\nexport const zitadelPlugin: ZitadelPlugin = (config) => {\n\n const envs = loadEnv(['ZITADEL_URL', 'ZITADEL_CLIENT_ID', 'ZITADEL_API_JWT', 'ZITADEL_API_CLIENT_ID', 'ZITADEL_API_CLIENT_SECRET'])\n\n let {\n issuerURL = envs.ZITADEL_URL ?? '',\n clientId = envs.ZITADEL_CLIENT_ID ?? '',\n fields,\n strategyName = DEFAULT_CONFIG.strategyName,\n api,\n callbacks,\n components\n } = config ?? {}\n\n let errors = []\n\n if (!issuerURL) {\n errors.push(ERRORS.issuerURL)\n }\n\n if (!clientId) {\n errors.push(ERRORS.clientId)\n }\n\n if (!api) {\n\n if (envs.ZITADEL_API_JWT) {\n\n try {\n api = {\n type: 'jwt',\n jwt: JSON.parse(envs.ZITADEL_API_JWT) as ZitadelJWT\n }\n } catch (e) {\n errors.push(ERRORS.apiJWT)\n }\n\n } else if (envs.ZITADEL_API_CLIENT_ID) {\n\n if (envs.ZITADEL_API_CLIENT_SECRET) {\n api = {\n type: 'basic',\n clientId: envs.ZITADEL_API_CLIENT_ID,\n clientSecret: envs.ZITADEL_API_CLIENT_SECRET\n }\n } else {\n errors.push(ERRORS.apiClientSecret)\n }\n\n }\n\n }\n\n if (errors.length && [PHASE_DEVELOPMENT_SERVER, PHASE_PRODUCTION_SERVER].includes(process.env.NEXT_PHASE ?? '')) {\n console.warn('The following errors occurred during initialization of the payload zitadel plugin:')\n for (const error of errors)\n console.warn(error)\n }\n\n const fieldsConfig = {...DEFAULT_CONFIG.fields, ...fields}\n\n return (incomingConfig) => ({\n ...incomingConfig,\n admin: {\n ...incomingConfig.admin,\n ...components?.avatar ? {} : {\n avatar: {\n Component: {\n ...AvatarComponent,\n clientProps: {\n imageFieldName: fieldsConfig.image.name\n } satisfies ZitadelAvatarProps\n }\n }\n },\n ...components?.loginButton ? {} : {\n components: {\n ...incomingConfig.admin?.components,\n afterLogin: [\n ...incomingConfig.admin?.components?.afterLogin ?? [],\n {\n ...LoginButtonComponent,\n serverProps: {\n label: components?.loginButton?.label ?? DEFAULT_CONFIG.label\n }\n }\n ]\n }\n }\n },\n collections: (incomingConfig.collections || []).map((collection) => {\n\n const authConfig = typeof collection.auth == 'boolean' ? {} : collection.auth\n\n return {\n ...collection,\n ...collection.slug == getAuthSlug(incomingConfig) ? {\n auth: {\n ...authConfig,\n disableLocalStrategy: true,\n strategies: [\n ...authConfig?.strategies ?? [],\n zitadelStrategy({\n strategyName: strategyName,\n issuerURL,\n fields: fieldsConfig,\n api: api ?? false\n })\n ]\n },\n hooks: {\n afterLogout: [async () => (await cookies()).set(COOKIES.logout)]\n },\n endpoints: [\n {\n path: ROUTES.authorize,\n method: 'get',\n handler: authorize({\n issuerURL,\n clientId\n })\n },\n {\n path: ROUTES.callback,\n method: 'get',\n handler: callback({\n issuerURL,\n clientId,\n fields: fieldsConfig,\n afterLogin: callbacks?.afterLogin ?? defaultRedirect,\n afterLogout: callbacks?.afterLogout ?? defaultRedirect\n })\n },\n {\n path: ROUTES.end_session,\n method: 'get',\n handler: (req) => requestRedirect({req, issuerURL, clientId, invokedBy: 'end_session'})\n }\n ],\n fields: [\n ...collection.fields,\n {\n ...fieldsConfig.id,\n type: 'text',\n admin: {\n readOnly: true\n },\n index: true,\n unique: true,\n required: true\n },\n {\n ...fieldsConfig.name,\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.email,\n type: 'email',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.image,\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n ...fieldsConfig.roles,\n type: 'array',\n admin: {\n readOnly: true\n },\n fields: [\n {\n ...fieldsConfig.roleFields.name,\n type: 'text'\n }\n ]\n }\n ]\n } : {}\n }\n }),\n i18n: {\n ...incomingConfig.i18n,\n translations: {\n ...incomingConfig.i18n?.translations,\n de: {\n ...incomingConfig.i18n?.translations?.de,\n ...translations.de\n },\n en: {\n ...incomingConfig.i18n?.translations?.en,\n ...translations.en\n }\n }\n }\n })\n\n}"],"names":["PHASE_DEVELOPMENT_SERVER","PHASE_PRODUCTION_SERVER","cookies","AvatarComponent","LoginButtonComponent","COOKIES","DEFAULT_CONFIG","ERRORS","ROUTES","authorize","callback","zitadelStrategy","translations","defaultRedirect","getAuthSlug","loadEnv","requestRedirect","zitadelPlugin","config","envs","issuerURL","ZITADEL_URL","clientId","ZITADEL_CLIENT_ID","fields","strategyName","api","callbacks","components","errors","push","ZITADEL_API_JWT","type","jwt","JSON","parse","e","apiJWT","ZITADEL_API_CLIENT_ID","ZITADEL_API_CLIENT_SECRET","clientSecret","apiClientSecret","length","includes","process","env","NEXT_PHASE","console","warn","error","fieldsConfig","incomingConfig","admin","avatar","Component","clientProps","imageFieldName","image","name","loginButton","afterLogin","serverProps","label","collections","map","collection","authConfig","auth","slug","disableLocalStrategy","strategies","hooks","afterLogout","set","logout","endpoints","path","method","handler","end_session","req","invokedBy","id","readOnly","index","unique","required","email","roles","roleFields","i18n","de","en"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Loads multiple environment variables into a typed object.
3
+ *
4
+ * This is a convenience function that reads multiple environment variables at once
5
+ * and returns them as a typed object. It supports the same file-based secrets pattern
6
+ * as getEnvContent() when fileCheck is enabled.
7
+ *
8
+ * @template T - String literal union type representing the environment variable names
9
+ * @param keys - Array of environment variable names to load
10
+ * @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: true)
11
+ *
12
+ * @returns A partial record mapping variable names to their values (undefined if not found)
13
+ *
14
+ * @example
15
+ * // Basic usage with string array
16
+ * const config = loadEnv(['API_KEY', 'DATABASE_URL'])
17
+ * // Returns: { API_KEY?: string, DATABASE_URL?: string }
18
+ *
19
+ * @example
20
+ * // Disable file checking for direct env var access only
21
+ * const config = loadEnv(['NODE_ENV', 'PORT'], false)
22
+ *
23
+ * @example
24
+ * // With Docker secrets (fileCheck = true)
25
+ * // If DATABASE_PASSWORD_FILE=/run/secrets/db_password exists
26
+ * const config = loadEnv(['DATABASE_PASSWORD'])
27
+ * // Automatically reads from DATABASE_PASSWORD or DATABASE_PASSWORD_FILE
28
+ *
29
+ * @see getEnvContent for details on file checking behavior
30
+ */
31
+ export declare const loadEnv: <T extends string>(keys: T[], useFileCheck?: boolean) => Partial<Record<T, string>>;
32
+ //# sourceMappingURL=envs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envs.d.ts","sourceRoot":"","sources":["../../src/utils/envs.ts"],"names":[],"mappings":"AAoDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,EACpC,MAAM,CAAC,EAAE,EACT,sBAAmB,KACwE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA"}
@@ -0,0 +1,84 @@
1
+ import { readFileSync } from 'fs';
2
+ /**
3
+ * Retrieves the content of an environment variable with support for file-based secrets (Docker secrets pattern).
4
+ *
5
+ * This function provides three modes of operation:
6
+ * 1. Direct read: Returns the environment variable value as-is
7
+ * 2. File read: Reads the content from a file path specified in the environment variable
8
+ * 3. Fallback: Automatically tries the _FILE variant if the direct variable doesn't exist
9
+ *
10
+ * @param key - Name of environment variable name to retrieve content from
11
+ * @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: false)
12
+ *
13
+ * @returns The environment variable value, file contents, or undefined if not found
14
+ *
15
+ * @example
16
+ * // Direct read (fileCheck = false)
17
+ * getEnvContent('API_KEY') // Returns process.env.API_KEY
18
+ *
19
+ * @example
20
+ * // Read from file (when name ends with _FILE)
21
+ * // If PASSWORD_FILE=/run/secrets/password
22
+ * getEnvContent('PASSWORD_FILE', true) // Returns contents of /run/secrets/password
23
+ *
24
+ * @example
25
+ * // Automatic fallback (when name doesn't end with _FILE)
26
+ * // If PASSWORD is not set but PASSWORD_FILE=/run/secrets/password exists
27
+ * getEnvContent('PASSWORD', true) // Returns contents of /run/secrets/password
28
+ *
29
+ * @example
30
+ * // Direct value takes precedence
31
+ * // If PASSWORD=mysecret and PASSWORD_FILE also exists
32
+ * getEnvContent('PASSWORD', true) // Returns "mysecret" (not the file contents)
33
+ */ const getEnvContent = (key, useFileCheck = false)=>{
34
+ const value = process.env[key];
35
+ if (useFileCheck) {
36
+ const hasFileEnding = key.toUpperCase().endsWith('_FILE');
37
+ if (value && hasFileEnding) {
38
+ try {
39
+ return readFileSync(value, 'utf8');
40
+ } catch (e) {
41
+ console.log(`An error occurred while trying to read the file at ${value} [${key}]:`, e);
42
+ }
43
+ }
44
+ if (!value && !hasFileEnding) {
45
+ return getEnvContent(`${key}_FILE`, useFileCheck);
46
+ }
47
+ }
48
+ return value;
49
+ };
50
+ /**
51
+ * Loads multiple environment variables into a typed object.
52
+ *
53
+ * This is a convenience function that reads multiple environment variables at once
54
+ * and returns them as a typed object. It supports the same file-based secrets pattern
55
+ * as getEnvContent() when fileCheck is enabled.
56
+ *
57
+ * @template T - String literal union type representing the environment variable names
58
+ * @param keys - Array of environment variable names to load
59
+ * @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: true)
60
+ *
61
+ * @returns A partial record mapping variable names to their values (undefined if not found)
62
+ *
63
+ * @example
64
+ * // Basic usage with string array
65
+ * const config = loadEnv(['API_KEY', 'DATABASE_URL'])
66
+ * // Returns: { API_KEY?: string, DATABASE_URL?: string }
67
+ *
68
+ * @example
69
+ * // Disable file checking for direct env var access only
70
+ * const config = loadEnv(['NODE_ENV', 'PORT'], false)
71
+ *
72
+ * @example
73
+ * // With Docker secrets (fileCheck = true)
74
+ * // If DATABASE_PASSWORD_FILE=/run/secrets/db_password exists
75
+ * const config = loadEnv(['DATABASE_PASSWORD'])
76
+ * // Automatically reads from DATABASE_PASSWORD or DATABASE_PASSWORD_FILE
77
+ *
78
+ * @see getEnvContent for details on file checking behavior
79
+ */ export const loadEnv = (keys, useFileCheck = true)=>Object.fromEntries(keys.map((key)=>[
80
+ key,
81
+ getEnvContent(key, useFileCheck)
82
+ ]));
83
+
84
+ //# sourceMappingURL=envs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/envs.ts"],"sourcesContent":["import {readFileSync} from 'fs'\n\n/**\n * Retrieves the content of an environment variable with support for file-based secrets (Docker secrets pattern).\n *\n * This function provides three modes of operation:\n * 1. Direct read: Returns the environment variable value as-is\n * 2. File read: Reads the content from a file path specified in the environment variable\n * 3. Fallback: Automatically tries the _FILE variant if the direct variable doesn't exist\n *\n * @param key - Name of environment variable name to retrieve content from\n * @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: false)\n *\n * @returns The environment variable value, file contents, or undefined if not found\n *\n * @example\n * // Direct read (fileCheck = false)\n * getEnvContent('API_KEY') // Returns process.env.API_KEY\n *\n * @example\n * // Read from file (when name ends with _FILE)\n * // If PASSWORD_FILE=/run/secrets/password\n * getEnvContent('PASSWORD_FILE', true) // Returns contents of /run/secrets/password\n *\n * @example\n * // Automatic fallback (when name doesn't end with _FILE)\n * // If PASSWORD is not set but PASSWORD_FILE=/run/secrets/password exists\n * getEnvContent('PASSWORD', true) // Returns contents of /run/secrets/password\n *\n * @example\n * // Direct value takes precedence\n * // If PASSWORD=mysecret and PASSWORD_FILE also exists\n * getEnvContent('PASSWORD', true) // Returns \"mysecret\" (not the file contents)\n */\nconst getEnvContent = (key: string, useFileCheck = false) => {\n const value = process.env[key]\n if (useFileCheck) {\n const hasFileEnding = key.toUpperCase().endsWith('_FILE')\n if (value && hasFileEnding) {\n try {\n return readFileSync(value, 'utf8')\n } catch (e) {\n console.log(`An error occurred while trying to read the file at ${value} [${key}]:`, e)\n }\n }\n if (!value && !hasFileEnding) {\n return getEnvContent(`${key}_FILE`, useFileCheck)\n }\n }\n return value\n}\n\n/**\n * Loads multiple environment variables into a typed object.\n *\n * This is a convenience function that reads multiple environment variables at once\n * and returns them as a typed object. It supports the same file-based secrets pattern\n * as getEnvContent() when fileCheck is enabled.\n *\n * @template T - String literal union type representing the environment variable names\n * @param keys - Array of environment variable names to load\n * @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: true)\n *\n * @returns A partial record mapping variable names to their values (undefined if not found)\n *\n * @example\n * // Basic usage with string array\n * const config = loadEnv(['API_KEY', 'DATABASE_URL'])\n * // Returns: { API_KEY?: string, DATABASE_URL?: string }\n *\n * @example\n * // Disable file checking for direct env var access only\n * const config = loadEnv(['NODE_ENV', 'PORT'], false)\n *\n * @example\n * // With Docker secrets (fileCheck = true)\n * // If DATABASE_PASSWORD_FILE=/run/secrets/db_password exists\n * const config = loadEnv(['DATABASE_PASSWORD'])\n * // Automatically reads from DATABASE_PASSWORD or DATABASE_PASSWORD_FILE\n *\n * @see getEnvContent for details on file checking behavior\n */\nexport const loadEnv = <T extends string>(\n keys: T[],\n useFileCheck = true\n) => Object.fromEntries(keys.map(key => [key, getEnvContent(key as string, useFileCheck)])) as Partial<Record<T, string>>"],"names":["readFileSync","getEnvContent","key","useFileCheck","value","process","env","hasFileEnding","toUpperCase","endsWith","e","console","log","loadEnv","keys","Object","fromEntries","map"],"mappings":"AAAA,SAAQA,YAAY,QAAO,KAAI;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BC,GACD,MAAMC,gBAAgB,CAACC,KAAaC,eAAe,KAAK;IACpD,MAAMC,QAAQC,QAAQC,GAAG,CAACJ,IAAI;IAC9B,IAAIC,cAAc;QACd,MAAMI,gBAAgBL,IAAIM,WAAW,GAAGC,QAAQ,CAAC;QACjD,IAAIL,SAASG,eAAe;YACxB,IAAI;gBACA,OAAOP,aAAaI,OAAO;YAC/B,EAAE,OAAOM,GAAG;gBACRC,QAAQC,GAAG,CAAC,CAAC,mDAAmD,EAAER,MAAM,EAAE,EAAEF,IAAI,EAAE,CAAC,EAAEQ;YACzF;QACJ;QACA,IAAI,CAACN,SAAS,CAACG,eAAe;YAC1B,OAAON,cAAc,GAAGC,IAAI,KAAK,CAAC,EAAEC;QACxC;IACJ;IACA,OAAOC;AACX;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,MAAMS,UAAU,CACnBC,MACAX,eAAe,IAAI,GAClBY,OAAOC,WAAW,CAACF,KAAKG,GAAG,CAACf,CAAAA,MAAO;YAACA;YAAKD,cAAcC,KAAeC;SAAc,GAAgC"}
@@ -1,3 +1,4 @@
1
+ export { loadEnv } from './envs.js';
1
2
  export { createState, getState } from './state.js';
2
3
  export { defaultRedirect, requestRedirect } from './redirects.js';
3
4
  export { getAuthBaseURL, getAuthSlug, getServerURL } from './urls.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAA;AAChD,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAC,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAA;AAChD,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAC,MAAM,WAAW,CAAA"}
@@ -1,3 +1,4 @@
1
+ export { loadEnv } from './envs.js';
1
2
  export { createState, getState } from './state.js';
2
3
  export { defaultRedirect, requestRedirect } from './redirects.js';
3
4
  export { getAuthBaseURL, getAuthSlug, getServerURL } from './urls.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {createState, getState} from './state.js'\nexport {defaultRedirect, requestRedirect} from './redirects.js'\nexport {getAuthBaseURL, getAuthSlug, getServerURL} from './urls.js'"],"names":["createState","getState","defaultRedirect","requestRedirect","getAuthBaseURL","getAuthSlug","getServerURL"],"mappings":"AAAA,SAAQA,WAAW,EAAEC,QAAQ,QAAO,aAAY;AAChD,SAAQC,eAAe,EAAEC,eAAe,QAAO,iBAAgB;AAC/D,SAAQC,cAAc,EAAEC,WAAW,EAAEC,YAAY,QAAO,YAAW"}
1
+ {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {loadEnv} from './envs.js'\nexport {createState, getState} from './state.js'\nexport {defaultRedirect, requestRedirect} from './redirects.js'\nexport {getAuthBaseURL, getAuthSlug, getServerURL} from './urls.js'"],"names":["loadEnv","createState","getState","defaultRedirect","requestRedirect","getAuthBaseURL","getAuthSlug","getServerURL"],"mappings":"AAAA,SAAQA,OAAO,QAAO,YAAW;AACjC,SAAQC,WAAW,EAAEC,QAAQ,QAAO,aAAY;AAChD,SAAQC,eAAe,EAAEC,eAAe,QAAO,iBAAgB;AAC/D,SAAQC,cAAc,EAAEC,WAAW,EAAEC,YAAY,QAAO,YAAW"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload-zitadel-plugin",
3
- "version": "0.5.1",
3
+ "version": "0.5.3",
4
4
  "description": "plugin for Payload CMS, which enables authentication via Zitadel IdP",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,7 +40,7 @@
40
40
  "@payloadcms/translations": "^3.60.0",
41
41
  "@payloadcms/ui": "^3.60.0",
42
42
  "jose": "^6.1.0",
43
- "next": "^15.5.5",
43
+ "next": "^15.5.6",
44
44
  "payload": "^3.60.0",
45
45
  "react": "^19.2.0",
46
46
  "react-dom": "^19.2.0"
@@ -48,7 +48,7 @@
48
48
  "devDependencies": {
49
49
  "@swc/cli": "^0.7.8",
50
50
  "@swc/core": "^1.13.20",
51
- "@types/node": "^24.8.0",
51
+ "@types/node": "^24.8.1",
52
52
  "@types/react": "^19.2.2",
53
53
  "@types/react-dom": "^19.2.2",
54
54
  "rimraf": "^6.0.1",