/**
 * 插件沙箱
 * 用于插件隔离和权限控制
 */ function _define_property(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}
/**
 * 插件权限
 */ export var PluginPermission = /*#__PURE__*/ function(PluginPermission) {
    /**
   * 访问配置
   */ PluginPermission["ACCESS_CONFIG"] = "access_config";
    /**
   * 访问状态管理器
   */ PluginPermission["ACCESS_STATE_MANAGER"] = "access_state_manager";
    /**
   * 访问存储
   */ PluginPermission["ACCESS_STORAGE"] = "access_storage";
    /**
   * 发布事件
   */ PluginPermission["EMIT_EVENTS"] = "emit_events";
    /**
   * 订阅事件
   */ PluginPermission["SUBSCRIBE_EVENTS"] = "subscribe_events";
    return PluginPermission;
}({});
/**
 * 插件沙箱
 */ export class PluginSandbox {
    /**
   * 检查权限
   * 
   * @param permission - 权限
   * @returns 是否有权限
   */ hasPermission(permission) {
        if (!this.config.strictMode) {
            return true; // 非严格模式，允许所有权限
        }
        return this.permissions.has(permission);
    }
    /**
   * 检查是否可以访问配置键
   * 
   * @param key - 配置键
   * @returns 是否可以访问
   */ canAccessConfig(key) {
        if (!this.hasPermission("access_config")) {
            return false;
        }
        if (this.config.configWhitelist && this.config.configWhitelist.length > 0) {
            return this.config.configWhitelist.includes(key);
        }
        return true;
    }
    /**
   * 检查是否可以访问状态作用域
   * 
   * @param scope - 状态作用域
   * @returns 是否可以访问
   */ canAccessStateScope(scope) {
        if (!this.hasPermission("access_state_manager")) {
            return false;
        }
        if (this.config.stateScopeWhitelist && this.config.stateScopeWhitelist.length > 0) {
            return this.config.stateScopeWhitelist.includes(scope);
        }
        return true;
    }
    /**
   * 过滤配置（根据白名单）
   * 
   * @param config - 完整配置
   * @returns 过滤后的配置
   */ filterConfig(config) {
        if (!this.hasPermission("access_config")) {
            return {};
        }
        if (!this.config.configWhitelist || this.config.configWhitelist.length === 0) {
            return config;
        }
        const filtered = {};
        for (const key of this.config.configWhitelist){
            if (key in config) {
                filtered[key] = config[key];
            }
        }
        return filtered;
    }
    /**
   * 获取沙箱配置
   */ getConfig() {
        return {
            ...this.config
        };
    }
    /**
   * 更新权限
   * 
   * @param permissions - 权限列表
   */ updatePermissions(permissions) {
        this.permissions = new Set(permissions);
        this.config.permissions = permissions;
    }
    constructor(config){
        _define_property(this, "config", void 0);
        _define_property(this, "permissions", void 0);
        this.config = {
            strictMode: true,
            ...config
        };
        this.permissions = new Set(config.permissions || []);
    }
}

//# sourceMappingURL=PluginSandbox.js.map