cmp-aws-database 2.1.2-dev.3 → 2.1.2-dev.30

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.
Files changed (34) hide show
  1. package/dist/config/table-names.d.ts +8 -0
  2. package/dist/config/table-names.js +9 -1
  3. package/dist/customer-user/browse-history/browse-history-dao.d.ts +122 -0
  4. package/dist/customer-user/browse-history/browse-history-dao.js +173 -0
  5. package/dist/customer-user/browse-history/browse-history-model.d.ts +30 -0
  6. package/dist/customer-user/browse-history/browse-history-model.js +114 -0
  7. package/dist/customer-user/cart/cart-model.d.ts +4 -0
  8. package/dist/customer-user/cart/cart-model.js +13 -2
  9. package/dist/customer-user/catalogue/catalogue-items-dao.d.ts +43 -0
  10. package/dist/customer-user/catalogue/catalogue-items-dao.js +143 -0
  11. package/dist/customer-user/catalogue/catalogue-items-model.d.ts +18 -0
  12. package/dist/customer-user/catalogue/catalogue-items-model.js +72 -0
  13. package/dist/customer-user/category/category-dao.d.ts +19 -0
  14. package/dist/customer-user/category/category-dao.js +39 -1
  15. package/dist/customer-user/cutlery/cutlery-model.d.ts +1 -0
  16. package/dist/customer-user/cutlery/cutlery-model.js +5 -1
  17. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.d.ts +1 -0
  18. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.js +5 -1
  19. package/dist/customer-user/order-module/order/order-model.d.ts +9 -0
  20. package/dist/customer-user/order-module/order/order-model.js +33 -2
  21. package/dist/customer-user/order-module/plate-order/plate-order-model.d.ts +4 -0
  22. package/dist/customer-user/order-module/plate-order/plate-order-model.js +14 -2
  23. package/dist/customer-user/resume-journey/resume-journey-model.d.ts +3 -0
  24. package/dist/customer-user/resume-journey/resume-journey-model.js +13 -1
  25. package/dist/customer-user/testing-session/testing-session-dao.d.ts +86 -0
  26. package/dist/customer-user/testing-session/testing-session-dao.js +149 -0
  27. package/dist/customer-user/testing-session/testing-session-model.d.ts +30 -0
  28. package/dist/customer-user/testing-session/testing-session-model.js +96 -0
  29. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.d.ts +114 -0
  30. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.js +225 -0
  31. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.d.ts +21 -0
  32. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.js +70 -0
  33. package/index.js +3 -1
  34. package/package.json +1 -1
