File size: 1,980 Bytes
0bcc252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { ApplicationError, Prop, RPC_TRANSFER_PROTOCOL_META_SYMBOL, StatusCode } from 'civkit';
import _ from 'lodash';
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';

dayjs.extend(utc);

@StatusCode(50301)
export class ServiceDisabledError extends ApplicationError { }

@StatusCode(50302)
export class ServiceCrashedError extends ApplicationError { }

@StatusCode(50303)
export class ServiceNodeResourceDrainError extends ApplicationError { }

@StatusCode(40104)
export class EmailUnverifiedError extends ApplicationError { }

@StatusCode(40201)
export class InsufficientCreditsError extends ApplicationError { }

@StatusCode(40202)
export class FreeFeatureLimitError extends ApplicationError { }

@StatusCode(40203)
export class InsufficientBalanceError extends ApplicationError { }

@StatusCode(40903)
export class LockConflictError extends ApplicationError { }

@StatusCode(40904)
export class BudgetExceededError extends ApplicationError { }

@StatusCode(45101)
export class HarmfulContentError extends ApplicationError { }

@StatusCode(45102)
export class SecurityCompromiseError extends ApplicationError { }

@StatusCode(41201)
export class BatchSizeTooLargeError extends ApplicationError { }


@StatusCode(42903)
export class RateLimitTriggeredError extends ApplicationError {

    @Prop({
        desc: 'Retry after seconds',
    })
    retryAfter?: number;

    @Prop({
        desc: 'Retry after date',
    })
    retryAfterDate?: Date;

    protected override get [RPC_TRANSFER_PROTOCOL_META_SYMBOL]() {
        const retryAfter = this.retryAfter || this.retryAfterDate;
        if (!retryAfter) {
            return super[RPC_TRANSFER_PROTOCOL_META_SYMBOL];
        }

        return _.merge(_.cloneDeep(super[RPC_TRANSFER_PROTOCOL_META_SYMBOL]), {
            headers: {
                'Retry-After': `${retryAfter instanceof Date ? dayjs(retryAfter).utc().format('ddd, DD MMM YYYY HH:mm:ss [GMT]') : retryAfter}`,
            }
        });
    }
}