cmp-aws-database 1.7.1-dev.27 → 1.7.1-dev.28

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.
@@ -12,15 +12,32 @@ type DynamooseModelLike = {
12
12
  export declare class GenericDynamooseDAO<T extends BaseDynamooseModel> {
13
13
  protected readonly model: DynamooseModelLike;
14
14
  protected readonly primaryKeyName: keyof T & string;
15
+ protected readonly sortKeyName?: (keyof T & string) | undefined;
15
16
  /**
16
17
  * @param model Dynamoose model instance for the target table.
17
18
  * @param primaryKeyName Attribute name used as the table hash key.
18
19
  */
19
- constructor(model: DynamooseModelLike, primaryKeyName: keyof T & string);
20
+ constructor(model: DynamooseModelLike, primaryKeyName: keyof T & string, sortKeyName?: (keyof T & string) | undefined);
20
21
  /**
21
22
  * Builds a DynamoDB key object from a single primary key value.
22
23
  */
23
- protected getKeyObject(primaryKeyValue: string): DynamoKey;
24
+ protected getKeyObject(primaryKeyValue: string, sortKeyValue?: string): DynamoKey;
25
+ /**
26
+ * Extracts and validates string primary key value from an item.
27
+ */
28
+ protected getPrimaryKeyValueFromItem(item: T): string;
29
+ /**
30
+ * Extracts and validates sort key value from an item when sort key is configured.
31
+ */
32
+ protected getSortKeyValueFromItem(item: T): string | undefined;
33
+ /**
34
+ * Builds complete key object (hash + optional sort) from an item.
35
+ */
36
+ protected getItemKeyObject(item: T): DynamoKey;
37
+ /**
38
+ * Serializes key object for stable set/map comparisons.
39
+ */
40
+ protected serializeKey(key: DynamoKey): string;
24
41
  /**
25
42
  * Creates a new record and automatically stamps created audit fields.
26
43
  */
@@ -28,23 +45,32 @@ export declare class GenericDynamooseDAO<T extends BaseDynamooseModel> {
28
45
  /**
29
46
  * Updates an existing record and automatically stamps updated audit fields.
30
47
  */
31
- update(primaryKeyValue: string, updates: Partial<T>, authContext?: AuthContext): Promise<T>;
48
+ update(primaryKeyValue: string, updates: Partial<T>, authContext?: AuthContext, sortKeyValue?: string): Promise<T>;
32
49
  /**
33
50
  * Deletes one record by primary key.
34
51
  */
35
- delete(primaryKeyValue: string): Promise<T | undefined>;
52
+ delete(primaryKeyValue: string, sortKeyValue?: string): Promise<T | undefined>;
36
53
  /**
37
54
  * Fetches one record by primary key. Returns null when not found.
38
55
  */
39
- get(primaryKeyValue: string): Promise<T | null>;
56
+ get(primaryKeyValue: string, sortKeyValue?: string): Promise<T | null>;
40
57
  /**
41
58
  * Writes multiple records in a batch and throws if any item is left unprocessed.
42
59
  */
43
60
  batchSave(items: T[], authContext?: AuthContext): Promise<T[]>;
61
+ /**
62
+ * Upserts multiple records by primary key.
63
+ * New keys are created (created_* fields), existing keys are updated (updated_* fields).
64
+ */
65
+ batchUpsert(items: T[], authContext?: AuthContext): Promise<T[]>;
44
66
  /**
45
67
  * Fetches multiple records by primary keys.
46
68
  */
47
69
  batchGet(primaryKeyValues: string[]): Promise<T[]>;
70
+ /**
71
+ * Fetches multiple records by key objects (supports hash + optional sort key).
72
+ */
73
+ batchGetByKeys(keys: DynamoKey[]): Promise<T[]>;
48
74
  /**
49
75
  * Decodes a base64 continuation token into DynamoDB last evaluated key.
50
76
  */
@@ -6,15 +6,65 @@ class GenericDynamooseDAO {
6
6
  * @param model Dynamoose model instance for the target table.
7
7
  * @param primaryKeyName Attribute name used as the table hash key.
8
8
  */
9
- constructor(model, primaryKeyName) {
9
+ constructor(model, primaryKeyName, sortKeyName) {
10
10
  this.model = model;
11
11
  this.primaryKeyName = primaryKeyName;
12
+ this.sortKeyName = sortKeyName;
12
13
  }
13
14
  /**
14
15
  * Builds a DynamoDB key object from a single primary key value.
15
16
  */
16
- getKeyObject(primaryKeyValue) {
17
- return { [this.primaryKeyName]: primaryKeyValue };
17
+ getKeyObject(primaryKeyValue, sortKeyValue) {
18
+ const keyObject = { [this.primaryKeyName]: primaryKeyValue };
19
+ if (this.sortKeyName) {
20
+ if (!sortKeyValue) {
21
+ throw new Error(`Missing sort key value for '${this.sortKeyName}'`);
22
+ }
23
+ keyObject[this.sortKeyName] = sortKeyValue;
24
+ }
25
+ return keyObject;
26
+ }
27
+ /**
28
+ * Extracts and validates string primary key value from an item.
29
+ */
30
+ getPrimaryKeyValueFromItem(item) {
31
+ const keyRecord = item;
32
+ const keyValue = keyRecord[this.primaryKeyName];
33
+ if (typeof keyValue !== "string" || keyValue.length === 0) {
34
+ throw new Error(`Missing or invalid primary key value for '${this.primaryKeyName}'`);
35
+ }
36
+ return keyValue;
37
+ }
38
+ /**
39
+ * Extracts and validates sort key value from an item when sort key is configured.
40
+ */
41
+ getSortKeyValueFromItem(item) {
42
+ if (!this.sortKeyName) {
43
+ return undefined;
44
+ }
45
+ const keyRecord = item;
46
+ const keyValue = keyRecord[this.sortKeyName];
47
+ if (typeof keyValue !== "string" || keyValue.length === 0) {
48
+ throw new Error(`Missing or invalid sort key value for '${this.sortKeyName}'`);
49
+ }
50
+ return keyValue;
51
+ }
52
+ /**
53
+ * Builds complete key object (hash + optional sort) from an item.
54
+ */
55
+ getItemKeyObject(item) {
56
+ const primaryKeyValue = this.getPrimaryKeyValueFromItem(item);
57
+ const sortKeyValue = this.getSortKeyValueFromItem(item);
58
+ return this.getKeyObject(primaryKeyValue, sortKeyValue);
59
+ }
60
+ /**
61
+ * Serializes key object for stable set/map comparisons.
62
+ */
63
+ serializeKey(key) {
64
+ if (!this.sortKeyName) {
65
+ return `${key[this.primaryKeyName]}`;
66
+ }
67
+ return `${key[this.primaryKeyName]}#${key[this.sortKeyName]}`;
18
68
  }
19
69
  /**
20
70
  * Creates a new record and automatically stamps created audit fields.
@@ -31,9 +81,9 @@ class GenericDynamooseDAO {
31
81
  /**
32
82
  * Updates an existing record and automatically stamps updated audit fields.
33
83
  */
34
- async update(primaryKeyValue, updates, authContext) {
84
+ async update(primaryKeyValue, updates, authContext, sortKeyValue) {
35
85
  const updateFn = this.model.update;
36
- const updated = await updateFn(this.getKeyObject(primaryKeyValue), {
86
+ const updated = await updateFn(this.getKeyObject(primaryKeyValue, sortKeyValue), {
37
87
  ...updates,
38
88
  updated_time: new Date(),
39
89
  updated_user: authContext?.userSub
@@ -43,17 +93,17 @@ class GenericDynamooseDAO {
43
93
  /**
44
94
  * Deletes one record by primary key.
45
95
  */
46
- async delete(primaryKeyValue) {
96
+ async delete(primaryKeyValue, sortKeyValue) {
47
97
  const deleteFn = this.model.delete;
48
- const deleted = await deleteFn(this.getKeyObject(primaryKeyValue));
98
+ const deleted = await deleteFn(this.getKeyObject(primaryKeyValue, sortKeyValue));
49
99
  return deleted;
50
100
  }
51
101
  /**
52
102
  * Fetches one record by primary key. Returns null when not found.
53
103
  */
54
- async get(primaryKeyValue) {
104
+ async get(primaryKeyValue, sortKeyValue) {
55
105
  const getFn = this.model.get;
56
- const item = await getFn(this.getKeyObject(primaryKeyValue));
106
+ const item = await getFn(this.getKeyObject(primaryKeyValue, sortKeyValue));
57
107
  return item ?? null;
58
108
  }
59
109
  /**
@@ -73,11 +123,48 @@ class GenericDynamooseDAO {
73
123
  }
74
124
  return inputItems;
75
125
  }
126
+ /**
127
+ * Upserts multiple records by primary key.
128
+ * New keys are created (created_* fields), existing keys are updated (updated_* fields).
129
+ */
130
+ async batchUpsert(items, authContext) {
131
+ const now = new Date();
132
+ const keys = items.map((item) => this.getItemKeyObject(item));
133
+ const existingItems = await this.batchGetByKeys(keys);
134
+ const existingKeySet = new Set(existingItems.map((item) => this.serializeKey(this.getItemKeyObject(item))));
135
+ const upsertItems = items.map((item) => {
136
+ const itemKey = this.getItemKeyObject(item);
137
+ if (existingKeySet.has(this.serializeKey(itemKey))) {
138
+ return {
139
+ ...item,
140
+ updated_time: now,
141
+ updated_user: authContext?.userSub
142
+ };
143
+ }
144
+ return {
145
+ ...item,
146
+ created_time: now,
147
+ created_user: authContext?.userSub
148
+ };
149
+ });
150
+ const batchPutFn = this.model.batchPut;
151
+ const result = await batchPutFn(upsertItems);
152
+ if (result.unprocessedItems.length > 0) {
153
+ throw new Error(`Batch upsert partially failed. Unprocessed items: ${result.unprocessedItems.length}`);
154
+ }
155
+ return upsertItems;
156
+ }
76
157
  /**
77
158
  * Fetches multiple records by primary keys.
78
159
  */
79
160
  async batchGet(primaryKeyValues) {
80
161
  const keys = primaryKeyValues.map((value) => this.getKeyObject(value));
162
+ return this.batchGetByKeys(keys);
163
+ }
164
+ /**
165
+ * Fetches multiple records by key objects (supports hash + optional sort key).
166
+ */
167
+ async batchGetByKeys(keys) {
81
168
  const batchGetFn = this.model.batchGet;
82
169
  const items = await batchGetFn(keys);
83
170
  return items;
@@ -107,4 +194,4 @@ class GenericDynamooseDAO {
107
194
  }
108
195
  }
109
196
  exports.GenericDynamooseDAO = GenericDynamooseDAO;
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1keW5hbW9vc2UtZGFvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtZHluYW1vb3NlLWRhby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5QkEsTUFBYSxtQkFBbUI7SUFDNUI7OztPQUdHO0lBQ0gsWUFDdUIsS0FBeUIsRUFDekIsY0FBZ0M7UUFEaEMsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO0lBQ25ELENBQUM7SUFFTDs7T0FFRztJQUNPLFlBQVksQ0FBQyxlQUF1QjtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFPLEVBQUUsV0FBeUI7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDO1lBQzNCLEdBQUcsSUFBSTtZQUNQLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRTtZQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87U0FDckMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUF1QixFQUFFLE9BQW1CLEVBQUUsV0FBeUI7UUFDaEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUNsQztZQUNJLEdBQUcsT0FBTztZQUNWLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRTtZQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87U0FDckMsQ0FDSixD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Q0FDSjtBQXZIRCxrREF1SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHluYW1vb3NlTW9kZWwsIEF1dGhDb250ZXh0IH0gZnJvbSBcIi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcblxudHlwZSBEeW5hbW9LZXlWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsO1xuZXhwb3J0IHR5cGUgRHluYW1vS2V5ID0gUmVjb3JkPHN0cmluZywgRHluYW1vS2V5VmFsdWU+O1xuXG50eXBlIEJhdGNoUHV0UmVzcG9uc2U8VD4gPSB7XG4gICAgdW5wcm9jZXNzZWRJdGVtczogUGFydGlhbDxUPltdO1xufTtcblxudHlwZSBDcmVhdGVGbjxUPiA9IChpdGVtOiBQYXJ0aWFsPFQ+KSA9PiBQcm9taXNlPG9iamVjdD47XG50eXBlIFVwZGF0ZUZuPFQ+ID0gKGtleTogRHluYW1vS2V5LCB1cGRhdGU6IFBhcnRpYWw8VD4pID0+IFByb21pc2U8b2JqZWN0PjtcbnR5cGUgRGVsZXRlRm4gPSAoa2V5OiBEeW5hbW9LZXkpID0+IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPjtcbnR5cGUgR2V0Rm4gPSAoa2V5OiBEeW5hbW9LZXkpID0+IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPjtcbnR5cGUgQmF0Y2hQdXRGbjxUPiA9IChpdGVtczogUGFydGlhbDxUPltdKSA9PiBQcm9taXNlPEJhdGNoUHV0UmVzcG9uc2U8VD4+O1xudHlwZSBCYXRjaEdldEZuID0gKGtleXM6IER5bmFtb0tleVtdKSA9PiBQcm9taXNlPG9iamVjdFtdPjtcblxudHlwZSBEeW5hbW9vc2VNb2RlbExpa2UgPSB7XG4gICAgY3JlYXRlOiBGdW5jdGlvbjtcbiAgICB1cGRhdGU6IEZ1bmN0aW9uO1xuICAgIGdldDogRnVuY3Rpb247XG4gICAgZGVsZXRlOiBGdW5jdGlvbjtcbiAgICBiYXRjaFB1dDogRnVuY3Rpb247XG4gICAgYmF0Y2hHZXQ6IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IGNsYXNzIEdlbmVyaWNEeW5hbW9vc2VEQU88VCBleHRlbmRzIEJhc2VEeW5hbW9vc2VNb2RlbD4ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtb2RlbCBEeW5hbW9vc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRoZSB0YXJnZXQgdGFibGUuXG4gICAgICogQHBhcmFtIHByaW1hcnlLZXlOYW1lIEF0dHJpYnV0ZSBuYW1lIHVzZWQgYXMgdGhlIHRhYmxlIGhhc2gga2V5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWw6IER5bmFtb29zZU1vZGVsTGlrZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByaW1hcnlLZXlOYW1lOiBrZXlvZiBUICYgc3RyaW5nXG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhIER5bmFtb0RCIGtleSBvYmplY3QgZnJvbSBhIHNpbmdsZSBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZTogc3RyaW5nKTogRHluYW1vS2V5IHtcbiAgICAgICAgcmV0dXJuIHsgW3RoaXMucHJpbWFyeUtleU5hbWVdOiBwcmltYXJ5S2V5VmFsdWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJlY29yZCBhbmQgYXV0b21hdGljYWxseSBzdGFtcHMgY3JlYXRlZCBhdWRpdCBmaWVsZHMuXG4gICAgICovXG4gICAgYXN5bmMgc2F2ZShpdGVtOiBULCBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZuID0gdGhpcy5tb2RlbC5jcmVhdGUgYXMgQ3JlYXRlRm48VD47XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVGbih7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgY3JlYXRlZF90aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgY3JlYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWQgYXMgVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIHJlY29yZCBhbmQgYXV0b21hdGljYWxseSBzdGFtcHMgdXBkYXRlZCBhdWRpdCBmaWVsZHMuXG4gICAgICovXG4gICAgYXN5bmMgdXBkYXRlKHByaW1hcnlLZXlWYWx1ZTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFQ+LCBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZUZuID0gdGhpcy5tb2RlbC51cGRhdGUgYXMgVXBkYXRlRm48VD47XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB1cGRhdGVGbihcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdXBkYXRlZCBhcyBUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgb25lIHJlY29yZCBieSBwcmltYXJ5IGtleS5cbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUocHJpbWFyeUtleVZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZGVsZXRlRm4gPSB0aGlzLm1vZGVsLmRlbGV0ZSBhcyBEZWxldGVGbjtcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGRlbGV0ZUZuKHRoaXMuZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZSkpO1xuICAgICAgICByZXR1cm4gZGVsZXRlZCBhcyBUIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgb25lIHJlY29yZCBieSBwcmltYXJ5IGtleS4gUmV0dXJucyBudWxsIHdoZW4gbm90IGZvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGdldChwcmltYXJ5S2V5VmFsdWU6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgZ2V0Rm4gPSB0aGlzLm1vZGVsLmdldCBhcyBHZXRGbjtcbiAgICAgICAgY29uc3QgaXRlbSA9IGF3YWl0IGdldEZuKHRoaXMuZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZSkpO1xuICAgICAgICByZXR1cm4gKGl0ZW0gYXMgVCB8IHVuZGVmaW5lZCkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIGJhdGNoIGFuZCB0aHJvd3MgaWYgYW55IGl0ZW0gaXMgbGVmdCB1bnByb2Nlc3NlZC5cbiAgICAgKi9cbiAgICBhc3luYyBiYXRjaFNhdmUoaXRlbXM6IFRbXSwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGlucHV0SXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgY3JlYXRlZF90aW1lOiBub3csXG4gICAgICAgICAgICBjcmVhdGVkX3VzZXI6IGF1dGhDb250ZXh0Py51c2VyU3ViXG4gICAgICAgIH0pKSBhcyBUW107XG5cbiAgICAgICAgY29uc3QgYmF0Y2hQdXRGbiA9IHRoaXMubW9kZWwuYmF0Y2hQdXQgYXMgQmF0Y2hQdXRGbjxUPjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmF0Y2hQdXRGbihpbnB1dEl0ZW1zKTtcbiAgICAgICAgaWYgKHJlc3VsdC51bnByb2Nlc3NlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmF0Y2ggc2F2ZSBwYXJ0aWFsbHkgZmFpbGVkLiBVbnByb2Nlc3NlZCBpdGVtczogJHtyZXN1bHQudW5wcm9jZXNzZWRJdGVtcy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXRJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIG11bHRpcGxlIHJlY29yZHMgYnkgcHJpbWFyeSBrZXlzLlxuICAgICAqL1xuICAgIGFzeW5jIGJhdGNoR2V0KHByaW1hcnlLZXlWYWx1ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxUW10+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHByaW1hcnlLZXlWYWx1ZXMubWFwKCh2YWx1ZSkgPT4gdGhpcy5nZXRLZXlPYmplY3QodmFsdWUpKTtcbiAgICAgICAgY29uc3QgYmF0Y2hHZXRGbiA9IHRoaXMubW9kZWwuYmF0Y2hHZXQgYXMgQmF0Y2hHZXRGbjtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBiYXRjaEdldEZuKGtleXMpO1xuICAgICAgICByZXR1cm4gaXRlbXMgYXMgVFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY29kZXMgYSBiYXNlNjQgY29udGludWF0aW9uIHRva2VuIGludG8gRHluYW1vREIgbGFzdCBldmFsdWF0ZWQga2V5LlxuICAgICAqL1xuICAgIGRlY29kZShjb250aW51YXRpb25Ub2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogRHluYW1vS2V5IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFjb250aW51YXRpb25Ub2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShjb250aW51YXRpb25Ub2tlbiwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBEeW5hbW9LZXk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbnRpbnVhdGlvblRva2VuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyBEeW5hbW9EQiBsYXN0IGV2YWx1YXRlZCBrZXkgaW50byBhIGJhc2U2NCBjb250aW51YXRpb24gdG9rZW4uXG4gICAgICovXG4gICAgYXN5bmMgZW5jb2RlKGxhc3RFdmFsdWF0ZWRLZXk6IER5bmFtb0tleSB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmICghbGFzdEV2YWx1YXRlZEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShsYXN0RXZhbHVhdGVkS2V5KSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgfVxufVxuIl19
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1keW5hbW9vc2UtZGFvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jhc2UtZHluYW1vb3NlLWRhby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5QkEsTUFBYSxtQkFBbUI7SUFDNUI7OztPQUdHO0lBQ0gsWUFDdUIsS0FBeUIsRUFDekIsY0FBZ0MsRUFDaEMsV0FBOEI7UUFGOUIsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtJQUNqRCxDQUFDO0lBRUw7O09BRUc7SUFDTyxZQUFZLENBQUMsZUFBdUIsRUFBRSxZQUFxQjtRQUNqRSxNQUFNLFNBQVMsR0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ3hFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDTywwQkFBMEIsQ0FBQyxJQUFPO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQTZELENBQUM7UUFDaEYsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FB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dGVudCI6WyJpbXBvcnQgeyBCYXNlRHluYW1vb3NlTW9kZWwsIEF1dGhDb250ZXh0IH0gZnJvbSBcIi4vYmFzZS1keW5hbW9vc2UtbW9kZWxcIjtcblxudHlwZSBEeW5hbW9LZXlWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsO1xuZXhwb3J0IHR5cGUgRHluYW1vS2V5ID0gUmVjb3JkPHN0cmluZywgRHluYW1vS2V5VmFsdWU+O1xuXG50eXBlIEJhdGNoUHV0UmVzcG9uc2U8VD4gPSB7XG4gICAgdW5wcm9jZXNzZWRJdGVtczogUGFydGlhbDxUPltdO1xufTtcblxudHlwZSBDcmVhdGVGbjxUPiA9IChpdGVtOiBQYXJ0aWFsPFQ+KSA9PiBQcm9taXNlPG9iamVjdD47XG50eXBlIFVwZGF0ZUZuPFQ+ID0gKGtleTogRHluYW1vS2V5LCB1cGRhdGU6IFBhcnRpYWw8VD4pID0+IFByb21pc2U8b2JqZWN0PjtcbnR5cGUgRGVsZXRlRm4gPSAoa2V5OiBEeW5hbW9LZXkpID0+IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPjtcbnR5cGUgR2V0Rm4gPSAoa2V5OiBEeW5hbW9LZXkpID0+IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPjtcbnR5cGUgQmF0Y2hQdXRGbjxUPiA9IChpdGVtczogUGFydGlhbDxUPltdKSA9PiBQcm9taXNlPEJhdGNoUHV0UmVzcG9uc2U8VD4+O1xudHlwZSBCYXRjaEdldEZuID0gKGtleXM6IER5bmFtb0tleVtdKSA9PiBQcm9taXNlPG9iamVjdFtdPjtcblxudHlwZSBEeW5hbW9vc2VNb2RlbExpa2UgPSB7XG4gICAgY3JlYXRlOiBGdW5jdGlvbjtcbiAgICB1cGRhdGU6IEZ1bmN0aW9uO1xuICAgIGdldDogRnVuY3Rpb247XG4gICAgZGVsZXRlOiBGdW5jdGlvbjtcbiAgICBiYXRjaFB1dDogRnVuY3Rpb247XG4gICAgYmF0Y2hHZXQ6IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IGNsYXNzIEdlbmVyaWNEeW5hbW9vc2VEQU88VCBleHRlbmRzIEJhc2VEeW5hbW9vc2VNb2RlbD4ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtb2RlbCBEeW5hbW9vc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRoZSB0YXJnZXQgdGFibGUuXG4gICAgICogQHBhcmFtIHByaW1hcnlLZXlOYW1lIEF0dHJpYnV0ZSBuYW1lIHVzZWQgYXMgdGhlIHRhYmxlIGhhc2gga2V5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZWw6IER5bmFtb29zZU1vZGVsTGlrZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHByaW1hcnlLZXlOYW1lOiBrZXlvZiBUICYgc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc29ydEtleU5hbWU/OiBrZXlvZiBUICYgc3RyaW5nXG4gICAgKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhIER5bmFtb0RCIGtleSBvYmplY3QgZnJvbSBhIHNpbmdsZSBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZTogc3RyaW5nLCBzb3J0S2V5VmFsdWU/OiBzdHJpbmcpOiBEeW5hbW9LZXkge1xuICAgICAgICBjb25zdCBrZXlPYmplY3Q6IER5bmFtb0tleSA9IHsgW3RoaXMucHJpbWFyeUtleU5hbWVdOiBwcmltYXJ5S2V5VmFsdWUgfTtcbiAgICAgICAgaWYgKHRoaXMuc29ydEtleU5hbWUpIHtcbiAgICAgICAgICAgIGlmICghc29ydEtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHNvcnQga2V5IHZhbHVlIGZvciAnJHt0aGlzLnNvcnRLZXlOYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleU9iamVjdFt0aGlzLnNvcnRLZXlOYW1lXSA9IHNvcnRLZXlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5T2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIGFuZCB2YWxpZGF0ZXMgc3RyaW5nIHByaW1hcnkga2V5IHZhbHVlIGZyb20gYW4gaXRlbS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0UHJpbWFyeUtleVZhbHVlRnJvbUl0ZW0oaXRlbTogVCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGtleVJlY29yZCA9IGl0ZW0gYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9LZXlWYWx1ZSB8IHVuZGVmaW5lZD47XG4gICAgICAgIGNvbnN0IGtleVZhbHVlID0ga2V5UmVjb3JkW3RoaXMucHJpbWFyeUtleU5hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIGtleVZhbHVlICE9PSBcInN0cmluZ1wiIHx8IGtleVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcHJpbWFyeSBrZXkgdmFsdWUgZm9yICcke3RoaXMucHJpbWFyeUtleU5hbWV9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXlWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBhbmQgdmFsaWRhdGVzIHNvcnQga2V5IHZhbHVlIGZyb20gYW4gaXRlbSB3aGVuIHNvcnQga2V5IGlzIGNvbmZpZ3VyZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFNvcnRLZXlWYWx1ZUZyb21JdGVtKGl0ZW06IFQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuc29ydEtleU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gaXRlbSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIER5bmFtb0tleVZhbHVlIHwgdW5kZWZpbmVkPjtcbiAgICAgICAgY29uc3Qga2V5VmFsdWUgPSBrZXlSZWNvcmRbdGhpcy5zb3J0S2V5TmFtZV07XG4gICAgICAgIGlmICh0eXBlb2Yga2V5VmFsdWUgIT09IFwic3RyaW5nXCIgfHwga2V5VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBzb3J0IGtleSB2YWx1ZSBmb3IgJyR7dGhpcy5zb3J0S2V5TmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleVZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBjb21wbGV0ZSBrZXkgb2JqZWN0IChoYXNoICsgb3B0aW9uYWwgc29ydCkgZnJvbSBhbiBpdGVtLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRJdGVtS2V5T2JqZWN0KGl0ZW06IFQpOiBEeW5hbW9LZXkge1xuICAgICAgICBjb25zdCBwcmltYXJ5S2V5VmFsdWUgPSB0aGlzLmdldFByaW1hcnlLZXlWYWx1ZUZyb21JdGVtKGl0ZW0pO1xuICAgICAgICBjb25zdCBzb3J0S2V5VmFsdWUgPSB0aGlzLmdldFNvcnRLZXlWYWx1ZUZyb21JdGVtKGl0ZW0pO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRLZXlPYmplY3QocHJpbWFyeUtleVZhbHVlLCBzb3J0S2V5VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMga2V5IG9iamVjdCBmb3Igc3RhYmxlIHNldC9tYXAgY29tcGFyaXNvbnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlcmlhbGl6ZUtleShrZXk6IER5bmFtb0tleSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0S2V5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleVt0aGlzLnByaW1hcnlLZXlOYW1lXX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtrZXlbdGhpcy5wcmltYXJ5S2V5TmFtZV19IyR7a2V5W3RoaXMuc29ydEtleU5hbWVdfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByZWNvcmQgYW5kIGF1dG9tYXRpY2FsbHkgc3RhbXBzIGNyZWF0ZWQgYXVkaXQgZmllbGRzLlxuICAgICAqL1xuICAgIGFzeW5jIHNhdmUoaXRlbTogVCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCBjcmVhdGVGbiA9IHRoaXMubW9kZWwuY3JlYXRlIGFzIENyZWF0ZUZuPFQ+O1xuICAgICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY3JlYXRlRm4oe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGNyZWF0ZWRfdGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIGNyZWF0ZWRfdXNlcjogYXV0aENvbnRleHQ/LnVzZXJTdWJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkIGFzIFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhbiBleGlzdGluZyByZWNvcmQgYW5kIGF1dG9tYXRpY2FsbHkgc3RhbXBzIHVwZGF0ZWQgYXVkaXQgZmllbGRzLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShwcmltYXJ5S2V5VmFsdWU6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxUPiwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCwgc29ydEtleVZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZUZuID0gdGhpcy5tb2RlbC51cGRhdGUgYXMgVXBkYXRlRm48VD47XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB1cGRhdGVGbihcbiAgICAgICAgICAgIHRoaXMuZ2V0S2V5T2JqZWN0KHByaW1hcnlLZXlWYWx1ZSwgc29ydEtleVZhbHVlKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRfdGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3VzZXI6IGF1dGhDb250ZXh0Py51c2VyU3ViXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1cGRhdGVkIGFzIFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBvbmUgcmVjb3JkIGJ5IHByaW1hcnkga2V5LlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZShwcmltYXJ5S2V5VmFsdWU6IHN0cmluZywgc29ydEtleVZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZUZuID0gdGhpcy5tb2RlbC5kZWxldGUgYXMgRGVsZXRlRm47XG4gICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCBkZWxldGVGbih0aGlzLmdldEtleU9iamVjdChwcmltYXJ5S2V5VmFsdWUsIHNvcnRLZXlWYWx1ZSkpO1xuICAgICAgICByZXR1cm4gZGVsZXRlZCBhcyBUIHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgb25lIHJlY29yZCBieSBwcmltYXJ5IGtleS4gUmV0dXJucyBudWxsIHdoZW4gbm90IGZvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGdldChwcmltYXJ5S2V5VmFsdWU6IHN0cmluZywgc29ydEtleVZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBnZXRGbiA9IHRoaXMubW9kZWwuZ2V0IGFzIEdldEZuO1xuICAgICAgICBjb25zdCBpdGVtID0gYXdhaXQgZ2V0Rm4odGhpcy5nZXRLZXlPYmplY3QocHJpbWFyeUtleVZhbHVlLCBzb3J0S2V5VmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIChpdGVtIGFzIFQgfCB1bmRlZmluZWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGVzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBiYXRjaCBhbmQgdGhyb3dzIGlmIGFueSBpdGVtIGlzIGxlZnQgdW5wcm9jZXNzZWQuXG4gICAgICovXG4gICAgYXN5bmMgYmF0Y2hTYXZlKGl0ZW1zOiBUW10sIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHQpOiBQcm9taXNlPFRbXT4ge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBpbnB1dEl0ZW1zID0gaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGNyZWF0ZWRfdGltZTogbm93LFxuICAgICAgICAgICAgY3JlYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICB9KSkgYXMgVFtdO1xuXG4gICAgICAgIGNvbnN0IGJhdGNoUHV0Rm4gPSB0aGlzLm1vZGVsLmJhdGNoUHV0IGFzIEJhdGNoUHV0Rm48VD47XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhdGNoUHV0Rm4oaW5wdXRJdGVtcyk7XG4gICAgICAgIGlmIChyZXN1bHQudW5wcm9jZXNzZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhdGNoIHNhdmUgcGFydGlhbGx5IGZhaWxlZC4gVW5wcm9jZXNzZWQgaXRlbXM6ICR7cmVzdWx0LnVucHJvY2Vzc2VkSXRlbXMubGVuZ3RofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlucHV0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBzZXJ0cyBtdWx0aXBsZSByZWNvcmRzIGJ5IHByaW1hcnkga2V5LlxuICAgICAqIE5ldyBrZXlzIGFyZSBjcmVhdGVkIChjcmVhdGVkXyogZmllbGRzKSwgZXhpc3Rpbmcga2V5cyBhcmUgdXBkYXRlZCAodXBkYXRlZF8qIGZpZWxkcykuXG4gICAgICovXG4gICAgYXN5bmMgYmF0Y2hVcHNlcnQoaXRlbXM6IFRbXSwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0SXRlbUtleU9iamVjdChpdGVtKSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbXMgPSBhd2FpdCB0aGlzLmJhdGNoR2V0QnlLZXlzKGtleXMpO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nS2V5U2V0ID0gbmV3IFNldChcbiAgICAgICAgICAgIGV4aXN0aW5nSXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLnNlcmlhbGl6ZUtleSh0aGlzLmdldEl0ZW1LZXlPYmplY3QoaXRlbSkpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHVwc2VydEl0ZW1zID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtS2V5ID0gdGhpcy5nZXRJdGVtS2V5T2JqZWN0KGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nS2V5U2V0Lmhhcyh0aGlzLnNlcmlhbGl6ZUtleShpdGVtS2V5KSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkX3VzZXI6IGF1dGhDb250ZXh0Py51c2VyU3ViXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSBhcyBUW107XG5cbiAgICAgICAgY29uc3QgYmF0Y2hQdXRGbiA9IHRoaXMubW9kZWwuYmF0Y2hQdXQgYXMgQmF0Y2hQdXRGbjxUPjtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmF0Y2hQdXRGbih1cHNlcnRJdGVtcyk7XG4gICAgICAgIGlmIChyZXN1bHQudW5wcm9jZXNzZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhdGNoIHVwc2VydCBwYXJ0aWFsbHkgZmFpbGVkLiBVbnByb2Nlc3NlZCBpdGVtczogJHtyZXN1bHQudW5wcm9jZXNzZWRJdGVtcy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBzZXJ0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBtdWx0aXBsZSByZWNvcmRzIGJ5IHByaW1hcnkga2V5cy5cbiAgICAgKi9cbiAgICBhc3luYyBiYXRjaEdldChwcmltYXJ5S2V5VmFsdWVzOiBzdHJpbmdbXSk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBwcmltYXJ5S2V5VmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMuZ2V0S2V5T2JqZWN0KHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmJhdGNoR2V0QnlLZXlzKGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgbXVsdGlwbGUgcmVjb3JkcyBieSBrZXkgb2JqZWN0cyAoc3VwcG9ydHMgaGFzaCArIG9wdGlvbmFsIHNvcnQga2V5KS5cbiAgICAgKi9cbiAgICBhc3luYyBiYXRjaEdldEJ5S2V5cyhrZXlzOiBEeW5hbW9LZXlbXSk6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGNvbnN0IGJhdGNoR2V0Rm4gPSB0aGlzLm1vZGVsLmJhdGNoR2V0IGFzIEJhdGNoR2V0Rm47XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgYmF0Y2hHZXRGbihrZXlzKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIFRbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGVzIGEgYmFzZTY0IGNvbnRpbnVhdGlvbiB0b2tlbiBpbnRvIER5bmFtb0RCIGxhc3QgZXZhbHVhdGVkIGtleS5cbiAgICAgKi9cbiAgICBkZWNvZGUoY29udGludWF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCk6IER5bmFtb0tleSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghY29udGludWF0aW9uVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoQnVmZmVyLmZyb20oY29udGludWF0aW9uVG9rZW4sIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKSkgYXMgRHluYW1vS2V5O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb250aW51YXRpb25Ub2tlblwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgRHluYW1vREIgbGFzdCBldmFsdWF0ZWQga2V5IGludG8gYSBiYXNlNjQgY29udGludWF0aW9uIHRva2VuLlxuICAgICAqL1xuICAgIGFzeW5jIGVuY29kZShsYXN0RXZhbHVhdGVkS2V5OiBEeW5hbW9LZXkgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIWxhc3RFdmFsdWF0ZWRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkobGFzdEV2YWx1YXRlZEtleSkpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmp-aws-database",
3
- "version": "1.7.1-dev.27",
3
+ "version": "1.7.1-dev.28",
4
4
  "bin": {
5
5
  "craft-my-plate-database": "bin/craft-my-plate-database.js"
6
6
  },