Hi,
I’m pulling my hair over using Netlify Blobs in a Astro server side rendered deployment. One visitor continuously sets a status of presence every few seconds, and the another visitor reads it about the same frequency for a minute or so.
After a new deployment, this works great for a few minutes, but then it errors out saying the api key is expired.
Mar 14, 08:19:57 PM: f2491f3e ERROR 20:19:57 [ERROR] BlobsInternalError: Netlify Blobs has generated an internal error (Failed to decode token: Token expired)
I have set the appropriate NETLIFY_BLOBS_CONTEXT (On all deploy contexts). The api key used for the base64-encoded json is set to never expire.
The url’s involved are
https://headroom.kioskkiosk.com/set-here.json (sets status)
https://headroom.kioskkiosk.com/is-here.json (reads status)
https://headroom.kioskkiosk.com/door (redirects to the appropriate image based on status)
(yeah I will rename them thank you)
set-here.json.js:
import { createStorage } from 'unstorage';
import netlifyBlobsDriver from 'unstorage/drivers/netlify-blobs';
export const prerender = false;
const storage = createStorage({
driver: netlifyBlobsDriver({
name: 'door',
consistency: 'strong'
})
});
export async function GET({ params, request }) {
let wasOpen = await storage.getItem('open');
await storage.setItem('open', new Date(Date.now() + 1000 * 20).toISOString());
return new Response(JSON.stringify({ open: await storage.getItem('open'), wasOpen }));
}
is-here.json.js:
import { createStorage } from 'unstorage';
import netlifyBlobsDriver from 'unstorage/drivers/netlify-blobs';
export const prerender = false;
const storage = createStorage({
driver: netlifyBlobsDriver({
name: 'door',
consistency: 'strong'
})
});
export async function GET({ params, request }) {
let openTime = Date.parse((await storage.getItem('open')) + '');
let expireTime = openTime ? new Date(openTime).getTime() : 0;
let isOpen = expireTime > Date.now();
return new Response(JSON.stringify({ isOpen, openTime, expireTime }));
}
door.astro:
---
import { createStorage } from 'unstorage';
import netlifyBlobsDriver from 'unstorage/drivers/netlify-blobs';
export const prerender = false;
const storage = createStorage({
driver: netlifyBlobsDriver({
name: 'door',
consistency: 'strong'
})
});
let openTime = Date.parse((await storage.getItem('open')) + '');
let expireTime = openTime ? new Date(openTime).getTime() : 0;
let isOpen = expireTime > Date.now();
return Astro.redirect(`/images/${isOpen ? 'open' : 'closed'}.png`);
---
I really don’t get why it works for a bit then stops.