payload-zitadel-plugin 0.2.16 → 0.2.17
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 +24 -5
- package/dist/components/Avatar.d.ts +2 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -9
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/LoginButton.d.ts +2 -1
- package/dist/components/LoginButton.d.ts.map +1 -1
- package/dist/components/LoginButton.js +5 -9
- package/dist/components/LoginButton.js.map +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -6
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +13 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -17
- package/dist/client.d.ts +0 -3
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -4
- package/dist/client.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -2
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -3
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/user.d.ts +0 -7
- package/dist/hooks/user.d.ts.map +0 -1
- package/dist/hooks/user.js +0 -12
- package/dist/hooks/user.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -3
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/user.d.ts +0 -6
- package/dist/utils/user.d.ts.map +0 -1
- package/dist/utils/user.js +0 -15
- package/dist/utils/user.js.map +0 -1
package/README.md
CHANGED
@@ -12,7 +12,7 @@ Thus the user collection in PayloadCMS becomes just a shadow of the information
|
|
12
12
|
## Install
|
13
13
|
|
14
14
|
```shell
|
15
|
-
pnpm add payload-zitadel-plugin@0.2.
|
15
|
+
pnpm add payload-zitadel-plugin@0.2.17
|
16
16
|
```
|
17
17
|
|
18
18
|
## Configuration
|
@@ -132,13 +132,32 @@ const nextConfig = {
|
|
132
132
|
}
|
133
133
|
]
|
134
134
|
},
|
135
|
-
|
135
|
+
|
136
|
+
// optional: enable auto-redirect to Zitadel login page if not logged in
|
136
137
|
async redirects() {
|
137
138
|
return [
|
138
139
|
{
|
139
|
-
source: '/admin
|
140
|
-
destination: `/api/users/authorize?${new URLSearchParams({redirect: '/
|
141
|
-
|
140
|
+
source: '/admin/:path',
|
141
|
+
destination: `/api/users/authorize?${new URLSearchParams({redirect: '/admin/:path'})}`,
|
142
|
+
missing: [
|
143
|
+
{
|
144
|
+
type: 'cookie',
|
145
|
+
key: 'zitadel_id_token'
|
146
|
+
}
|
147
|
+
],
|
148
|
+
permanent: false
|
149
|
+
},
|
150
|
+
// also works with any route outside of PayloadCMS
|
151
|
+
{
|
152
|
+
source: '/profile/:path',
|
153
|
+
destination: `/api/users/authorize?${new URLSearchParams({redirect: '/profile/:path'})}`,
|
154
|
+
missing: [
|
155
|
+
{
|
156
|
+
type: 'cookie',
|
157
|
+
key: 'zitadel_id_token'
|
158
|
+
}
|
159
|
+
],
|
160
|
+
permanent: false
|
142
161
|
}
|
143
162
|
]
|
144
163
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAA;AAGnC,eAAO,MAAM,MAAM,aAAY,WAAW,sBAwBE,CAAA"}
|
@@ -1,11 +1,6 @@
|
|
1
|
-
'use client';
|
2
1
|
import * as React from 'react';
|
3
2
|
import { DefaultAccountIcon } from '@payloadcms/ui/graphics/Account/Default';
|
4
|
-
|
5
|
-
import { useAuth } from '@payloadcms/ui';
|
6
|
-
export const Avatar = ()=>{
|
7
|
-
const { user } = useAuth();
|
8
|
-
return user?.image ? /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("style", null, `
|
3
|
+
export const Avatar = ({ user })=>user?.image ? /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("style", null, `
|
9
4
|
.avatar {
|
10
5
|
position: relative;
|
11
6
|
height: 2rem;
|
@@ -21,14 +16,12 @@ export const Avatar = ()=>{
|
|
21
16
|
}
|
22
17
|
`), /*#__PURE__*/ React.createElement("div", {
|
23
18
|
className: "avatar"
|
24
|
-
}, /*#__PURE__*/ React.createElement(
|
19
|
+
}, /*#__PURE__*/ React.createElement("img", {
|
25
20
|
src: user.image,
|
26
21
|
alt: "Profile Picture",
|
27
|
-
fill: true,
|
28
22
|
sizes: "2rem 2rem"
|
29
23
|
}))) : /*#__PURE__*/ React.createElement(DefaultAccountIcon, {
|
30
24
|
active: false
|
31
25
|
});
|
32
|
-
};
|
33
26
|
|
34
27
|
//# sourceMappingURL=Avatar.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/components/Avatar.tsx"],"sourcesContent":["
|
1
|
+
{"version":3,"sources":["../../src/components/Avatar.tsx"],"sourcesContent":["import * as React from 'react'\nimport {DefaultAccountIcon} from '@payloadcms/ui/graphics/Account/Default'\nimport {ServerProps} from 'payload'\n\n\nexport const Avatar = ({user}: ServerProps) =>\n user?.image ?\n <>\n <style>\n {`\n .avatar {\n position: relative;\n height: 2rem;\n width: 2rem;\n }\n \n .avatar:hover {\n filter: brightness(.8);\n }\n \n .avatar img {\n border-radius: 100%;\n }\n `}\n </style>\n <div className=\"avatar\">\n <img src={user.image} alt=\"Profile Picture\" sizes=\"2rem 2rem\"/>\n </div>\n </> :\n <DefaultAccountIcon active={false}/>\n\n\n"],"names":["React","DefaultAccountIcon","Avatar","user","image","style","div","className","img","src","alt","sizes","active"],"mappings":"AAAA,YAAYA,WAAW,QAAO;AAC9B,SAAQC,kBAAkB,QAAO,0CAAyC;AAI1E,OAAO,MAAMC,SAAS,CAAC,EAACC,IAAI,EAAc,GACtCA,MAAMC,sBACF,wDACI,oBAACC,eACI,CAAC;;;;;;;;;;;;;;wBAcM,CAAC,iBAEb,oBAACC;QAAIC,WAAU;qBACX,oBAACC;QAAIC,KAAKN,KAAKC,KAAK;QAAEM,KAAI;QAAkBC,OAAM;yBAG1D,oBAACV;QAAmBW,QAAQ;OAAQ"}
|
@@ -1,3 +1,4 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
|
2
|
+
import { ZitadelLoginButtonProps } from '../types.js';
|
3
|
+
export declare const LoginButton: ({ i18n, authorizeURL, label }: ZitadelLoginButtonProps) => React.JSX.Element;
|
3
4
|
//# sourceMappingURL=LoginButton.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LoginButton.d.ts","sourceRoot":"","sources":["../../src/components/LoginButton.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"LoginButton.d.ts","sourceRoot":"","sources":["../../src/components/LoginButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAC,uBAAuB,EAAC,MAAM,aAAa,CAAA;AAEnD,eAAO,MAAM,WAAW,kCAAiC,uBAAuB,sBAKtE,CAAA"}
|
@@ -1,19 +1,15 @@
|
|
1
|
-
'use client';
|
2
1
|
import React from 'react';
|
3
|
-
import { Button
|
4
|
-
export const LoginButton = ()
|
5
|
-
const { t } = useTranslation();
|
6
|
-
const { config: { admin: { custom: { zitadel: { label, authorizeURL } } } } } = useConfig();
|
7
|
-
return /*#__PURE__*/ React.createElement("div", {
|
2
|
+
import { Button } from '@payloadcms/ui';
|
3
|
+
export const LoginButton = ({ i18n, authorizeURL, label })=>/*#__PURE__*/ React.createElement("div", {
|
8
4
|
style: {
|
9
5
|
display: 'flex',
|
10
6
|
justifyContent: 'center'
|
11
7
|
}
|
12
8
|
}, /*#__PURE__*/ React.createElement(Button, {
|
13
|
-
|
14
|
-
|
9
|
+
el: "anchor",
|
10
|
+
url: authorizeURL
|
11
|
+
}, i18n.t('zitadelPlugin:signIn', {
|
15
12
|
label
|
16
13
|
})));
|
17
|
-
};
|
18
14
|
|
19
15
|
//# sourceMappingURL=LoginButton.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/components/LoginButton.tsx"],"sourcesContent":["
|
1
|
+
{"version":3,"sources":["../../src/components/LoginButton.tsx"],"sourcesContent":["import React from 'react'\nimport {Button} from '@payloadcms/ui'\nimport {ZitadelLoginButtonProps} from '../types.js'\n\nexport const LoginButton = ({i18n, authorizeURL, label}: ZitadelLoginButtonProps) =>\n <div style={{display: 'flex', justifyContent: 'center'}}>\n <Button el=\"anchor\" url={authorizeURL}>\n {i18n.t('zitadelPlugin:signIn', {label})}\n </Button>\n </div>"],"names":["React","Button","LoginButton","i18n","authorizeURL","label","div","style","display","justifyContent","el","url","t"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AACzB,SAAQC,MAAM,QAAO,iBAAgB;AAGrC,OAAO,MAAMC,cAAc,CAAC,EAACC,IAAI,EAAEC,YAAY,EAAEC,KAAK,EAA0B,iBAC5E,oBAACC;QAAIC,OAAO;YAACC,SAAS;YAAQC,gBAAgB;QAAQ;qBAClD,oBAACR;QAAOS,IAAG;QAASC,KAAKP;OACpBD,KAAKS,CAAC,CAAC,wBAAwB;QAACP;IAAK,KAExC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export {Avatar} from './Avatar.js'\nexport {LoginButton} from './LoginButton.js'"],"names":["Avatar","LoginButton"],"mappings":"AAAA,SAAQA,MAAM,QAAO,cAAa;AAClC,SAAQC,WAAW,QAAO,mBAAkB"}
|
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":"AAIA,OAAO,EAA6C,iBAAiB,EAAC,MAAM,YAAY,CAAA;AAIxF,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6C,iBAAiB,EAAC,MAAM,YAAY,CAAA;AAIxF,eAAO,MAAM,aAAa,EAAE,iBAmN3B,CAAA"}
|
package/dist/index.js
CHANGED
@@ -4,7 +4,6 @@ import { authorize, callback } from './handlers/index.js';
|
|
4
4
|
import { zitadelStrategy } from './strategy.js';
|
5
5
|
import { translations } from './translations.js';
|
6
6
|
import { NextResponse } from 'next/server.js';
|
7
|
-
export { getCurrentUser } from './utils/index.js';
|
8
7
|
export const ZitadelPlugin = ({ associatedIdFieldName = DEFAULT_CONFIG.associatedIdFieldName, disableAvatar, disableDefaultLoginButton, strategyName = DEFAULT_CONFIG.strategyName, label = DEFAULT_CONFIG.label, issuerURL, clientId, enableAPI, apiClientId, apiKeyId, apiKey, onSuccess })=>{
|
9
8
|
if (!issuerURL) throw new Error(ERROR_MESSAGES.issuerURL);
|
10
9
|
if (!clientId) throw new Error(ERROR_MESSAGES.clientId);
|
@@ -17,6 +16,8 @@ export const ZitadelPlugin = ({ associatedIdFieldName = DEFAULT_CONFIG.associate
|
|
17
16
|
const serverURL = incomingConfig.serverURL ?? 'http://localhost';
|
18
17
|
const authSlug = incomingConfig.admin?.user ?? 'users';
|
19
18
|
const authBaseURL = `${serverURL}/api/${authSlug}`;
|
19
|
+
const authorizeURL = authBaseURL + ROUTES.authorize;
|
20
|
+
const callbackURL = authBaseURL + ROUTES.callback;
|
20
21
|
const defaultOnSuccess = (state)=>NextResponse.redirect(serverURL + (state.get('redirect') ?? ''));
|
21
22
|
return {
|
22
23
|
...incomingConfig,
|
@@ -24,7 +25,7 @@ export const ZitadelPlugin = ({ associatedIdFieldName = DEFAULT_CONFIG.associate
|
|
24
25
|
...incomingConfig.admin,
|
25
26
|
...disableAvatar ? {} : {
|
26
27
|
avatar: {
|
27
|
-
Component: 'payload-zitadel-plugin/
|
28
|
+
Component: 'payload-zitadel-plugin/components#Avatar'
|
28
29
|
}
|
29
30
|
},
|
30
31
|
...disableDefaultLoginButton ? {} : {
|
@@ -32,7 +33,13 @@ export const ZitadelPlugin = ({ associatedIdFieldName = DEFAULT_CONFIG.associate
|
|
32
33
|
...incomingConfig.admin?.components,
|
33
34
|
afterLogin: [
|
34
35
|
...incomingConfig.admin?.components?.afterLogin ?? [],
|
35
|
-
|
36
|
+
{
|
37
|
+
path: 'payload-zitadel-plugin/components#LoginButton',
|
38
|
+
serverProps: {
|
39
|
+
authorizeURL,
|
40
|
+
label
|
41
|
+
}
|
42
|
+
}
|
36
43
|
]
|
37
44
|
}
|
38
45
|
},
|
@@ -41,9 +48,7 @@ export const ZitadelPlugin = ({ associatedIdFieldName = DEFAULT_CONFIG.associate
|
|
41
48
|
zitadel: {
|
42
49
|
issuerURL,
|
43
50
|
clientId,
|
44
|
-
|
45
|
-
authorizeURL: authBaseURL + ROUTES.authorize,
|
46
|
-
callbackURL: authBaseURL + ROUTES.callback
|
51
|
+
callbackURL
|
47
52
|
}
|
48
53
|
}
|
49
54
|
},
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {cookies} from 'next/headers.js'\nimport {COOKIES, DEFAULT_CONFIG, DELETE_ME_USER, ERROR_MESSAGES, ROUTES} from './constants.js'\nimport {authorize, callback} from './handlers/index.js'\nimport {zitadelStrategy} from './strategy.js'\nimport {PayloadConfigWithZitadel, ZitadelOnSuccess, ZitadelPluginType} from './types.js'\nimport {translations} from './translations.js'\nimport {NextResponse} from 'next/server.js'\n\nexport {getCurrentUser} from './utils/index.js'\n\nexport const ZitadelPlugin: ZitadelPluginType = ({\n associatedIdFieldName = DEFAULT_CONFIG.associatedIdFieldName,\n disableAvatar,\n disableDefaultLoginButton,\n strategyName = DEFAULT_CONFIG.strategyName,\n label = DEFAULT_CONFIG.label,\n issuerURL,\n clientId,\n enableAPI,\n apiClientId,\n apiKeyId,\n apiKey,\n onSuccess\n }) => {\n\n if (!issuerURL)\n throw new Error(ERROR_MESSAGES.issuerURL)\n if (!clientId)\n throw new Error(ERROR_MESSAGES.clientId)\n if (enableAPI) {\n if (!apiClientId)\n throw new Error(ERROR_MESSAGES.apiClientId)\n if (!apiKeyId)\n throw new Error(ERROR_MESSAGES.apiKey)\n if (!apiKey)\n throw new Error(ERROR_MESSAGES.apiKey)\n }\n\n return (incomingConfig) => {\n\n const serverURL = incomingConfig.serverURL ?? 'http://localhost'\n\n const authSlug = incomingConfig.admin?.user ?? 'users'\n\n const authBaseURL = `${serverURL}/api/${authSlug}`\n\n const defaultOnSuccess: ZitadelOnSuccess = (state) =>\n NextResponse.redirect(serverURL + (state.get('redirect') ?? ''))\n\n return {\n ...incomingConfig,\n admin: {\n ...incomingConfig.admin,\n ...disableAvatar ? {} : {\n avatar: {\n Component: 'payload-zitadel-plugin/client#Avatar'\n }\n },\n ...disableDefaultLoginButton ? {} : {\n components: {\n ...incomingConfig.admin?.components,\n afterLogin: [\n ...incomingConfig.admin?.components?.afterLogin ?? [],\n 'payload-zitadel-plugin/client#LoginButton'\n ]\n }\n },\n custom: {\n ...incomingConfig.admin?.custom,\n zitadel: {\n issuerURL,\n clientId,\n label,\n authorizeURL: authBaseURL + ROUTES.authorize,\n callbackURL: authBaseURL + ROUTES.callback\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 == authSlug ? {\n auth: {\n ...authConfig,\n disableLocalStrategy: true,\n strategies: [\n ...authConfig?.strategies ?? [],\n zitadelStrategy({\n authSlug,\n associatedIdFieldName,\n strategyName: strategyName,\n issuerURL: issuerURL as string,\n clientId: clientId as string,\n ...(enableAPI ? {\n enableAPI: true,\n apiClientId: apiClientId!,\n apiKeyId: apiClientId!,\n apiKey: apiKey!\n } : {enableAPI: undefined})\n })\n ]\n },\n hooks: {\n afterLogout: [() => cookies().delete(COOKIES.idToken)],\n\n // current work around (see onInit)\n afterChange: [async ({req}) => {\n const response = await req.payload.find({collection: authSlug})\n // to minimize unnecessary checks after the first two real users\n if (response.totalDocs == 2) {\n await req.payload.delete({\n collection: authSlug,\n where: {\n [associatedIdFieldName]: {\n equals: DELETE_ME_USER.associatedId\n }\n }\n })\n }\n }]\n\n },\n endpoints: [\n {\n path: ROUTES.authorize,\n method: 'get',\n handler: authorize\n },\n {\n path: ROUTES.callback,\n method: 'get',\n handler: callback(onSuccess ?? defaultOnSuccess)\n }\n ],\n fields: [\n ...collection.fields,\n {\n name: associatedIdFieldName,\n type: 'text',\n admin: {\n readOnly: true\n },\n unique: true,\n required: true\n },\n {\n name: 'email',\n type: 'email',\n admin: {\n readOnly: true\n }\n },\n {\n name: 'name',\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n name: 'image',\n type: 'text',\n admin: {\n readOnly: true\n }\n }\n ]\n } : {}\n }\n }),\n\n // current work around on creating a non-functional first user, which will be deleted after first login\n async onInit(payload) {\n if (incomingConfig.onInit)\n await incomingConfig.onInit(payload)\n\n const existingUsers = await payload.find({\n collection: authSlug,\n limit: 1\n })\n\n if (existingUsers.docs.length === 0) {\n await payload.create({\n collection: authSlug,\n data: {\n email: DELETE_ME_USER.email,\n password: DELETE_ME_USER.password,\n [associatedIdFieldName]: DELETE_ME_USER.associatedId\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 } satisfies PayloadConfigWithZitadel\n\n }\n\n}"],"names":["cookies","COOKIES","DEFAULT_CONFIG","DELETE_ME_USER","ERROR_MESSAGES","ROUTES","authorize","callback","zitadelStrategy","translations","NextResponse","getCurrentUser","ZitadelPlugin","associatedIdFieldName","disableAvatar","disableDefaultLoginButton","strategyName","label","issuerURL","clientId","enableAPI","apiClientId","apiKeyId","apiKey","onSuccess","Error","incomingConfig","serverURL","authSlug","admin","user","authBaseURL","defaultOnSuccess","state","redirect","get","avatar","Component","components","afterLogin","custom","zitadel","authorizeURL","callbackURL","collections","map","collection","authConfig","auth","slug","disableLocalStrategy","strategies","undefined","hooks","afterLogout","delete","idToken","afterChange","req","response","payload","find","totalDocs","where","equals","associatedId","endpoints","path","method","handler","fields","name","type","readOnly","unique","required","onInit","existingUsers","limit","docs","length","create","data","email","password","i18n","de","en"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {cookies} from 'next/headers.js'\nimport {COOKIES, DEFAULT_CONFIG, DELETE_ME_USER, ERROR_MESSAGES, ROUTES} from './constants.js'\nimport {authorize, callback} from './handlers/index.js'\nimport {zitadelStrategy} from './strategy.js'\nimport {PayloadConfigWithZitadel, ZitadelOnSuccess, ZitadelPluginType} from './types.js'\nimport {translations} from './translations.js'\nimport {NextResponse} from 'next/server.js'\n\nexport const ZitadelPlugin: ZitadelPluginType = ({\n associatedIdFieldName = DEFAULT_CONFIG.associatedIdFieldName,\n disableAvatar,\n disableDefaultLoginButton,\n strategyName = DEFAULT_CONFIG.strategyName,\n label = DEFAULT_CONFIG.label,\n issuerURL,\n clientId,\n enableAPI,\n apiClientId,\n apiKeyId,\n apiKey,\n onSuccess\n }) => {\n\n if (!issuerURL)\n throw new Error(ERROR_MESSAGES.issuerURL)\n if (!clientId)\n throw new Error(ERROR_MESSAGES.clientId)\n if (enableAPI) {\n if (!apiClientId)\n throw new Error(ERROR_MESSAGES.apiClientId)\n if (!apiKeyId)\n throw new Error(ERROR_MESSAGES.apiKey)\n if (!apiKey)\n throw new Error(ERROR_MESSAGES.apiKey)\n }\n\n return (incomingConfig) => {\n\n const serverURL = incomingConfig.serverURL ?? 'http://localhost'\n\n const authSlug = incomingConfig.admin?.user ?? 'users'\n\n const authBaseURL = `${serverURL}/api/${authSlug}`\n const authorizeURL = authBaseURL + ROUTES.authorize\n const callbackURL = authBaseURL + ROUTES.callback\n\n const defaultOnSuccess: ZitadelOnSuccess = (state) =>\n NextResponse.redirect(serverURL + (state.get('redirect') ?? ''))\n\n\n return {\n ...incomingConfig,\n admin: {\n ...incomingConfig.admin,\n ...disableAvatar ? {} : {\n avatar: {\n Component: 'payload-zitadel-plugin/components#Avatar'\n }\n },\n ...disableDefaultLoginButton ? {} : {\n components: {\n ...incomingConfig.admin?.components,\n afterLogin: [\n ...incomingConfig.admin?.components?.afterLogin ?? [],\n {\n path: 'payload-zitadel-plugin/components#LoginButton',\n serverProps: {\n authorizeURL,\n label\n }\n }\n ]\n }\n },\n custom: {\n ...incomingConfig.admin?.custom,\n zitadel: {\n issuerURL,\n clientId,\n callbackURL\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 == authSlug ? {\n auth: {\n ...authConfig,\n disableLocalStrategy: true,\n strategies: [\n ...authConfig?.strategies ?? [],\n zitadelStrategy({\n authSlug,\n associatedIdFieldName,\n strategyName: strategyName,\n issuerURL: issuerURL as string,\n clientId: clientId as string,\n ...(enableAPI ? {\n enableAPI: true,\n apiClientId: apiClientId!,\n apiKeyId: apiClientId!,\n apiKey: apiKey!\n } : {enableAPI: undefined})\n })\n ]\n },\n hooks: {\n afterLogout: [() => cookies().delete(COOKIES.idToken)],\n\n // current work around (see onInit)\n afterChange: [async ({req}) => {\n const response = await req.payload.find({collection: authSlug})\n // to minimize unnecessary checks after the first two real users\n if (response.totalDocs == 2) {\n await req.payload.delete({\n collection: authSlug,\n where: {\n [associatedIdFieldName]: {\n equals: DELETE_ME_USER.associatedId\n }\n }\n })\n }\n }]\n\n },\n endpoints: [\n {\n path: ROUTES.authorize,\n method: 'get',\n handler: authorize\n },\n {\n path: ROUTES.callback,\n method: 'get',\n handler: callback(onSuccess ?? defaultOnSuccess)\n }\n ],\n fields: [\n ...collection.fields,\n {\n name: associatedIdFieldName,\n type: 'text',\n admin: {\n readOnly: true\n },\n unique: true,\n required: true\n },\n {\n name: 'email',\n type: 'email',\n admin: {\n readOnly: true\n }\n },\n {\n name: 'name',\n type: 'text',\n admin: {\n readOnly: true\n }\n },\n {\n name: 'image',\n type: 'text',\n admin: {\n readOnly: true\n }\n }\n ]\n } : {}\n }\n }),\n\n // current work around on creating a non-functional first user, which will be deleted after first login\n async onInit(payload) {\n if (incomingConfig.onInit)\n await incomingConfig.onInit(payload)\n\n const existingUsers = await payload.find({\n collection: authSlug,\n limit: 1\n })\n\n if (existingUsers.docs.length === 0) {\n await payload.create({\n collection: authSlug,\n data: {\n email: DELETE_ME_USER.email,\n password: DELETE_ME_USER.password,\n [associatedIdFieldName]: DELETE_ME_USER.associatedId\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 } satisfies PayloadConfigWithZitadel\n\n }\n\n}"],"names":["cookies","COOKIES","DEFAULT_CONFIG","DELETE_ME_USER","ERROR_MESSAGES","ROUTES","authorize","callback","zitadelStrategy","translations","NextResponse","ZitadelPlugin","associatedIdFieldName","disableAvatar","disableDefaultLoginButton","strategyName","label","issuerURL","clientId","enableAPI","apiClientId","apiKeyId","apiKey","onSuccess","Error","incomingConfig","serverURL","authSlug","admin","user","authBaseURL","authorizeURL","callbackURL","defaultOnSuccess","state","redirect","get","avatar","Component","components","afterLogin","path","serverProps","custom","zitadel","collections","map","collection","authConfig","auth","slug","disableLocalStrategy","strategies","undefined","hooks","afterLogout","delete","idToken","afterChange","req","response","payload","find","totalDocs","where","equals","associatedId","endpoints","method","handler","fields","name","type","readOnly","unique","required","onInit","existingUsers","limit","docs","length","create","data","email","password","i18n","de","en"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
import { AuthStrategy,
|
1
|
+
import { AuthStrategy, Config, SanitizedConfig, ServerProps, TypedUser } from 'payload';
|
2
2
|
import { NextResponse } from 'next/server.js';
|
3
3
|
import { ClientConfigContext } from '@payloadcms/ui/providers/Config';
|
4
|
+
import { translations } from './translations.js';
|
5
|
+
import { I18nClient, NestedKeysStripped } from '@payloadcms/translations';
|
4
6
|
export type ZitadelPluginProps = Partial<{
|
5
7
|
disableAvatar: true;
|
6
8
|
disableDefaultLoginButton: true;
|
@@ -32,20 +34,26 @@ export type ZitadelIdToken = Partial<{
|
|
32
34
|
email: string;
|
33
35
|
picture: string;
|
34
36
|
}>;
|
35
|
-
export type ZitadelUser =
|
37
|
+
export type ZitadelUser = TypedUser & Partial<{
|
36
38
|
email: string | null;
|
37
39
|
name: string | null;
|
38
40
|
image: string | null;
|
39
41
|
}>;
|
42
|
+
export type ZitadelAvatarProps = ServerProps & {
|
43
|
+
user: ZitadelUser;
|
44
|
+
};
|
45
|
+
export type ZitadelLoginButtonProps = ServerProps & {
|
46
|
+
i18n: I18nClient<typeof translations.en, NestedKeysStripped<typeof translations.en>>;
|
47
|
+
authorizeURL: string;
|
48
|
+
label: string;
|
49
|
+
};
|
40
50
|
export type ZitadelOnSuccess = (state: URLSearchParams) => NextResponse;
|
41
|
-
export type PayloadConfigWithZitadel = (Config |
|
51
|
+
export type PayloadConfigWithZitadel = (Config | SanitizedConfig) & {
|
42
52
|
admin: {
|
43
53
|
custom: {
|
44
54
|
zitadel: {
|
45
55
|
issuerURL: string;
|
46
56
|
clientId: string;
|
47
|
-
label: string;
|
48
|
-
authorizeURL: string;
|
49
57
|
callbackURL: string;
|
50
58
|
};
|
51
59
|
};
|
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAgB,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAa,MAAM,SAAS,CAAA;AAC/G,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAC,UAAU,EAAE,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAEvE,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACrC,aAAa,EAAE,IAAI,CAAA;IACnB,yBAAyB,EAAE,IAAI,CAAA;IAC/B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,gBAAgB,CAAA;CAC9B,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAElC,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;AAEzF,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,IAAI,CAAA;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAA;CACnB,GAAG;IACA,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;CACjC,GAAG,CAAC,eAAe,GAAG;IACnB,SAAS,CAAC,EAAE,SAAS,CAAA;CACxB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAE7B,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,YAAY,CAAA;AAE/E,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAA;CAClB,CAAC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEpE,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG;IAChD,IAAI,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAAE,EAAE,kBAAkB,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,YAAY,CAAA;AAEvE,MAAM,MAAM,wBAAwB,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG;IAChE,KAAK,EAAE;QACH,MAAM,EAAE;YACJ,OAAO,EAAE;gBACL,SAAS,EAAE,MAAM,CAAA;gBACjB,QAAQ,EAAE,MAAM,CAAA;gBAChB,WAAW,EAAE,MAAM,CAAA;aACtB,CAAA;SACJ,CAAA;KACJ,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG,mBAAmB,GAAG;IAChE,MAAM,EAAE,wBAAwB,CAAA;CACnC,CAAA"}
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import {AuthStrategy, ClientConfig, Config, SanitizedConfig, TypeWithID} from 'payload'\nimport {NextResponse} from 'next/server.js'\nimport {ClientConfigContext} from '@payloadcms/ui/providers/Config'\n\nexport type ZitadelPluginProps = Partial<{\n disableAvatar: true\n disableDefaultLoginButton: true\n defaultLoginButtonTitle: string\n label: string\n onSuccess: ZitadelOnSuccess\n}> & Partial<ZitadelStrategyProps>\n\nexport type ZitadelPluginType = (props: ZitadelPluginProps) => (config: Config) => Config\n\nexport type ZitadelAPIProps = {\n enableAPI: true\n apiClientId: string,\n apiKeyId: string,\n apiKey: string\n}\n\nexport type ZitadelStrategyProps = {\n strategyName: string,\n issuerURL: string,\n clientId: string\n} & {\n authSlug: string,\n associatedIdFieldName: string,\n} & (ZitadelAPIProps | {\n enableAPI?: undefined\n} & Partial<ZitadelAPIProps>)\n\nexport type ZitadelStrategyType = (props: ZitadelStrategyProps) => AuthStrategy\n\nexport type ZitadelIdToken = Partial<{\n sub: string,\n name: string,\n email: string,\n picture: string\n}>\n\nexport type ZitadelUser =
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["import {AuthStrategy, ClientConfig, Config, SanitizedConfig, ServerProps, TypedUser, TypeWithID} from 'payload'\nimport {NextResponse} from 'next/server.js'\nimport {ClientConfigContext} from '@payloadcms/ui/providers/Config'\nimport {translations} from './translations.js'\nimport {I18nClient, NestedKeysStripped} from '@payloadcms/translations'\n\nexport type ZitadelPluginProps = Partial<{\n disableAvatar: true\n disableDefaultLoginButton: true\n defaultLoginButtonTitle: string\n label: string\n onSuccess: ZitadelOnSuccess\n}> & Partial<ZitadelStrategyProps>\n\nexport type ZitadelPluginType = (props: ZitadelPluginProps) => (config: Config) => Config\n\nexport type ZitadelAPIProps = {\n enableAPI: true\n apiClientId: string,\n apiKeyId: string,\n apiKey: string\n}\n\nexport type ZitadelStrategyProps = {\n strategyName: string,\n issuerURL: string,\n clientId: string\n} & {\n authSlug: string,\n associatedIdFieldName: string,\n} & (ZitadelAPIProps | {\n enableAPI?: undefined\n} & Partial<ZitadelAPIProps>)\n\nexport type ZitadelStrategyType = (props: ZitadelStrategyProps) => AuthStrategy\n\nexport type ZitadelIdToken = Partial<{\n sub: string,\n name: string,\n email: string,\n picture: string\n}>\n\nexport type ZitadelUser = TypedUser & Partial<{\n email: string | null,\n name: string | null,\n image: string | null,\n}>\n\nexport type ZitadelAvatarProps = ServerProps & { user: ZitadelUser }\n\nexport type ZitadelLoginButtonProps = ServerProps & {\n i18n: I18nClient<typeof translations.en, NestedKeysStripped<typeof translations.en>>,\n authorizeURL: string,\n label: string\n}\n\nexport type ZitadelOnSuccess = (state: URLSearchParams) => NextResponse\n\nexport type PayloadConfigWithZitadel = (Config | SanitizedConfig) & {\n admin: {\n custom: {\n zitadel: {\n issuerURL: string\n clientId: string\n callbackURL: string\n }\n }\n }\n}\n\nexport type PayloadConfigWithZitadelContext = ClientConfigContext & {\n config: PayloadConfigWithZitadel\n}"],"names":[],"mappings":"AAuEA,WAEC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "payload-zitadel-plugin",
|
3
|
-
"version": "0.2.
|
3
|
+
"version": "0.2.17",
|
4
4
|
"description": "plugin for Payload CMS, which enables authentication via Zitadel IdP",
|
5
5
|
"type": "module",
|
6
6
|
"license": "MIT",
|
@@ -36,20 +36,20 @@
|
|
36
36
|
"dist"
|
37
37
|
],
|
38
38
|
"dependencies": {
|
39
|
-
"@payloadcms/next": "3.0.0-beta.
|
40
|
-
"@payloadcms/translations": "3.0.0-beta.
|
41
|
-
"@payloadcms/ui": "3.0.0-beta.
|
39
|
+
"@payloadcms/next": "3.0.0-beta.87",
|
40
|
+
"@payloadcms/translations": "3.0.0-beta.87",
|
41
|
+
"@payloadcms/ui": "3.0.0-beta.87",
|
42
42
|
"jsonwebtoken": "^9.0.2",
|
43
|
-
"next": "15.0.0-canary.
|
44
|
-
"payload": "3.0.0-beta.
|
43
|
+
"next": "15.0.0-canary.121",
|
44
|
+
"payload": "3.0.0-beta.87",
|
45
45
|
"react": "rc",
|
46
46
|
"react-dom": "rc"
|
47
47
|
},
|
48
48
|
"devDependencies": {
|
49
49
|
"@swc/cli": "^0.4.0",
|
50
|
-
"@swc/core": "^1.7.
|
50
|
+
"@swc/core": "^1.7.14",
|
51
51
|
"@types/jsonwebtoken": "^9.0.6",
|
52
|
-
"@types/node": "^22.4.
|
52
|
+
"@types/node": "^22.4.1",
|
53
53
|
"@types/react": "^18.3.3",
|
54
54
|
"@types/react-dom": "^18.3.0",
|
55
55
|
"rimraf": "^6.0.1",
|
@@ -64,15 +64,10 @@
|
|
64
64
|
"require": "./dist/index.js",
|
65
65
|
"types": "./dist/index.d.ts"
|
66
66
|
},
|
67
|
-
"./
|
68
|
-
"import": "./dist/
|
69
|
-
"require": "./dist/
|
70
|
-
"types": "./dist/
|
71
|
-
},
|
72
|
-
"./hooks": {
|
73
|
-
"import": "./dist/hooks/index.js",
|
74
|
-
"require": "./dist/hooks/index.js",
|
75
|
-
"types": "./dist/hooks/index.d.ts"
|
67
|
+
"./components": {
|
68
|
+
"import": "./dist/components/index.js",
|
69
|
+
"require": "./dist/components/index.js",
|
70
|
+
"types": "./dist/components/index.d.ts"
|
76
71
|
},
|
77
72
|
"./types": {
|
78
73
|
"import": "./dist/types.js",
|
package/dist/client.d.ts
DELETED
package/dist/client.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,wBAAwB,CAAA;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAA"}
|
package/dist/client.js
DELETED
package/dist/client.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/client.ts"],"sourcesContent":["export {Avatar} from './components/Avatar.js'\nexport {LoginButton} from './components/LoginButton.js'"],"names":["Avatar","LoginButton"],"mappings":"AAAA,SAAQA,MAAM,QAAO,yBAAwB;AAC7C,SAAQC,WAAW,QAAO,8BAA6B"}
|
package/dist/hooks/index.d.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAA"}
|
package/dist/hooks/index.js
DELETED
package/dist/hooks/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/index.ts"],"sourcesContent":["export {useCurrentUser} from './user.js'"],"names":["useCurrentUser"],"mappings":"AAAA,SAAQA,cAAc,QAAO,YAAW"}
|
package/dist/hooks/user.d.ts
DELETED
package/dist/hooks/user.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/hooks/user.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAA;AAEvC,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,WAAW;UAK9B,CAAC,GAAG,IAAI;;;CAK7B,CAAA"}
|
package/dist/hooks/user.js
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
'use client';
|
2
|
-
import { usePayloadAPI } from '@payloadcms/ui';
|
3
|
-
export const useCurrentUser = ()=>{
|
4
|
-
const { data: { user }, isError, isLoading } = usePayloadAPI('/api/users/me')[0];
|
5
|
-
return {
|
6
|
-
user: user,
|
7
|
-
isError,
|
8
|
-
isLoading
|
9
|
-
};
|
10
|
-
};
|
11
|
-
|
12
|
-
//# sourceMappingURL=user.js.map
|
package/dist/hooks/user.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/user.ts"],"sourcesContent":["'use client'\n\nimport {usePayloadAPI} from '@payloadcms/ui'\nimport {ZitadelUser} from '../types.js'\n\nexport const useCurrentUser = <T extends ZitadelUser>() => {\n\n const {data: {user}, isError, isLoading} = usePayloadAPI('/api/users/me')[0]\n\n return {\n user: user as T | null,\n isError,\n isLoading\n }\n\n}"],"names":["usePayloadAPI","useCurrentUser","data","user","isError","isLoading"],"mappings":"AAAA;AAEA,SAAQA,aAAa,QAAO,iBAAgB;AAG5C,OAAO,MAAMC,iBAAiB;IAE1B,MAAM,EAACC,MAAM,EAACC,IAAI,EAAC,EAAEC,OAAO,EAAEC,SAAS,EAAC,GAAGL,cAAc,gBAAgB,CAAC,EAAE;IAE5E,OAAO;QACHG,MAAMA;QACNC;QACAC;IACJ;AAEJ,EAAC"}
|
package/dist/utils/index.d.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAA"}
|
package/dist/utils/index.js
DELETED
package/dist/utils/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["export {getCurrentUser} from './user.js'"],"names":["getCurrentUser"],"mappings":"AAAA,SAAQA,cAAc,QAAO,YAAW"}
|
package/dist/utils/user.d.ts
DELETED
package/dist/utils/user.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/utils/user.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAA;AACvC,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAA;AAEvC,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,WAAW,cAAY;IAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,sBAQzG,CAAA"}
|
package/dist/utils/user.js
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
import { getPayloadHMR } from '@payloadcms/next/utilities';
|
2
|
-
import { headers } from 'next/headers.js';
|
3
|
-
export const getCurrentUser = async ({ config })=>{
|
4
|
-
const payload = await getPayloadHMR({
|
5
|
-
config
|
6
|
-
});
|
7
|
-
const { user } = await payload.auth({
|
8
|
-
headers: headers()
|
9
|
-
});
|
10
|
-
return user ? await payload.findByID({
|
11
|
-
...user
|
12
|
-
}) : null;
|
13
|
-
};
|
14
|
-
|
15
|
-
//# sourceMappingURL=user.js.map
|
package/dist/utils/user.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/user.ts"],"sourcesContent":["import {getPayloadHMR} from '@payloadcms/next/utilities'\nimport {headers} from 'next/headers.js'\nimport {SanitizedConfig} from 'payload'\nimport {ZitadelUser} from '../types.js'\n\nexport const getCurrentUser = async <T extends ZitadelUser>({config}: { config: Promise<SanitizedConfig> }) => {\n\n const payload = await getPayloadHMR({config})\n\n const {user} = await payload.auth({headers: headers()})\n\n return user ? (await payload.findByID({...user})) as T : null\n\n}"],"names":["getPayloadHMR","headers","getCurrentUser","config","payload","user","auth","findByID"],"mappings":"AAAA,SAAQA,aAAa,QAAO,6BAA4B;AACxD,SAAQC,OAAO,QAAO,kBAAiB;AAIvC,OAAO,MAAMC,iBAAiB,OAA8B,EAACC,MAAM,EAAuC;IAEtG,MAAMC,UAAU,MAAMJ,cAAc;QAACG;IAAM;IAE3C,MAAM,EAACE,IAAI,EAAC,GAAG,MAAMD,QAAQE,IAAI,CAAC;QAACL,SAASA;IAAS;IAErD,OAAOI,OAAQ,MAAMD,QAAQG,QAAQ,CAAC;QAAC,GAAGF,IAAI;IAAA,KAAW;AAE7D,EAAC"}
|