@tslock/dynamodb 2.2.0 → 2.3.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/index.cjs CHANGED
@@ -29,25 +29,7 @@ var import_client_dynamodb2 = require("@aws-sdk/client-dynamodb");
29
29
 
30
30
  // src/dynamodb-accessor.ts
31
31
  var import_client_dynamodb = require("@aws-sdk/client-dynamodb");
32
- var import_core2 = require("@tslock/core");
33
-
34
- // src/dynamodb-lock.ts
35
32
  var import_core = require("@tslock/core");
36
- var DynamoDBLock = class extends import_core.AbstractSimpleLock {
37
- constructor(config, accessor) {
38
- super(config);
39
- this.accessor = accessor;
40
- }
41
- accessor;
42
- async doUnlock() {
43
- await this.accessor.unlock(this.config);
44
- }
45
- async doExtend(newConfig) {
46
- return await this.accessor.extend(newConfig);
47
- }
48
- };
49
-
50
- // src/dynamodb-accessor.ts
51
33
  var DynamoDBAccessor = class {
52
34
  constructor(client, tableName, partitionKey, sortKey) {
53
35
  this.client = client;
@@ -67,10 +49,10 @@ var DynamoDBAccessor = class {
67
49
  return key;
68
50
  }
69
51
  async lock(config) {
70
- const now = import_core2.ClockProvider.now();
71
- const isoNow = import_core2.Utils.toIsoString(now);
72
- const isoLockAtMostUntil = import_core2.Utils.toIsoString((0, import_core2.lockAtMostUntil)(config));
73
- const hostname = import_core2.Utils.getHostname();
52
+ const now = import_core.ClockProvider.now();
53
+ const isoNow = import_core.Utils.toIsoString(now);
54
+ const isoLockAtMostUntil = import_core.Utils.toIsoString((0, import_core.lockAtMostUntil)(config));
55
+ const hostname = import_core.Utils.getHostname();
74
56
  try {
75
57
  await this.client.send(
76
58
  new import_client_dynamodb.UpdateItemCommand({
@@ -85,17 +67,17 @@ var DynamoDBAccessor = class {
85
67
  }
86
68
  })
87
69
  );
88
- return new DynamoDBLock(config, this);
70
+ return new import_core.DelegatingSimpleLock(config, this);
89
71
  } catch (e) {
90
72
  if (e instanceof import_client_dynamodb.ConditionalCheckFailedException) return void 0;
91
73
  throw e;
92
74
  }
93
75
  }
94
76
  async extend(config) {
95
- const now = import_core2.ClockProvider.now();
96
- const isoNow = import_core2.Utils.toIsoString(now);
97
- const isoNewLockAtMostUntil = import_core2.Utils.toIsoString((0, import_core2.lockAtMostUntil)(config));
98
- const hostname = import_core2.Utils.getHostname();
77
+ const now = import_core.ClockProvider.now();
78
+ const isoNow = import_core.Utils.toIsoString(now);
79
+ const isoNewLockAtMostUntil = import_core.Utils.toIsoString((0, import_core.lockAtMostUntil)(config));
80
+ const hostname = import_core.Utils.getHostname();
99
81
  try {
100
82
  await this.client.send(
101
83
  new import_client_dynamodb.UpdateItemCommand({
@@ -110,14 +92,14 @@ var DynamoDBAccessor = class {
110
92
  }
111
93
  })
112
94
  );
113
- return new DynamoDBLock(config, this);
95
+ return new import_core.DelegatingSimpleLock(config, this);
114
96
  } catch (e) {
115
97
  if (e instanceof import_client_dynamodb.ConditionalCheckFailedException) return void 0;
116
98
  throw e;
117
99
  }
118
100
  }
119
101
  async unlock(config) {
120
- const isoUnlock = import_core2.Utils.toIsoString((0, import_core2.unlockTime)(config));
102
+ const isoUnlock = import_core.Utils.toIsoString((0, import_core.unlockTime)(config));
121
103
  try {
122
104
  await this.client.send(
123
105
  new import_client_dynamodb.UpdateItemCommand({
@@ -141,9 +123,9 @@ var DynamoDBAccessor = class {
141
123
  };
142
124
 
143
125
  // src/dynamodb-lock-provider-options.ts
144
- var import_core3 = require("@tslock/core");
126
+ var import_core2 = require("@tslock/core");
145
127
  function validateOptions(options) {
146
- if (!options.tableName) throw new import_core3.LockException("DynamoDBConfiguration: tableName is required");
128
+ if (!options.tableName) throw new import_core2.LockException("DynamoDBConfiguration: tableName is required");
147
129
  return {
148
130
  tableName: options.tableName,
149
131
  partitionKey: options.partitionKey ?? "_id",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/dynamodb-lock-provider.ts","../src/dynamodb-accessor.ts","../src/dynamodb-lock.ts","../src/dynamodb-lock-provider-options.ts"],"sourcesContent":["export { DynamoDBLockProvider } from './dynamodb-lock-provider.js';\nexport type { DynamoDBLockProviderOptions } from './dynamodb-lock-provider-options.js';\n","import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport { DynamoDBAccessor } from './dynamodb-accessor.js';\nimport { type DynamoDBLockProviderOptions, validateOptions } from './dynamodb-lock-provider-options.js';\n\nexport class DynamoDBLockProvider implements ExtensibleLockProvider {\n private readonly accessor: DynamoDBAccessor;\n\n constructor(options: DynamoDBLockProviderOptions) {\n const opts = validateOptions(options);\n this.accessor = new DynamoDBAccessor(\n options.client ?? new DynamoDBClient({}),\n opts.tableName,\n opts.partitionKey,\n opts.sortKey,\n );\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { ConditionalCheckFailedException, UpdateItemCommand } from '@aws-sdk/client-dynamodb';\nimport { ClockProvider, type LockConfiguration, lockAtMostUntil, Utils, unlockTime } from '@tslock/core';\nimport { DynamoDBLock } from './dynamodb-lock.js';\n\nexport class DynamoDBAccessor {\n constructor(\n private readonly client: DynamoDBClient,\n private readonly tableName: string,\n private readonly partitionKey: string,\n private readonly sortKey?: { name: string; value: string },\n ) {}\n\n private buildKey(name: string): Record<string, { S: string }> {\n const key: Record<string, { S: string }> = { [this.partitionKey]: { S: name } };\n if (this.sortKey) {\n key[this.sortKey.name] = { S: this.sortKey.value };\n }\n return key;\n }\n\n async lock(config: LockConfiguration): Promise<DynamoDBLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil, lockedAt = :lockedAt, lockedBy = :lockedBy',\n ConditionExpression: 'lockUntil <= :lockedAt OR attribute_not_exists(lockUntil)',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoLockAtMostUntil },\n ':lockedAt': { S: isoNow },\n ':lockedBy': { S: hostname },\n },\n }),\n );\n return new DynamoDBLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<DynamoDBLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoNewLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil',\n ConditionExpression: 'lockedBy = :lockedBy AND lockUntil > :now',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoNewLockAtMostUntil },\n ':lockedBy': { S: hostname },\n ':now': { S: isoNow },\n },\n }),\n );\n return new DynamoDBLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n const isoUnlock = Utils.toIsoString(unlockTime(config));\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :unlockTime',\n ConditionExpression: 'attribute_exists(#partitionKey)',\n ExpressionAttributeNames: {\n '#partitionKey': this.partitionKey,\n },\n ExpressionAttributeValues: {\n ':unlockTime': { S: isoUnlock },\n },\n }),\n );\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return;\n throw e;\n }\n }\n}\n","import { AbstractSimpleLock, type LockConfiguration, type SimpleLock } from '@tslock/core';\nimport type { DynamoDBAccessor } from './dynamodb-accessor.js';\n\nexport class DynamoDBLock extends AbstractSimpleLock {\n constructor(\n config: LockConfiguration,\n private readonly accessor: DynamoDBAccessor,\n ) {\n super(config);\n }\n\n protected override async doUnlock(): Promise<void> {\n await this.accessor.unlock(this.config);\n }\n\n protected override async doExtend(newConfig: LockConfiguration): Promise<SimpleLock | undefined> {\n return await this.accessor.extend(newConfig);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { LockException } from '@tslock/core';\n\nexport interface DynamoDBLockProviderOptions {\n client?: DynamoDBClient;\n tableName: string;\n partitionKey?: string;\n sortKey?: { name: string; value: string };\n}\n\nexport interface ResolvedOptions {\n tableName: string;\n partitionKey: string;\n sortKey?: { name: string; value: string };\n}\n\nexport function validateOptions(options: DynamoDBLockProviderOptions): ResolvedOptions {\n if (!options.tableName) throw new LockException('DynamoDBConfiguration: tableName is required');\n return {\n tableName: options.tableName,\n partitionKey: options.partitionKey ?? '_id',\n sortKey: options.sortKey,\n };\n}\n"],"mappings":"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","names":["import_client_dynamodb","import_core","import_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/dynamodb-lock-provider.ts","../src/dynamodb-accessor.ts","../src/dynamodb-lock-provider-options.ts"],"sourcesContent":["export { DynamoDBLockProvider } from './dynamodb-lock-provider.js';\nexport type { DynamoDBLockProviderOptions } from './dynamodb-lock-provider-options.js';\n","import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport { DynamoDBAccessor } from './dynamodb-accessor.js';\nimport { type DynamoDBLockProviderOptions, validateOptions } from './dynamodb-lock-provider-options.js';\n\nexport class DynamoDBLockProvider implements ExtensibleLockProvider {\n private readonly accessor: DynamoDBAccessor;\n\n constructor(options: DynamoDBLockProviderOptions) {\n const opts = validateOptions(options);\n this.accessor = new DynamoDBAccessor(\n options.client ?? new DynamoDBClient({}),\n opts.tableName,\n opts.partitionKey,\n opts.sortKey,\n );\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { ConditionalCheckFailedException, UpdateItemCommand } from '@aws-sdk/client-dynamodb';\nimport {\n ClockProvider,\n DelegatingSimpleLock,\n type LockConfiguration,\n lockAtMostUntil,\n type SimpleLock,\n Utils,\n unlockTime,\n} from '@tslock/core';\n\nexport class DynamoDBAccessor {\n constructor(\n private readonly client: DynamoDBClient,\n private readonly tableName: string,\n private readonly partitionKey: string,\n private readonly sortKey?: { name: string; value: string },\n ) {}\n\n private buildKey(name: string): Record<string, { S: string }> {\n const key: Record<string, { S: string }> = { [this.partitionKey]: { S: name } };\n if (this.sortKey) {\n key[this.sortKey.name] = { S: this.sortKey.value };\n }\n return key;\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil, lockedAt = :lockedAt, lockedBy = :lockedBy',\n ConditionExpression: 'lockUntil <= :lockedAt OR attribute_not_exists(lockUntil)',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoLockAtMostUntil },\n ':lockedAt': { S: isoNow },\n ':lockedBy': { S: hostname },\n },\n }),\n );\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoNewLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil',\n ConditionExpression: 'lockedBy = :lockedBy AND lockUntil > :now',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoNewLockAtMostUntil },\n ':lockedBy': { S: hostname },\n ':now': { S: isoNow },\n },\n }),\n );\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n const isoUnlock = Utils.toIsoString(unlockTime(config));\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :unlockTime',\n ConditionExpression: 'attribute_exists(#partitionKey)',\n ExpressionAttributeNames: {\n '#partitionKey': this.partitionKey,\n },\n ExpressionAttributeValues: {\n ':unlockTime': { S: isoUnlock },\n },\n }),\n );\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return;\n throw e;\n }\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { LockException } from '@tslock/core';\n\nexport interface DynamoDBLockProviderOptions {\n client?: DynamoDBClient;\n tableName: string;\n partitionKey?: string;\n sortKey?: { name: string; value: string };\n}\n\nexport interface ResolvedOptions {\n tableName: string;\n partitionKey: string;\n sortKey?: { name: string; value: string };\n}\n\nexport function validateOptions(options: DynamoDBLockProviderOptions): ResolvedOptions {\n if (!options.tableName) throw new LockException('DynamoDBConfiguration: tableName is required');\n return {\n tableName: options.tableName,\n partitionKey: options.partitionKey ?? '_id',\n sortKey: options.sortKey,\n };\n}\n"],"mappings":"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","names":["import_client_dynamodb","import_core"]}
package/dist/index.js CHANGED
@@ -3,25 +3,13 @@ import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
3
3
 
4
4
  // src/dynamodb-accessor.ts
5
5
  import { ConditionalCheckFailedException, UpdateItemCommand } from "@aws-sdk/client-dynamodb";
6
- import { ClockProvider, lockAtMostUntil, Utils, unlockTime } from "@tslock/core";
7
-
8
- // src/dynamodb-lock.ts
9
- import { AbstractSimpleLock } from "@tslock/core";
10
- var DynamoDBLock = class extends AbstractSimpleLock {
11
- constructor(config, accessor) {
12
- super(config);
13
- this.accessor = accessor;
14
- }
15
- accessor;
16
- async doUnlock() {
17
- await this.accessor.unlock(this.config);
18
- }
19
- async doExtend(newConfig) {
20
- return await this.accessor.extend(newConfig);
21
- }
22
- };
23
-
24
- // src/dynamodb-accessor.ts
6
+ import {
7
+ ClockProvider,
8
+ DelegatingSimpleLock,
9
+ lockAtMostUntil,
10
+ Utils,
11
+ unlockTime
12
+ } from "@tslock/core";
25
13
  var DynamoDBAccessor = class {
26
14
  constructor(client, tableName, partitionKey, sortKey) {
27
15
  this.client = client;
@@ -59,7 +47,7 @@ var DynamoDBAccessor = class {
59
47
  }
60
48
  })
61
49
  );
62
- return new DynamoDBLock(config, this);
50
+ return new DelegatingSimpleLock(config, this);
63
51
  } catch (e) {
64
52
  if (e instanceof ConditionalCheckFailedException) return void 0;
65
53
  throw e;
@@ -84,7 +72,7 @@ var DynamoDBAccessor = class {
84
72
  }
85
73
  })
86
74
  );
87
- return new DynamoDBLock(config, this);
75
+ return new DelegatingSimpleLock(config, this);
88
76
  } catch (e) {
89
77
  if (e instanceof ConditionalCheckFailedException) return void 0;
90
78
  throw e;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dynamodb-lock-provider.ts","../src/dynamodb-accessor.ts","../src/dynamodb-lock.ts","../src/dynamodb-lock-provider-options.ts"],"sourcesContent":["import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport { DynamoDBAccessor } from './dynamodb-accessor.js';\nimport { type DynamoDBLockProviderOptions, validateOptions } from './dynamodb-lock-provider-options.js';\n\nexport class DynamoDBLockProvider implements ExtensibleLockProvider {\n private readonly accessor: DynamoDBAccessor;\n\n constructor(options: DynamoDBLockProviderOptions) {\n const opts = validateOptions(options);\n this.accessor = new DynamoDBAccessor(\n options.client ?? new DynamoDBClient({}),\n opts.tableName,\n opts.partitionKey,\n opts.sortKey,\n );\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { ConditionalCheckFailedException, UpdateItemCommand } from '@aws-sdk/client-dynamodb';\nimport { ClockProvider, type LockConfiguration, lockAtMostUntil, Utils, unlockTime } from '@tslock/core';\nimport { DynamoDBLock } from './dynamodb-lock.js';\n\nexport class DynamoDBAccessor {\n constructor(\n private readonly client: DynamoDBClient,\n private readonly tableName: string,\n private readonly partitionKey: string,\n private readonly sortKey?: { name: string; value: string },\n ) {}\n\n private buildKey(name: string): Record<string, { S: string }> {\n const key: Record<string, { S: string }> = { [this.partitionKey]: { S: name } };\n if (this.sortKey) {\n key[this.sortKey.name] = { S: this.sortKey.value };\n }\n return key;\n }\n\n async lock(config: LockConfiguration): Promise<DynamoDBLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil, lockedAt = :lockedAt, lockedBy = :lockedBy',\n ConditionExpression: 'lockUntil <= :lockedAt OR attribute_not_exists(lockUntil)',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoLockAtMostUntil },\n ':lockedAt': { S: isoNow },\n ':lockedBy': { S: hostname },\n },\n }),\n );\n return new DynamoDBLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<DynamoDBLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoNewLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil',\n ConditionExpression: 'lockedBy = :lockedBy AND lockUntil > :now',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoNewLockAtMostUntil },\n ':lockedBy': { S: hostname },\n ':now': { S: isoNow },\n },\n }),\n );\n return new DynamoDBLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n const isoUnlock = Utils.toIsoString(unlockTime(config));\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :unlockTime',\n ConditionExpression: 'attribute_exists(#partitionKey)',\n ExpressionAttributeNames: {\n '#partitionKey': this.partitionKey,\n },\n ExpressionAttributeValues: {\n ':unlockTime': { S: isoUnlock },\n },\n }),\n );\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return;\n throw e;\n }\n }\n}\n","import { AbstractSimpleLock, type LockConfiguration, type SimpleLock } from '@tslock/core';\nimport type { DynamoDBAccessor } from './dynamodb-accessor.js';\n\nexport class DynamoDBLock extends AbstractSimpleLock {\n constructor(\n config: LockConfiguration,\n private readonly accessor: DynamoDBAccessor,\n ) {\n super(config);\n }\n\n protected override async doUnlock(): Promise<void> {\n await this.accessor.unlock(this.config);\n }\n\n protected override async doExtend(newConfig: LockConfiguration): Promise<SimpleLock | undefined> {\n return await this.accessor.extend(newConfig);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { LockException } from '@tslock/core';\n\nexport interface DynamoDBLockProviderOptions {\n client?: DynamoDBClient;\n tableName: string;\n partitionKey?: string;\n sortKey?: { name: string; value: string };\n}\n\nexport interface ResolvedOptions {\n tableName: string;\n partitionKey: string;\n sortKey?: { name: string; value: string };\n}\n\nexport function validateOptions(options: DynamoDBLockProviderOptions): ResolvedOptions {\n if (!options.tableName) throw new LockException('DynamoDBConfiguration: tableName is required');\n return {\n tableName: options.tableName,\n partitionKey: options.partitionKey ?? '_id',\n sortKey: options.sortKey,\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/dynamodb-lock-provider.ts","../src/dynamodb-accessor.ts","../src/dynamodb-lock-provider-options.ts"],"sourcesContent":["import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport type { ExtensibleLockProvider, LockConfiguration, SimpleLock } from '@tslock/core';\nimport { DynamoDBAccessor } from './dynamodb-accessor.js';\nimport { type DynamoDBLockProviderOptions, validateOptions } from './dynamodb-lock-provider-options.js';\n\nexport class DynamoDBLockProvider implements ExtensibleLockProvider {\n private readonly accessor: DynamoDBAccessor;\n\n constructor(options: DynamoDBLockProviderOptions) {\n const opts = validateOptions(options);\n this.accessor = new DynamoDBAccessor(\n options.client ?? new DynamoDBClient({}),\n opts.tableName,\n opts.partitionKey,\n opts.sortKey,\n );\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n return this.accessor.lock(config);\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { ConditionalCheckFailedException, UpdateItemCommand } from '@aws-sdk/client-dynamodb';\nimport {\n ClockProvider,\n DelegatingSimpleLock,\n type LockConfiguration,\n lockAtMostUntil,\n type SimpleLock,\n Utils,\n unlockTime,\n} from '@tslock/core';\n\nexport class DynamoDBAccessor {\n constructor(\n private readonly client: DynamoDBClient,\n private readonly tableName: string,\n private readonly partitionKey: string,\n private readonly sortKey?: { name: string; value: string },\n ) {}\n\n private buildKey(name: string): Record<string, { S: string }> {\n const key: Record<string, { S: string }> = { [this.partitionKey]: { S: name } };\n if (this.sortKey) {\n key[this.sortKey.name] = { S: this.sortKey.value };\n }\n return key;\n }\n\n async lock(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil, lockedAt = :lockedAt, lockedBy = :lockedBy',\n ConditionExpression: 'lockUntil <= :lockedAt OR attribute_not_exists(lockUntil)',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoLockAtMostUntil },\n ':lockedAt': { S: isoNow },\n ':lockedBy': { S: hostname },\n },\n }),\n );\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async extend(config: LockConfiguration): Promise<SimpleLock | undefined> {\n const now = ClockProvider.now();\n const isoNow = Utils.toIsoString(now);\n const isoNewLockAtMostUntil = Utils.toIsoString(lockAtMostUntil(config));\n const hostname = Utils.getHostname();\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :lockUntil',\n ConditionExpression: 'lockedBy = :lockedBy AND lockUntil > :now',\n ExpressionAttributeValues: {\n ':lockUntil': { S: isoNewLockAtMostUntil },\n ':lockedBy': { S: hostname },\n ':now': { S: isoNow },\n },\n }),\n );\n return new DelegatingSimpleLock(config, this);\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return undefined;\n throw e;\n }\n }\n\n async unlock(config: LockConfiguration): Promise<void> {\n const isoUnlock = Utils.toIsoString(unlockTime(config));\n\n try {\n await this.client.send(\n new UpdateItemCommand({\n TableName: this.tableName,\n Key: this.buildKey(config.name),\n UpdateExpression: 'SET lockUntil = :unlockTime',\n ConditionExpression: 'attribute_exists(#partitionKey)',\n ExpressionAttributeNames: {\n '#partitionKey': this.partitionKey,\n },\n ExpressionAttributeValues: {\n ':unlockTime': { S: isoUnlock },\n },\n }),\n );\n } catch (e) {\n if (e instanceof ConditionalCheckFailedException) return;\n throw e;\n }\n }\n}\n","import type { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { LockException } from '@tslock/core';\n\nexport interface DynamoDBLockProviderOptions {\n client?: DynamoDBClient;\n tableName: string;\n partitionKey?: string;\n sortKey?: { name: string; value: string };\n}\n\nexport interface ResolvedOptions {\n tableName: string;\n partitionKey: string;\n sortKey?: { name: string; value: string };\n}\n\nexport function validateOptions(options: DynamoDBLockProviderOptions): ResolvedOptions {\n if (!options.tableName) throw new LockException('DynamoDBConfiguration: tableName is required');\n return {\n tableName: options.tableName,\n partitionKey: options.partitionKey ?? '_id',\n sortKey: options.sortKey,\n };\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tslock/dynamodb",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "TSLock provider for Amazon DynamoDB",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@aws-sdk/client-dynamodb": "^3.0.0",
26
- "@tslock/core": "2.2.0"
26
+ "@tslock/core": "2.3.0"
27
27
  },
28
28
  "peerDependenciesMeta": {
29
29
  "@tslock/core": {
@@ -39,8 +39,8 @@
39
39
  "tsup": "^8.0.0",
40
40
  "vitest": "^4.1.11",
41
41
  "@aws-sdk/client-dynamodb": "^3.0.0",
42
- "@tslock/core": "2.2.0",
43
- "@tslock/test-support": "2.2.0"
42
+ "@tslock/core": "2.3.0",
43
+ "@tslock/test-support": "2.3.0"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"