cmp-aws-database 2.1.2-dev.6 → 2.1.2-dev.60
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/config/table-names.d.ts +10 -0
- package/dist/config/table-names.js +11 -1
- package/dist/customer-user/accompaniments/accompaniments-model.d.ts +1 -0
- package/dist/customer-user/accompaniments/accompaniments-model.js +5 -1
- package/dist/customer-user/add-ons/add-ons-model.d.ts +3 -0
- package/dist/customer-user/add-ons/add-ons-model.js +13 -1
- package/dist/customer-user/browse-history/browse-history-dao.d.ts +122 -0
- package/dist/customer-user/browse-history/browse-history-dao.js +173 -0
- package/dist/customer-user/browse-history/browse-history-model.d.ts +31 -0
- package/dist/customer-user/browse-history/browse-history-model.js +118 -0
- package/dist/customer-user/cart/cart-model.d.ts +7 -0
- package/dist/customer-user/cart/cart-model.js +25 -2
- package/dist/customer-user/catalogue/catalogue-items-model.js +5 -1
- package/dist/customer-user/category/category-dao.d.ts +29 -0
- package/dist/customer-user/category/category-dao.js +52 -1
- package/dist/customer-user/category/category-model.d.ts +1 -0
- package/dist/customer-user/category/category-model.js +5 -1
- package/dist/customer-user/cutlery/cutlery-model.d.ts +2 -0
- package/dist/customer-user/cutlery/cutlery-model.js +9 -1
- package/dist/customer-user/default-platter/default-platters-model.d.ts +2 -0
- package/dist/customer-user/default-platter/default-platters-model.js +9 -1
- package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.d.ts +1 -0
- package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.js +5 -1
- package/dist/customer-user/items-bundle/items-bundle-dao.d.ts +72 -0
- package/dist/customer-user/items-bundle/items-bundle-dao.js +117 -0
- package/dist/customer-user/items-bundle/items-bundle-model.d.ts +23 -0
- package/dist/customer-user/items-bundle/items-bundle-model.js +62 -0
- package/dist/customer-user/lsq-priority-updation/lsq-priority-updation-dao.d.ts +140 -0
- package/dist/customer-user/lsq-priority-updation/lsq-priority-updation-dao.js +253 -0
- package/dist/customer-user/lsq-priority-updation/lsq-priority-updation-model.d.ts +63 -0
- package/dist/customer-user/lsq-priority-updation/lsq-priority-updation-model.js +135 -0
- package/dist/customer-user/order-module/order/order-model.d.ts +1 -0
- package/dist/customer-user/order-module/order/order-model.js +5 -1
- package/dist/customer-user/order-module/plate-order/plate-order-model.d.ts +13 -0
- package/dist/customer-user/order-module/plate-order/plate-order-model.js +46 -2
- package/dist/customer-user/order-module/tracking/tracking-model.d.ts +9 -0
- package/dist/customer-user/order-module/tracking/tracking-model.js +33 -2
- package/dist/customer-user/replace-items/replace-items-model.d.ts +1 -0
- package/dist/customer-user/replace-items/replace-items-model.js +5 -1
- package/dist/customer-user/resume-journey/resume-journey-model.d.ts +11 -0
- package/dist/customer-user/resume-journey/resume-journey-model.js +41 -2
- package/dist/customer-user/testing-session/testing-session-dao.d.ts +86 -0
- package/dist/customer-user/testing-session/testing-session-dao.js +149 -0
- package/dist/customer-user/testing-session/testing-session-model.d.ts +30 -0
- package/dist/customer-user/testing-session/testing-session-model.js +104 -0
- package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.d.ts +114 -0
- package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.js +225 -0
- package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.d.ts +21 -0
- package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.js +70 -0
- package/index.js +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
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.itemsBundleDao = void 0;
|
|
7
|
+
const dynamoose_1 = __importDefault(require("dynamoose"));
|
|
8
|
+
const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
|
|
9
|
+
const items_bundle_model_1 = require("./items-bundle-model");
|
|
10
|
+
/**
|
|
11
|
+
* DAO for item bundles (add-on / replacement groupings).
|
|
12
|
+
*
|
|
13
|
+
* Table keys: `bundleId` (PK).
|
|
14
|
+
* Lookups:
|
|
15
|
+
* - `usageTypeIndex` → bundles by ADDON / REPLACEMENT
|
|
16
|
+
* - `bundleTypeIndex` → bundles by `bundleType`
|
|
17
|
+
*/
|
|
18
|
+
class ItemsBundleDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(items_bundle_model_1.ItemsBundleModel, "bundleId");
|
|
21
|
+
/**
|
|
22
|
+
* Creates one item-bundle record.
|
|
23
|
+
*
|
|
24
|
+
* Use when: admin defines a new ADDON or REPLACEMENT bundle.
|
|
25
|
+
* - `bundleId` auto-generates if omitted.
|
|
26
|
+
* - `usageType` must be `"ADDON"` or `"REPLACEMENT"`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* await itemsBundleDao.save({
|
|
30
|
+
* bundleType: "STARTERS",
|
|
31
|
+
* bundleName: "Premium Starters Pack",
|
|
32
|
+
* usageType: "ADDON"
|
|
33
|
+
* });
|
|
34
|
+
*/
|
|
35
|
+
this.save = async (item, authContext) => {
|
|
36
|
+
return super.save(item, authContext);
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Updates one item-bundle by `bundleId`.
|
|
40
|
+
*
|
|
41
|
+
* Use when: renaming a bundle or changing ADDON ↔ REPLACEMENT usage.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* await itemsBundleDao.update("bundle-uuid", { usageType: "REPLACEMENT" });
|
|
45
|
+
*/
|
|
46
|
+
this.update = async (bundleId, updates, authContext) => {
|
|
47
|
+
const updated = await items_bundle_model_1.ItemsBundleModel.update({ bundleId }, {
|
|
48
|
+
...updates,
|
|
49
|
+
updated_time: new Date(),
|
|
50
|
+
updated_user: authContext?.userSub
|
|
51
|
+
}, {
|
|
52
|
+
condition: new dynamoose_1.default.Condition().attribute("bundleId").exists()
|
|
53
|
+
});
|
|
54
|
+
return updated;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Fetches one item-bundle by primary key.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* const bundle = await itemsBundleDao.getById("bundle-uuid");
|
|
61
|
+
*/
|
|
62
|
+
this.getById = async (bundleId) => this.get(bundleId);
|
|
63
|
+
/**
|
|
64
|
+
* Lists bundles by usage type — ADDON or REPLACEMENT (GSI `usageTypeIndex`).
|
|
65
|
+
*
|
|
66
|
+
* Use when: showing only add-on packs or only replacement packs in UI.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* const addons = await itemsBundleDao.listByUsageType("ADDON", 20);
|
|
70
|
+
* const replacements = await itemsBundleDao.listByUsageType("REPLACEMENT", 20);
|
|
71
|
+
*/
|
|
72
|
+
this.listByUsageType = async (usageType, limit, token) => {
|
|
73
|
+
const decodedToken = this.decode(token);
|
|
74
|
+
let queryBuilder = items_bundle_model_1.ItemsBundleModel.query("usageType").eq(usageType).using("usageTypeIndex");
|
|
75
|
+
if (decodedToken) {
|
|
76
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
77
|
+
}
|
|
78
|
+
if (typeof limit === "number") {
|
|
79
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
80
|
+
}
|
|
81
|
+
const queryResult = await queryBuilder.exec();
|
|
82
|
+
return {
|
|
83
|
+
items: queryResult,
|
|
84
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Lists bundles by `bundleType` (GSI `bundleTypeIndex`).
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* const starters = await itemsBundleDao.listByBundleType("STARTERS", 20);
|
|
92
|
+
*/
|
|
93
|
+
this.listByBundleType = async (bundleType, limit, token) => {
|
|
94
|
+
const decodedToken = this.decode(token);
|
|
95
|
+
let queryBuilder = items_bundle_model_1.ItemsBundleModel.query("bundleType").eq(bundleType).using("bundleTypeIndex");
|
|
96
|
+
if (decodedToken) {
|
|
97
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
98
|
+
}
|
|
99
|
+
if (typeof limit === "number") {
|
|
100
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
101
|
+
}
|
|
102
|
+
const queryResult = await queryBuilder.exec();
|
|
103
|
+
return {
|
|
104
|
+
items: queryResult,
|
|
105
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Deletes one item-bundle by primary key.
|
|
110
|
+
*/
|
|
111
|
+
this.deleteById = async (bundleId) => {
|
|
112
|
+
await this.delete(bundleId);
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.itemsBundleDao = new ItemsBundleDao();
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtYnVuZGxlLWRhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXN0b21lci11c2VyL2l0ZW1zLWJ1bmRsZS9pdGVtcy1idW5kbGUtZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxpRUFBMEU7QUFFMUUsNkRBSzhCO0FBTzlCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGNBQWUsU0FBUSx3Q0FBZ0M7SUFDekQ7UUFDSSxLQUFLLENBQUMscUNBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFHeEM7Ozs7Ozs7Ozs7Ozs7V0FhRztRQUNILFNBQUksR0FBRyxLQUFLLEVBQUUsSUFBNEIsRUFBRSxXQUF5QixFQUF3QixFQUFFO1lBQzNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztRQUVGOzs7Ozs7O1dBT0c7UUFDSCxXQUFNLEdBQUcsS0FBSyxFQUNWLFFBQWdCLEVBQ2hCLE9BQTZCLEVBQzdCLFdBQXlCLEVBQ0wsRUFBRTtZQUN0QixNQUFNLE9BQU8sR0FBRyxNQUFNLHFDQUFnQixDQUFDLE1BQU0sQ0FDekMsRUFBRSxRQUFRLEVBQUUsRUFDWjtnQkFDSSxHQUFHLE9BQU87Z0JBQ1YsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUN4QixZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU87YUFDckMsRUFDRDtnQkFDSSxTQUFTLEVBQUUsSUFBSSxtQkFBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUU7YUFDdEUsQ0FDSixDQUFDO1lBQ0YsT0FBTyxPQUFpQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUVGOzs7OztXQUtHO1FBQ0gsWUFBTyxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUErQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0Rjs7Ozs7Ozs7V0FRRztRQUNILG9CQUFlLEdBQUcsS0FBSyxFQUNuQixTQUE4QixFQUM5QixLQUFjLEVBQ2QsS0FBYyxFQUNLLEVBQUU7WUFDckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLFlBQVksR0FBRyxxQ0FBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdGLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QyxPQUFPO2dCQUNILEtBQUssRUFBRSxXQUF1QztnQkFDOUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBZ0MsQ0FBQzthQUM3RSxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUY7Ozs7O1dBS0c7UUFDSCxxQkFBZ0IsR0FBRyxLQUFLLEVBQ3BCLFVBQWtCLEVBQ2xCLEtBQWMsRUFDZCxLQUFjLEVBQ0ssRUFBRTtZQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksWUFBWSxHQUFHLHFDQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDaEcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDZixZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLFdBQXVDO2dCQUM5QyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQyxDQUFDO2FBQzdFLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNILGVBQVUsR0FBRyxLQUFLLEVBQUUsUUFBZ0IsRUFBaUIsRUFBRTtZQUNuRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBbkhGLENBQUM7Q0FvSEo7QUFFWSxRQUFBLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGR5bmFtb29zZSBmcm9tIFwiZHluYW1vb3NlXCI7XG5pbXBvcnQgeyBEeW5hbW9LZXksIEdlbmVyaWNEeW5hbW9vc2VEQU8gfSBmcm9tIFwiLi4vLi4vYmFzZS1keW5hbW9vc2UtZGFvXCI7XG5pbXBvcnQgeyBBdXRoQ29udGV4dCB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgICBDcmVhdGVJdGVtc0J1bmRsZUlucHV0LFxuICAgIEl0ZW1CdW5kbGVVc2FnZVR5cGUsXG4gICAgSXRlbXNCdW5kbGUsXG4gICAgSXRlbXNCdW5kbGVNb2RlbFxufSBmcm9tIFwiLi9pdGVtcy1idW5kbGUtbW9kZWxcIjtcblxudHlwZSBMaXN0UmVzdWx0ID0ge1xuICAgIGl0ZW1zOiBJdGVtc0J1bmRsZVtdO1xuICAgIG5leHRUb2tlbj86IHN0cmluZztcbn07XG5cbi8qKlxuICogREFPIGZvciBpdGVtIGJ1bmRsZXMgKGFkZC1vbiAvIHJlcGxhY2VtZW50IGdyb3VwaW5ncykuXG4gKlxuICogVGFibGUga2V5czogYGJ1bmRsZUlkYCAoUEspLlxuICogTG9va3VwczpcbiAqIC0gYHVzYWdlVHlwZUluZGV4YCDihpIgYnVuZGxlcyBieSBBRERPTiAvIFJFUExBQ0VNRU5UXG4gKiAtIGBidW5kbGVUeXBlSW5kZXhgIOKGkiBidW5kbGVzIGJ5IGBidW5kbGVUeXBlYFxuICovXG5jbGFzcyBJdGVtc0J1bmRsZURhbyBleHRlbmRzIEdlbmVyaWNEeW5hbW9vc2VEQU88SXRlbXNCdW5kbGU+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoSXRlbXNCdW5kbGVNb2RlbCwgXCJidW5kbGVJZFwiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9uZSBpdGVtLWJ1bmRsZSByZWNvcmQuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogYWRtaW4gZGVmaW5lcyBhIG5ldyBBRERPTiBvciBSRVBMQUNFTUVOVCBidW5kbGUuXG4gICAgICogLSBgYnVuZGxlSWRgIGF1dG8tZ2VuZXJhdGVzIGlmIG9taXR0ZWQuXG4gICAgICogLSBgdXNhZ2VUeXBlYCBtdXN0IGJlIGBcIkFERE9OXCJgIG9yIGBcIlJFUExBQ0VNRU5UXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBpdGVtc0J1bmRsZURhby5zYXZlKHtcbiAgICAgKiAgICAgYnVuZGxlVHlwZTogXCJTVEFSVEVSU1wiLFxuICAgICAqICAgICBidW5kbGVOYW1lOiBcIlByZW1pdW0gU3RhcnRlcnMgUGFja1wiLFxuICAgICAqICAgICB1c2FnZVR5cGU6IFwiQURET05cIlxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHNhdmUgPSBhc3luYyAoaXRlbTogQ3JlYXRlSXRlbXNCdW5kbGVJbnB1dCwgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dCk6IFByb21pc2U8SXRlbXNCdW5kbGU+ID0+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnNhdmUoaXRlbSBhcyBJdGVtc0J1bmRsZSwgYXV0aENvbnRleHQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIG9uZSBpdGVtLWJ1bmRsZSBieSBgYnVuZGxlSWRgLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHJlbmFtaW5nIGEgYnVuZGxlIG9yIGNoYW5naW5nIEFERE9OIOKGlCBSRVBMQUNFTUVOVCB1c2FnZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXdhaXQgaXRlbXNCdW5kbGVEYW8udXBkYXRlKFwiYnVuZGxlLXV1aWRcIiwgeyB1c2FnZVR5cGU6IFwiUkVQTEFDRU1FTlRcIiB9KTtcbiAgICAgKi9cbiAgICB1cGRhdGUgPSBhc3luYyAoXG4gICAgICAgIGJ1bmRsZUlkOiBzdHJpbmcsXG4gICAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8SXRlbXNCdW5kbGU+LFxuICAgICAgICBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0XG4gICAgKTogUHJvbWlzZTxJdGVtc0J1bmRsZT4gPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgSXRlbXNCdW5kbGVNb2RlbC51cGRhdGUoXG4gICAgICAgICAgICB7IGJ1bmRsZUlkIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IG5ldyBkeW5hbW9vc2UuQ29uZGl0aW9uKCkuYXR0cmlidXRlKFwiYnVuZGxlSWRcIikuZXhpc3RzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQgYXMgdW5rbm93biBhcyBJdGVtc0J1bmRsZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBvbmUgaXRlbS1idW5kbGUgYnkgcHJpbWFyeSBrZXkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGl0ZW1zQnVuZGxlRGFvLmdldEJ5SWQoXCJidW5kbGUtdXVpZFwiKTtcbiAgICAgKi9cbiAgICBnZXRCeUlkID0gYXN5bmMgKGJ1bmRsZUlkOiBzdHJpbmcpOiBQcm9taXNlPEl0ZW1zQnVuZGxlIHwgbnVsbD4gPT4gdGhpcy5nZXQoYnVuZGxlSWQpO1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMgYnVuZGxlcyBieSB1c2FnZSB0eXBlIOKAlCBBRERPTiBvciBSRVBMQUNFTUVOVCAoR1NJIGB1c2FnZVR5cGVJbmRleGApLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHNob3dpbmcgb25seSBhZGQtb24gcGFja3Mgb3Igb25seSByZXBsYWNlbWVudCBwYWNrcyBpbiBVSS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgYWRkb25zID0gYXdhaXQgaXRlbXNCdW5kbGVEYW8ubGlzdEJ5VXNhZ2VUeXBlKFwiQURET05cIiwgMjApO1xuICAgICAqIGNvbnN0IHJlcGxhY2VtZW50cyA9IGF3YWl0IGl0ZW1zQnVuZGxlRGFvLmxpc3RCeVVzYWdlVHlwZShcIlJFUExBQ0VNRU5UXCIsIDIwKTtcbiAgICAgKi9cbiAgICBsaXN0QnlVc2FnZVR5cGUgPSBhc3luYyAoXG4gICAgICAgIHVzYWdlVHlwZTogSXRlbUJ1bmRsZVVzYWdlVHlwZSxcbiAgICAgICAgbGltaXQ/OiBudW1iZXIsXG4gICAgICAgIHRva2VuPzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IEl0ZW1zQnVuZGxlTW9kZWwucXVlcnkoXCJ1c2FnZVR5cGVcIikuZXEodXNhZ2VUeXBlKS51c2luZyhcInVzYWdlVHlwZUluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgSXRlbXNCdW5kbGVbXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3RzIGJ1bmRsZXMgYnkgYGJ1bmRsZVR5cGVgIChHU0kgYGJ1bmRsZVR5cGVJbmRleGApLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBzdGFydGVycyA9IGF3YWl0IGl0ZW1zQnVuZGxlRGFvLmxpc3RCeUJ1bmRsZVR5cGUoXCJTVEFSVEVSU1wiLCAyMCk7XG4gICAgICovXG4gICAgbGlzdEJ5QnVuZGxlVHlwZSA9IGFzeW5jIChcbiAgICAgICAgYnVuZGxlVHlwZTogc3RyaW5nLFxuICAgICAgICBsaW1pdD86IG51bWJlcixcbiAgICAgICAgdG9rZW4/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPExpc3RSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gdGhpcy5kZWNvZGUodG9rZW4pO1xuICAgICAgICBsZXQgcXVlcnlCdWlsZGVyID0gSXRlbXNCdW5kbGVNb2RlbC5xdWVyeShcImJ1bmRsZVR5cGVcIikuZXEoYnVuZGxlVHlwZSkudXNpbmcoXCJidW5kbGVUeXBlSW5kZXhcIik7XG4gICAgICAgIGlmIChkZWNvZGVkVG9rZW4pIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5zdGFydEF0KGRlY29kZWRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLmxpbWl0KGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5QnVpbGRlci5leGVjKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogcXVlcnlSZXN1bHQgYXMgdW5rbm93biBhcyBJdGVtc0J1bmRsZVtdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBvbmUgaXRlbS1idW5kbGUgYnkgcHJpbWFyeSBrZXkuXG4gICAgICovXG4gICAgZGVsZXRlQnlJZCA9IGFzeW5jIChidW5kbGVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlKGJ1bmRsZUlkKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgaXRlbXNCdW5kbGVEYW8gPSBuZXcgSXRlbXNCdW5kbGVEYW8oKTtcbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseDynamooseModel } from "../../base-dynamoose-model";
|
|
2
|
+
/**
|
|
3
|
+
* Decides how the bundle is applied on a platter item.
|
|
4
|
+
* - ADDON → extra items added on top of the platter
|
|
5
|
+
* - REPLACEMENT → swaps an existing platter item
|
|
6
|
+
*/
|
|
7
|
+
export declare const ITEM_BUNDLE_USAGE_TYPE: {
|
|
8
|
+
readonly ADDON: "ADDON";
|
|
9
|
+
readonly REPLACEMENT: "REPLACEMENT";
|
|
10
|
+
};
|
|
11
|
+
export type ItemBundleUsageType = (typeof ITEM_BUNDLE_USAGE_TYPE)[keyof typeof ITEM_BUNDLE_USAGE_TYPE];
|
|
12
|
+
export interface ItemsBundle extends BaseDynamooseModel {
|
|
13
|
+
bundleId: string;
|
|
14
|
+
bundleType: string;
|
|
15
|
+
bundleName: string;
|
|
16
|
+
usageType: ItemBundleUsageType;
|
|
17
|
+
bundleOrder?: number;
|
|
18
|
+
}
|
|
19
|
+
export type CreateItemsBundleInput = Omit<ItemsBundle, "bundleId"> & {
|
|
20
|
+
bundleId?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare const ItemsBundleModel: import("dynamoose/dist/General").ModelType<ItemsBundle>;
|
|
23
|
+
export declare const convertToItemsBundleModel: (input: CreateItemsBundleInput | ItemsBundle) => ItemsBundle;
|
|
@@ -0,0 +1,62 @@
|
|
|
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.convertToItemsBundleModel = exports.ItemsBundleModel = exports.ITEM_BUNDLE_USAGE_TYPE = void 0;
|
|
7
|
+
const dynamoose_1 = __importDefault(require("dynamoose"));
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const base_dynamoose_model_1 = require("../../base-dynamoose-model");
|
|
10
|
+
const table_names_1 = require("../../config/table-names");
|
|
11
|
+
/**
|
|
12
|
+
* Decides how the bundle is applied on a platter item.
|
|
13
|
+
* - ADDON → extra items added on top of the platter
|
|
14
|
+
* - REPLACEMENT → swaps an existing platter item
|
|
15
|
+
*/
|
|
16
|
+
exports.ITEM_BUNDLE_USAGE_TYPE = {
|
|
17
|
+
ADDON: "ADDON",
|
|
18
|
+
REPLACEMENT: "REPLACEMENT"
|
|
19
|
+
};
|
|
20
|
+
const itemsBundleSchema = new dynamoose_1.default.Schema({
|
|
21
|
+
bundleId: {
|
|
22
|
+
type: String,
|
|
23
|
+
hashKey: true,
|
|
24
|
+
required: true,
|
|
25
|
+
default: () => (0, crypto_1.randomUUID)()
|
|
26
|
+
},
|
|
27
|
+
bundleType: {
|
|
28
|
+
type: String,
|
|
29
|
+
required: true,
|
|
30
|
+
index: {
|
|
31
|
+
name: "bundleTypeIndex",
|
|
32
|
+
type: "global"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
bundleName: {
|
|
36
|
+
type: String,
|
|
37
|
+
required: true
|
|
38
|
+
},
|
|
39
|
+
bundleOrder: {
|
|
40
|
+
type: Number,
|
|
41
|
+
required: false
|
|
42
|
+
},
|
|
43
|
+
usageType: {
|
|
44
|
+
type: String,
|
|
45
|
+
required: true,
|
|
46
|
+
enum: [exports.ITEM_BUNDLE_USAGE_TYPE.ADDON, exports.ITEM_BUNDLE_USAGE_TYPE.REPLACEMENT],
|
|
47
|
+
index: {
|
|
48
|
+
name: "usageTypeIndex",
|
|
49
|
+
type: "global"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
|
|
53
|
+
}, {
|
|
54
|
+
saveUnknown: false,
|
|
55
|
+
timestamps: true
|
|
56
|
+
});
|
|
57
|
+
exports.ItemsBundleModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.ITEMS_BUNDLE, itemsBundleSchema, { create: false, waitForActive: false });
|
|
58
|
+
const convertToItemsBundleModel = (input) => {
|
|
59
|
+
return new exports.ItemsBundleModel(input);
|
|
60
|
+
};
|
|
61
|
+
exports.convertToItemsBundleModel = convertToItemsBundleModel;
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtYnVuZGxlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1c3RvbWVyLXVzZXIvaXRlbXMtYnVuZGxlL2l0ZW1zLWJ1bmRsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHFFQUE2RjtBQUM3RiwwREFBdUQ7QUFFdkQ7Ozs7R0FJRztBQUNVLFFBQUEsc0JBQXNCLEdBQUc7SUFDbEMsS0FBSyxFQUFFLE9BQU87SUFDZCxXQUFXLEVBQUUsYUFBYTtDQUNwQixDQUFDO0FBaUJYLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxtQkFBUyxDQUFDLE1BQU0sQ0FDMUM7SUFDSSxRQUFRLEVBQUU7UUFDTixJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBVSxHQUFFO0tBQzlCO0lBQ0QsVUFBVSxFQUFFO1FBQ1IsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxpQkFBaUI7WUFDdkIsSUFBSSxFQUFFLFFBQVE7U0FDakI7S0FDSjtJQUNELFVBQVUsRUFBRTtRQUNSLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxXQUFXLEVBQUU7UUFDVCxJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxLQUFLO0tBQ2xCO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLElBQUksRUFBRSxDQUFDLDhCQUFzQixDQUFDLEtBQUssRUFBRSw4QkFBc0IsQ0FBQyxXQUFXLENBQUM7UUFDeEUsS0FBSyxFQUFFO1lBQ0gsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixJQUFJLEVBQUUsUUFBUTtTQUNqQjtLQUNKO0lBQ0QsR0FBRyxrREFBMkI7Q0FDakMsRUFDRDtJQUNJLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ25CLENBQ0osQ0FBQztBQUVXLFFBQUEsZ0JBQWdCLEdBQUcsbUJBQVMsQ0FBQyxLQUFLLENBQzNDLHlCQUFXLENBQUMsWUFBWSxFQUN4QixpQkFBaUIsRUFDakIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FDMUMsQ0FBQztBQUVLLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUEyQyxFQUFFLEVBQUU7SUFDckYsT0FBTyxJQUFJLHdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUZXLFFBQUEseUJBQXlCLDZCQUVwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkeW5hbW9vc2UgZnJvbSBcImR5bmFtb29zZVwiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IEJBU0VfRFlOQU1PT1NFX0FVRElUX1NDSEVNQSwgQmFzZUR5bmFtb29zZU1vZGVsIH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQgeyBUQUJMRV9OQU1FUyB9IGZyb20gXCIuLi8uLi9jb25maWcvdGFibGUtbmFtZXNcIjtcblxuLyoqXG4gKiBEZWNpZGVzIGhvdyB0aGUgYnVuZGxlIGlzIGFwcGxpZWQgb24gYSBwbGF0dGVyIGl0ZW0uXG4gKiAtIEFERE9OIOKGkiBleHRyYSBpdGVtcyBhZGRlZCBvbiB0b3Agb2YgdGhlIHBsYXR0ZXJcbiAqIC0gUkVQTEFDRU1FTlQg4oaSIHN3YXBzIGFuIGV4aXN0aW5nIHBsYXR0ZXIgaXRlbVxuICovXG5leHBvcnQgY29uc3QgSVRFTV9CVU5ETEVfVVNBR0VfVFlQRSA9IHtcbiAgICBBRERPTjogXCJBRERPTlwiLFxuICAgIFJFUExBQ0VNRU5UOiBcIlJFUExBQ0VNRU5UXCJcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEl0ZW1CdW5kbGVVc2FnZVR5cGUgPVxuICAgICh0eXBlb2YgSVRFTV9CVU5ETEVfVVNBR0VfVFlQRSlba2V5b2YgdHlwZW9mIElURU1fQlVORExFX1VTQUdFX1RZUEVdO1xuXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1zQnVuZGxlIGV4dGVuZHMgQmFzZUR5bmFtb29zZU1vZGVsIHtcbiAgICBidW5kbGVJZDogc3RyaW5nO1xuICAgIGJ1bmRsZVR5cGU6IHN0cmluZztcbiAgICBidW5kbGVOYW1lOiBzdHJpbmc7XG4gICAgdXNhZ2VUeXBlOiBJdGVtQnVuZGxlVXNhZ2VUeXBlO1xuICAgIGJ1bmRsZU9yZGVyPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVJdGVtc0J1bmRsZUlucHV0ID0gT21pdDxJdGVtc0J1bmRsZSwgXCJidW5kbGVJZFwiPiAmIHtcbiAgICBidW5kbGVJZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGl0ZW1zQnVuZGxlU2NoZW1hID0gbmV3IGR5bmFtb29zZS5TY2hlbWEoXG4gICAge1xuICAgICAgICBidW5kbGVJZDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgaGFzaEtleTogdHJ1ZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gcmFuZG9tVVVJRCgpXG4gICAgICAgIH0sXG4gICAgICAgIGJ1bmRsZVR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImJ1bmRsZVR5cGVJbmRleFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2xvYmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnVuZGxlTmFtZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYnVuZGxlT3JkZXI6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICB1c2FnZVR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZW51bTogW0lURU1fQlVORExFX1VTQUdFX1RZUEUuQURET04sIElURU1fQlVORExFX1VTQUdFX1RZUEUuUkVQTEFDRU1FTlRdLFxuICAgICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInVzYWdlVHlwZUluZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAuLi5CQVNFX0RZTkFNT09TRV9BVURJVF9TQ0hFTUFcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc2F2ZVVua25vd246IGZhbHNlLFxuICAgICAgICB0aW1lc3RhbXBzOiB0cnVlXG4gICAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IEl0ZW1zQnVuZGxlTW9kZWwgPSBkeW5hbW9vc2UubW9kZWw8SXRlbXNCdW5kbGU+KFxuICAgIFRBQkxFX05BTUVTLklURU1TX0JVTkRMRSxcbiAgICBpdGVtc0J1bmRsZVNjaGVtYSxcbiAgICB7IGNyZWF0ZTogZmFsc2UsIHdhaXRGb3JBY3RpdmU6IGZhbHNlIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9JdGVtc0J1bmRsZU1vZGVsID0gKGlucHV0OiBDcmVhdGVJdGVtc0J1bmRsZUlucHV0IHwgSXRlbXNCdW5kbGUpID0+IHtcbiAgICByZXR1cm4gbmV3IEl0ZW1zQnVuZGxlTW9kZWwoaW5wdXQpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { GenericDynamooseDAO } from "../../base-dynamoose-dao";
|
|
2
|
+
import { AuthContext } from "../../base-dynamoose-model";
|
|
3
|
+
import { CreateLsqPriorityUpdationInput, LsqPassedStr, LsqPriorityUpdation } from "./lsq-priority-updation-model";
|
|
4
|
+
type ListResult = {
|
|
5
|
+
items: LsqPriorityUpdation[];
|
|
6
|
+
nextToken?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* DAO for LeadSquared priority-updation queue.
|
|
10
|
+
*
|
|
11
|
+
* Table keys: `lsqPriorityUpdationId` (PK).
|
|
12
|
+
* Lookups:
|
|
13
|
+
* - `opportunityIdIndex` → by LeadSquared `opportunityId`
|
|
14
|
+
* - `leadNumberIndex` → by lead phone/number
|
|
15
|
+
* - `statusIndex` → by record `status`
|
|
16
|
+
* - `passedStrIndex` → unprocessed queue (`passedStr` + `priorityRank`)
|
|
17
|
+
* Processed rows are deleted from the table (not soft-flagged).
|
|
18
|
+
*/
|
|
19
|
+
declare class LsqPriorityUpdationDao extends GenericDynamooseDAO<LsqPriorityUpdation> {
|
|
20
|
+
constructor();
|
|
21
|
+
private normalizeInput;
|
|
22
|
+
/**
|
|
23
|
+
* Creates / queues one opportunity for priority updation.
|
|
24
|
+
*
|
|
25
|
+
* Use when: LeadSquared webhook receives a new/updated opportunity.
|
|
26
|
+
* - `lsqPriorityUpdationId` auto-generates if omitted.
|
|
27
|
+
* - Auto-fills `passedStr` from `passed` (`false` → `"FALSE"`).
|
|
28
|
+
* - Auto-fills `priorityRank` from `priority` (P1→1 … P5→5).
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* await lsqPriorityUpdationDao.save({
|
|
32
|
+
* opportunityId: "opp-123",
|
|
33
|
+
* leadNumber: "9876543210",
|
|
34
|
+
* passed: false,
|
|
35
|
+
* priority: "P1",
|
|
36
|
+
* urgency: "U2",
|
|
37
|
+
* value: "V3",
|
|
38
|
+
* eventDate: "2026-07-30",
|
|
39
|
+
* payload: { raw: "webhook-body" }
|
|
40
|
+
* });
|
|
41
|
+
*/
|
|
42
|
+
save: (item: CreateLsqPriorityUpdationInput, authContext?: AuthContext) => Promise<LsqPriorityUpdation>;
|
|
43
|
+
/**
|
|
44
|
+
* Updates an existing queued record by `lsqPriorityUpdationId`.
|
|
45
|
+
*
|
|
46
|
+
* Use when: recalculating priority/urgency/value (e.g. midnight job) or
|
|
47
|
+
* refreshing webhook payload fields.
|
|
48
|
+
* - Re-syncs `passedStr` / `priorityRank` when `passed` / `priority` change.
|
|
49
|
+
* - Always refreshes `updatedAt`.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* await lsqPriorityUpdationDao.update("lsq-uuid", {
|
|
53
|
+
* priority: "P2",
|
|
54
|
+
* urgency: "U1",
|
|
55
|
+
* value: "V2"
|
|
56
|
+
* });
|
|
57
|
+
*/
|
|
58
|
+
update: (lsqPriorityUpdationId: string, updates: Partial<LsqPriorityUpdation>, authContext?: AuthContext) => Promise<LsqPriorityUpdation>;
|
|
59
|
+
/**
|
|
60
|
+
* Fetches one queue record by table primary key.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const row = await lsqPriorityUpdationDao.getById("lsq-uuid");
|
|
64
|
+
*/
|
|
65
|
+
getById: (lsqPriorityUpdationId: string) => Promise<LsqPriorityUpdation | null>;
|
|
66
|
+
/**
|
|
67
|
+
* Fetches one queue record by LeadSquared `opportunityId` (GSI `opportunityIdIndex`).
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* const row = await lsqPriorityUpdationDao.getByOpportunityId("opp-123");
|
|
71
|
+
*/
|
|
72
|
+
getByOpportunityId: (opportunityId: string) => Promise<LsqPriorityUpdation | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Lists queue records by LeadSquared `opportunityId` (GSI `opportunityIdIndex`).
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* const { items } = await lsqPriorityUpdationDao.listByOpportunityId("opp-123");
|
|
78
|
+
*/
|
|
79
|
+
listByOpportunityId: (opportunityId: string, limit?: number, token?: string) => Promise<ListResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Fetches one queue record by `leadNumber` (GSI `leadNumberIndex`).
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const row = await lsqPriorityUpdationDao.getByLeadNumber("9876543210");
|
|
85
|
+
*/
|
|
86
|
+
getByLeadNumber: (leadNumber: string) => Promise<LsqPriorityUpdation | null>;
|
|
87
|
+
/**
|
|
88
|
+
* Lists queue records by `leadNumber` (GSI `leadNumberIndex`).
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* const { items } = await lsqPriorityUpdationDao.listByLeadNumber("9876543210");
|
|
92
|
+
*/
|
|
93
|
+
listByLeadNumber: (leadNumber: string, limit?: number, token?: string) => Promise<ListResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Lists queue records by `status` (GSI `statusIndex`).
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* const { items } = await lsqPriorityUpdationDao.listByStatus("PENDING", 25);
|
|
99
|
+
*/
|
|
100
|
+
listByStatus: (status: string, limit?: number, token?: string) => Promise<ListResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Lists queued (unprocessed) opportunities sorted by `priorityRank` ascending.
|
|
103
|
+
*
|
|
104
|
+
* Use when: worker pulls next batch of unassigned LSQ priority updates.
|
|
105
|
+
* Queries GSI `passedStrIndex` with `passedStr = "FALSE"`.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* const { items, nextToken } = await lsqPriorityUpdationDao.listUnprocessed(25);
|
|
109
|
+
*/
|
|
110
|
+
listUnprocessed: (limit?: number, token?: string) => Promise<ListResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Lists opportunities by `passedStr` (GSI `passedStrIndex`), sorted by `priorityRank`.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* const queued = await lsqPriorityUpdationDao.listByPassedStr("FALSE", 25);
|
|
116
|
+
*/
|
|
117
|
+
listByPassedStr: (passedStr: LsqPassedStr, limit?: number, token?: string) => Promise<ListResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Marks a queue row as processed by deleting it via primary key.
|
|
120
|
+
*
|
|
121
|
+
* Use when: worker successfully applied priority update in LeadSquared.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* await lsqPriorityUpdationDao.markProcessed("lsq-uuid");
|
|
125
|
+
*/
|
|
126
|
+
markProcessed: (lsqPriorityUpdationId: string) => Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Marks processed by LeadSquared `opportunityId` (lookup GSI, then delete by PK).
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* await lsqPriorityUpdationDao.markProcessedByOpportunityId("opp-123");
|
|
132
|
+
*/
|
|
133
|
+
markProcessedByOpportunityId: (opportunityId: string) => Promise<boolean>;
|
|
134
|
+
/**
|
|
135
|
+
* Deletes one queue record by primary key.
|
|
136
|
+
*/
|
|
137
|
+
deleteById: (lsqPriorityUpdationId: string) => Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
export declare const lsqPriorityUpdationDao: LsqPriorityUpdationDao;
|
|
140
|
+
export {};
|
|
@@ -0,0 +1,253 @@
|
|
|
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.lsqPriorityUpdationDao = void 0;
|
|
7
|
+
const dynamoose_1 = __importDefault(require("dynamoose"));
|
|
8
|
+
const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
|
|
9
|
+
const lsq_priority_updation_model_1 = require("./lsq-priority-updation-model");
|
|
10
|
+
/**
|
|
11
|
+
* DAO for LeadSquared priority-updation queue.
|
|
12
|
+
*
|
|
13
|
+
* Table keys: `lsqPriorityUpdationId` (PK).
|
|
14
|
+
* Lookups:
|
|
15
|
+
* - `opportunityIdIndex` → by LeadSquared `opportunityId`
|
|
16
|
+
* - `leadNumberIndex` → by lead phone/number
|
|
17
|
+
* - `statusIndex` → by record `status`
|
|
18
|
+
* - `passedStrIndex` → unprocessed queue (`passedStr` + `priorityRank`)
|
|
19
|
+
* Processed rows are deleted from the table (not soft-flagged).
|
|
20
|
+
*/
|
|
21
|
+
class LsqPriorityUpdationDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(lsq_priority_updation_model_1.LsqPriorityUpdationModel, "lsqPriorityUpdationId");
|
|
24
|
+
this.normalizeInput = (item) => {
|
|
25
|
+
const passed = item.passed ?? false;
|
|
26
|
+
const priority = item.priority;
|
|
27
|
+
return {
|
|
28
|
+
...item,
|
|
29
|
+
passed,
|
|
30
|
+
passedStr: item.passedStr ?? (0, lsq_priority_updation_model_1.toPassedStr)(passed),
|
|
31
|
+
priorityRank: item.priorityRank ?? (priority ? (0, lsq_priority_updation_model_1.toPriorityRank)(priority) : undefined)
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Creates / queues one opportunity for priority updation.
|
|
36
|
+
*
|
|
37
|
+
* Use when: LeadSquared webhook receives a new/updated opportunity.
|
|
38
|
+
* - `lsqPriorityUpdationId` auto-generates if omitted.
|
|
39
|
+
* - Auto-fills `passedStr` from `passed` (`false` → `"FALSE"`).
|
|
40
|
+
* - Auto-fills `priorityRank` from `priority` (P1→1 … P5→5).
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* await lsqPriorityUpdationDao.save({
|
|
44
|
+
* opportunityId: "opp-123",
|
|
45
|
+
* leadNumber: "9876543210",
|
|
46
|
+
* passed: false,
|
|
47
|
+
* priority: "P1",
|
|
48
|
+
* urgency: "U2",
|
|
49
|
+
* value: "V3",
|
|
50
|
+
* eventDate: "2026-07-30",
|
|
51
|
+
* payload: { raw: "webhook-body" }
|
|
52
|
+
* });
|
|
53
|
+
*/
|
|
54
|
+
this.save = async (item, authContext) => {
|
|
55
|
+
return super.save(this.normalizeInput(item), authContext);
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Updates an existing queued record by `lsqPriorityUpdationId`.
|
|
59
|
+
*
|
|
60
|
+
* Use when: recalculating priority/urgency/value (e.g. midnight job) or
|
|
61
|
+
* refreshing webhook payload fields.
|
|
62
|
+
* - Re-syncs `passedStr` / `priorityRank` when `passed` / `priority` change.
|
|
63
|
+
* - Always refreshes `updatedAt`.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* await lsqPriorityUpdationDao.update("lsq-uuid", {
|
|
67
|
+
* priority: "P2",
|
|
68
|
+
* urgency: "U1",
|
|
69
|
+
* value: "V2"
|
|
70
|
+
* });
|
|
71
|
+
*/
|
|
72
|
+
this.update = async (lsqPriorityUpdationId, updates, authContext) => {
|
|
73
|
+
const nextUpdates = {
|
|
74
|
+
...updates,
|
|
75
|
+
updated_time: new Date(),
|
|
76
|
+
updated_user: authContext?.userSub
|
|
77
|
+
};
|
|
78
|
+
if (typeof updates.passed === "boolean") {
|
|
79
|
+
nextUpdates.passedStr = updates.passedStr ?? (0, lsq_priority_updation_model_1.toPassedStr)(updates.passed);
|
|
80
|
+
}
|
|
81
|
+
if (updates.priority) {
|
|
82
|
+
nextUpdates.priorityRank = updates.priorityRank ?? (0, lsq_priority_updation_model_1.toPriorityRank)(updates.priority);
|
|
83
|
+
}
|
|
84
|
+
const updated = await lsq_priority_updation_model_1.LsqPriorityUpdationModel.update({ lsqPriorityUpdationId }, nextUpdates, {
|
|
85
|
+
condition: new dynamoose_1.default.Condition().attribute("lsqPriorityUpdationId").exists()
|
|
86
|
+
});
|
|
87
|
+
return updated;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Fetches one queue record by table primary key.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* const row = await lsqPriorityUpdationDao.getById("lsq-uuid");
|
|
94
|
+
*/
|
|
95
|
+
this.getById = async (lsqPriorityUpdationId) => this.get(lsqPriorityUpdationId);
|
|
96
|
+
/**
|
|
97
|
+
* Fetches one queue record by LeadSquared `opportunityId` (GSI `opportunityIdIndex`).
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* const row = await lsqPriorityUpdationDao.getByOpportunityId("opp-123");
|
|
101
|
+
*/
|
|
102
|
+
this.getByOpportunityId = async (opportunityId) => {
|
|
103
|
+
const result = await this.listByOpportunityId(opportunityId, 1);
|
|
104
|
+
return result.items[0] ?? null;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Lists queue records by LeadSquared `opportunityId` (GSI `opportunityIdIndex`).
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* const { items } = await lsqPriorityUpdationDao.listByOpportunityId("opp-123");
|
|
111
|
+
*/
|
|
112
|
+
this.listByOpportunityId = async (opportunityId, limit, token) => {
|
|
113
|
+
const decodedToken = this.decode(token);
|
|
114
|
+
let queryBuilder = lsq_priority_updation_model_1.LsqPriorityUpdationModel.query("opportunityId")
|
|
115
|
+
.eq(opportunityId)
|
|
116
|
+
.using("opportunityIdIndex");
|
|
117
|
+
if (decodedToken) {
|
|
118
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
119
|
+
}
|
|
120
|
+
if (typeof limit === "number") {
|
|
121
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
122
|
+
}
|
|
123
|
+
const queryResult = await queryBuilder.exec();
|
|
124
|
+
return {
|
|
125
|
+
items: queryResult,
|
|
126
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Fetches one queue record by `leadNumber` (GSI `leadNumberIndex`).
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* const row = await lsqPriorityUpdationDao.getByLeadNumber("9876543210");
|
|
134
|
+
*/
|
|
135
|
+
this.getByLeadNumber = async (leadNumber) => {
|
|
136
|
+
const result = await this.listByLeadNumber(leadNumber, 1);
|
|
137
|
+
return result.items[0] ?? null;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Lists queue records by `leadNumber` (GSI `leadNumberIndex`).
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* const { items } = await lsqPriorityUpdationDao.listByLeadNumber("9876543210");
|
|
144
|
+
*/
|
|
145
|
+
this.listByLeadNumber = async (leadNumber, limit, token) => {
|
|
146
|
+
const decodedToken = this.decode(token);
|
|
147
|
+
let queryBuilder = lsq_priority_updation_model_1.LsqPriorityUpdationModel.query("leadNumber")
|
|
148
|
+
.eq(leadNumber)
|
|
149
|
+
.using("leadNumberIndex");
|
|
150
|
+
if (decodedToken) {
|
|
151
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
152
|
+
}
|
|
153
|
+
if (typeof limit === "number") {
|
|
154
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
155
|
+
}
|
|
156
|
+
const queryResult = await queryBuilder.exec();
|
|
157
|
+
return {
|
|
158
|
+
items: queryResult,
|
|
159
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Lists queue records by `status` (GSI `statusIndex`).
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* const { items } = await lsqPriorityUpdationDao.listByStatus("PENDING", 25);
|
|
167
|
+
*/
|
|
168
|
+
this.listByStatus = async (status, limit, token) => {
|
|
169
|
+
const decodedToken = this.decode(token);
|
|
170
|
+
let queryBuilder = lsq_priority_updation_model_1.LsqPriorityUpdationModel.query("status")
|
|
171
|
+
.eq(status)
|
|
172
|
+
.using("statusIndex");
|
|
173
|
+
if (decodedToken) {
|
|
174
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
175
|
+
}
|
|
176
|
+
if (typeof limit === "number") {
|
|
177
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
178
|
+
}
|
|
179
|
+
const queryResult = await queryBuilder.exec();
|
|
180
|
+
return {
|
|
181
|
+
items: queryResult,
|
|
182
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Lists queued (unprocessed) opportunities sorted by `priorityRank` ascending.
|
|
187
|
+
*
|
|
188
|
+
* Use when: worker pulls next batch of unassigned LSQ priority updates.
|
|
189
|
+
* Queries GSI `passedStrIndex` with `passedStr = "FALSE"`.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* const { items, nextToken } = await lsqPriorityUpdationDao.listUnprocessed(25);
|
|
193
|
+
*/
|
|
194
|
+
this.listUnprocessed = async (limit, token) => this.listByPassedStr(lsq_priority_updation_model_1.LSQ_PASSED_STR.FALSE, limit, token);
|
|
195
|
+
/**
|
|
196
|
+
* Lists opportunities by `passedStr` (GSI `passedStrIndex`), sorted by `priorityRank`.
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* const queued = await lsqPriorityUpdationDao.listByPassedStr("FALSE", 25);
|
|
200
|
+
*/
|
|
201
|
+
this.listByPassedStr = async (passedStr, limit, token) => {
|
|
202
|
+
const decodedToken = this.decode(token);
|
|
203
|
+
let queryBuilder = lsq_priority_updation_model_1.LsqPriorityUpdationModel.query("passedStr")
|
|
204
|
+
.eq(passedStr)
|
|
205
|
+
.using("passedStrIndex")
|
|
206
|
+
.sort("ascending");
|
|
207
|
+
if (decodedToken) {
|
|
208
|
+
queryBuilder = queryBuilder.startAt(decodedToken);
|
|
209
|
+
}
|
|
210
|
+
if (typeof limit === "number") {
|
|
211
|
+
queryBuilder = queryBuilder.limit(limit);
|
|
212
|
+
}
|
|
213
|
+
const queryResult = await queryBuilder.exec();
|
|
214
|
+
return {
|
|
215
|
+
items: queryResult,
|
|
216
|
+
nextToken: await this.encode(queryResult.lastKey)
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Marks a queue row as processed by deleting it via primary key.
|
|
221
|
+
*
|
|
222
|
+
* Use when: worker successfully applied priority update in LeadSquared.
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* await lsqPriorityUpdationDao.markProcessed("lsq-uuid");
|
|
226
|
+
*/
|
|
227
|
+
this.markProcessed = async (lsqPriorityUpdationId) => {
|
|
228
|
+
await this.delete(lsqPriorityUpdationId);
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Marks processed by LeadSquared `opportunityId` (lookup GSI, then delete by PK).
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* await lsqPriorityUpdationDao.markProcessedByOpportunityId("opp-123");
|
|
235
|
+
*/
|
|
236
|
+
this.markProcessedByOpportunityId = async (opportunityId) => {
|
|
237
|
+
const row = await this.getByOpportunityId(opportunityId);
|
|
238
|
+
if (!row) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
await this.delete(row.lsqPriorityUpdationId);
|
|
242
|
+
return true;
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Deletes one queue record by primary key.
|
|
246
|
+
*/
|
|
247
|
+
this.deleteById = async (lsqPriorityUpdationId) => {
|
|
248
|
+
await this.delete(lsqPriorityUpdationId);
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.lsqPriorityUpdationDao = new LsqPriorityUpdationDao();
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHNxLXByaW9yaXR5LXVwZGF0aW9uLWRhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXN0b21lci11c2VyL2xzcS1wcmlvcml0eS11cGRhdGlvbi9sc3EtcHJpb3JpdHktdXBkYXRpb24tZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxpRUFBMEU7QUFFMUUsK0VBU3VDO0FBT3ZDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLHNCQUF1QixTQUFRLHdDQUF3QztJQUN6RTtRQUNJLEtBQUssQ0FBQyxzREFBd0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBR3JELG1CQUFjLEdBQUcsQ0FBQyxJQUFvQyxFQUF1QixFQUFFO1lBQ25GLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUF1QixDQUFDO1lBRTlDLE9BQU87Z0JBQ0gsR0FBRyxJQUFJO2dCQUNQLE1BQU07Z0JBQ04sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBQSx5Q0FBVyxFQUFDLE1BQU0sQ0FBQztnQkFDaEQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUEsNENBQWMsRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ2hFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FtQkc7UUFDSCxTQUFJLEdBQUcsS0FBSyxFQUNSLElBQW9DLEVBQ3BDLFdBQXlCLEVBQ0csRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUM7UUFFRjs7Ozs7Ozs7Ozs7Ozs7V0FjRztR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Q0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QyxPQUFPO2dCQUNILEtBQUssRUFBRSxXQUErQztnQkFDdEQsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBZ0MsQ0FBQzthQUM3RSxDQUFDO1FBQ04sQ0FBQyxDQUFDO1FBRUY7Ozs7Ozs7V0FPRztRQUNILGtCQUFhLEdBQUcsS0FBSyxFQUFFLHFCQUE2QixFQUFpQixFQUFFO1lBQ25FLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztRQUVGOzs7OztXQUtHO1FBQ0gsaUNBQTRCLEdBQUcsS0FBSyxFQUFFLGFBQXFCLEVBQW9CLEVBQUU7WUFDN0UsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUY7O1dBRUc7UUFDSCxlQUFVLEdBQUcsS0FBSyxFQUFFLHFCQUE2QixFQUFpQixFQUFFO1lBQ2hFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQztJQWhSRixDQUFDO0NBaVJKO0FBRVksUUFBQSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHluYW1vb3NlIGZyb20gXCJkeW5hbW9vc2VcIjtcbmltcG9ydCB7IER5bmFtb0tleSwgR2VuZXJpY0R5bmFtb29zZURBTyB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1kYW9cIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQge1xuICAgIENyZWF0ZUxzcVByaW9yaXR5VXBkYXRpb25JbnB1dCxcbiAgICBMU1FfUEFTU0VEX1NUUixcbiAgICBMc3FQYXNzZWRTdHIsXG4gICAgTHNxUHJpb3JpdHksXG4gICAgTHNxUHJpb3JpdHlVcGRhdGlvbixcbiAgICBMc3FQcmlvcml0eVVwZGF0aW9uTW9kZWwsXG4gICAgdG9QYXNzZWRTdHIsXG4gICAgdG9Qcmlvcml0eVJhbmtcbn0gZnJvbSBcIi4vbHNxLXByaW9yaXR5LXVwZGF0aW9uLW1vZGVsXCI7XG5cbnR5cGUgTGlzdFJlc3VsdCA9IHtcbiAgICBpdGVtczogTHNxUHJpb3JpdHlVcGRhdGlvbltdO1xuICAgIG5leHRUb2tlbj86IHN0cmluZztcbn07XG5cbi8qKlxuICogREFPIGZvciBMZWFkU3F1YXJlZCBwcmlvcml0eS11cGRhdGlvbiBxdWV1ZS5cbiAqXG4gKiBUYWJsZSBrZXlzOiBgbHNxUHJpb3JpdHlVcGRhdGlvbklkYCAoUEspLlxuICogTG9va3VwczpcbiAqIC0gYG9wcG9ydHVuaXR5SWRJbmRleGAg4oaSIGJ5IExlYWRTcXVhcmVkIGBvcHBvcnR1bml0eUlkYFxuICogLSBgbGVhZE51bWJlckluZGV4YCDihpIgYnkgbGVhZCBwaG9uZS9udW1iZXJcbiAqIC0gYHN0YXR1c0luZGV4YCDihpIgYnkgcmVjb3JkIGBzdGF0dXNgXG4gKiAtIGBwYXNzZWRTdHJJbmRleGAg4oaSIHVucHJvY2Vzc2VkIHF1ZXVlIChgcGFzc2VkU3RyYCArIGBwcmlvcml0eVJhbmtgKVxuICogUHJvY2Vzc2VkIHJvd3MgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgdGFibGUgKG5vdCBzb2Z0LWZsYWdnZWQpLlxuICovXG5jbGFzcyBMc3FQcmlvcml0eVVwZGF0aW9uRGFvIGV4dGVuZHMgR2VuZXJpY0R5bmFtb29zZURBTzxMc3FQcmlvcml0eVVwZGF0aW9uPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKExzcVByaW9yaXR5VXBkYXRpb25Nb2RlbCwgXCJsc3FQcmlvcml0eVVwZGF0aW9uSWRcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVJbnB1dCA9IChpdGVtOiBDcmVhdGVMc3FQcmlvcml0eVVwZGF0aW9uSW5wdXQpOiBMc3FQcmlvcml0eVVwZGF0aW9uID0+IHtcbiAgICAgICAgY29uc3QgcGFzc2VkID0gaXRlbS5wYXNzZWQgPz8gZmFsc2U7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gaXRlbS5wcmlvcml0eSBhcyBMc3FQcmlvcml0eTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHBhc3NlZCxcbiAgICAgICAgICAgIHBhc3NlZFN0cjogaXRlbS5wYXNzZWRTdHIgPz8gdG9QYXNzZWRTdHIocGFzc2VkKSxcbiAgICAgICAgICAgIHByaW9yaXR5UmFuazogaXRlbS5wcmlvcml0eVJhbmsgPz8gKHByaW9yaXR5ID8gdG9Qcmlvcml0eVJhbmsocHJpb3JpdHkpIDogdW5kZWZpbmVkKVxuICAgICAgICB9IGFzIExzcVByaW9yaXR5VXBkYXRpb247XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgLyBxdWV1ZXMgb25lIG9wcG9ydHVuaXR5IGZvciBwcmlvcml0eSB1cGRhdGlvbi5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBMZWFkU3F1YXJlZCB3ZWJob29rIHJlY2VpdmVzIGEgbmV3L3VwZGF0ZWQgb3Bwb3J0dW5pdHkuXG4gICAgICogLSBgbHNxUHJpb3JpdHlVcGRhdGlvbklkYCBhdXRvLWdlbmVyYXRlcyBpZiBvbWl0dGVkLlxuICAgICAqIC0gQXV0by1maWxscyBgcGFzc2VkU3RyYCBmcm9tIGBwYXNzZWRgIChgZmFsc2VgIOKGkiBgXCJGQUxTRVwiYCkuXG4gICAgICogLSBBdXRvLWZpbGxzIGBwcmlvcml0eVJhbmtgIGZyb20gYHByaW9yaXR5YCAoUDHihpIxIOKApiBQNeKGkjUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBsc3FQcmlvcml0eVVwZGF0aW9uRGFvLnNhdmUoe1xuICAgICAqICAgICBvcHBvcnR1bml0eUlkOiBcIm9wcC0xMjNcIixcbiAgICAgKiAgICAgbGVhZE51bWJlcjogXCI5ODc2NTQzMjEwXCIsXG4gICAgICogICAgIHBhc3NlZDogZmFsc2UsXG4gICAgICogICAgIHByaW9yaXR5OiBcIlAxXCIsXG4gICAgICogICAgIHVyZ2VuY3k6IFwiVTJcIixcbiAgICAgKiAgICAgdmFsdWU6IFwiVjNcIixcbiAgICAgKiAgICAgZXZlbnREYXRlOiBcIjIwMjYtMDctMzBcIixcbiAgICAgKiAgICAgcGF5bG9hZDogeyByYXc6IFwid2ViaG9vay1ib2R5XCIgfVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHNhdmUgPSBhc3luYyAoXG4gICAgICAgIGl0ZW06IENyZWF0ZUxzcVByaW9yaXR5VXBkYXRpb25JbnB1dCxcbiAgICAgICAgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dFxuICAgICk6IFByb21pc2U8THNxUHJpb3JpdHlVcGRhdGlvbj4gPT4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuc2F2ZSh0aGlzLm5vcm1hbGl6ZUlucHV0KGl0ZW0pLCBhdXRoQ29udGV4dCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcXVldWVkIHJlY29yZCBieSBgbHNxUHJpb3JpdHlVcGRhdGlvbklkYC5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiByZWNhbGN1bGF0aW5nIHByaW9yaXR5L3VyZ2VuY3kvdmFsdWUgKGUuZy4gbWlkbmlnaHQgam9iKSBvclxuICAgICAqIHJlZnJlc2hpbmcgd2ViaG9vayBwYXlsb2FkIGZpZWxkcy5cbiAgICAgKiAtIFJlLXN5bmNzIGBwYXNzZWRTdHJgIC8gYHByaW9yaXR5UmFua2Agd2hlbiBgcGFzc2VkYCAvIGBwcmlvcml0eWAgY2hhbmdlLlxuICAgICAqIC0gQWx3YXlzIHJlZnJlc2hlcyBgdXBkYXRlZEF0YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby51cGRhdGUoXCJsc3EtdXVpZFwiLCB7XG4gICAgICogICAgIHByaW9yaXR5OiBcIlAyXCIsXG4gICAgICogICAgIHVyZ2VuY3k6IFwiVTFcIixcbiAgICAgKiAgICAgdmFsdWU6IFwiVjJcIlxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHVwZGF0ZSA9IGFzeW5jIChcbiAgICAgICAgbHNxUHJpb3JpdHlVcGRhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8THNxUHJpb3JpdHlVcGRhdGlvbj4sXG4gICAgICAgIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHRcbiAgICApOiBQcm9taXNlPExzcVByaW9yaXR5VXBkYXRpb24+ID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFVwZGF0ZXM6IFBhcnRpYWw8THNxUHJpb3JpdHlVcGRhdGlvbj4gPSB7XG4gICAgICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICAgICAgdXBkYXRlZF90aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlcy5wYXNzZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBuZXh0VXBkYXRlcy5wYXNzZWRTdHIgPSB1cGRhdGVzLnBhc3NlZFN0ciA/PyB0b1Bhc3NlZFN0cih1cGRhdGVzLnBhc3NlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZXMucHJpb3JpdHkpIHtcbiAgICAgICAgICAgIG5leHRVcGRhdGVzLnByaW9yaXR5UmFuayA9IHVwZGF0ZXMucHJpb3JpdHlSYW5rID8/IHRvUHJpb3JpdHlSYW5rKHVwZGF0ZXMucHJpb3JpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IExzcVByaW9yaXR5VXBkYXRpb25Nb2RlbC51cGRhdGUoXG4gICAgICAgICAgICB7IGxzcVByaW9yaXR5VXBkYXRpb25JZCB9LFxuICAgICAgICAgICAgbmV4dFVwZGF0ZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBuZXcgZHluYW1vb3NlLkNvbmRpdGlvbigpLmF0dHJpYnV0ZShcImxzcVByaW9yaXR5VXBkYXRpb25JZFwiKS5leGlzdHMoKVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdXBkYXRlZCBhcyB1bmtub3duIGFzIExzcVByaW9yaXR5VXBkYXRpb247XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgb25lIHF1ZXVlIHJlY29yZCBieSB0YWJsZSBwcmltYXJ5IGtleS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm93ID0gYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby5nZXRCeUlkKFwibHNxLXV1aWRcIik7XG4gICAgICovXG4gICAgZ2V0QnlJZCA9IGFzeW5jIChsc3FQcmlvcml0eVVwZGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8THNxUHJpb3JpdHlVcGRhdGlvbiB8IG51bGw+ID0+XG4gICAgICAgIHRoaXMuZ2V0KGxzcVByaW9yaXR5VXBkYXRpb25JZCk7XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIG9uZSBxdWV1ZSByZWNvcmQgYnkgTGVhZFNxdWFyZWQgYG9wcG9ydHVuaXR5SWRgIChHU0kgYG9wcG9ydHVuaXR5SWRJbmRleGApLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb3cgPSBhd2FpdCBsc3FQcmlvcml0eVVwZGF0aW9uRGFvLmdldEJ5T3Bwb3J0dW5pdHlJZChcIm9wcC0xMjNcIik7XG4gICAgICovXG4gICAgZ2V0QnlPcHBvcnR1bml0eUlkID0gYXN5bmMgKG9wcG9ydHVuaXR5SWQ6IHN0cmluZyk6IFByb21pc2U8THNxUHJpb3JpdHlVcGRhdGlvbiB8IG51bGw+ID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5saXN0QnlPcHBvcnR1bml0eUlkKG9wcG9ydHVuaXR5SWQsIDEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zWzBdID8/IG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3RzIHF1ZXVlIHJlY29yZHMgYnkgTGVhZFNxdWFyZWQgYG9wcG9ydHVuaXR5SWRgIChHU0kgYG9wcG9ydHVuaXR5SWRJbmRleGApLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCB7IGl0ZW1zIH0gPSBhd2FpdCBsc3FQcmlvcml0eVVwZGF0aW9uRGFvLmxpc3RCeU9wcG9ydHVuaXR5SWQoXCJvcHAtMTIzXCIpO1xuICAgICAqL1xuICAgIGxpc3RCeU9wcG9ydHVuaXR5SWQgPSBhc3luYyAoXG4gICAgICAgIG9wcG9ydHVuaXR5SWQ6IHN0cmluZyxcbiAgICAgICAgbGltaXQ/OiBudW1iZXIsXG4gICAgICAgIHRva2VuPzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IExzcVByaW9yaXR5VXBkYXRpb25Nb2RlbC5xdWVyeShcIm9wcG9ydHVuaXR5SWRcIilcbiAgICAgICAgICAgIC5lcShvcHBvcnR1bml0eUlkKVxuICAgICAgICAgICAgLnVzaW5nKFwib3Bwb3J0dW5pdHlJZEluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgTHNxUHJpb3JpdHlVcGRhdGlvbltdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBvbmUgcXVldWUgcmVjb3JkIGJ5IGBsZWFkTnVtYmVyYCAoR1NJIGBsZWFkTnVtYmVySW5kZXhgKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm93ID0gYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby5nZXRCeUxlYWROdW1iZXIoXCI5ODc2NTQzMjEwXCIpO1xuICAgICAqL1xuICAgIGdldEJ5TGVhZE51bWJlciA9IGFzeW5jIChsZWFkTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPExzcVByaW9yaXR5VXBkYXRpb24gfCBudWxsPiA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubGlzdEJ5TGVhZE51bWJlcihsZWFkTnVtYmVyLCAxKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtc1swXSA/PyBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBMaXN0cyBxdWV1ZSByZWNvcmRzIGJ5IGBsZWFkTnVtYmVyYCAoR1NJIGBsZWFkTnVtYmVySW5kZXhgKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby5saXN0QnlMZWFkTnVtYmVyKFwiOTg3NjU0MzIxMFwiKTtcbiAgICAgKi9cbiAgICBsaXN0QnlMZWFkTnVtYmVyID0gYXN5bmMgKFxuICAgICAgICBsZWFkTnVtYmVyOiBzdHJpbmcsXG4gICAgICAgIGxpbWl0PzogbnVtYmVyLFxuICAgICAgICB0b2tlbj86IHN0cmluZ1xuICAgICk6IFByb21pc2U8TGlzdFJlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZSh0b2tlbik7XG4gICAgICAgIGxldCBxdWVyeUJ1aWxkZXIgPSBMc3FQcmlvcml0eVVwZGF0aW9uTW9kZWwucXVlcnkoXCJsZWFkTnVtYmVyXCIpXG4gICAgICAgICAgICAuZXEobGVhZE51bWJlcilcbiAgICAgICAgICAgIC51c2luZyhcImxlYWROdW1iZXJJbmRleFwiKTtcbiAgICAgICAgaWYgKGRlY29kZWRUb2tlbikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLnN0YXJ0QXQoZGVjb2RlZFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxpbWl0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIubGltaXQobGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgcXVlcnlCdWlsZGVyLmV4ZWMoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiBxdWVyeVJlc3VsdCBhcyB1bmtub3duIGFzIExzcVByaW9yaXR5VXBkYXRpb25bXSxcbiAgICAgICAgICAgIG5leHRUb2tlbjogYXdhaXQgdGhpcy5lbmNvZGUocXVlcnlSZXN1bHQubGFzdEtleSBhcyBEeW5hbW9LZXkgfCB1bmRlZmluZWQpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIExpc3RzIHF1ZXVlIHJlY29yZHMgYnkgYHN0YXR1c2AgKEdTSSBgc3RhdHVzSW5kZXhgKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby5saXN0QnlTdGF0dXMoXCJQRU5ESU5HXCIsIDI1KTtcbiAgICAgKi9cbiAgICBsaXN0QnlTdGF0dXMgPSBhc3luYyAoXG4gICAgICAgIHN0YXR1czogc3RyaW5nLFxuICAgICAgICBsaW1pdD86IG51bWJlcixcbiAgICAgICAgdG9rZW4/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPExpc3RSZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gdGhpcy5kZWNvZGUodG9rZW4pO1xuICAgICAgICBsZXQgcXVlcnlCdWlsZGVyID0gTHNxUHJpb3JpdHlVcGRhdGlvbk1vZGVsLnF1ZXJ5KFwic3RhdHVzXCIpXG4gICAgICAgICAgICAuZXEoc3RhdHVzKVxuICAgICAgICAgICAgLnVzaW5nKFwic3RhdHVzSW5kZXhcIik7XG4gICAgICAgIGlmIChkZWNvZGVkVG9rZW4pIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5zdGFydEF0KGRlY29kZWRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLmxpbWl0KGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5QnVpbGRlci5leGVjKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogcXVlcnlSZXN1bHQgYXMgdW5rbm93biBhcyBMc3FQcmlvcml0eVVwZGF0aW9uW10sXG4gICAgICAgICAgICBuZXh0VG9rZW46IGF3YWl0IHRoaXMuZW5jb2RlKHF1ZXJ5UmVzdWx0Lmxhc3RLZXkgYXMgRHluYW1vS2V5IHwgdW5kZWZpbmVkKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBMaXN0cyBxdWV1ZWQgKHVucHJvY2Vzc2VkKSBvcHBvcnR1bml0aWVzIHNvcnRlZCBieSBgcHJpb3JpdHlSYW5rYCBhc2NlbmRpbmcuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogd29ya2VyIHB1bGxzIG5leHQgYmF0Y2ggb2YgdW5hc3NpZ25lZCBMU1EgcHJpb3JpdHkgdXBkYXRlcy5cbiAgICAgKiBRdWVyaWVzIEdTSSBgcGFzc2VkU3RySW5kZXhgIHdpdGggYHBhc3NlZFN0ciA9IFwiRkFMU0VcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHsgaXRlbXMsIG5leHRUb2tlbiB9ID0gYXdhaXQgbHNxUHJpb3JpdHlVcGRhdGlvbkRhby5saXN0VW5wcm9jZXNzZWQoMjUpO1xuICAgICAqL1xuICAgIGxpc3RVbnByb2Nlc3NlZCA9IGFzeW5jIChsaW1pdD86IG51bWJlciwgdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPExpc3RSZXN1bHQ+ID0+XG4gICAgICAgIHRoaXMubGlzdEJ5UGFzc2VkU3RyKExTUV9QQVNTRURfU1RSLkZBTFNFLCBsaW1pdCwgdG9rZW4pO1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMgb3Bwb3J0dW5pdGllcyBieSBgcGFzc2VkU3RyYCAoR1NJIGBwYXNzZWRTdHJJbmRleGApLCBzb3J0ZWQgYnkgYHByaW9yaXR5UmFua2AuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHF1ZXVlZCA9IGF3YWl0IGxzcVByaW9yaXR5VXBkYXRpb25EYW8ubGlzdEJ5UGFzc2VkU3RyKFwiRkFMU0VcIiwgMjUpO1xuICAgICAqL1xuICAgIGxpc3RCeVBhc3NlZFN0ciA9IGFzeW5jIChcbiAgICAgICAgcGFzc2VkU3RyOiBMc3FQYXNzZWRTdHIsXG4gICAgICAgIGxpbWl0PzogbnVtYmVyLFxuICAgICAgICB0b2tlbj86IHN0cmluZ1xuICAgICk6IFByb21pc2U8TGlzdFJlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZSh0b2tlbik7XG4gICAgICAgIGxldCBxdWVyeUJ1aWxkZXIgPSBMc3FQcmlvcml0eVVwZGF0aW9uTW9kZWwucXVlcnkoXCJwYXNzZWRTdHJcIilcbiAgICAgICAgICAgIC5lcShwYXNzZWRTdHIpXG4gICAgICAgICAgICAudXNpbmcoXCJwYXNzZWRTdHJJbmRleFwiKVxuICAgICAgICAgICAgLnNvcnQoXCJhc2NlbmRpbmdcIik7XG4gICAgICAgIGlmIChkZWNvZGVkVG9rZW4pIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5zdGFydEF0KGRlY29kZWRUb2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyLmxpbWl0KGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHF1ZXJ5QnVpbGRlci5leGVjKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogcXVlcnlSZXN1bHQgYXMgdW5rbm93biBhcyBMc3FQcmlvcml0eVVwZGF0aW9uW10sXG4gICAgICAgICAgICBuZXh0VG9rZW46IGF3YWl0IHRoaXMuZW5jb2RlKHF1ZXJ5UmVzdWx0Lmxhc3RLZXkgYXMgRHluYW1vS2V5IHwgdW5kZWZpbmVkKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNYXJrcyBhIHF1ZXVlIHJvdyBhcyBwcm9jZXNzZWQgYnkgZGVsZXRpbmcgaXQgdmlhIHByaW1hcnkga2V5LlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHdvcmtlciBzdWNjZXNzZnVsbHkgYXBwbGllZCBwcmlvcml0eSB1cGRhdGUgaW4gTGVhZFNxdWFyZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGF3YWl0IGxzcVByaW9yaXR5VXBkYXRpb25EYW8ubWFya1Byb2Nlc3NlZChcImxzcS11dWlkXCIpO1xuICAgICAqL1xuICAgIG1hcmtQcm9jZXNzZWQgPSBhc3luYyAobHNxUHJpb3JpdHlVcGRhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUobHNxUHJpb3JpdHlVcGRhdGlvbklkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTWFya3MgcHJvY2Vzc2VkIGJ5IExlYWRTcXVhcmVkIGBvcHBvcnR1bml0eUlkYCAobG9va3VwIEdTSSwgdGhlbiBkZWxldGUgYnkgUEspLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBhd2FpdCBsc3FQcmlvcml0eVVwZGF0aW9uRGFvLm1hcmtQcm9jZXNzZWRCeU9wcG9ydHVuaXR5SWQoXCJvcHAtMTIzXCIpO1xuICAgICAqL1xuICAgIG1hcmtQcm9jZXNzZWRCeU9wcG9ydHVuaXR5SWQgPSBhc3luYyAob3Bwb3J0dW5pdHlJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZ2V0QnlPcHBvcnR1bml0eUlkKG9wcG9ydHVuaXR5SWQpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlKHJvdy5sc3FQcmlvcml0eVVwZGF0aW9uSWQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBvbmUgcXVldWUgcmVjb3JkIGJ5IHByaW1hcnkga2V5LlxuICAgICAqL1xuICAgIGRlbGV0ZUJ5SWQgPSBhc3luYyAobHNxUHJpb3JpdHlVcGRhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUobHNxUHJpb3JpdHlVcGRhdGlvbklkKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgbHNxUHJpb3JpdHlVcGRhdGlvbkRhbyA9IG5ldyBMc3FQcmlvcml0eVVwZGF0aW9uRGFvKCk7XG4iXX0=
|