@rxdrag/website-studio 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export declare const libCode = "import {\n Entify,\n type EnvVariables,\n type IEntify,\n } from \"@rxdrag/website-lib-core\";\n \n export function getEnvVariables(): EnvVariables {\n return {\n websiteId: import.meta.env.PUBLIC_WEBSITE_ID,\n entifyServerUrl: import.meta.env.PUBLIC_ENTIFY_SERVER_URL,\n entifyGuestToken: import.meta.env.PUBLIC_ENTIFY_GUEST_TOKEN,\n language: import.meta.env.PUBLIC_LANGUAGE,\n formSalt: import.meta.env.PUBLIC_FORM_SALT || \"yizhanfei\",\n };\n }\n \n export const rx = Entify.getInstance(getEnvVariables()) as IEntify;\n ";
1
+ export declare const libCode = "import {\n Entify,\n type EnvVariables,\n type IEntify,\n } from \"@rxdrag/website-lib-core\";\n \n export function getEnvVariables(): EnvVariables {\n return {\n websiteId: import.meta.env.PUBLIC_WEBSITE_ID,\n entifyServerUrl: import.meta.env.PUBLIC_ENTIFY_SERVER_URL,\n entifyGuestToken: import.meta.env.PUBLIC_ENTIFY_GUEST_TOKEN,\n language: import.meta.env.PUBLIC_LANGUAGE,\n };\n }\n \n export const rx = Entify.getInstance(getEnvVariables()) as IEntify;\n ";
@@ -1 +1 @@
1
- export declare const askForQuoteCode = "import type { APIRoute } from \"astro\";\n import type {\n SpamFilterRule,\n SpamFilterRuleBoolExp,\n SpamFilterRuleDistinctExp,\n SpamFilterRuleOrderBy,\n } from \"@rxdrag/rxcms-models\";\n import {\n EnquiryAssciations,\n EnquiryEntityName,\n EnquiryFields,\n SpamFilterRuleFields,\n SpamFilterRuleQueryOptions,\n } from \"@rxdrag/rxcms-models\";\n import { getEnvVariables, rx } from \"../../lib\";\n import {\n queryWebSiteSettings,\n sendEmail,\n upsertEntity,\n verifyEncryption,\n type QuoteRequest,\n } from \"@rxdrag/website-lib-core\";\n \n // \u6807\u8BB0\u6B64\u9875\u9762\u4E3A\u670D\u52A1\u5668\u6E32\u67D3\uFF0C\u800C\u4E0D\u662F\u9759\u6001\u751F\u6210\n export const prerender = false;\n \n export const POST: APIRoute = async ({ request }) => {\n try {\n const envVariables = getEnvVariables();\n \n // \u4ECE\u8BF7\u6C42\u4E2D\u83B7\u53D6JSON\u6570\u636E\n let requestData: QuoteRequest;\n try {\n requestData = await request.json();\n } catch (error) {\n console.error(\"JSON parsing error:\", error);\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Invalid request format\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u9A8C\u8BC1\u871C\u7F50\u5B57\u6BB5\n if (requestData.phone) {\n console.log(\"Honeypot triggered - spam submission detected\");\n // \u6084\u6084\u5931\u8D25\uFF0C\u8FD4\u56DE\u6210\u529F\u4F46\u4E0D\u5904\u7406\n return new Response(\n JSON.stringify({\n success: true,\n message:\n \"Your enquiry has been submitted successfully, we will contact you soon\",\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u521B\u5EFA\u5B9E\u4F53\u5BF9\u8C61 - \u79FB\u9664\u4E0D\u5728\u6570\u636E\u5E93\u6A21\u578B\u4E2D\u7684\u5B57\u6BB5\n const { phone, encryptedField, ...entityData } = requestData;\n const entity: Record<string, unknown> = { ...entityData };\n \n // \u68C0\u67E5\u871C\u7F50\u5B57\u6BB5\n if (phone) {\n // \u871C\u7F50\u88AB\u89E6\u53D1\uFF0C\u62D2\u7EDD\u8BF7\u6C42\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Form submission rejected\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u9A8C\u8BC1\u52A0\u5BC6\u5B57\u6BB5\n const isValid = verifyEncryption(\n //\u52A0\u5BC6\u76D0\n envVariables.formSalt,\n encryptedField,\n phone || \"\",\n 30 // 30\u5206\u949F\u6709\u6548\u671F\n );\n \n if (!isValid) {\n // \u52A0\u5BC6\u9A8C\u8BC1\u5931\u8D25\uFF0C\u62D2\u7EDD\u8BF7\u6C42\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Invalid form submission\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u83B7\u53D6\u8BF7\u6C42\u5934\u4FE1\u606F\n const url =\n request.headers.get(\"X-Request-URL\") || request.headers.get(\"referer\");\n const ip =\n request.headers.get(\"X-Forwarded-For\") ||\n request.headers.get(\"X-Real-IP\");\n const userAgent = request.headers.get(\"user-agent\");\n \n // \u8BBE\u7F6E\u989D\u5916\u5B57\u6BB5\n entity[EnquiryFields.formIp] = ip;\n entity[EnquiryFields.fromUrl] = url;\n entity[EnquiryFields.userAgent] = userAgent;\n entity[EnquiryFields.read] = false;\n entity[EnquiryFields.spam] = false;\n entity[EnquiryAssciations.website] = {\n sync: { id: envVariables.websiteId },\n };\n \n // \u9A8C\u8BC1\u5FC5\u586B\u5B57\u6BB5\n if (\n !entity[EnquiryFields.name] ||\n !entity[EnquiryFields.email] ||\n !entity[EnquiryFields.message]\n ) {\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Please fill in all required fields\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u5783\u573E\u4FE1\u606F\u8FC7\u6EE4\n const spamRules = (\n await rx.queryEntityList<\n SpamFilterRule,\n SpamFilterRuleBoolExp,\n SpamFilterRuleOrderBy,\n SpamFilterRuleDistinctExp\n >(\n new SpamFilterRuleQueryOptions([\n SpamFilterRuleFields.emails,\n SpamFilterRuleFields.ips,\n SpamFilterRuleFields.keywords,\n ])\n )\n )?.items as SpamFilterRule[] | undefined;\n \n for (const rule of spamRules || []) {\n const email = (entity[EnquiryFields.email] as string)?.trim();\n if (\n !email ||\n rule.emails\n ?.replace(\"\uFF0C\", \",\")\n .split(\",\")\n .map((em) => em.trim())\n .includes(email) ||\n (ip &&\n rule.ips\n ?.replace(\"\uFF0C\", \",\")\n .split(\",\")\n .map((ipAddr) => ipAddr.trim())\n .includes(ip)) ||\n rule.keywords\n ?.split(\",\")\n .some(\n (keyword: string) =>\n keyword &&\n (entity[EnquiryFields.message] as string).includes(keyword)\n )\n ) {\n // \u6807\u8BB0\u4E3A\u5783\u573E\u4FE1\u606F\u5E76\u4FDD\u5B58\n await upsertEntity(\n EnquiryEntityName,\n { ...entity, spam: true, read: false },\n envVariables\n );\n \n // \u8FD4\u56DE404\u54CD\u5E94\uFF0C\u6A21\u62DF\u539F\u59CB\u884C\u4E3A\n return new Response(null, { status: 404 });\n }\n }\n \n // \u4FDD\u5B58\u8BE2\u4EF7\u4FE1\u606F\n await upsertEntity(EnquiryEntityName, entity, envVariables);\n \n // \u83B7\u53D6\u7F51\u7AD9\u8BBE\u7F6E\u5E76\u53D1\u9001\u90AE\u4EF6\u901A\u77E5\n const websettins = await queryWebSiteSettings(envVariables);\n const name = entity?.[EnquiryFields.name] as string;\n \n if (websettins?.noticeEmail) {\n const content = `\n Company: ${entity[EnquiryFields.company]}\n Name: ${name}\n Email: ${entity[EnquiryFields.email]}\n Message: ${entity[EnquiryFields.message]}\n IP: ${ip}\n URL: ${url}\n CTA: ${entity[EnquiryFields.fromCta]}\n userAgent: ${userAgent}\n `;\n \n const employeeEmail = {\n to: websettins?.noticeEmail,\n subject: \"New Enquiry Received\",\n message: content,\n };\n \n await sendEmail(employeeEmail, envVariables);\n }\n \n // \u8FD4\u56DEJSON\u54CD\u5E94\n return new Response(\n JSON.stringify({\n success: true,\n message:\n \"Your enquiry has been submitted successfully, we will contact you soon\",\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n } catch (error) {\n console.error(\"Error processing enquiry request:\", error);\n \n // \u8FD4\u56DE\u9519\u8BEF\u54CD\u5E94\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Submission failed, please try again later\",\n }),\n {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n };\n ";
1
+ export declare const askForQuoteCode = "import type { APIRoute } from \"astro\";\n import type {\n SpamFilterRule,\n SpamFilterRuleBoolExp,\n SpamFilterRuleDistinctExp,\n SpamFilterRuleOrderBy,\n } from \"@rxdrag/rxcms-models\";\n import {\n EnquiryAssciations,\n EnquiryEntityName,\n EnquiryFields,\n SpamFilterRuleFields,\n SpamFilterRuleQueryOptions,\n } from \"@rxdrag/rxcms-models\";\n import { getEnvVariables, rx } from \"../../lib\";\n import {\n queryWebSiteSettings,\n sendEmail,\n upsertEntity,\n verifyEncryption,\n type QuoteRequest,\n } from \"@rxdrag/website-lib-core\";\n \n // \u6807\u8BB0\u6B64\u9875\u9762\u4E3A\u670D\u52A1\u5668\u6E32\u67D3\uFF0C\u800C\u4E0D\u662F\u9759\u6001\u751F\u6210\n export const prerender = false;\n \n export const POST: APIRoute = async ({ request }) => {\n try {\n const envVariables = getEnvVariables();\n \n // \u4ECE\u8BF7\u6C42\u4E2D\u83B7\u53D6JSON\u6570\u636E\n let requestData: QuoteRequest;\n try {\n requestData = await request.json();\n } catch (error) {\n console.error(\"JSON parsing error:\", error);\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Invalid request format\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u9A8C\u8BC1\u871C\u7F50\u5B57\u6BB5\n if (requestData.phone) {\n console.log(\"Honeypot triggered - spam submission detected\");\n // \u6084\u6084\u5931\u8D25\uFF0C\u8FD4\u56DE\u6210\u529F\u4F46\u4E0D\u5904\u7406\n return new Response(\n JSON.stringify({\n success: true,\n message:\n \"Your enquiry has been submitted successfully, we will contact you soon\",\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u521B\u5EFA\u5B9E\u4F53\u5BF9\u8C61 - \u79FB\u9664\u4E0D\u5728\u6570\u636E\u5E93\u6A21\u578B\u4E2D\u7684\u5B57\u6BB5\n const { phone, encryptedField, ...entityData } = requestData;\n const entity: Record<string, unknown> = { ...entityData };\n \n // \u68C0\u67E5\u871C\u7F50\u5B57\u6BB5\n if (phone) {\n // \u871C\u7F50\u88AB\u89E6\u53D1\uFF0C\u62D2\u7EDD\u8BF7\u6C42\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Form submission rejected\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u9A8C\u8BC1\u52A0\u5BC6\u5B57\u6BB5\n const isValid = verifyEncryption(\n //\u52A0\u5BC6\u76D0\n \"yizhanfeinb\",\n encryptedField,\n phone || \"\",\n 30 // 30\u5206\u949F\u6709\u6548\u671F\n );\n \n if (!isValid) {\n // \u52A0\u5BC6\u9A8C\u8BC1\u5931\u8D25\uFF0C\u62D2\u7EDD\u8BF7\u6C42\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Invalid form submission\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u83B7\u53D6\u8BF7\u6C42\u5934\u4FE1\u606F\n const url =\n request.headers.get(\"X-Request-URL\") || request.headers.get(\"referer\");\n const ip =\n request.headers.get(\"X-Forwarded-For\") ||\n request.headers.get(\"X-Real-IP\");\n const userAgent = request.headers.get(\"user-agent\");\n \n // \u8BBE\u7F6E\u989D\u5916\u5B57\u6BB5\n entity[EnquiryFields.formIp] = ip;\n entity[EnquiryFields.fromUrl] = url;\n entity[EnquiryFields.userAgent] = userAgent;\n entity[EnquiryFields.read] = false;\n entity[EnquiryFields.spam] = false;\n entity[EnquiryAssciations.website] = {\n sync: { id: envVariables.websiteId },\n };\n \n // \u9A8C\u8BC1\u5FC5\u586B\u5B57\u6BB5\n if (\n !entity[EnquiryFields.name] ||\n !entity[EnquiryFields.email] ||\n !entity[EnquiryFields.message]\n ) {\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Please fill in all required fields\",\n }),\n {\n status: 400,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n \n // \u5783\u573E\u4FE1\u606F\u8FC7\u6EE4\n const spamRules = (\n await rx.queryEntityList<\n SpamFilterRule,\n SpamFilterRuleBoolExp,\n SpamFilterRuleOrderBy,\n SpamFilterRuleDistinctExp\n >(\n new SpamFilterRuleQueryOptions([\n SpamFilterRuleFields.emails,\n SpamFilterRuleFields.ips,\n SpamFilterRuleFields.keywords,\n ])\n )\n )?.items as SpamFilterRule[] | undefined;\n \n for (const rule of spamRules || []) {\n const email = (entity[EnquiryFields.email] as string)?.trim();\n if (\n !email ||\n rule.emails\n ?.replace(\"\uFF0C\", \",\")\n .split(\",\")\n .map((em) => em.trim())\n .includes(email) ||\n (ip &&\n rule.ips\n ?.replace(\"\uFF0C\", \",\")\n .split(\",\")\n .map((ipAddr) => ipAddr.trim())\n .includes(ip)) ||\n rule.keywords\n ?.split(\",\")\n .some(\n (keyword: string) =>\n keyword &&\n (entity[EnquiryFields.message] as string).includes(keyword)\n )\n ) {\n // \u6807\u8BB0\u4E3A\u5783\u573E\u4FE1\u606F\u5E76\u4FDD\u5B58\n await upsertEntity(\n EnquiryEntityName,\n { ...entity, spam: true, read: false },\n envVariables\n );\n \n // \u8FD4\u56DE404\u54CD\u5E94\uFF0C\u6A21\u62DF\u539F\u59CB\u884C\u4E3A\n return new Response(null, { status: 404 });\n }\n }\n \n // \u4FDD\u5B58\u8BE2\u4EF7\u4FE1\u606F\n await upsertEntity(EnquiryEntityName, entity, envVariables);\n \n // \u83B7\u53D6\u7F51\u7AD9\u8BBE\u7F6E\u5E76\u53D1\u9001\u90AE\u4EF6\u901A\u77E5\n const websettins = await queryWebSiteSettings(envVariables);\n const name = entity?.[EnquiryFields.name] as string;\n \n if (websettins?.noticeEmail) {\n const content = `\n Company: ${entity[EnquiryFields.company]}\n Name: ${name}\n Email: ${entity[EnquiryFields.email]}\n Message: ${entity[EnquiryFields.message]}\n IP: ${ip}\n URL: ${url}\n CTA: ${entity[EnquiryFields.fromCta]}\n userAgent: ${userAgent}\n `;\n \n const employeeEmail = {\n to: websettins?.noticeEmail,\n subject: \"New Enquiry Received\",\n message: content,\n };\n \n await sendEmail(employeeEmail, envVariables);\n }\n \n // \u8FD4\u56DEJSON\u54CD\u5E94\n return new Response(\n JSON.stringify({\n success: true,\n message:\n \"Your enquiry has been submitted successfully, we will contact you soon\",\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n } catch (error) {\n console.error(\"Error processing enquiry request:\", error);\n \n // \u8FD4\u56DE\u9519\u8BEF\u54CD\u5E94\n return new Response(\n JSON.stringify({\n success: false,\n message: \"Submission failed, please try again later\",\n }),\n {\n status: 500,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n }\n };\n ";
@@ -13,7 +13,6 @@ export declare function useImportVariables(): {
13
13
  entifyServerUrl: string;
14
14
  entifyGuestToken: string;
15
15
  language: string;
16
- formSalt: string;
17
16
  };
