payload-subscribers-plugin 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/app/VerifyMagicLink.js +91 -64
- package/dist/components/app/VerifyMagicLink.js.map +1 -1
- package/dist/contexts/SubscriberProvider.js +3 -8
- package/dist/contexts/SubscriberProvider.js.map +1 -1
- package/dist/endpoints/subscriberAuth.js +1 -1
- package/dist/endpoints/subscriberAuth.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { PayloadSDK } from '@payloadcms/sdk';
|
|
4
4
|
import { useSearchParams } from 'next/navigation.js';
|
|
5
5
|
import { useCallback, useEffect, useState } from 'react';
|
|
6
|
-
import { useSubscriber } from '../../exports/ui.js';
|
|
6
|
+
import { RequestMagicLink, useSubscriber } from '../../exports/ui.js';
|
|
7
7
|
import { useServerUrl } from '../../react-hooks/useServerUrl.js';
|
|
8
8
|
import { mergeClassNames } from './helpers.js';
|
|
9
9
|
import styles from './shared.module.css';
|
|
@@ -47,18 +47,50 @@ export const VerifyMagicLink = ({ classNames = {
|
|
|
47
47
|
// const [email, setEmail] = useState('')
|
|
48
48
|
const { refreshSubscriber } = useSubscriber();
|
|
49
49
|
const callVerify = useCallback(async ()=>{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
50
|
+
if (!email || !token) {
|
|
51
|
+
console.info('Invalid input');
|
|
52
|
+
return {
|
|
53
|
+
error: 'Invalid input'
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
// I tried using PayloadSDK.request, but when the endpoint
|
|
58
|
+
// returns a not-okay status, PayloadSDK.request returns its
|
|
59
|
+
// own "Bad request" error, and doesn't share the endpoint
|
|
60
|
+
// result data.
|
|
61
|
+
const verifyEndpointResult = await fetch(serverURL + '/api/verifyToken', {
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
email,
|
|
64
|
+
token
|
|
65
|
+
}),
|
|
66
|
+
method: 'POST'
|
|
67
|
+
});
|
|
68
|
+
// return verifyEndpointResult
|
|
69
|
+
if (verifyEndpointResult && verifyEndpointResult.json) {
|
|
70
|
+
console.log(1);
|
|
71
|
+
const resultJson = await verifyEndpointResult.json();
|
|
72
|
+
return {
|
|
73
|
+
error: resultJson.error,
|
|
74
|
+
message: resultJson.message
|
|
75
|
+
};
|
|
76
|
+
} else if (verifyEndpointResult && verifyEndpointResult.text) {
|
|
77
|
+
console.log(2);
|
|
78
|
+
const resultText = await verifyEndpointResult.text();
|
|
79
|
+
return {
|
|
80
|
+
error: resultText
|
|
81
|
+
};
|
|
82
|
+
} else {
|
|
83
|
+
console.log(3);
|
|
84
|
+
return {
|
|
85
|
+
error: verifyEndpointResult.status
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.log('catch');
|
|
90
|
+
return {
|
|
91
|
+
error
|
|
92
|
+
};
|
|
93
|
+
}
|
|
62
94
|
}, [
|
|
63
95
|
email,
|
|
64
96
|
serverURL,
|
|
@@ -66,22 +98,10 @@ export const VerifyMagicLink = ({ classNames = {
|
|
|
66
98
|
]);
|
|
67
99
|
useEffect(()=>{
|
|
68
100
|
async function verify() {
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
setIsError(resultJson.error && !resultJson.message);
|
|
74
|
-
// // This is causing out of control rendering. Not totally sure why, or of another way to do it.
|
|
75
|
-
// refreshSubscriber()
|
|
76
|
-
// // This is also causing out of control rendering. Not totally sure why, or of another way to do it.
|
|
77
|
-
// if (handleMagicLinkVerified) {
|
|
78
|
-
// handleMagicLinkVerified(resultJson)
|
|
79
|
-
// }
|
|
80
|
-
} else {
|
|
81
|
-
// const resultText = await verifyResult.text()
|
|
82
|
-
setResult('An error occured. Please try again');
|
|
83
|
-
setIsError(true);
|
|
84
|
-
}
|
|
101
|
+
const { error, message } = await callVerify();
|
|
102
|
+
setResult(message || `An error occured. Please try again. (${error})`);
|
|
103
|
+
setIsError(error && !message);
|
|
104
|
+
// console.info('callVerify not okay', { error, message })
|
|
85
105
|
}
|
|
86
106
|
if (!subscriber) {
|
|
87
107
|
void verify();
|
|
@@ -95,7 +115,7 @@ export const VerifyMagicLink = ({ classNames = {
|
|
|
95
115
|
subscriber,
|
|
96
116
|
token
|
|
97
117
|
]);
|
|
98
|
-
const
|
|
118
|
+
const handleRequestAnother = async ()=>{
|
|
99
119
|
const sdk = new PayloadSDK({
|
|
100
120
|
baseURL: serverURL || ''
|
|
101
121
|
});
|
|
@@ -120,45 +140,52 @@ export const VerifyMagicLink = ({ classNames = {
|
|
|
120
140
|
setIsError(true);
|
|
121
141
|
}
|
|
122
142
|
};
|
|
123
|
-
return /*#__PURE__*/ _jsxs(
|
|
124
|
-
className: mergeClassNames([
|
|
125
|
-
styles.container,
|
|
126
|
-
classNames.container
|
|
127
|
-
]),
|
|
143
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
128
144
|
children: [
|
|
129
|
-
!
|
|
130
|
-
|
|
131
|
-
styles.loading,
|
|
132
|
-
classNames.loading
|
|
133
|
-
]),
|
|
134
|
-
children: "verifying..."
|
|
145
|
+
(!email || !token) && /*#__PURE__*/ _jsx(RequestMagicLink, {
|
|
146
|
+
classNames: classNames
|
|
135
147
|
}),
|
|
136
|
-
|
|
148
|
+
email && token && /*#__PURE__*/ _jsxs("div", {
|
|
137
149
|
className: mergeClassNames([
|
|
138
|
-
styles.
|
|
139
|
-
classNames.
|
|
140
|
-
isError ? [
|
|
141
|
-
styles.error,
|
|
142
|
-
classNames.error
|
|
143
|
-
] : []
|
|
144
|
-
]),
|
|
145
|
-
children: result
|
|
146
|
-
}),
|
|
147
|
-
/*#__PURE__*/ _jsxs("div", {
|
|
148
|
-
className: mergeClassNames([
|
|
149
|
-
styles.form,
|
|
150
|
-
classNames.form
|
|
150
|
+
styles.container,
|
|
151
|
+
classNames.container
|
|
151
152
|
]),
|
|
152
153
|
children: [
|
|
153
|
-
result &&
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
!result && /*#__PURE__*/ _jsx("p", {
|
|
155
|
+
className: mergeClassNames([
|
|
156
|
+
styles.loading,
|
|
157
|
+
classNames.loading
|
|
158
|
+
]),
|
|
159
|
+
children: "verifying..."
|
|
160
|
+
}),
|
|
161
|
+
result && /*#__PURE__*/ _jsx("p", {
|
|
162
|
+
className: mergeClassNames([
|
|
163
|
+
styles.message,
|
|
164
|
+
classNames.message,
|
|
165
|
+
isError ? [
|
|
166
|
+
styles.error,
|
|
167
|
+
classNames.error
|
|
168
|
+
] : []
|
|
169
|
+
]),
|
|
170
|
+
children: result
|
|
157
171
|
}),
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
172
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
173
|
+
className: mergeClassNames([
|
|
174
|
+
styles.form,
|
|
175
|
+
classNames.form
|
|
176
|
+
]),
|
|
177
|
+
children: [
|
|
178
|
+
result && isError && renderButton({
|
|
179
|
+
name: 'request',
|
|
180
|
+
onClick: handleRequestAnother,
|
|
181
|
+
text: 'Request another magic link'
|
|
182
|
+
}),
|
|
183
|
+
result && forwardUrl && renderButton({
|
|
184
|
+
name: 'continue',
|
|
185
|
+
forwardUrl,
|
|
186
|
+
text: 'Continue'
|
|
187
|
+
})
|
|
188
|
+
]
|
|
162
189
|
})
|
|
163
190
|
]
|
|
164
191
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/app/VerifyMagicLink.tsx"],"sourcesContent":["'use client'\n\nimport { PayloadSDK } from '@payloadcms/sdk'\nimport { useSearchParams } from 'next/navigation.js'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport type { RequestMagicLinkResponse } from '../..//endpoints/requestMagicLink.js'\nimport type { Config } from '../../copied/payload-types.js'\nimport type { VerifyMagicLinkResponse } from '../../endpoints/verifyMagicLink.js'\n\nexport { VerifyMagicLinkResponse }\nimport { useSubscriber } from '../../exports/ui.js'\nimport { useServerUrl } from '../../react-hooks/useServerUrl.js'\nimport { mergeClassNames } from './helpers.js'\nimport styles from './shared.module.css'\n\n// const payload = await getPayload({\n// config: configPromise,\n// })\n\n// Pass your config from generated types as generic\n\nexport interface IVerifyMagicLink {\n classNames?: VerifyMagicLinkClasses\n handleMagicLinkRequested?: (result: RequestMagicLinkResponse) => void\n handleMagicLinkVerified?: (result: VerifyMagicLinkResponse) => void\n renderButton?: (props: {\n forwardUrl?: string\n name?: string\n onClick?: () => any\n text?: string\n }) => React.ReactNode\n}\n\nexport type VerifyMagicLinkClasses = {\n button?: string\n container?: string\n error?: string\n form?: string\n loading?: string\n message?: string\n}\n\nexport const VerifyMagicLink = ({\n classNames = {\n button: '',\n container: '',\n error: '',\n form: '',\n loading: '',\n message: '',\n },\n handleMagicLinkRequested,\n handleMagicLinkVerified,\n renderButton = ({ name, forwardUrl, onClick, text }) =>\n forwardUrl ? (\n <a href={forwardUrl}>\n <button\n className={mergeClassNames([styles.button, classNames.button])}\n name={name}\n type=\"button\"\n >\n {text}\n </button>\n </a>\n ) : (\n <button\n className={mergeClassNames([styles.button, classNames.button])}\n name={name}\n onClick={onClick}\n type=\"button\"\n >\n {text}\n </button>\n ),\n}: IVerifyMagicLink) => {\n const { serverURL } = useServerUrl()\n const {\n // refreshSubscriber,\n subscriber,\n } = useSubscriber()\n\n const searchParams = useSearchParams()\n const email = searchParams.get('email')\n const forwardUrl = searchParams.get('forwardUrl')\n const token = searchParams.get('token')\n\n const [result, setResult] = useState<string>()\n const [isError, setIsError] = useState<boolean>(false)\n // const [email, setEmail] = useState('')\n\n const { refreshSubscriber } = useSubscriber()\n\n const callVerify = useCallback(async () => {\n const sdk = new PayloadSDK<Config>({\n baseURL: serverURL || '',\n })\n\n const verifyResult = await sdk.request({\n json: {\n email,\n token,\n },\n method: 'POST',\n path: '/api/verifyToken',\n })\n\n return verifyResult\n }, [email, serverURL, token])\n\n useEffect(() => {\n async function verify() {\n const verifyResult = await callVerify()\n if (verifyResult.ok) {\n const resultJson = await verifyResult.json()\n setResult(resultJson.message || resultJson.error)\n setIsError(resultJson.error && !resultJson.message)\n\n // // This is causing out of control rendering. Not totally sure why, or of another way to do it.\n // refreshSubscriber()\n\n // // This is also causing out of control rendering. Not totally sure why, or of another way to do it.\n // if (handleMagicLinkVerified) {\n // handleMagicLinkVerified(resultJson)\n // }\n } else {\n // const resultText = await verifyResult.text()\n setResult('An error occured. Please try again')\n setIsError(true)\n }\n }\n if (!subscriber) {\n void verify()\n }\n }, [callVerify, serverURL, email, handleMagicLinkVerified, refreshSubscriber, subscriber, token])\n\n const handleRequestMagicLink = async () => {\n const sdk = new PayloadSDK<Config>({\n baseURL: serverURL || '',\n })\n\n const emailResult = await sdk.request({\n json: {\n email,\n forwardUrl,\n },\n method: 'POST',\n path: '/api/emailToken',\n })\n if (emailResult.ok) {\n const resultJson = await emailResult.json()\n setResult('An email has been sent containing your magic link.')\n setIsError(false)\n if (handleMagicLinkRequested) {\n handleMagicLinkRequested(resultJson)\n }\n } else {\n // const resultText = await emailResult.text()\n setResult('An error occured. Please try again.')\n setIsError(true)\n }\n }\n return (\n <div className={mergeClassNames([styles.container, classNames.container])}>\n {!result && (\n <p className={mergeClassNames([styles.loading, classNames.loading])}>verifying...</p>\n )}\n {result && (\n <p\n className={mergeClassNames([\n styles.message,\n classNames.message,\n isError ? [styles.error, classNames.error] : [],\n ])}\n >\n {result}\n </p>\n )}\n <div className={mergeClassNames([styles.form, classNames.form])}>\n {result &&\n isError &&\n renderButton({\n name: 'request',\n onClick: handleRequestMagicLink,\n text: 'Request another magic link',\n })}\n {result &&\n forwardUrl &&\n renderButton({\n name: 'continue',\n forwardUrl,\n text: 'Continue',\n })}\n </div>\n </div>\n )\n}\n"],"names":["PayloadSDK","useSearchParams","useCallback","useEffect","useState","useSubscriber","useServerUrl","mergeClassNames","styles","VerifyMagicLink","classNames","button","container","error","form","loading","message","handleMagicLinkRequested","handleMagicLinkVerified","renderButton","name","forwardUrl","onClick","text","a","href","className","type","serverURL","subscriber","searchParams","email","get","token","result","setResult","isError","setIsError","refreshSubscriber","callVerify","sdk","baseURL","verifyResult","request","json","method","path","verify","ok","resultJson","handleRequestMagicLink","emailResult","div","p"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/app/VerifyMagicLink.tsx"],"sourcesContent":["'use client'\n\nimport { PayloadSDK } from '@payloadcms/sdk'\nimport { useSearchParams } from 'next/navigation.js'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport type { RequestMagicLinkResponse } from '../..//endpoints/requestMagicLink.js'\nimport type { Config } from '../../copied/payload-types.js'\nimport type { VerifyMagicLinkResponse } from '../../endpoints/verifyMagicLink.js'\n\nexport { VerifyMagicLinkResponse }\nimport { RequestMagicLink, useSubscriber } from '../../exports/ui.js'\nimport { useServerUrl } from '../../react-hooks/useServerUrl.js'\nimport { mergeClassNames } from './helpers.js'\nimport styles from './shared.module.css'\n\n// const payload = await getPayload({\n// config: configPromise,\n// })\n\n// Pass your config from generated types as generic\n\nexport interface IVerifyMagicLink {\n classNames?: VerifyMagicLinkClasses\n handleMagicLinkRequested?: (result: RequestMagicLinkResponse) => void\n handleMagicLinkVerified?: (result: VerifyMagicLinkResponse) => void\n renderButton?: (props: {\n forwardUrl?: string\n name?: string\n onClick?: () => any\n text?: string\n }) => React.ReactNode\n}\n\nexport type VerifyMagicLinkClasses = {\n button?: string\n container?: string\n error?: string\n form?: string\n loading?: string\n message?: string\n}\n\nexport const VerifyMagicLink = ({\n classNames = {\n button: '',\n container: '',\n error: '',\n form: '',\n loading: '',\n message: '',\n },\n handleMagicLinkRequested,\n handleMagicLinkVerified,\n renderButton = ({ name, forwardUrl, onClick, text }) =>\n forwardUrl ? (\n <a href={forwardUrl}>\n <button\n className={mergeClassNames([styles.button, classNames.button])}\n name={name}\n type=\"button\"\n >\n {text}\n </button>\n </a>\n ) : (\n <button\n className={mergeClassNames([styles.button, classNames.button])}\n name={name}\n onClick={onClick}\n type=\"button\"\n >\n {text}\n </button>\n ),\n}: IVerifyMagicLink) => {\n const { serverURL } = useServerUrl()\n const {\n // refreshSubscriber,\n subscriber,\n } = useSubscriber()\n\n const searchParams = useSearchParams()\n const email = searchParams.get('email')\n const forwardUrl = searchParams.get('forwardUrl')\n const token = searchParams.get('token')\n\n const [result, setResult] = useState<string>()\n const [isError, setIsError] = useState<boolean>(false)\n // const [email, setEmail] = useState('')\n\n const { refreshSubscriber } = useSubscriber()\n\n const callVerify = useCallback(async () => {\n if (!email || !token) {\n console.info('Invalid input')\n return { error: 'Invalid input' }\n }\n try {\n // I tried using PayloadSDK.request, but when the endpoint\n // returns a not-okay status, PayloadSDK.request returns its\n // own \"Bad request\" error, and doesn't share the endpoint\n // result data.\n const verifyEndpointResult = await fetch(serverURL + '/api/verifyToken', {\n body: JSON.stringify({\n email,\n token,\n }),\n method: 'POST',\n })\n\n // return verifyEndpointResult\n if (verifyEndpointResult && verifyEndpointResult.json) {\n console.log(1)\n const resultJson = await verifyEndpointResult.json()\n return { error: resultJson.error, message: resultJson.message }\n } else if (verifyEndpointResult && verifyEndpointResult.text) {\n console.log(2)\n const resultText = await verifyEndpointResult.text()\n return { error: resultText }\n } else {\n console.log(3)\n return { error: verifyEndpointResult.status }\n }\n } catch (error: unknown) {\n console.log('catch')\n return { error }\n }\n }, [email, serverURL, token])\n\n useEffect(() => {\n async function verify() {\n const { error, message } = await callVerify()\n setResult(message || `An error occured. Please try again. (${error})`)\n setIsError(error && !message)\n // console.info('callVerify not okay', { error, message })\n }\n if (!subscriber) {\n void verify()\n }\n }, [callVerify, serverURL, email, handleMagicLinkVerified, refreshSubscriber, subscriber, token])\n\n const handleRequestAnother = async () => {\n const sdk = new PayloadSDK<Config>({\n baseURL: serverURL || '',\n })\n\n const emailResult = await sdk.request({\n json: {\n email,\n forwardUrl,\n },\n method: 'POST',\n path: '/api/emailToken',\n })\n if (emailResult.ok) {\n const resultJson = await emailResult.json()\n setResult('An email has been sent containing your magic link.')\n setIsError(false)\n if (handleMagicLinkRequested) {\n handleMagicLinkRequested(resultJson)\n }\n } else {\n // const resultText = await emailResult.text()\n setResult('An error occured. Please try again.')\n setIsError(true)\n }\n }\n\n return (\n <>\n {(!email || !token) && <RequestMagicLink classNames={classNames} />}\n {email && token && (\n <div className={mergeClassNames([styles.container, classNames.container])}>\n {!result && (\n <p className={mergeClassNames([styles.loading, classNames.loading])}>verifying...</p>\n )}\n {result && (\n <p\n className={mergeClassNames([\n styles.message,\n classNames.message,\n isError ? [styles.error, classNames.error] : [],\n ])}\n >\n {result}\n </p>\n )}\n <div className={mergeClassNames([styles.form, classNames.form])}>\n {result &&\n isError &&\n renderButton({\n name: 'request',\n onClick: handleRequestAnother,\n text: 'Request another magic link',\n })}\n {result &&\n forwardUrl &&\n renderButton({\n name: 'continue',\n forwardUrl,\n text: 'Continue',\n })}\n </div>\n </div>\n )}\n </>\n )\n}\n"],"names":["PayloadSDK","useSearchParams","useCallback","useEffect","useState","RequestMagicLink","useSubscriber","useServerUrl","mergeClassNames","styles","VerifyMagicLink","classNames","button","container","error","form","loading","message","handleMagicLinkRequested","handleMagicLinkVerified","renderButton","name","forwardUrl","onClick","text","a","href","className","type","serverURL","subscriber","searchParams","email","get","token","result","setResult","isError","setIsError","refreshSubscriber","callVerify","console","info","verifyEndpointResult","fetch","body","JSON","stringify","method","json","log","resultJson","resultText","status","verify","handleRequestAnother","sdk","baseURL","emailResult","request","path","ok","div","p"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { PayloadSDK } from '@payloadcms/sdk';
|
|
4
3
|
import { useCallback, useEffect } from 'react';
|
|
5
4
|
import { createContext, useContext, useMemo, useState } from 'react';
|
|
6
5
|
import { useServerUrl } from '../react-hooks/useServerUrl.js';
|
|
@@ -16,13 +15,9 @@ export function SubscriberProvider({ children }) {
|
|
|
16
15
|
const initSubscriber = async ()=>{
|
|
17
16
|
setIsLoaded(false);
|
|
18
17
|
try {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const authResponse = await sdk.request({
|
|
23
|
-
json: {},
|
|
24
|
-
method: 'POST',
|
|
25
|
-
path: '/api/subscriberAuth'
|
|
18
|
+
const authResponse = await fetch('/api/subscriberAuth', {
|
|
19
|
+
// body: JSON.stringify({}),
|
|
20
|
+
method: 'POST'
|
|
26
21
|
});
|
|
27
22
|
if (authResponse.ok) {
|
|
28
23
|
// Call the server function to get the user data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/contexts/SubscriberProvider.tsx"],"sourcesContent":["'use client'\n\nimport { PayloadSDK } from '@payloadcms/sdk'\nimport { type ReactNode, useCallback, useEffect } from 'react'\nimport { createContext, useContext, useMemo, useState } from 'react'\n\nimport type { Config, Subscriber } from '../copied/payload-types.js'\n\nimport { useServerUrl } from '../react-hooks/useServerUrl.js'\n\nexport type SubscriberContextType = {\n isLoaded: boolean\n logOut: () => void\n permissions: any\n refreshSubscriber: () => void\n subscriber: null | Subscriber\n}\n\nconst SubscriberContext = createContext<SubscriberContextType | undefined>(undefined)\n\ninterface ProviderProps {\n children?: ReactNode // Recommended type for children\n}\n\nexport function SubscriberProvider({ children }: ProviderProps) {\n // eslint-disable-next-line\n const [subscriber, setSubscriber] = useState<null | (Subscriber & { optIns: string[] })>(null)\n\n const { serverURL } = useServerUrl()\n\n // Keep track of if the selection content is loaded yet\n const [isLoaded, setIsLoaded] = useState(false)\n\n const [permissions, setPermissions] = useState<any>()\n\n const refreshSubscriber = useCallback(async () => {\n const initSubscriber = async () => {\n setIsLoaded(false)\n try {\n const
|
|
1
|
+
{"version":3,"sources":["../../src/contexts/SubscriberProvider.tsx"],"sourcesContent":["'use client'\n\nimport { PayloadSDK } from '@payloadcms/sdk'\nimport { type ReactNode, useCallback, useEffect } from 'react'\nimport { createContext, useContext, useMemo, useState } from 'react'\n\nimport type { Config, Subscriber } from '../copied/payload-types.js'\n\nimport { useServerUrl } from '../react-hooks/useServerUrl.js'\n\nexport type SubscriberContextType = {\n isLoaded: boolean\n logOut: () => void\n permissions: any\n refreshSubscriber: () => void\n subscriber: null | Subscriber\n}\n\nconst SubscriberContext = createContext<SubscriberContextType | undefined>(undefined)\n\ninterface ProviderProps {\n children?: ReactNode // Recommended type for children\n}\n\nexport function SubscriberProvider({ children }: ProviderProps) {\n // eslint-disable-next-line\n const [subscriber, setSubscriber] = useState<null | (Subscriber & { optIns: string[] })>(null)\n\n const { serverURL } = useServerUrl()\n\n // Keep track of if the selection content is loaded yet\n const [isLoaded, setIsLoaded] = useState(false)\n\n const [permissions, setPermissions] = useState<any>()\n\n const refreshSubscriber = useCallback(async () => {\n const initSubscriber = async () => {\n setIsLoaded(false)\n try {\n const authResponse = await fetch('/api/subscriberAuth', {\n // body: JSON.stringify({}),\n method: 'POST',\n })\n\n if (authResponse.ok) {\n // Call the server function to get the user data\n const { permissions, subscriber } = await authResponse.json()\n // console.log(`subscriber = `, subscriber)\n // console.log(`permissions = `, permissions)\n setPermissions(permissions)\n setSubscriber(subscriber)\n } else {\n setPermissions(null)\n setSubscriber(null)\n }\n } catch (error: unknown) {\n console.log(`authResponse error`, error)\n }\n setIsLoaded(true)\n }\n await initSubscriber()\n }, [serverURL])\n\n const logOut = useCallback(async () => {\n setIsLoaded(false)\n try {\n // const sdk = new PayloadSDK<Config>({\n // baseURL: serverURL || '',\n // })\n // const logoutResponse = await sdk.request({\n // json: {},\n // method: 'POST',\n // path: '/api/logout',\n // })\n // Unsure why sdk isn't working here\n const logoutResponse = await fetch('/api/logout', {\n method: 'POST',\n })\n\n // console.log(`logoutResponse`, logoutResponse)\n\n if (logoutResponse.ok) {\n setSubscriber(null)\n setPermissions(null)\n }\n } catch (error: unknown) {\n console.log(`logoutResponse error`, error)\n }\n setIsLoaded(true)\n }, [])\n\n useEffect(() => {\n void refreshSubscriber()\n }, [refreshSubscriber]) // Empty dependency array for mount/unmount\n\n // Memoize the value to prevent unnecessary re-renders in consumers\n const contextValue: SubscriberContextType = useMemo(\n () => ({\n isLoaded,\n logOut,\n permissions,\n refreshSubscriber,\n subscriber,\n }),\n [isLoaded, logOut, permissions, refreshSubscriber, subscriber],\n )\n\n return <SubscriberContext.Provider value={contextValue}>{children}</SubscriberContext.Provider>\n}\n\n// Custom hook to easily consume the context and add error handling\nexport function useSubscriber() {\n const context = useContext(SubscriberContext)\n if (context === undefined) {\n throw new Error('useSubscriber must be used within a SubscriberProvider')\n }\n return context\n}\n"],"names":["useCallback","useEffect","createContext","useContext","useMemo","useState","useServerUrl","SubscriberContext","undefined","SubscriberProvider","children","subscriber","setSubscriber","serverURL","isLoaded","setIsLoaded","permissions","setPermissions","refreshSubscriber","initSubscriber","authResponse","fetch","method","ok","json","error","console","log","logOut","logoutResponse","contextValue","Provider","value","useSubscriber","context","Error"],"mappings":"AAAA;;AAGA,SAAyBA,WAAW,EAAEC,SAAS,QAAQ,QAAO;AAC9D,SAASC,aAAa,EAAEC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAIpE,SAASC,YAAY,QAAQ,iCAAgC;AAU7D,MAAMC,kCAAoBL,cAAiDM;AAM3E,OAAO,SAASC,mBAAmB,EAAEC,QAAQ,EAAiB;IAC5D,2BAA2B;IAC3B,MAAM,CAACC,YAAYC,cAAc,GAAGP,SAAqD;IAEzF,MAAM,EAAEQ,SAAS,EAAE,GAAGP;IAEtB,uDAAuD;IACvD,MAAM,CAACQ,UAAUC,YAAY,GAAGV,SAAS;IAEzC,MAAM,CAACW,aAAaC,eAAe,GAAGZ;IAEtC,MAAMa,oBAAoBlB,YAAY;QACpC,MAAMmB,iBAAiB;YACrBJ,YAAY;YACZ,IAAI;gBACF,MAAMK,eAAe,MAAMC,MAAM,uBAAuB;oBACtD,4BAA4B;oBAC5BC,QAAQ;gBACV;gBAEA,IAAIF,aAAaG,EAAE,EAAE;oBACnB,gDAAgD;oBAChD,MAAM,EAAEP,WAAW,EAAEL,UAAU,EAAE,GAAG,MAAMS,aAAaI,IAAI;oBAC3D,2CAA2C;oBAC3C,6CAA6C;oBAC7CP,eAAeD;oBACfJ,cAAcD;gBAChB,OAAO;oBACLM,eAAe;oBACfL,cAAc;gBAChB;YACF,EAAE,OAAOa,OAAgB;gBACvBC,QAAQC,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAEF;YACpC;YACAV,YAAY;QACd;QACA,MAAMI;IACR,GAAG;QAACN;KAAU;IAEd,MAAMe,SAAS5B,YAAY;QACzBe,YAAY;QACZ,IAAI;YACF,uCAAuC;YACvC,8BAA8B;YAC9B,KAAK;YACL,6CAA6C;YAC7C,cAAc;YACd,oBAAoB;YACpB,yBAAyB;YACzB,KAAK;YACL,oCAAoC;YACpC,MAAMc,iBAAiB,MAAMR,MAAM,eAAe;gBAChDC,QAAQ;YACV;YAEA,gDAAgD;YAEhD,IAAIO,eAAeN,EAAE,EAAE;gBACrBX,cAAc;gBACdK,eAAe;YACjB;QACF,EAAE,OAAOQ,OAAgB;YACvBC,QAAQC,GAAG,CAAC,CAAC,oBAAoB,CAAC,EAAEF;QACtC;QACAV,YAAY;IACd,GAAG,EAAE;IAELd,UAAU;QACR,KAAKiB;IACP,GAAG;QAACA;KAAkB,GAAE,2CAA2C;IAEnE,mEAAmE;IACnE,MAAMY,eAAsC1B,QAC1C,IAAO,CAAA;YACLU;YACAc;YACAZ;YACAE;YACAP;QACF,CAAA,GACA;QAACG;QAAUc;QAAQZ;QAAaE;QAAmBP;KAAW;IAGhE,qBAAO,KAACJ,kBAAkBwB,QAAQ;QAACC,OAAOF;kBAAepB;;AAC3D;AAEA,mEAAmE;AACnE,OAAO,SAASuB;IACd,MAAMC,UAAU/B,WAAWI;IAC3B,IAAI2B,YAAY1B,WAAW;QACzB,MAAM,IAAI2B,MAAM;IAClB;IACA,OAAOD;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/endpoints/subscriberAuth.ts"],"sourcesContent":["import { headers as nextHeaders } from 'next/headers.js'\n\nimport type { Subscriber } from '../copied/payload-types.js'\n\n// If you're using Next.js, you'll have to import headers from next/headers, like so:\nimport type { CollectionSlug, Endpoint, PayloadHandler, Permissions } from 'payload'\n\nimport { defaultCollectionSlug } from '../collections/Subscribers.js'\n\nexport type SubscriberAuthResponse =\n | {\n error: string\n now: string\n }\n | {\n now: string\n permissions: Permissions\n subscriber: null | Subscriber\n }\n\n/**\n * createEndpointLogout\n * @param options\n * @returns\n *\n * Factory to generate the endpoint config with handler based on input option for subscribersCollectionSlug\n *\n */\nfunction createEndpointSubscriberAuth({\n subscribersCollectionSlug = defaultCollectionSlug,\n}: {\n subscribersCollectionSlug: CollectionSlug\n}): Endpoint {\n /**\n * subscriberAuth Endpoint Handler\n * @param req\n * @returns { status: 200, json: {message: string, now: date} }\n * @returns { status: 400, json: {error: ('No subscriber authed' | catchError | 'Unknown error'), now: date} }\n */\n const subscriberAuthHandler: PayloadHandler = async (req) => {\n // req.payload.logger.info('subscriberAuthHandler')\n // Log the user in via Payload headers\n const headers = await nextHeaders()\n\n try {\n const { permissions, user } = await req.payload.auth({\n headers,\n })\n\n // req.payload.logger.info(`user = ${JSON.stringify(user)}`)\n // req.payload.logger.info(`permissions = ${JSON.stringify(permissions)}`)\n\n if (user && user.collection == subscribersCollectionSlug) {\n const subscriber: Subscriber = user as Subscriber\n if (subscriber.optIns) {\n subscriber.optIns = subscriber.optIns.map((channel) =>\n typeof channel == 'string' ? channel : channel.id,\n )\n }\n return Response.json({\n now: new Date().toISOString(),\n permissions,\n subscriber,\n } as SubscriberAuthResponse)\n }\n\n // req.payload.logger.info('subscriberAuthHandler: No subscriber authed')\n return Response.json(\n {\n // error: 'No subscriber authed',\n now: new Date().toISOString(),\n permissions,\n subscriber: null,\n } as SubscriberAuthResponse,\n { headers, status:
|
|
1
|
+
{"version":3,"sources":["../../src/endpoints/subscriberAuth.ts"],"sourcesContent":["import { headers as nextHeaders } from 'next/headers.js'\n\nimport type { Subscriber } from '../copied/payload-types.js'\n\n// If you're using Next.js, you'll have to import headers from next/headers, like so:\nimport type { CollectionSlug, Endpoint, PayloadHandler, Permissions } from 'payload'\n\nimport { defaultCollectionSlug } from '../collections/Subscribers.js'\n\nexport type SubscriberAuthResponse =\n | {\n error: string\n now: string\n }\n | {\n now: string\n permissions: Permissions\n subscriber: null | Subscriber\n }\n\n/**\n * createEndpointLogout\n * @param options\n * @returns\n *\n * Factory to generate the endpoint config with handler based on input option for subscribersCollectionSlug\n *\n */\nfunction createEndpointSubscriberAuth({\n subscribersCollectionSlug = defaultCollectionSlug,\n}: {\n subscribersCollectionSlug: CollectionSlug\n}): Endpoint {\n /**\n * subscriberAuth Endpoint Handler\n * @param req\n * @returns { status: 200, json: {message: string, now: date} }\n * @returns { status: 400, json: {error: ('No subscriber authed' | catchError | 'Unknown error'), now: date} }\n */\n const subscriberAuthHandler: PayloadHandler = async (req) => {\n // req.payload.logger.info('subscriberAuthHandler')\n // Log the user in via Payload headers\n const headers = await nextHeaders()\n\n try {\n const { permissions, user } = await req.payload.auth({\n headers,\n })\n\n // req.payload.logger.info(`user = ${JSON.stringify(user)}`)\n // req.payload.logger.info(`permissions = ${JSON.stringify(permissions)}`)\n\n if (user && user.collection == subscribersCollectionSlug) {\n const subscriber: Subscriber = user as Subscriber\n if (subscriber.optIns) {\n subscriber.optIns = subscriber.optIns.map((channel) =>\n typeof channel == 'string' ? channel : channel.id,\n )\n }\n return Response.json({\n now: new Date().toISOString(),\n permissions,\n subscriber,\n } as SubscriberAuthResponse)\n }\n\n // req.payload.logger.info('subscriberAuthHandler: No subscriber authed')\n return Response.json(\n {\n // error: 'No subscriber authed',\n now: new Date().toISOString(),\n permissions,\n subscriber: null,\n } as SubscriberAuthResponse,\n { headers, status: 400 },\n )\n } catch (error: unknown) {\n // req.payload.logger.info(`subscriberAuth error: ${JSON.stringify(error)}`)\n return Response.json(\n {\n error,\n now: new Date().toISOString(),\n } as SubscriberAuthResponse,\n { headers, status: 400 },\n )\n }\n }\n\n /**\n * subscriberAuth Endpoint Config\n */\n const subscriberAuthEndpoint: Endpoint = {\n handler: subscriberAuthHandler,\n method: 'post',\n path: '/subscriberAuth',\n }\n return subscriberAuthEndpoint\n}\n\nexport default createEndpointSubscriberAuth\n"],"names":["headers","nextHeaders","defaultCollectionSlug","createEndpointSubscriberAuth","subscribersCollectionSlug","subscriberAuthHandler","req","permissions","user","payload","auth","collection","subscriber","optIns","map","channel","id","Response","json","now","Date","toISOString","status","error","subscriberAuthEndpoint","handler","method","path"],"mappings":"AAAA,SAASA,WAAWC,WAAW,QAAQ,kBAAiB;AAOxD,SAASC,qBAAqB,QAAQ,gCAA+B;AAarE;;;;;;;CAOC,GACD,SAASC,6BAA6B,EACpCC,4BAA4BF,qBAAqB,EAGlD;IACC;;;;;GAKC,GACD,MAAMG,wBAAwC,OAAOC;QACnD,mDAAmD;QACnD,sCAAsC;QACtC,MAAMN,UAAU,MAAMC;QAEtB,IAAI;YACF,MAAM,EAAEM,WAAW,EAAEC,IAAI,EAAE,GAAG,MAAMF,IAAIG,OAAO,CAACC,IAAI,CAAC;gBACnDV;YACF;YAEA,4DAA4D;YAC5D,0EAA0E;YAE1E,IAAIQ,QAAQA,KAAKG,UAAU,IAAIP,2BAA2B;gBACxD,MAAMQ,aAAyBJ;gBAC/B,IAAII,WAAWC,MAAM,EAAE;oBACrBD,WAAWC,MAAM,GAAGD,WAAWC,MAAM,CAACC,GAAG,CAAC,CAACC,UACzC,OAAOA,WAAW,WAAWA,UAAUA,QAAQC,EAAE;gBAErD;gBACA,OAAOC,SAASC,IAAI,CAAC;oBACnBC,KAAK,IAAIC,OAAOC,WAAW;oBAC3Bd;oBACAK;gBACF;YACF;YAEA,yEAAyE;YACzE,OAAOK,SAASC,IAAI,CAClB;gBACE,iCAAiC;gBACjCC,KAAK,IAAIC,OAAOC,WAAW;gBAC3Bd;gBACAK,YAAY;YACd,GACA;gBAAEZ;gBAASsB,QAAQ;YAAI;QAE3B,EAAE,OAAOC,OAAgB;YACvB,4EAA4E;YAC5E,OAAON,SAASC,IAAI,CAClB;gBACEK;gBACAJ,KAAK,IAAIC,OAAOC,WAAW;YAC7B,GACA;gBAAErB;gBAASsB,QAAQ;YAAI;QAE3B;IACF;IAEA;;GAEC,GACD,MAAME,yBAAmC;QACvCC,SAASpB;QACTqB,QAAQ;QACRC,MAAM;IACR;IACA,OAAOH;AACT;AAEA,eAAerB,6BAA4B"}
|
package/package.json
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
"registry": "https://registry.npmjs.org/",
|
|
71
71
|
"dependencies": {},
|
|
72
|
-
"version": "0.0.
|
|
72
|
+
"version": "0.0.6",
|
|
73
73
|
"scripts": {
|
|
74
74
|
"build": "pnpm copyfiles && pnpm build:types && pnpm build:swc",
|
|
75
75
|
"build:swc": "swc ./src -d ./dist --config-file .swcrc --strip-leading-paths",
|