@onepay-payment-sdk/server
Version:
server payment sdk for onepay payment gateway
1 lines • 17.1 kB
Source Map (JSON)
{"version":3,"sources":["../src/constants/environment.ts","../src/exceptions/PaymentException.ts","../src/validation/inputValidators.ts","../src/constants/currency.ts","../src/api/requests.ts","../src/utils/generatePaymentLink.ts","../src/onepay.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["export const ENVIRONMENT_API = {\n LIVE: \"https://merchant-api-live-v2.onepay.lk/api/ipg/gateway\",\n} as const;\n","export class PaymentException extends Error {\n constructor(message: string) {\n super(message);\n\n this.name = \"PaymentError\";\n this.message = message;\n }\n}\n","import { PaymentException } from \"../exceptions/PaymentException\";\nimport { BasicPaymentParams } from \"../interfaces\";\n\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isValidEmail(email: string) {\n const atIndex = email.indexOf(\"@\");\n const dotIndex = email.lastIndexOf(\".\");\n\n // Check if '@' exists and is not at the start or end\n if (atIndex < 1 || atIndex === email.length - 1) {\n return false;\n }\n\n // Check if a '.' exists after the '@' symbol\n if (dotIndex < atIndex + 2 || dotIndex === email.length - 1) {\n return false;\n }\n\n // Check if the email contains spaces\n if (email.includes(\" \")) {\n return false;\n }\n\n return true;\n}\n\nexport function validatePayLink(url: string): URL {\n let urlObj: URL;\n\n try {\n urlObj = new URL(url);\n\n if (!urlObj.protocol.startsWith(\"https\")) {\n throw new Error(\"URL must use HTTPS Protocol\");\n }\n\n if (urlObj.searchParams.get(\"hash\") === null) {\n throw new Error(\"Missing salt query parameter\");\n }\n\n return urlObj;\n } catch (error: unknown) {\n if (error instanceof PaymentException) {\n throw new PaymentException(error.message);\n } else {\n throw new Error(\"Failed to parse URL\");\n }\n }\n}\n\n// simple payment params validation for prevent unnecessary api calls\nexport function validatePaymentParams(\n basicParams: BasicPaymentParams,\n): BasicPaymentParams {\n if (\n typeof basicParams.firstName !== \"string\" ||\n basicParams.firstName.length < 1\n ) {\n throw new Error(\"First name must be a non-empty string\");\n }\n\n if (\n typeof basicParams.lastName !== \"string\" ||\n basicParams.lastName.length < 1\n ) {\n throw new Error(\"Last name must be a non-empty string\");\n }\n\n if (\n typeof basicParams.email !== \"string\" ||\n !isValidEmail(basicParams.email)\n ) {\n throw new Error(\"Email must be a valid email address\");\n }\n\n if (typeof basicParams.phone !== \"string\") {\n throw new Error(\"Phone number must be a string\");\n }\n\n if (typeof basicParams.amount !== \"number\" || basicParams.amount < 100) {\n throw new Error(\"Amount must be a number greater than or equal to 100\");\n }\n\n if (\n typeof basicParams.reference !== \"string\" ||\n basicParams.reference.length < 10 ||\n basicParams.reference.length > 20\n ) {\n throw new Error(\n \"Reference must be a string with a length between 10 and 20 characters\",\n );\n }\n\n if (\n typeof basicParams.transactionRedirectUrl !== \"string\" ||\n !isValidUrl(basicParams.transactionRedirectUrl)\n ) {\n throw new Error(\"Transaction redirect URL is not valid\");\n }\n\n return basicParams;\n}\n","export const Currency = {\n USD: \"USD\",\n LKR: \"LKR\",\n} as const;\n\nexport type CurrencyType = keyof typeof Currency;\n","import https, { RequestOptions } from \"https\";\nimport { OnepayPaymentParams, PaymentResponse } from \"../interfaces\";\nimport { validatePayLink } from \"../validation\";\n\nasync function paymentRequest(\n url: string,\n token: string,\n body: OnepayPaymentParams,\n): Promise<PaymentResponse> {\n if (!url && !token && !body) {\n throw new Error(\"Missing required parameters\");\n }\n\n const urlObj = validatePayLink(url);\n\n const hashParam = urlObj.searchParams.get(\"hash\");\n\n const TIMEOUT_MS = 30000;\n\n const options: RequestOptions = {\n hostname: urlObj.hostname,\n path: urlObj.pathname + `?hash=${hashParam}`,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n authorization: token,\n },\n timeout: TIMEOUT_MS,\n };\n\n return new Promise((resolve, reject) => {\n const req = https.request(options, (res) => {\n const chunks: Buffer[] = [];\n\n res.setTimeout(TIMEOUT_MS, () => {\n req.destroy(new Error(\"Response timeout\"));\n });\n\n res.on(\"data\", (chunk) => {\n chunks.push(Buffer.from(chunk));\n });\n\n res.on(\"end\", () => {\n try {\n const data = Buffer.concat(chunks).toString(\"utf8\");\n\n const response: PaymentResponse = JSON.parse(data);\n\n // if (!response.status || !response.message || !response.data) {\n // throw new Error(\"Invalid response format\");\n // }\n\n if (res.statusCode === 200 && response.status === 1000) {\n resolve({\n status: response.status,\n message: response.message,\n data: response.data,\n });\n } else {\n const error: Error = new Error(data);\n reject(error);\n }\n } catch (err) {\n const error: Error = new Error(\"Failed to Process response\" + err);\n reject(error);\n }\n });\n });\n\n req.on(\"error\", (error) => {\n reject(error);\n });\n\n req.write(JSON.stringify(body));\n\n req.end();\n });\n}\n\nexport { paymentRequest };\n","import crypto from \"crypto\";\nimport { PaymentLinkParams } from \"../interfaces\";\n\nexport function generatePaymentLink(\n paymentLinkParams: PaymentLinkParams,\n): string {\n const { baseURL, salt, paymentParams } = paymentLinkParams;\n\n if (!baseURL) {\n throw new Error(\"Missing required parameter : BaseURL\");\n }\n\n if (!salt) {\n throw new Error(\"Missing required parameter : Salt\");\n }\n\n if (!paymentParams || typeof paymentParams !== \"object\") {\n throw new Error(\"Invalid or missing paymentParams. It must be an object.\");\n }\n\n try {\n const paymentParamsString = JSON.stringify(paymentParams);\n\n // Generate hash\n const hash = crypto\n .createHash(\"sha256\")\n .update(paymentParamsString + salt)\n .digest(\"hex\");\n\n // Normalize base URL to remove trailing slash if exists\n const normalizeBaseURL = baseURL.endsWith(\"/\")\n ? baseURL.slice(0, -1)\n : baseURL;\n\n const paymentLink = new URL(`${normalizeBaseURL}/request-payment-link/`);\n\n // append query parameters\n paymentLink.searchParams.append(\"hash\", hash);\n\n return paymentLink.toString();\n } catch (error: unknown) {\n throw new Error(\n `Failed to generate payment link : ${error instanceof Error ? error.message : String(error)}`,\n {\n cause: error,\n },\n );\n }\n}\n","import type {\n OnepayConfig,\n BasicPaymentParams,\n OnepayPaymentParams,\n PaymentResponse,\n} from \"./interfaces\";\n\nimport { ENVIRONMENT_API } from \"./constants/environment\";\nimport { validatePaymentParams } from \"./validation\";\nimport { Currency } from \"./constants\";\nimport { paymentRequest } from \"./api/requests\";\nimport { generatePaymentLink } from \"./utils\";\n\nexport class Onepay {\n private appId: string;\n private token: string;\n private salt: string;\n private baseUrl: string;\n private paymentParams: OnepayPaymentParams | null;\n\n constructor(onepayConfig: OnepayConfig) {\n this.appId = onepayConfig.appId;\n this.token = onepayConfig.token;\n this.salt = onepayConfig.salt;\n this.baseUrl = ENVIRONMENT_API.LIVE;\n this.paymentParams = null;\n }\n\n public generatePaymentParams(\n basicParams: BasicPaymentParams\n ): OnepayPaymentParams {\n if (!this.appId) {\n throw new Error(\"App ID not initialized\");\n }\n\n const validatedParams = validatePaymentParams(basicParams);\n\n const paymentDetailsWithAppId: OnepayPaymentParams = {\n amount: validatedParams.amount,\n reference: validatedParams.reference,\n customer_email: validatedParams.email,\n customer_first_name: validatedParams.firstName,\n customer_last_name: validatedParams.lastName,\n customer_phone_number: validatedParams.phone,\n transaction_redirect_url: validatedParams.transactionRedirectUrl,\n ...(validatedParams.additionalData && {\n additional_data: validatedParams.additionalData,\n }),\n currency: validatedParams.currency || Currency.LKR,\n app_id: this.appId,\n };\n\n this.paymentParams = paymentDetailsWithAppId;\n\n try {\n return this.paymentParams;\n } catch (err: unknown) {\n if (err instanceof Error) {\n throw new Error(`Failed to serialize payment: ${err.message}`);\n } else {\n throw new Error(\"Failed to serialize payment:\");\n }\n }\n }\n\n public async createPaymentRequest(\n onepayPaymentParams: OnepayPaymentParams\n ): Promise<PaymentResponse> {\n if (!this.token) {\n throw new Error(\"Token not initialized\");\n }\n\n if (!this.salt) {\n throw new Error(\"Salt not initialized\");\n }\n\n try {\n const paymentRequestUrl = generatePaymentLink({\n baseURL: this.baseUrl,\n paymentParams: onepayPaymentParams,\n salt: this.salt,\n });\n\n const response = await paymentRequest(\n paymentRequestUrl,\n this.token,\n onepayPaymentParams\n );\n\n return response;\n } catch (err) {\n throw new Error(\"Failed to create payment request\" + err);\n }\n }\n}\n","import { Onepay } from \"./onepay\";\nimport { ENVIRONMENT_API, Currency, CurrencyType } from \"./constants\";\n\nexport { Onepay, ENVIRONMENT_API, Currency };\nexport type { CurrencyType };\n\nexport default Onepay;\n"]}