b23-lib 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,910 +1,2 @@
1
- // src/Dynamodb/index.ts
2
- import {
3
- BatchGetItemCommand,
4
- DeleteItemCommand,
5
- DynamoDBClient,
6
- ExecuteStatementCommand,
7
- GetItemCommand,
8
- PutItemCommand,
9
- QueryCommand,
10
- ScanCommand,
11
- TransactWriteItemsCommand,
12
- UpdateItemCommand,
13
- ReturnConsumedCapacity,
14
- ReturnValue,
15
- ReturnValuesOnConditionCheckFailure,
16
- ReturnItemCollectionMetrics
17
- } from "@aws-sdk/client-dynamodb";
18
- import { marshall, unmarshall } from "@aws-sdk/util-dynamodb";
19
- var DynamoDBUtility = class {
20
- client;
21
- returnItemCollectionMetrics;
22
- logCapacity;
23
- region;
24
- marshall = marshall;
25
- unmarshall = unmarshall;
26
- ReturnValue = ReturnValue;
27
- ReturnItemCollectionMetrics = ReturnItemCollectionMetrics;
28
- ReturnValuesOnConditionCheckFailure = ReturnValuesOnConditionCheckFailure;
29
- constructor({ region, returnItemCollectionMetrics = ReturnItemCollectionMetrics.NONE, logCapacity = false }) {
30
- this.region = region;
31
- this.returnItemCollectionMetrics = returnItemCollectionMetrics;
32
- this.logCapacity = logCapacity;
33
- this.client = new DynamoDBClient({ region: this.region });
34
- }
35
- log(message, capacity, size) {
36
- if (this.logCapacity) {
37
- console.log(message, "Capacity:", capacity, "Size:", size);
38
- }
39
- }
40
- async putItem(TableName, item, condition, attributeName, attributeValue, ReturnValues = ReturnValue.NONE, ReturnValuesOnFailure = ReturnValuesOnConditionCheckFailure.ALL_OLD) {
41
- const input = {
42
- TableName,
43
- Item: marshall(item, {
44
- removeUndefinedValues: true,
45
- convertClassInstanceToMap: true
46
- }),
47
- ConditionExpression: condition,
48
- ExpressionAttributeNames: attributeName,
49
- ExpressionAttributeValues: attributeValue,
50
- ReturnValues,
51
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES,
52
- ReturnValuesOnConditionCheckFailure: ReturnValuesOnFailure,
53
- ReturnItemCollectionMetrics: this.returnItemCollectionMetrics
54
- };
55
- const command = new PutItemCommand(input);
56
- const result = await this.client.send(command);
57
- this.log("Put", result.ConsumedCapacity, result.ItemCollectionMetrics);
58
- return unmarshall(result.Attributes || {});
59
- }
60
- async transactWriteItems(transactItems) {
61
- const input = {
62
- TransactItems: transactItems.map((item) => {
63
- if (item.Put) {
64
- item.Put.Item = marshall(item.Put.Item, {
65
- removeUndefinedValues: true,
66
- convertClassInstanceToMap: true
67
- });
68
- }
69
- if (item.Update) {
70
- item.Update.Key = marshall(item.Update.Key);
71
- }
72
- if (item.Delete) {
73
- item.Delete.Key = marshall(item.Delete.Key);
74
- }
75
- return item;
76
- }),
77
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES,
78
- ReturnItemCollectionMetrics: this.returnItemCollectionMetrics
79
- };
80
- const command = new TransactWriteItemsCommand(input);
81
- const result = await this.client.send(command);
82
- this.log("Transaction", result.ConsumedCapacity, result.ItemCollectionMetrics);
83
- }
84
- async getItem(TableName, key, consistent = false, projection, attributeName) {
85
- const input = {
86
- TableName,
87
- Key: marshall(key),
88
- ConsistentRead: consistent,
89
- ProjectionExpression: projection,
90
- ExpressionAttributeNames: attributeName,
91
- ReturnConsumedCapacity: ReturnConsumedCapacity.TOTAL
92
- };
93
- const command = new GetItemCommand(input);
94
- const result = await this.client.send(command);
95
- this.log("Read", result.ConsumedCapacity);
96
- return unmarshall(result.Item || {});
97
- }
98
- async batchGetItem(TableName, keys, consistent = false, projection, attributeName) {
99
- const input = {
100
- RequestItems: {
101
- [TableName]: {
102
- Keys: keys.map((key) => marshall(key)),
103
- ConsistentRead: consistent,
104
- ProjectionExpression: projection,
105
- ExpressionAttributeNames: attributeName
106
- }
107
- },
108
- ReturnConsumedCapacity: ReturnConsumedCapacity.TOTAL
109
- };
110
- const command = new BatchGetItemCommand(input);
111
- const result = await this.client.send(command);
112
- this.log("BatchRead", result.ConsumedCapacity);
113
- return result.Responses?.[TableName]?.map((item) => unmarshall(item)) || [];
114
- }
115
- async queryItems(TableName, keyCondition, consistent = false, projection, attributeName, attributeValue, lastEvaluatedKey) {
116
- const input = {
117
- TableName,
118
- KeyConditionExpression: keyCondition,
119
- ExpressionAttributeValues: attributeValue,
120
- ConsistentRead: consistent,
121
- ProjectionExpression: projection,
122
- ExpressionAttributeNames: attributeName,
123
- ExclusiveStartKey: lastEvaluatedKey,
124
- ReturnConsumedCapacity: ReturnConsumedCapacity.TOTAL
125
- };
126
- const command = new QueryCommand(input);
127
- const result = await this.client.send(command);
128
- this.log("Query", result.ConsumedCapacity);
129
- return {
130
- items: result.Items?.map((item) => unmarshall(item)) || [],
131
- lastEvaluatedKey: result.LastEvaluatedKey
132
- };
133
- }
134
- async scanItems(TableName, filterExpression, consistent = false, projection, attributeName, attributeValue, lastEvaluatedKey) {
135
- const input = {
136
- TableName,
137
- FilterExpression: filterExpression,
138
- ExpressionAttributeValues: attributeValue,
139
- ConsistentRead: consistent,
140
- ProjectionExpression: projection,
141
- ExpressionAttributeNames: attributeName,
142
- ExclusiveStartKey: lastEvaluatedKey,
143
- ReturnConsumedCapacity: ReturnConsumedCapacity.TOTAL
144
- };
145
- const command = new ScanCommand(input);
146
- const result = await this.client.send(command);
147
- this.log("Scan", result.ConsumedCapacity);
148
- return {
149
- items: result.Items?.map((item) => unmarshall(item)) || [],
150
- lastEvaluatedKey: result.LastEvaluatedKey
151
- };
152
- }
153
- async partiQL(statement, parameter = [], nextToken, consistent = false) {
154
- const input = {
155
- Statement: statement,
156
- Parameters: parameter,
157
- ConsistentRead: consistent,
158
- NextToken: nextToken,
159
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES
160
- };
161
- const command = new ExecuteStatementCommand(input);
162
- const result = await this.client.send(command);
163
- this.log("PartiQL", result.ConsumedCapacity);
164
- return {
165
- Items: result.Items?.map((item) => unmarshall(item)) || [],
166
- nextToken: result.NextToken,
167
- lastEvaluatedKey: result.LastEvaluatedKey
168
- };
169
- }
170
- async updateItem(TableName, key, condition, update, attributeName, attributeValue, ReturnValues = ReturnValue.UPDATED_NEW, ReturnValuesOnFailure = ReturnValuesOnConditionCheckFailure.ALL_OLD) {
171
- const input = {
172
- TableName,
173
- Key: marshall(key),
174
- ConditionExpression: condition,
175
- UpdateExpression: update,
176
- ExpressionAttributeNames: attributeName,
177
- ExpressionAttributeValues: attributeValue,
178
- ReturnValues,
179
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES,
180
- ReturnValuesOnConditionCheckFailure: ReturnValuesOnFailure,
181
- ReturnItemCollectionMetrics: this.returnItemCollectionMetrics
182
- };
183
- const command = new UpdateItemCommand(input);
184
- const result = await this.client.send(command);
185
- this.log("Update", result.ConsumedCapacity, result.ItemCollectionMetrics);
186
- return unmarshall(result.Attributes || {});
187
- }
188
- async deleteItem(TableName, key, condition, attributeName, attributeValue, ReturnValues = ReturnValue.ALL_OLD, ReturnValuesOnFailure = ReturnValuesOnConditionCheckFailure.ALL_OLD) {
189
- const input = {
190
- TableName,
191
- Key: marshall(key),
192
- ConditionExpression: condition,
193
- ExpressionAttributeNames: attributeName,
194
- ExpressionAttributeValues: attributeValue,
195
- ReturnValues,
196
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES,
197
- ReturnValuesOnConditionCheckFailure: ReturnValuesOnFailure,
198
- ReturnItemCollectionMetrics: this.returnItemCollectionMetrics
199
- };
200
- const command = new DeleteItemCommand(input);
201
- const result = await this.client.send(command);
202
- this.log("Delete", result.ConsumedCapacity, result.ItemCollectionMetrics);
203
- return unmarshall(result.Attributes || {});
204
- }
205
- async getItemByIndex(TableName, index, keyCondition, consistent = false, projection, attributeName, attributeValue, lastEvaluatedKey) {
206
- const input = {
207
- TableName,
208
- IndexName: index,
209
- KeyConditionExpression: keyCondition,
210
- ExpressionAttributeValues: attributeValue,
211
- ExclusiveStartKey: lastEvaluatedKey,
212
- ConsistentRead: consistent,
213
- ProjectionExpression: projection,
214
- ExpressionAttributeNames: attributeName,
215
- ReturnConsumedCapacity: ReturnConsumedCapacity.INDEXES
216
- };
217
- const command = new QueryCommand(input);
218
- const result = await this.client.send(command);
219
- this.log("GetItemByIndex", result.ConsumedCapacity);
220
- return {
221
- Items: result.Items?.map((item) => unmarshall(item)) || [],
222
- lastEvaluatedKey: result.LastEvaluatedKey
223
- };
224
- }
225
- };
226
- var Dynamodb_default = DynamoDBUtility;
227
-
228
- // src/Schema/definition.json
229
- var definition_default = {
230
- $id: "standards",
231
- definitions: {
232
- lowercaseText: {
233
- type: "string",
234
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]*$"
235
- },
236
- lowercaseText10: {
237
- type: "string",
238
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]{0,10}$"
239
- },
240
- lowercaseText16: {
241
- type: "string",
242
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]{0,16}$"
243
- },
244
- lowercaseText30: {
245
- type: "string",
246
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]{0,30}$"
247
- },
248
- lowercaseText50: {
249
- type: "string",
250
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]{0,50}$"
251
- },
252
- lowercaseText256: {
253
- type: "string",
254
- pattern: "^(?!\\s)(?!.*\\s$)[a-z]{0,256}$"
255
- },
256
- text: {
257
- type: "string",
258
- pattern: "^(?!\\s)(?!.*\\s$).*$"
259
- },
260
- text10: {
261
- type: "string",
262
- pattern: "^(?!\\s)(?!.*\\s$).{0,10}$"
263
- },
264
- text16: {
265
- type: "string",
266
- pattern: "^(?!\\s)(?!.*\\s$).{0,16}$"
267
- },
268
- text30: {
269
- type: "string",
270
- pattern: "^(?!\\s)(?!.*\\s$).{0,30}$"
271
- },
272
- text50: {
273
- type: "string",
274
- pattern: "^(?!\\s)(?!.*\\s$).{0,50}$"
275
- },
276
- text256: {
277
- type: "string",
278
- pattern: "^(?!\\s)(?!.*\\s$).{0,256}$"
279
- },
280
- requiredText: {
281
- type: "string",
282
- pattern: "^(?!\\s)(?!.*\\s$).+$"
283
- },
284
- requiredText10: {
285
- type: "string",
286
- pattern: "^(?!\\s)(?!.*\\s$).{1,10}$"
287
- },
288
- requiredText16: {
289
- type: "string",
290
- pattern: "^(?!\\s)(?!.*\\s$).{1,16}$"
291
- },
292
- requiredText30: {
293
- type: "string",
294
- pattern: "^(?!\\s)(?!.*\\s$).{1,30}$"
295
- },
296
- requiredText50: {
297
- type: "string",
298
- pattern: "^(?!\\s)(?!.*\\s$).{1,50}$"
299
- },
300
- requiredText256: {
301
- type: "string",
302
- pattern: "^(?!\\s)(?!.*\\s$).{1,256}$"
303
- },
304
- url: {
305
- type: "string",
306
- pattern: "^https://[^\\s/$.?#].[^\\s]*$",
307
- maxLength: 2048
308
- },
309
- uuid: {
310
- type: "string",
311
- minLength: 1,
312
- pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
313
- },
314
- productKey: {
315
- type: "string",
316
- pattern: "^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"
317
- },
318
- variantId: {
319
- type: "string",
320
- pattern: "^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"
321
- },
322
- firstName: { $ref: "#/definitions/requiredText30" },
323
- lastName: { $ref: "#/definitions/text30" },
324
- phone: {
325
- type: "string",
326
- pattern: "^[0-9]{10}$"
327
- },
328
- email: {
329
- type: "string",
330
- pattern: "^[^\\s]+@[^\\s]+\\.[^\\s]+$"
331
- },
332
- addressLine1: { $ref: "#/definitions/requiredText50" },
333
- addressLine2: { $ref: "#/definitions/text50" },
334
- city: { $ref: "#/definitions/requiredText30" },
335
- postalCode: { $ref: "#/definitions/requiredText16" },
336
- state: {
337
- type: "string",
338
- enum: ["AP", "AR", "AS", "BR", "CT", "GA", "GJ", "HR", "HP", "JH", "KA", "KL", "MP", "MH", "MN", "ML", "MZ", "NL", "OR", "PB", "RJ", "SK", "TN", "TG", "TR", "UP", "UT", "WB", "AN", "CH", "DH", "LD", "DL", "PY", "LA", "JK"]
339
- },
340
- country: {
341
- type: "string",
342
- enum: [
343
- "IN"
344
- ]
345
- },
346
- currency: {
347
- type: "string",
348
- enum: [
349
- "INR"
350
- ]
351
- },
352
- locale: {
353
- type: "string",
354
- enum: [
355
- "en-IN"
356
- ]
357
- },
358
- addressType: {
359
- type: "string",
360
- enum: ["shipping", "billing", "shipping&billing"]
361
- },
362
- address: {
363
- type: "object",
364
- properties: {
365
- firstName: { $ref: "standards#/definitions/firstName" },
366
- lastName: { $ref: "standards#/definitions/lastName" },
367
- phone: { $ref: "standards#/definitions/phone" },
368
- email: { $ref: "standards#/definitions/email" },
369
- addressLine1: { $ref: "standards#/definitions/addressLine1" },
370
- addressLine2: { $ref: "standards#/definitions/addressLine2" },
371
- city: { $ref: "standards#/definitions/city" },
372
- postalCode: { $ref: "standards#/definitions/postalCode" },
373
- state: { $ref: "standards#/definitions/state" },
374
- country: { $ref: "standards#/definitions/country" }
375
- },
376
- required: ["firstName", "lastName", "phone", "email", "addressLine1", "postalCode", "state", "country"]
377
- }
378
- }
379
- };
380
-
381
- // src/Schema/index.ts
382
- var Schema = {
383
- getStandardSchemaDefinition() {
384
- return definition_default;
385
- }
386
- };
387
- var Schema_default = Schema;
388
-
389
- // src/Auth/index.ts
390
- import { importPKCS8, importSPKI, jwtVerify, SignJWT } from "jose";
391
- import util2 from "util";
392
-
393
- // src/enums/ErrorTypes.ts
394
- var ErrorTypes_default = Object.freeze({
395
- INVALID_UUID: "Invalid UUID",
396
- INVALID_TOKEN: "Invalid Token",
397
- TOKEN_EXPIRED: "Token Expired",
398
- INVALID_AUTH_TYPE: "Invalid Authorization Type",
399
- USER_PRIVATE_KEY_NOT_FOUND: "User Private Key Not Found",
400
- USER_PUBLIC_KEY_NOT_FOUND: "User Public Key Not Found",
401
- ANONYMOUS_PRIVATE_KEY_NOT_FOUND: "Anonymous Private Key Not Found",
402
- ANONYMOUS_PUBLIC_KEY_NOT_FOUND: "Anonymous Public Key Not Found",
403
- SYSTEM_PRIVATE_KEY_NOT_FOUND: "System Private Key Not Found",
404
- SYSTEM_PUBLIC_KEY_NOT_FOUND: "System Public Key Not Found",
405
- ADMIN_PRIVATE_KEY_NOT_FOUND: "Admin Private Key Not Found",
406
- ADMIN_PUBLIC_KEY_NOT_FOUND: "Admin Public Key Not Found",
407
- SECRET_TOKEN_NOT_FOUND: "Secret Token Not Found",
408
- ANONYMOUS_SESSION_NOT_ALLOWED: "Anonymous Session Not Allowed",
409
- USER_SESSION_NOT_ALLOWED: "User Session Not Allowed",
410
- SYSTEM_SESSION_NOT_ALLOWED: "System Session Not Allowed",
411
- CDN_SESSION_NOT_ALLOWED: "CDN Session Not Allowed",
412
- INTERNAL_SERVER_ERROR: "Internal Server Error"
413
- });
414
-
415
- // src/Logger/index.ts
416
- import util from "util";
417
- var Logger = {
418
- logException: (functionName, error) => {
419
- console.error(`Exception Occurred in Function: ${functionName}, Error: ${util.inspect(error)}`);
420
- },
421
- logError: (functionName, errorMessage) => {
422
- console.error(`Error Occurred in Function: ${functionName}, Error: ${util.inspect(errorMessage)}`);
423
- },
424
- logWarning: (functionName, message) => {
425
- console.warn(`Warning in Function: ${functionName} - ${util.inspect(message)}`);
426
- },
427
- logMessage: (functionName, message) => {
428
- console.log(`Message in Function: ${functionName} - ${util.inspect(message)}`);
429
- },
430
- logInvalidPayload: (functionName, errorMessage) => {
431
- console.error(`Invalid Payload received for Function: ${functionName}, Error: ${errorMessage}`);
432
- }
433
- };
434
- var Logger_default = Logger;
435
-
436
- // node_modules/uuid/dist/esm-node/rng.js
437
- import crypto from "crypto";
438
- var rnds8Pool = new Uint8Array(256);
439
- var poolPtr = rnds8Pool.length;
440
- function rng() {
441
- if (poolPtr > rnds8Pool.length - 16) {
442
- crypto.randomFillSync(rnds8Pool);
443
- poolPtr = 0;
444
- }
445
- return rnds8Pool.slice(poolPtr, poolPtr += 16);
446
- }
447
-
448
- // node_modules/uuid/dist/esm-node/regex.js
449
- var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
450
-
451
- // node_modules/uuid/dist/esm-node/validate.js
452
- function validate(uuid) {
453
- return typeof uuid === "string" && regex_default.test(uuid);
454
- }
455
- var validate_default = validate;
456
-
457
- // node_modules/uuid/dist/esm-node/stringify.js
458
- var byteToHex = [];
459
- for (let i = 0; i < 256; ++i) {
460
- byteToHex.push((i + 256).toString(16).slice(1));
461
- }
462
- function unsafeStringify(arr, offset = 0) {
463
- return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
464
- }
465
-
466
- // node_modules/uuid/dist/esm-node/parse.js
467
- function parse(uuid) {
468
- if (!validate_default(uuid)) {
469
- throw TypeError("Invalid UUID");
470
- }
471
- let v;
472
- const arr = new Uint8Array(16);
473
- arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
474
- arr[1] = v >>> 16 & 255;
475
- arr[2] = v >>> 8 & 255;
476
- arr[3] = v & 255;
477
- arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
478
- arr[5] = v & 255;
479
- arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
480
- arr[7] = v & 255;
481
- arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
482
- arr[9] = v & 255;
483
- arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 1099511627776 & 255;
484
- arr[11] = v / 4294967296 & 255;
485
- arr[12] = v >>> 24 & 255;
486
- arr[13] = v >>> 16 & 255;
487
- arr[14] = v >>> 8 & 255;
488
- arr[15] = v & 255;
489
- return arr;
490
- }
491
- var parse_default = parse;
492
-
493
- // node_modules/uuid/dist/esm-node/v35.js
494
- function stringToBytes(str) {
495
- str = unescape(encodeURIComponent(str));
496
- const bytes = [];
497
- for (let i = 0; i < str.length; ++i) {
498
- bytes.push(str.charCodeAt(i));
499
- }
500
- return bytes;
501
- }
502
- var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
503
- var URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
504
- function v35(name, version, hashfunc) {
505
- function generateUUID(value, namespace, buf, offset) {
506
- var _namespace;
507
- if (typeof value === "string") {
508
- value = stringToBytes(value);
509
- }
510
- if (typeof namespace === "string") {
511
- namespace = parse_default(namespace);
512
- }
513
- if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
514
- throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");
515
- }
516
- let bytes = new Uint8Array(16 + value.length);
517
- bytes.set(namespace);
518
- bytes.set(value, namespace.length);
519
- bytes = hashfunc(bytes);
520
- bytes[6] = bytes[6] & 15 | version;
521
- bytes[8] = bytes[8] & 63 | 128;
522
- if (buf) {
523
- offset = offset || 0;
524
- for (let i = 0; i < 16; ++i) {
525
- buf[offset + i] = bytes[i];
526
- }
527
- return buf;
528
- }
529
- return unsafeStringify(bytes);
530
- }
531
- try {
532
- generateUUID.name = name;
533
- } catch (err) {
534
- }
535
- generateUUID.DNS = DNS;
536
- generateUUID.URL = URL;
537
- return generateUUID;
538
- }
539
-
540
- // node_modules/uuid/dist/esm-node/native.js
541
- import crypto2 from "crypto";
542
- var native_default = {
543
- randomUUID: crypto2.randomUUID
544
- };
545
-
546
- // node_modules/uuid/dist/esm-node/v4.js
547
- function v4(options, buf, offset) {
548
- if (native_default.randomUUID && !buf && !options) {
549
- return native_default.randomUUID();
550
- }
551
- options = options || {};
552
- const rnds = options.random || (options.rng || rng)();
553
- rnds[6] = rnds[6] & 15 | 64;
554
- rnds[8] = rnds[8] & 63 | 128;
555
- if (buf) {
556
- offset = offset || 0;
557
- for (let i = 0; i < 16; ++i) {
558
- buf[offset + i] = rnds[i];
559
- }
560
- return buf;
561
- }
562
- return unsafeStringify(rnds);
563
- }
564
- var v4_default = v4;
565
-
566
- // node_modules/uuid/dist/esm-node/sha1.js
567
- import crypto3 from "crypto";
568
- function sha1(bytes) {
569
- if (Array.isArray(bytes)) {
570
- bytes = Buffer.from(bytes);
571
- } else if (typeof bytes === "string") {
572
- bytes = Buffer.from(bytes, "utf8");
573
- }
574
- return crypto3.createHash("sha1").update(bytes).digest();
575
- }
576
- var sha1_default = sha1;
577
-
578
- // node_modules/uuid/dist/esm-node/v5.js
579
- var v5 = v35("v5", 80, sha1_default);
580
- var v5_default = v5;
581
-
582
- // src/Utils/index.ts
583
- var Utils = {
584
- isUUID: (value) => {
585
- const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
586
- return uuidRegex.test(value);
587
- },
588
- generateUUID: (value, namespace) => {
589
- if (namespace && value) {
590
- return v5_default(value, namespace);
591
- }
592
- return v4_default();
593
- },
594
- generateSearchId: (key, variantId) => {
595
- return `${key}#${variantId}`;
596
- },
597
- getKeyfromSearchId: (searchId) => {
598
- const [key, variantId] = searchId.split("#");
599
- return {
600
- key,
601
- variantId
602
- };
603
- }
604
- };
605
- var Utils_default = Utils;
606
-
607
- // src/Utils/response.ts
608
- var ResponseUtility = {
609
- handleException: (functionName, error, res) => {
610
- if (error.knownError) {
611
- error.logError && Logger_default.logError(functionName, error);
612
- res.status(error.status).json({
613
- status: error.status,
614
- error: error.error
615
- });
616
- } else if (error.status && error.error) {
617
- Logger_default.logException(functionName, error);
618
- res.status(error.status).json({
619
- ...error.error,
620
- status: error.status
621
- });
622
- } else {
623
- Logger_default.logException(functionName, error);
624
- res.status(500).json({
625
- status: 500,
626
- error: ErrorTypes_default.INTERNAL_SERVER_ERROR
627
- });
628
- }
629
- },
630
- generateResponse: (status, data, error) => {
631
- return {
632
- status,
633
- data,
634
- error
635
- };
636
- },
637
- generateError: (status, error, knownError = true, logError = false) => {
638
- return {
639
- status,
640
- error,
641
- knownError,
642
- logError
643
- };
644
- }
645
- };
646
- var response_default = ResponseUtility;
647
-
648
- // src/Auth/index.ts
649
- import assert from "assert";
650
- var DefaultAuthUtilityConfig = {
651
- maxTokenAge: "30 days",
652
- userPrivateKeys: "[]",
653
- userPublicKeys: "[]",
654
- anonymousPrivateKeys: "[]",
655
- anonymousPublicKeys: "[]",
656
- systemPrivateKeys: "[]",
657
- systemPublicKeys: "[]",
658
- adminPrivateKeys: "[]",
659
- adminPublicKeys: "[]"
660
- };
661
- var DefaultAuthMiddlewareConfig = {
662
- allowAnonymous: false,
663
- allowSystem: true,
664
- allowUser: true,
665
- allowCDN: false
666
- };
667
- var AuthUtility = class {
668
- maxTokenAge;
669
- userPrivateKeys;
670
- userPublicKeys;
671
- anonymousPrivateKeys;
672
- anonymousPublicKeys;
673
- systemPrivateKeys;
674
- systemPublicKeys;
675
- adminPrivateKeys;
676
- adminPublicKeys;
677
- /**
678
- * Initializes the AuthUtility class with a configuration.
679
- * @param config The configuration for the utility (optional).
680
- */
681
- constructor(config = DefaultAuthUtilityConfig) {
682
- const {
683
- maxTokenAge,
684
- userPrivateKeys,
685
- userPublicKeys,
686
- anonymousPrivateKeys,
687
- anonymousPublicKeys,
688
- systemPrivateKeys,
689
- systemPublicKeys,
690
- adminPrivateKeys,
691
- adminPublicKeys
692
- } = { ...DefaultAuthUtilityConfig, ...config };
693
- this.maxTokenAge = maxTokenAge;
694
- this.userPrivateKeys = JSON.parse(userPrivateKeys);
695
- this.userPublicKeys = JSON.parse(userPublicKeys);
696
- this.anonymousPrivateKeys = JSON.parse(anonymousPrivateKeys);
697
- this.anonymousPublicKeys = JSON.parse(anonymousPublicKeys);
698
- this.systemPrivateKeys = JSON.parse(systemPrivateKeys);
699
- this.systemPublicKeys = JSON.parse(systemPublicKeys);
700
- this.adminPrivateKeys = JSON.parse(adminPrivateKeys);
701
- this.adminPublicKeys = JSON.parse(adminPublicKeys);
702
- this.logWarnings();
703
- }
704
- /**
705
- * Logs warnings if the number of keys exceeds recommended limits.
706
- */
707
- logWarnings() {
708
- const warn = (type, keys, limit) => keys.length > limit && Logger_default.logWarning(
709
- "AuthUtility",
710
- `More than ${limit} ${type} keys provided. This is not recommended.`
711
- );
712
- warn("user private", this.userPrivateKeys, 3);
713
- warn("user public", this.userPublicKeys, 3);
714
- warn("anonymous private", this.anonymousPrivateKeys, 1);
715
- warn("anonymous public", this.anonymousPublicKeys, 3);
716
- warn("system private", this.systemPrivateKeys, 1);
717
- warn("system public", this.systemPublicKeys, 3);
718
- warn("admin private", this.adminPrivateKeys, 1);
719
- warn("admin public", this.adminPublicKeys, 3);
720
- }
721
- async createSignedJWT(payload, privateKeyString, expiration) {
722
- const privateKey = await importPKCS8(privateKeyString, "RS256");
723
- const token = await new SignJWT(payload).setProtectedHeader({ alg: "RS256" }).setExpirationTime(expiration).setIssuedAt().sign(privateKey);
724
- return token;
725
- }
726
- async verifySignedJWT(token, publicKeyString, expiration) {
727
- for (let i = publicKeyString.length - 1; i > 0; i--) {
728
- try {
729
- const publicKey2 = await importSPKI(publicKeyString[i], "RS256");
730
- const jwt2 = await jwtVerify(token, publicKey2, { clockTolerance: 30, maxTokenAge: expiration });
731
- return jwt2.payload;
732
- } catch (error) {
733
- continue;
734
- }
735
- }
736
- const publicKey = await importSPKI(publicKeyString[0], "RS256");
737
- const jwt = await jwtVerify(token, publicKey, { clockTolerance: 30, maxTokenAge: expiration });
738
- return jwt.payload;
739
- }
740
- async createAnonymousToken(id, additionalData) {
741
- assert(this.anonymousPrivateKeys.length, ErrorTypes_default.ANONYMOUS_PRIVATE_KEY_NOT_FOUND);
742
- assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
743
- const payload = {
744
- id,
745
- type: "Anon",
746
- ...additionalData
747
- };
748
- return await this.createSignedJWT(payload, this.anonymousPrivateKeys[this.anonymousPrivateKeys.length - 1], this.maxTokenAge);
749
- }
750
- async verifyAnonymousToken(token) {
751
- assert(this.anonymousPublicKeys.length, ErrorTypes_default.ANONYMOUS_PUBLIC_KEY_NOT_FOUND);
752
- const payload = await this.verifySignedJWT(token, this.anonymousPublicKeys, this.maxTokenAge);
753
- assert(payload.type === "Anon", ErrorTypes_default.INVALID_AUTH_TYPE);
754
- return payload;
755
- }
756
- async createUserToken(id, additionalData) {
757
- assert(this.userPrivateKeys.length, ErrorTypes_default.USER_PRIVATE_KEY_NOT_FOUND);
758
- assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
759
- const payload = {
760
- id,
761
- type: "User",
762
- ...additionalData
763
- };
764
- return await this.createSignedJWT(payload, this.userPrivateKeys[this.userPrivateKeys.length - 1], this.maxTokenAge);
765
- }
766
- async verifyUserToken(token) {
767
- assert(this.userPublicKeys.length, ErrorTypes_default.USER_PUBLIC_KEY_NOT_FOUND);
768
- const payload = await this.verifySignedJWT(token, this.userPublicKeys, this.maxTokenAge);
769
- assert(payload.type === "User", ErrorTypes_default.INVALID_AUTH_TYPE);
770
- return payload;
771
- }
772
- async createSystemToken(id, additionalData) {
773
- assert(this.systemPrivateKeys.length, ErrorTypes_default.SYSTEM_PRIVATE_KEY_NOT_FOUND);
774
- const payload = {
775
- id,
776
- type: "System",
777
- ...additionalData
778
- };
779
- return await this.createSignedJWT(payload, this.systemPrivateKeys[this.systemPrivateKeys.length - 1], "5 min");
780
- }
781
- async verifySystemToken(token) {
782
- assert(this.systemPublicKeys.length, ErrorTypes_default.USER_PUBLIC_KEY_NOT_FOUND);
783
- const payload = await this.verifySignedJWT(token, this.systemPublicKeys, "5 min");
784
- assert(payload.type === "System", ErrorTypes_default.INVALID_AUTH_TYPE);
785
- return payload;
786
- }
787
- async createAdminToken(id, additionalData) {
788
- assert(this.adminPrivateKeys.length, ErrorTypes_default.ADMIN_PRIVATE_KEY_NOT_FOUND);
789
- assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
790
- const payload = {
791
- id,
792
- type: "Admin",
793
- ...additionalData
794
- };
795
- return await this.createSignedJWT(payload, this.adminPrivateKeys[this.adminPrivateKeys.length - 1], this.maxTokenAge);
796
- }
797
- async verifyAdminToken(token) {
798
- assert(this.adminPublicKeys.length, ErrorTypes_default.ADMIN_PUBLIC_KEY_NOT_FOUND);
799
- const payload = await this.verifySignedJWT(token, this.adminPublicKeys, this.maxTokenAge);
800
- assert(payload.type === "Admin", ErrorTypes_default.INVALID_AUTH_TYPE);
801
- return payload;
802
- }
803
- /**
804
- * Middleware for handling JWT authentication.
805
- * @param config Configuration for middleware behavior.
806
- */
807
- AuthMiddleware(config = DefaultAuthMiddlewareConfig) {
808
- const { allowAnonymous, allowSystem, allowUser, allowCDN } = { ...DefaultAuthMiddlewareConfig, ...config };
809
- return async (req, res, next) => {
810
- try {
811
- const [authType, token] = req.get("Authorization")?.split(" ") || [];
812
- if (!token) throw new Error(ErrorTypes_default.INVALID_TOKEN);
813
- let payload;
814
- switch (authType) {
815
- case "Anon":
816
- if (!allowAnonymous) throw response_default.generateError(403, ErrorTypes_default.ANONYMOUS_SESSION_NOT_ALLOWED);
817
- payload = await this.verifyAnonymousToken(token);
818
- break;
819
- case "User":
820
- if (!allowUser) throw response_default.generateError(403, ErrorTypes_default.USER_SESSION_NOT_ALLOWED);
821
- payload = await this.verifyUserToken(token);
822
- break;
823
- case "System":
824
- if (!allowSystem) throw response_default.generateError(403, ErrorTypes_default.SYSTEM_SESSION_NOT_ALLOWED);
825
- payload = await this.verifySystemToken(token);
826
- Logger_default.logMessage("AuthMiddleware", `System Name - ${payload.id}`);
827
- break;
828
- case "Admin":
829
- payload = await this.verifyAdminToken(token);
830
- Logger_default.logMessage("AuthMiddleware", `Admin Id - ${payload.id}`);
831
- break;
832
- case "CDN":
833
- if (!allowCDN) throw response_default.generateError(403, ErrorTypes_default.CDN_SESSION_NOT_ALLOWED);
834
- assert(["E3CQMOP5FX6KD1", "E3TNCKKZ3FOX9W"].includes(token), ErrorTypes_default.INVALID_TOKEN);
835
- Logger_default.logMessage("AuthMiddleware", `CDN DistributionId - ${token}`);
836
- break;
837
- default:
838
- throw response_default.generateError(403, ErrorTypes_default.INVALID_AUTH_TYPE);
839
- }
840
- res.locals.auth = { authType, token, ...payload };
841
- next();
842
- } catch (error) {
843
- Logger_default.logError("AuthMiddleware", util2.inspect(error));
844
- response_default.handleException(
845
- "AuthMiddleware",
846
- response_default.generateError(401, error.error || ErrorTypes_default.TOKEN_EXPIRED, true),
847
- res
848
- );
849
- }
850
- };
851
- }
852
- };
853
- var Auth_default = AuthUtility;
854
-
855
- // src/Utils/fetch.ts
856
- var Fetch = async (baseURL, endpoint, method = "GET", headers = {}, payload) => {
857
- const options = {
858
- method,
859
- headers: {
860
- "Content-Type": "application/json",
861
- ...headers
862
- }
863
- };
864
- if (method !== "GET" && payload) {
865
- options.body = JSON.stringify(payload);
866
- }
867
- try {
868
- const response = await fetch(`${baseURL}/${endpoint}`, options);
869
- if (!response.ok) {
870
- const errorBody = await response.json().catch(() => response.text());
871
- throw {
872
- status: response.status,
873
- statusText: response.statusText,
874
- error: errorBody ? errorBody : {
875
- status: response.status,
876
- error: response.statusText
877
- }
878
- };
879
- }
880
- const body = await response.json();
881
- Logger_default.logMessage("Fetch", `API call successful: URL-${baseURL}/${endpoint}, Status- ${response.status}`);
882
- return {
883
- status: response.status,
884
- statusText: response.statusText,
885
- data: body.data
886
- };
887
- } catch (err) {
888
- Logger_default.logError("Fetch", `API call failed: URL-${baseURL}/${endpoint}, Status- ${err.status || 500}, Error- ${JSON.stringify(err.error, null, 2)}`);
889
- throw {
890
- status: err.status || 500,
891
- statusText: err.statusText || "Internal Server Error",
892
- error: err.error || {
893
- status: err.status || 500,
894
- error: err.statusText || "Something went wrong"
895
- }
896
- };
897
- }
898
- };
899
- var fetch_default = Fetch;
900
- export {
901
- Auth_default as AuthUtility,
902
- DefaultAuthMiddlewareConfig,
903
- DefaultAuthUtilityConfig,
904
- Dynamodb_default as DynamoDB,
905
- fetch_default as Fetch,
906
- Logger_default as Logger,
907
- response_default as ResponseUtility,
908
- Schema_default as Schema,
909
- Utils_default as Utils
910
- };
1
+ import{BatchGetItemCommand as H,DeleteItemCommand as q,DynamoDBClient as X,ExecuteStatementCommand as z,GetItemCommand as Q,PutItemCommand as Z,QueryCommand as M,ScanCommand as tt,TransactWriteItemsCommand as et,UpdateItemCommand as nt,ReturnConsumedCapacity as I,ReturnValue as x,ReturnValuesOnConditionCheckFailure as S,ReturnItemCollectionMetrics as k}from"@aws-sdk/client-dynamodb";import{marshall as E,unmarshall as T}from"@aws-sdk/util-dynamodb";var O=class{client;returnItemCollectionMetrics;logCapacity;region;marshall=E;unmarshall=T;ReturnValue=x;ReturnItemCollectionMetrics=k;ReturnValuesOnConditionCheckFailure=S;constructor({region:t,returnItemCollectionMetrics:e=k.NONE,logCapacity:r=!1}){this.region=t,this.returnItemCollectionMetrics=e,this.logCapacity=r,this.client=new X({region:this.region})}log(t,e,r){this.logCapacity&&console.log(t,"Capacity:",e,"Size:",r)}async putItem(t,e,r,i,a,s=x.NONE,u=S.ALL_OLD){let c={TableName:t,Item:E(e,{removeUndefinedValues:!0,convertClassInstanceToMap:!0}),ConditionExpression:r,ExpressionAttributeNames:i,ExpressionAttributeValues:a,ReturnValues:s,ReturnConsumedCapacity:I.INDEXES,ReturnValuesOnConditionCheckFailure:u,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},l=new Z(c),o=await this.client.send(l);return this.log("Put",o.ConsumedCapacity,o.ItemCollectionMetrics),T(o.Attributes||{})}async transactWriteItems(t){let e={TransactItems:t.map(a=>(a.Put&&(a.Put.Item=E(a.Put.Item,{removeUndefinedValues:!0,convertClassInstanceToMap:!0})),a.Update&&(a.Update.Key=E(a.Update.Key)),a.Delete&&(a.Delete.Key=E(a.Delete.Key)),a)),ReturnConsumedCapacity:I.INDEXES,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},r=new et(e),i=await this.client.send(r);this.log("Transaction",i.ConsumedCapacity,i.ItemCollectionMetrics)}async getItem(t,e,r=!1,i,a){let s={TableName:t,Key:E(e),ConsistentRead:r,ProjectionExpression:i,ExpressionAttributeNames:a,ReturnConsumedCapacity:I.TOTAL},u=new Q(s),c=await this.client.send(u);return this.log("Read",c.ConsumedCapacity),T(c.Item||{})}async batchGetItem(t,e,r=!1,i,a){let s={RequestItems:{[t]:{Keys:e.map(l=>E(l)),ConsistentRead:r,ProjectionExpression:i,ExpressionAttributeNames:a}},ReturnConsumedCapacity:I.TOTAL},u=new H(s),c=await this.client.send(u);return this.log("BatchRead",c.ConsumedCapacity),c.Responses?.[t]?.map(l=>T(l))||[]}async queryItems(t,e,r=!1,i,a,s,u){let c={TableName:t,KeyConditionExpression:e,ExpressionAttributeValues:s,ConsistentRead:r,ProjectionExpression:i,ExpressionAttributeNames:a,ExclusiveStartKey:u,ReturnConsumedCapacity:I.TOTAL},l=new M(c),o=await this.client.send(l);return this.log("Query",o.ConsumedCapacity),{items:o.Items?.map(d=>T(d))||[],lastEvaluatedKey:o.LastEvaluatedKey}}async scanItems(t,e,r=!1,i,a,s,u){let c={TableName:t,FilterExpression:e,ExpressionAttributeValues:s,ConsistentRead:r,ProjectionExpression:i,ExpressionAttributeNames:a,ExclusiveStartKey:u,ReturnConsumedCapacity:I.TOTAL},l=new tt(c),o=await this.client.send(l);return this.log("Scan",o.ConsumedCapacity),{items:o.Items?.map(d=>T(d))||[],lastEvaluatedKey:o.LastEvaluatedKey}}async partiQL(t,e=[],r,i=!1){let a={Statement:t,Parameters:e,ConsistentRead:i,NextToken:r,ReturnConsumedCapacity:I.INDEXES},s=new z(a),u=await this.client.send(s);return this.log("PartiQL",u.ConsumedCapacity),{Items:u.Items?.map(c=>T(c))||[],nextToken:u.NextToken,lastEvaluatedKey:u.LastEvaluatedKey}}async updateItem(t,e,r,i,a,s,u=x.UPDATED_NEW,c=S.ALL_OLD){let l={TableName:t,Key:E(e),ConditionExpression:r,UpdateExpression:i,ExpressionAttributeNames:a,ExpressionAttributeValues:s,ReturnValues:u,ReturnConsumedCapacity:I.INDEXES,ReturnValuesOnConditionCheckFailure:c,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},o=new nt(l),d=await this.client.send(o);return this.log("Update",d.ConsumedCapacity,d.ItemCollectionMetrics),T(d.Attributes||{})}async deleteItem(t,e,r,i,a,s=x.ALL_OLD,u=S.ALL_OLD){let c={TableName:t,Key:E(e),ConditionExpression:r,ExpressionAttributeNames:i,ExpressionAttributeValues:a,ReturnValues:s,ReturnConsumedCapacity:I.INDEXES,ReturnValuesOnConditionCheckFailure:u,ReturnItemCollectionMetrics:this.returnItemCollectionMetrics},l=new q(c),o=await this.client.send(l);return this.log("Delete",o.ConsumedCapacity,o.ItemCollectionMetrics),T(o.Attributes||{})}async getItemByIndex(t,e,r,i=!1,a,s,u,c){let l={TableName:t,IndexName:e,KeyConditionExpression:r,ExpressionAttributeValues:u,ExclusiveStartKey:c,ConsistentRead:i,ProjectionExpression:a,ExpressionAttributeNames:s,ReturnConsumedCapacity:I.INDEXES},o=new M(l),d=await this.client.send(o);return this.log("GetItemByIndex",d.ConsumedCapacity),{Items:d.Items?.map(G=>T(G))||[],lastEvaluatedKey:d.LastEvaluatedKey}}},rt=O;var V={$id:"standards",definitions:{lowercaseText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]*$"},lowercaseText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,10}$"},lowercaseText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,16}$"},lowercaseText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,30}$"},lowercaseText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,50}$"},lowercaseText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[a-z]{0,256}$"},text:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).*$"},text10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,10}$"},text16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,16}$"},text30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,30}$"},text50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,50}$"},text256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{0,256}$"},requiredText:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).+$"},requiredText10:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,10}$"},requiredText16:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,16}$"},requiredText30:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,30}$"},requiredText50:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,50}$"},requiredText256:{type:"string",pattern:"^(?!\\s)(?!.*\\s$).{1,256}$"},url:{type:"string",pattern:"^https://[^\\s/$.?#].[^\\s]*$",maxLength:2048},uuid:{type:"string",minLength:1,pattern:"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},productKey:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},variantId:{type:"string",pattern:"^(?!\\s)(?!.*\\s$)[A-Z0-9-]{4,16}$"},firstName:{$ref:"#/definitions/requiredText30"},lastName:{$ref:"#/definitions/text30"},phone:{type:"string",pattern:"^[0-9]{10}$"},email:{type:"string",pattern:"^[^\\s]+@[^\\s]+\\.[^\\s]+$"},addressLine1:{$ref:"#/definitions/requiredText50"},addressLine2:{$ref:"#/definitions/text50"},city:{$ref:"#/definitions/requiredText30"},postalCode:{$ref:"#/definitions/requiredText16"},state:{type:"string",enum:["AP","AR","AS","BR","CT","GA","GJ","HR","HP","JH","KA","KL","MP","MH","MN","ML","MZ","NL","OR","PB","RJ","SK","TN","TG","TR","UP","UT","WB","AN","CH","DH","LD","DL","PY","LA","JK"]},country:{type:"string",enum:["IN"]},currency:{type:"string",enum:["INR"]},locale:{type:"string",enum:["en-IN"]},addressType:{type:"string",enum:["shipping","billing","shipping&billing"]},address:{type:"object",properties:{firstName:{$ref:"standards#/definitions/firstName"},lastName:{$ref:"standards#/definitions/lastName"},phone:{$ref:"standards#/definitions/phone"},email:{$ref:"standards#/definitions/email"},addressLine1:{$ref:"standards#/definitions/addressLine1"},addressLine2:{$ref:"standards#/definitions/addressLine2"},city:{$ref:"standards#/definitions/city"},postalCode:{$ref:"standards#/definitions/postalCode"},state:{$ref:"standards#/definitions/state"},country:{$ref:"standards#/definitions/country"}},required:["firstName","lastName","phone","email","addressLine1","postalCode","state","country"]}}};var it={getStandardSchemaDefinition(){return V}},at=it;import{importPKCS8 as At,importSPKI as j,jwtVerify as B,SignJWT as Nt}from"jose";var m=Object.freeze({INVALID_UUID:"Invalid UUID",INVALID_TOKEN:"Invalid Token",TOKEN_EXPIRED:"Token Expired",INVALID_AUTH_TYPE:"Invalid Authorization Type",USER_PRIVATE_KEY_NOT_FOUND:"User Private Key Not Found",USER_PUBLIC_KEY_NOT_FOUND:"User Public Key Not Found",ANONYMOUS_PRIVATE_KEY_NOT_FOUND:"Anonymous Private Key Not Found",ANONYMOUS_PUBLIC_KEY_NOT_FOUND:"Anonymous Public Key Not Found",SYSTEM_PRIVATE_KEY_NOT_FOUND:"System Private Key Not Found",SYSTEM_PUBLIC_KEY_NOT_FOUND:"System Public Key Not Found",ADMIN_PRIVATE_KEY_NOT_FOUND:"Admin Private Key Not Found",ADMIN_PUBLIC_KEY_NOT_FOUND:"Admin Public Key Not Found",SECRET_TOKEN_NOT_FOUND:"Secret Token Not Found",ANONYMOUS_SESSION_NOT_ALLOWED:"Anonymous Session Not Allowed",USER_SESSION_NOT_ALLOWED:"User Session Not Allowed",SYSTEM_SESSION_NOT_ALLOWED:"System Session Not Allowed",CDN_SESSION_NOT_ALLOWED:"CDN Session Not Allowed",INTERNAL_SERVER_ERROR:"Internal Server Error",SOMETHING_WENT_WRONG:"Something went wrong"});import ot from"node:util";var N={logException:(n,t)=>{console.error(`Exception Occurred in Function: ${n}, Error: ${N.inspect(t)}`)},logError:(n,t)=>{console.error(`Error Occurred in Function: ${n}, Error: ${N.inspect(t)}`)},logWarning:(n,t)=>{console.warn(`Warning in Function: ${n} - ${N.inspect(t)}`)},logMessage:(n,t)=>{console.log(`Message in Function: ${n} - ${N.inspect(t)}`)},logInvalidPayload:(n,t)=>{console.error(`Invalid Payload received for Function: ${n}, Error: ${N.inspect(t)}`)},inspect:n=>typeof n=="string"?n:ot.inspect(n)},h=N;import ut from"crypto";var K=new Uint8Array(256),P=K.length;function U(){return P>K.length-16&&(ut.randomFillSync(K),P=0),K.slice(P,P+=16)}var F=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function lt(n){return typeof n=="string"&&F.test(n)}var W=lt;var g=[];for(let n=0;n<256;++n)g.push((n+256).toString(16).slice(1));function _(n,t=0){return g[n[t+0]]+g[n[t+1]]+g[n[t+2]]+g[n[t+3]]+"-"+g[n[t+4]]+g[n[t+5]]+"-"+g[n[t+6]]+g[n[t+7]]+"-"+g[n[t+8]]+g[n[t+9]]+"-"+g[n[t+10]]+g[n[t+11]]+g[n[t+12]]+g[n[t+13]]+g[n[t+14]]+g[n[t+15]]}function ct(n){if(!W(n))throw TypeError("Invalid UUID");let t,e=new Uint8Array(16);return e[0]=(t=parseInt(n.slice(0,8),16))>>>24,e[1]=t>>>16&255,e[2]=t>>>8&255,e[3]=t&255,e[4]=(t=parseInt(n.slice(9,13),16))>>>8,e[5]=t&255,e[6]=(t=parseInt(n.slice(14,18),16))>>>8,e[7]=t&255,e[8]=(t=parseInt(n.slice(19,23),16))>>>8,e[9]=t&255,e[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,e[11]=t/4294967296&255,e[12]=t>>>24&255,e[13]=t>>>16&255,e[14]=t>>>8&255,e[15]=t&255,e}var Y=ct;function mt(n){n=unescape(encodeURIComponent(n));let t=[];for(let e=0;e<n.length;++e)t.push(n.charCodeAt(e));return t}var dt="6ba7b810-9dad-11d1-80b4-00c04fd430c8",yt="6ba7b811-9dad-11d1-80b4-00c04fd430c8";function R(n,t,e){function r(i,a,s,u){var c;if(typeof i=="string"&&(i=mt(i)),typeof a=="string"&&(a=Y(a)),((c=a)===null||c===void 0?void 0:c.length)!==16)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let l=new Uint8Array(16+i.length);if(l.set(a),l.set(i,a.length),l=e(l),l[6]=l[6]&15|t,l[8]=l[8]&63|128,s){u=u||0;for(let o=0;o<16;++o)s[u+o]=l[o];return s}return _(l)}try{r.name=n}catch{}return r.DNS=dt,r.URL=yt,r}import pt from"crypto";var v={randomUUID:pt.randomUUID};function gt(n,t,e){if(v.randomUUID&&!t&&!n)return v.randomUUID();n=n||{};let r=n.random||(n.rng||U)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,t){e=e||0;for(let i=0;i<16;++i)t[e+i]=r[i];return t}return _(r)}var b=gt;import ft from"crypto";function ht(n){return Array.isArray(n)?n=Buffer.from(n):typeof n=="string"&&(n=Buffer.from(n,"utf8")),ft.createHash("sha1").update(n).digest()}var J=ht;var It=R("v5",80,J),D=It;var Tt={isUUID:n=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(n),generateUUID:(n,t)=>t&&n?D(n,t):b(),generateSearchId:(n,t)=>`${n}#${t}`,getKeyfromSearchId:n=>{let[t,e]=n.split("#");return{key:t,variantId:e}}},C=Tt;var Et={handleException:(n,t,e)=>{t.knownError?(t.logError&&h.logError(n,t),e.status(t.status).json({status:t.status,error:t.error})):t.status&&t.error?(h.logException(n,t),e.status(t.status).json({...t.error,status:t.status})):(h.logException(n,t),e.status(500).json({status:500,error:m.INTERNAL_SERVER_ERROR}))},generateResponse:(n,t,e)=>({status:n,data:t,error:e}),generateError:(n,t,e=!0,r=!1)=>({status:n,error:t,knownError:e,logError:r})},A=Et;import f from"assert";var w={maxTokenAge:"30 days",userPrivateKeys:"[]",userPublicKeys:"[]",anonymousPrivateKeys:"[]",anonymousPublicKeys:"[]",systemPrivateKeys:"[]",systemPublicKeys:"[]",adminPrivateKeys:"[]",adminPublicKeys:"[]"},$={allowAnonymous:!1,allowSystem:!0,allowUser:!0,allowCDN:!1},L=class{maxTokenAge;userPrivateKeys;userPublicKeys;anonymousPrivateKeys;anonymousPublicKeys;systemPrivateKeys;systemPublicKeys;adminPrivateKeys;adminPublicKeys;constructor(t=w){let{maxTokenAge:e,userPrivateKeys:r,userPublicKeys:i,anonymousPrivateKeys:a,anonymousPublicKeys:s,systemPrivateKeys:u,systemPublicKeys:c,adminPrivateKeys:l,adminPublicKeys:o}={...w,...t};this.maxTokenAge=e,this.userPrivateKeys=JSON.parse(r),this.userPublicKeys=JSON.parse(i),this.anonymousPrivateKeys=JSON.parse(a),this.anonymousPublicKeys=JSON.parse(s),this.systemPrivateKeys=JSON.parse(u),this.systemPublicKeys=JSON.parse(c),this.adminPrivateKeys=JSON.parse(l),this.adminPublicKeys=JSON.parse(o),this.logWarnings()}logWarnings(){let t=(e,r,i)=>r.length>i&&h.logWarning("AuthUtility",`More than ${i} ${e} keys provided. This is not recommended.`);t("user private",this.userPrivateKeys,3),t("user public",this.userPublicKeys,3),t("anonymous private",this.anonymousPrivateKeys,1),t("anonymous public",this.anonymousPublicKeys,3),t("system private",this.systemPrivateKeys,1),t("system public",this.systemPublicKeys,3),t("admin private",this.adminPrivateKeys,1),t("admin public",this.adminPublicKeys,3)}async createSignedJWT(t,e,r){let i=await At(e,"RS256");return await new Nt(t).setProtectedHeader({alg:"RS256"}).setExpirationTime(r).setIssuedAt().sign(i)}async verifySignedJWT(t,e,r){for(let s=e.length-1;s>0;s--)try{let u=await j(e[s],"RS256");return(await B(t,u,{clockTolerance:30,maxTokenAge:r})).payload}catch{continue}let i=await j(e[0],"RS256");return(await B(t,i,{clockTolerance:30,maxTokenAge:r})).payload}async createAnonymousToken(t,e){f(this.anonymousPrivateKeys.length,m.ANONYMOUS_PRIVATE_KEY_NOT_FOUND),f(C.isUUID(t),m.INVALID_UUID);let r={id:t,type:"Anon",...e};return await this.createSignedJWT(r,this.anonymousPrivateKeys[this.anonymousPrivateKeys.length-1],this.maxTokenAge)}async verifyAnonymousToken(t){f(this.anonymousPublicKeys.length,m.ANONYMOUS_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.anonymousPublicKeys,this.maxTokenAge);return f(e.type==="Anon",m.INVALID_AUTH_TYPE),e}async createUserToken(t,e){f(this.userPrivateKeys.length,m.USER_PRIVATE_KEY_NOT_FOUND),f(C.isUUID(t),m.INVALID_UUID);let r={id:t,type:"User",...e};return await this.createSignedJWT(r,this.userPrivateKeys[this.userPrivateKeys.length-1],this.maxTokenAge)}async verifyUserToken(t){f(this.userPublicKeys.length,m.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.userPublicKeys,this.maxTokenAge);return f(e.type==="User",m.INVALID_AUTH_TYPE),e}async createSystemToken(t,e){f(this.systemPrivateKeys.length,m.SYSTEM_PRIVATE_KEY_NOT_FOUND);let r={id:t,type:"System",...e};return await this.createSignedJWT(r,this.systemPrivateKeys[this.systemPrivateKeys.length-1],"5 min")}async verifySystemToken(t){f(this.systemPublicKeys.length,m.USER_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.systemPublicKeys,"5 min");return f(e.type==="System",m.INVALID_AUTH_TYPE),e}async createAdminToken(t,e){f(this.adminPrivateKeys.length,m.ADMIN_PRIVATE_KEY_NOT_FOUND),f(C.isUUID(t),m.INVALID_UUID);let r={id:t,type:"Admin",...e};return await this.createSignedJWT(r,this.adminPrivateKeys[this.adminPrivateKeys.length-1],this.maxTokenAge)}async verifyAdminToken(t){f(this.adminPublicKeys.length,m.ADMIN_PUBLIC_KEY_NOT_FOUND);let e=await this.verifySignedJWT(t,this.adminPublicKeys,this.maxTokenAge);return f(e.type==="Admin",m.INVALID_AUTH_TYPE),e}AuthMiddleware(t=$){let{allowAnonymous:e,allowSystem:r,allowUser:i,allowCDN:a}={...$,...t};return async(s,u,c)=>{try{let[l,o]=s.get("Authorization")?.split(" ")||[];if(!o)throw new Error(m.INVALID_TOKEN);let d;switch(l){case"Anon":if(!e)throw A.generateError(403,m.ANONYMOUS_SESSION_NOT_ALLOWED);d=await this.verifyAnonymousToken(o);break;case"User":if(!i)throw A.generateError(403,m.USER_SESSION_NOT_ALLOWED);d=await this.verifyUserToken(o);break;case"System":if(!r)throw A.generateError(403,m.SYSTEM_SESSION_NOT_ALLOWED);d=await this.verifySystemToken(o),h.logMessage("AuthMiddleware",`System Name - ${d.id}`);break;case"Admin":d=await this.verifyAdminToken(o),h.logMessage("AuthMiddleware",`Admin Id - ${d.id}`);break;case"CDN":if(!a)throw A.generateError(403,m.CDN_SESSION_NOT_ALLOWED);f(["E3CQMOP5FX6KD1","E3TNCKKZ3FOX9W"].includes(o),m.INVALID_TOKEN),h.logMessage("AuthMiddleware",`CDN DistributionId - ${o}`);break;default:throw A.generateError(403,m.INVALID_AUTH_TYPE)}u.locals.auth={authType:l,token:o,...d},c()}catch(l){h.logError("AuthMiddleware",l),A.handleException("AuthMiddleware",A.generateError(401,l.error||m.TOKEN_EXPIRED,!0),u)}}}},Ct=L;var xt=async(n,t,e="GET",r={},i)=>{let a={method:e,headers:{"Content-Type":"application/json",...r}};e!=="GET"&&i&&(a.body=JSON.stringify(i));try{let s=await fetch(`${n}/${t}`,a);if(!s.ok){let c=await s.json().catch(()=>s.text());throw{status:s.status,statusText:s.statusText,error:c||{status:s.status,error:s.statusText}}}let u=await s.json();return h.logMessage("Fetch",`API call successful: URL-${n}/${t}, Status- ${s.status}`),{status:s.status,statusText:s.statusText,data:u.data}}catch(s){throw h.logError("Fetch",`API call failed: URL-${n}/${t}, Status- ${s.status||500}, Error- ${h.inspect(s.error||s)}`),{status:s.status||500,statusText:s.statusText||m.INTERNAL_SERVER_ERROR,error:s.error||{status:s.status||500,error:s.statusText||m.SOMETHING_WENT_WRONG}}}},St=xt;export{Ct as AuthUtility,$ as DefaultAuthMiddlewareConfig,w as DefaultAuthUtilityConfig,rt as DynamoDB,St as Fetch,h as Logger,A as ResponseUtility,at as Schema,C as Utils};
2
+ //# sourceMappingURL=index.mjs.map