UNPKG

bitsnap-checkout

Version:

This is Bitsnap Checkout React library for easy integration with any website which is using React framework

1 lines 10.4 kB
{"version":3,"sources":["../src/backend.ts","../src/public.api.backend.ts"],"sourcesContent":["import { create } from \"@bufbuild/protobuf\";\nimport zod from \"zod\";\nimport {\n NotifyUserAboutProductAvailabilityRequest,\n NotifyUserAboutProductAvailabilityRequestSchema,\n} from \"./gen/proto/public/v1/public_api_pb\";\nimport { BitsnapModels } from \"./models\";\nimport { PublicApiClient } from \"./public.api.backend\";\n\nlet BACKEND_HOST = \"https://bitsnap.pl\";\nlet API_KEY: string | undefined;\n\nexport namespace BitsnapBackend {\n export async function setCustomHost(host: string) {\n BACKEND_HOST = host;\n }\n export function getHost() {\n return BACKEND_HOST;\n }\n export async function setApiKey(apiKey: string) {\n API_KEY = apiKey;\n }\n\n export async function getProduct(\n projectID: string,\n id: string,\n requestInit?: RequestInit,\n ) {\n const payload = {\n \"0\": {\n projectID: projectID,\n id: id,\n },\n };\n\n const encodedPayload = new URLSearchParams();\n encodedPayload.set(\"batch\", \"1\");\n encodedPayload.set(\"input\", JSON.stringify(payload));\n\n const result = await fetch(\n BACKEND_HOST +\n \"/api/trpc/product.getProductById?\" +\n encodedPayload.toString(),\n {\n ...(requestInit ?? {}),\n headers: {\n ...(requestInit?.headers ?? {}),\n \"Content-Type\": \"application/json\",\n Priority: \"u=3, i\",\n },\n },\n );\n\n const downloadedPayload = await result.json();\n\n const parsedResult =\n await BitsnapModels.ProductResultSchema.parseAsync(downloadedPayload);\n\n if (parsedResult.length == 0) {\n return undefined;\n }\n const parsed = parsedResult[0];\n\n return parsed.result;\n }\n\n export async function getProducts(\n projectID: string,\n limit: number,\n offset: number,\n requestInit?: RequestInit,\n opts?: {\n groupVariants?: boolean;\n },\n ) {\n const productsPayload: { [key: string]: any } = {\n \"0\": {\n projectID: projectID,\n limit: limit,\n offset: offset,\n },\n };\n\n if (opts) {\n if (opts.groupVariants != null) {\n productsPayload[0][\"groupVariants\"] = opts.groupVariants;\n }\n }\n\n const encodedPayload = new URLSearchParams();\n encodedPayload.set(\"batch\", \"1\");\n encodedPayload.set(\"input\", JSON.stringify(productsPayload));\n\n const result = await fetch(\n BACKEND_HOST +\n \"/api/trpc/product.getProductGrid?\" +\n encodedPayload.toString(),\n {\n ...(requestInit ?? {}),\n headers: {\n ...(requestInit?.headers ?? {}),\n \"Content-Type\": \"application/json\",\n Priority: \"u=3, i\",\n },\n },\n );\n\n const downloadedPayload = await result.json();\n\n try {\n const parsedResult =\n await BitsnapModels.ProductsResultElementSchema.parseAsync(\n downloadedPayload,\n );\n if (parsedResult.length == 0) {\n return {\n categories: undefined,\n products: undefined,\n };\n }\n const parsed = parsedResult[0];\n\n return parsed.result;\n } catch (error) {\n console.error(\"Error parsing products result:\", JSON.stringify(error));\n throw error;\n }\n }\n\n export async function sendNotification(\n request: NotificationRequest,\n requestInit?: RequestInit,\n ) {\n if (API_KEY == null || API_KEY == \"\") {\n throw new Error(\n 'use BitsnapBackend.setApiKey(\"{{API_KEY}} to setup api key before using this method.\")',\n );\n }\n const result = await fetch(BACKEND_HOST + \"/api/notification/send\", {\n ...(requestInit ?? {}),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: {\n ...(requestInit?.headers ?? {}),\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer \" + API_KEY,\n },\n });\n\n if (result.status != 200) {\n console.warn(\n \"error while sending notification\",\n result.status,\n await result.text(),\n );\n return \"failure\";\n }\n return \"success\";\n }\n\n export async function notifyProductAvailability(\n request: Pick<\n NotifyUserAboutProductAvailabilityRequest,\n \"productId\" | \"email\" | \"projectId\"\n >,\n opts?: {\n headers?: Headers;\n signal?: AbortSignal;\n timeoutMs?: number;\n },\n ): Promise<{\n status: \"success\" | \"failure\";\n message?: \"failed-to-notify\";\n }> {\n const req = create(NotifyUserAboutProductAvailabilityRequestSchema, {\n productId: request.productId,\n email: request.email,\n projectId: request.projectId,\n });\n\n try {\n await PublicApiClient.get(\n BACKEND_HOST,\n ).notifyUserAboutProductAvailability(req, opts);\n return {\n status: \"success\",\n };\n } catch (e: any) {\n console.log(\"error while sending notification\", e);\n return {\n status: \"failure\",\n message: \"failed-to-notify\",\n };\n }\n }\n}\n\nconst notificationTypes = zod.enum([\"push\", \"email\", \"sms\"]);\n\nconst notificationRequestSchema = zod.object({\n to: zod.array(zod.string()),\n title: zod.string(),\n body: zod.string().optional(),\n type: zod\n .union([notificationTypes, zod.array(notificationTypes)])\n .default(\"push\"),\n emailOptions: zod\n .object({\n subject: zod.string().optional(),\n replyTo: zod.string().optional(),\n\n htmlText: zod.string().optional(),\n })\n .optional(),\n advanced: zod\n .object({\n /// This is a boolean flag that indicates whether the notification should be shown in the dashboard. DEFAULT: true.\n showInDashboard: zod.boolean().default(false),\n })\n .optional(),\n});\nexport type NotificationRequest = zod.infer<typeof notificationRequestSchema>;\n","import type { Transport } from \"@connectrpc/connect\";\nimport { createClient, type Client } from \"@connectrpc/connect\";\nimport { createConnectTransport } from \"@connectrpc/connect-node\";\nimport { PublicApiService } from \"./gen/proto/public/v1/public_api_pb\";\n\nexport namespace PublicApiClient {\n export function get(host: string): Client<typeof PublicApiService> {\n return createClient(PublicApiService, getTransport(host));\n }\n\n let transport: Transport | undefined;\n function getTransport(host: string): Transport {\n if (transport == null) {\n transport = createConnectTransport({\n httpVersion: \"1.1\",\n useBinaryFormat: true,\n baseUrl: host + \"/api/rpc\",\n });\n }\n return transport;\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,cAAc;AACvB,OAAO,SAAS;;;ACAhB,SAAS,oBAAiC;AAC1C,SAAS,8BAA8B;AAGhC,IAAU;AAAA,CAAV,CAAUA,qBAAV;AACE,WAAS,IAAI,MAA+C;AACjE,WAAO,aAAa,kBAAkB,aAAa,IAAI,CAAC;AAAA,EAC1D;AAFO,EAAAA,iBAAS;AAIhB,MAAI;AACJ,WAAS,aAAa,MAAyB;AAC7C,QAAI,aAAa,MAAM;AACrB,kBAAY,uBAAuB;AAAA,QACjC,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB,SAAS,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,GAfe;;;ADIjB,IAAI,eAAe;AACnB,IAAI;AAEG,IAAU;AAAA,CAAV,CAAUC,oBAAV;AACL,iBAAsB,cAAc,MAAc;AAChD,mBAAe;AAAA,EACjB;AAFA,EAAAA,gBAAsB;AAGf,WAAS,UAAU;AACxB,WAAO;AAAA,EACT;AAFO,EAAAA,gBAAS;AAGhB,iBAAsB,UAAU,QAAgB;AAC9C,cAAU;AAAA,EACZ;AAFA,EAAAA,gBAAsB;AAItB,iBAAsB,WACpB,WACA,IACA,aACA;AA3BJ;AA4BI,UAAM,UAAU;AAAA,MACd,KAAK;AAAA,QACH;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,iBAAiB,IAAI,gBAAgB;AAC3C,mBAAe,IAAI,SAAS,GAAG;AAC/B,mBAAe,IAAI,SAAS,KAAK,UAAU,OAAO,CAAC;AAEnD,UAAM,SAAS,MAAM;AAAA,MACnB,eACE,sCACA,eAAe,SAAS;AAAA,MAC1B;AAAA,QACE,GAAI,oCAAe,CAAC;AAAA,QACpB,SAAS;AAAA,UACP,IAAI,gDAAa,YAAb,YAAwB,CAAC;AAAA,UAC7B,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,MAAM,OAAO,KAAK;AAE5C,UAAM,eACJ,MAAM,cAAc,oBAAoB,WAAW,iBAAiB;AAEtE,QAAI,aAAa,UAAU,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,UAAM,SAAS,aAAa,CAAC;AAE7B,WAAO,OAAO;AAAA,EAChB;AAzCA,EAAAA,gBAAsB;AA2CtB,iBAAsB,YACpB,WACA,OACA,QACA,aACA,MAGA;AA1EJ;AA2EI,UAAM,kBAA0C;AAAA,MAC9C,KAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,MAAM;AACR,UAAI,KAAK,iBAAiB,MAAM;AAC9B,wBAAgB,CAAC,EAAE,eAAe,IAAI,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,iBAAiB,IAAI,gBAAgB;AAC3C,mBAAe,IAAI,SAAS,GAAG;AAC/B,mBAAe,IAAI,SAAS,KAAK,UAAU,eAAe,CAAC;AAE3D,UAAM,SAAS,MAAM;AAAA,MACnB,eACE,sCACA,eAAe,SAAS;AAAA,MAC1B;AAAA,QACE,GAAI,oCAAe,CAAC;AAAA,QACpB,SAAS;AAAA,UACP,IAAI,gDAAa,YAAb,YAAwB,CAAC;AAAA,UAC7B,gBAAgB;AAAA,UAChB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,MAAM,OAAO,KAAK;AAE5C,QAAI;AACF,YAAM,eACJ,MAAM,cAAc,4BAA4B;AAAA,QAC9C;AAAA,MACF;AACF,UAAI,aAAa,UAAU,GAAG;AAC5B,eAAO;AAAA,UACL,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,MACF;AACA,YAAM,SAAS,aAAa,CAAC;AAE7B,aAAO,OAAO;AAAA,IAChB,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK,UAAU,KAAK,CAAC;AACrE,YAAM;AAAA,IACR;AAAA,EACF;AA7DA,EAAAA,gBAAsB;AA+DtB,iBAAsB,iBACpB,SACA,aACA;AApIJ;AAqII,QAAI,WAAW,QAAQ,WAAW,IAAI;AACpC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,MAAM,MAAM,eAAe,0BAA0B;AAAA,MAClE,GAAI,oCAAe,CAAC;AAAA,MACpB,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC5B,SAAS;AAAA,QACP,IAAI,gDAAa,YAAb,YAAwB,CAAC;AAAA,QAC7B,gBAAgB;AAAA,QAChB,eAAe,YAAY;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,QAAI,OAAO,UAAU,KAAK;AACxB,cAAQ;AAAA,QACN;AAAA,QACA,OAAO;AAAA,QACP,MAAM,OAAO,KAAK;AAAA,MACpB;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AA7BA,EAAAA,gBAAsB;AA+BtB,iBAAsB,0BACpB,SAIA,MAQC;AACD,UAAM,MAAM,OAAO,iDAAiD;AAAA,MAClE,WAAW,QAAQ;AAAA,MACnB,OAAO,QAAQ;AAAA,MACf,WAAW,QAAQ;AAAA,IACrB,CAAC;AAED,QAAI;AACF,YAAM,gBAAgB;AAAA,QACpB;AAAA,MACF,EAAE,mCAAmC,KAAK,IAAI;AAC9C,aAAO;AAAA,QACL,QAAQ;AAAA,MACV;AAAA,IACF,SAAS,GAAQ;AACf,cAAQ,IAAI,oCAAoC,CAAC;AACjD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAlCA,EAAAA,gBAAsB;AAAA,GApJP;AAyLjB,IAAM,oBAAoB,IAAI,KAAK,CAAC,QAAQ,SAAS,KAAK,CAAC;AAE3D,IAAM,4BAA4B,IAAI,OAAO;AAAA,EAC3C,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC;AAAA,EAC1B,OAAO,IAAI,OAAO;AAAA,EAClB,MAAM,IAAI,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM,iBAAiB,CAAC,CAAC,EACvD,QAAQ,MAAM;AAAA,EACjB,cAAc,IACX,OAAO;AAAA,IACN,SAAS,IAAI,OAAO,EAAE,SAAS;AAAA,IAC/B,SAAS,IAAI,OAAO,EAAE,SAAS;AAAA,IAE/B,UAAU,IAAI,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,IACP,OAAO;AAAA;AAAA,IAEN,iBAAiB,IAAI,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC9C,CAAC,EACA,SAAS;AACd,CAAC;","names":["PublicApiClient","BitsnapBackend"]}