Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,584 Bytes
6f005bf b3c3418 6f005bf b3c3418 6f005bf b3c3418 6f005bf b3c3418 6f005bf b3c3418 6f005bf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import { PersistedState } from "runed";
import { validateOrganization, type OrganizationInfo } from "$lib/utils/organization.js";
const STORAGE_KEY = "hf_billing_org";
class Billing {
#organization = new PersistedState(STORAGE_KEY, "");
#organizationInfo = $state<OrganizationInfo | null>(null);
#validating = $state(false);
constructor() {
$effect.root(() => {
// Validate organization on initialization if one exists
$effect(() => {
if (this.#organization.current) {
this.validateCurrentOrganization();
}
});
});
}
get organization() {
return this.#organization.current;
}
get organizationInfo() {
return this.#organizationInfo;
}
get validating() {
return this.#validating;
}
get displayName() {
if (!this.#organization.current) return "Personal Account";
return this.#organizationInfo?.displayName || this.#organization.current;
}
get isValid() {
if (!this.#organization.current) return true; // Personal account is always valid
return this.#organizationInfo?.isValid ?? false;
}
set organization(org: string) {
this.#organization.current = org;
this.validateCurrentOrganization();
}
private async validateCurrentOrganization() {
if (!this.#organization.current) {
this.#organizationInfo = null;
return;
}
this.#validating = true;
try {
this.#organizationInfo = await validateOrganization(this.#organization.current);
} finally {
this.#validating = false;
}
}
reset = () => {
this.organization = "";
this.#organizationInfo = null;
};
}
export const billing = new Billing();
|