summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.eslintrc.json1
-rw-r--r--.gitignore2
-rw-r--r--.husky/pre-commit2
-rw-r--r--.prettierignore3
-rw-r--r--api/_env.js33
-rw-r--r--api/_env.js.map1
-rw-r--r--api/_paypal.js200
-rw-r--r--api/_paypal.js.map1
-rw-r--r--api/createPaypalOrder.js86
-rw-r--r--api/createPaypalOrder.js.map1
10 files changed, 326 insertions, 4 deletions
diff --git a/.eslintrc.json b/.eslintrc.json
index 6e3410d..f0cdd75 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -8,6 +8,7 @@
"plugin:astro/recommended",
"plugin:@typescript-eslint/recommended"
],
+ "ignorePatterns": ["api"],
"overrides": [
{
"files": ["*.astro"],
diff --git a/.gitignore b/.gitignore
index c1e95bc..7f25ed9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,5 +7,3 @@ npm-debug.log*
dist/
.astro/
.vercel
-api/**/*
-!api/package.json
diff --git a/.husky/pre-commit b/.husky/pre-commit
index 36af219..d7230e9 100644
--- a/.husky/pre-commit
+++ b/.husky/pre-commit
@@ -1,4 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
-npx lint-staged
+npx lint-staged && cd api-src && npx tsc && git add ../api
diff --git a/.prettierignore b/.prettierignore
index 886787f..ff2a18e 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -13,4 +13,5 @@ npm-debug.log*
.prettierignore
.gitattributes
.gitignore
-*.ico \ No newline at end of file
+*.ico
+api \ No newline at end of file
diff --git a/api/_env.js b/api/_env.js
new file mode 100644
index 0000000..409a6df
--- /dev/null
+++ b/api/_env.js
@@ -0,0 +1,33 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var path_1 = __importDefault(require("path"));
+var dotenv_1 = __importDefault(require("dotenv"));
+// Parsing the env file.
+dotenv_1.default.config({ path: path_1.default.resolve(__dirname, '../.env') });
+var ENV = {
+ PAYPAL_LIVE_CLIENT_ID: 1,
+ PAYPAL_LIVE_SECRET: 1,
+ PAYPAL_SANDBOX_CLIENT_ID: 1,
+ PAYPAL_SANDBOX_SECRET: 1,
+ ENVIRONMENT: 1,
+};
+var env = process.env;
+var sanitisedEnvEntries = Object.keys(ENV)
+ .map(function (key) {
+ var value = env[key];
+ if (!value) {
+ throw new Error("Environment not configured correctly. ".concat(key, " was not defined."));
+ }
+ if (key === 'ENVIRONMENT') {
+ if (!['dev', 'prod'].includes(value)) {
+ throw new Error("\n Environment not configured correctly. ".concat(key, " must be\n either 'dev' or 'prod', but '").concat(value, "' was provided.\n "));
+ }
+ }
+ return [key, value];
+});
+var sanitisedEnv = Object.fromEntries(sanitisedEnvEntries);
+exports.default = sanitisedEnv;
+//# sourceMappingURL=_env.js.map \ No newline at end of file
diff --git a/api/_env.js.map b/api/_env.js.map
new file mode 100644
index 0000000..e76fe63
--- /dev/null
+++ b/api/_env.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"_env.js","sourceRoot":"","sources":["../api-src/_env.ts"],"names":[],"mappings":";;;;;AAAA,8CAAwB;AACxB,kDAA4B;AAE5B,wBAAwB;AACxB,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAY5D,IAAM,GAAG,GAAmC;IAC1C,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,EAAE,CAAC;IACrB,wBAAwB,EAAE,CAAC;IAC3B,qBAAqB,EAAE,CAAC;IACxB,WAAW,EAAE,CAAC;CACf,CAAC;AAEM,IAAA,GAAG,GAAwB,OAAO,IAA/B,CAAgC;AAE3C,IAAM,mBAAmB,GACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAmB;KAClC,GAAG,CAAsB,UAAA,GAAG;IAC3B,IAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,gDAAyC,GAAG,sBAAmB,CAAC,CAAC;KAClF;IAED,IAAI,GAAG,KAAK,aAAa,EAAE;QACzB,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,4DAC0B,GAAG,8DACZ,KAAK,8BACrC,CAAC,CAAC;SACJ;KACF;IACD,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,IAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAQ,CAAC;AAEpE,kBAAe,YAAY,CAAC"} \ No newline at end of file
diff --git a/api/_paypal.js b/api/_paypal.js
new file mode 100644
index 0000000..6b5f95a
--- /dev/null
+++ b/api/_paypal.js
@@ -0,0 +1,200 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.paypalCaptureOrder = exports.paypalCreateOrder = void 0;
+var _env_1 = __importDefault(require("./_env"));
+function paypalCreateOrder(order) {
+ return __awaiter(this, void 0, void 0, function () {
+ var accessToken, url, response;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, getLazyAccessToken()];
+ case 1:
+ accessToken = _a.sent();
+ url = "".concat(PAYPAL_URL, "/v2/checkout/orders");
+ return [4 /*yield*/, fetch(url, {
+ method: 'POST',
+ headers: paypalCreateOrderRequestHeaders(accessToken),
+ body: paypalCreateOrderRequestBody(order),
+ })];
+ case 2:
+ response = _a.sent();
+ return [4 /*yield*/, handle(response)];
+ case 3: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+}
+exports.paypalCreateOrder = paypalCreateOrder;
+function paypalCaptureOrder(orderId) {
+ return __awaiter(this, void 0, void 0, function () {
+ var accessToken, url, response;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, getLazyAccessToken()];
+ case 1:
+ accessToken = _a.sent();
+ url = "".concat(PAYPAL_URL, "/v2/checkout/orders/").concat(orderId, "/capture");
+ return [4 /*yield*/, fetch(url, {
+ method: 'POST',
+ headers: paypalCaptureOrderRequestHeaders(accessToken),
+ })];
+ case 2:
+ response = _a.sent();
+ return [4 /*yield*/, handle(response)];
+ case 3: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+}
+exports.paypalCaptureOrder = paypalCaptureOrder;
+function handle(response) {
+ return __awaiter(this, void 0, void 0, function () {
+ var _a, _b;
+ return __generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ if (!response.ok) return [3 /*break*/, 2];
+ return [4 /*yield*/, response.json()];
+ case 1: return [2 /*return*/, _c.sent()];
+ case 2:
+ _a = Error.bind;
+ _b = 'Failed to communicate with PayPal. ';
+ return [4 /*yield*/, response.text()];
+ case 3: throw new (_a.apply(Error, [void 0, _b + (_c.sent())]))();
+ }
+ });
+ });
+}
+function paypalCreateOrderRequestBody(order) {
+ var body = JSON.stringify({
+ intent: 'CAPTURE',
+ purchase_units: [
+ {
+ description: order.productDescription,
+ soft_descriptor: order.shortDescription,
+ amount: {
+ currency_code: 'GBP',
+ value: order.totalPrice.toFixed(2),
+ },
+ },
+ ],
+ });
+ return body;
+}
+function paypalCreateOrderRequestHeaders(accessToken) {
+ return {
+ 'Content-Type': 'application/json',
+ Authorization: "Bearer ".concat(accessToken),
+ };
+}
+function paypalCaptureOrderRequestHeaders(accessToken) {
+ return {
+ Authorization: "Bearer ".concat(accessToken),
+ };
+}
+var getLazyAccessToken = (function () {
+ var accessToken;
+ var timeRequested;
+ var timeExpires;
+ return function () {
+ return __awaiter(this, void 0, void 0, function () {
+ var isNearlyExpired, secondsUntilExpires, msUntilExpires;
+ var _a;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ isNearlyExpired = timeExpires - Date.now() < 10000;
+ if (!(!accessToken || isNearlyExpired)) return [3 /*break*/, 2];
+ timeRequested = Date.now();
+ secondsUntilExpires = void 0;
+ return [4 /*yield*/, generateAccessToken()];
+ case 1:
+ (_a = _b.sent(), accessToken = _a.accessToken, secondsUntilExpires = _a.secondsUntilExpires);
+ msUntilExpires = secondsUntilExpires * 1000;
+ timeExpires = timeRequested + msUntilExpires;
+ _b.label = 2;
+ case 2: return [2 /*return*/, accessToken];
+ }
+ });
+ });
+ };
+})();
+function generateAccessToken() {
+ return __awaiter(this, void 0, void 0, function () {
+ var auth, response, _a, access_token, expires_in;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ auth = Buffer.from(PAYPAL_CLIENT_ID + ':' + PAYPAL_SECRET).toString('base64');
+ return [4 /*yield*/, fetch("".concat(PAYPAL_URL, "/v1/oauth2/token"), {
+ method: 'POST',
+ body: 'grant_type=client_credentials',
+ headers: {
+ Authorization: "Basic ".concat(auth),
+ },
+ })];
+ case 1:
+ response = _b.sent();
+ return [4 /*yield*/, response.json()];
+ case 2:
+ _a = _b.sent(), access_token = _a.access_token, expires_in = _a.expires_in;
+ if (access_token && expires_in) {
+ return [2 /*return*/, {
+ accessToken: access_token,
+ secondsUntilExpires: expires_in,
+ }];
+ }
+ throw new Error('Could not fetch access token from PayPal.');
+ }
+ });
+ });
+}
+var PAYPAL_CLIENT_ID = _env_1.default.ENVIRONMENT === 'prod'
+ ? _env_1.default.PAYPAL_LIVE_CLIENT_ID
+ : _env_1.default.PAYPAL_SANDBOX_CLIENT_ID;
+var PAYPAL_SECRET = _env_1.default.ENVIRONMENT === 'prod'
+ ? _env_1.default.PAYPAL_LIVE_SECRET
+ : _env_1.default.PAYPAL_SANDBOX_SECRET;
+var PAYPAL_URL = _env_1.default.ENVIRONMENT === 'prod'
+ ? 'https://api-m.paypal.com'
+ : 'https://api-m.sandbox.paypal.com';
+//# sourceMappingURL=_paypal.js.map \ No newline at end of file
diff --git a/api/_paypal.js.map b/api/_paypal.js.map
new file mode 100644
index 0000000..0c69282
--- /dev/null
+++ b/api/_paypal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"_paypal.js","sourceRoot":"","sources":["../api-src/_paypal.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/api/createPaypalOrder.js b/api/createPaypalOrder.js
new file mode 100644
index 0000000..f4814e0
--- /dev/null
+++ b/api/createPaypalOrder.js
@@ -0,0 +1,86 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var _paypal_1 = require("./_paypal");
+function handler(request, response) {
+ return __awaiter(this, void 0, void 0, function () {
+ var _a, productDescription, shortDescription, totalPrice, paypalResponse, err_1;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = request.body, productDescription = _a.productDescription, shortDescription = _a.shortDescription, totalPrice = _a.totalPrice;
+ console.info('api/createPaypalOrder: Received body: ');
+ console.info('productDescription: ' + productDescription);
+ console.info('shortDescription: ' + shortDescription);
+ console.info('totalPrice: ' + totalPrice);
+ if (!!productDescription) return [3 /*break*/, 1];
+ response.status(400).send('Expected body to contain productDescription, but none provided.');
+ return [3 /*break*/, 6];
+ case 1:
+ if (!!shortDescription) return [3 /*break*/, 2];
+ response.status(400).send('Expected body to contain shortDescription, but none provided.');
+ return [3 /*break*/, 6];
+ case 2:
+ if (!!totalPrice) return [3 /*break*/, 3];
+ response.status(400).send('Expected body to contain totalPrice, but none provided.');
+ return [3 /*break*/, 6];
+ case 3:
+ _b.trys.push([3, 5, , 6]);
+ return [4 /*yield*/, (0, _paypal_1.paypalCreateOrder)({ productDescription: productDescription, shortDescription: shortDescription, totalPrice: totalPrice })];
+ case 4:
+ paypalResponse = _b.sent();
+ if (paypalResponse.ok) {
+ response.status(200).json({
+ orderId: paypalResponse.id,
+ });
+ }
+ else {
+ throw new Error("PayPal returned ".concat(paypalResponse.statusCode, " ").concat(paypalResponse.statusMessage));
+ }
+ return [3 /*break*/, 6];
+ case 5:
+ err_1 = _b.sent();
+ response.status(500).send("Internal server error. ".concat(err_1));
+ return [3 /*break*/, 6];
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+}
+exports.default = handler;
+//# sourceMappingURL=createPaypalOrder.js.map \ No newline at end of file
diff --git a/api/createPaypalOrder.js.map b/api/createPaypalOrder.js.map
new file mode 100644
index 0000000..35c18f0
--- /dev/null
+++ b/api/createPaypalOrder.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"createPaypalOrder.js","sourceRoot":"","sources":["../api-src/createPaypalOrder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qCAA8C;AAE9C,SAA8B,OAAO,CAAC,OAAsB,EAAE,QAAwB;;;;;;oBAC9E,KAAuE,OAAO,CAAC,IAAI,EAAjF,kBAAkB,wBAAA,EAAE,gBAAgB,sBAAA,EAAE,UAAU,gBAAA,CAAkC;oBAC1F,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,kBAAkB,CAAC,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC;oBACtD,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC;yBAEtC,CAAC,kBAAkB,EAAnB,wBAAmB;oBACrB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;;;yBACpF,CAAC,gBAAgB,EAAjB,wBAAiB;oBAC1B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;;;yBAClF,CAAC,UAAU,EAAX,wBAAW;oBACpB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;;;;oBAG5D,qBAAM,IAAA,2BAAiB,EAAC,EAAE,kBAAkB,oBAAA,EAAE,gBAAgB,kBAAA,EAAE,UAAU,YAAA,EAAE,CAAC,EAAA;;oBAA9F,cAAc,GAAG,SAA6E;oBAEpG,IAAI,cAAc,CAAC,EAAE,EAAE;wBACrB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACxB,OAAO,EAAE,cAAc,CAAC,EAAE;yBAC3B,CAAC,CAAC;qBACJ;yBAAM;wBACL,MAAM,IAAI,KAAK,CAAC,0BAAmB,cAAc,CAAC,UAAU,cAAI,cAAc,CAAC,aAAa,CAAE,CAAC,CAAC;qBACjG;;;;oBAED,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iCAA0B,KAAG,CAAE,CAAC,CAAC;;;;;;CAGhE;AA5BD,0BA4BC"} \ No newline at end of file