Files
BarangaySystem/resources/js/composables/useUrlEncoder.js
2026-06-06 18:43:00 +08:00

88 lines
2.2 KiB
JavaScript

// resources/js/composables/useUrlEncoder.js
// Utility for encoding/decoding hashkeys and payloads in URLs
/**
* Encode a hashkey value to URL format: h:HASHKEY
*/
export function encodeHash(hashkey) {
if (!hashkey) return null;
// Base64 encode the hashkey for URL safety
try {
const encoded = btoa(encodeURIComponent(hashkey));
return `h:${encoded}`;
} catch (e) {
console.error('[encodeHash] Error encoding hash:', e);
return null;
}
}
/**
* Encode a payload object to URL format: e:BASE64_JSON
*/
export function encodePayload(payload) {
if (!payload) return null;
try {
const json = JSON.stringify(payload);
const encoded = btoa(encodeURIComponent(json));
return `e:${encoded}`;
} catch (e) {
console.error('[encodePayload] Error encoding payload:', e);
return null;
}
}
/**
* Decode a hashkey from URL format
*/
export function decodeHash(encodedValue) {
if (!encodedValue || !encodedValue.startsWith('h:')) return null;
const parts = encodedValue.split(':');
if (parts.length < 2) return null;
try {
// Remove the 'h:' prefix and decode
const base64 = encodedValue.substring(2);
// First decode from base64, then decode URI components
const decoded = atob(base64);
return decodeURIComponent(decoded);
} catch (e) {
console.error('[decodeHash] Error decoding hash:', e);
return null;
}
}
/**
* Decode a payload from URL format
*/
export function decodePayload(encodedValue) {
if (!encodedValue || !encodedValue.startsWith('e:')) return null;
const parts = encodedValue.split(':');
if (parts.length < 2) return null;
try {
// Remove the 'e:' prefix and decode
const base64 = encodedValue.substring(2);
// First decode from base64, then parse JSON
const decodedJson = atob(base64);
return JSON.parse(decodedJson);
} catch (e) {
console.error('[decodePayload] Error decoding payload:', e);
return null;
}
}
/**
* Check if a value is a hashkey encoding
*/
export function isHashKeyFormat(value) {
return typeof value === 'string' && value.startsWith('h:');
}
/**
* Check if a value is a payload encoding
*/
export function isPayloadFormat(value) {
return typeof value === 'string' && value.startsWith('e:');
}