@withpotter/tenant-core — module reference

HTTP routes this module mounts, plus its internal use-cases, entities, and repositories. The exhaustive request/response contract is the engine’s OpenAPI document at /docs; the layered structure below follows the package internal architecture.

HTTP routes

Tenants /tenants

MethodPathAuthDescription
GET/tenants/:slugGet a tenant by slug
GET/tenants/by-domain/:domainLook up a tenant by custom domain
GET/tenants/check-slugCheck whether a tenant slug is available
GET/tenants/currentYesGet the tenant resolved for the current request
POST/tenantsYesCreate a new tenant
POST/tenants/current/discard-appearance-draftYesDiscard the pending appearance draft
POST/tenants/current/publish-appearanceYesPromote the appearance draft to live settings
POST/tenants/current/settings/colors/suggestYesExtract a color palette from a logo URL
PATCH/tenants/currentYesUpdate the current tenant (live or draft)
DELETE/tenants/currentYesDelete the current tenant

Internals

Use-cases

Application operations. Each is a single-purpose class with one execute() method.

Use-caseSignature
CheckSlugAvailabilityUseCaseexecute(slug: string): Promise<boolean>
CreateTenantUseCaseexecute(input: CreateTenantInput)
DeleteCurrentTenantUseCaseexecute(slug: string): Promise<{ deleted: true }>
DiscardAppearanceDraftUseCaseexecute(tenant: Tenant): Promise<Tenant>
GetCurrentTenantUseCaseexecute(tenant: Tenant | null)
GetTenantByDomainUseCaseexecute(domain: string)
GetTenantByIdUseCaseexecute(id: string): Promise<Tenant | null>
GetTenantBySlugUseCaseexecute(slug: string, options?: { includeDrafts?: boolean })
LookupTenantByDomainUseCaseexecute(domain: string): Promise<{ slug: string; id: string; name: string }>
PublishAppearanceUseCaseexecute(tenant: Tenant): Promise<Tenant>
SuggestColorsUseCaseexecute(logoUrl: string): Promise<SuggestColorsResult>
UpdateCurrentTenantUseCaseexecute(tenant: Tenant | null, dto: UpdateCurrentTenantInput, accountId?: string, target: 'draft' | 'live' = 'live')
UpdateTenantSettingsUseCaseexecute(id: string, settings: Partial<TenantSettings>)
UpdateTenantTemplateUseCaseexecute(id: string, templateId: string)

Entities

Sequelize models owned by this module.

Account — table accounts

FieldType
idstring
emailstring
passwordHashstring | null
namestring | null
avatarUrlstring | null
emailVerifiedboolean
lastLoginAtDate | null
statusAccountStatus
passwordResetTokenstring | null
passwordResetExpiresDate | null
maxWorkspacesnumber
authProviderAuthProvider
authProviderIdstring | null
createdAtDate
updatedAtDate

Organization — table organizations

FieldType
idstring
namestring
slugstring
logoUrlstring | null
billingEmailstring | null
statusOrganizationStatus
subscriptionRecord<string, unknown>
settingsRecord<string, unknown>
createdAtDate
updatedAtDate
idstring
organizationIdstring
organizationOrganization
accountIdstring
accountAccount
roleOrgMemberRole
statusOrgMemberStatus
invitedByIdstring | null
invitedAtDate | null
joinedAtDate | null
createdAtDate
updatedAtDate

Tenant — table tenants

FieldType
idstring
organizationIdstring | null
organizationOrganization
slugstring
customDomainstring
businessNamestring
emailstring
phonestring
statusTenantStatus
templateIdstring
industryKeystring | null
settingsTenantSettings
draftSettingsRecord<string, unknown> | null
paymentSettingsPaymentSettings
subscriptionSubscription
createdAtDate
updatedAtDate

TenantEmailCredit — table tenant_email_credits

FieldType
idstring
tenantIdstring
tenantTenant
typeEmailCreditType
amountnumber
balanceAfternumber
descriptionstring | null
referenceTypestring | null
referenceIdstring | null
amountPaidnumber | null
metadataRecord<string, unknown> | null
createdAtDate
updatedAtDate
tenantIdstring
tenantTenant
balancenumber
totalPurchasednumber
totalFromPlannumber
totalEmailsSentnumber
totalSpentnumber
monthlyAllowancenumber
nextResetDateDate | null
usedThisPeriodnumber
lowBalanceThresholdnumber
createdAtDate
updatedAtDate

TenantMessagingCredit — table tenant_messaging_credits

FieldType
idstring
tenantIdstring
tenantTenant
typeMessagingCreditType
channelMessagingChannel | null
amountnumber
balanceAfternumber
descriptionstring | null
referenceTypestring | null
referenceIdstring | null
amountPaidnumber | null
metadataRecord<string, unknown> | null
createdAtDate
updatedAtDate

TenantMessagingCreditBalance — table tenant_messaging_credit_balances

FieldType
tenantIdstring
tenantTenant
balancenumber
totalPurchasednumber
totalFromPlannumber
totalSmsUsednumber
totalWhatsappUsednumber
totalSpentnumber
monthlyAllowancenumber
nextResetDateDate | null
usedThisPeriodnumber
lowBalanceThresholdnumber
createdAtDate
updatedAtDate

Repositories

Data-access classes wrapping the entities.

AccountRepository

create · findById · findByEmail · findByAuthProvider · update · updatePassword · updateEmail · updateLastLogin · verifyEmail · existsByEmail · findByResetToken · softDelete · delete

OrganizationRepository

create · findById · findBySlug · update · existsBySlug · generateUniqueSlug · delete · findByOrgAndAccount · findAllByOrg · findAllByAccount · findOrgsForAccount · remove · isOwner · hasAccess · countActiveMembers

TenantEmailCreditRepository

create · findByTenantId · getUsageStats · getOrCreate · addCredits · useCredits · setMonthlyAllowance · resetMonthlyCredits · findAllDueForReset

TenantMessagingCreditRepository

create · findByTenantId · getUsageStats · getMonthlyUsage · getOrCreate · addCredits · useCredits · hasEnoughCredits · setMonthlyAllowance · resetMonthlyCredits · updateLowBalanceThreshold · findAllDueForReset

TenantRepository

findBySlug · findByCustomDomain · existsBySlug · updateSettings · updateTemplate · updateStatus · findByOrganization · findByIdOrFail

Generated from the module’s source. Routes are relative to the engine root (default http://localhost:3001). For full request/response schemas use the live OpenAPI document.