<?php
namespace App\Jobs;
use App\Models\Invoice;
use App\Services\StripeGateway;
package webhook
import (
"encoding/json"
"io"
"net/http"
class SlidingWindowLimiter
Result = Struct.new(:allowed, :count, :limit, :window_ms, keyword_init: true)
SCRIPT = <<~LUA.freeze
local key = KEYS[1]
local now = tonumber(ARGV[1])
class ApiError extends Error {
constructor(statusCode, message, code) {
super(message);
this.name = 'ApiError';
this.statusCode = statusCode;
this.code = code || null;
package cleanup
import "errors"
func CloseAll(closers ...func() error) error {
var errs []error
package limit
import (
"context"
"golang.org/x/sync/semaphore"
import java.time.Duration;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Predicate;
public final class RetryPolicy {
private final int maxAttempts;
package migrate
import (
"context"
"github.com/jackc/pgx/v5/pgxpool"
class CircuitBreaker
class CircuitOpenError < StandardError; end
def initialize(name, redis: Redis.current, failure_threshold: 5, failure_window: 60, cooldown: 30)
@key = "circuit:#{name}"
@redis = redis