@@ -0,0 +1,96 @@
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.convertToTestingSessionModel = exports.TestingSessionModel = exports.TESTING_SESSION_PREFERENCE = exports.TESTING_SESSION_STAGE = 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
+ exports.TESTING_SESSION_STAGE = {
12
+ CONFIRMED: "CONFIRMED",
13
+ CANCELLED: "CANCELLED",
14
+ RESCHEDULED: "RESCHEDULED",
15
+ COMPLETED: "COMPLETED"
16
+ };
17
+ exports.TESTING_SESSION_PREFERENCE = {
18
+ VEG: "VEG",
19
+ NONVEG: "NONVEG"
20
+ };
21
+ const testingSessionSchema = new dynamoose_1.default.Schema({
22
+ testingSessionId: {
23
+ type: String,
24
+ hashKey: true,
25
+ required: true,
26
+ default: () => (0, crypto_1.randomUUID)()
27
+ },
28
+ testingDate: {
29
+ type: String,
30
+ required: true
31
+ },
32
+ testingTime: {
33
+ type: String,
34
+ required: true
35
+ },
36
+ visitDurationMinutes: {
37
+ type: Number,
38
+ required: true
39
+ },
40
+ venueAddress: {
41
+ type: String,
42
+ required: true
43
+ },
44
+ locationUrl: {
45
+ type: String,
46
+ required: true
47
+ },
48
+ stage: {
49
+ type: String,
50
+ required: true,
51
+ enum: [
52
+ exports.TESTING_SESSION_STAGE.CONFIRMED,
53
+ exports.TESTING_SESSION_STAGE.CANCELLED,
54
+ exports.TESTING_SESSION_STAGE.RESCHEDULED,
55
+ exports.TESTING_SESSION_STAGE.COMPLETED
56
+ ],
57
+ index: {
58
+ name: "stageIndex",
59
+ type: "global"
60
+ }
61
+ },
62
+ preference: {
63
+ type: String,
64
+ required: true,
65
+ enum: [exports.TESTING_SESSION_PREFERENCE.VEG, exports.TESTING_SESSION_PREFERENCE.NONVEG]
66
+ },
67
+ noOfGuestVisit: {
68
+ type: Number,
69
+ required: true
70
+ },
71
+ userId: {
72
+ type: String,
73
+ required: true,
74
+ index: [
75
+ {
76
+ name: "userIdIndex",
77
+ type: "global"
78
+ },
79
+ {
80
+ name: "userIdStageIndex",
81
+ type: "global",
82
+ rangeKey: "stage"
83
+ }
84
+ ]
85
+ },
86
+ ...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
87
+ }, {
88
+ saveUnknown: false,
89
+ timestamps: true
90
+ });
91
+ exports.TestingSessionModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.TESTING_SESSION, testingSessionSchema, { create: false, waitForActive: false });
92
+ const convertToTestingSessionModel = (input) => {
93
+ return new exports.TestingSessionModel(input);
94
+ };
95
+ exports.convertToTestingSessionModel = convertToTestingSessionModel;
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy1zZXNzaW9uLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1c3RvbWVyLXVzZXIvdGVzdGluZy1zZXNzaW9uL3Rlc3Rpbmctc2Vzc2lvbi1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFDbEMsbUNBQW9DO0FBQ3BDLHFFQUE2RjtBQUM3RiwwREFBdUQ7QUFFMUMsUUFBQSxxQkFBcUIsR0FBRztJQUNqQyxTQUFTLEVBQUUsV0FBVztJQUN0QixTQUFTLEVBQUUsV0FBVztJQUN0QixXQUFXLEVBQUUsYUFBYTtJQUMxQixTQUFTLEVBQUUsV0FBVztDQUNoQixDQUFDO0FBS0UsUUFBQSwwQkFBMEIsR0FBRztJQUN0QyxHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0NBQ1YsQ0FBQztBQXNCWCxNQUFNLG9CQUFvQixHQUFHLElBQUksbUJBQVMsQ0FBQyxNQUFNLENBQzdDO0lBQ0ksZ0JBQWdCLEVBQUU7UUFDZCxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLElBQUk7UUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBVSxHQUFFO0tBQzlCO0lBQ0QsV0FBVyxFQUFFO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxvQkFBb0IsRUFBRTtRQUNsQixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsWUFBWSxFQUFFO1FBQ1YsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxLQUFLLEVBQUU7UUFDSCxJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFO1lBQ0YsNkJBQXFCLENBQUMsU0FBUztZQUMvQiw2QkFBcUIsQ0FBQyxTQUFTO1lBQy9CLDZCQUFxQixDQUFDLFdBQVc7WUFDakMsNkJBQXFCLENBQUMsU0FBUztTQUNsQztRQUNELEtBQUssRUFBRTtZQUNILElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxRQUFRO1NBQ2pCO0tBQ0o7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLENBQUMsa0NBQTBCLENBQUMsR0FBRyxFQUFFLGtDQUEwQixDQUFDLE1BQU0sQ0FBQztLQUM1RTtJQUNELGNBQWMsRUFBRTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7S0FDakI7SUFDRCxNQUFNLEVBQUU7UUFDSixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsS0FBSyxFQUFFO1lBQ0g7Z0JBQ0ksSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLElBQUksRUFBRSxRQUFRO2FBQ2pCO1lBQ0Q7Z0JBQ0ksSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87YUFDcEI7U0FDSjtLQUNKO0lBQ0QsR0FBRyxrREFBMkI7Q0FDakMsRUFDRDtJQUNJLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0NBQ25CLENBQ0osQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQUcsbUJBQVMsQ0FBQyxLQUFLLENBQzlDLHlCQUFXLENBQUMsZUFBZSxFQUMzQixvQkFBb0IsRUFDcEIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FDMUMsQ0FBQztBQUVLLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxLQUFpRCxFQUFFLEVBQUU7SUFDOUYsT0FBTyxJQUFJLDJCQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQUZXLFFBQUEsNEJBQTRCLGdDQUV2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkeW5hbW9vc2UgZnJvbSBcImR5bmFtb29zZVwiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IEJBU0VfRFlOQU1PT1NFX0FVRElUX1NDSEVNQSwgQmFzZUR5bmFtb29zZU1vZGVsIH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQgeyBUQUJMRV9OQU1FUyB9IGZyb20gXCIuLi8uLi9jb25maWcvdGFibGUtbmFtZXNcIjtcblxuZXhwb3J0IGNvbnN0IFRFU1RJTkdfU0VTU0lPTl9TVEFHRSA9IHtcbiAgICBDT05GSVJNRUQ6IFwiQ09ORklSTUVEXCIsXG4gICAgQ0FOQ0VMTEVEOiBcIkNBTkNFTExFRFwiLFxuICAgIFJFU0NIRURVTEVEOiBcIlJFU0NIRURVTEVEXCIsXG4gICAgQ09NUExFVEVEOiBcIkNPTVBMRVRFRFwiXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBUZXN0aW5nU2Vzc2lvblN0YWdlID1cbiAgICAodHlwZW9mIFRFU1RJTkdfU0VTU0lPTl9TVEFHRSlba2V5b2YgdHlwZW9mIFRFU1RJTkdfU0VTU0lPTl9TVEFHRV07XG5cbmV4cG9ydCBjb25zdCBURVNUSU5HX1NFU1NJT05fUFJFRkVSRU5DRSA9IHtcbiAgICBWRUc6IFwiVkVHXCIsXG4gICAgTk9OVkVHOiBcIk5PTlZFR1wiXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBUZXN0aW5nU2Vzc2lvblByZWZlcmVuY2UgPVxuICAgICh0eXBlb2YgVEVTVElOR19TRVNTSU9OX1BSRUZFUkVOQ0UpW2tleW9mIHR5cGVvZiBURVNUSU5HX1NFU1NJT05fUFJFRkVSRU5DRV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdGluZ1Nlc3Npb24gZXh0ZW5kcyBCYXNlRHluYW1vb3NlTW9kZWwge1xuICAgIHRlc3RpbmdTZXNzaW9uSWQ6IHN0cmluZztcbiAgICB0ZXN0aW5nRGF0ZTogc3RyaW5nO1xuICAgIHRlc3RpbmdUaW1lOiBzdHJpbmc7XG4gICAgdmlzaXREdXJhdGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgICB2ZW51ZUFkZHJlc3M6IHN0cmluZztcbiAgICBsb2NhdGlvblVybDogc3RyaW5nO1xuICAgIHN0YWdlOiBUZXN0aW5nU2Vzc2lvblN0YWdlO1xuICAgIHByZWZlcmVuY2U6IFRlc3RpbmdTZXNzaW9uUHJlZmVyZW5jZTtcbiAgICBub09mR3Vlc3RWaXNpdDogbnVtYmVyO1xuICAgIHVzZXJJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVUZXN0aW5nU2Vzc2lvbklucHV0ID0gT21pdDxUZXN0aW5nU2Vzc2lvbiwgXCJ0ZXN0aW5nU2Vzc2lvbklkXCI+ICYge1xuICAgIHRlc3RpbmdTZXNzaW9uSWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCB0ZXN0aW5nU2Vzc2lvblNjaGVtYSA9IG5ldyBkeW5hbW9vc2UuU2NoZW1hKFxuICAgIHtcbiAgICAgICAgdGVzdGluZ1Nlc3Npb25JZDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgaGFzaEtleTogdHJ1ZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gcmFuZG9tVVVJRCgpXG4gICAgICAgIH0sXG4gICAgICAgIHRlc3RpbmdEYXRlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0ZXN0aW5nVGltZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaXREdXJhdGlvbk1pbnV0ZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHZlbnVlQWRkcmVzczoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgbG9jYXRpb25Vcmw6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHN0YWdlOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGVudW06IFtcbiAgICAgICAgICAgICAgICBURVNUSU5HX1NFU1NJT05fU1RBR0UuQ09ORklSTUVELFxuICAgICAgICAgICAgICAgIFRFU1RJTkdfU0VTU0lPTl9TVEFHRS5DQU5DRUxMRUQsXG4gICAgICAgICAgICAgICAgVEVTVElOR19TRVNTSU9OX1NUQUdFLlJFU0NIRURVTEVELFxuICAgICAgICAgICAgICAgIFRFU1RJTkdfU0VTU0lPTl9TVEFHRS5DT01QTEVURURcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpbmRleDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic3RhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2xvYmFsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmVyZW5jZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBlbnVtOiBbVEVTVElOR19TRVNTSU9OX1BSRUZFUkVOQ0UuVkVHLCBURVNUSU5HX1NFU1NJT05fUFJFRkVSRU5DRS5OT05WRUddXG4gICAgICAgIH0sXG4gICAgICAgIG5vT2ZHdWVzdFZpc2l0OiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB1c2VySWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgaW5kZXg6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidXNlcklkSW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInVzZXJJZFN0YWdlSW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VLZXk6IFwic3RhZ2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uQkFTRV9EWU5BTU9PU0VfQVVESVRfU0NIRU1BXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHNhdmVVbmtub3duOiBmYWxzZSxcbiAgICAgICAgdGltZXN0YW1wczogdHJ1ZVxuICAgIH1cbik7XG5cbmV4cG9ydCBjb25zdCBUZXN0aW5nU2Vzc2lvbk1vZGVsID0gZHluYW1vb3NlLm1vZGVsPFRlc3RpbmdTZXNzaW9uPihcbiAgICBUQUJMRV9OQU1FUy5URVNUSU5HX1NFU1NJT04sXG4gICAgdGVzdGluZ1Nlc3Npb25TY2hlbWEsXG4gICAgeyBjcmVhdGU6IGZhbHNlLCB3YWl0Rm9yQWN0aXZlOiBmYWxzZSB9XG4pO1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvVGVzdGluZ1Nlc3Npb25Nb2RlbCA9IChpbnB1dDogQ3JlYXRlVGVzdGluZ1Nlc3Npb25JbnB1dCB8IFRlc3RpbmdTZXNzaW9uKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBUZXN0aW5nU2Vzc2lvbk1vZGVsKGlucHV0KTtcbn07XG4iXX0=
@@ -0,0 +1,114 @@
1
+ import { GenericDynamooseDAO } from "../../base-dynamoose-dao";
2
+ import { AuthContext } from "../../base-dynamoose-model";
3
+ import { CreateThirdPartyApiKeyInput, ThirdPartyApiKey, ThirdPartyApiKeyStatus } from "./third-party-api-key-model";
4
+ type ListResult = {
5
+ items: ThirdPartyApiKey[];
6
+ nextToken?: string;
7
+ };
8
+ /**
9
+ * Thrown when the same `apiKeyHash` already exists in the table.
10
+ * Use this to return a clean duplicate-key error from admin/create-key APIs.
11
+ */
12
+ export declare class DuplicateApiKeyHashError extends Error {
13
+ constructor(apiKeyHash: string);
14
+ }
15
+ /**
16
+ * DAO for permanent third-party API keys (Method 2).
17
+ *
18
+ * Table keys: `partnerId` (PK) + `apiKeyId` (SK).
19
+ * Auth lookup: hash incoming key, then use `getActiveByApiKeyHash`.
20
+ */
21
+ declare class ThirdPartyApiKeyDao extends GenericDynamooseDAO<ThirdPartyApiKey> {
22
+ constructor();
23
+ /**
24
+ * Creates a new permanent API key record for a partner.
25
+ *
26
+ * Use when: admin/onboarding flow issues a new API key to a third-party partner.
27
+ * - `apiKeyId` auto-generates if omitted.
28
+ * - Pass only `apiKeyHash` (SHA-256 etc.), never the raw key.
29
+ * - Default status is `ACTIVE`.
30
+ * - Throws `DuplicateApiKeyHashError` if hash already exists.
31
+ */
32
+ save: (item: CreateThirdPartyApiKeyInput, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
33
+ /**
34
+ * Updates an existing API key by `partnerId` + `apiKeyId`.
35
+ *
36
+ * Use when: changing key metadata or rotating hash/status from admin tools.
37
+ * - Fails if the record does not exist.
38
+ * - Rejects duplicate `apiKeyHash` belonging to another key.
39
+ * - Stamps `updated_time` / `updated_user` automatically.
40
+ */
41
+ updateApiKey: (partnerId: string, apiKeyId: string, updates: Partial<ThirdPartyApiKey>, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
42
+ /**
43
+ * Fetches one API key by table primary key (`partnerId` + `apiKeyId`).
44
+ *
45
+ * Use when: admin detail page, key management screen, or internal ops lookup
46
+ * when both partner id and key id are already known.
47
+ */
48
+ getByPartnerAndApiKeyId: (partnerId: string, apiKeyId: string) => Promise<ThirdPartyApiKey | null>;
49
+ /**
50
+ * Lists all API keys for a partner (query on PK `partnerId`).
51
+ *
52
+ * Use when: partner dashboard showing every issued key (active + inactive).
53
+ * Supports pagination via `limit` and `token`.
54
+ */
55
+ listByPartnerId: (partnerId: string, limit?: number, token?: string) => Promise<ListResult>;
56
+ /**
57
+ * Lists partner keys filtered by `status` (`ACTIVE` or `INACTIVE`).
58
+ *
59
+ * Use when: showing only active keys in UI, or auditing disabled/revoked keys
60
+ * for one partner without scanning the whole table.
61
+ */
62
+ listByPartnerIdAndStatus: (partnerId: string, status: ThirdPartyApiKeyStatus, limit?: number, token?: string) => Promise<ListResult>;
63
+ /**
64
+ * Finds a key by `apiKeyHash` using GSI `apiKeyHashIndex`.
65
+ *
66
+ * Use when: you need the record regardless of status (admin/debug),
67
+ * or before deciding whether to allow auth.
68
+ * Returns `null` if no key matches the hash.
69
+ */
70
+ getByApiKeyHash: (apiKeyHash: string) => Promise<ThirdPartyApiKey | null>;
71
+ /**
72
+ * Validates an incoming API request key (auth middleware use-case).
73
+ *
74
+ * Use when: request header/bearer token is hashed and you must allow access
75
+ * only if the key exists AND `status === ACTIVE` AND not past `expiresAt`.
76
+ * Returns `null` for missing, inactive, revoked, or expired keys.
77
+ */
78
+ getActiveByApiKeyHash: (apiKeyHash: string) => Promise<ThirdPartyApiKey | null>;
79
+ /**
80
+ * Records when an API key was last used (audit / monitoring).
81
+ *
82
+ * Use when: auth middleware successfully validates a key and you want usage telemetry.
83
+ */
84
+ touchLastUsedAt: (partnerId: string, apiKeyId: string) => Promise<void>;
85
+ /**
86
+ * Paginated query on GSI `apiKeyHashIndex`.
87
+ *
88
+ * Use when: low-level lookup by hash with pagination.
89
+ * Normally prefer `getByApiKeyHash` for single-record auth/admin flows.
90
+ */
91
+ listByApiKeyHash: (apiKeyHash: string, limit?: number, token?: string) => Promise<ListResult>;
92
+ /**
93
+ * Lists keys across all partners by `status` (GSI `statusIndex`).
94
+ *
95
+ * Use when: global admin reports — e.g. all active keys, or cleanup job
96
+ * for all inactive/revoked keys.
97
+ */
98
+ listByStatus: (status: ThirdPartyApiKeyStatus, limit?: number, token?: string) => Promise<ListResult>;
99
+ /**
100
+ * Disables an API key without deleting it (`status` → `INACTIVE`).
101
+ *
102
+ * Use when: partner offboarding, key compromise, or temporary suspension.
103
+ * Disabled keys fail `getActiveByApiKeyHash` immediately.
104
+ */
105
+ deactivate: (partnerId: string, apiKeyId: string, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
106
+ /**
107
+ * Re-enables a previously disabled key (`status` → `ACTIVE`).
108
+ *
109
+ * Use when: restoring partner access after suspension without issuing a new key.
110
+ */
111
+ activate: (partnerId: string, apiKeyId: string, authContext?: AuthContext) => Promise<ThirdPartyApiKey>;
112
+ }
113
+ export declare const thirdPartyApiKeyDao: ThirdPartyApiKeyDao;
114
+ export {};
@@ -0,0 +1,225 @@
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.thirdPartyApiKeyDao = exports.DuplicateApiKeyHashError = void 0;
7
+ const dynamoose_1 = __importDefault(require("dynamoose"));
8
+ const base_dynamoose_dao_1 = require("../../base-dynamoose-dao");
9
+ const third_party_api_key_model_1 = require("./third-party-api-key-model");
10
+ /**
11
+ * Thrown when the same `apiKeyHash` already exists in the table.
12
+ * Use this to return a clean duplicate-key error from admin/create-key APIs.
13
+ */
14
+ class DuplicateApiKeyHashError extends Error {
15
+ constructor(apiKeyHash) {
16
+ super(`apiKeyHash already exists: ${apiKeyHash}`);
17
+ this.name = "DuplicateApiKeyHashError";
18
+ }
19
+ }
20
+ exports.DuplicateApiKeyHashError = DuplicateApiKeyHashError;
21
+ /**
22
+ * DAO for permanent third-party API keys (Method 2).
23
+ *
24
+ * Table keys: `partnerId` (PK) + `apiKeyId` (SK).
25
+ * Auth lookup: hash incoming key, then use `getActiveByApiKeyHash`.
26
+ */
27
+ class ThirdPartyApiKeyDao extends base_dynamoose_dao_1.GenericDynamooseDAO {
28
+ constructor() {
29
+ super(third_party_api_key_model_1.ThirdPartyApiKeyModel, "partnerId", "apiKeyId");
30
+ /**
31
+ * Creates a new permanent API key record for a partner.
32
+ *
33
+ * Use when: admin/onboarding flow issues a new API key to a third-party partner.
34
+ * - `apiKeyId` auto-generates if omitted.
35
+ * - Pass only `apiKeyHash` (SHA-256 etc.), never the raw key.
36
+ * - Default status is `ACTIVE`.
37
+ * - Throws `DuplicateApiKeyHashError` if hash already exists.
38
+ */
39
+ this.save = async (item, authContext) => {
40
+ const existing = await this.getByApiKeyHash(item.apiKeyHash);
41
+ if (existing) {
42
+ throw new DuplicateApiKeyHashError(item.apiKeyHash);
43
+ }
44
+ return super.save({
45
+ ...item,
46
+ status: item.status ?? third_party_api_key_model_1.THIRD_PARTY_API_KEY_STATUS.ACTIVE
47
+ }, authContext);
48
+ };
49
+ /**
50
+ * Updates an existing API key by `partnerId` + `apiKeyId`.
51
+ *
52
+ * Use when: changing key metadata or rotating hash/status from admin tools.
53
+ * - Fails if the record does not exist.
54
+ * - Rejects duplicate `apiKeyHash` belonging to another key.
55
+ * - Stamps `updated_time` / `updated_user` automatically.
56
+ */
57
+ this.updateApiKey = async (partnerId, apiKeyId, updates, authContext) => {
58
+ if (updates.apiKeyHash) {
59
+ const duplicate = await this.getByApiKeyHash(updates.apiKeyHash);
60
+ if (duplicate && (duplicate.partnerId !== partnerId || duplicate.apiKeyId !== apiKeyId)) {
61
+ throw new DuplicateApiKeyHashError(updates.apiKeyHash);
62
+ }
63
+ }
64
+ const updated = await third_party_api_key_model_1.ThirdPartyApiKeyModel.update({ partnerId, apiKeyId }, {
65
+ ...updates,
66
+ updated_time: new Date(),
67
+ updated_user: authContext?.userSub
68
+ }, {
69
+ condition: new dynamoose_1.default.Condition().attribute("apiKeyId").exists()
70
+ });
71
+ return updated;
72
+ };
73
+ /**
74
+ * Fetches one API key by table primary key (`partnerId` + `apiKeyId`).
75
+ *
76
+ * Use when: admin detail page, key management screen, or internal ops lookup
77
+ * when both partner id and key id are already known.
78
+ */
79
+ this.getByPartnerAndApiKeyId = async (partnerId, apiKeyId) => this.get(partnerId, apiKeyId);
80
+ /**
81
+ * Lists all API keys for a partner (query on PK `partnerId`).
82
+ *
83
+ * Use when: partner dashboard showing every issued key (active + inactive).
84
+ * Supports pagination via `limit` and `token`.
85
+ */
86
+ this.listByPartnerId = async (partnerId, limit, token) => {
87
+ const decodedToken = this.decode(token);
88
+ let queryBuilder = third_party_api_key_model_1.ThirdPartyApiKeyModel.query("partnerId").eq(partnerId);
89
+ if (decodedToken) {
90
+ queryBuilder = queryBuilder.startAt(decodedToken);
91
+ }
92
+ if (typeof limit === "number") {
93
+ queryBuilder = queryBuilder.limit(limit);
94
+ }
95
+ const queryResult = await queryBuilder.exec();
96
+ return {
97
+ items: queryResult,
98
+ nextToken: await this.encode(queryResult.lastKey)
99
+ };
100
+ };
101
+ /**
102
+ * Lists partner keys filtered by `status` (`ACTIVE` or `INACTIVE`).
103
+ *
104
+ * Use when: showing only active keys in UI, or auditing disabled/revoked keys
105
+ * for one partner without scanning the whole table.
106
+ */
107
+ this.listByPartnerIdAndStatus = async (partnerId, status, limit, token) => {
108
+ const decodedToken = this.decode(token);
109
+ let queryBuilder = third_party_api_key_model_1.ThirdPartyApiKeyModel.query("partnerId")
110
+ .eq(partnerId)
111
+ .where("status")
112
+ .eq(status);
113
+ if (decodedToken) {
114
+ queryBuilder = queryBuilder.startAt(decodedToken);
115
+ }
116
+ if (typeof limit === "number") {
117
+ queryBuilder = queryBuilder.limit(limit);
118
+ }
119
+ const queryResult = await queryBuilder.exec();
120
+ return {
121
+ items: queryResult,
122
+ nextToken: await this.encode(queryResult.lastKey)
123
+ };
124
+ };
125
+ /**
126
+ * Finds a key by `apiKeyHash` using GSI `apiKeyHashIndex`.
127
+ *
128
+ * Use when: you need the record regardless of status (admin/debug),
129
+ * or before deciding whether to allow auth.
130
+ * Returns `null` if no key matches the hash.
131
+ */
132
+ this.getByApiKeyHash = async (apiKeyHash) => {
133
+ const result = await this.listByApiKeyHash(apiKeyHash, 1);
134
+ return result.items[0] ?? null;
135
+ };
136
+ /**
137
+ * Validates an incoming API request key (auth middleware use-case).
138
+ *
139
+ * Use when: request header/bearer token is hashed and you must allow access
140
+ * only if the key exists AND `status === ACTIVE` AND not past `expiresAt`.
141
+ * Returns `null` for missing, inactive, revoked, or expired keys.
142
+ */
143
+ this.getActiveByApiKeyHash = async (apiKeyHash) => {
144
+ const item = await this.getByApiKeyHash(apiKeyHash);
145
+ if (!item || item.status !== third_party_api_key_model_1.THIRD_PARTY_API_KEY_STATUS.ACTIVE) {
146
+ return null;
147
+ }
148
+ if (item.expiresAt != null && item.expiresAt <= Date.now()) {
149
+ return null;
150
+ }
151
+ return item;
152
+ };
153
+ /**
154
+ * Records when an API key was last used (audit / monitoring).
155
+ *
156
+ * Use when: auth middleware successfully validates a key and you want usage telemetry.
157
+ */
158
+ this.touchLastUsedAt = async (partnerId, apiKeyId) => {
159
+ await third_party_api_key_model_1.ThirdPartyApiKeyModel.update({ partnerId, apiKeyId }, { lastUsedAt: Date.now() });
160
+ };
161
+ /**
162
+ * Paginated query on GSI `apiKeyHashIndex`.
163
+ *
164
+ * Use when: low-level lookup by hash with pagination.
165
+ * Normally prefer `getByApiKeyHash` for single-record auth/admin flows.
166
+ */
167
+ this.listByApiKeyHash = async (apiKeyHash, limit, token) => {
168
+ const decodedToken = this.decode(token);
169
+ let queryBuilder = third_party_api_key_model_1.ThirdPartyApiKeyModel.query("apiKeyHash")
170
+ .eq(apiKeyHash)
171
+ .using("apiKeyHashIndex");
172
+ if (decodedToken) {
173
+ queryBuilder = queryBuilder.startAt(decodedToken);
174
+ }
175
+ if (typeof limit === "number") {
176
+ queryBuilder = queryBuilder.limit(limit);
177
+ }
178
+ const queryResult = await queryBuilder.exec();
179
+ return {
180
+ items: queryResult,
181
+ nextToken: await this.encode(queryResult.lastKey)
182
+ };
183
+ };
184
+ /**
185
+ * Lists keys across all partners by `status` (GSI `statusIndex`).
186
+ *
187
+ * Use when: global admin reports — e.g. all active keys, or cleanup job
188
+ * for all inactive/revoked keys.
189
+ */
190
+ this.listByStatus = async (status, limit, token) => {
191
+ const decodedToken = this.decode(token);
192
+ let queryBuilder = third_party_api_key_model_1.ThirdPartyApiKeyModel.query("status").eq(status).using("statusIndex");
193
+ if (decodedToken) {
194
+ queryBuilder = queryBuilder.startAt(decodedToken);
195
+ }
196
+ if (typeof limit === "number") {
197
+ queryBuilder = queryBuilder.limit(limit);
198
+ }
199
+ const queryResult = await queryBuilder.exec();
200
+ return {
201
+ items: queryResult,
202
+ nextToken: await this.encode(queryResult.lastKey)
203
+ };
204
+ };
205
+ /**
206
+ * Disables an API key without deleting it (`status` → `INACTIVE`).
207
+ *
208
+ * Use when: partner offboarding, key compromise, or temporary suspension.
209
+ * Disabled keys fail `getActiveByApiKeyHash` immediately.
210
+ */
211
+ this.deactivate = async (partnerId, apiKeyId, authContext) => {
212
+ return this.updateApiKey(partnerId, apiKeyId, { status: third_party_api_key_model_1.THIRD_PARTY_API_KEY_STATUS.INACTIVE }, authContext);
213
+ };
214
+ /**
215
+ * Re-enables a previously disabled key (`status` → `ACTIVE`).
216
+ *
217
+ * Use when: restoring partner access after suspension without issuing a new key.
218
+ */
219
+ this.activate = async (partnerId, apiKeyId, authContext) => {
220
+ return this.updateApiKey(partnerId, apiKeyId, { status: third_party_api_key_model_1.THIRD_PARTY_API_KEY_STATUS.ACTIVE }, authContext);
221
+ };
222
+ }
223
+ }
224
+ exports.thirdPartyApiKeyDao = new ThirdPartyApiKeyDao();
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhpcmQtcGFydHktYXBpLWtleS1kYW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGF0bmVyLXRoaXJkLXBhcnR5L3RoaXJkLXBhcnR5LWFwaS1rZXkvdGhpcmQtcGFydHktYXBpLWtleS1kYW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQWtDO0FBQ2xDLGlFQUEwRTtBQUUxRSwyRUFNcUM7QUFPckM7OztHQUdHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSxLQUFLO0lBQy9DLFlBQVksVUFBa0I7UUFDMUIsS0FBSyxDQUFDLDhCQUE4QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLENBQUM7SUFDM0MsQ0FBQztDQUNKO0FBTEQsNERBS0M7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sbUJBQW9CLFNBQVEsd0NBQXFDO0lBQ25FO1FBQ0ksS0FBSyxDQUFDLGlEQUFxQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUcxRDs7Ozs7Ozs7V0FRRztRQUNILFNBQUksR0FBRyxLQUFLLEVBQUUsSUFBaUMsRUFBRSxXQUF5QixFQUE2QixFQUFFO1lBQ3JHLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQ2I7Z0JBQ0ksR0FBRyxJQUFJO2dCQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLHNEQUEwQixDQUFDLE1BQU07YUFDdkMsRUFDckIsV0FBVyxDQUNkLENBQUM7UUFDTixDQUFDLENBQUM7UUFFRjs7Ozs7OztXQU9HO1FBQ0gsaUJBQVksR0FBRyxLQUFL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XCJkeW5hbW9vc2VcIjtcbmltcG9ydCB7IER5bmFtb0tleSwgR2VuZXJpY0R5bmFtb29zZURBTyB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1kYW9cIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2Jhc2UtZHluYW1vb3NlLW1vZGVsXCI7XG5pbXBvcnQge1xuICAgIENyZWF0ZVRoaXJkUGFydHlBcGlLZXlJbnB1dCxcbiAgICBUSElSRF9QQVJUWV9BUElfS0VZX1NUQVRVUyxcbiAgICBUaGlyZFBhcnR5QXBpS2V5LFxuICAgIFRoaXJkUGFydHlBcGlLZXlNb2RlbCxcbiAgICBUaGlyZFBhcnR5QXBpS2V5U3RhdHVzXG59IGZyb20gXCIuL3RoaXJkLXBhcnR5LWFwaS1rZXktbW9kZWxcIjtcblxudHlwZSBMaXN0UmVzdWx0ID0ge1xuICAgIGl0ZW1zOiBUaGlyZFBhcnR5QXBpS2V5W107XG4gICAgbmV4dFRva2VuPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBUaHJvd24gd2hlbiB0aGUgc2FtZSBgYXBpS2V5SGFzaGAgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRhYmxlLlxuICogVXNlIHRoaXMgdG8gcmV0dXJuIGEgY2xlYW4gZHVwbGljYXRlLWtleSBlcnJvciBmcm9tIGFkbWluL2NyZWF0ZS1rZXkgQVBJcy5cbiAqL1xuZXhwb3J0IGNsYXNzIER1cGxpY2F0ZUFwaUtleUhhc2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihhcGlLZXlIYXNoOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoYGFwaUtleUhhc2ggYWxyZWFkeSBleGlzdHM6ICR7YXBpS2V5SGFzaH1gKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJEdXBsaWNhdGVBcGlLZXlIYXNoRXJyb3JcIjtcbiAgICB9XG59XG5cbi8qKlxuICogREFPIGZvciBwZXJtYW5lbnQgdGhpcmQtcGFydHkgQVBJIGtleXMgKE1ldGhvZCAyKS5cbiAqXG4gKiBUYWJsZSBrZXlzOiBgcGFydG5lcklkYCAoUEspICsgYGFwaUtleUlkYCAoU0spLlxuICogQXV0aCBsb29rdXA6IGhhc2ggaW5jb21pbmcga2V5LCB0aGVuIHVzZSBgZ2V0QWN0aXZlQnlBcGlLZXlIYXNoYC5cbiAqL1xuY2xhc3MgVGhpcmRQYXJ0eUFwaUtleURhbyBleHRlbmRzIEdlbmVyaWNEeW5hbW9vc2VEQU88VGhpcmRQYXJ0eUFwaUtleT4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihUaGlyZFBhcnR5QXBpS2V5TW9kZWwsIFwicGFydG5lcklkXCIsIFwiYXBpS2V5SWRcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBwZXJtYW5lbnQgQVBJIGtleSByZWNvcmQgZm9yIGEgcGFydG5lci5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBhZG1pbi9vbmJvYXJkaW5nIGZsb3cgaXNzdWVzIGEgbmV3IEFQSSBrZXkgdG8gYSB0aGlyZC1wYXJ0eSBwYXJ0bmVyLlxuICAgICAqIC0gYGFwaUtleUlkYCBhdXRvLWdlbmVyYXRlcyBpZiBvbWl0dGVkLlxuICAgICAqIC0gUGFzcyBvbmx5IGBhcGlLZXlIYXNoYCAoU0hBLTI1NiBldGMuKSwgbmV2ZXIgdGhlIHJhdyBrZXkuXG4gICAgICogLSBEZWZhdWx0IHN0YXR1cyBpcyBgQUNUSVZFYC5cbiAgICAgKiAtIFRocm93cyBgRHVwbGljYXRlQXBpS2V5SGFzaEVycm9yYCBpZiBoYXNoIGFscmVhZHkgZXhpc3RzLlxuICAgICAqL1xuICAgIHNhdmUgPSBhc3luYyAoaXRlbTogQ3JlYXRlVGhpcmRQYXJ0eUFwaUtleUlucHV0LCBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0KTogUHJvbWlzZTxUaGlyZFBhcnR5QXBpS2V5PiA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5nZXRCeUFwaUtleUhhc2goaXRlbS5hcGlLZXlIYXNoKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQXBpS2V5SGFzaEVycm9yKGl0ZW0uYXBpS2V5SGFzaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuc2F2ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMgPz8gVEhJUkRfUEFSVFlfQVBJX0tFWV9TVEFUVVMuQUNUSVZFXG4gICAgICAgICAgICB9IGFzIFRoaXJkUGFydHlBcGlLZXksXG4gICAgICAgICAgICBhdXRoQ29udGV4dFxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIEFQSSBrZXkgYnkgYHBhcnRuZXJJZGAgKyBgYXBpS2V5SWRgLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IGNoYW5naW5nIGtleSBtZXRhZGF0YSBvciByb3RhdGluZyBoYXNoL3N0YXR1cyBmcm9tIGFkbWluIHRvb2xzLlxuICAgICAqIC0gRmFpbHMgaWYgdGhlIHJlY29yZCBkb2VzIG5vdCBleGlzdC5cbiAgICAgKiAtIFJlamVjdHMgZHVwbGljYXRlIGBhcGlLZXlIYXNoYCBiZWxvbmdpbmcgdG8gYW5vdGhlciBrZXkuXG4gICAgICogLSBTdGFtcHMgYHVwZGF0ZWRfdGltZWAgLyBgdXBkYXRlZF91c2VyYCBhdXRvbWF0aWNhbGx5LlxuICAgICAqL1xuICAgIHVwZGF0ZUFwaUtleSA9IGFzeW5jIChcbiAgICAgICAgcGFydG5lcklkOiBzdHJpbmcsXG4gICAgICAgIGFwaUtleUlkOiBzdHJpbmcsXG4gICAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8VGhpcmRQYXJ0eUFwaUtleT4sXG4gICAgICAgIGF1dGhDb250ZXh0PzogQXV0aENvbnRleHRcbiAgICApOiBQcm9taXNlPFRoaXJkUGFydHlBcGlLZXk+ID0+IHtcbiAgICAgICAgaWYgKHVwZGF0ZXMuYXBpS2V5SGFzaCkge1xuICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlID0gYXdhaXQgdGhpcy5nZXRCeUFwaUtleUhhc2godXBkYXRlcy5hcGlLZXlIYXNoKTtcbiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUgJiYgKGR1cGxpY2F0ZS5wYXJ0bmVySWQgIT09IHBhcnRuZXJJZCB8fCBkdXBsaWNhdGUuYXBpS2V5SWQgIT09IGFwaUtleUlkKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVBcGlLZXlIYXNoRXJyb3IodXBkYXRlcy5hcGlLZXlIYXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBUaGlyZFBhcnR5QXBpS2V5TW9kZWwudXBkYXRlKFxuICAgICAgICAgICAgeyBwYXJ0bmVySWQsIGFwaUtleUlkIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkX3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXBkYXRlZF91c2VyOiBhdXRoQ29udGV4dD8udXNlclN1YlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IG5ldyBkeW5hbW9vc2UuQ29uZGl0aW9uKCkuYXR0cmlidXRlKFwiYXBpS2V5SWRcIikuZXhpc3RzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQgYXMgdW5rbm93biBhcyBUaGlyZFBhcnR5QXBpS2V5O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIG9uZSBBUEkga2V5IGJ5IHRhYmxlIHByaW1hcnkga2V5IChgcGFydG5lcklkYCArIGBhcGlLZXlJZGApLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IGFkbWluIGRldGFpbCBwYWdlLCBrZXkgbWFuYWdlbWVudCBzY3JlZW4sIG9yIGludGVybmFsIG9wcyBsb29rdXBcbiAgICAgKiB3aGVuIGJvdGggcGFydG5lciBpZCBhbmQga2V5IGlkIGFyZSBhbHJlYWR5IGtub3duLlxuICAgICAqL1xuICAgIGdldEJ5UGFydG5lckFuZEFwaUtleUlkID0gYXN5bmMgKFxuICAgICAgICBwYXJ0bmVySWQ6IHN0cmluZyxcbiAgICAgICAgYXBpS2V5SWQ6IHN0cmluZ1xuICAgICk6IFByb21pc2U8VGhpcmRQYXJ0eUFwaUtleSB8IG51bGw+ID0+IHRoaXMuZ2V0KHBhcnRuZXJJZCwgYXBpS2V5SWQpO1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMgYWxsIEFQSSBrZXlzIGZvciBhIHBhcnRuZXIgKHF1ZXJ5IG9uIFBLIGBwYXJ0bmVySWRgKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBwYXJ0bmVyIGRhc2hib2FyZCBzaG93aW5nIGV2ZXJ5IGlzc3VlZCBrZXkgKGFjdGl2ZSArIGluYWN0aXZlKS5cbiAgICAgKiBTdXBwb3J0cyBwYWdpbmF0aW9uIHZpYSBgbGltaXRgIGFuZCBgdG9rZW5gLlxuICAgICAqL1xuICAgIGxpc3RCeVBhcnRuZXJJZCA9IGFzeW5jIChwYXJ0bmVySWQ6IHN0cmluZywgbGltaXQ/OiBudW1iZXIsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IFRoaXJkUGFydHlBcGlLZXlNb2RlbC5xdWVyeShcInBhcnRuZXJJZFwiKS5lcShwYXJ0bmVySWQpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGhpcmRQYXJ0eUFwaUtleVtdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMgcGFydG5lciBrZXlzIGZpbHRlcmVkIGJ5IGBzdGF0dXNgIChgQUNUSVZFYCBvciBgSU5BQ1RJVkVgKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBzaG93aW5nIG9ubHkgYWN0aXZlIGtleXMgaW4gVUksIG9yIGF1ZGl0aW5nIGRpc2FibGVkL3Jldm9rZWQga2V5c1xuICAgICAqIGZvciBvbmUgcGFydG5lciB3aXRob3V0IHNjYW5uaW5nIHRoZSB3aG9sZSB0YWJsZS5cbiAgICAgKi9cbiAgICBsaXN0QnlQYXJ0bmVySWRBbmRTdGF0dXMgPSBhc3luYyAoXG4gICAgICAgIHBhcnRuZXJJZDogc3RyaW5nLFxuICAgICAgICBzdGF0dXM6IFRoaXJkUGFydHlBcGlLZXlTdGF0dXMsXG4gICAgICAgIGxpbWl0PzogbnVtYmVyLFxuICAgICAgICB0b2tlbj86IHN0cmluZ1xuICAgICk6IFByb21pc2U8TGlzdFJlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZSh0b2tlbik7XG4gICAgICAgIGxldCBxdWVyeUJ1aWxkZXIgPSBUaGlyZFBhcnR5QXBpS2V5TW9kZWwucXVlcnkoXCJwYXJ0bmVySWRcIilcbiAgICAgICAgICAgIC5lcShwYXJ0bmVySWQpXG4gICAgICAgICAgICAud2hlcmUoXCJzdGF0dXNcIilcbiAgICAgICAgICAgIC5lcShzdGF0dXMpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGhpcmRQYXJ0eUFwaUtleVtdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluZHMgYSBrZXkgYnkgYGFwaUtleUhhc2hgIHVzaW5nIEdTSSBgYXBpS2V5SGFzaEluZGV4YC5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiB5b3UgbmVlZCB0aGUgcmVjb3JkIHJlZ2FyZGxlc3Mgb2Ygc3RhdHVzIChhZG1pbi9kZWJ1ZyksXG4gICAgICogb3IgYmVmb3JlIGRlY2lkaW5nIHdoZXRoZXIgdG8gYWxsb3cgYXV0aC5cbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBubyBrZXkgbWF0Y2hlcyB0aGUgaGFzaC5cbiAgICAgKi9cbiAgICBnZXRCeUFwaUtleUhhc2ggPSBhc3luYyAoYXBpS2V5SGFzaDogc3RyaW5nKTogUHJvbWlzZTxUaGlyZFBhcnR5QXBpS2V5IHwgbnVsbD4gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxpc3RCeUFwaUtleUhhc2goYXBpS2V5SGFzaCwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuaXRlbXNbMF0gPz8gbnVsbDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGFuIGluY29taW5nIEFQSSByZXF1ZXN0IGtleSAoYXV0aCBtaWRkbGV3YXJlIHVzZS1jYXNlKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiByZXF1ZXN0IGhlYWRlci9iZWFyZXIgdG9rZW4gaXMgaGFzaGVkIGFuZCB5b3UgbXVzdCBhbGxvdyBhY2Nlc3NcbiAgICAgKiBvbmx5IGlmIHRoZSBrZXkgZXhpc3RzIEFORCBgc3RhdHVzID09PSBBQ1RJVkVgIEFORCBub3QgcGFzdCBgZXhwaXJlc0F0YC5cbiAgICAgKiBSZXR1cm5zIGBudWxsYCBmb3IgbWlzc2luZywgaW5hY3RpdmUsIHJldm9rZWQsIG9yIGV4cGlyZWQga2V5cy5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVCeUFwaUtleUhhc2ggPSBhc3luYyAoYXBpS2V5SGFzaDogc3RyaW5nKTogUHJvbWlzZTxUaGlyZFBhcnR5QXBpS2V5IHwgbnVsbD4gPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gYXdhaXQgdGhpcy5nZXRCeUFwaUtleUhhc2goYXBpS2V5SGFzaCk7XG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLnN0YXR1cyAhPT0gVEhJUkRfUEFSVFlfQVBJX0tFWV9TVEFUVVMuQUNUSVZFKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5leHBpcmVzQXQgIT0gbnVsbCAmJiBpdGVtLmV4cGlyZXNBdCA8PSBEYXRlLm5vdygpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVjb3JkcyB3aGVuIGFuIEFQSSBrZXkgd2FzIGxhc3QgdXNlZCAoYXVkaXQgLyBtb25pdG9yaW5nKS5cbiAgICAgKlxuICAgICAqIFVzZSB3aGVuOiBhdXRoIG1pZGRsZXdhcmUgc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlcyBhIGtleSBhbmQgeW91IHdhbnQgdXNhZ2UgdGVsZW1ldHJ5LlxuICAgICAqL1xuICAgIHRvdWNoTGFzdFVzZWRBdCA9IGFzeW5jIChwYXJ0bmVySWQ6IHN0cmluZywgYXBpS2V5SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCBUaGlyZFBhcnR5QXBpS2V5TW9kZWwudXBkYXRlKHsgcGFydG5lcklkLCBhcGlLZXlJZCB9LCB7IGxhc3RVc2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFBhZ2luYXRlZCBxdWVyeSBvbiBHU0kgYGFwaUtleUhhc2hJbmRleGAuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogbG93LWxldmVsIGxvb2t1cCBieSBoYXNoIHdpdGggcGFnaW5hdGlvbi5cbiAgICAgKiBOb3JtYWxseSBwcmVmZXIgYGdldEJ5QXBpS2V5SGFzaGAgZm9yIHNpbmdsZS1yZWNvcmQgYXV0aC9hZG1pbiBmbG93cy5cbiAgICAgKi9cbiAgICBsaXN0QnlBcGlLZXlIYXNoID0gYXN5bmMgKGFwaUtleUhhc2g6IHN0cmluZywgbGltaXQ/OiBudW1iZXIsIHRva2VuPzogc3RyaW5nKTogUHJvbWlzZTxMaXN0UmVzdWx0PiA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IHRoaXMuZGVjb2RlKHRva2VuKTtcbiAgICAgICAgbGV0IHF1ZXJ5QnVpbGRlciA9IFRoaXJkUGFydHlBcGlLZXlNb2RlbC5xdWVyeShcImFwaUtleUhhc2hcIilcbiAgICAgICAgICAgIC5lcShhcGlLZXlIYXNoKVxuICAgICAgICAgICAgLnVzaW5nKFwiYXBpS2V5SGFzaEluZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGhpcmRQYXJ0eUFwaUtleVtdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTGlzdHMga2V5cyBhY3Jvc3MgYWxsIHBhcnRuZXJzIGJ5IGBzdGF0dXNgIChHU0kgYHN0YXR1c0luZGV4YCkuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogZ2xvYmFsIGFkbWluIHJlcG9ydHMg4oCUIGUuZy4gYWxsIGFjdGl2ZSBrZXlzLCBvciBjbGVhbnVwIGpvYlxuICAgICAqIGZvciBhbGwgaW5hY3RpdmUvcmV2b2tlZCBrZXlzLlxuICAgICAqL1xuICAgIGxpc3RCeVN0YXR1cyA9IGFzeW5jIChzdGF0dXM6IFRoaXJkUGFydHlBcGlLZXlTdGF0dXMsIGxpbWl0PzogbnVtYmVyLCB0b2tlbj86IHN0cmluZyk6IFByb21pc2U8TGlzdFJlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSB0aGlzLmRlY29kZSh0b2tlbik7XG4gICAgICAgIGxldCBxdWVyeUJ1aWxkZXIgPSBUaGlyZFBhcnR5QXBpS2V5TW9kZWwucXVlcnkoXCJzdGF0dXNcIikuZXEoc3RhdHVzKS51c2luZyhcInN0YXR1c0luZGV4XCIpO1xuICAgICAgICBpZiAoZGVjb2RlZFRva2VuKSB7XG4gICAgICAgICAgICBxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXIuc3RhcnRBdChkZWNvZGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlciA9IHF1ZXJ5QnVpbGRlci5saW1pdChsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCBxdWVyeUJ1aWxkZXIuZXhlYygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IHF1ZXJ5UmVzdWx0IGFzIHVua25vd24gYXMgVGhpcmRQYXJ0eUFwaUtleVtdLFxuICAgICAgICAgICAgbmV4dFRva2VuOiBhd2FpdCB0aGlzLmVuY29kZShxdWVyeVJlc3VsdC5sYXN0S2V5IGFzIER5bmFtb0tleSB8IHVuZGVmaW5lZClcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgYW4gQVBJIGtleSB3aXRob3V0IGRlbGV0aW5nIGl0IChgc3RhdHVzYCDihpIgYElOQUNUSVZFYCkuXG4gICAgICpcbiAgICAgKiBVc2Ugd2hlbjogcGFydG5lciBvZmZib2FyZGluZywga2V5IGNvbXByb21pc2UsIG9yIHRlbXBvcmFyeSBzdXNwZW5zaW9uLlxuICAgICAqIERpc2FibGVkIGtleXMgZmFpbCBgZ2V0QWN0aXZlQnlBcGlLZXlIYXNoYCBpbW1lZGlhdGVseS5cbiAgICAgKi9cbiAgICBkZWFjdGl2YXRlID0gYXN5bmMgKFxuICAgICAgICBwYXJ0bmVySWQ6IHN0cmluZyxcbiAgICAgICAgYXBpS2V5SWQ6IHN0cmluZyxcbiAgICAgICAgYXV0aENvbnRleHQ/OiBBdXRoQ29udGV4dFxuICAgICk6IFByb21pc2U8VGhpcmRQYXJ0eUFwaUtleT4gPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVBcGlLZXkoXG4gICAgICAgICAgICBwYXJ0bmVySWQsXG4gICAgICAgICAgICBhcGlLZXlJZCxcbiAgICAgICAgICAgIHsgc3RhdHVzOiBUSElSRF9QQVJUWV9BUElfS0VZX1NUQVRVUy5JTkFDVElWRSB9LFxuICAgICAgICAgICAgYXV0aENvbnRleHRcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmUtZW5hYmxlcyBhIHByZXZpb3VzbHkgZGlzYWJsZWQga2V5IChgc3RhdHVzYCDihpIgYEFDVElWRWApLlxuICAgICAqXG4gICAgICogVXNlIHdoZW46IHJlc3RvcmluZyBwYXJ0bmVyIGFjY2VzcyBhZnRlciBzdXNwZW5zaW9uIHdpdGhvdXQgaXNzdWluZyBhIG5ldyBrZXkuXG4gICAgICovXG4gICAgYWN0aXZhdGUgPSBhc3luYyAoXG4gICAgICAgIHBhcnRuZXJJZDogc3RyaW5nLFxuICAgICAgICBhcGlLZXlJZDogc3RyaW5nLFxuICAgICAgICBhdXRoQ29udGV4dD86IEF1dGhDb250ZXh0XG4gICAgKTogUHJvbWlzZTxUaGlyZFBhcnR5QXBpS2V5PiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUFwaUtleShcbiAgICAgICAgICAgIHBhcnRuZXJJZCxcbiAgICAgICAgICAgIGFwaUtleUlkLFxuICAgICAgICAgICAgeyBzdGF0dXM6IFRISVJEX1BBUlRZX0FQSV9LRVlfU1RBVFVTLkFDVElWRSB9LFxuICAgICAgICAgICAgYXV0aENvbnRleHRcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgdGhpcmRQYXJ0eUFwaUtleURhbyA9IG5ldyBUaGlyZFBhcnR5QXBpS2V5RGFvKCk7Il19
@@ -0,0 +1,21 @@
1
+ import { BaseDynamooseModel } from "../../base-dynamoose-model";
2
+ export declare const THIRD_PARTY_API_KEY_STATUS: {
3
+ readonly ACTIVE: "ACTIVE";
4
+ readonly INACTIVE: "INACTIVE";
5
+ };
6
+ export type ThirdPartyApiKeyStatus = (typeof THIRD_PARTY_API_KEY_STATUS)[keyof typeof THIRD_PARTY_API_KEY_STATUS];
7
+ export interface ThirdPartyApiKey extends BaseDynamooseModel {
8
+ partnerId: string;
9
+ partnerName: string;
10
+ apiKeyId: string;
11
+ apiKeyHash: string;
12
+ status: ThirdPartyApiKeyStatus;
13
+ scopes: string[];
14
+ expiresAt?: number;
15
+ lastUsedAt?: number;
16
+ }
17
+ export type CreateThirdPartyApiKeyInput = Omit<ThirdPartyApiKey, "apiKeyId"> & {
18
+ apiKeyId?: string;
19
+ };
20
+ export declare const ThirdPartyApiKeyModel: import("dynamoose/dist/General").ModelType<ThirdPartyApiKey>;
21
+ export declare const convertToThirdPartyApiKeyModel: (input: CreateThirdPartyApiKeyInput | ThirdPartyApiKey) => ThirdPartyApiKey;
@@ -0,0 +1,70 @@
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.convertToThirdPartyApiKeyModel = exports.ThirdPartyApiKeyModel = exports.THIRD_PARTY_API_KEY_STATUS = 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
+ exports.THIRD_PARTY_API_KEY_STATUS = {
12
+ ACTIVE: "ACTIVE",
13
+ INACTIVE: "INACTIVE"
14
+ };
15
+ const thirdPartyApiKeySchema = new dynamoose_1.default.Schema({
16
+ partnerId: {
17
+ type: String,
18
+ hashKey: true,
19
+ required: true
20
+ },
21
+ partnerName: {
22
+ type: String,
23
+ required: true
24
+ },
25
+ apiKeyId: {
26
+ type: String,
27
+ rangeKey: true,
28
+ required: true,
29
+ default: () => (0, crypto_1.randomUUID)()
30
+ },
31
+ apiKeyHash: {
32
+ type: String,
33
+ required: true,
34
+ index: {
35
+ name: "apiKeyHashIndex",
36
+ type: "global"
37
+ }
38
+ },
39
+ status: {
40
+ type: String,
41
+ required: true,
42
+ enum: [exports.THIRD_PARTY_API_KEY_STATUS.ACTIVE, exports.THIRD_PARTY_API_KEY_STATUS.INACTIVE],
43
+ default: exports.THIRD_PARTY_API_KEY_STATUS.ACTIVE,
44
+ index: {
45
+ name: "statusIndex",
46
+ type: "global"
47
+ }
48
+ },
49
+ scopes: {
50
+ type: Array,
51
+ schema: [String],
52
+ required: true
53
+ },
54
+ expiresAt: {
55
+ type: Number
56
+ },
57
+ lastUsedAt: {
58
+ type: Number
59
+ },
60
+ ...base_dynamoose_model_1.BASE_DYNAMOOSE_AUDIT_SCHEMA
61
+ }, {
62
+ saveUnknown: false,
63
+ timestamps: true
64
+ });
65
+ exports.ThirdPartyApiKeyModel = dynamoose_1.default.model(table_names_1.TABLE_NAMES.THIRD_PARTY_API_KEY, thirdPartyApiKeySchema, { create: false, waitForActive: false });
66
+ const convertToThirdPartyApiKeyModel = (input) => {
67
+ return new exports.ThirdPartyApiKeyModel(input);
68
+ };
69
+ exports.convertToThirdPartyApiKeyModel = convertToThirdPartyApiKeyModel;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhpcmQtcGFydHktYXBpLWtleS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXRuZXItdGhpcmQtcGFydHkvdGhpcmQtcGFydHktYXBpLWtleS90aGlyZC1wYXJ0eS1hcGkta2V5LW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUFrQztBQUNsQyxtQ0FBb0M7QUFDcEMscUVBQTZGO0FBQzdGLDBEQUF1RDtBQUUxQyxRQUFBLDBCQUEwQixHQUFHO0lBQ3RDLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFFBQVEsRUFBRSxVQUFVO0NBQ2QsQ0FBQztBQW9CWCxNQUFNLHNCQUFzQixHQUFHLElBQUksbUJBQVMsQ0FBQyxNQUFNLENBQy9DO0lBQ0ksU0FBUyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07UUFDWixPQUFPLEVBQUUsSUFBSTtRQUNiLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsV0FBVyxFQUFFO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtLQUNqQjtJQUNELFFBQVEsRUFBRTtRQUNOLElBQUksRUFBRSxNQUFNO1FBQ1osUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsSUFBSTtRQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFBLG1CQUFVLEdBQUU7S0FDOUI7SUFDRCxVQUFVLEVBQUU7UUFDUixJQUFJLEVBQUUsTUFBTTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsS0FBSyxFQUFFO1lBQ0gsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixJQUFJLEVBQUUsUUFBUTtTQUNqQjtLQUNKO0lBQ0QsTUFBTSxFQUFFO1FBQ0osSUFBSSxFQUFFLE1BQU07UUFDWixRQUFRLEVBQUUsSUFBSTtRQUNkLElBQUksRUFBRSxDQUFDLGtDQUEwQixDQUFDLE1BQU0sRUFBRSxrQ0FBMEIsQ0FBQyxRQUFRLENBQUM7UUFDOUUsT0FBTyxFQUFFLGtDQUEwQixDQUFDLE1BQU07UUFDMUMsS0FBSyxFQUFFO1lBQ0gsSUFBSSxFQUFFLGFBQWE7WUFDbkIsSUFBSSxFQUFFLFFBQVE7U0FDakI7S0FDSjtJQUNELE1BQU0sRUFBRTtRQUNKLElBQUksRUFBRSxLQUFLO1FBQ1gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFFBQVEsRUFBRSxJQUFJO0tBQ2pCO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsSUFBSSxFQUFFLE1BQU07S0FDZjtJQUNELFVBQVUsRUFBRTtRQUNSLElBQUksRUFBRSxNQUFNO0tBQ2Y7SUFDRCxHQUFHLGtEQUEyQjtDQUNqQyxFQUNEO0lBQ0ksV0FBVyxFQUFFLEtBQUs7SUFDbEIsVUFBVSxFQUFFLElBQUk7Q0FDbkIsQ0FDSixDQUFDO0FBRVcsUUFBQSxxQkFBcUIsR0FBRyxtQkFBUyxDQUFDLEtBQUssQ0FDaEQseUJBQVcsQ0FBQyxtQkFBbUIsRUFDL0Isc0JBQXNCLEVBQ3RCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQzFDLENBQUM7QUFFSyxNQUFNLDhCQUE4QixHQUFHLENBQUMsS0FBcUQsRUFBRSxFQUFFO0lBQ3BHLE9BQU8sSUFBSSw2QkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFGVyxRQUFBLDhCQUE4QixrQ0FFekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHluYW1vb3NlIGZyb20gXCJkeW5hbW9vc2VcIjtcbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBCQVNFX0RZTkFNT09TRV9BVURJVF9TQ0hFTUEsIEJhc2VEeW5hbW9vc2VNb2RlbCB9IGZyb20gXCIuLi8uLi9iYXNlLWR5bmFtb29zZS1tb2RlbFwiO1xuaW1wb3J0IHsgVEFCTEVfTkFNRVMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3RhYmxlLW5hbWVzXCI7XG5cbmV4cG9ydCBjb25zdCBUSElSRF9QQVJUWV9BUElfS0VZX1NUQVRVUyA9IHtcbiAgICBBQ1RJVkU6IFwiQUNUSVZFXCIsXG4gICAgSU5BQ1RJVkU6IFwiSU5BQ1RJVkVcIlxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVGhpcmRQYXJ0eUFwaUtleVN0YXR1cyA9XG4gICAgKHR5cGVvZiBUSElSRF9QQVJUWV9BUElfS0VZX1NUQVRVUylba2V5b2YgdHlwZW9mIFRISVJEX1BBUlRZX0FQSV9LRVlfU1RBVFVTXTtcblxuZXhwb3J0IGludGVyZmFjZSBUaGlyZFBhcnR5QXBpS2V5IGV4dGVuZHMgQmFzZUR5bmFtb29zZU1vZGVsIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICBwYXJ0bmVyTmFtZTogc3RyaW5nO1xuICAgIGFwaUtleUlkOiBzdHJpbmc7XG4gICAgYXBpS2V5SGFzaDogc3RyaW5nO1xuICAgIHN0YXR1czogVGhpcmRQYXJ0eUFwaUtleVN0YXR1cztcbiAgICBzY29wZXM6IHN0cmluZ1tdO1xuICAgIGV4cGlyZXNBdD86IG51bWJlcjtcbiAgICBsYXN0VXNlZEF0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVUaGlyZFBhcnR5QXBpS2V5SW5wdXQgPSBPbWl0PFRoaXJkUGFydHlBcGlLZXksIFwiYXBpS2V5SWRcIj4gJiB7XG4gICAgYXBpS2V5SWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCB0aGlyZFBhcnR5QXBpS2V5U2NoZW1hID0gbmV3IGR5bmFtb29zZS5TY2hlbWEoXG4gICAge1xuICAgICAgICBwYXJ0bmVySWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGhhc2hLZXk6IHRydWUsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBwYXJ0bmVyTmFtZToge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYXBpS2V5SWQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJhbmdlS2V5OiB0cnVlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiByYW5kb21VVUlEKClcbiAgICAgICAgfSxcbiAgICAgICAgYXBpS2V5SGFzaDoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBpbmRleDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYXBpS2V5SGFzaEluZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZW51bTogW1RISVJEX1BBUlRZX0FQSV9LRVlfU1RBVFVTLkFDVElWRSwgVEhJUkRfUEFSVFlfQVBJX0tFWV9TVEFUVVMuSU5BQ1RJVkVdLFxuICAgICAgICAgICAgZGVmYXVsdDogVEhJUkRfUEFSVFlfQVBJX0tFWV9TVEFUVVMuQUNUSVZFLFxuICAgICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInN0YXR1c0luZGV4XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnbG9iYWxcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzY29wZXM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgc2NoZW1hOiBbU3RyaW5nXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGV4cGlyZXNBdDoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyXG4gICAgICAgIH0sXG4gICAgICAgIGxhc3RVc2VkQXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlclxuICAgICAgICB9LFxuICAgICAgICAuLi5CQVNFX0RZTkFNT09TRV9BVURJVF9TQ0hFTUFcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc2F2ZVVua25vd246IGZhbHNlLFxuICAgICAgICB0aW1lc3RhbXBzOiB0cnVlXG4gICAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IFRoaXJkUGFydHlBcGlLZXlNb2RlbCA9IGR5bmFtb29zZS5tb2RlbDxUaGlyZFBhcnR5QXBpS2V5PihcbiAgICBUQUJMRV9OQU1FUy5USElSRF9QQVJUWV9BUElfS0VZLFxuICAgIHRoaXJkUGFydHlBcGlLZXlTY2hlbWEsXG4gICAgeyBjcmVhdGU6IGZhbHNlLCB3YWl0Rm9yQWN0aXZlOiBmYWxzZSB9XG4pO1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvVGhpcmRQYXJ0eUFwaUtleU1vZGVsID0gKGlucHV0OiBDcmVhdGVUaGlyZFBhcnR5QXBpS2V5SW5wdXQgfCBUaGlyZFBhcnR5QXBpS2V5KSA9PiB7XG4gICAgcmV0dXJuIG5ldyBUaGlyZFBhcnR5QXBpS2V5TW9kZWwoaW5wdXQpO1xufTtcbiJdfQ==
package/index.js CHANGED
@@ -59,4 +59,6 @@ export { walletDao } from './dist/customer-user/wallet/wallet-dao';
59
59
  export { WalletTransactionModel } from './dist/customer-user/wallet-transaction/wallet-transaction-model';
60
60
  export { walletTransactionDao } from './dist/customer-user/wallet-transaction/wallet-transaction-dao';
61
61
  export { WithdrawnModel } from './dist/customer-user/withdrawn/withdrawn-model';
62
- export { withdrawnDao } from './dist/customer-user/withdrawn/withdrawn-dao';
62
+ export { withdrawnDao } from './dist/customer-user/withdrawn/withdrawn-dao';
63
+ export { ThirdPartyApiKeyModel } from './dist/patner-third-party/third-party-api-key/third-party-api-key-model';
64
+ export { thirdPartyApiKeyDao } from './dist/patner-third-party/third-party-api-key/third-party-api-key-dao';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmp-aws-database",
3
- "version": "2.1.2-dev.3",
3
+ "version": "2.1.2-dev.30",
4
4
  "bin": {
5
5
  "craft-my-plate-database": "bin/craft-my-plate-database.js"
6
6
  },