Optimized gamepass cache system?

any feedback / optimizations

local GamePassManager = {}
local Market = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

-- Cache table for storing game pass ownership
local gamePassCache = {}

-- Function to check game pass ownership with caching
function GamePassManager.hasGamePass(player, gamePassId)
    if not player or not player:IsA("Player") then return false end

    -- Check if the result is already cached
    if gamePassCache[player.UserId] and gamePassCache[player.UserId][gamePassId] ~= nil then
        return gamePassCache[player.UserId][gamePassId]
    end

    -- Fetch from API and store result
    local success, hasPass = pcall(function()
        return Market:UserOwnsGamePassAsync(player.UserId, gamePassId)
    end)

    if success then
        -- Store in cache
        gamePassCache[player.UserId] = gamePassCache[player.UserId] or {}
        gamePassCache[player.UserId][gamePassId] = hasPass
        return hasPass
    else
        warn("Failed to check GamePass ownership for", player.UserId, "GamePass:", gamePassId)
        return false
    end
end

-- Event to update cache when a player buys a game pass
Market.PromptGamePassPurchaseFinished:Connect(function(playerId, gamePassId, wasPurchased)
    if wasPurchased then
        if gamePassCache[playerId] then
            gamePassCache[playerId][gamePassId] = true
        end
    end
end)

-- Clear cache when a player leaves (optional, for memory management)
Players.PlayerRemoving:Connect(function(player)
    gamePassCache[player.UserId] = nil
end)

return GamePassManager

There’s not much to improve here aside from some micro-ops. Feel free to take inspiration from what did for my MarketplaceService “wrapper”: https://github.com/Ziffixture/Roblox/blob/main/MonetizationService.lua