@allmightypush/push-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/circuit-breaker/CircuitBreaker.js +84 -0
- package/dist/cjs/circuit-breaker/CircuitBreaker.js.map +1 -0
- package/dist/cjs/circuit-breaker/index.js +6 -0
- package/dist/cjs/circuit-breaker/index.js.map +1 -0
- package/dist/cjs/core/PushCore.js +307 -0
- package/dist/cjs/core/PushCore.js.map +1 -0
- package/dist/cjs/core/index.js +6 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/index.js +26 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/rate-limiter/TokenBucketRateLimiter.js +43 -0
- package/dist/cjs/rate-limiter/TokenBucketRateLimiter.js.map +1 -0
- package/dist/cjs/rate-limiter/index.js +6 -0
- package/dist/cjs/rate-limiter/index.js.map +1 -0
- package/dist/cjs/retry/calculateNextRetry.js +22 -0
- package/dist/cjs/retry/calculateNextRetry.js.map +1 -0
- package/dist/cjs/retry/index.js +8 -0
- package/dist/cjs/retry/index.js.map +1 -0
- package/dist/cjs/retry/shouldRetry.js +19 -0
- package/dist/cjs/retry/shouldRetry.js.map +1 -0
- package/dist/cjs/types/adapters.js +3 -0
- package/dist/cjs/types/adapters.js.map +1 -0
- package/dist/cjs/types/configuration.js +26 -0
- package/dist/cjs/types/configuration.js.map +1 -0
- package/dist/cjs/types/errors.js +55 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/index.js +23 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/notification.js +3 -0
- package/dist/cjs/types/notification.js.map +1 -0
- package/dist/cjs/types/results.js +3 -0
- package/dist/cjs/types/results.js.map +1 -0
- package/dist/cjs/types/subscription.js +3 -0
- package/dist/cjs/types/subscription.js.map +1 -0
- package/dist/cjs/vapid/generateVapidKeys.js +67 -0
- package/dist/cjs/vapid/generateVapidKeys.js.map +1 -0
- package/dist/cjs/vapid/index.js +19 -0
- package/dist/cjs/vapid/index.js.map +1 -0
- package/dist/cjs/vapid/validateVapidKeys.js +44 -0
- package/dist/cjs/vapid/validateVapidKeys.js.map +1 -0
- package/dist/cjs/worker/RetryWorker.js +151 -0
- package/dist/cjs/worker/RetryWorker.js.map +1 -0
- package/dist/cjs/worker/index.js +18 -0
- package/dist/cjs/worker/index.js.map +1 -0
- package/dist/esm/circuit-breaker/CircuitBreaker.js +80 -0
- package/dist/esm/circuit-breaker/CircuitBreaker.js.map +1 -0
- package/dist/esm/circuit-breaker/index.js +2 -0
- package/dist/esm/circuit-breaker/index.js.map +1 -0
- package/dist/esm/core/PushCore.js +303 -0
- package/dist/esm/core/PushCore.js.map +1 -0
- package/dist/esm/core/index.js +2 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/rate-limiter/TokenBucketRateLimiter.js +39 -0
- package/dist/esm/rate-limiter/TokenBucketRateLimiter.js.map +1 -0
- package/dist/esm/rate-limiter/index.js +2 -0
- package/dist/esm/rate-limiter/index.js.map +1 -0
- package/dist/esm/retry/calculateNextRetry.js +19 -0
- package/dist/esm/retry/calculateNextRetry.js.map +1 -0
- package/dist/esm/retry/index.js +3 -0
- package/dist/esm/retry/index.js.map +1 -0
- package/dist/esm/retry/shouldRetry.js +16 -0
- package/dist/esm/retry/shouldRetry.js.map +1 -0
- package/dist/esm/types/adapters.js +2 -0
- package/dist/esm/types/adapters.js.map +1 -0
- package/dist/esm/types/configuration.js +23 -0
- package/dist/esm/types/configuration.js.map +1 -0
- package/dist/esm/types/errors.js +45 -0
- package/dist/esm/types/errors.js.map +1 -0
- package/dist/esm/types/index.js +7 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/notification.js +2 -0
- package/dist/esm/types/notification.js.map +1 -0
- package/dist/esm/types/results.js +2 -0
- package/dist/esm/types/results.js.map +1 -0
- package/dist/esm/types/subscription.js +2 -0
- package/dist/esm/types/subscription.js.map +1 -0
- package/dist/esm/vapid/generateVapidKeys.js +31 -0
- package/dist/esm/vapid/generateVapidKeys.js.map +1 -0
- package/dist/esm/vapid/index.js +3 -0
- package/dist/esm/vapid/index.js.map +1 -0
- package/dist/esm/vapid/validateVapidKeys.js +41 -0
- package/dist/esm/vapid/validateVapidKeys.js.map +1 -0
- package/dist/esm/worker/RetryWorker.js +147 -0
- package/dist/esm/worker/RetryWorker.js.map +1 -0
- package/dist/esm/worker/index.js +2 -0
- package/dist/esm/worker/index.js.map +1 -0
- package/dist/types/circuit-breaker/CircuitBreaker.d.ts +18 -0
- package/dist/types/circuit-breaker/CircuitBreaker.d.ts.map +1 -0
- package/dist/types/circuit-breaker/index.d.ts +2 -0
- package/dist/types/circuit-breaker/index.d.ts.map +1 -0
- package/dist/types/core/PushCore.d.ts +23 -0
- package/dist/types/core/PushCore.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +2 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/rate-limiter/TokenBucketRateLimiter.d.ts +14 -0
- package/dist/types/rate-limiter/TokenBucketRateLimiter.d.ts.map +1 -0
- package/dist/types/rate-limiter/index.d.ts +2 -0
- package/dist/types/rate-limiter/index.d.ts.map +1 -0
- package/dist/types/retry/calculateNextRetry.d.ts +3 -0
- package/dist/types/retry/calculateNextRetry.d.ts.map +1 -0
- package/dist/types/retry/index.d.ts +3 -0
- package/dist/types/retry/index.d.ts.map +1 -0
- package/dist/types/retry/shouldRetry.d.ts +3 -0
- package/dist/types/retry/shouldRetry.d.ts.map +1 -0
- package/dist/types/types/adapters.d.ts +32 -0
- package/dist/types/types/adapters.d.ts.map +1 -0
- package/dist/types/types/configuration.d.ts +53 -0
- package/dist/types/types/configuration.d.ts.map +1 -0
- package/dist/types/types/errors.d.ts +27 -0
- package/dist/types/types/errors.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +7 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/notification.d.ts +21 -0
- package/dist/types/types/notification.d.ts.map +1 -0
- package/dist/types/types/results.d.ts +36 -0
- package/dist/types/types/results.d.ts.map +1 -0
- package/dist/types/types/subscription.d.ts +31 -0
- package/dist/types/types/subscription.d.ts.map +1 -0
- package/dist/types/vapid/generateVapidKeys.d.ts +3 -0
- package/dist/types/vapid/generateVapidKeys.d.ts.map +1 -0
- package/dist/types/vapid/index.d.ts +3 -0
- package/dist/types/vapid/index.d.ts.map +1 -0
- package/dist/types/vapid/validateVapidKeys.d.ts +3 -0
- package/dist/types/vapid/validateVapidKeys.d.ts.map +1 -0
- package/dist/types/worker/RetryWorker.d.ts +25 -0
- package/dist/types/worker/RetryWorker.d.ts.map +1 -0
- package/dist/types/worker/index.d.ts +2 -0
- package/dist/types/worker/index.d.ts.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ValidationError } from '../types/errors';
|
|
2
|
+
export function validateVapidKeys(keys) {
|
|
3
|
+
if (!keys.publicKey) {
|
|
4
|
+
throw new ValidationError('VAPID keys validation failed: publicKey is required', {
|
|
5
|
+
providedKeys: Object.keys(keys),
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
if (!keys.privateKey) {
|
|
9
|
+
throw new ValidationError('VAPID keys validation failed: privateKey is required', {
|
|
10
|
+
providedKeys: Object.keys(keys),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
if (typeof keys.publicKey !== 'string') {
|
|
14
|
+
throw new ValidationError('VAPID keys validation failed: publicKey must be a string', {
|
|
15
|
+
publicKeyType: typeof keys.publicKey,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
if (typeof keys.privateKey !== 'string') {
|
|
19
|
+
throw new ValidationError('VAPID keys validation failed: privateKey must be a string', {
|
|
20
|
+
privateKeyType: typeof keys.privateKey,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (keys.publicKey.trim().length === 0) {
|
|
24
|
+
throw new ValidationError('VAPID keys validation failed: publicKey cannot be empty');
|
|
25
|
+
}
|
|
26
|
+
if (keys.privateKey.trim().length === 0) {
|
|
27
|
+
throw new ValidationError('VAPID keys validation failed: privateKey cannot be empty');
|
|
28
|
+
}
|
|
29
|
+
const base64urlPattern = /^[A-Za-z0-9_-]+$/;
|
|
30
|
+
if (!base64urlPattern.test(keys.publicKey)) {
|
|
31
|
+
throw new ValidationError('VAPID keys validation failed: publicKey is not in valid base64url format', {
|
|
32
|
+
publicKey: keys.publicKey.substring(0, 20) + '...',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (!base64urlPattern.test(keys.privateKey)) {
|
|
36
|
+
throw new ValidationError('VAPID keys validation failed: privateKey is not in valid base64url format', {
|
|
37
|
+
privateKey: keys.privateKey.substring(0, 20) + '...',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=validateVapidKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateVapidKeys.js","sourceRoot":"","sources":["../../../src/vapid/validateVapidKeys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAelD,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IAExD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CAAC,qDAAqD,EAAE;YAC/E,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,IAAI,eAAe,CAAC,sDAAsD,EAAE;YAChF,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CAAC,0DAA0D,EAAE;YACpF,aAAa,EAAE,OAAO,IAAI,CAAC,SAAS;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,2DAA2D,EAAE;YACrF,cAAc,EAAE,OAAO,IAAI,CAAC,UAAU;SACvC,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CAAC,yDAAyD,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,0DAA0D,CAAC,CAAC;IACxF,CAAC;IAID,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;IAE5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,eAAe,CACvB,0EAA0E,EAC1E;YACE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;SACnD,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,2EAA2E,EAC3E;YACE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;SACrD,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { shouldRetry } from '../retry/shouldRetry';
|
|
2
|
+
import { calculateNextRetry } from '../retry/calculateNextRetry';
|
|
3
|
+
const DEFAULT_WORKER_OPTIONS = {
|
|
4
|
+
pollInterval: 5000,
|
|
5
|
+
concurrency: 10,
|
|
6
|
+
batchSize: 50,
|
|
7
|
+
errorBackoff: 10000,
|
|
8
|
+
};
|
|
9
|
+
export class RetryWorker {
|
|
10
|
+
constructor(storage, provider, retryPolicy, options, metricsAdapter) {
|
|
11
|
+
this.storage = storage;
|
|
12
|
+
this.provider = provider;
|
|
13
|
+
this.retryPolicy = retryPolicy;
|
|
14
|
+
this.metricsAdapter = metricsAdapter;
|
|
15
|
+
this.running = false;
|
|
16
|
+
this.processing = new Set();
|
|
17
|
+
this.options = {
|
|
18
|
+
...DEFAULT_WORKER_OPTIONS,
|
|
19
|
+
...options,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async start() {
|
|
23
|
+
if (this.running) {
|
|
24
|
+
throw new Error('Worker is already running');
|
|
25
|
+
}
|
|
26
|
+
this.running = true;
|
|
27
|
+
this.emitMetric('worker.started');
|
|
28
|
+
while (this.running) {
|
|
29
|
+
try {
|
|
30
|
+
const retries = await this.storage.dequeueRetry(this.options.batchSize);
|
|
31
|
+
if (retries.length > 0) {
|
|
32
|
+
this.emitMetric('worker.dequeued', retries.length);
|
|
33
|
+
await this.processRetriesWithConcurrency(retries);
|
|
34
|
+
}
|
|
35
|
+
if (retries.length === 0 || this.running) {
|
|
36
|
+
await this.sleep(this.options.pollInterval);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('Worker error:', error);
|
|
41
|
+
this.emitMetric('worker.error');
|
|
42
|
+
if (this.running) {
|
|
43
|
+
await this.sleep(this.options.errorBackoff);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
this.emitMetric('worker.stopped');
|
|
48
|
+
}
|
|
49
|
+
async stop() {
|
|
50
|
+
if (!this.running) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.running = false;
|
|
54
|
+
while (this.processing.size > 0) {
|
|
55
|
+
await this.sleep(100);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
isRunning() {
|
|
59
|
+
return this.running;
|
|
60
|
+
}
|
|
61
|
+
async processRetriesWithConcurrency(retries) {
|
|
62
|
+
const chunks = [];
|
|
63
|
+
for (let i = 0; i < retries.length; i += this.options.concurrency) {
|
|
64
|
+
chunks.push(retries.slice(i, i + this.options.concurrency));
|
|
65
|
+
}
|
|
66
|
+
for (const chunk of chunks) {
|
|
67
|
+
if (!this.running)
|
|
68
|
+
break;
|
|
69
|
+
await Promise.all(chunk.map(retry => this.processRetry(retry)));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async processRetry(retry) {
|
|
73
|
+
this.processing.add(retry.id);
|
|
74
|
+
try {
|
|
75
|
+
this.emitMetric('worker.retry.processing');
|
|
76
|
+
const subscription = await this.storage.getSubscriptionById(retry.subscriptionId);
|
|
77
|
+
if (!subscription) {
|
|
78
|
+
await this.storage.ackRetry(retry.id);
|
|
79
|
+
this.emitMetric('worker.retry.subscription_not_found');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const result = await this.provider.send(subscription, retry.payload, {});
|
|
83
|
+
if (result.success) {
|
|
84
|
+
await this.storage.ackRetry(retry.id);
|
|
85
|
+
await this.storage.updateSubscription(subscription.id, {
|
|
86
|
+
lastUsedAt: new Date(),
|
|
87
|
+
failedCount: 0,
|
|
88
|
+
});
|
|
89
|
+
this.emitMetric('worker.retry.success');
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const shouldRetryAgain = shouldRetry(result, retry.attempt, this.retryPolicy.maxRetries);
|
|
93
|
+
if (shouldRetryAgain) {
|
|
94
|
+
const nextRetryAt = calculateNextRetry(retry.attempt + 1, this.retryPolicy, result.retryAfter);
|
|
95
|
+
await this.storage.enqueueRetry({
|
|
96
|
+
...retry,
|
|
97
|
+
attempt: retry.attempt + 1,
|
|
98
|
+
nextRetryAt,
|
|
99
|
+
lastError: result.error?.message,
|
|
100
|
+
});
|
|
101
|
+
await this.storage.ackRetry(retry.id);
|
|
102
|
+
this.emitMetric('worker.retry.re_enqueued');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
await this.storage.ackRetry(retry.id);
|
|
106
|
+
await this.storage.updateSubscription(subscription.id, {
|
|
107
|
+
status: 'expired',
|
|
108
|
+
failedCount: subscription.failedCount + 1,
|
|
109
|
+
});
|
|
110
|
+
this.emitMetric('worker.retry.max_retries_exceeded');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error('Error processing retry:', error);
|
|
116
|
+
this.emitMetric('worker.retry.error');
|
|
117
|
+
try {
|
|
118
|
+
await this.storage.ackRetry(retry.id);
|
|
119
|
+
}
|
|
120
|
+
catch (ackError) {
|
|
121
|
+
console.error('Error acknowledging retry:', ackError);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
this.processing.delete(retry.id);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
sleep(ms) {
|
|
129
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
130
|
+
}
|
|
131
|
+
emitMetric(metric, value) {
|
|
132
|
+
if (this.metricsAdapter) {
|
|
133
|
+
try {
|
|
134
|
+
if (value !== undefined) {
|
|
135
|
+
this.metricsAdapter.gauge(metric, value);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.metricsAdapter.increment(metric);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error(`Error emitting metric ${metric}:`, error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=RetryWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetryWorker.js","sourceRoot":"","sources":["../../../src/worker/RetryWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/worker/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CircuitBreakerConfig } from '../types/configuration';
|
|
2
|
+
export type CircuitBreakerState = 'closed' | 'open' | 'half-open';
|
|
3
|
+
export declare class CircuitBreaker {
|
|
4
|
+
private state;
|
|
5
|
+
private failureCount;
|
|
6
|
+
private successCount;
|
|
7
|
+
private lastFailureTime?;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config?: Partial<CircuitBreakerConfig>);
|
|
10
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
11
|
+
getState(): CircuitBreakerState;
|
|
12
|
+
getFailureCount(): number;
|
|
13
|
+
reset(): void;
|
|
14
|
+
private onSuccess;
|
|
15
|
+
private onFailure;
|
|
16
|
+
private shouldAttemptReset;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CircuitBreaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircuitBreaker.d.ts","sourceRoot":"","sources":["../../../src/circuit-breaker/CircuitBreaker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAKnE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAqBlE,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAC,CAAO;IAC/B,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAW5C,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA4BlD,QAAQ,IAAI,mBAAmB;IAO/B,eAAe,IAAI,MAAM;IAOzB,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,kBAAkB;CAQ3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/circuit-breaker/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PushConfiguration } from '../types/configuration';
|
|
2
|
+
import type { Subscription } from '../types/subscription';
|
|
3
|
+
import type { NotificationPayload, SendOptions } from '../types/notification';
|
|
4
|
+
import type { SendResult, BatchResult } from '../types/results';
|
|
5
|
+
export declare class PushCore {
|
|
6
|
+
private config?;
|
|
7
|
+
private circuitBreaker?;
|
|
8
|
+
private isShuttingDown;
|
|
9
|
+
private inFlightOperations;
|
|
10
|
+
configure(options: Partial<PushConfiguration>): void;
|
|
11
|
+
getConfiguration(): PushConfiguration | undefined;
|
|
12
|
+
private validateConfiguration;
|
|
13
|
+
private getProviderAdapter;
|
|
14
|
+
private ensureNotShuttingDown;
|
|
15
|
+
private trackOperation;
|
|
16
|
+
private emitHook;
|
|
17
|
+
private emitMetric;
|
|
18
|
+
verifySubscription(subscription: Subscription): Promise<void>;
|
|
19
|
+
sendNotification(subscription: Subscription, payload: NotificationPayload, options?: SendOptions): Promise<SendResult>;
|
|
20
|
+
batchSend(subscriptions: Subscription[], payload: NotificationPayload, options?: SendOptions): Promise<BatchResult>;
|
|
21
|
+
shutdown(timeout?: number): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=PushCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushCore.d.ts","sourceRoot":"","sources":["../../../src/core/PushCore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmChE,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,kBAAkB,CAAgC;IAO1D,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAiCpD,gBAAgB,IAAI,iBAAiB,GAAG,SAAS;IASjD,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,cAAc;YAcR,QAAQ;IAmBtB,OAAO,CAAC,UAAU;IA2BZ,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C7D,gBAAgB,CACpB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;IAuIhB,SAAS,CACb,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC;IA8EjB,QAAQ,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './types';
|
|
2
|
+
export * from './vapid';
|
|
3
|
+
export * from './core';
|
|
4
|
+
export * from './retry';
|
|
5
|
+
export * from './circuit-breaker';
|
|
6
|
+
export * from './rate-limiter';
|
|
7
|
+
export * from './worker';
|
|
8
|
+
export declare const version = "1.0.0";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,QAAQ,CAAC;AAGvB,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,UAAU,CAAC;AAGzB,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RateLimiter } from '../types/adapters';
|
|
2
|
+
export declare class TokenBucketRateLimiter implements RateLimiter {
|
|
3
|
+
private capacity;
|
|
4
|
+
private refillRate;
|
|
5
|
+
private tokens;
|
|
6
|
+
private lastRefill;
|
|
7
|
+
constructor(capacity: number, refillRate: number);
|
|
8
|
+
acquire(tokens?: number): Promise<void>;
|
|
9
|
+
tryAcquire(tokens?: number): boolean;
|
|
10
|
+
getAvailableTokens(): number;
|
|
11
|
+
private refill;
|
|
12
|
+
private sleep;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=TokenBucketRateLimiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenBucketRateLimiter.d.ts","sourceRoot":"","sources":["../../../src/rate-limiter/TokenBucketRateLimiter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWrD,qBAAa,sBAAuB,YAAW,WAAW;IAWtD,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAXpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAO;gBASf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;IAatB,OAAO,CAAC,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhD,UAAU,CAAC,MAAM,GAAE,MAAU,GAAG,OAAO;IAgBvC,kBAAkB,IAAI,MAAM;IAQ5B,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rate-limiter/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateNextRetry.d.ts","sourceRoot":"","sources":["../../../src/retry/calculateNextRetry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAe1D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CA8BN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/retry/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shouldRetry.d.ts","sourceRoot":"","sources":["../../../src/retry/shouldRetry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiBvD,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAuBT"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Subscription, CreateSubscriptionData, SubscriptionFilter } from './subscription';
|
|
2
|
+
import { NotificationPayload, SendOptions } from './notification';
|
|
3
|
+
import { ProviderResult, RetryEntry, QueueStats } from './results';
|
|
4
|
+
export interface StorageAdapter {
|
|
5
|
+
createSubscription(data: CreateSubscriptionData): Promise<Subscription>;
|
|
6
|
+
getSubscriptionById(id: string): Promise<Subscription | null>;
|
|
7
|
+
findSubscriptions(filter: SubscriptionFilter): Promise<Subscription[]>;
|
|
8
|
+
updateSubscription(id: string, updates: Partial<Subscription>): Promise<Subscription>;
|
|
9
|
+
deleteSubscription(id: string): Promise<void>;
|
|
10
|
+
enqueueRetry(retry: RetryEntry): Promise<void>;
|
|
11
|
+
dequeueRetry(limit: number): Promise<RetryEntry[]>;
|
|
12
|
+
ackRetry(retryId: string): Promise<void>;
|
|
13
|
+
getQueueStats(): Promise<QueueStats>;
|
|
14
|
+
migrate?(): Promise<void>;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export interface ProviderAdapter {
|
|
18
|
+
send(subscription: Subscription, payload: NotificationPayload, options: SendOptions): Promise<ProviderResult>;
|
|
19
|
+
getName(): string;
|
|
20
|
+
}
|
|
21
|
+
export interface MetricsAdapter {
|
|
22
|
+
increment(metric: string, tags?: Record<string, string>): void;
|
|
23
|
+
gauge(metric: string, value: number, tags?: Record<string, string>): void;
|
|
24
|
+
timing(metric: string, duration: number, tags?: Record<string, string>): void;
|
|
25
|
+
histogram(metric: string, value: number, tags?: Record<string, string>): void;
|
|
26
|
+
}
|
|
27
|
+
export interface RateLimiter {
|
|
28
|
+
acquire(tokens?: number): Promise<void>;
|
|
29
|
+
tryAcquire(tokens?: number): boolean;
|
|
30
|
+
getAvailableTokens(): number;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/types/adapters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKnE,MAAM,WAAW,cAAc;IAQ7B,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAOxE,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAO9D,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAQvE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAMtF,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAQ9C,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO/C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAMnD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAMzC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAOrC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAO1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAKD,MAAM,WAAW,eAAe;IAQ9B,IAAI,CACF,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAM3B,OAAO,IAAI,MAAM,CAAC;CACnB;AAKD,MAAM,WAAW,cAAc;IAM7B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAQ/D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAQ1E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAQ9E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC/E;AAKD,MAAM,WAAW,WAAW;IAM1B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOxC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAMrC,kBAAkB,IAAI,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { StorageAdapter, ProviderAdapter, MetricsAdapter, RateLimiter } from './adapters';
|
|
2
|
+
import { Subscription } from './subscription';
|
|
3
|
+
import { NotificationPayload } from './notification';
|
|
4
|
+
import { ProviderResult } from './results';
|
|
5
|
+
export interface VapidKeys {
|
|
6
|
+
publicKey: string;
|
|
7
|
+
privateKey: string;
|
|
8
|
+
subject?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface RetryPolicy {
|
|
11
|
+
maxRetries: number;
|
|
12
|
+
baseDelay: number;
|
|
13
|
+
backoffFactor: number;
|
|
14
|
+
maxDelay: number;
|
|
15
|
+
jitter: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface CircuitBreakerConfig {
|
|
18
|
+
failureThreshold: number;
|
|
19
|
+
resetTimeout: number;
|
|
20
|
+
halfOpenMaxAttempts: number;
|
|
21
|
+
}
|
|
22
|
+
export interface BatchConfig {
|
|
23
|
+
batchSize: number;
|
|
24
|
+
concurrency: number;
|
|
25
|
+
}
|
|
26
|
+
export interface WorkerOptions {
|
|
27
|
+
pollInterval?: number;
|
|
28
|
+
concurrency?: number;
|
|
29
|
+
batchSize?: number;
|
|
30
|
+
errorBackoff?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface LifecycleHooks {
|
|
33
|
+
onSend?: (subscription: Subscription, payload: NotificationPayload) => void | Promise<void>;
|
|
34
|
+
onSuccess?: (subscription: Subscription, result: ProviderResult) => void | Promise<void>;
|
|
35
|
+
onFailure?: (subscription: Subscription, error: Error) => void | Promise<void>;
|
|
36
|
+
onRetry?: (subscription: Subscription, attempt: number) => void | Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export interface PushConfiguration {
|
|
39
|
+
vapidKeys: VapidKeys;
|
|
40
|
+
storageAdapter: StorageAdapter;
|
|
41
|
+
providerAdapter?: ProviderAdapter;
|
|
42
|
+
retryPolicy?: Partial<RetryPolicy>;
|
|
43
|
+
rateLimiter?: RateLimiter;
|
|
44
|
+
metricsAdapter?: MetricsAdapter;
|
|
45
|
+
circuitBreaker?: Partial<CircuitBreakerConfig>;
|
|
46
|
+
batchConfig?: Partial<BatchConfig>;
|
|
47
|
+
lifecycleHooks?: LifecycleHooks;
|
|
48
|
+
}
|
|
49
|
+
export declare const DEFAULT_RETRY_POLICY: RetryPolicy;
|
|
50
|
+
export declare const DEFAULT_CIRCUIT_BREAKER_CONFIG: CircuitBreakerConfig;
|
|
51
|
+
export declare const DEFAULT_BATCH_CONFIG: BatchConfig;
|
|
52
|
+
export declare const DEFAULT_WORKER_OPTIONS: Required<WorkerOptions>;
|
|
53
|
+
//# sourceMappingURL=configuration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../src/types/configuration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAK3C,MAAM,WAAW,SAAS;IAExB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,WAAW;IAE1B,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,MAAM,CAAC;IAElB,aAAa,EAAE,MAAM,CAAC;IAEtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAKD,MAAM,WAAW,oBAAoB;IAEnC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,YAAY,EAAE,MAAM,CAAC;IAErB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAKD,MAAM,WAAW,WAAW;IAE1B,SAAS,EAAE,MAAM,CAAC;IAElB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,aAAa;IAE5B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,MAAM,WAAW,cAAc;IAM7B,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO5F,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOzF,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAO/E,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAKD,MAAM,WAAW,iBAAiB;IAEhC,SAAS,EAAE,SAAS,CAAC;IAGrB,cAAc,EAAE,cAAc,CAAC;IAG/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAGnC,WAAW,CAAC,EAAE,WAAW,CAAC;IAG1B,cAAc,CAAC,EAAE,cAAc,CAAC;IAGhC,cAAc,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAG/C,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAGnC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAKD,eAAO,MAAM,oBAAoB,EAAE,WAMlC,CAAC;AAKF,eAAO,MAAM,8BAA8B,EAAE,oBAI5C,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,WAGlC,CAAC;AAKF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,aAAa,CAK1D,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare class PushError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
4
|
+
constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
|
|
5
|
+
}
|
|
6
|
+
export declare class ConfigurationError extends PushError {
|
|
7
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
8
|
+
}
|
|
9
|
+
export declare class ValidationError extends PushError {
|
|
10
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
11
|
+
}
|
|
12
|
+
export declare class ProviderError extends PushError {
|
|
13
|
+
readonly statusCode?: number | undefined;
|
|
14
|
+
readonly shouldRetry: boolean;
|
|
15
|
+
constructor(message: string, statusCode?: number | undefined, shouldRetry?: boolean, details?: Record<string, unknown>);
|
|
16
|
+
}
|
|
17
|
+
export declare class StorageError extends PushError {
|
|
18
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
19
|
+
}
|
|
20
|
+
export declare class CircuitBreakerOpenError extends PushError {
|
|
21
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
22
|
+
}
|
|
23
|
+
export declare class RateLimitError extends PushError {
|
|
24
|
+
readonly retryAfter?: number | undefined;
|
|
25
|
+
constructor(message: string, retryAfter?: number | undefined, details?: Record<string, unknown>);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/types/errors.ts"],"names":[],"mappings":"AAOA,qBAAa,SAAU,SAAQ,KAAK;aAShB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CASpD;AAKD,qBAAa,kBAAmB,SAAQ,SAAS;gBAMnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAKD,qBAAa,eAAgB,SAAQ,SAAS;gBAMhC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAKD,qBAAa,aAAc,SAAQ,SAAS;aAUxB,UAAU,CAAC,EAAE,MAAM;aACnB,WAAW,EAAE,OAAO;gBAFpC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,WAAW,GAAE,OAAe,EAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIpC;AAKD,qBAAa,YAAa,SAAQ,SAAS;gBAM7B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAKD,qBAAa,uBAAwB,SAAQ,SAAS;gBAMxC,OAAO,GAAE,MAAkC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG3F;AAKD,qBAAa,cAAe,SAAQ,SAAS;aASzB,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAIpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface NotificationAction {
|
|
2
|
+
action: string;
|
|
3
|
+
title: string;
|
|
4
|
+
icon?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface NotificationPayload {
|
|
7
|
+
title: string;
|
|
8
|
+
body: string;
|
|
9
|
+
icon?: string;
|
|
10
|
+
badge?: string;
|
|
11
|
+
data?: Record<string, unknown>;
|
|
12
|
+
actions?: NotificationAction[];
|
|
13
|
+
tag?: string;
|
|
14
|
+
requireInteraction?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface SendOptions {
|
|
17
|
+
ttl?: number;
|
|
18
|
+
urgency?: 'very-low' | 'low' | 'normal' | 'high';
|
|
19
|
+
topic?: string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../src/types/notification.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IAEjC,MAAM,EAAE,MAAM,CAAC;IAEf,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAKD,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAE/B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAKD,MAAM,WAAW,WAAW;IAE1B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAEjD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { NotificationPayload } from './notification';
|
|
2
|
+
export interface ProviderResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
statusCode?: number;
|
|
5
|
+
error?: Error;
|
|
6
|
+
shouldRetry: boolean;
|
|
7
|
+
retryAfter?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface SendResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
subscriptionId: string;
|
|
12
|
+
error?: Error;
|
|
13
|
+
enqueued?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface BatchResult {
|
|
16
|
+
total: number;
|
|
17
|
+
success: number;
|
|
18
|
+
failed: number;
|
|
19
|
+
retried: number;
|
|
20
|
+
results: SendResult[];
|
|
21
|
+
}
|
|
22
|
+
export interface RetryEntry {
|
|
23
|
+
id: string;
|
|
24
|
+
subscriptionId: string;
|
|
25
|
+
payload: NotificationPayload;
|
|
26
|
+
attempt: number;
|
|
27
|
+
nextRetryAt: Date;
|
|
28
|
+
lastError?: string;
|
|
29
|
+
createdAt: Date;
|
|
30
|
+
}
|
|
31
|
+
export interface QueueStats {
|
|
32
|
+
pending: number;
|
|
33
|
+
processing: number;
|
|
34
|
+
failed: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/types/results.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKrD,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,OAAO,CAAC;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,UAAU;IAEzB,OAAO,EAAE,OAAO,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IAEvB,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,WAAW;IAE1B,KAAK,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAKD,MAAM,WAAW,UAAU;IAEzB,EAAE,EAAE,MAAM,CAAC;IAEX,cAAc,EAAE,MAAM,CAAC;IAEvB,OAAO,EAAE,mBAAmB,CAAC;IAE7B,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,IAAI,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAKD,MAAM,WAAW,UAAU;IAEzB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type SubscriptionStatus = 'active' | 'blocked' | 'expired';
|
|
2
|
+
export interface SubscriptionKeys {
|
|
3
|
+
p256dh: string;
|
|
4
|
+
auth: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Subscription {
|
|
7
|
+
id: string;
|
|
8
|
+
endpoint: string;
|
|
9
|
+
keys: SubscriptionKeys;
|
|
10
|
+
userId?: string;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
updatedAt: Date;
|
|
13
|
+
lastUsedAt?: Date;
|
|
14
|
+
failedCount: number;
|
|
15
|
+
status: SubscriptionStatus;
|
|
16
|
+
expiresAt?: Date;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface CreateSubscriptionData {
|
|
20
|
+
endpoint: string;
|
|
21
|
+
keys: SubscriptionKeys;
|
|
22
|
+
userId?: string;
|
|
23
|
+
expiresAt?: Date;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface SubscriptionFilter {
|
|
27
|
+
userId?: string;
|
|
28
|
+
status?: SubscriptionStatus;
|
|
29
|
+
ids?: string[];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../../src/types/subscription.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAKlE,MAAM,WAAW,gBAAgB;IAE/B,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,MAAM,WAAW,YAAY;IAE3B,EAAE,EAAE,MAAM,CAAC;IAEX,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,gBAAgB,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,EAAE,IAAI,CAAC;IAEhB,UAAU,CAAC,EAAE,IAAI,CAAC;IAElB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,kBAAkB,CAAC;IAE3B,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,sBAAsB;IAErC,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,gBAAgB,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,kBAAkB;IAEjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAE5B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateVapidKeys.d.ts","sourceRoot":"","sources":["../../../src/vapid/generateVapidKeys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAwBnD,wBAAgB,iBAAiB,IAAI,SAAS,CAqC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vapid/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateVapidKeys.d.ts","sourceRoot":"","sources":["../../../src/vapid/validateVapidKeys.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAgBnD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CA0DhE"}
|