From fff721dd185f5b97f7ae7a6e64189e55887ff590 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 05 Jul 2026 18:36:57 +0000
Subject: [PATCH] =Cleaning up the Square integration (still a bit more to do yet). Also majorly overhauled /rest/ files to ignore a rest request 'user' paramater, and rely on get_current_user_id() instead.

---
 assets/js/concise/SimpleCache.js |   40 ++++++++++++++++++++++++++++++++++------
 1 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/assets/js/concise/SimpleCache.js b/assets/js/concise/SimpleCache.js
index 30f074c..afd488d 100644
--- a/assets/js/concise/SimpleCache.js
+++ b/assets/js/concise/SimpleCache.js
@@ -18,7 +18,7 @@
 	constructor(base, config = {}) {
 		this.base = base;
 		this.config = {
-			namespace: 'jvb_cache',
+			namespace: `${jvbBase.base}cache`,
 			TTL: 3600000,
 			maxSize: 100,
 			...config
@@ -45,6 +45,9 @@
 	/**
 	 * Get a setting value
 	 */
+	/**
+	 * Get a setting value
+	 */
 	get(key) {
 		//Check memory cache first
 		if (this._cache.has(key)) {
@@ -54,11 +57,11 @@
 		let cacheKey = `${this.base}_${key}`;
 		let item;
 		try {
-			item =  localStorage.getItem(cacheKey);
+			item = localStorage.getItem(cacheKey);
 			if (!item) {
 				return null;
 			}
-			item = JSON.parse(item);
+			item = this._revive(JSON.parse(item));
 		} catch (error) {
 			console.warn('Error getting from localStorage:', error);
 			return null;
@@ -76,15 +79,16 @@
 	set(key, value) {
 		this._cache.set(key, value);
 		let cacheKey = `${this.base}_${key}`;
+		let serialized = JSON.stringify(this._serialize(value));
 
 		try {
-			localStorage.setItem(cacheKey, JSON.stringify(value));
+			localStorage.setItem(cacheKey, serialized);
 		} catch (error) {
 			// Handle quota exceeded
 			if (error instanceof DOMException && error.code === 22) {
 				this.clearOldestLocalStorageItems();
 				try {
-					localStorage.setItem(key, JSON.stringify(item));
+					localStorage.setItem(cacheKey, serialized);
 				} catch (retryError) {
 					console.warn('Still failed to set localStorage item after cleanup:', retryError);
 				}
@@ -97,6 +101,30 @@
 		this.notify('cache-saved', { key, value });
 	}
 
+	/**
+	 * Tag Maps/Sets so they survive JSON round-tripping
+	 */
+	_serialize(value) {
+		if (value instanceof Map) {
+			return { __type: 'Map', value: Array.from(value.entries()) };
+		}
+		if (value instanceof Set) {
+			return { __type: 'Set', value: Array.from(value.values()) };
+		}
+		return value;
+	}
+
+	/**
+	 * Revive a parsed value, restoring Maps/Sets if tagged
+	 */
+	_revive(parsed) {
+		if (parsed && typeof parsed === 'object') {
+			if (parsed.__type === 'Map') return new Map(parsed.value);
+			if (parsed.__type === 'Set') return new Set(parsed.value);
+		}
+		return parsed;
+	}
+
 	remove(key) {
 		let cacheKey = `${this.base}_${key}`;
 		try {
@@ -150,7 +178,7 @@
 				let cleanKey = key.replace(`${this.base}_`, '');
 				try {
 					// Parse the JSON value before caching
-					const value = JSON.parse(localStorage.getItem(key));
+					const value = this._revive(JSON.parse(localStorage.getItem(key)));
 					this._cache.set(cleanKey, value);
 				} catch (error) {
 					console.warn(`Failed to parse cached value for ${key}:`, error);

--
Gitblit v1.10.0