From 3e095fa44f6ef52ffe842e84baf8e4ced05f3fd6 Mon Sep 17 00:00:00 2001 From: ABHIRUP Date: Sat, 29 Jun 2024 21:26:37 +0530 Subject: [PATCH] generate payment url route --- backend/bun.lockb | Bin 98096 -> 122983 bytes backend/package.json | 3 ++ backend/src/routes/index.ts | 4 ++- backend/src/routes/payment/index.ts | 24 +++++++++++++ .../src/routes/payment/payment.controller.ts | 34 ++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 backend/src/routes/payment/index.ts create mode 100644 backend/src/routes/payment/payment.controller.ts diff --git a/backend/bun.lockb b/backend/bun.lockb index c2a10ad29a86822f3a15a160351dd7e108004805..4da2a9f5f844180eb56a9486f3c1165bb6ac0133 100755 GIT binary patch delta 29398 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 UhXI+4-mbiKrn?clynNpO0|!ZE7XSbN delta 13732 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

;KyUM31ABpez<%Iw04>)-;AsHg zf2El~F;D`O0^@-30DWhgNb5TZ8GP5)ZY)d%KL~^YV*z}fq<`_zzL^aJ4+oNgBwz@T z2w)Ry-|X;Vn!YhgkpRBYYhMS0!65(zZ394o`YS-e*#z8{g!gdPrPWE~PXVVTkuaQv zR2@d1K0DA)r|*CdfyKZQ;8}nJ&jCw;WdMC+tOo2r1uy}40LTNfflOdJFa}ToD-aFD z0I|S8fZ~zj53yLK#n(zGUk26yF8~h#vw%uqHjoD70M~)dz!u;=U@fo?pa6amm;>Yj zH-H*o8}L3rvHS+`Ca?l<0PBIb$o)r=Sp>`l<^u)544??0FP0I&0AM>nAL|G|12=)6 zfR_OJR8?kd!S$`R4dQnPy1l@^fFr~d>+obY(4~sXD4f0pz5~7i_8T(kOqoLO z6<{}T2>8Ol_Xa-+J`Kyy*o`3wdyBtM!QAx`d(i|NB`i}xdS_z%RMv@Ai{hzp@F_p-!R7oq(rd!x?{Bp9 z(no-q`Bto+%Bua%JA#u^uQlXOYty7noi;?9h<}jf|ECDT5G%xo4`LX#qB@iH7bh~A z8~aQoWnj1m#K7syI}p8?R}-&(GQVuafnEDC1VrB;OksT|@k|EujWq96KE2KT-11je zwburTVdAOnuU|p?-oG;bR(07Lltg3rXjSXdOZ=F@V%W2y|1@;DLJXgVDaaHKqIB^V zDerMjG)}{;-0PoTqs}PF~`ROcv<>RagD;m;0>K$se@X8jP+ek}#HUM2jrUVxSn8g_in> zm04(4Cx7$eXY{BqFNeR_X^snmmgdU|vL>bp7EQ zuYI{{O|#vpVBySz6Xw;`h>d^AtuHG5s@Wn4zgQ6Y&YOuIZ>DFI2RD~25xc36mqdIa zXuZH3`FWamX8-0<`{=J9EV{EkiU5ob$IBR*|Ev1_cz-;F9HjgUzB-wHT=-N%+5vx=2_H+*D|5sbK7fXomO09?L z2BOO>)+xZekz2VTXx5Z1q5qT_9$8VepLQgO4`$&hx;sIX5T8sCSHS`1-QAcCLx;AL z7cQ3BPx$eRBLtUt^%^D{HN1YWh6t!cn=DC0RkE&l7Sm|uaY>@Qk~stZ^H$CpB0Oee zr`~&n_{l{>#DmZVn74cn9C-EPiR(T5Fek=yaPbiF3@oC|`@x=b^FHkx-g~|_YdEX$ zh!~>Zt8Kh^yX5AZbzh()JOoF}-J>VKyknfu@091ob&Xw`TVFFobeMzRK&^(05#T8E z5^IMu-h_;Gub+cYMOv{R29; zU)yY9-uU%xYz!O!Wt6SCByoheg}MRe9pTU+%cpO3Z7Vlh6pRp|4zzCGD*i~ioZRcY zoY-t(-a9U=8N6&u8Qk^VTpl*P9uiLGCLjU*J zbGw=?)+LLtsde+hw0RdAKTV?Xqckj3GOt#fx291Nj^}oGNc7fJky?!SE>9JSWz4r# zD80WTg$|_88D1iG9vdJE=CRNuJGA)8=^U9{nR7h)+RO!zTS0y&srulqTweV+WDm$M zL_Xd33jgJWWrn?Vwu^WxaMhC4;?O)6ST(+jer^5pC;xHl zjub)mguG_v)Ti>2lL9sy<&NEN-+E-uxyTP8w@3NB;_rr?$PaIA{vRXnUGDig|Iw}R zYm~P`dE4pZeEK{;VqYfxQz+8&3p5r79%fH$eQZ8k6E8OGWo}#N?O_wzDTx)1GMjzi dY`ZwJ9lwyG4&xo->7C3~e6gK%;H>fa{{bdvZ7Bc% diff --git a/backend/package.json b/backend/package.json index 5a9c8e9..e90520d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -15,6 +15,9 @@ "@elysiajs/swagger": "^1.0.5", "@lucia-auth/adapter-prisma": "^4.0.1", "@prisma/client": "^5.16.1", + "@solana/pay": "^0.2.5", + "@solana/web3.js": "^1.94.0", + "bignumber.js": "^9.1.2", "elysia": "latest", "lucia": "^3.2.0", "pino-pretty": "^11.2.1", diff --git a/backend/src/routes/index.ts b/backend/src/routes/index.ts index 7938dc9..573aa39 100644 --- a/backend/src/routes/index.ts +++ b/backend/src/routes/index.ts @@ -1,12 +1,14 @@ import { Elysia } from "elysia"; import authRoutes from "@/routes/auth"; import machineRoutes from "@/routes/machine"; +import paymentRoutes from "@/routes/payment"; const routes = new Elysia(); routes .get("/", () => "Hello from Elysia!") .group("/auth", (routes) => routes.use(authRoutes)) - .group("/machine", (routes) => routes.use(machineRoutes)); + .group("/machine", (routes) => routes.use(machineRoutes)) + .group("/payment", (routes) => routes.use(paymentRoutes)); export default routes; diff --git a/backend/src/routes/payment/index.ts b/backend/src/routes/payment/index.ts new file mode 100644 index 0000000..3cc9f35 --- /dev/null +++ b/backend/src/routes/payment/index.ts @@ -0,0 +1,24 @@ +import { Elysia, t } from "elysia"; +import paymentController from "@/routes/payment/payment.controller"; + +const paymentRoutes = new Elysia(); + +paymentRoutes + .post("/generate", paymentController.GenerateURL, { + body: t.Object( + { + destinationWallet: t.String(), + cost: t.Number() + }, + { + description: "Expected Destination Wallet address.", + }, + ), + detail: { + summary: "Generate Payment URL", + tags: ["payment"], + }, + }) + + +export default paymentRoutes; diff --git a/backend/src/routes/payment/payment.controller.ts b/backend/src/routes/payment/payment.controller.ts new file mode 100644 index 0000000..f617f5d --- /dev/null +++ b/backend/src/routes/payment/payment.controller.ts @@ -0,0 +1,34 @@ +import { Connection, Keypair, PublicKey } from '@solana/web3.js'; +import { encodeURL } from '@solana/pay'; +import BigNumber from 'bignumber.js'; + + +const reference = new Keypair().publicKey; +const label = 'Escrow Contract'; +const message = 'Funding Escrow Contract'; +const memo = 'Solana Pay Public Memo'; + + +const GenerateURL = async ({ body, set, log }) => { + try { + const { destinationWallet, cost } = body; + + const recipient = new PublicKey(destinationWallet); + const amount = new BigNumber(cost); + + const url: URL = encodeURL({ recipient, amount, reference, label, message, memo }); + // console.log('Payment request link:', url); + + set.status = 201; + return url; + } catch (err) { + log.error(err); + set.status = 500; + return { message: "Internal Server Error" }; + } +}; + + +export default { + GenerateURL +};