async cancelSubscriptionAtPeriodEnd(id, reason = '') {
        await this._rateLimitBucket.throttle();
        const subscription = await this._stripe.subscriptions.update(id, {
            cancel_at_period_end: true,
            metadata: {
                cancellation_reason: reason
            }
        });
        return subscription;
    }
Cancel the Stripe Subscription at the end of the current period by ID.

@param {string} id - The ID of the Subscription to modify
@param {string} [reason=''] - The user defined cancellation reason

@returns {Promise<ISubscription>}