@acmekit/locking-postgres 2.13.1

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.
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@acmekit/types").ModuleProviderExports;
2
+ export default _default;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,wBAEE"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@acmekit/framework/utils");
4
+ const advisory_lock_1 = require("./services/advisory-lock");
5
+ const services = [advisory_lock_1.PostgresAdvisoryLockProvider];
6
+ exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.LOCKING, {
7
+ services,
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,oDAAkE;AAClE,4DAAuE;AAEvE,MAAM,QAAQ,GAAG,CAAC,4CAA4B,CAAC,CAAA;AAE/C,kBAAe,IAAA,sBAAc,EAAC,eAAO,CAAC,OAAO,EAAE;IAC7C,QAAQ;CACT,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Migration } from "@acmekit/framework/mikro-orm/migrations";
2
+ export declare class Migration20241009222919_InitialSetupMigration extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=Migration20241009222919_InitialSetupMigration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Migration20241009222919_InitialSetupMigration.d.ts","sourceRoot":"","sources":["../../src/migrations/Migration20241009222919_InitialSetupMigration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,qBAAa,6CAA8C,SAAQ,SAAS;IACpE,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20241009222919_InitialSetupMigration = void 0;
4
+ const migrations_1 = require("@acmekit/framework/mikro-orm/migrations");
5
+ class Migration20241009222919_InitialSetupMigration extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql('create table if not exists "locking" ("id" text not null, "owner_id" text null, "expiration" timestamptz null, constraint "locking_pkey" primary key ("id"));');
8
+ }
9
+ async down() {
10
+ this.addSql(`drop table "locking";`);
11
+ }
12
+ }
13
+ exports.Migration20241009222919_InitialSetupMigration = Migration20241009222919_InitialSetupMigration;
14
+ //# sourceMappingURL=Migration20241009222919_InitialSetupMigration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Migration20241009222919_InitialSetupMigration.js","sourceRoot":"","sources":["../../src/migrations/Migration20241009222919_InitialSetupMigration.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AAEnE,MAAa,6CAA8C,SAAQ,sBAAS;IAC1E,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,MAAM,CACT,+JAA+J,CAChK,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;IACtC,CAAC;CACF;AAVD,sGAUC"}
@@ -0,0 +1,2 @@
1
+ export { default as Locking } from "./locking";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Locking = void 0;
7
+ var locking_1 = require("./locking");
8
+ Object.defineProperty(exports, "Locking", { enumerable: true, get: function () { return __importDefault(locking_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;AAAA,qCAA8C;AAArC,mHAAA,OAAO,OAAW"}
@@ -0,0 +1,7 @@
1
+ declare const Locking: import("@acmekit/framework/utils").DmlEntity<import("@acmekit/framework/utils").DMLEntitySchemaBuilder<{
2
+ id: import("@acmekit/framework/utils").PrimaryKeyModifier<string, import("@acmekit/framework/utils").IdProperty>;
3
+ owner_id: import("@acmekit/framework/utils").NullableModifier<string, import("@acmekit/framework/utils").TextProperty>;
4
+ expiration: import("@acmekit/framework/utils").NullableModifier<Date, import("@acmekit/framework/utils").DateTimeProperty>;
5
+ }>, "Locking">;
6
+ export default Locking;
7
+ //# sourceMappingURL=locking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locking.d.ts","sourceRoot":"","sources":["../../src/models/locking.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,OAAO;;;;cAIX,CAAA;AAEF,eAAe,OAAO,CAAA"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@acmekit/framework/utils");
4
+ const Locking = utils_1.model.define("Locking", {
5
+ id: utils_1.model.id({ prefix: "lk" }).primaryKey(),
6
+ owner_id: utils_1.model.text().nullable(),
7
+ expiration: utils_1.model.dateTime().nullable(),
8
+ });
9
+ exports.default = Locking;
10
+ //# sourceMappingURL=locking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locking.js","sourceRoot":"","sources":["../../src/models/locking.ts"],"names":[],"mappings":";;AAAA,oDAAgD;AAEhD,MAAM,OAAO,GAAG,aAAK,CAAC,MAAM,CAAC,SAAS,EAAE;IACtC,EAAE,EAAE,aAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE;IAC3C,QAAQ,EAAE,aAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,aAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAA;AAEF,kBAAe,OAAO,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { ILockingProvider } from "@acmekit/framework/types";
2
+ import { EntityManager } from "@acmekit/framework/mikro-orm/core";
3
+ type InjectedDependencies = {
4
+ manager: EntityManager;
5
+ };
6
+ declare const PostgresAdvisoryLockProvider_base: import("@acmekit/framework/utils").AcmeKitServiceReturnType<import("@acmekit/framework/utils").ModelConfigurationsToConfigTemplate<{
7
+ readonly Locking: import("@acmekit/framework/utils").DmlEntity<import("@acmekit/framework/utils").DMLEntitySchemaBuilder<{
8
+ id: import("@acmekit/framework/utils").PrimaryKeyModifier<string, import("@acmekit/framework/utils").IdProperty>;
9
+ owner_id: import("@acmekit/framework/utils").NullableModifier<string, import("@acmekit/framework/utils").TextProperty>;
10
+ expiration: import("@acmekit/framework/utils").NullableModifier<Date, import("@acmekit/framework/utils").DateTimeProperty>;
11
+ }>, "Locking">;
12
+ }>>;
13
+ export declare class PostgresAdvisoryLockProvider extends PostgresAdvisoryLockProvider_base implements ILockingProvider {
14
+ static identifier: string;
15
+ protected manager: EntityManager;
16
+ constructor(container: InjectedDependencies);
17
+ private getManager;
18
+ execute<T>(keys: string | string[], job: () => Promise<T>, args?: {
19
+ timeout?: number;
20
+ }): Promise<T>;
21
+ private loadLock;
22
+ acquire(keys: string | string[], args?: {
23
+ ownerId?: string | null;
24
+ expire?: number;
25
+ }): Promise<void>;
26
+ release(keys: string | string[], args?: {
27
+ ownerId?: string | null;
28
+ }): Promise<boolean>;
29
+ releaseAll(args?: {
30
+ ownerId?: string | null;
31
+ }): Promise<void>;
32
+ private hashStringToInt;
33
+ private getTimeout;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=advisory-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisory-lock.d.ts","sourceRoot":"","sources":["../../src/services/advisory-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAGjE,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,aAAa,CAAA;CACvB,CAAA;;;;;;;;AAED,qBAAa,4BACX,SAAQ,iCACR,YAAW,gBAAgB;IAE3B,MAAM,CAAC,UAAU,SAAqB;IAEtC,SAAS,CAAC,OAAO,EAAE,aAAa,CAAA;gBAEpB,SAAS,EAAE,oBAAoB;IAM3C,OAAO,CAAC,UAAU;IAIZ,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GACA,OAAO,CAAC,CAAC,CAAC;YAoCC,QAAQ;IAahB,OAAO,CACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GACA,OAAO,CAAC,IAAI,CAAC;IAqDV,OAAO,CACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACxB,GACA,OAAO,CAAC,OAAO,CAAC;IAqBb,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAanE,OAAO,CAAC,eAAe;YAQT,UAAU;CAOzB"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostgresAdvisoryLockProvider = void 0;
4
+ const utils_1 = require("@acmekit/framework/utils");
5
+ const _models_1 = require("../models");
6
+ class PostgresAdvisoryLockProvider extends (0, utils_1.AcmeKitService)({ Locking: _models_1.Locking }) {
7
+ constructor(container) {
8
+ // @ts-ignore
9
+ super(...arguments);
10
+ this.manager = container.manager;
11
+ }
12
+ getManager() {
13
+ return this.manager;
14
+ }
15
+ async execute(keys, job, args) {
16
+ const timeout = Math.max(args?.timeout ?? 5, 1);
17
+ const timeoutSeconds = Number.isNaN(timeout) ? 1 : timeout;
18
+ return await this.getManager().transactional(async (manager) => {
19
+ const ops = [];
20
+ if (timeoutSeconds > 0) {
21
+ ops.push(this.getTimeout(timeoutSeconds));
22
+ }
23
+ const fnName = "pg_advisory_xact_lock";
24
+ const allKeys = Array.isArray(keys) ? keys : [keys];
25
+ const numKeys = allKeys.map(this.hashStringToInt);
26
+ const lockPromises = numKeys.map((numKey) => manager.execute(`SELECT ${fnName}(?)`, [numKey]));
27
+ const lock = Promise.all(lockPromises);
28
+ ops.push(lock);
29
+ try {
30
+ await Promise.race(ops);
31
+ const ret = await job();
32
+ await manager.commit();
33
+ return ret;
34
+ }
35
+ catch (e) {
36
+ await manager.rollback();
37
+ throw e;
38
+ }
39
+ });
40
+ }
41
+ async loadLock(key) {
42
+ const [row] = await this.getManager().execute(`SELECT owner_id, expiration, NOW() AS now FROM locking WHERE id = ?`, [key]);
43
+ return row;
44
+ }
45
+ async acquire(keys, args) {
46
+ keys = Array.isArray(keys) ? keys : [keys];
47
+ const { ownerId, expire } = args ?? {};
48
+ for (const key of keys) {
49
+ const row = await this.loadLock(key);
50
+ if (!row) {
51
+ const expireSql = expire
52
+ ? `NOW() + INTERVAL '${+expire} SECONDS'`
53
+ : "NULL";
54
+ try {
55
+ await this.getManager().execute(`INSERT INTO locking (id, owner_id, expiration) VALUES (?, ?, ${expireSql})`, [key, ownerId ?? null]);
56
+ }
57
+ catch (err) {
58
+ if (err.toString().includes("locking_pkey")) {
59
+ const owner = await this.loadLock(key);
60
+ if (ownerId != owner.owner_id) {
61
+ throw new Error(`"${key}" is already locked.`);
62
+ }
63
+ }
64
+ else {
65
+ throw err;
66
+ }
67
+ }
68
+ continue;
69
+ }
70
+ const errMessage = `Failed to acquire lock for key "${key}"`;
71
+ if (row.owner_id === null || row.owner_id !== ownerId) {
72
+ throw new Error(errMessage);
73
+ }
74
+ if (!row.expiration && row.owner_id == ownerId) {
75
+ continue;
76
+ }
77
+ const canRefresh = row.owner_id == ownerId && (expire || row.expiration <= row.now);
78
+ if (!canRefresh || !expire) {
79
+ continue;
80
+ }
81
+ await this.getManager().execute(`UPDATE locking SET owner_id = ?, expiration = NOW() + INTERVAL '${+expire} SECONDS' WHERE id = ?`, [ownerId ?? null, key]);
82
+ }
83
+ }
84
+ async release(keys, args) {
85
+ const { ownerId } = args ?? {};
86
+ keys = Array.isArray(keys) ? keys : [keys];
87
+ let success = true;
88
+ for (const key of keys) {
89
+ const row = await this.loadLock(key);
90
+ if (!row || row.owner_id != ownerId) {
91
+ success = false;
92
+ continue;
93
+ }
94
+ await this.getManager().execute(`DELETE FROM locking WHERE id = ?`, [key]);
95
+ success = success && (!row.expiration || row.expiration > row.now);
96
+ }
97
+ return success;
98
+ }
99
+ async releaseAll(args) {
100
+ const { ownerId } = args ?? {};
101
+ if (!(0, utils_1.isDefined)(ownerId)) {
102
+ await this.getManager().execute(`TRUNCATE TABLE locking`);
103
+ }
104
+ else {
105
+ await this.getManager().execute(`DELETE FROM locking WHERE owner_id = ?`, [ownerId]);
106
+ }
107
+ }
108
+ hashStringToInt(str) {
109
+ let hash = 5381;
110
+ for (let i = str.length; i--;) {
111
+ hash = (hash * 33) ^ str.charCodeAt(i);
112
+ }
113
+ return hash >>> 0;
114
+ }
115
+ async getTimeout(seconds) {
116
+ return new Promise((_, reject) => {
117
+ setTimeout(() => {
118
+ reject(new Error("Timed-out acquiring lock."));
119
+ }, seconds * 1000);
120
+ });
121
+ }
122
+ }
123
+ exports.PostgresAdvisoryLockProvider = PostgresAdvisoryLockProvider;
124
+ PostgresAdvisoryLockProvider.identifier = "locking-postgres";
125
+ //# sourceMappingURL=advisory-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisory-lock.js","sourceRoot":"","sources":["../../src/services/advisory-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"root":["../src/index.ts","../src/migrations/migration20241009222919_initialsetupmigration.ts","../src/models/index.ts","../src/models/locking.ts","../src/services/advisory-lock.ts"],"version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@acmekit/locking-postgres",
3
+ "version": "2.13.1",
4
+ "description": "Postgres Advisory Locks for AcmeKit",
5
+ "main": "dist/index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/acmekit/acmekit",
9
+ "directory": "packages/modules/providers/locking-postgres"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "!dist/**/__tests__",
14
+ "!dist/**/__mocks__",
15
+ "!dist/**/__fixtures__"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "author": "AcmeKit",
21
+ "license": "MIT",
22
+ "devDependencies": {
23
+ "@acmekit/framework": "2.13.1"
24
+ },
25
+ "peerDependencies": {
26
+ "@acmekit/framework": "2.13.1"
27
+ },
28
+ "scripts": {
29
+ "watch": "yarn run -T tsc --build --watch",
30
+ "watch:test": "yarn run -T tsc --build tsconfig.spec.json --watch",
31
+ "resolve:aliases": "yarn run -T tsc --showConfig -p tsconfig.json > tsconfig.resolved.json && yarn run -T tsc-alias -p tsconfig.resolved.json && yarn run -T rimraf tsconfig.resolved.json",
32
+ "build": "yarn run -T rimraf dist && yarn run -T tsc --build && npm run resolve:aliases",
33
+ "test": "../../../../node_modules/.bin/jest --passWithNoTests src",
34
+ "test:integration": "../../../../node_modules/.bin/jest --passWithNoTests --forceExit --testPathPattern=\"integration-tests/__tests__/.*\\.spec\\.ts\"",
35
+ "migration:initial": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true acmekit-mikro-orm migration:create --initial -n InitialSetupMigration",
36
+ "migration:create": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true acmekit-mikro-orm migration:create",
37
+ "migration:up": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true acmekit-mikro-orm migration:up",
38
+ "orm:cache:clear": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts MIKRO_ORM_ALLOW_GLOBAL_CLI=true acmekit-mikro-orm cache:clear"
39
+ },
40
+ "keywords": [
41
+ "acmekit-providers",
42
+ "acmekit-providers-locking"
43
+ ]
44
+ }