cmp-aws-database 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/dist/config/table-names.d.ts +4 -0
  2. package/dist/config/table-names.js +5 -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 +29 -0
  6. package/dist/customer-user/browse-history/browse-history-model.js +110 -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/cutlery/cutlery-model.d.ts +1 -0
  10. package/dist/customer-user/cutlery/cutlery-model.js +5 -1
  11. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.d.ts +1 -0
  12. package/dist/customer-user/fmpRequestCallback/fmp-request-callback-model.js +5 -1
  13. package/dist/customer-user/order-module/plate-order/plate-order-model.d.ts +4 -0
  14. package/dist/customer-user/order-module/plate-order/plate-order-model.js +14 -2
  15. package/dist/customer-user/resume-journey/resume-journey-model.d.ts +1 -0
  16. package/dist/customer-user/resume-journey/resume-journey-model.js +5 -1
  17. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.d.ts +114 -0
  18. package/dist/patner-third-party/third-party-api-key/third-party-api-key-dao.js +225 -0
  19. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.d.ts +21 -0
  20. package/dist/patner-third-party/third-party-api-key/third-party-api-key-model.js +70 -0
  21. package/index.js +3 -1
  22. package/package.json +1 -1
@@ -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.2.0",
3
+ "version": "2.3.1",
4
4
  "bin": {
5
5
  "craft-my-plate-database": "bin/craft-my-plate-database.js"
6
6
  },