Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ build/
.DS_Store
.vercel

# Test and runtime data
data/

# Android: google-services and local.properties
android/antigravity/app/google-services.json
android/antigravity/local.properties
Expand Down
4 changes: 2 additions & 2 deletions api/ai-requests.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import aiProviders from '../lib/aiProviders.js';
const router = express.Router();

// Device authentication middleware
function authenticateDevice(req, res, next) {
async function authenticateDevice(req, res, next) {
// Check for device ID in header or query
const deviceId = req.headers['x-device-id'] || req.query.deviceId;
const apiKey = req.headers['x-api-key'] || req.headers['authorization']?.replace('Bearer ', '');
Expand All @@ -26,7 +26,7 @@ function authenticateDevice(req, res, next) {

// Device ID authentication
if (deviceId) {
const device = getRegistration(deviceId);
const device = await getRegistration(deviceId);
if (device) {
req.deviceId = deviceId;
req.device = device;
Expand Down
12 changes: 6 additions & 6 deletions api/devices.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ function validateRegistration(req, res, next) {
}

// POST /api/devices/register
router.post('/register', validateRegistration, (req, res) => {
router.post('/register', validateRegistration, async (req, res) => {
const body = req.body;

// canonical deviceId (if not provided generate one)
Expand All @@ -37,10 +37,10 @@ router.post('/register', validateRegistration, (req, res) => {
};

// persist (prototype: local file)
const saved = saveRegistration(record);
const saved = await saveRegistration(record);

// enqueue message for ingestion
const msg = enqueue('device-registrations.v1', {
const msg = await enqueue('device-registrations.v1', {
deviceId: saved.deviceId,
hardwareIdHash: saved.hardwareIdHash,
model: saved.model,
Expand All @@ -53,14 +53,14 @@ router.post('/register', validateRegistration, (req, res) => {
});

// mark status queued
transitionStatus(saved.deviceId, 'queued', { queuedAt: new Date().toISOString(), queueMessageId: msg.id });
await transitionStatus(saved.deviceId, 'queued', { queuedAt: new Date().toISOString(), queueMessageId: msg.id });

res.status(202).json({ deviceId: saved.deviceId, status: 'queued', queueMessageId: msg.id });
});

// GET device status
router.get('/:deviceId', (req, res) => {
const rec = getRegistration(req.params.deviceId);
router.get('/:deviceId', async (req, res) => {
const rec = await getRegistration(req.params.deviceId);
if (!rec) return res.status(404).json({ error: 'Device not found' });
res.json(rec);
});
Expand Down
6 changes: 3 additions & 3 deletions api/recycle.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const router = express.Router();
router.post('/recommend', async (req, res) => {
const { userId, location, items = [], preferences = {} } = req.body || {};
try {
const profile = userId ? profileStore.getProfile(userId) : null;
const profile = userId ? await profileStore.getProfile(userId) : null;
const prefs = Object.assign({}, profile?.preferences || {}, preferences);
const context = { location, profile: profile ? { id: userId } : null };
const out = await aiClient.getRecommendations(items, context, prefs);
Expand All @@ -20,11 +20,11 @@ router.post('/recommend', async (req, res) => {
});

// POST /api/recycle/feedback
router.post('/feedback', (req, res) => {
router.post('/feedback', async (req, res) => {
const { userId, item, action, rating, notes } = req.body || {};
try {
const fb = { userId: userId || 'anon', item, action, rating, notes, ts: new Date().toISOString() };
const filepath = profileStore.appendFeedback(fb);
const filepath = await profileStore.appendFeedback(fb);
res.json({ ok: true, stored: filepath });
} catch (err) {
res.status(500).json({ ok: false, error: err.message });
Expand Down
Loading