133 lines
3.4 KiB
TypeScript
133 lines
3.4 KiB
TypeScript
import { redirect, error } from "@sveltejs/kit";
|
|
|
|
export const load = async ({ locals }) => {
|
|
const { pb, user } = locals;
|
|
if (!pb.authStore.isValid) {
|
|
redirect(303, "/login");
|
|
}
|
|
|
|
const getSubscriptionData = async () => {
|
|
const output =
|
|
(
|
|
await pb.collection("payments").getFullList({
|
|
filter: `user="${user.id}" `,
|
|
sort: "-created",
|
|
})
|
|
)?.at(0)?.data?.data?.attributes ?? {};
|
|
|
|
//console.log(output)
|
|
|
|
return output;
|
|
};
|
|
|
|
|
|
return {
|
|
getSubscriptionData: await getSubscriptionData(),
|
|
};
|
|
};
|
|
|
|
export const actions = {
|
|
cancelSubscription: async ({ request, locals }) => {
|
|
const formData = await request?.formData();
|
|
|
|
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
|
|
const subscriptionId = formData?.get("subscriptionId");
|
|
|
|
try {
|
|
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
|
|
const headers = {
|
|
Accept: "application/vnd.api+json",
|
|
"Content-Type": "application/vnd.api+json",
|
|
Authorization: `Bearer ${apiKey}`,
|
|
};
|
|
|
|
const response = await fetch(url, {
|
|
method: "DELETE",
|
|
headers: headers,
|
|
});
|
|
} catch (err) {
|
|
console.log("Error: ", err);
|
|
error(err.status, err.message);
|
|
}
|
|
|
|
redirect(302, "/profile");
|
|
},
|
|
|
|
reactivateSubscription: async ({ request, locals }) => {
|
|
const formData = await request?.formData();
|
|
|
|
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
|
|
const subscriptionId = formData?.get("subscriptionId");
|
|
|
|
try {
|
|
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
|
|
const headers = {
|
|
Accept: "application/vnd.api+json",
|
|
"Content-Type": "application/vnd.api+json",
|
|
Authorization: `Bearer ${apiKey}`,
|
|
};
|
|
|
|
const payload = {
|
|
data: {
|
|
type: "subscriptions",
|
|
id: `${subscriptionId}`,
|
|
attributes: {
|
|
cancelled: false,
|
|
},
|
|
},
|
|
};
|
|
|
|
const response = await fetch(url, {
|
|
method: "PATCH",
|
|
headers: headers,
|
|
body: JSON.stringify(payload),
|
|
});
|
|
} catch (err) {
|
|
console.log("Error: ", err);
|
|
error(err.status, err.message);
|
|
}
|
|
|
|
redirect(302, "/profile");
|
|
},
|
|
|
|
changeSubscription: async ({ request, locals }) => {
|
|
const formData = await request?.formData();
|
|
|
|
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
|
|
const subscriptionId = formData?.get("subscriptionId");
|
|
|
|
try {
|
|
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
|
|
const headers = {
|
|
Accept: "application/vnd.api+json",
|
|
"Content-Type": "application/vnd.api+json",
|
|
Authorization: `Bearer ${apiKey}`,
|
|
};
|
|
|
|
// Create the data payload
|
|
const payload = {
|
|
data: {
|
|
type: "subscriptions",
|
|
id: subscriptionId,
|
|
attributes: {
|
|
variant_id: import.meta.env.VITE_LEMON_SQUEEZY_ANNUAL_VARIANT_ID, // Change from monthly to annually plan
|
|
},
|
|
},
|
|
};
|
|
|
|
const response = await fetch(url, {
|
|
method: "PATCH",
|
|
headers: headers,
|
|
body: JSON.stringify(payload),
|
|
});
|
|
|
|
console.log(await response.json());
|
|
} catch (err) {
|
|
console.log("Error: ", err);
|
|
error(err.status, err.message);
|
|
}
|
|
|
|
redirect(302, "/profile");
|
|
},
|
|
};
|