blue-chestnut-solar-expert 0.0.52 → 0.0.54
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.
- package/dist/stencil-library/api-90JQS7b6.js +104 -0
- package/dist/stencil-library/api-90JQS7b6.js.map +1 -0
- package/dist/stencil-library/api-B5514wut.js +102 -0
- package/dist/stencil-library/api-B5514wut.js.map +1 -0
- package/dist/stencil-library/api-CLbMaqt3.js +103 -0
- package/dist/stencil-library/api-CLbMaqt3.js.map +1 -0
- package/dist/stencil-library/api-Cfi-C6kT.js +104 -0
- package/dist/stencil-library/api-Cfi-C6kT.js.map +1 -0
- package/dist/stencil-library/api-CiNFC5mG.js +104 -0
- package/dist/stencil-library/api-CiNFC5mG.js.map +1 -0
- package/dist/stencil-library/api-D_61gY2X.js +102 -0
- package/dist/stencil-library/api-D_61gY2X.js.map +1 -0
- package/dist/{components/p-CU_Hozfq.js → stencil-library/api-Did5lAE0.js} +4 -7
- package/dist/stencil-library/api-Did5lAE0.js.map +1 -0
- package/dist/stencil-library/api-S3oJcLL5.js +103 -0
- package/dist/stencil-library/api-S3oJcLL5.js.map +1 -0
- package/dist/stencil-library/api-iAs1ZQr1.js +104 -0
- package/dist/stencil-library/api-iAs1ZQr1.js.map +1 -0
- package/dist/stencil-library/{api-CU_Hozfq.js → api-vropRvpT.js} +5 -4
- package/dist/stencil-library/api-vropRvpT.js.map +1 -0
- package/dist/stencil-library/{decoder-BdybtJ-v.js → decoder-BDfrXE7e.js} +3 -3
- package/dist/stencil-library/{decoder-BdybtJ-v.js.map → decoder-BDfrXE7e.js.map} +1 -1
- package/dist/stencil-library/{deflate-BSCfm6tE.js → deflate-BrCNE9ec.js} +3 -3
- package/dist/stencil-library/{deflate-BSCfm6tE.js.map → deflate-BrCNE9ec.js.map} +1 -1
- package/dist/stencil-library/eraser-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/eraser-icon.entry.js +1 -1
- package/dist/stencil-library/eraser-icon.entry.js.map +1 -1
- package/dist/stencil-library/house-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/house-icon.entry.js +1 -1
- package/dist/stencil-library/house-icon.entry.js.map +1 -1
- package/dist/stencil-library/icon-selector.entry.esm.js.map +1 -1
- package/dist/stencil-library/icon-selector.entry.js +1 -1
- package/dist/stencil-library/icon-selector.entry.js.map +1 -1
- package/dist/stencil-library/index.esm.js +13 -1
- package/dist/stencil-library/index.esm.js.map +1 -1
- package/dist/stencil-library/{jpeg-B7s0bMQh.js → jpeg-CjOJHUd1.js} +3 -3
- package/dist/stencil-library/{jpeg-B7s0bMQh.js.map → jpeg-CjOJHUd1.js.map} +1 -1
- package/dist/stencil-library/{lerc-BRJzMsmm.js → lerc-BQF80JgE.js} +3 -3
- package/dist/stencil-library/{lerc-BRJzMsmm.js.map → lerc-BQF80JgE.js.map} +1 -1
- package/dist/stencil-library/loading-widget.entry.esm.js.map +1 -1
- package/dist/stencil-library/loading-widget.entry.js +2 -2
- package/dist/stencil-library/loading-widget.entry.js.map +1 -1
- package/dist/stencil-library/{lzw-B1L94-gJ.js → lzw-PA2aOuVK.js} +3 -3
- package/dist/stencil-library/{lzw-B1L94-gJ.js.map → lzw-PA2aOuVK.js.map} +1 -1
- package/dist/stencil-library/{map-draw-Dbj9dYlX.js → map-draw-CaQc1QTP.js} +11 -11
- package/dist/stencil-library/{map-draw-Dbj9dYlX.js.map → map-draw-CaQc1QTP.js.map} +1 -1
- package/dist/stencil-library/map-draw.entry.js +1 -1
- package/dist/stencil-library/map-selector.entry.esm.js.map +1 -1
- package/dist/stencil-library/map-selector.entry.js +19 -3
- package/dist/stencil-library/map-selector.entry.js.map +1 -1
- package/dist/stencil-library/move-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/move-icon.entry.js +1 -1
- package/dist/stencil-library/move-icon.entry.js.map +1 -1
- package/dist/stencil-library/octagon-minus-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/octagon-minus-icon.entry.js +1 -1
- package/dist/stencil-library/octagon-minus-icon.entry.js.map +1 -1
- package/dist/stencil-library/{packbits-Roq2Ecwq.js → packbits-BMYGgS0z.js} +3 -3
- package/dist/stencil-library/{packbits-Roq2Ecwq.js.map → packbits-BMYGgS0z.js.map} +1 -1
- package/dist/stencil-library/polygon-buttons.entry.esm.js.map +1 -1
- package/dist/stencil-library/polygon-buttons.entry.js +3 -3
- package/dist/stencil-library/polygon-buttons.entry.js.map +1 -1
- package/dist/stencil-library/polygon-information.entry.esm.js.map +1 -1
- package/dist/stencil-library/polygon-information.entry.js +2 -2
- package/dist/stencil-library/polygon-information.entry.js.map +1 -1
- package/dist/stencil-library/{raw-BSypeTBq.js → raw-D-Vfg78n.js} +3 -3
- package/dist/stencil-library/{raw-BSypeTBq.js.map → raw-D-Vfg78n.js.map} +1 -1
- package/dist/stencil-library/search-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/search-icon.entry.js +1 -1
- package/dist/stencil-library/search-icon.entry.js.map +1 -1
- package/dist/stencil-library/settings-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/settings-icon.entry.js +1 -1
- package/dist/stencil-library/settings-icon.entry.js.map +1 -1
- package/dist/stencil-library/settings-modal.entry.esm.js.map +1 -1
- package/dist/stencil-library/settings-modal.entry.js +9 -9
- package/dist/stencil-library/settings-modal.entry.js.map +1 -1
- package/dist/stencil-library/solar-calculator.entry.esm.js.map +1 -1
- package/dist/stencil-library/solar-calculator.entry.js +3 -3
- package/dist/stencil-library/solar-calculator.entry.js.map +1 -1
- package/dist/stencil-library/solar-expert.entry.esm.js.map +1 -1
- package/dist/stencil-library/solar-expert.entry.js +3 -3
- package/dist/stencil-library/solar-expert.entry.js.map +1 -1
- package/dist/stencil-library/solar-system-form.entry.esm.js.map +1 -1
- package/dist/stencil-library/solar-system-form.entry.js +39 -39
- package/dist/stencil-library/solar-system-form.entry.js.map +1 -1
- package/dist/stencil-library/stencil-library.esm.js +52 -1
- package/dist/stencil-library/stencil-library.esm.js.map +1 -1
- package/dist/stencil-library/tool-box.entry.esm.js.map +1 -1
- package/dist/stencil-library/tool-box.entry.js +3 -3
- package/dist/stencil-library/tool-box.entry.js.map +1 -1
- package/dist/stencil-library/undo-icon.entry.esm.js.map +1 -1
- package/dist/stencil-library/undo-icon.entry.js +1 -1
- package/dist/stencil-library/undo-icon.entry.js.map +1 -1
- package/dist/stencil-library/{webimage-BZX1CuW8.js → webimage-V5ihYILu.js} +3 -3
- package/dist/stencil-library/{webimage-BZX1CuW8.js.map → webimage-V5ihYILu.js.map} +1 -1
- package/dist/types/components/map-draw/map-selector.d.ts +1 -0
- package/package.json +1 -1
- package/dist/components/eraser-icon.js +0 -11
- package/dist/components/eraser-icon.js.map +0 -1
- package/dist/components/house-icon.js +0 -11
- package/dist/components/house-icon.js.map +0 -1
- package/dist/components/icon-selector.js +0 -11
- package/dist/components/icon-selector.js.map +0 -1
- package/dist/components/index.js +0 -1269
- package/dist/components/index.js.map +0 -1
- package/dist/components/loading-widget.js +0 -38
- package/dist/components/loading-widget.js.map +0 -1
- package/dist/components/map-draw.js +0 -11
- package/dist/components/map-draw.js.map +0 -1
- package/dist/components/map-selector.js +0 -11
- package/dist/components/map-selector.js.map +0 -1
- package/dist/components/move-icon.js +0 -11
- package/dist/components/move-icon.js.map +0 -1
- package/dist/components/octagon-minus-icon.js +0 -11
- package/dist/components/octagon-minus-icon.js.map +0 -1
- package/dist/components/p-0Ymx0I1T.js +0 -76
- package/dist/components/p-0Ymx0I1T.js.map +0 -1
- package/dist/components/p-B-Rps0Lf.js +0 -40
- package/dist/components/p-B-Rps0Lf.js.map +0 -1
- package/dist/components/p-B54Ul0nf.js +0 -15
- package/dist/components/p-B54Ul0nf.js.map +0 -1
- package/dist/components/p-B5WTRCh8.js +0 -3241
- package/dist/components/p-B5WTRCh8.js.map +0 -1
- package/dist/components/p-BGoSj_DR.js +0 -902
- package/dist/components/p-BGoSj_DR.js.map +0 -1
- package/dist/components/p-BYoCVGKQ.js +0 -105
- package/dist/components/p-BYoCVGKQ.js.map +0 -1
- package/dist/components/p-BhS0AFyx.js +0 -161
- package/dist/components/p-BhS0AFyx.js.map +0 -1
- package/dist/components/p-BxeHuNQ0.js +0 -653
- package/dist/components/p-BxeHuNQ0.js.map +0 -1
- package/dist/components/p-ByX6QP-E.js +0 -33
- package/dist/components/p-ByX6QP-E.js.map +0 -1
- package/dist/components/p-C61RS5xJ.js +0 -40
- package/dist/components/p-C61RS5xJ.js.map +0 -1
- package/dist/components/p-CLe0s2gK.js +0 -40
- package/dist/components/p-CLe0s2gK.js.map +0 -1
- package/dist/components/p-CQxP2hZl.js +0 -414
- package/dist/components/p-CQxP2hZl.js.map +0 -1
- package/dist/components/p-CU_Hozfq.js.map +0 -1
- package/dist/components/p-Cfy4oCWb.js +0 -1909
- package/dist/components/p-Cfy4oCWb.js.map +0 -1
- package/dist/components/p-Cgchl6bA.js +0 -47
- package/dist/components/p-Cgchl6bA.js.map +0 -1
- package/dist/components/p-Cqkh0K8d.js +0 -50
- package/dist/components/p-Cqkh0K8d.js.map +0 -1
- package/dist/components/p-D0KrIPIK.js +0 -40
- package/dist/components/p-D0KrIPIK.js.map +0 -1
- package/dist/components/p-DSHWNE3m.js +0 -102
- package/dist/components/p-DSHWNE3m.js.map +0 -1
- package/dist/components/p-DZAFvfH1.js +0 -40
- package/dist/components/p-DZAFvfH1.js.map +0 -1
- package/dist/components/p-DiLO6lb_.js +0 -15822
- package/dist/components/p-DiLO6lb_.js.map +0 -1
- package/dist/components/p-DwozqyC_.js +0 -40
- package/dist/components/p-DwozqyC_.js.map +0 -1
- package/dist/components/p-Mv9J4znK.js +0 -40
- package/dist/components/p-Mv9J4znK.js.map +0 -1
- package/dist/components/p-Sf357vTW.js +0 -188
- package/dist/components/p-Sf357vTW.js.map +0 -1
- package/dist/components/p-WmcSqXD8.js +0 -14
- package/dist/components/p-WmcSqXD8.js.map +0 -1
- package/dist/components/p-XKzdTp2a.js +0 -4423
- package/dist/components/p-XKzdTp2a.js.map +0 -1
- package/dist/components/p-j-vOrhhh.js +0 -114
- package/dist/components/p-j-vOrhhh.js.map +0 -1
- package/dist/components/p-q8auDIJ2.js +0 -138
- package/dist/components/p-q8auDIJ2.js.map +0 -1
- package/dist/components/polygon-buttons.js +0 -11
- package/dist/components/polygon-buttons.js.map +0 -1
- package/dist/components/polygon-information.js +0 -11
- package/dist/components/polygon-information.js.map +0 -1
- package/dist/components/search-icon.js +0 -11
- package/dist/components/search-icon.js.map +0 -1
- package/dist/components/settings-icon.js +0 -11
- package/dist/components/settings-icon.js.map +0 -1
- package/dist/components/settings-modal.js +0 -11
- package/dist/components/settings-modal.js.map +0 -1
- package/dist/components/solar-calculator.js +0 -246
- package/dist/components/solar-calculator.js.map +0 -1
- package/dist/components/solar-expert.js +0 -360
- package/dist/components/solar-expert.js.map +0 -1
- package/dist/components/solar-system-form.js +0 -11
- package/dist/components/solar-system-form.js.map +0 -1
- package/dist/components/tool-box.js +0 -11
- package/dist/components/tool-box.js.map +0 -1
- package/dist/components/undo-icon.js +0 -11
- package/dist/components/undo-icon.js.map +0 -1
- package/dist/index.cjs.js +0 -1
- package/dist/index.js +0 -1
- package/dist/stencil-library/api-CU_Hozfq.js.map +0 -1
- package/dist/stencil-library/eraser-icon.house-icon.icon-selector.map-draw.map-selector.move-icon.octagon-minus-icon.polygon-buttons.polygon-information.search-icon.settings-icon.settings-modal.solar-expert.solar-system-form.tool-box.undo-icon.entry.esm.js.map +0 -1
- package/dist/stencil-library/p-6f2848a5.entry.js +0 -2
- package/dist/stencil-library/p-6f2848a5.entry.js.map +0 -1
- package/dist/stencil-library/p-B54Ul0nf.js +0 -2
- package/dist/stencil-library/p-B54Ul0nf.js.map +0 -1
- package/dist/stencil-library/p-B5WTRCh8.js +0 -2
- package/dist/stencil-library/p-B5WTRCh8.js.map +0 -1
- package/dist/stencil-library/p-BGoSj_DR.js +0 -2
- package/dist/stencil-library/p-BGoSj_DR.js.map +0 -1
- package/dist/stencil-library/p-Brw-XSJB.js +0 -2
- package/dist/stencil-library/p-Brw-XSJB.js.map +0 -1
- package/dist/stencil-library/p-ByX6QP-E.js +0 -2
- package/dist/stencil-library/p-ByX6QP-E.js.map +0 -1
- package/dist/stencil-library/p-CX8V3eiN.js +0 -2
- package/dist/stencil-library/p-CX8V3eiN.js.map +0 -1
- package/dist/stencil-library/p-Cgchl6bA.js +0 -2
- package/dist/stencil-library/p-Cgchl6bA.js.map +0 -1
- package/dist/stencil-library/p-DXlWibwG.js +0 -10
- package/dist/stencil-library/p-DXlWibwG.js.map +0 -1
- package/dist/stencil-library/p-LebgAmeq.js +0 -2
- package/dist/stencil-library/p-LebgAmeq.js.map +0 -1
- package/dist/stencil-library/p-WmcSqXD8.js +0 -2
- package/dist/stencil-library/p-WmcSqXD8.js.map +0 -1
- package/dist/stencil-library/p-X54eOLJv.js +0 -3
- package/dist/stencil-library/p-X54eOLJv.js.map +0 -1
- package/dist/stencil-library/p-af021538.entry.js +0 -2
- package/dist/stencil-library/p-af021538.entry.js.map +0 -1
- package/dist/stencil-library/p-bde0ce8e.entry.js +0 -32
- package/dist/stencil-library/p-bde0ce8e.entry.js.map +0 -1
- package/dist/stencil-library/p-j-vOrhhh.js +0 -2
- package/dist/stencil-library/p-j-vOrhhh.js.map +0 -1
- package/dist/stencil-library/p-q8auDIJ2.js +0 -2
- package/dist/stencil-library/p-q8auDIJ2.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
|
|
2
|
+
if (typeof global === "undefined") { var global = globalThis || window || self; }
|
|
3
|
+
async function fetchSolarData(latitude, longitude, apiKey) {
|
|
4
|
+
if (latitude === 0 || longitude === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const args = {
|
|
9
|
+
"location.latitude": latitude.toFixed(5),
|
|
10
|
+
"location.longitude": longitude.toFixed(5),
|
|
11
|
+
};
|
|
12
|
+
const params = new URLSearchParams({
|
|
13
|
+
...args,
|
|
14
|
+
key: apiKey,
|
|
15
|
+
});
|
|
16
|
+
const response = await fetch(`https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`);
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const errorText = await response.text();
|
|
19
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
20
|
+
}
|
|
21
|
+
const contentType = response.headers.get("content-type");
|
|
22
|
+
if (!contentType || !contentType.includes("application/json")) {
|
|
23
|
+
const text = await response.text();
|
|
24
|
+
console.error("Unexpected content type:", contentType, "Response:", text);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const rawData = await response.json();
|
|
28
|
+
return rawData;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error fetching solar data:", error);
|
|
32
|
+
if (error instanceof TypeError &&
|
|
33
|
+
error.message === "Failed to fetch") {
|
|
34
|
+
throw new Error("Unable to connect to the solar data API.");
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function sendLeadToNexvoro(leadData) {
|
|
40
|
+
try {
|
|
41
|
+
// Prepare the lead data according to Nexvoro specifications
|
|
42
|
+
const leadPayload = {
|
|
43
|
+
id: "", // Empty for new leads
|
|
44
|
+
leadtype: "A-Lead", // Fixed value
|
|
45
|
+
phase: "10 Anbahnung", // Fixed value
|
|
46
|
+
title: `${leadData.client.name}/solarExpert`, // Short description
|
|
47
|
+
extradata: JSON.stringify(leadData), // JSON string with all data
|
|
48
|
+
};
|
|
49
|
+
// Build the URL with required parameters
|
|
50
|
+
const baseUrl = "https://workspace.nexvoro.cloud/exchange/extevent";
|
|
51
|
+
const params = new URLSearchParams({
|
|
52
|
+
md: "81.87.84.89.90.", // Encrypted tenant
|
|
53
|
+
token: "rdwetayarqzwtdsqystyraa", // Token for Ruiz
|
|
54
|
+
type: "new", // Action: new lead
|
|
55
|
+
data: "lead", // Data area: leads
|
|
56
|
+
});
|
|
57
|
+
const url = `${baseUrl}?${params.toString()}`;
|
|
58
|
+
// Send the request
|
|
59
|
+
const response = await fetch(url, {
|
|
60
|
+
method: "GET",
|
|
61
|
+
headers: {
|
|
62
|
+
"Content-Type": "text/html",
|
|
63
|
+
charset: "utf-8",
|
|
64
|
+
},
|
|
65
|
+
// body: new URLSearchParams(leadPayload).toString(),
|
|
66
|
+
});
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
const errorText = await response.text();
|
|
69
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
70
|
+
}
|
|
71
|
+
const result = await response.json();
|
|
72
|
+
// Check if the response contains a lead ID (successful creation)
|
|
73
|
+
if (result.id || result.leadId) {
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
message: "Lead successfully created",
|
|
77
|
+
leadId: result.id || result.leadId,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
message: "Lead submitted successfully",
|
|
84
|
+
leadId: undefined,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.error("Error sending lead to Nexvoro:", error);
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
message: error instanceof Error
|
|
93
|
+
? error.message
|
|
94
|
+
: "Unknown error occurred",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export { fetchSolarData as f, sendLeadToNexvoro as s };
|
|
100
|
+
//# sourceMappingURL=api-D_61gY2X.js.map
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=api-D_61gY2X.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-D_61gY2X.js","sources":["src/utils/api.ts"],"sourcesContent":["import { BuildingInsightsResponse } from \"harmonia-types\";\r\n\r\nexport async function fetchSolarData(\r\n latitude: number,\r\n longitude: number,\r\n apiKey: string,\r\n) {\r\n if (latitude === 0 || longitude === 0) {\r\n return null;\r\n }\r\n try {\r\n const args = {\r\n \"location.latitude\": latitude.toFixed(5),\r\n \"location.longitude\": longitude.toFixed(5),\r\n };\r\n const params = new URLSearchParams({\r\n ...args,\r\n key: apiKey,\r\n });\r\n const response = await fetch(\r\n `https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`,\r\n );\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n console.error(\"Unexpected content type:\", contentType, \"Response:\", text);\r\n return null;\r\n }\r\n\r\n const rawData: BuildingInsightsResponse = await response.json();\r\n return rawData;\r\n } catch (error) {\r\n console.error(\"Error fetching solar data:\", error);\r\n if (\r\n error instanceof TypeError &&\r\n error.message === \"Failed to fetch\"\r\n ) {\r\n throw new Error(\"Unable to connect to the solar data API.\");\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport interface LeadData {\r\n location: {\r\n name: string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n systemConfig: {\r\n maxNumberOfPanels: number;\r\n panelPeakPower: number;\r\n polygons: any[];\r\n solarSystems: any;\r\n electricityPrice: number;\r\n compensationRate: number;\r\n annualPriceIncrease: number;\r\n };\r\n client: {\r\n name: string;\r\n email: string;\r\n phone: string;\r\n consumption: number;\r\n consumptionProfile: string;\r\n hasBattery: boolean;\r\n battery: number;\r\n hasHeatPump: boolean;\r\n heatPumpM2: number;\r\n hasElectricCar: boolean;\r\n electricCarChargingTime: string;\r\n electricCarKmPerYear: number;\r\n };\r\n images: {\r\n roof: string;\r\n polygon: string;\r\n };\r\n results: {\r\n autonomy: number;\r\n costSavings: number;\r\n compensation20Years: number;\r\n savedCosts20Years: number;\r\n totalEnergyConsumption: number;\r\n };\r\n}\r\n\r\nexport async function sendLeadToNexvoro(\r\n leadData: LeadData,\r\n): Promise<{ success: boolean; message: string; leadId?: number }> {\r\n try {\r\n // Prepare the lead data according to Nexvoro specifications\r\n const leadPayload = {\r\n id: \"\", // Empty for new leads\r\n leadtype: \"A-Lead\", // Fixed value\r\n phase: \"10 Anbahnung\", // Fixed value\r\n title: `${leadData.client.name}/solarExpert`, // Short description\r\n extradata: JSON.stringify(leadData), // JSON string with all data\r\n };\r\n\r\n // Build the URL with required parameters\r\n const baseUrl = \"https://workspace.nexvoro.cloud/exchange/extevent\";\r\n const params = new URLSearchParams({\r\n md: \"81.87.84.89.90.\", // Encrypted tenant\r\n token: \"rdwetayarqzwtdsqystyraa\", // Token for Ruiz\r\n type: \"new\", // Action: new lead\r\n data: \"lead\", // Data area: leads\r\n });\r\n\r\n const url = `${baseUrl}?${params.toString()}`;\r\n\r\n // Send the request\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"text/html\",\r\n charset: \"utf-8\",\r\n },\r\n // body: new URLSearchParams(leadPayload).toString(),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const result = await response.json();\r\n\r\n // Check if the response contains a lead ID (successful creation)\r\n if (result.id || result.leadId) {\r\n return {\r\n success: true,\r\n message: \"Lead successfully created\",\r\n leadId: result.id || result.leadId,\r\n };\r\n } else {\r\n return {\r\n success: true,\r\n message: \"Lead submitted successfully\",\r\n leadId: undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.error(\"Error sending lead to Nexvoro:\", error);\r\n return {\r\n success: false,\r\n message: error instanceof Error\r\n ? error.message\r\n : \"Unknown error occurred\",\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -57,11 +57,8 @@ async function sendLeadToNexvoro(leadData) {
|
|
|
57
57
|
const url = `${baseUrl}?${params.toString()}`;
|
|
58
58
|
// Send the request
|
|
59
59
|
const response = await fetch(url, {
|
|
60
|
-
method: "
|
|
61
|
-
|
|
62
|
-
"Content-Type": "application/json",
|
|
63
|
-
},
|
|
64
|
-
body: JSON.stringify(leadPayload),
|
|
60
|
+
method: "GET",
|
|
61
|
+
// body: new URLSearchParams(leadPayload).toString(),
|
|
65
62
|
});
|
|
66
63
|
if (!response.ok) {
|
|
67
64
|
const errorText = await response.text();
|
|
@@ -96,6 +93,6 @@ async function sendLeadToNexvoro(leadData) {
|
|
|
96
93
|
}
|
|
97
94
|
|
|
98
95
|
export { fetchSolarData as f, sendLeadToNexvoro as s };
|
|
99
|
-
//# sourceMappingURL=
|
|
96
|
+
//# sourceMappingURL=api-Did5lAE0.js.map
|
|
100
97
|
|
|
101
|
-
//# sourceMappingURL=
|
|
98
|
+
//# sourceMappingURL=api-Did5lAE0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-Did5lAE0.js","sources":["src/utils/api.ts"],"sourcesContent":["import { BuildingInsightsResponse } from \"harmonia-types\";\r\n\r\nexport async function fetchSolarData(\r\n latitude: number,\r\n longitude: number,\r\n apiKey: string,\r\n) {\r\n if (latitude === 0 || longitude === 0) {\r\n return null;\r\n }\r\n try {\r\n const args = {\r\n \"location.latitude\": latitude.toFixed(5),\r\n \"location.longitude\": longitude.toFixed(5),\r\n };\r\n const params = new URLSearchParams({\r\n ...args,\r\n key: apiKey,\r\n });\r\n const response = await fetch(\r\n `https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`,\r\n );\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n console.error(\"Unexpected content type:\", contentType, \"Response:\", text);\r\n return null;\r\n }\r\n\r\n const rawData: BuildingInsightsResponse = await response.json();\r\n return rawData;\r\n } catch (error) {\r\n console.error(\"Error fetching solar data:\", error);\r\n if (\r\n error instanceof TypeError &&\r\n error.message === \"Failed to fetch\"\r\n ) {\r\n throw new Error(\"Unable to connect to the solar data API.\");\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport interface LeadData {\r\n location: {\r\n name: string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n systemConfig: {\r\n maxNumberOfPanels: number;\r\n panelPeakPower: number;\r\n polygons: any[];\r\n solarSystems: any;\r\n electricityPrice: number;\r\n compensationRate: number;\r\n annualPriceIncrease: number;\r\n };\r\n client: {\r\n name: string;\r\n email: string;\r\n phone: string;\r\n consumption: number;\r\n consumptionProfile: string;\r\n hasBattery: boolean;\r\n battery: number;\r\n hasHeatPump: boolean;\r\n heatPumpM2: number;\r\n hasElectricCar: boolean;\r\n electricCarChargingTime: string;\r\n electricCarKmPerYear: number;\r\n };\r\n images: {\r\n roof: string;\r\n polygon: string;\r\n };\r\n results: {\r\n autonomy: number;\r\n costSavings: number;\r\n compensation20Years: number;\r\n savedCosts20Years: number;\r\n totalEnergyConsumption: number;\r\n };\r\n}\r\n\r\nexport async function sendLeadToNexvoro(\r\n leadData: LeadData,\r\n): Promise<{ success: boolean; message: string; leadId?: number }> {\r\n try {\r\n // Prepare the lead data according to Nexvoro specifications\r\n const leadPayload = {\r\n id: \"\", // Empty for new leads\r\n leadtype: \"A-Lead\", // Fixed value\r\n phase: \"10 Anbahnung\", // Fixed value\r\n title: `${leadData.client.name}/solarExpert`, // Short description\r\n extradata: JSON.stringify(leadData), // JSON string with all data\r\n };\r\n\r\n // Build the URL with required parameters\r\n const baseUrl = \"https://workspace.nexvoro.cloud/exchange/extevent\";\r\n const params = new URLSearchParams({\r\n md: \"81.87.84.89.90.\", // Encrypted tenant\r\n token: \"rdwetayarqzwtdsqystyraa\", // Token for Ruiz\r\n type: \"new\", // Action: new lead\r\n data: \"lead\", // Data area: leads\r\n });\r\n\r\n const url = `${baseUrl}?${params.toString()}`;\r\n\r\n // Send the request\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n // body: new URLSearchParams(leadPayload).toString(),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const result = await response.json();\r\n\r\n // Check if the response contains a lead ID (successful creation)\r\n if (result.id || result.leadId) {\r\n return {\r\n success: true,\r\n message: \"Lead successfully created\",\r\n leadId: result.id || result.leadId,\r\n };\r\n } else {\r\n return {\r\n success: true,\r\n message: \"Lead submitted successfully\",\r\n leadId: undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.error(\"Error sending lead to Nexvoro:\", error);\r\n return {\r\n success: false,\r\n message: error instanceof Error\r\n ? error.message\r\n : \"Unknown error occurred\",\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
|
|
2
|
+
if (typeof global === "undefined") { var global = globalThis || window || self; }
|
|
3
|
+
async function fetchSolarData(latitude, longitude, apiKey) {
|
|
4
|
+
if (latitude === 0 || longitude === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const args = {
|
|
9
|
+
"location.latitude": latitude.toFixed(5),
|
|
10
|
+
"location.longitude": longitude.toFixed(5),
|
|
11
|
+
};
|
|
12
|
+
const params = new URLSearchParams({
|
|
13
|
+
...args,
|
|
14
|
+
key: apiKey,
|
|
15
|
+
});
|
|
16
|
+
const response = await fetch(`https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`);
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const errorText = await response.text();
|
|
19
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
20
|
+
}
|
|
21
|
+
const contentType = response.headers.get("content-type");
|
|
22
|
+
if (!contentType || !contentType.includes("application/json")) {
|
|
23
|
+
const text = await response.text();
|
|
24
|
+
console.error("Unexpected content type:", contentType, "Response:", text);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const rawData = await response.json();
|
|
28
|
+
return rawData;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error fetching solar data:", error);
|
|
32
|
+
if (error instanceof TypeError &&
|
|
33
|
+
error.message === "Failed to fetch") {
|
|
34
|
+
throw new Error("Unable to connect to the solar data API.");
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function sendLeadToNexvoro(leadData) {
|
|
40
|
+
try {
|
|
41
|
+
// Prepare the lead data according to Nexvoro specifications
|
|
42
|
+
const leadPayload = {
|
|
43
|
+
id: "", // Empty for new leads
|
|
44
|
+
leadtype: "A-Lead", // Fixed value
|
|
45
|
+
phase: "10 Anbahnung", // Fixed value
|
|
46
|
+
title: `${leadData.client.name}/solarExpert`, // Short description
|
|
47
|
+
extradata: JSON.stringify(leadData), // JSON string with all data
|
|
48
|
+
};
|
|
49
|
+
// Build the URL with required parameters
|
|
50
|
+
const baseUrl = "https://workspace.nexvoro.cloud/exchange/extevent";
|
|
51
|
+
const params = new URLSearchParams({
|
|
52
|
+
md: "81.87.84.89.90.", // Encrypted tenant
|
|
53
|
+
token: "rdwetayarqzwtdsqystyraa", // Token for Ruiz
|
|
54
|
+
type: "new", // Action: new lead
|
|
55
|
+
data: "lead", // Data area: leads
|
|
56
|
+
});
|
|
57
|
+
const url = `${baseUrl}?${params.toString()}`;
|
|
58
|
+
// Send the request
|
|
59
|
+
const response = await fetch(url, {
|
|
60
|
+
method: "GET",
|
|
61
|
+
headers: {
|
|
62
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
63
|
+
charset: "utf-8",
|
|
64
|
+
},
|
|
65
|
+
// body: JSON.stringify(leadPayload),
|
|
66
|
+
body: new URLSearchParams(leadPayload).toString(),
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const errorText = await response.text();
|
|
70
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
71
|
+
}
|
|
72
|
+
const result = await response.json();
|
|
73
|
+
// Check if the response contains a lead ID (successful creation)
|
|
74
|
+
if (result.id || result.leadId) {
|
|
75
|
+
return {
|
|
76
|
+
success: true,
|
|
77
|
+
message: "Lead successfully created",
|
|
78
|
+
leadId: result.id || result.leadId,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return {
|
|
83
|
+
success: true,
|
|
84
|
+
message: "Lead submitted successfully",
|
|
85
|
+
leadId: undefined,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error("Error sending lead to Nexvoro:", error);
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
message: error instanceof Error
|
|
94
|
+
? error.message
|
|
95
|
+
: "Unknown error occurred",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { fetchSolarData as f, sendLeadToNexvoro as s };
|
|
101
|
+
//# sourceMappingURL=api-S3oJcLL5.js.map
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=api-S3oJcLL5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-S3oJcLL5.js","sources":["src/utils/api.ts"],"sourcesContent":["import { BuildingInsightsResponse } from \"harmonia-types\";\r\n\r\nexport async function fetchSolarData(\r\n latitude: number,\r\n longitude: number,\r\n apiKey: string,\r\n) {\r\n if (latitude === 0 || longitude === 0) {\r\n return null;\r\n }\r\n try {\r\n const args = {\r\n \"location.latitude\": latitude.toFixed(5),\r\n \"location.longitude\": longitude.toFixed(5),\r\n };\r\n const params = new URLSearchParams({\r\n ...args,\r\n key: apiKey,\r\n });\r\n const response = await fetch(\r\n `https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`,\r\n );\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n console.error(\"Unexpected content type:\", contentType, \"Response:\", text);\r\n return null;\r\n }\r\n\r\n const rawData: BuildingInsightsResponse = await response.json();\r\n return rawData;\r\n } catch (error) {\r\n console.error(\"Error fetching solar data:\", error);\r\n if (\r\n error instanceof TypeError &&\r\n error.message === \"Failed to fetch\"\r\n ) {\r\n throw new Error(\"Unable to connect to the solar data API.\");\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport interface LeadData {\r\n location: {\r\n name: string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n systemConfig: {\r\n maxNumberOfPanels: number;\r\n panelPeakPower: number;\r\n polygons: any[];\r\n solarSystems: any;\r\n electricityPrice: number;\r\n compensationRate: number;\r\n annualPriceIncrease: number;\r\n };\r\n client: {\r\n name: string;\r\n email: string;\r\n phone: string;\r\n consumption: number;\r\n consumptionProfile: string;\r\n hasBattery: boolean;\r\n battery: number;\r\n hasHeatPump: boolean;\r\n heatPumpM2: number;\r\n hasElectricCar: boolean;\r\n electricCarChargingTime: string;\r\n electricCarKmPerYear: number;\r\n };\r\n images: {\r\n roof: string;\r\n polygon: string;\r\n };\r\n results: {\r\n autonomy: number;\r\n costSavings: number;\r\n compensation20Years: number;\r\n savedCosts20Years: number;\r\n totalEnergyConsumption: number;\r\n };\r\n}\r\n\r\nexport async function sendLeadToNexvoro(\r\n leadData: LeadData,\r\n): Promise<{ success: boolean; message: string; leadId?: number }> {\r\n try {\r\n // Prepare the lead data according to Nexvoro specifications\r\n const leadPayload = {\r\n id: \"\", // Empty for new leads\r\n leadtype: \"A-Lead\", // Fixed value\r\n phase: \"10 Anbahnung\", // Fixed value\r\n title: `${leadData.client.name}/solarExpert`, // Short description\r\n extradata: JSON.stringify(leadData), // JSON string with all data\r\n };\r\n\r\n // Build the URL with required parameters\r\n const baseUrl = \"https://workspace.nexvoro.cloud/exchange/extevent\";\r\n const params = new URLSearchParams({\r\n md: \"81.87.84.89.90.\", // Encrypted tenant\r\n token: \"rdwetayarqzwtdsqystyraa\", // Token for Ruiz\r\n type: \"new\", // Action: new lead\r\n data: \"lead\", // Data area: leads\r\n });\r\n\r\n const url = `${baseUrl}?${params.toString()}`;\r\n\r\n // Send the request\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n charset: \"utf-8\",\r\n },\r\n // body: JSON.stringify(leadPayload),\r\n body: new URLSearchParams(leadPayload).toString(),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const result = await response.json();\r\n\r\n // Check if the response contains a lead ID (successful creation)\r\n if (result.id || result.leadId) {\r\n return {\r\n success: true,\r\n message: \"Lead successfully created\",\r\n leadId: result.id || result.leadId,\r\n };\r\n } else {\r\n return {\r\n success: true,\r\n message: \"Lead submitted successfully\",\r\n leadId: undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.error(\"Error sending lead to Nexvoro:\", error);\r\n return {\r\n success: false,\r\n message: error instanceof Error\r\n ? error.message\r\n : \"Unknown error occurred\",\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
|
|
2
|
+
if (typeof global === "undefined") { var global = globalThis || window || self; }
|
|
3
|
+
async function fetchSolarData(latitude, longitude, apiKey) {
|
|
4
|
+
if (latitude === 0 || longitude === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
const args = {
|
|
9
|
+
"location.latitude": latitude.toFixed(5),
|
|
10
|
+
"location.longitude": longitude.toFixed(5),
|
|
11
|
+
};
|
|
12
|
+
const params = new URLSearchParams({
|
|
13
|
+
...args,
|
|
14
|
+
key: apiKey,
|
|
15
|
+
});
|
|
16
|
+
const response = await fetch(`https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`);
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const errorText = await response.text();
|
|
19
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
20
|
+
}
|
|
21
|
+
const contentType = response.headers.get("content-type");
|
|
22
|
+
if (!contentType || !contentType.includes("application/json")) {
|
|
23
|
+
const text = await response.text();
|
|
24
|
+
console.error("Unexpected content type:", contentType, "Response:", text);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const rawData = await response.json();
|
|
28
|
+
return rawData;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error fetching solar data:", error);
|
|
32
|
+
if (error instanceof TypeError &&
|
|
33
|
+
error.message === "Failed to fetch") {
|
|
34
|
+
throw new Error("Unable to connect to the solar data API.");
|
|
35
|
+
}
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function sendLeadToNexvoro(leadData) {
|
|
40
|
+
try {
|
|
41
|
+
// Prepare the lead data according to Nexvoro specifications
|
|
42
|
+
const leadPayload = {
|
|
43
|
+
id: "", // Empty for new leads
|
|
44
|
+
leadtype: "A-Lead", // Fixed value
|
|
45
|
+
phase: "10 Anbahnung", // Fixed value
|
|
46
|
+
title: `${leadData.client.name}/solarExpert`, // Short description
|
|
47
|
+
extradata: JSON.stringify(leadData), // JSON string with all data
|
|
48
|
+
};
|
|
49
|
+
// Build the URL with required parameters
|
|
50
|
+
const baseUrl = "https://workspace.nexvoro.cloud/exchange/extevent";
|
|
51
|
+
const params = new URLSearchParams({
|
|
52
|
+
md: "81.87.84.89.90.", // Encrypted tenant
|
|
53
|
+
token: "rdwetayarqzwtdsqystyraa", // Token for Ruiz
|
|
54
|
+
type: "new", // Action: new lead
|
|
55
|
+
data: "lead", // Data area: leads
|
|
56
|
+
value: JSON.stringify(leadPayload),
|
|
57
|
+
});
|
|
58
|
+
const url = `${baseUrl}?${params.toString()}`;
|
|
59
|
+
// Send the request
|
|
60
|
+
const response = await fetch(url, {
|
|
61
|
+
method: "GET",
|
|
62
|
+
headers: {
|
|
63
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
64
|
+
charset: "utf-8",
|
|
65
|
+
},
|
|
66
|
+
// body: JSON.stringify(leadPayload),
|
|
67
|
+
// body: new URLSearchParams(leadPayload).toString(),
|
|
68
|
+
});
|
|
69
|
+
if (!response.ok) {
|
|
70
|
+
const errorText = await response.text();
|
|
71
|
+
throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
|
|
72
|
+
}
|
|
73
|
+
const result = await response.json();
|
|
74
|
+
// Check if the response contains a lead ID (successful creation)
|
|
75
|
+
if (result.id || result.leadId) {
|
|
76
|
+
return {
|
|
77
|
+
success: true,
|
|
78
|
+
message: "Lead successfully created",
|
|
79
|
+
leadId: result.id || result.leadId,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
message: "Lead submitted successfully",
|
|
86
|
+
leadId: undefined,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error("Error sending lead to Nexvoro:", error);
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
message: error instanceof Error
|
|
95
|
+
? error.message
|
|
96
|
+
: "Unknown error occurred",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { fetchSolarData as f, sendLeadToNexvoro as s };
|
|
102
|
+
//# sourceMappingURL=api-iAs1ZQr1.js.map
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=api-iAs1ZQr1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-iAs1ZQr1.js","sources":["src/utils/api.ts"],"sourcesContent":["import { BuildingInsightsResponse } from \"harmonia-types\";\r\n\r\nexport async function fetchSolarData(\r\n latitude: number,\r\n longitude: number,\r\n apiKey: string,\r\n) {\r\n if (latitude === 0 || longitude === 0) {\r\n return null;\r\n }\r\n try {\r\n const args = {\r\n \"location.latitude\": latitude.toFixed(5),\r\n \"location.longitude\": longitude.toFixed(5),\r\n };\r\n const params = new URLSearchParams({\r\n ...args,\r\n key: apiKey,\r\n });\r\n const response = await fetch(\r\n `https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`,\r\n );\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n console.error(\"Unexpected content type:\", contentType, \"Response:\", text);\r\n return null;\r\n }\r\n\r\n const rawData: BuildingInsightsResponse = await response.json();\r\n return rawData;\r\n } catch (error) {\r\n console.error(\"Error fetching solar data:\", error);\r\n if (\r\n error instanceof TypeError &&\r\n error.message === \"Failed to fetch\"\r\n ) {\r\n throw new Error(\"Unable to connect to the solar data API.\");\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport interface LeadData {\r\n location: {\r\n name: string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n systemConfig: {\r\n maxNumberOfPanels: number;\r\n panelPeakPower: number;\r\n polygons: any[];\r\n solarSystems: any;\r\n electricityPrice: number;\r\n compensationRate: number;\r\n annualPriceIncrease: number;\r\n };\r\n client: {\r\n name: string;\r\n email: string;\r\n phone: string;\r\n consumption: number;\r\n consumptionProfile: string;\r\n hasBattery: boolean;\r\n battery: number;\r\n hasHeatPump: boolean;\r\n heatPumpM2: number;\r\n hasElectricCar: boolean;\r\n electricCarChargingTime: string;\r\n electricCarKmPerYear: number;\r\n };\r\n images: {\r\n roof: string;\r\n polygon: string;\r\n };\r\n results: {\r\n autonomy: number;\r\n costSavings: number;\r\n compensation20Years: number;\r\n savedCosts20Years: number;\r\n totalEnergyConsumption: number;\r\n };\r\n}\r\n\r\nexport async function sendLeadToNexvoro(\r\n leadData: LeadData,\r\n): Promise<{ success: boolean; message: string; leadId?: number }> {\r\n try {\r\n // Prepare the lead data according to Nexvoro specifications\r\n const leadPayload = {\r\n id: \"\", // Empty for new leads\r\n leadtype: \"A-Lead\", // Fixed value\r\n phase: \"10 Anbahnung\", // Fixed value\r\n title: `${leadData.client.name}/solarExpert`, // Short description\r\n extradata: JSON.stringify(leadData), // JSON string with all data\r\n };\r\n\r\n // Build the URL with required parameters\r\n const baseUrl = \"https://workspace.nexvoro.cloud/exchange/extevent\";\r\n const params = new URLSearchParams({\r\n md: \"81.87.84.89.90.\", // Encrypted tenant\r\n token: \"rdwetayarqzwtdsqystyraa\", // Token for Ruiz\r\n type: \"new\", // Action: new lead\r\n data: \"lead\", // Data area: leads\r\n value: JSON.stringify(leadPayload),\r\n });\r\n\r\n const url = `${baseUrl}?${params.toString()}`;\r\n\r\n // Send the request\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n charset: \"utf-8\",\r\n },\r\n // body: JSON.stringify(leadPayload),\r\n // body: new URLSearchParams(leadPayload).toString(),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const result = await response.json();\r\n\r\n // Check if the response contains a lead ID (successful creation)\r\n if (result.id || result.leadId) {\r\n return {\r\n success: true,\r\n message: \"Lead successfully created\",\r\n leadId: result.id || result.leadId,\r\n };\r\n } else {\r\n return {\r\n success: true,\r\n message: \"Lead submitted successfully\",\r\n leadId: undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.error(\"Error sending lead to Nexvoro:\", error);\r\n return {\r\n success: false,\r\n message: error instanceof Error\r\n ? error.message\r\n : \"Unknown error occurred\",\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -59,9 +59,10 @@ async function sendLeadToNexvoro(leadData) {
|
|
|
59
59
|
const response = await fetch(url, {
|
|
60
60
|
method: "POST",
|
|
61
61
|
headers: {
|
|
62
|
-
"Content-Type": "application/
|
|
62
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
63
|
+
charset: "utf-8",
|
|
63
64
|
},
|
|
64
|
-
body:
|
|
65
|
+
// body: new URLSearchParams(leadPayload).toString(),
|
|
65
66
|
});
|
|
66
67
|
if (!response.ok) {
|
|
67
68
|
const errorText = await response.text();
|
|
@@ -96,6 +97,6 @@ async function sendLeadToNexvoro(leadData) {
|
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
export { fetchSolarData as f, sendLeadToNexvoro as s };
|
|
99
|
-
//# sourceMappingURL=api-
|
|
100
|
+
//# sourceMappingURL=api-vropRvpT.js.map
|
|
100
101
|
|
|
101
|
-
//# sourceMappingURL=api-
|
|
102
|
+
//# sourceMappingURL=api-vropRvpT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-vropRvpT.js","sources":["src/utils/api.ts"],"sourcesContent":["import { BuildingInsightsResponse } from \"harmonia-types\";\r\n\r\nexport async function fetchSolarData(\r\n latitude: number,\r\n longitude: number,\r\n apiKey: string,\r\n) {\r\n if (latitude === 0 || longitude === 0) {\r\n return null;\r\n }\r\n try {\r\n const args = {\r\n \"location.latitude\": latitude.toFixed(5),\r\n \"location.longitude\": longitude.toFixed(5),\r\n };\r\n const params = new URLSearchParams({\r\n ...args,\r\n key: apiKey,\r\n });\r\n const response = await fetch(\r\n `https://solar.googleapis.com/v1/buildingInsights:findClosest?${params}`,\r\n );\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.includes(\"application/json\")) {\r\n const text = await response.text();\r\n console.error(\"Unexpected content type:\", contentType, \"Response:\", text);\r\n return null;\r\n }\r\n\r\n const rawData: BuildingInsightsResponse = await response.json();\r\n return rawData;\r\n } catch (error) {\r\n console.error(\"Error fetching solar data:\", error);\r\n if (\r\n error instanceof TypeError &&\r\n error.message === \"Failed to fetch\"\r\n ) {\r\n throw new Error(\"Unable to connect to the solar data API.\");\r\n }\r\n throw error;\r\n }\r\n}\r\n\r\nexport interface LeadData {\r\n location: {\r\n name: string;\r\n latitude: number;\r\n longitude: number;\r\n };\r\n systemConfig: {\r\n maxNumberOfPanels: number;\r\n panelPeakPower: number;\r\n polygons: any[];\r\n solarSystems: any;\r\n electricityPrice: number;\r\n compensationRate: number;\r\n annualPriceIncrease: number;\r\n };\r\n client: {\r\n name: string;\r\n email: string;\r\n phone: string;\r\n consumption: number;\r\n consumptionProfile: string;\r\n hasBattery: boolean;\r\n battery: number;\r\n hasHeatPump: boolean;\r\n heatPumpM2: number;\r\n hasElectricCar: boolean;\r\n electricCarChargingTime: string;\r\n electricCarKmPerYear: number;\r\n };\r\n images: {\r\n roof: string;\r\n polygon: string;\r\n };\r\n results: {\r\n autonomy: number;\r\n costSavings: number;\r\n compensation20Years: number;\r\n savedCosts20Years: number;\r\n totalEnergyConsumption: number;\r\n };\r\n}\r\n\r\nexport async function sendLeadToNexvoro(\r\n leadData: LeadData,\r\n): Promise<{ success: boolean; message: string; leadId?: number }> {\r\n try {\r\n // Prepare the lead data according to Nexvoro specifications\r\n const leadPayload = {\r\n id: \"\", // Empty for new leads\r\n leadtype: \"A-Lead\", // Fixed value\r\n phase: \"10 Anbahnung\", // Fixed value\r\n title: `${leadData.client.name}/solarExpert`, // Short description\r\n extradata: JSON.stringify(leadData), // JSON string with all data\r\n };\r\n\r\n // Build the URL with required parameters\r\n const baseUrl = \"https://workspace.nexvoro.cloud/exchange/extevent\";\r\n const params = new URLSearchParams({\r\n md: \"81.87.84.89.90.\", // Encrypted tenant\r\n token: \"rdwetayarqzwtdsqystyraa\", // Token for Ruiz\r\n type: \"new\", // Action: new lead\r\n data: \"lead\", // Data area: leads\r\n });\r\n\r\n const url = `${baseUrl}?${params.toString()}`;\r\n\r\n // Send the request\r\n const response = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n charset: \"utf-8\",\r\n },\r\n // body: new URLSearchParams(leadPayload).toString(),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(\r\n `HTTP error! status: ${response.status}, body: ${errorText}`,\r\n );\r\n }\r\n\r\n const result = await response.json();\r\n\r\n // Check if the response contains a lead ID (successful creation)\r\n if (result.id || result.leadId) {\r\n return {\r\n success: true,\r\n message: \"Lead successfully created\",\r\n leadId: result.id || result.leadId,\r\n };\r\n } else {\r\n return {\r\n success: true,\r\n message: \"Lead submitted successfully\",\r\n leadId: undefined,\r\n };\r\n }\r\n } catch (error) {\r\n console.error(\"Error sending lead to Nexvoro:\", error);\r\n return {\r\n success: false,\r\n message: error instanceof Error\r\n ? error.message\r\n : \"Unknown error occurred\",\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
if (typeof global === "undefined") { var global = globalThis || window || self; }
|
|
3
|
-
import { B as Buffer } from './map-draw-
|
|
3
|
+
import { B as Buffer } from './map-draw-CaQc1QTP.js';
|
|
4
4
|
import './index-Cx8GOJRA.js';
|
|
5
5
|
import './constants-pXQQsEkH.js';
|
|
6
6
|
import './tools-BCET7NeO.js';
|
|
@@ -34,6 +34,6 @@ function create() {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export { create };
|
|
37
|
-
//# sourceMappingURL=decoder-
|
|
37
|
+
//# sourceMappingURL=decoder-BDfrXE7e.js.map
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=decoder-
|
|
39
|
+
//# sourceMappingURL=decoder-BDfrXE7e.js.map
|