import { ENCRYPTION_REL8N_NAME } from '../../common/encrypt/encrypt-constants.mjs';
export const SpaceLocation = {
    /**
     * space is a local space, with lower latency and direct usage with
     * metaspace. To be used as the primary local user space.
     *
     * no real proxy is involved, rather, we should be speaking "directly" with
     * the local location.
     */
    local: 'local',
    /**
     * space is an outerspace, with higher latency, probably some kind of proxy
     * client access. More intended to be used with syncing...
     */
    outerspace: 'outerspace',
    /**
     * in-memory-only space.
     *
     * Note: I haven't really incorporated this, but I have sketched an
     * in-memory innerspace and in the future, I think this will be heavily
     * utilized.
     */
    innerspace: 'innerspace',
};
export const VALID_SPACE_LOCATIONS = Object.values(SpaceLocation).concat();
export const SpaceType = {
    /**
     * user space that usually (always?) acts locally as the main type of
     * storage for a user.
     *
     * This means that the user is actively working in this space, and it isn't
     * a derivative space. perhaps "source" would be better?
     */
    user: 'user',
    /**
     * this is a derivative user space that is used to synchronize ibgib
     * timelines among two or more other spaces.
     */
    sync: 'sync',
};
/**
 * Object.values(SpaceType).concat()
 *
 * for now, you can add valid space types here in initialization code to
 * manually extend this.
 */
export const VALID_SPACE_TYPES = Object.values(SpaceType).concat();
/**
 * specific/concrete subtype implementations
 */
export const UserSpaceSubtype = {
    /**
     * local user space is driven by a node filesystem concrete implementation.
     *
     * Note: This is actually implemented elsewhere, but I am deferring the
     * additional architectural requirements for putting the node filesystem and
     * extending this to include it. so I'm just putting this here. But in the
     * future, this should be moved to a node-specific library and brought in if
     * the app requires it.
     */
    node_filesystem: 'node-filesystem',
};
export const SyncSpaceSubtype = {
    aws_dynamodb: 'aws-dynamodb',
};
/**
 * specific, concrete implementation of space
 */
export const SpaceSubtype = {
    ...UserSpaceSubtype,
    ...SyncSpaceSubtype,
};
/**
 * Object.values(SpaceSubtype).concat()
 *
 * for now, you can add valid subtypes here in initialization code to manually
 * extend this.
 */
export const VALID_SPACE_SUBTYPES = Object.values(SpaceSubtype).concat();
/** Cmds for interacting with ibgib spaces.  */
export const IbGibSpaceOptionsCmd = {
    /** Retrieve ibGib(s) out of the space (does not remove them). */
    get: 'get',
    /** Registers/imports ibGib(s) into the space. */
    put: 'put',
    /** Delete an ibGib from a space */
    delete: 'delete',
};
/**
 * Flags to affect the command's interpretation.
 */
export const IbGibSpaceOptionsCmdModifier = {
    /**
     * Only interested if possibility to do command.
     *
     * This can be due to authorization or other.
     */
    can: 'can',
    /**
     * Only return the addresses of ibgibs
     */
    addrs: 'addrs',
    /**
     * Only interested in the latest one(s).
     *
     * The incoming addr(s) should be the tjp(s), since "latest"
     * only makes sense with unique timelines which are referenced by
     * their tjps.
     *
     * ## notes
     *
     * ATOW I'm actually using this in the aws dynamodb ibgib space to
     * get "newer" ibgibs, not just the latest.
     */
    latest: 'latest',
    /**
     * Ask to get updates on tjps in ibGibAddrs.
     */
    watch: 'watch',
    /*
     * Ask to stop getting updates on tjps in ibGibAddrs.
     */
    unwatch: 'unwatch',
    /**
     * Get the tjp ibgibs/addrs for given ibgib(s)
     */
    tjps: 'tjps',
    /**
     * Modifies the get command to retrieve a dependency graph.
     */
    dependencyGraph: 'dependency-graph',
};
//# sourceMappingURL=space-types.mjs.map