/**
 * WS5.2 §6.1a — the `subscription-account-meta` replicated JournalKind.
 *
 * Registry follow-me = METADATA ONLY (spec §6.1, R2). A redacted projection of a
 * SubscriptionAccount replicates so a peer machine KNOWS the account exists and how loaded it
 * is (`GET /subscription-pool?scope=pool`, WS5.1) WITHOUT ever holding its login. THE LOGIN
 * LOCATION (`configHome`) AND EVERY CREDENTIAL FIELD ARE STRIPPED — `configHome` is meaningless
 * cross-machine and replicating it would invite the "just point at the path" leak the boundary
 * forbids; no credential field exists in this shape at all.
 *
 * It rides the MODERN ReplicatedKindRegistry path (like the 8 WS2 `*-record` kinds): the
 * schema below is validated on top of the generic envelope by BOTH CoherenceJournal.validate()
 * (send/source-of-truth mirror) AND JournalSyncApplier.validateData (receive side) — both route
 * through `replicatedRegistry.getByKind()` first. This resolves the spec↔code divergence: the
 * spec cited the legacy inline `JournalSyncApplier.validateData` branch (line 574), but the
 * codebase moved to the registry; registering THIS schema satisfies the spec's intent (a strict
 * receive-side validator) on the current architecture. The dual-registry coupling test asserts
 * the kind is ALSO present in JOURNAL_KINDS — a kind without its validator suspect-flags peers.
 *
 * Free-text content-injection surface = `nickname`/`email` (operator/provider free text rendered
 * into agent context + the dashboard). Both are control-char-stripped + length-clamped (≤256).
 * `email` is operator/provider PII that lands at-rest in each same-operator peer's plaintext
 * coherence-journal replica — accepted as low-stakes (email is NEVER a secret); named, not silent.
 *
 * Ships DARK behind `multiMachine.accountFollowMe` (this kind only emits/applies when enabled).
 */
import { type StoreFieldSchema, type ReplicatedEnvelope } from './ReplicatedRecordEnvelope.js';
import type { ImpactTier } from './UnionReader.js';
import type { HlcTimestamp } from './HybridLogicalClock.js';
export declare const SUBSCRIPTION_ACCOUNT_META_STORE_KEY = "subscriptionAccountMeta";
export declare const SUBSCRIPTION_ACCOUNT_META_KIND = "subscription-account-meta";
/** Account meta is reference, not authority → LOW impact (latest-writer on the holder stream). */
export declare const SUBSCRIPTION_ACCOUNT_META_IMPACT_TIER: ImpactTier;
export declare const subscriptionAccountMetaStoreSchema: StoreFieldSchema;
/** The ReplicatedKindRegistry registration for the `subscription-account-meta` store.
 *  server.ts registers this onto the shared registry; the dual-registry coupling test
 *  asserts `kind` is also present in JOURNAL_KINDS. */
export declare const SUBSCRIPTION_ACCOUNT_META_KIND_REGISTRATION: {
    readonly kind: "subscription-account-meta";
    readonly store: "subscriptionAccountMeta";
    readonly schema: StoreFieldSchema;
};
/** The recordKey for an account's meta stream — the account id (charset-clamped at the schema). */
export declare function deriveSubscriptionAccountMetaRecordKey(accountId: string): string;
/**
 * The redacted, credential-free projection that crosses the wire (R2 defense-in-depth).
 * Built by EXPLICIT ALLOWLIST (never by deleting fields off the source account) — so a future
 * field added to SubscriptionAccount, or a credential field, can NEVER ride along: only these
 * seven keys are ever copied, and `configHome` + every credential field are simply not among
 * them. The receive-side schema (subscriptionAccountMetaStoreSchema) independently rejects any
 * non-whitelisted key, so the boundary is enforced on BOTH ends.
 */
export declare function projectAccountToMeta(account: {
    id: string;
    nickname: string;
    email?: string;
    provider: string;
    framework: string;
    status: string;
    lastQuota?: unknown;
}): Record<string, unknown>;
interface AccountForProjection {
    id: string;
    nickname: string;
    email?: string;
    provider: string;
    framework: string;
    status: string;
    lastQuota?: unknown;
}
/** Build the full replicated envelope (projection + envelope fields) for an account-meta put. */
export declare function buildSubscriptionAccountMetaData(input: {
    account: AccountForProjection;
    hlc: HlcTimestamp;
    origin: string;
    observed?: HlcTimestamp;
}): Record<string, unknown>;
/** Build the tombstone envelope for a removed account-meta. */
export declare function buildSubscriptionAccountMetaTombstoneData(input: {
    accountId: string;
    hlc: HlcTimestamp;
    origin: string;
    deletedAt: string;
    observed?: HlcTimestamp;
}): Record<string, unknown>;
/** Emit seam for SubscriptionPool → the replicated meta stream (wired in server.ts, gated dark). */
export interface SubscriptionAccountMetaReplicationEmitter {
    /** Emit a redacted projection put for an account (on add / status / quota change). */
    emitPut(account: {
        id: string;
        nickname: string;
        email?: string;
        provider: string;
        framework: string;
        status: string;
        lastQuota?: unknown;
    }): void;
    /** Emit a tombstone for a removed account. */
    emitDelete(accountId: string, deletedAt: string): void;
}
/** Contributing journal kinds (for rollback-unmerge's kindsForStore wiring). */
export declare function subscriptionAccountMetaContributingKinds(): string[];
/** Impact tier resolver for ReplicatedStoreReader.tierOf (LOW; conservative for unknown). */
export declare function subscriptionAccountMetaTierOf(_store: string): ImpactTier;
export type { ReplicatedEnvelope };
//# sourceMappingURL=SubscriptionAccountMetaReplicatedStore.d.ts.map