UNPKG

bitsnap-checkout

Version:

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

201 lines (198 loc) 6.08 kB
import { NotifyUserAboutProductAvailabilityRequestSchema, PublicApiService } from "./chunk-FLQW553F.mjs"; import { BitsnapModels } from "./chunk-ZRKP2UXJ.mjs"; import "./chunk-ZD7AOCMD.mjs"; // src/backend.ts import { create } from "@bufbuild/protobuf"; import zod from "zod"; // src/public.api.backend.ts import { createClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-node"; var PublicApiClient; ((PublicApiClient2) => { function get(host) { return createClient(PublicApiService, getTransport(host)); } PublicApiClient2.get = get; let transport; function getTransport(host) { if (transport == null) { transport = createConnectTransport({ httpVersion: "1.1", useBinaryFormat: true, baseUrl: host + "/api/rpc" }); } return transport; } })(PublicApiClient || (PublicApiClient = {})); // src/backend.ts var BACKEND_HOST = "https://bitsnap.pl"; var API_KEY; var BitsnapBackend; ((BitsnapBackend2) => { async function setCustomHost(host) { BACKEND_HOST = host; } BitsnapBackend2.setCustomHost = setCustomHost; function getHost() { return BACKEND_HOST; } BitsnapBackend2.getHost = getHost; async function setApiKey(apiKey) { API_KEY = apiKey; } BitsnapBackend2.setApiKey = setApiKey; async function getProduct(projectID, id, requestInit) { var _a; const payload = { "0": { projectID, id } }; const encodedPayload = new URLSearchParams(); encodedPayload.set("batch", "1"); encodedPayload.set("input", JSON.stringify(payload)); const result = await fetch( BACKEND_HOST + "/api/trpc/product.getProductById?" + encodedPayload.toString(), { ...requestInit != null ? requestInit : {}, headers: { ...(_a = requestInit == null ? void 0 : requestInit.headers) != null ? _a : {}, "Content-Type": "application/json", Priority: "u=3, i" } } ); const downloadedPayload = await result.json(); const parsedResult = await BitsnapModels.ProductResultSchema.parseAsync(downloadedPayload); if (parsedResult.length == 0) { return void 0; } const parsed = parsedResult[0]; return parsed.result; } BitsnapBackend2.getProduct = getProduct; async function getProducts(projectID, limit, offset, requestInit, opts) { var _a; const productsPayload = { "0": { projectID, limit, offset } }; if (opts) { if (opts.groupVariants != null) { productsPayload[0]["groupVariants"] = opts.groupVariants; } } const encodedPayload = new URLSearchParams(); encodedPayload.set("batch", "1"); encodedPayload.set("input", JSON.stringify(productsPayload)); const result = await fetch( BACKEND_HOST + "/api/trpc/product.getProductGrid?" + encodedPayload.toString(), { ...requestInit != null ? requestInit : {}, headers: { ...(_a = requestInit == null ? void 0 : requestInit.headers) != null ? _a : {}, "Content-Type": "application/json", Priority: "u=3, i" } } ); const downloadedPayload = await result.json(); try { const parsedResult = await BitsnapModels.ProductsResultElementSchema.parseAsync( downloadedPayload ); if (parsedResult.length == 0) { return { categories: void 0, products: void 0 }; } const parsed = parsedResult[0]; return parsed.result; } catch (error) { console.error("Error parsing products result:", JSON.stringify(error)); throw error; } } BitsnapBackend2.getProducts = getProducts; async function sendNotification(request, requestInit) { var _a; if (API_KEY == null || API_KEY == "") { throw new Error( 'use BitsnapBackend.setApiKey("{{API_KEY}} to setup api key before using this method.")' ); } const result = await fetch(BACKEND_HOST + "/api/notification/send", { ...requestInit != null ? requestInit : {}, method: "POST", body: JSON.stringify(request), headers: { ...(_a = requestInit == null ? void 0 : requestInit.headers) != null ? _a : {}, "Content-Type": "application/json", Authorization: "Bearer " + API_KEY } }); if (result.status != 200) { console.warn( "error while sending notification", result.status, await result.text() ); return "failure"; } return "success"; } BitsnapBackend2.sendNotification = sendNotification; async function notifyProductAvailability(request, opts) { const req = create(NotifyUserAboutProductAvailabilityRequestSchema, { productId: request.productId, email: request.email, projectId: request.projectId }); try { await PublicApiClient.get( BACKEND_HOST ).notifyUserAboutProductAvailability(req, opts); return { status: "success" }; } catch (e) { console.log("error while sending notification", e); return { status: "failure", message: "failed-to-notify" }; } } BitsnapBackend2.notifyProductAvailability = notifyProductAvailability; })(BitsnapBackend || (BitsnapBackend = {})); var notificationTypes = zod.enum(["push", "email", "sms"]); var notificationRequestSchema = zod.object({ to: zod.array(zod.string()), title: zod.string(), body: zod.string().optional(), type: zod.union([notificationTypes, zod.array(notificationTypes)]).default("push"), emailOptions: zod.object({ subject: zod.string().optional(), replyTo: zod.string().optional(), htmlText: zod.string().optional() }).optional(), advanced: zod.object({ /// This is a boolean flag that indicates whether the notification should be shown in the dashboard. DEFAULT: true. showInDashboard: zod.boolean().default(false) }).optional() }); export { BitsnapBackend }; //# sourceMappingURL=backend.mjs.map