diff --git a/.env.template b/.env.template new file mode 100644 index 0000000..074b069 --- /dev/null +++ b/.env.template @@ -0,0 +1,3 @@ +VITE_PAYPAL_CLIENT_ID= +PAYPAL_CLIENT_SECRET= +VITE_PAYPAL_ENV= \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1635af6..d671d82 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -6,7 +6,7 @@ module.exports = { ignorePatterns: ["*.cjs"], overrides: [{ files: ["*.svelte"], processor: "svelte3/svelte3" }], settings: { - "svelte3/typescript": require("typescript"), + "svelte3/typescript": () => require("typescript"), }, parserOptions: { sourceType: "module", diff --git a/package-lock.json b/package-lock.json index 9194db5..79ff69e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,6 +151,21 @@ "fastq": "^1.6.0" } }, + "@paypal/checkout-server-sdk": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@paypal/checkout-server-sdk/-/checkout-server-sdk-1.0.2.tgz", + "integrity": "sha512-9wNxqgXrolEPfX62PEwyUB3SBGVF7v9N28rNJpXNp89qEpLoLStM+CT4wm/fcfYiVj9BHpimKcB4B7CBbLirxQ==", + "dev": true, + "requires": { + "@paypal/paypalhttp": "^1.0.0" + } + }, + "@paypal/paypalhttp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@paypal/paypalhttp/-/paypalhttp-1.0.0.tgz", + "integrity": "sha512-6gHT5HhPLObICXU8LFFiuoH0vCh3y1y0jl0OWDRuTZvptZ1WRS2eKcHigheytqxk+CWTH0qh0M3S5vEf1PJrSw==", + "dev": true + }, "@rollup/pluginutils": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", diff --git a/package.json b/package.json index 53e1f5f..603d788 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,11 @@ "dev": "svelte-kit dev", "build": "svelte-kit build", "preview": "svelte-kit preview", - "lint": "prettier --check . && eslint --ignore-path .gitignore .", - "format": "prettier --write ." + "lint": "prettier --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", + "format": "prettier --write --plugin-search-dir=. ." }, "devDependencies": { + "@paypal/checkout-server-sdk": "^1.0.2", "@sveltejs/adapter-vercel": "next", "@sveltejs/kit": "next", "@typescript-eslint/eslint-plugin": "^4.23.0", @@ -26,8 +27,7 @@ "svelte-preprocess": "^4.7.3", "tailwindcss": "^2.1.1", "tslib": "^2.0.0", - "typescript": "^4.0.0", - "vite": "^2.3.2" + "typescript": "^4.0.0" }, "type": "module" } diff --git a/src/global.d.ts b/src/global.d.ts index 28c9d2a..3bcd93b 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -7,5 +7,12 @@ declare namespace paypal { render(selector: string): void; } - function Buttons(options: { createOrder: (data: unknown, actions: unknown) => unknown }): Button; + interface ButtonOptions { + createOrder: (data: unknown, actions: unknown) => unknown; + onApprove: (data: unknown, actions: unknown) => unknown; + onCancel: (data: unknown) => unknown; + onError: (data: unknown) => unknown; + } + + function Buttons(options: ButtonOptions): Button; } diff --git a/src/lib/buy/PayPalCheckout.svelte b/src/lib/buy/PayPalCheckout.svelte index a00af6a..5d4adb1 100644 --- a/src/lib/buy/PayPalCheckout.svelte +++ b/src/lib/buy/PayPalCheckout.svelte @@ -1,11 +1,14 @@ diff --git a/src/lib/buy/paypal-sdk.ts b/src/lib/buy/paypal-sdk.ts new file mode 100644 index 0000000..fcdb254 --- /dev/null +++ b/src/lib/buy/paypal-sdk.ts @@ -0,0 +1,12 @@ +import paypal from "@paypal/checkout-server-sdk"; + +// Creating an environment +const clientId = import.meta.env.VITE_PAYPAL_CLIENT_ID; +const clientSecret = import.meta.env.PAYPAL_CLIENT_SECRET; + +const environment = + import.meta.env.VITE_PAYPAL_ENV === "live" + ? new paypal.core.LiveEnvironment(clientId, clientSecret) + : new paypal.core.SandboxEnvironment(clientId, clientSecret); + +export const client = new paypal.core.PayPalHttpClient(environment); diff --git a/src/routes/api/process-order.ts b/src/routes/api/process-order.ts new file mode 100644 index 0000000..2777db2 --- /dev/null +++ b/src/routes/api/process-order.ts @@ -0,0 +1,7 @@ +import type { RequestHandler } from "@sveltejs/kit"; + +export const post: RequestHandler = async () => { + console.log(import.meta.env.VITE_PAYPAL_CLIENT_ID); + + return { body: {} }; +}; diff --git a/svelte.config.js b/svelte.config.js index bee9d90..82cadc9 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,21 +1,20 @@ -import sveltePreprocess from "svelte-preprocess"; +import preprocess from "svelte-preprocess"; import vercel from "@sveltejs/adapter-vercel"; -/** @type {import("@sveltejs/kit").Config} */ +/** @type {import('@sveltejs/kit').Config} */ const config = { // Consult https://github.com/sveltejs/svelte-preprocess // for more information about preprocessors preprocess: [ - sveltePreprocess({ + preprocess({ postcss: true, }), ], kit: { - adapter: vercel(), - // hydrate the
element in src/app.html target: "#svelte", + adapter: vercel(), }, };