b23-lib 1.3.1 → 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/README.md +0 -0
- package/dist/index.d.mts +83 -5
- package/dist/index.d.ts +83 -5
- package/dist/index.js +2 -933
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -903
- package/dist/index.mjs.map +1 -0
- package/package.json +2 -3
package/dist/index.mjs
CHANGED
|
@@ -1,903 +1,2 @@
|
|
|
1
|
-
// src/Dynamodb/index.ts
|
|
2
|
-
|
|
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
|
-
INTERNAL_SERVER_ERROR: "Internal Server Error"
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
// src/Logger/index.ts
|
|
415
|
-
import util from "util";
|
|
416
|
-
var Logger = {
|
|
417
|
-
logException: (functionName, error) => {
|
|
418
|
-
console.error(`Exception Occurred in Function: ${functionName}, Error: ${util.inspect(error)}`);
|
|
419
|
-
},
|
|
420
|
-
logError: (functionName, errorMessage) => {
|
|
421
|
-
console.error(`Error Occurred in Function: ${functionName}, Error: ${util.inspect(errorMessage)}`);
|
|
422
|
-
},
|
|
423
|
-
logWarning: (functionName, message) => {
|
|
424
|
-
console.warn(`Warning in Function: ${functionName} - ${util.inspect(message)}`);
|
|
425
|
-
},
|
|
426
|
-
logMessage: (functionName, message) => {
|
|
427
|
-
console.log(`Message in Function: ${functionName} - ${util.inspect(message)}`);
|
|
428
|
-
},
|
|
429
|
-
logInvalidPayload: (functionName, errorMessage) => {
|
|
430
|
-
console.error(`Invalid Payload received for Function: ${functionName}, Error: ${errorMessage}`);
|
|
431
|
-
}
|
|
432
|
-
};
|
|
433
|
-
var Logger_default = Logger;
|
|
434
|
-
|
|
435
|
-
// node_modules/uuid/dist/esm-node/rng.js
|
|
436
|
-
import crypto from "crypto";
|
|
437
|
-
var rnds8Pool = new Uint8Array(256);
|
|
438
|
-
var poolPtr = rnds8Pool.length;
|
|
439
|
-
function rng() {
|
|
440
|
-
if (poolPtr > rnds8Pool.length - 16) {
|
|
441
|
-
crypto.randomFillSync(rnds8Pool);
|
|
442
|
-
poolPtr = 0;
|
|
443
|
-
}
|
|
444
|
-
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
// node_modules/uuid/dist/esm-node/regex.js
|
|
448
|
-
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;
|
|
449
|
-
|
|
450
|
-
// node_modules/uuid/dist/esm-node/validate.js
|
|
451
|
-
function validate(uuid) {
|
|
452
|
-
return typeof uuid === "string" && regex_default.test(uuid);
|
|
453
|
-
}
|
|
454
|
-
var validate_default = validate;
|
|
455
|
-
|
|
456
|
-
// node_modules/uuid/dist/esm-node/stringify.js
|
|
457
|
-
var byteToHex = [];
|
|
458
|
-
for (let i = 0; i < 256; ++i) {
|
|
459
|
-
byteToHex.push((i + 256).toString(16).slice(1));
|
|
460
|
-
}
|
|
461
|
-
function unsafeStringify(arr, offset = 0) {
|
|
462
|
-
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]];
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// node_modules/uuid/dist/esm-node/parse.js
|
|
466
|
-
function parse(uuid) {
|
|
467
|
-
if (!validate_default(uuid)) {
|
|
468
|
-
throw TypeError("Invalid UUID");
|
|
469
|
-
}
|
|
470
|
-
let v;
|
|
471
|
-
const arr = new Uint8Array(16);
|
|
472
|
-
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
473
|
-
arr[1] = v >>> 16 & 255;
|
|
474
|
-
arr[2] = v >>> 8 & 255;
|
|
475
|
-
arr[3] = v & 255;
|
|
476
|
-
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
477
|
-
arr[5] = v & 255;
|
|
478
|
-
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
479
|
-
arr[7] = v & 255;
|
|
480
|
-
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
481
|
-
arr[9] = v & 255;
|
|
482
|
-
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 1099511627776 & 255;
|
|
483
|
-
arr[11] = v / 4294967296 & 255;
|
|
484
|
-
arr[12] = v >>> 24 & 255;
|
|
485
|
-
arr[13] = v >>> 16 & 255;
|
|
486
|
-
arr[14] = v >>> 8 & 255;
|
|
487
|
-
arr[15] = v & 255;
|
|
488
|
-
return arr;
|
|
489
|
-
}
|
|
490
|
-
var parse_default = parse;
|
|
491
|
-
|
|
492
|
-
// node_modules/uuid/dist/esm-node/v35.js
|
|
493
|
-
function stringToBytes(str) {
|
|
494
|
-
str = unescape(encodeURIComponent(str));
|
|
495
|
-
const bytes = [];
|
|
496
|
-
for (let i = 0; i < str.length; ++i) {
|
|
497
|
-
bytes.push(str.charCodeAt(i));
|
|
498
|
-
}
|
|
499
|
-
return bytes;
|
|
500
|
-
}
|
|
501
|
-
var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
|
|
502
|
-
var URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
|
|
503
|
-
function v35(name, version, hashfunc) {
|
|
504
|
-
function generateUUID(value, namespace, buf, offset) {
|
|
505
|
-
var _namespace;
|
|
506
|
-
if (typeof value === "string") {
|
|
507
|
-
value = stringToBytes(value);
|
|
508
|
-
}
|
|
509
|
-
if (typeof namespace === "string") {
|
|
510
|
-
namespace = parse_default(namespace);
|
|
511
|
-
}
|
|
512
|
-
if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
|
|
513
|
-
throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");
|
|
514
|
-
}
|
|
515
|
-
let bytes = new Uint8Array(16 + value.length);
|
|
516
|
-
bytes.set(namespace);
|
|
517
|
-
bytes.set(value, namespace.length);
|
|
518
|
-
bytes = hashfunc(bytes);
|
|
519
|
-
bytes[6] = bytes[6] & 15 | version;
|
|
520
|
-
bytes[8] = bytes[8] & 63 | 128;
|
|
521
|
-
if (buf) {
|
|
522
|
-
offset = offset || 0;
|
|
523
|
-
for (let i = 0; i < 16; ++i) {
|
|
524
|
-
buf[offset + i] = bytes[i];
|
|
525
|
-
}
|
|
526
|
-
return buf;
|
|
527
|
-
}
|
|
528
|
-
return unsafeStringify(bytes);
|
|
529
|
-
}
|
|
530
|
-
try {
|
|
531
|
-
generateUUID.name = name;
|
|
532
|
-
} catch (err) {
|
|
533
|
-
}
|
|
534
|
-
generateUUID.DNS = DNS;
|
|
535
|
-
generateUUID.URL = URL;
|
|
536
|
-
return generateUUID;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
// node_modules/uuid/dist/esm-node/native.js
|
|
540
|
-
import crypto2 from "crypto";
|
|
541
|
-
var native_default = {
|
|
542
|
-
randomUUID: crypto2.randomUUID
|
|
543
|
-
};
|
|
544
|
-
|
|
545
|
-
// node_modules/uuid/dist/esm-node/v4.js
|
|
546
|
-
function v4(options, buf, offset) {
|
|
547
|
-
if (native_default.randomUUID && !buf && !options) {
|
|
548
|
-
return native_default.randomUUID();
|
|
549
|
-
}
|
|
550
|
-
options = options || {};
|
|
551
|
-
const rnds = options.random || (options.rng || rng)();
|
|
552
|
-
rnds[6] = rnds[6] & 15 | 64;
|
|
553
|
-
rnds[8] = rnds[8] & 63 | 128;
|
|
554
|
-
if (buf) {
|
|
555
|
-
offset = offset || 0;
|
|
556
|
-
for (let i = 0; i < 16; ++i) {
|
|
557
|
-
buf[offset + i] = rnds[i];
|
|
558
|
-
}
|
|
559
|
-
return buf;
|
|
560
|
-
}
|
|
561
|
-
return unsafeStringify(rnds);
|
|
562
|
-
}
|
|
563
|
-
var v4_default = v4;
|
|
564
|
-
|
|
565
|
-
// node_modules/uuid/dist/esm-node/sha1.js
|
|
566
|
-
import crypto3 from "crypto";
|
|
567
|
-
function sha1(bytes) {
|
|
568
|
-
if (Array.isArray(bytes)) {
|
|
569
|
-
bytes = Buffer.from(bytes);
|
|
570
|
-
} else if (typeof bytes === "string") {
|
|
571
|
-
bytes = Buffer.from(bytes, "utf8");
|
|
572
|
-
}
|
|
573
|
-
return crypto3.createHash("sha1").update(bytes).digest();
|
|
574
|
-
}
|
|
575
|
-
var sha1_default = sha1;
|
|
576
|
-
|
|
577
|
-
// node_modules/uuid/dist/esm-node/v5.js
|
|
578
|
-
var v5 = v35("v5", 80, sha1_default);
|
|
579
|
-
var v5_default = v5;
|
|
580
|
-
|
|
581
|
-
// src/Utils/index.ts
|
|
582
|
-
var Utils = {
|
|
583
|
-
isUUID: (value) => {
|
|
584
|
-
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;
|
|
585
|
-
return uuidRegex.test(value);
|
|
586
|
-
},
|
|
587
|
-
generateUUID: (value, namespace) => {
|
|
588
|
-
if (namespace && value) {
|
|
589
|
-
return v5_default(value, namespace);
|
|
590
|
-
}
|
|
591
|
-
return v4_default();
|
|
592
|
-
},
|
|
593
|
-
generateSearchId: (key, variantId) => {
|
|
594
|
-
return `${key}#${variantId}`;
|
|
595
|
-
},
|
|
596
|
-
getKeyfromSearchId: (searchId) => {
|
|
597
|
-
const [key, variantId] = searchId.split("#");
|
|
598
|
-
return {
|
|
599
|
-
key,
|
|
600
|
-
variantId
|
|
601
|
-
};
|
|
602
|
-
}
|
|
603
|
-
};
|
|
604
|
-
var Utils_default = Utils;
|
|
605
|
-
|
|
606
|
-
// src/Utils/response.ts
|
|
607
|
-
var ResponseUtility = {
|
|
608
|
-
handleException: (functionName, error, res) => {
|
|
609
|
-
if (error.knownError) {
|
|
610
|
-
error.logError && Logger_default.logError(functionName, error);
|
|
611
|
-
res.status(error.status).json({
|
|
612
|
-
status: error.status,
|
|
613
|
-
error: error.error
|
|
614
|
-
});
|
|
615
|
-
} else if (error.status && error.error) {
|
|
616
|
-
Logger_default.logException(functionName, error);
|
|
617
|
-
res.status(error.status).json({
|
|
618
|
-
...error.error,
|
|
619
|
-
status: error.status
|
|
620
|
-
});
|
|
621
|
-
} else {
|
|
622
|
-
Logger_default.logException(functionName, error);
|
|
623
|
-
res.status(500).json({
|
|
624
|
-
status: 500,
|
|
625
|
-
error: ErrorTypes_default.INTERNAL_SERVER_ERROR
|
|
626
|
-
});
|
|
627
|
-
}
|
|
628
|
-
},
|
|
629
|
-
generateResponse: (status, data, error) => {
|
|
630
|
-
return {
|
|
631
|
-
status,
|
|
632
|
-
data,
|
|
633
|
-
error
|
|
634
|
-
};
|
|
635
|
-
},
|
|
636
|
-
generateError: (status, error, knownError = true, logError = false) => {
|
|
637
|
-
return {
|
|
638
|
-
status,
|
|
639
|
-
error,
|
|
640
|
-
knownError,
|
|
641
|
-
logError
|
|
642
|
-
};
|
|
643
|
-
}
|
|
644
|
-
};
|
|
645
|
-
var response_default = ResponseUtility;
|
|
646
|
-
|
|
647
|
-
// src/Auth/index.ts
|
|
648
|
-
import assert from "assert";
|
|
649
|
-
var DefaultAuthUtilityConfig = {
|
|
650
|
-
maxTokenAge: "30 days",
|
|
651
|
-
userPrivateKeys: "[]",
|
|
652
|
-
userPublicKeys: "[]",
|
|
653
|
-
anonymousPrivateKeys: "[]",
|
|
654
|
-
anonymousPublicKeys: "[]",
|
|
655
|
-
systemPrivateKeys: "[]",
|
|
656
|
-
systemPublicKeys: "[]",
|
|
657
|
-
adminPrivateKeys: "[]",
|
|
658
|
-
adminPublicKeys: "[]"
|
|
659
|
-
};
|
|
660
|
-
var DefaultAuthMiddlewareConfig = {
|
|
661
|
-
allowAnonymous: false,
|
|
662
|
-
allowSystem: true,
|
|
663
|
-
allowUser: true
|
|
664
|
-
};
|
|
665
|
-
var AuthUtility = class {
|
|
666
|
-
maxTokenAge;
|
|
667
|
-
userPrivateKeys;
|
|
668
|
-
userPublicKeys;
|
|
669
|
-
anonymousPrivateKeys;
|
|
670
|
-
anonymousPublicKeys;
|
|
671
|
-
systemPrivateKeys;
|
|
672
|
-
systemPublicKeys;
|
|
673
|
-
adminPrivateKeys;
|
|
674
|
-
adminPublicKeys;
|
|
675
|
-
/**
|
|
676
|
-
* Initializes the AuthUtility class with a configuration.
|
|
677
|
-
* @param config The configuration for the utility (optional).
|
|
678
|
-
*/
|
|
679
|
-
constructor(config = DefaultAuthUtilityConfig) {
|
|
680
|
-
const {
|
|
681
|
-
maxTokenAge,
|
|
682
|
-
userPrivateKeys,
|
|
683
|
-
userPublicKeys,
|
|
684
|
-
anonymousPrivateKeys,
|
|
685
|
-
anonymousPublicKeys,
|
|
686
|
-
systemPrivateKeys,
|
|
687
|
-
systemPublicKeys,
|
|
688
|
-
adminPrivateKeys,
|
|
689
|
-
adminPublicKeys
|
|
690
|
-
} = { ...DefaultAuthUtilityConfig, ...config };
|
|
691
|
-
this.maxTokenAge = maxTokenAge;
|
|
692
|
-
this.userPrivateKeys = JSON.parse(userPrivateKeys);
|
|
693
|
-
this.userPublicKeys = JSON.parse(userPublicKeys);
|
|
694
|
-
this.anonymousPrivateKeys = JSON.parse(anonymousPrivateKeys);
|
|
695
|
-
this.anonymousPublicKeys = JSON.parse(anonymousPublicKeys);
|
|
696
|
-
this.systemPrivateKeys = JSON.parse(systemPrivateKeys);
|
|
697
|
-
this.systemPublicKeys = JSON.parse(systemPublicKeys);
|
|
698
|
-
this.adminPrivateKeys = JSON.parse(adminPrivateKeys);
|
|
699
|
-
this.adminPublicKeys = JSON.parse(adminPublicKeys);
|
|
700
|
-
this.logWarnings();
|
|
701
|
-
}
|
|
702
|
-
/**
|
|
703
|
-
* Logs warnings if the number of keys exceeds recommended limits.
|
|
704
|
-
*/
|
|
705
|
-
logWarnings() {
|
|
706
|
-
const warn = (type, keys, limit) => keys.length > limit && Logger_default.logWarning(
|
|
707
|
-
"AuthUtility",
|
|
708
|
-
`More than ${limit} ${type} keys provided. This is not recommended.`
|
|
709
|
-
);
|
|
710
|
-
warn("user private", this.userPrivateKeys, 3);
|
|
711
|
-
warn("user public", this.userPublicKeys, 3);
|
|
712
|
-
warn("anonymous private", this.anonymousPrivateKeys, 1);
|
|
713
|
-
warn("anonymous public", this.anonymousPublicKeys, 3);
|
|
714
|
-
warn("system private", this.systemPrivateKeys, 1);
|
|
715
|
-
warn("system public", this.systemPublicKeys, 3);
|
|
716
|
-
warn("admin private", this.adminPrivateKeys, 1);
|
|
717
|
-
warn("admin public", this.adminPublicKeys, 3);
|
|
718
|
-
}
|
|
719
|
-
async createSignedJWT(payload, privateKeyString, expiration) {
|
|
720
|
-
const privateKey = await importPKCS8(privateKeyString, "RS256");
|
|
721
|
-
const token = await new SignJWT(payload).setProtectedHeader({ alg: "RS256" }).setExpirationTime(expiration).setIssuedAt().sign(privateKey);
|
|
722
|
-
return token;
|
|
723
|
-
}
|
|
724
|
-
async verifySignedJWT(token, publicKeyString, expiration) {
|
|
725
|
-
for (let i = publicKeyString.length - 1; i > 0; i--) {
|
|
726
|
-
try {
|
|
727
|
-
const publicKey2 = await importSPKI(publicKeyString[i], "RS256");
|
|
728
|
-
const jwt2 = await jwtVerify(token, publicKey2, { clockTolerance: 30, maxTokenAge: expiration });
|
|
729
|
-
return jwt2.payload;
|
|
730
|
-
} catch (error) {
|
|
731
|
-
continue;
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
const publicKey = await importSPKI(publicKeyString[0], "RS256");
|
|
735
|
-
const jwt = await jwtVerify(token, publicKey, { clockTolerance: 30, maxTokenAge: expiration });
|
|
736
|
-
return jwt.payload;
|
|
737
|
-
}
|
|
738
|
-
async createAnonymousToken(id, additionalData) {
|
|
739
|
-
assert(this.anonymousPrivateKeys.length, ErrorTypes_default.ANONYMOUS_PRIVATE_KEY_NOT_FOUND);
|
|
740
|
-
assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
|
|
741
|
-
const payload = {
|
|
742
|
-
id,
|
|
743
|
-
type: "Anon",
|
|
744
|
-
...additionalData
|
|
745
|
-
};
|
|
746
|
-
return await this.createSignedJWT(payload, this.anonymousPrivateKeys[this.anonymousPrivateKeys.length - 1], this.maxTokenAge);
|
|
747
|
-
}
|
|
748
|
-
async verifyAnonymousToken(token) {
|
|
749
|
-
assert(this.anonymousPublicKeys.length, ErrorTypes_default.ANONYMOUS_PUBLIC_KEY_NOT_FOUND);
|
|
750
|
-
const payload = await this.verifySignedJWT(token, this.anonymousPublicKeys, this.maxTokenAge);
|
|
751
|
-
assert(payload.type === "Anon", ErrorTypes_default.INVALID_AUTH_TYPE);
|
|
752
|
-
return payload;
|
|
753
|
-
}
|
|
754
|
-
async createUserToken(id, additionalData) {
|
|
755
|
-
assert(this.userPrivateKeys.length, ErrorTypes_default.USER_PRIVATE_KEY_NOT_FOUND);
|
|
756
|
-
assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
|
|
757
|
-
const payload = {
|
|
758
|
-
id,
|
|
759
|
-
type: "User",
|
|
760
|
-
...additionalData
|
|
761
|
-
};
|
|
762
|
-
return await this.createSignedJWT(payload, this.userPrivateKeys[this.userPrivateKeys.length - 1], this.maxTokenAge);
|
|
763
|
-
}
|
|
764
|
-
async verifyUserToken(token) {
|
|
765
|
-
assert(this.userPublicKeys.length, ErrorTypes_default.USER_PUBLIC_KEY_NOT_FOUND);
|
|
766
|
-
const payload = await this.verifySignedJWT(token, this.userPublicKeys, this.maxTokenAge);
|
|
767
|
-
assert(payload.type === "User", ErrorTypes_default.INVALID_AUTH_TYPE);
|
|
768
|
-
return payload;
|
|
769
|
-
}
|
|
770
|
-
async createSystemToken(id, additionalData) {
|
|
771
|
-
assert(this.systemPrivateKeys.length, ErrorTypes_default.SYSTEM_PRIVATE_KEY_NOT_FOUND);
|
|
772
|
-
const payload = {
|
|
773
|
-
id,
|
|
774
|
-
type: "System",
|
|
775
|
-
...additionalData
|
|
776
|
-
};
|
|
777
|
-
return await this.createSignedJWT(payload, this.systemPrivateKeys[this.systemPrivateKeys.length - 1], "5 min");
|
|
778
|
-
}
|
|
779
|
-
async verifySystemToken(token) {
|
|
780
|
-
assert(this.systemPublicKeys.length, ErrorTypes_default.USER_PUBLIC_KEY_NOT_FOUND);
|
|
781
|
-
const payload = await this.verifySignedJWT(token, this.systemPublicKeys, "5 min");
|
|
782
|
-
assert(payload.type === "System", ErrorTypes_default.INVALID_AUTH_TYPE);
|
|
783
|
-
return payload;
|
|
784
|
-
}
|
|
785
|
-
async createAdminToken(id, additionalData) {
|
|
786
|
-
assert(this.adminPrivateKeys.length, ErrorTypes_default.ADMIN_PRIVATE_KEY_NOT_FOUND);
|
|
787
|
-
assert(Utils_default.isUUID(id), ErrorTypes_default.INVALID_UUID);
|
|
788
|
-
const payload = {
|
|
789
|
-
id,
|
|
790
|
-
type: "Admin",
|
|
791
|
-
...additionalData
|
|
792
|
-
};
|
|
793
|
-
return await this.createSignedJWT(payload, this.adminPrivateKeys[this.adminPrivateKeys.length - 1], this.maxTokenAge);
|
|
794
|
-
}
|
|
795
|
-
async verifyAdminToken(token) {
|
|
796
|
-
assert(this.adminPublicKeys.length, ErrorTypes_default.ADMIN_PUBLIC_KEY_NOT_FOUND);
|
|
797
|
-
const payload = await this.verifySignedJWT(token, this.adminPublicKeys, this.maxTokenAge);
|
|
798
|
-
assert(payload.type === "Admin", ErrorTypes_default.INVALID_AUTH_TYPE);
|
|
799
|
-
return payload;
|
|
800
|
-
}
|
|
801
|
-
/**
|
|
802
|
-
* Middleware for handling JWT authentication.
|
|
803
|
-
* @param config Configuration for middleware behavior.
|
|
804
|
-
*/
|
|
805
|
-
AuthMiddleware(config = DefaultAuthMiddlewareConfig) {
|
|
806
|
-
const { allowAnonymous, allowSystem, allowUser } = { ...DefaultAuthMiddlewareConfig, ...config };
|
|
807
|
-
return async (req, res, next) => {
|
|
808
|
-
try {
|
|
809
|
-
const [authType, token] = req.get("Authorization")?.split(" ") || [];
|
|
810
|
-
if (!token) throw new Error(ErrorTypes_default.INVALID_TOKEN);
|
|
811
|
-
let payload;
|
|
812
|
-
switch (authType) {
|
|
813
|
-
case "Anon":
|
|
814
|
-
if (!allowAnonymous) throw response_default.generateError(403, ErrorTypes_default.ANONYMOUS_SESSION_NOT_ALLOWED);
|
|
815
|
-
payload = await this.verifyAnonymousToken(token);
|
|
816
|
-
break;
|
|
817
|
-
case "User":
|
|
818
|
-
if (!allowUser) throw response_default.generateError(403, ErrorTypes_default.USER_SESSION_NOT_ALLOWED);
|
|
819
|
-
payload = await this.verifyUserToken(token);
|
|
820
|
-
break;
|
|
821
|
-
case "System":
|
|
822
|
-
if (!allowSystem) throw response_default.generateError(403, ErrorTypes_default.SYSTEM_SESSION_NOT_ALLOWED);
|
|
823
|
-
payload = await this.verifySystemToken(token);
|
|
824
|
-
Logger_default.logMessage("AuthMiddleware", `System Name - ${payload.id}`);
|
|
825
|
-
break;
|
|
826
|
-
case "Admin":
|
|
827
|
-
payload = await this.verifyAdminToken(token);
|
|
828
|
-
Logger_default.logMessage("AuthMiddleware", `Admin Id - ${payload.id}`);
|
|
829
|
-
break;
|
|
830
|
-
default:
|
|
831
|
-
throw response_default.generateError(403, ErrorTypes_default.INVALID_AUTH_TYPE);
|
|
832
|
-
}
|
|
833
|
-
res.locals.auth = { authType, token, ...payload };
|
|
834
|
-
next();
|
|
835
|
-
} catch (error) {
|
|
836
|
-
Logger_default.logError("AuthMiddleware", util2.inspect(error));
|
|
837
|
-
response_default.handleException(
|
|
838
|
-
"AuthMiddleware",
|
|
839
|
-
response_default.generateError(401, error.error || ErrorTypes_default.TOKEN_EXPIRED, true),
|
|
840
|
-
res
|
|
841
|
-
);
|
|
842
|
-
}
|
|
843
|
-
};
|
|
844
|
-
}
|
|
845
|
-
};
|
|
846
|
-
var Auth_default = AuthUtility;
|
|
847
|
-
|
|
848
|
-
// src/Utils/fetch.ts
|
|
849
|
-
var Fetch = async (baseURL, endpoint, method = "GET", headers = {}, payload) => {
|
|
850
|
-
const options = {
|
|
851
|
-
method,
|
|
852
|
-
headers: {
|
|
853
|
-
"Content-Type": "application/json",
|
|
854
|
-
...headers
|
|
855
|
-
}
|
|
856
|
-
};
|
|
857
|
-
if (method !== "GET" && payload) {
|
|
858
|
-
options.body = JSON.stringify(payload);
|
|
859
|
-
}
|
|
860
|
-
try {
|
|
861
|
-
const response = await fetch(`${baseURL}/${endpoint}`, options);
|
|
862
|
-
if (!response.ok) {
|
|
863
|
-
const errorBody = await response.json().catch(() => response.text());
|
|
864
|
-
throw {
|
|
865
|
-
status: response.status,
|
|
866
|
-
statusText: response.statusText,
|
|
867
|
-
error: errorBody ? errorBody : {
|
|
868
|
-
status: response.status,
|
|
869
|
-
error: response.statusText
|
|
870
|
-
}
|
|
871
|
-
};
|
|
872
|
-
}
|
|
873
|
-
const body = await response.json();
|
|
874
|
-
Logger_default.logMessage("Fetch", `API call successful: URL-${baseURL}/${endpoint}, Status- ${response.status}`);
|
|
875
|
-
return {
|
|
876
|
-
status: response.status,
|
|
877
|
-
statusText: response.statusText,
|
|
878
|
-
data: body.data
|
|
879
|
-
};
|
|
880
|
-
} catch (err) {
|
|
881
|
-
Logger_default.logError("Fetch", `API call failed: URL-${baseURL}/${endpoint}, Status- ${err.status || 500}, Error- ${JSON.stringify(err.error, null, 2)}`);
|
|
882
|
-
throw {
|
|
883
|
-
status: err.status || 500,
|
|
884
|
-
statusText: err.statusText || "Internal Server Error",
|
|
885
|
-
error: err.error || {
|
|
886
|
-
status: err.status || 500,
|
|
887
|
-
error: err.statusText || "Something went wrong"
|
|
888
|
-
}
|
|
889
|
-
};
|
|
890
|
-
}
|
|
891
|
-
};
|
|
892
|
-
var fetch_default = Fetch;
|
|
893
|
-
export {
|
|
894
|
-
Auth_default as AuthUtility,
|
|
895
|
-
DefaultAuthMiddlewareConfig,
|
|
896
|
-
DefaultAuthUtilityConfig,
|
|
897
|
-
Dynamodb_default as DynamoDB,
|
|
898
|
-
fetch_default as Fetch,
|
|
899
|
-
Logger_default as Logger,
|
|
900
|
-
response_default as ResponseUtility,
|
|
901
|
-
Schema_default as Schema,
|
|
902
|
-
Utils_default as Utils
|
|
903
|
-
};
|
|
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
|