18
17
  dayjs: typeof dayjs;
19
18
  rxPage: {
package/dist/index.mjs CHANGED
@@ -2466,9 +2466,7 @@ function useImportVariables() {
2466
2466
  websiteId: (website == null ? void 0 : website.id) || "",
2467
2467
  entifyServerUrl: endpoint || "",
2468
2468
  entifyGuestToken: token || "",
2469
- language: (lang == null ? void 0 : lang.abbr) || "",
2470
- formSalt: "yizhanfei"
2471
- //实际无效
2469
+ language: (lang == null ? void 0 : lang.abbr) || ""
2472
2470
  };
2473
2471
  return {
2474
2472
  rx: new MockEntify(),
@@ -3178,7 +3176,6 @@ const libCode = `import {
3178
3176
  entifyServerUrl: ({}).PUBLIC_ENTIFY_SERVER_URL,
3179
3177
  entifyGuestToken: ({}).PUBLIC_ENTIFY_GUEST_TOKEN,
3180
3178
  language: ({}).PUBLIC_LANGUAGE,
3181
- formSalt: ({}).PUBLIC_FORM_SALT || "yizhanfei",
3182
3179
  };
3183
3180
  }
3184
3181
 
@@ -3306,7 +3303,7 @@ const askForQuoteCode = `import type { APIRoute } from "astro";
3306
3303
  // 验证加密字段
3307
3304
  const isValid = verifyEncryption(
3308
3305
  //加密盐
3309
- envVariables.formSalt,
3306
+ "yizhanfeinb",
3310
3307
  encryptedField,
3311
3308
  phone || "",
3312
3309
  30 // 30分钟有效期