payload-zitadel-plugin 0.5.1 → 0.5.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/README.md +8 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -13
- package/dist/index.js.map +1 -1
- package/dist/utils/envs.d.ts +32 -0
- package/dist/utils/envs.d.ts.map +1 -0
- package/dist/utils/envs.js +68 -0
- package/dist/utils/envs.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +3 -3
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.
|
|
13
|
+
pnpm add payload-zitadel-plugin@0.5.2
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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 (
|
|
26
|
+
if (envs.ZITADEL_API_JWT) {
|
|
20
27
|
try {
|
|
21
28
|
api = {
|
|
22
29
|
type: 'jwt',
|
|
23
|
-
jwt: JSON.parse(
|
|
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 (
|
|
29
|
-
|
|
30
|
-
|
|
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":"AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,68 @@
|
|
|
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)=>useFileCheck ? key.toUpperCase().endsWith('_FILE') ? process.env[key] ? readFileSync(process.env[key], 'utf8') : undefined : process.env[key] ? process.env[key] : getEnvContent(`${key}_FILE`, useFileCheck) : process.env[key];
|
|
34
|
+
/**
|
|
35
|
+
* Loads multiple environment variables into a typed object.
|
|
36
|
+
*
|
|
37
|
+
* This is a convenience function that reads multiple environment variables at once
|
|
38
|
+
* and returns them as a typed object. It supports the same file-based secrets pattern
|
|
39
|
+
* as getEnvContent() when fileCheck is enabled.
|
|
40
|
+
*
|
|
41
|
+
* @template T - String literal union type representing the environment variable names
|
|
42
|
+
* @param keys - Array of environment variable names to load
|
|
43
|
+
* @param useFileCheck - Whether to enable file checking and _FILE fallback behavior (default: true)
|
|
44
|
+
*
|
|
45
|
+
* @returns A partial record mapping variable names to their values (undefined if not found)
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Basic usage with string array
|
|
49
|
+
* const config = loadEnv(['API_KEY', 'DATABASE_URL'])
|
|
50
|
+
* // Returns: { API_KEY?: string, DATABASE_URL?: string }
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // Disable file checking for direct env var access only
|
|
54
|
+
* const config = loadEnv(['NODE_ENV', 'PORT'], false)
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* // With Docker secrets (fileCheck = true)
|
|
58
|
+
* // If DATABASE_PASSWORD_FILE=/run/secrets/db_password exists
|
|
59
|
+
* const config = loadEnv(['DATABASE_PASSWORD'])
|
|
60
|
+
* // Automatically reads from DATABASE_PASSWORD or DATABASE_PASSWORD_FILE
|
|
61
|
+
*
|
|
62
|
+
* @see getEnvContent for details on file checking behavior
|
|
63
|
+
*/ export const loadEnv = (keys, useFileCheck = true)=>Object.fromEntries(keys.map((key)=>[
|
|
64
|
+
key,
|
|
65
|
+
getEnvContent(key, useFileCheck)
|
|
66
|
+
]));
|
|
67
|
+
|
|
68
|
+
//# 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): string | undefined => useFileCheck ?\n (key.toUpperCase().endsWith('_FILE') ?\n (process.env[key] ? readFileSync(process.env[key], 'utf8') : undefined) :\n (process.env[key] ? process.env[key] : getEnvContent(`${key}_FILE`, useFileCheck))\n ) : process.env[key]\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","toUpperCase","endsWith","process","env","undefined","loadEnv","keys","Object","fromEntries","map"],"mappings":"AAAA,SAAQA,YAAY,QAAO,KAAI;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BC,GACD,MAAMC,gBAAgB,CAACC,KAAaC,eAAe,KAAK,GAAyBA,eAC5ED,IAAIE,WAAW,GAAGC,QAAQ,CAAC,WACnBC,QAAQC,GAAG,CAACL,IAAI,GAAGF,aAAaM,QAAQC,GAAG,CAACL,IAAI,EAAE,UAAUM,YAC5DF,QAAQC,GAAG,CAACL,IAAI,GAAGI,QAAQC,GAAG,CAACL,IAAI,GAAGD,cAAc,GAAGC,IAAI,KAAK,CAAC,EAAEC,gBACxEG,QAAQC,GAAG,CAACL,IAAI;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,MAAMO,UAAU,CACnBC,MACAP,eAAe,IAAI,GAClBQ,OAAOC,WAAW,CAACF,KAAKG,GAAG,CAACX,CAAAA,MAAO;YAACA;YAAKD,cAAcC,KAAeC;SAAc,GAAgC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.5.2",
|
|
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.
|
|
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.
|
|
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",
|