```typescript
export function drainFrames(chunks: string[], marker: string): { frames: string[]; pending: string } {
    if (marker.length !== 1) {
        throw new Error("Marker must be a single character.");
    }

    let joinedText = chunks.join('');
    const frames: string[] = [];
    let currentFrame = '';
    let frameEnded = false;

    for (let i = 0; i < joinedText.length; i++) {
        if (joinedText[i] === marker) {
            if (!frameEnded) {
                currentFrame += marker;
                frameEnded = true;
            } else {
                frames.push(currentFrame);
                currentFrame = '';
                frameEnded = false;
            }
        } else {
            if (frameEnded) {
                throw new Error("Marker must be a single character.");
            }
            currentFrame += joinedText[i];
        }

        // If the marker is followed by another marker, it's part of the current frame
        if (i < joinedText.length - 1 && joinedText[i + 1] === marker) {
            i++; // Skip the next character as it's already included in the current frame
        }
    }

    if (!frameEnded) {
        frames.push(currentFrame);
    }

    const pendingText = joinedText.slice(joinedText.lastIndexOf(marker), Infinity);

    return { frames, pending: pendingText };
}
```