mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-02-07 20:11:16 -05:00
* feat(db): add support for multiple users and organizations * feat: backfill entities with new organization id * refactor: filter all backend queries to surface only organization specific entities * refactor: each org has its own restic password * test: ensure organization is created * chore: pr feedbacks * refactor: filter by org id in all places * refactor: download restic password from stored db password * refactor(navigation): use volume id in urls instead of name * feat: disable registrations * refactor(auth): bubble up auth error to hono * refactor: use async local storage for cleaner context sharing * refactor: enable user registration vs disabling it * test: multi-org isolation * chore: final cleanup
25 lines
630 B
TypeScript
25 lines
630 B
TypeScript
import { AsyncLocalStorage } from "node:async_hooks";
|
|
|
|
export type RequestContext = {
|
|
organizationId: string;
|
|
userId?: string;
|
|
};
|
|
|
|
const requestContextStorage = new AsyncLocalStorage<RequestContext>();
|
|
|
|
export const withContext = <T>(context: RequestContext, fn: () => T): T => {
|
|
return requestContextStorage.run(context, fn);
|
|
};
|
|
|
|
export const getRequestContext = (): RequestContext => {
|
|
const context = requestContextStorage.getStore();
|
|
|
|
if (!context?.organizationId) {
|
|
throw new Error("Organization context is missing");
|
|
}
|
|
|
|
return context;
|
|
};
|
|
|
|
export const getOrganizationId = () => getRequestContext().organizationId;
|