@daiso-tech/core 0.46.0 → 0.47.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/cache/contracts/cache-adapter.contract.d.ts +1 -1
- package/dist/cache/contracts/cache.events.d.ts +1 -1
- package/dist/cache/contracts/database-cache-adapter.contract.d.ts +1 -1
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.d.ts +11 -2
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js +8 -8
- package/dist/cache/implementations/adapters/kysely-cache-adapter/kysely-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/database-cache-adapter.d.ts +1 -1
- package/dist/cache/implementations/derivables/cache/database-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/derivables/cache/is-database-cache-adapter.js.map +1 -1
- package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.js +8 -4
- package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/kysely-circuit-breaker-storage-adapter/kysely-circuit-breaker-storage-adapter.d.ts +11 -0
- package/dist/circuit-breaker/implementations/adapters/kysely-circuit-breaker-storage-adapter/kysely-circuit-breaker-storage-adapter.js +13 -3
- package/dist/circuit-breaker/implementations/adapters/kysely-circuit-breaker-storage-adapter/kysely-circuit-breaker-storage-adapter.js.map +1 -1
- package/dist/circuit-breaker/implementations/adapters/mongodb-circuit-breaker-storage-adapter/mongodb-circuit-breaker-storage-adapter.d.ts +6 -0
- package/dist/circuit-breaker/implementations/adapters/mongodb-circuit-breaker-storage-adapter/mongodb-circuit-breaker-storage-adapter.js +14 -2
- package/dist/circuit-breaker/implementations/adapters/mongodb-circuit-breaker-storage-adapter/mongodb-circuit-breaker-storage-adapter.js.map +1 -1
- package/dist/circuit-breaker/implementations/policies/sampling-breaker/sampling-breaker.d.ts +1 -1
- package/dist/collection/contracts/async-collection.contract.d.ts +1 -1
- package/dist/collection/contracts/collection.contract.d.ts +2 -2
- package/dist/collection/implementations/async-iterable-collection/_shared/async-chunk-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-chunk-while-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-partion-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/_shared/async-split-iterable.js.map +1 -1
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.d.ts +1 -1
- package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/chunk-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/chunk-while-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/partion-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/_shared/split-iterable.js.map +1 -1
- package/dist/collection/implementations/iterable-collection/iterable-collection.d.ts +1 -1
- package/dist/collection/implementations/list-collection/list-collection.d.ts +1 -1
- package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
- package/dist/hooks/async-hooks.d.ts +9 -11
- package/dist/hooks/hooks.d.ts +5 -5
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.d.ts +11 -0
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js +18 -14
- package/dist/lock/implementations/adapters/kysely-lock-adapter/kysely-lock-adapter.js.map +1 -1
- package/dist/namespace/implementations/namespace.d.ts +1 -1
- package/dist/rate-limiter/implementations/adapters/kysely-rate-limiter-storage-adapter/kysely-rate-limiter-storage-adapter.d.ts +11 -0
- package/dist/rate-limiter/implementations/adapters/kysely-rate-limiter-storage-adapter/kysely-rate-limiter-storage-adapter.js +13 -3
- package/dist/rate-limiter/implementations/adapters/kysely-rate-limiter-storage-adapter/kysely-rate-limiter-storage-adapter.js.map +1 -1
- package/dist/rate-limiter/implementations/adapters/mongodb-rate-limiter-storage-adapter/mongodb-rate-limiter-storage-adapter.d.ts +6 -0
- package/dist/rate-limiter/implementations/adapters/mongodb-rate-limiter-storage-adapter/mongodb-rate-limiter-storage-adapter.js +14 -2
- package/dist/rate-limiter/implementations/adapters/mongodb-rate-limiter-storage-adapter/mongodb-rate-limiter-storage-adapter.js.map +1 -1
- package/dist/resilience/middlewares/dynamic/dynamic.middleware.d.ts +1 -1
- package/dist/resilience/middlewares/fallback/fallback.middleware.d.ts +1 -1
- package/dist/resilience/middlewares/fallback/fallback.types.d.ts +4 -4
- package/dist/resilience/middlewares/observe/observe.middleware.d.ts +1 -1
- package/dist/resilience/middlewares/observe/observe.types.d.ts +7 -7
- package/dist/resilience/middlewares/retry/retry.middleware.d.ts +1 -1
- package/dist/resilience/middlewares/retry/retry.middleware.js.map +1 -1
- package/dist/resilience/middlewares/retry/retry.types.d.ts +6 -6
- package/dist/resilience/middlewares/timeout/timeout.middleware.d.ts +1 -1
- package/dist/resilience/middlewares/timeout/timeout.type.d.ts +4 -4
- package/dist/resilience/resilience.errors.d.ts +1 -1
- package/dist/resilience/resilience.errors.js.map +1 -1
- package/dist/semaphore/contracts/database-semaphore-adapter.contract.d.ts +2 -2
- package/dist/semaphore/contracts/semaphore-state.contract.d.ts +3 -3
- package/dist/semaphore/implementations/adapters/kysely-semaphore-adapter/kysely-semaphore-adapter.d.ts +12 -1
- package/dist/semaphore/implementations/adapters/kysely-semaphore-adapter/kysely-semaphore-adapter.js +18 -14
- package/dist/semaphore/implementations/adapters/kysely-semaphore-adapter/kysely-semaphore-adapter.js.map +1 -1
- package/dist/semaphore/implementations/test-utilities/database-semaphore-adapter.test-suite.js.map +1 -1
- package/dist/serde/contracts/flexible-serde.contract.d.ts +1 -1
- package/dist/shared-lock/contracts/database-shared-lock-adapter.contract.d.ts +2 -2
- package/dist/shared-lock/contracts/shared-lock-state.contract.d.ts +3 -3
- package/dist/shared-lock/implementations/adapters/kysely-shared-lock-adapter/kysely-shared-lock-adapter.d.ts +11 -0
- package/dist/shared-lock/implementations/adapters/kysely-shared-lock-adapter/kysely-shared-lock-adapter.js +16 -6
- package/dist/shared-lock/implementations/adapters/kysely-shared-lock-adapter/kysely-shared-lock-adapter.js.map +1 -1
- package/dist/shared-lock/implementations/test-utilities/database-shared-lock-adapter.test-suite.js.map +1 -1
- package/dist/task/implementations/task.d.ts +9 -9
- package/dist/task/implementations/task.js.map +1 -1
- package/dist/utilities/contracts/sqlite-database.contract.d.ts +1 -1
- package/dist/utilities/functions/invokable.d.ts +9 -9
- package/dist/utilities/functions/invokable.js.map +1 -1
- package/dist/utilities/functions/resolve-one-or-more.d.ts +1 -1
- package/dist/utilities/types/any-class.type.d.ts +1 -1
- package/dist/utilities/types/none-func.type.d.ts +1 -1
- package/package.json +1 -1
|
@@ -42,6 +42,15 @@ export type KyselyRateLimiterStorageAdapterSettings = {
|
|
|
42
42
|
* @default true
|
|
43
43
|
*/
|
|
44
44
|
shouldRemoveExpiredKeys?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* @default
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { Transaction } from "kysely"
|
|
49
|
+
*
|
|
50
|
+
* !(settings.kysely instanceof Transaction)
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
enableTransactions?: boolean;
|
|
45
54
|
};
|
|
46
55
|
/**
|
|
47
56
|
* IMPORT_PATH: `"@daiso-tech/core/rate-limiter/kysely-rate-limiter-storage-adapter"`
|
|
@@ -53,6 +62,7 @@ export declare class KyselyRateLimiterStorageAdapter<TType> implements IRateLimi
|
|
|
53
62
|
private readonly expiredKeysRemovalInterval;
|
|
54
63
|
private readonly shouldRemoveExpiredKeys;
|
|
55
64
|
private intervalId;
|
|
65
|
+
private readonly enableTransactions;
|
|
56
66
|
/**
|
|
57
67
|
* @example
|
|
58
68
|
* ```ts
|
|
@@ -76,6 +86,7 @@ export declare class KyselyRateLimiterStorageAdapter<TType> implements IRateLimi
|
|
|
76
86
|
* ```
|
|
77
87
|
*/
|
|
78
88
|
constructor(settings: KyselyRateLimiterStorageAdapterSettings);
|
|
89
|
+
private _transaction;
|
|
79
90
|
/**
|
|
80
91
|
* Removes all related rate limiter tables and their rows.
|
|
81
92
|
* Note all rate limiter data will be removed.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module RateLimiter
|
|
3
3
|
*/
|
|
4
|
-
import { MysqlAdapter } from "kysely";
|
|
4
|
+
import { MysqlAdapter, Transaction } from "kysely";
|
|
5
5
|
import {} from "../../../../rate-limiter/contracts/_module.js";
|
|
6
6
|
import {} from "../../../../serde/contracts/_module.js";
|
|
7
7
|
import {} from "../../../../time-span/contracts/_module.js";
|
|
@@ -73,6 +73,7 @@ export class KyselyRateLimiterStorageAdapter {
|
|
|
73
73
|
expiredKeysRemovalInterval;
|
|
74
74
|
shouldRemoveExpiredKeys;
|
|
75
75
|
intervalId = null;
|
|
76
|
+
enableTransactions;
|
|
76
77
|
/**
|
|
77
78
|
* @example
|
|
78
79
|
* ```ts
|
|
@@ -96,11 +97,20 @@ export class KyselyRateLimiterStorageAdapter {
|
|
|
96
97
|
* ```
|
|
97
98
|
*/
|
|
98
99
|
constructor(settings) {
|
|
99
|
-
const { kysely, serde, expiredKeysRemovalInterval = TimeSpan.fromMinutes(1), shouldRemoveExpiredKeys = true, } = settings;
|
|
100
|
+
const { kysely, serde, expiredKeysRemovalInterval = TimeSpan.fromMinutes(1), shouldRemoveExpiredKeys = true, enableTransactions = !(settings.kysely instanceof Transaction), } = settings;
|
|
100
101
|
this.expiredKeysRemovalInterval = TimeSpan.fromTimeSpan(expiredKeysRemovalInterval);
|
|
101
102
|
this.shouldRemoveExpiredKeys = shouldRemoveExpiredKeys;
|
|
102
103
|
this.kysely = kysely;
|
|
103
104
|
this.serde = serde;
|
|
105
|
+
this.enableTransactions = enableTransactions;
|
|
106
|
+
}
|
|
107
|
+
_transaction(trxFn) {
|
|
108
|
+
if (this.enableTransactions) {
|
|
109
|
+
return this.kysely.transaction().execute(async (trx) => {
|
|
110
|
+
return await trxFn(trx);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return trxFn(this.kysely);
|
|
104
114
|
}
|
|
105
115
|
/**
|
|
106
116
|
* Removes all related rate limiter tables and their rows.
|
|
@@ -169,7 +179,7 @@ export class KyselyRateLimiterStorageAdapter {
|
|
|
169
179
|
.execute();
|
|
170
180
|
}
|
|
171
181
|
async transaction(fn) {
|
|
172
|
-
return await this.
|
|
182
|
+
return await this._transaction(async (trx) => {
|
|
173
183
|
return await fn(new KyselyRateLimiterStorageAdapterTransaction(trx, this.serde));
|
|
174
184
|
});
|
|
175
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-rate-limiter-storage-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/kysely-rate-limiter-storage-adapter/kysely-rate-limiter-storage-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAe,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"kysely-rate-limiter-storage-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/kysely-rate-limiter-storage-adapter/kysely-rate-limiter-storage-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,QAAQ,CAAC;AAEhE,OAAO,EAIN,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAe,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAkB,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAKN,MAAM,wBAAwB,CAAC;AAuBhC;;GAEG;AACH,KAAK,UAAU,IAAI,CACf,MAA8C,EAC9C,KAAqB,EACrB,GAAW;IAEX,MAAM,GAAG,GAAG,MAAM,MAAM;SACnB,UAAU,CAAC,aAAa,CAAC;SACzB,MAAM,CAAC,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;SACvD,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,CAAC;SAClC,gBAAgB,EAAE,CAAC;IACxB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO;QACH,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QACnC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAC/C,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,0CAA0C;IAMvB;IACA;IAJJ,OAAO,CAAU;IAElC,YACqB,MAA8C,EAC9C,KAAqB;QADrB,WAAM,GAAN,MAAM,CAAwC;QAC9C,UAAK,GAAL,KAAK,CAAgB;QAEtC,IAAI,CAAC,OAAO;YACR,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,YAAY,YAAY,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAY,EAAE,UAAgB;QACpD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,MAAM;aACZ,UAAU,CAAC,aAAa,CAAC;aACzB,MAAM,CAAC;YACJ,GAAG;YACH,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,cAAc;SAC7B,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CACvB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CACjB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;YACzB,GAAG;YACH,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,cAAc;SAC7B,CAAC,CACL,CACJ;aACA,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CACtB,EAAE,CAAC,oBAAoB,CAAC;YACpB,GAAG;YACH,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,cAAc;SAC7B,CAAC,CACL;aACA,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QAClB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;CACJ;AAoCD;;;GAGG;AACH,MAAM,OAAO,+BAA+B;IAOvB,MAAM,CAAyC;IAC/C,KAAK,CAAiB;IACtB,0BAA0B,CAAW;IACrC,uBAAuB,CAAU;IAC1C,UAAU,GACd,IAAI,CAAC;IACQ,kBAAkB,CAAU;IAE7C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,YAAY,QAAiD;QACzD,MAAM,EACF,MAAM,EACN,KAAK,EACL,0BAA0B,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EACpD,uBAAuB,GAAG,IAAI,EAC9B,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,YAAY,WAAW,CAAC,GACjE,GAAG,QAAQ,CAAC;QAEb,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,YAAY,CACnD,0BAA0B,CAC7B,CAAC;QACF,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACjD,CAAC;IACO,YAAY,CAChB,KAGC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACnD,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACR,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC3D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAED,6EAA6E;QAC7E,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;iBACnB,SAAS,CAAC,wBAAwB,CAAC;iBACnC,EAAE,CAAC,aAAa,CAAC;iBACjB,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACL,WAAW;QACf,CAAC;QAED,6EAA6E;QAC7E,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACL,WAAW;QACf,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACN,4EAA4E;QAC5E,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;iBACnB,WAAW,CAAC,aAAa,CAAC;iBAC1B,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CACtC,GAAG,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAC7B;iBACA,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;iBAC1D,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC;iBACjC,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACL,WAAW;QACf,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;iBACnB,WAAW,CAAC,wBAAwB,CAAC;iBACrC,EAAE,CAAC,aAAa,CAAC;iBACjB,MAAM,CAAC,YAAY,CAAC;iBACpB,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACL,WAAW;QACf,CAAC;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC/B,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjC,CAAC,EAAE,IAAI,CAAC,0BAA0B,CAAC,cAAc,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,MAAM,IAAI,CAAC,MAAM;aACZ,UAAU,CAAC,aAAa,CAAC;aACzB,KAAK,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;aACjD,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,WAAW,CACb,EAGC;QAED,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzC,OAAO,MAAM,EAAE,CACX,IAAI,0CAA0C,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAClE,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QAClB,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,MAAM;aACZ,UAAU,CAAC,aAAa,CAAC;aACzB,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,CAAC;aAClC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;CACJ"}
|
|
@@ -18,6 +18,10 @@ export type MongodbRateLimiterStorageAdapterSettings = {
|
|
|
18
18
|
collectionName?: string;
|
|
19
19
|
collectionSettings?: CollectionOptions;
|
|
20
20
|
serde: ISerde<string>;
|
|
21
|
+
/**
|
|
22
|
+
* @default true
|
|
23
|
+
*/
|
|
24
|
+
enableTransactions?: boolean;
|
|
21
25
|
};
|
|
22
26
|
/**
|
|
23
27
|
* IMPORT_PATH: `"@daiso-tech/core/rate-limiter/mongodb-rate-limiter-storage-adapter"`
|
|
@@ -37,6 +41,7 @@ export declare class MongodbRateLimiterStorageAdapter<TType> implements IRateLim
|
|
|
37
41
|
private readonly client;
|
|
38
42
|
private readonly collection;
|
|
39
43
|
private readonly serde;
|
|
44
|
+
private readonly enableTransactions;
|
|
40
45
|
/**
|
|
41
46
|
* @example
|
|
42
47
|
* ```ts
|
|
@@ -69,6 +74,7 @@ export declare class MongodbRateLimiterStorageAdapter<TType> implements IRateLim
|
|
|
69
74
|
*/
|
|
70
75
|
init(): Promise<void>;
|
|
71
76
|
private upsert;
|
|
77
|
+
private _transaction;
|
|
72
78
|
transaction<TValue>(fn: InvokableFn<[
|
|
73
79
|
transaction: IRateLimiterStorageAdapterTransaction<TType>
|
|
74
80
|
], Promise<TValue>>): Promise<TValue>;
|
|
@@ -13,6 +13,7 @@ export class MongodbRateLimiterStorageAdapter {
|
|
|
13
13
|
client;
|
|
14
14
|
collection;
|
|
15
15
|
serde;
|
|
16
|
+
enableTransactions;
|
|
16
17
|
/**
|
|
17
18
|
* @example
|
|
18
19
|
* ```ts
|
|
@@ -34,10 +35,11 @@ export class MongodbRateLimiterStorageAdapter {
|
|
|
34
35
|
* ```
|
|
35
36
|
*/
|
|
36
37
|
constructor(settings) {
|
|
37
|
-
const { client, collectionName = "rateLimiter", collectionSettings, database, serde, } = settings;
|
|
38
|
+
const { client, collectionName = "rateLimiter", collectionSettings, database, serde, enableTransactions = true, } = settings;
|
|
38
39
|
this.client = client;
|
|
39
40
|
this.collection = database.collection(collectionName, collectionSettings);
|
|
40
41
|
this.serde = serde;
|
|
42
|
+
this.enableTransactions = enableTransactions;
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
43
45
|
* Removes the collection where the rate limiter keys are stored and all it's related indexes.
|
|
@@ -97,8 +99,18 @@ export class MongodbRateLimiterStorageAdapter {
|
|
|
97
99
|
upsert: true,
|
|
98
100
|
});
|
|
99
101
|
}
|
|
102
|
+
async _transaction(trxFn) {
|
|
103
|
+
if (this.enableTransactions) {
|
|
104
|
+
return await this.client
|
|
105
|
+
.startSession()
|
|
106
|
+
.withTransaction(async () => {
|
|
107
|
+
return await trxFn();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return trxFn();
|
|
111
|
+
}
|
|
100
112
|
async transaction(fn) {
|
|
101
|
-
return await this.
|
|
113
|
+
return await this._transaction(async () => {
|
|
102
114
|
return await fn({
|
|
103
115
|
upsert: (key, state, exiration) => this.upsert(key, state, exiration),
|
|
104
116
|
find: (key) => this.find(key),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb-rate-limiter-storage-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/mongodb-rate-limiter-storage-adapter/mongodb-rate-limiter-storage-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAMN,MAAM,SAAS,CAAC;AAEjB,OAAO,EAIN,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAIN,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"mongodb-rate-limiter-storage-adapter.js","sourceRoot":"","sources":["../../../../../src/rate-limiter/implementations/adapters/mongodb-rate-limiter-storage-adapter/mongodb-rate-limiter-storage-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ import { type Invokable } from "../../../utilities/_module.js";
|
|
|
28
28
|
* ).invoke(1, 0);
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
export declare function dynamic<TParameters extends unknown
|
|
31
|
+
export declare function dynamic<TParameters extends Array<unknown>, TReturn, TContext extends HookContext>(dynamic: NoInfer<Invokable<[
|
|
32
32
|
arguments_: TParameters,
|
|
33
33
|
context: TContext
|
|
34
34
|
], AsyncMiddleware<TParameters, TReturn, TContext>>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
|
|
@@ -29,4 +29,4 @@ import { type FallbackSettings } from "../../../resilience/middlewares/fallback/
|
|
|
29
29
|
* console.log(await fetchData.invoke("URL_ENDPOINT"));
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
export declare function fallback<TParameters extends unknown
|
|
32
|
+
export declare function fallback<TParameters extends Array<unknown>, TReturn, TContext extends HookContext>(settings: NoInfer<FallbackSettings<TParameters, TReturn, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
|
|
@@ -8,7 +8,7 @@ import { type Invokable, type AsyncLazyable, type ErrorPolicySettings } from "..
|
|
|
8
8
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
9
9
|
* @group Middlewares
|
|
10
10
|
*/
|
|
11
|
-
export type OnFallbackData<TParameters extends unknown
|
|
11
|
+
export type OnFallbackData<TParameters extends Array<unknown> = Array<unknown>, TFallbackValue = unknown, TContext extends HookContext = HookContext> = {
|
|
12
12
|
error: unknown;
|
|
13
13
|
fallbackValue: TFallbackValue;
|
|
14
14
|
args: TParameters;
|
|
@@ -19,13 +19,13 @@ export type OnFallbackData<TParameters extends unknown[] = unknown[], TFallbackV
|
|
|
19
19
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
20
20
|
* @group Middlewares
|
|
21
21
|
*/
|
|
22
|
-
export type OnFallback<TParameters extends unknown
|
|
22
|
+
export type OnFallback<TParameters extends Array<unknown> = Array<unknown>, TFallbackValue = unknown, TContext extends HookContext = HookContext> = Invokable<[data: OnFallbackData<TParameters, TFallbackValue, TContext>]>;
|
|
23
23
|
/**
|
|
24
24
|
*
|
|
25
25
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
26
26
|
* @group Middlewares
|
|
27
27
|
*/
|
|
28
|
-
export type FallbackCallbacks<TParameters extends unknown
|
|
28
|
+
export type FallbackCallbacks<TParameters extends Array<unknown> = Array<unknown>, TReturn = unknown, TContext extends HookContext = HookContext> = {
|
|
29
29
|
/**
|
|
30
30
|
* Callback {@link Invokable | `Invokable`} that will be called before fallback value is returned.
|
|
31
31
|
*/
|
|
@@ -36,6 +36,6 @@ export type FallbackCallbacks<TParameters extends unknown[] = unknown[], TReturn
|
|
|
36
36
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
37
37
|
* @group Middlewares
|
|
38
38
|
*/
|
|
39
|
-
export type FallbackSettings<TParameters extends unknown
|
|
39
|
+
export type FallbackSettings<TParameters extends Array<unknown> = Array<unknown>, TReturn = unknown, TContext extends HookContext = HookContext> = FallbackCallbacks<TParameters, TReturn, TContext> & ErrorPolicySettings & {
|
|
40
40
|
fallbackValue: AsyncLazyable<TReturn>;
|
|
41
41
|
};
|
|
@@ -43,4 +43,4 @@ import { type ObserveCallbacks } from "../../../resilience/middlewares/observe/o
|
|
|
43
43
|
* // Will log the execution time and arguments
|
|
44
44
|
* ```
|
|
45
45
|
*/
|
|
46
|
-
export declare function observe<TParameters extends unknown
|
|
46
|
+
export declare function observe<TParameters extends Array<unknown>, TReturn, TContext extends HookContext>(settings: NoInfer<ObserveCallbacks<TParameters, TReturn, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
|
|
@@ -9,7 +9,7 @@ import { type Invokable } from "../../../utilities/_module.js";
|
|
|
9
9
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
10
10
|
* @group Middlewares
|
|
11
11
|
*/
|
|
12
|
-
export type OnObserveStartData<TParameters extends unknown
|
|
12
|
+
export type OnObserveStartData<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
13
13
|
args: TParameters;
|
|
14
14
|
context: TContext;
|
|
15
15
|
};
|
|
@@ -18,13 +18,13 @@ export type OnObserveStartData<TParameters extends unknown[] = unknown[], TConte
|
|
|
18
18
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
19
19
|
* @group Middlewares
|
|
20
20
|
*/
|
|
21
|
-
export type OnObserveStart<TParameters extends unknown
|
|
21
|
+
export type OnObserveStart<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = Invokable<[data: OnObserveStartData<TParameters, TContext>]>;
|
|
22
22
|
/**
|
|
23
23
|
*
|
|
24
24
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
25
25
|
* @group Middlewares
|
|
26
26
|
*/
|
|
27
|
-
export type OnObserveSuccessData<TParameters extends unknown
|
|
27
|
+
export type OnObserveSuccessData<TParameters extends Array<unknown> = Array<unknown>, TReturn = unknown, TContext extends HookContext = HookContext> = {
|
|
28
28
|
returnValue: TReturn;
|
|
29
29
|
args: TParameters;
|
|
30
30
|
context: TContext;
|
|
@@ -34,13 +34,13 @@ export type OnObserveSuccessData<TParameters extends unknown[] = unknown[], TRet
|
|
|
34
34
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
35
35
|
* @group Middlewares
|
|
36
36
|
*/
|
|
37
|
-
export type OnObserveSuccess<TParameters extends unknown
|
|
37
|
+
export type OnObserveSuccess<TParameters extends Array<unknown> = Array<unknown>, TReturn = unknown, TContext extends HookContext = HookContext> = Invokable<[data: OnObserveSuccessData<TParameters, TReturn, TContext>]>;
|
|
38
38
|
/**
|
|
39
39
|
*
|
|
40
40
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
41
41
|
* @group Middlewares
|
|
42
42
|
*/
|
|
43
|
-
export type OnObserveErrorData<TParameters extends unknown
|
|
43
|
+
export type OnObserveErrorData<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
44
44
|
error: unknown;
|
|
45
45
|
args: TParameters;
|
|
46
46
|
context: TContext;
|
|
@@ -59,7 +59,7 @@ export type OnObserveFinallyData<TContext extends HookContext = HookContext> = {
|
|
|
59
59
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
60
60
|
* @group Middlewares
|
|
61
61
|
*/
|
|
62
|
-
export type OnObserveError<TParameters extends unknown
|
|
62
|
+
export type OnObserveError<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = Invokable<[data: OnObserveErrorData<TParameters, TContext>]>;
|
|
63
63
|
/**
|
|
64
64
|
*
|
|
65
65
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
@@ -71,7 +71,7 @@ export type OnObserveFinally<TContext extends HookContext = HookContext> = Invok
|
|
|
71
71
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
72
72
|
* @group Middlewares
|
|
73
73
|
*/
|
|
74
|
-
export type ObserveCallbacks<TParameters extends unknown
|
|
74
|
+
export type ObserveCallbacks<TParameters extends Array<unknown> = Array<unknown>, TReturn = unknown, TContext extends HookContext = HookContext> = {
|
|
75
75
|
/**
|
|
76
76
|
* Callback {@link Invokable | `Invokable`} that will be called when before the underlying {@link Invokable | `Invokable`} is called.
|
|
77
77
|
*/
|
|
@@ -38,4 +38,4 @@ import { type RetrySettings } from "../../../resilience/middlewares/retry/retry.
|
|
|
38
38
|
* .invoke("URL");
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
export declare function retry<TParameters extends unknown
|
|
41
|
+
export declare function retry<TParameters extends Array<unknown>, TReturn, TContext extends HookContext>(settings?: NoInfer<RetrySettings<TParameters, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.middleware.js","sourceRoot":"","sources":["../../../../src/resilience/middlewares/retry/retry.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAA4C,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAsB,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACzD,OAAO,EACH,aAAa,EACb,UAAU,EACV,UAAU,EACV,MAAM,EACN,eAAe,EACf,sBAAsB,EACtB,sBAAsB,GAEzB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,KAAK,CAKjB,WAA0D,EAAE;IAE5D,MAAM,EACF,WAAW,GAAG,CAAC,EACf,aAAa,GAAG,kBAAkB,EAAE,EACpC,WAAW,EACX,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,EACvB,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,GAChC,GAAG,QAAQ,CAAC;IACb,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7C,IAAI,MAAM,GAAoB,UAAU,EAAE,CAAC;QAC3C,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"retry.middleware.js","sourceRoot":"","sources":["../../../../src/resilience/middlewares/retry/retry.middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { type Invokable, type ErrorPolicySettings } from "../../../utilities/_mo
|
|
|
10
10
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
11
11
|
* @group Middlewares
|
|
12
12
|
*/
|
|
13
|
-
export type OnRetryAttemptData<TParameters extends unknown
|
|
13
|
+
export type OnRetryAttemptData<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
14
14
|
attempt: number;
|
|
15
15
|
args: TParameters;
|
|
16
16
|
context: TContext;
|
|
@@ -20,13 +20,13 @@ export type OnRetryAttemptData<TParameters extends unknown[] = unknown[], TConte
|
|
|
20
20
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
21
21
|
* @group Middlewares
|
|
22
22
|
*/
|
|
23
|
-
export type OnExecutionAttempt<TParameters extends unknown
|
|
23
|
+
export type OnExecutionAttempt<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = Invokable<[data: OnRetryAttemptData<TParameters, TContext>]>;
|
|
24
24
|
/**
|
|
25
25
|
*
|
|
26
26
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
27
27
|
* @group Middlewares
|
|
28
28
|
*/
|
|
29
|
-
export type OnRetryDelayData<TParameters extends unknown
|
|
29
|
+
export type OnRetryDelayData<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
30
30
|
error: unknown;
|
|
31
31
|
attempt: number;
|
|
32
32
|
waitTime: ITimeSpan;
|
|
@@ -38,13 +38,13 @@ export type OnRetryDelayData<TParameters extends unknown[] = unknown[], TContext
|
|
|
38
38
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
39
39
|
* @group Middlewares
|
|
40
40
|
*/
|
|
41
|
-
export type OnRetryDelay<TParameters extends unknown
|
|
41
|
+
export type OnRetryDelay<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = Invokable<[data: OnRetryDelayData<TParameters, TContext>]>;
|
|
42
42
|
/**
|
|
43
43
|
*
|
|
44
44
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
45
45
|
* @group Middlewares
|
|
46
46
|
*/
|
|
47
|
-
export type RetryCallbacks<TParameters extends unknown
|
|
47
|
+
export type RetryCallbacks<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
48
48
|
/**
|
|
49
49
|
* Callback {@link Invokable | `Invokable`} that will be called before execution attempt.
|
|
50
50
|
*/
|
|
@@ -59,7 +59,7 @@ export type RetryCallbacks<TParameters extends unknown[] = unknown[], TContext e
|
|
|
59
59
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
60
60
|
* @group Middlewares
|
|
61
61
|
*/
|
|
62
|
-
export type RetrySettings<TParameters extends unknown
|
|
62
|
+
export type RetrySettings<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = RetryCallbacks<TParameters, TContext> & ErrorPolicySettings & {
|
|
63
63
|
/**
|
|
64
64
|
* You can decide maximal times you can retry.
|
|
65
65
|
* @default 4
|
|
@@ -38,4 +38,4 @@ import { type TimeoutSettings } from "../../../resilience/middlewares/timeout/ti
|
|
|
38
38
|
* .invoke("URL");
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
export declare function timeout<TParameters extends unknown
|
|
41
|
+
export declare function timeout<TParameters extends Array<unknown>, TReturn, TContext extends HookContext>(settings?: NoInfer<TimeoutSettings<TParameters, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
|
|
@@ -10,7 +10,7 @@ import { type Invokable } from "../../../utilities/_module.js";
|
|
|
10
10
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
11
11
|
* @group Middlewares
|
|
12
12
|
*/
|
|
13
|
-
export type OnTimeoutData<TParameters extends unknown
|
|
13
|
+
export type OnTimeoutData<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
14
14
|
waitTime: TimeSpan;
|
|
15
15
|
args: TParameters;
|
|
16
16
|
context: TContext;
|
|
@@ -20,13 +20,13 @@ export type OnTimeoutData<TParameters extends unknown[] = unknown[], TContext ex
|
|
|
20
20
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
21
21
|
* @group Middlewares
|
|
22
22
|
*/
|
|
23
|
-
export type OnTimeout<TParameters extends unknown
|
|
23
|
+
export type OnTimeout<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = Invokable<[data: OnTimeoutData<TParameters, TContext>]>;
|
|
24
24
|
/**
|
|
25
25
|
*
|
|
26
26
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
27
27
|
* @group Middlewares
|
|
28
28
|
*/
|
|
29
|
-
export type TimeoutCallbacks<TParameters extends unknown
|
|
29
|
+
export type TimeoutCallbacks<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = {
|
|
30
30
|
/**
|
|
31
31
|
* Callback {@link Invokable | `Invokable`} that will be called before the timeout occurs.
|
|
32
32
|
*/
|
|
@@ -37,7 +37,7 @@ export type TimeoutCallbacks<TParameters extends unknown[] = unknown[], TContext
|
|
|
37
37
|
* IMPORT_PATH: `"@daiso-tech/core/resilience"`
|
|
38
38
|
* @group Middlewares
|
|
39
39
|
*/
|
|
40
|
-
export type TimeoutSettings<TParameters extends unknown
|
|
40
|
+
export type TimeoutSettings<TParameters extends Array<unknown> = Array<unknown>, TContext extends HookContext = HookContext> = TimeoutCallbacks<TParameters, TContext> & {
|
|
41
41
|
/**
|
|
42
42
|
* The maximum time to wait before automatically aborting the executing function.
|
|
43
43
|
*
|
|
@@ -15,7 +15,7 @@ export declare class TimeoutResilienceError extends Error {
|
|
|
15
15
|
* @group Errors
|
|
16
16
|
*/
|
|
17
17
|
export declare class RetryResilienceError extends AggregateError {
|
|
18
|
-
constructor(errors: unknown
|
|
18
|
+
constructor(errors: Array<unknown>, message: string);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilience.errors.js","sourceRoot":"","sources":["../../src/resilience/resilience.errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7C,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC;IAC5C,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IACpD,YAAY,
|
|
1
|
+
{"version":3,"file":"resilience.errors.js","sourceRoot":"","sources":["../../src/resilience/resilience.errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC7C,YAAY,OAAe,EAAE,KAAe;QACxC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC;IAC5C,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IACpD,YAAY,MAAsB,EAAE,OAAe;QAC/C,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAC1C,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,KAAK,EAAE,oBAAoB;IAC3B,OAAO,EAAE,sBAAsB;CACzB,CAAC;AASX;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC7B,KAAc;IAEd,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -40,7 +40,7 @@ export type IDatabaseSemaphoreTransaction = {
|
|
|
40
40
|
* The `findSlots` returns the semaphore slot if it exists otherwise `null` is returned.
|
|
41
41
|
*
|
|
42
42
|
*/
|
|
43
|
-
findSlots(key: string): Promise<ISemaphoreSlotData
|
|
43
|
+
findSlots(key: string): Promise<Array<ISemaphoreSlotData>>;
|
|
44
44
|
/**
|
|
45
45
|
* The `upsertSemaphore` inserts a semaphore if it doesnt exist otherwise it will be updated.
|
|
46
46
|
*
|
|
@@ -80,7 +80,7 @@ export type IDatabaseSemaphoreAdapter = {
|
|
|
80
80
|
*
|
|
81
81
|
* @returns Returns the slot expiration.
|
|
82
82
|
*/
|
|
83
|
-
removeAllSlots(key: string): Promise<ISemaphoreSlotExpirationData
|
|
83
|
+
removeAllSlots(key: string): Promise<Array<ISemaphoreSlotExpirationData>>;
|
|
84
84
|
/**
|
|
85
85
|
* The `updateExpiration` updates the specified slot expiration as long as it is expireable and unexpired of the given semaphore.
|
|
86
86
|
*
|
|
@@ -37,7 +37,7 @@ export type ISemaphoreUnacquiredState = {
|
|
|
37
37
|
limit: number;
|
|
38
38
|
freeSlotsCount: number;
|
|
39
39
|
acquiredSlotsCount: number;
|
|
40
|
-
acquiredSlots: string
|
|
40
|
+
acquiredSlots: Array<string>;
|
|
41
41
|
};
|
|
42
42
|
/**
|
|
43
43
|
*
|
|
@@ -50,7 +50,7 @@ export type ISemaphoreAcquiredState = {
|
|
|
50
50
|
remainingTime: TimeSpan | null;
|
|
51
51
|
freeSlotsCount: number;
|
|
52
52
|
acquiredSlotsCount: number;
|
|
53
|
-
acquiredSlots: string
|
|
53
|
+
acquiredSlots: Array<string>;
|
|
54
54
|
};
|
|
55
55
|
/**
|
|
56
56
|
*
|
|
@@ -60,7 +60,7 @@ export type ISemaphoreAcquiredState = {
|
|
|
60
60
|
export type ISemaphoreLimitReachedState = {
|
|
61
61
|
type: (typeof SEMAPHORE_STATE)["LIMIT_REACHED"];
|
|
62
62
|
limit: number;
|
|
63
|
-
acquiredSlots: string
|
|
63
|
+
acquiredSlots: Array<string>;
|
|
64
64
|
};
|
|
65
65
|
/**
|
|
66
66
|
*
|
|
@@ -53,6 +53,15 @@ export type KyselySemaphoreAdapterSettings = {
|
|
|
53
53
|
* @default true
|
|
54
54
|
*/
|
|
55
55
|
shouldRemoveExpiredKeys?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* @default
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { Transaction } from "kysely"
|
|
60
|
+
*
|
|
61
|
+
* !(settings.kysely instanceof Transaction)
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
enableTransactions?: boolean;
|
|
56
65
|
};
|
|
57
66
|
/**
|
|
58
67
|
* To utilize the `KyselySemaphoreAdapter`, you must install the [`"kysely"`](https://www.npmjs.com/package/kysely) package and configure a `Kysely` class instance.
|
|
@@ -69,6 +78,7 @@ export declare class KyselySemaphoreAdapter implements IDatabaseSemaphoreAdapter
|
|
|
69
78
|
private readonly shouldRemoveExpiredKeys;
|
|
70
79
|
private intervalId;
|
|
71
80
|
private readonly isMysql;
|
|
81
|
+
private readonly enableTransactions;
|
|
72
82
|
/**
|
|
73
83
|
* @example
|
|
74
84
|
* ```ts
|
|
@@ -88,6 +98,7 @@ export declare class KyselySemaphoreAdapter implements IDatabaseSemaphoreAdapter
|
|
|
88
98
|
* ```
|
|
89
99
|
*/
|
|
90
100
|
constructor(settings: KyselySemaphoreAdapterSettings);
|
|
101
|
+
private _transaction;
|
|
91
102
|
init(): Promise<void>;
|
|
92
103
|
/**
|
|
93
104
|
* Removes all related semaphore tables and their rows.
|
|
@@ -99,6 +110,6 @@ export declare class KyselySemaphoreAdapter implements IDatabaseSemaphoreAdapter
|
|
|
99
110
|
methods: IDatabaseSemaphoreTransaction
|
|
100
111
|
], Promise<TValue>>): Promise<TValue>;
|
|
101
112
|
removeSlot(key: string, slotId: string): Promise<ISemaphoreSlotExpirationData | null>;
|
|
102
|
-
removeAllSlots(key: string): Promise<ISemaphoreSlotExpirationData
|
|
113
|
+
removeAllSlots(key: string): Promise<Array<ISemaphoreSlotExpirationData>>;
|
|
103
114
|
updateExpiration(key: string, slotId: string, expiration: Date): Promise<number>;
|
|
104
115
|
}
|
package/dist/semaphore/implementations/adapters/kysely-semaphore-adapter/kysely-semaphore-adapter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Semaphore
|
|
3
3
|
*/
|
|
4
|
-
import { MysqlAdapter } from "kysely";
|
|
4
|
+
import { MysqlAdapter, Transaction } from "kysely";
|
|
5
5
|
import {} from "../../../../semaphore/contracts/_module.js";
|
|
6
6
|
import {} from "../../../../time-span/contracts/_module.js";
|
|
7
7
|
import { TimeSpan } from "../../../../time-span/implementations/_module.js";
|
|
@@ -98,6 +98,7 @@ export class KyselySemaphoreAdapter {
|
|
|
98
98
|
shouldRemoveExpiredKeys;
|
|
99
99
|
intervalId = null;
|
|
100
100
|
isMysql;
|
|
101
|
+
enableTransactions;
|
|
101
102
|
/**
|
|
102
103
|
* @example
|
|
103
104
|
* ```ts
|
|
@@ -117,12 +118,24 @@ export class KyselySemaphoreAdapter {
|
|
|
117
118
|
* ```
|
|
118
119
|
*/
|
|
119
120
|
constructor(settings) {
|
|
120
|
-
const { kysely, expiredKeysRemovalInterval = TimeSpan.fromMinutes(1), shouldRemoveExpiredKeys = true, } = settings;
|
|
121
|
+
const { kysely, expiredKeysRemovalInterval = TimeSpan.fromMinutes(1), shouldRemoveExpiredKeys = true, enableTransactions = !(settings.kysely instanceof Transaction), } = settings;
|
|
121
122
|
this.expiredKeysRemovalInterval = TimeSpan.fromTimeSpan(expiredKeysRemovalInterval);
|
|
122
123
|
this.shouldRemoveExpiredKeys = shouldRemoveExpiredKeys;
|
|
123
124
|
this.kysely = kysely;
|
|
124
125
|
this.isMysql =
|
|
125
126
|
this.kysely.getExecutor().adapter instanceof MysqlAdapter;
|
|
127
|
+
this.enableTransactions = enableTransactions;
|
|
128
|
+
}
|
|
129
|
+
_transaction(trxFn) {
|
|
130
|
+
if (this.enableTransactions) {
|
|
131
|
+
return this.kysely
|
|
132
|
+
.transaction()
|
|
133
|
+
.setIsolationLevel("serializable")
|
|
134
|
+
.execute(async (trx) => {
|
|
135
|
+
return await trxFn(trx);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return trxFn(this.kysely);
|
|
126
139
|
}
|
|
127
140
|
async init() {
|
|
128
141
|
// Should throw if the table already exists thats why the try catch is used.
|
|
@@ -216,20 +229,14 @@ export class KyselySemaphoreAdapter {
|
|
|
216
229
|
.execute();
|
|
217
230
|
}
|
|
218
231
|
async transaction(fn) {
|
|
219
|
-
return await this.
|
|
220
|
-
.transaction()
|
|
221
|
-
.setIsolationLevel("serializable")
|
|
222
|
-
.execute(async (trx) => {
|
|
232
|
+
return await this._transaction(async (trx) => {
|
|
223
233
|
return await fn(new DatabaseSemaphoreTransaction(trx));
|
|
224
234
|
});
|
|
225
235
|
}
|
|
226
236
|
async removeSlot(key, slotId) {
|
|
227
237
|
let row;
|
|
228
238
|
if (this.isMysql) {
|
|
229
|
-
row = await this.
|
|
230
|
-
.transaction()
|
|
231
|
-
.setIsolationLevel("serializable")
|
|
232
|
-
.execute(async (trx) => {
|
|
239
|
+
row = await this._transaction(async (trx) => {
|
|
233
240
|
const row = await trx
|
|
234
241
|
.selectFrom("semaphoreSlot")
|
|
235
242
|
.select("semaphoreSlot.expiration")
|
|
@@ -267,10 +274,7 @@ export class KyselySemaphoreAdapter {
|
|
|
267
274
|
async removeAllSlots(key) {
|
|
268
275
|
let rows;
|
|
269
276
|
if (this.isMysql) {
|
|
270
|
-
rows = await this.
|
|
271
|
-
.transaction()
|
|
272
|
-
.setIsolationLevel("serializable")
|
|
273
|
-
.execute(async (trx) => {
|
|
277
|
+
rows = await this._transaction(async (trx) => {
|
|
274
278
|
const rows = trx
|
|
275
279
|
.selectFrom("semaphoreSlot")
|
|
276
280
|
.where("semaphoreSlot.key", "=", key)
|