@marvalt/digivalt-core 0.2.11 → 0.2.12
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/CHANGELOG.md +13 -0
- package/README.md +6 -0
- package/bin/env-example-fragments.cjs +3 -0
- package/dist/generators/google-reviews.d.ts +5 -0
- package/dist/generators/index.d.ts +1 -0
- package/dist/generators.cjs +90 -1
- package/dist/generators.cjs.map +1 -1
- package/dist/generators.d.ts +6 -1
- package/dist/generators.esm.js +90 -2
- package/dist/generators.esm.js.map +1 -1
- package/dist/index.cjs +91 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.esm.js +91 -2
- package/dist/index.esm.js.map +1 -1
- package/docs/AI-LOCAL-WORDPRESS-BOOTSTRAP.md +116 -0
- package/docs/LOVABLE-MASTER-PROMPT.md +140 -0
- package/package.json +1 -1
- package/template/public/gravity-forms-data.json +7 -0
- package/template/public/sitemap-static-paths.json +3 -3
- package/template/public/wordpress-data.json +44 -0
- package/template/src/data/mautic-data.json +7 -0
package/dist/index.cjs
CHANGED
|
@@ -4,6 +4,7 @@ var dotenv = require('dotenv');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var fs = require('fs');
|
|
6
6
|
var sadapter = require('@marvalt/sadapter');
|
|
7
|
+
var promises = require('fs/promises');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @license GPL-3.0-or-later
|
|
@@ -2453,6 +2454,92 @@ async function generateSuiteCRMData(options) {
|
|
|
2453
2454
|
}
|
|
2454
2455
|
}
|
|
2455
2456
|
|
|
2457
|
+
function trimTrailingSlash(value) {
|
|
2458
|
+
return value.replace(/\/+$/, '');
|
|
2459
|
+
}
|
|
2460
|
+
function resolveEndpointUrl() {
|
|
2461
|
+
const explicit = process.env.GOOGLE_REVIEWS_API_URL ||
|
|
2462
|
+
process.env.VITE_GOOGLE_REVIEWS_API_URL ||
|
|
2463
|
+
'';
|
|
2464
|
+
if (explicit) {
|
|
2465
|
+
return explicit;
|
|
2466
|
+
}
|
|
2467
|
+
const wpApiBase = process.env.WORDPRESS_API_URL ||
|
|
2468
|
+
process.env.VITE_WORDPRESS_API_URL ||
|
|
2469
|
+
'';
|
|
2470
|
+
if (!wpApiBase) {
|
|
2471
|
+
return '';
|
|
2472
|
+
}
|
|
2473
|
+
const normalizedBase = trimTrailingSlash(wpApiBase);
|
|
2474
|
+
if (normalizedBase.endsWith('/wp-json')) {
|
|
2475
|
+
return `${normalizedBase}/vibune-google-reviews/v1/reviews`;
|
|
2476
|
+
}
|
|
2477
|
+
return `${normalizedBase}/wp-json/vibune-google-reviews/v1/reviews`;
|
|
2478
|
+
}
|
|
2479
|
+
function buildHeaders() {
|
|
2480
|
+
const headers = {
|
|
2481
|
+
Accept: 'application/json',
|
|
2482
|
+
};
|
|
2483
|
+
const username = process.env.WP_API_USERNAME || process.env.VITE_WP_API_USERNAME || '';
|
|
2484
|
+
const password = process.env.WP_APP_PASSWORD || process.env.VITE_WP_APP_PASSWORD || '';
|
|
2485
|
+
if (username && password) {
|
|
2486
|
+
headers.Authorization = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;
|
|
2487
|
+
}
|
|
2488
|
+
const cfAccessClientId = process.env.CF_ACCESS_CLIENT_ID || process.env.VITE_CF_ACCESS_CLIENT_ID || '';
|
|
2489
|
+
const cfAccessClientSecret = process.env.CF_ACCESS_CLIENT_SECRET || process.env.VITE_CF_ACCESS_CLIENT_SECRET || '';
|
|
2490
|
+
if (cfAccessClientId && cfAccessClientSecret) {
|
|
2491
|
+
headers['CF-Access-Client-Id'] = cfAccessClientId;
|
|
2492
|
+
headers['CF-Access-Client-Secret'] = cfAccessClientSecret;
|
|
2493
|
+
}
|
|
2494
|
+
return headers;
|
|
2495
|
+
}
|
|
2496
|
+
function hasExpectedShape(payload) {
|
|
2497
|
+
if (!payload || typeof payload !== 'object') {
|
|
2498
|
+
return false;
|
|
2499
|
+
}
|
|
2500
|
+
const obj = payload;
|
|
2501
|
+
return Array.isArray(obj.reviews) && typeof obj.business === 'object' && obj.business !== null;
|
|
2502
|
+
}
|
|
2503
|
+
function truncateBody(body, max = 1200) {
|
|
2504
|
+
if (body.length <= max) {
|
|
2505
|
+
return body;
|
|
2506
|
+
}
|
|
2507
|
+
return `${body.slice(0, max)}...`;
|
|
2508
|
+
}
|
|
2509
|
+
async function generateGoogleReviewsData(options) {
|
|
2510
|
+
const outputPath = options?.outputPath || './public/google-reviews-data.json';
|
|
2511
|
+
const endpointUrl = resolveEndpointUrl();
|
|
2512
|
+
if (!endpointUrl) {
|
|
2513
|
+
console.error('❌ Missing Google Reviews endpoint. Set GOOGLE_REVIEWS_API_URL or VITE_GOOGLE_REVIEWS_API_URL, or configure WORDPRESS_API_URL/VITE_WORDPRESS_API_URL.');
|
|
2514
|
+
return false;
|
|
2515
|
+
}
|
|
2516
|
+
try {
|
|
2517
|
+
const response = await fetch(endpointUrl, {
|
|
2518
|
+
method: 'GET',
|
|
2519
|
+
headers: buildHeaders(),
|
|
2520
|
+
});
|
|
2521
|
+
if (!response.ok) {
|
|
2522
|
+
const body = truncateBody(await response.text());
|
|
2523
|
+
console.error(`❌ Google Reviews generation failed (HTTP ${response.status}): ${body}`);
|
|
2524
|
+
return false;
|
|
2525
|
+
}
|
|
2526
|
+
const payload = (await response.json());
|
|
2527
|
+
if (!hasExpectedShape(payload)) {
|
|
2528
|
+
console.error('❌ Google Reviews generation failed: endpoint returned unexpected payload shape.');
|
|
2529
|
+
return false;
|
|
2530
|
+
}
|
|
2531
|
+
const outputFilePath = path.join(process.cwd(), outputPath);
|
|
2532
|
+
await promises.mkdir(path.dirname(outputFilePath), { recursive: true });
|
|
2533
|
+
await promises.writeFile(outputFilePath, `${JSON.stringify(payload, null, 2)}\n`, 'utf-8');
|
|
2534
|
+
console.log(`📁 Google Reviews data written to: ${outputFilePath}`);
|
|
2535
|
+
return true;
|
|
2536
|
+
}
|
|
2537
|
+
catch (e) {
|
|
2538
|
+
console.error('❌ Google Reviews generation failed:', e.message);
|
|
2539
|
+
return false;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2456
2543
|
const SITEMAP_SKIP_TOP_LEVEL_KEYS = new Set([
|
|
2457
2544
|
'config',
|
|
2458
2545
|
'site_settings',
|
|
@@ -2676,7 +2763,8 @@ async function generateAllData() {
|
|
|
2676
2763
|
const gfSuccess = await generateGravityFormsData();
|
|
2677
2764
|
const mauticSuccess = await generateMauticData();
|
|
2678
2765
|
const suitecrmSuccess = await generateSuiteCRMData();
|
|
2679
|
-
|
|
2766
|
+
const googleReviewsSuccess = await generateGoogleReviewsData();
|
|
2767
|
+
if (!wpSuccess || !gfSuccess || !mauticSuccess || !suitecrmSuccess || !googleReviewsSuccess) {
|
|
2680
2768
|
console.error('❌ Some generation tasks failed. See above for details.');
|
|
2681
2769
|
process.exit(1);
|
|
2682
2770
|
}
|
|
@@ -2687,6 +2775,7 @@ async function generateAllData() {
|
|
|
2687
2775
|
var index = /*#__PURE__*/Object.freeze({
|
|
2688
2776
|
__proto__: null,
|
|
2689
2777
|
generateAllData: generateAllData,
|
|
2778
|
+
generateGoogleReviewsData: generateGoogleReviewsData,
|
|
2690
2779
|
generateGravityFormsData: generateGravityFormsData,
|
|
2691
2780
|
generateMauticData: generateMauticData,
|
|
2692
2781
|
generateSitemapPaths: generateSitemapPaths,
|
|
@@ -2704,6 +2793,7 @@ const getDigiValtVersion = () => {
|
|
|
2704
2793
|
};
|
|
2705
2794
|
|
|
2706
2795
|
exports.generateAllData = generateAllData;
|
|
2796
|
+
exports.generateGoogleReviewsData = generateGoogleReviewsData;
|
|
2707
2797
|
exports.generateGravityFormsData = generateGravityFormsData;
|
|
2708
2798
|
exports.generateMauticData = generateMauticData;
|
|
2709
2799
|
exports.generateSitemapPaths = generateSitemapPaths;
|