@ductape/sdk 0.0.4-v16 → 0.0.4-v17
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/api/services/pricingApi.service.d.ts +10 -0
- package/dist/api/services/pricingApi.service.js +34 -0
- package/dist/api/services/pricingApi.service.js.map +1 -0
- package/dist/api/urls.d.ts +2 -0
- package/dist/api/urls.js +8 -1
- package/dist/api/urls.js.map +1 -1
- package/dist/apps/services/app.service.js +1 -1
- package/dist/apps/services/app.service.js.map +1 -1
- package/dist/clients/pricing.client.d.ts +3 -0
- package/dist/clients/pricing.client.js +33 -0
- package/dist/clients/pricing.client.js.map +1 -0
- package/dist/inputs/utils/inputs.utils.create.js +1 -1
- package/dist/inputs/utils/inputs.utils.create.js.map +1 -1
- package/dist/logs/logs.types.d.ts +4 -0
- package/dist/logs/logs.types.js.map +1 -1
- package/dist/pricing/pricing.repo.d.ts +0 -0
- package/dist/pricing/pricing.repo.js +1 -0
- package/dist/pricing/pricing.repo.js.map +1 -0
- package/dist/pricing/pricing.service.d.ts +24 -0
- package/dist/pricing/pricing.service.js +51 -0
- package/dist/pricing/pricing.service.js.map +1 -0
- package/dist/pricing/pricing.types.d.ts +76 -0
- package/dist/pricing/pricing.types.js +21 -0
- package/dist/pricing/pricing.types.js.map +1 -0
- package/dist/pricing/utils/string.utils.d.ts +1 -0
- package/dist/pricing/utils/string.utils.js +9 -0
- package/dist/pricing/utils/string.utils.js.map +1 -0
- package/dist/processor/services/processor.service.d.ts +6 -0
- package/dist/processor/services/processor.service.js +108 -3
- package/dist/processor/services/processor.service.js.map +1 -1
- package/dist/processor/services/request.service.d.ts +36 -0
- package/dist/processor/services/request.service.js +304 -0
- package/dist/processor/services/request.service.js.map +1 -0
- package/dist/processor/types/request.types.d.ts +14 -0
- package/dist/processor/types/request.types.js +3 -0
- package/dist/processor/types/request.types.js.map +1 -0
- package/dist/processor/utils/processor.utils.js +23 -19
- package/dist/processor/utils/processor.utils.js.map +1 -1
- package/dist/processor/utils/request.utils.d.ts +20 -0
- package/dist/processor/utils/request.utils.js +113 -0
- package/dist/processor/utils/request.utils.js.map +1 -0
- package/dist/products/services/products.service.js +3 -0
- package/dist/products/services/products.service.js.map +1 -1
- package/dist/test/test.imports.js +5 -8
- package/dist/test/test.imports.js.map +1 -1
- package/dist/test/test.processor.js +13 -26
- package/dist/test/test.processor.js.map +1 -1
- package/dist/test/test.products.d.ts +1 -0
- package/dist/test/test.products.js +49 -0
- package/dist/test/test.products.js.map +1 -0
- package/dist/types/pricing.types.d.ts +4 -0
- package/dist/types/pricing.types.js +3 -0
- package/dist/types/pricing.types.js.map +1 -0
- package/dist/types/productsBuilder.types.d.ts +6 -1
- package/dist/types/productsBuilder.types.js +6 -1
- package/dist/types/productsBuilder.types.js.map +1 -1
- package/dist/types/request-tracker.interface.d.ts +0 -0
- package/dist/types/request-tracker.interface.js +1 -0
- package/dist/types/request-tracker.interface.js.map +1 -0
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.js +5 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFreeTag = isFreeTag;
|
|
4
|
+
exports.checkLimitExceeded = checkLimitExceeded;
|
|
5
|
+
exports.calculateOverageRequests = calculateOverageRequests;
|
|
6
|
+
exports.calculateRequests = calculateRequests;
|
|
7
|
+
exports.calculateCost = calculateCost;
|
|
8
|
+
exports.getRequestStats = getRequestStats;
|
|
9
|
+
exports.resetRequestCounter = resetRequestCounter;
|
|
10
|
+
exports.cleanupOldCounters = cleanupOldCounters;
|
|
11
|
+
exports.checkRateLimit = checkRateLimit;
|
|
12
|
+
const pricing_types_1 = require("../../pricing/pricing.types");
|
|
13
|
+
function isFreeTag(pricing_tag) {
|
|
14
|
+
return pricing_tag.endsWith(':free');
|
|
15
|
+
}
|
|
16
|
+
function checkLimitExceeded(requests, limits) {
|
|
17
|
+
const exceededLimits = [];
|
|
18
|
+
if (limits.per_minute && requests.per_minute > limits.per_minute) {
|
|
19
|
+
exceededLimits.push('per_minute');
|
|
20
|
+
}
|
|
21
|
+
if (limits.per_hour && requests.per_hour > limits.per_hour) {
|
|
22
|
+
exceededLimits.push('per_hour');
|
|
23
|
+
}
|
|
24
|
+
if (limits.per_day && requests.per_day > limits.per_day) {
|
|
25
|
+
exceededLimits.push('per_day');
|
|
26
|
+
}
|
|
27
|
+
if (limits.per_week && requests.per_week > limits.per_week) {
|
|
28
|
+
exceededLimits.push('per_week');
|
|
29
|
+
}
|
|
30
|
+
if (limits.per_month && requests.per_month > limits.per_month) {
|
|
31
|
+
exceededLimits.push('per_month');
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
exceeded: exceededLimits.length > 0,
|
|
35
|
+
exceededLimits,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function calculateOverageRequests(requests, limits) {
|
|
39
|
+
let maxOverage = 0;
|
|
40
|
+
if (limits.per_minute && requests.per_minute > limits.per_minute) {
|
|
41
|
+
maxOverage = Math.max(maxOverage, requests.per_minute - limits.per_minute);
|
|
42
|
+
}
|
|
43
|
+
if (limits.per_hour && requests.per_hour > limits.per_hour) {
|
|
44
|
+
maxOverage = Math.max(maxOverage, requests.per_hour - limits.per_hour);
|
|
45
|
+
}
|
|
46
|
+
if (limits.per_day && requests.per_day > limits.per_day) {
|
|
47
|
+
maxOverage = Math.max(maxOverage, requests.per_day - limits.per_day);
|
|
48
|
+
}
|
|
49
|
+
if (limits.per_week && requests.per_week > limits.per_week) {
|
|
50
|
+
maxOverage = Math.max(maxOverage, requests.per_week - limits.per_week);
|
|
51
|
+
}
|
|
52
|
+
if (limits.per_month && requests.per_month > limits.per_month) {
|
|
53
|
+
maxOverage = Math.max(maxOverage, requests.per_month - limits.per_month);
|
|
54
|
+
}
|
|
55
|
+
return maxOverage;
|
|
56
|
+
}
|
|
57
|
+
function calculateRequests(requests) {
|
|
58
|
+
return Math.max(requests.per_minute, requests.per_hour, requests.per_day, requests.per_week, requests.per_month);
|
|
59
|
+
}
|
|
60
|
+
function calculateCost(pricing_mode, unit_price, requests) {
|
|
61
|
+
switch (pricing_mode) {
|
|
62
|
+
case pricing_types_1.pricingMode.PER_REQUEST:
|
|
63
|
+
return requests * unit_price;
|
|
64
|
+
case pricing_types_1.pricingMode.ONE_TIME:
|
|
65
|
+
case pricing_types_1.pricingMode.UPFRONT:
|
|
66
|
+
return requests > 0 ? unit_price : 0;
|
|
67
|
+
case pricing_types_1.pricingMode.RECURRING:
|
|
68
|
+
return requests > 0 ? unit_price : 0;
|
|
69
|
+
default:
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function getRequestStats(app_id, workspace_id, requestTrackerService) {
|
|
74
|
+
return requestTrackerService.getRequestCount(app_id, workspace_id);
|
|
75
|
+
}
|
|
76
|
+
async function resetRequestCounter(app_id, workspace_id, requestTrackerService) {
|
|
77
|
+
const key = `${app_id}:${workspace_id}`;
|
|
78
|
+
requestTrackerService.requestCounts.delete(key);
|
|
79
|
+
}
|
|
80
|
+
async function cleanupOldCounters(requestTrackerService) {
|
|
81
|
+
requestTrackerService.cleanup();
|
|
82
|
+
}
|
|
83
|
+
async function checkRateLimit(app_id, workspace_id, limits, requestTrackerService) {
|
|
84
|
+
const requests = await requestTrackerService.getRequestCount(app_id, workspace_id);
|
|
85
|
+
const limitCheck = this.checkLimitExceeded(requests, limits);
|
|
86
|
+
if (limitCheck.exceeded) {
|
|
87
|
+
let nextReset = new Date(Date.now() + 60 * 1000);
|
|
88
|
+
if (limitCheck.exceededLimits.includes('per_minute')) {
|
|
89
|
+
nextReset = new Date(requests.last_reset.minute.getTime() + 60 * 1000);
|
|
90
|
+
}
|
|
91
|
+
else if (limitCheck.exceededLimits.includes('per_hour')) {
|
|
92
|
+
nextReset = new Date(requests.last_reset.hour.getTime() + 60 * 60 * 1000);
|
|
93
|
+
}
|
|
94
|
+
else if (limitCheck.exceededLimits.includes('per_day')) {
|
|
95
|
+
nextReset = new Date(requests.last_reset.day.getTime() + 24 * 60 * 60 * 1000);
|
|
96
|
+
}
|
|
97
|
+
else if (limitCheck.exceededLimits.includes('per_week')) {
|
|
98
|
+
nextReset = new Date(requests.last_reset.week.getTime() + 7 * 24 * 60 * 60 * 1000);
|
|
99
|
+
}
|
|
100
|
+
else if (limitCheck.exceededLimits.includes('per_month')) {
|
|
101
|
+
const nextMonth = new Date(requests.last_reset.month);
|
|
102
|
+
nextMonth.setMonth(nextMonth.getMonth() + 1);
|
|
103
|
+
nextReset = nextMonth;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
allowed: false,
|
|
107
|
+
reason: `Rate limit exceeded: ${limitCheck.exceededLimits.join(', ')}`,
|
|
108
|
+
reset_time: nextReset,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { allowed: true };
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=request.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.utils.js","sourceRoot":"","sources":["../../../src/processor/utils/request.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1354,6 +1354,9 @@ class ProductsBuilderService {
|
|
|
1354
1354
|
throw new Error(`App ${app.access_tag} not found`);
|
|
1355
1355
|
}
|
|
1356
1356
|
const cleanedAppData = await this.validateAppData(appData, app);
|
|
1357
|
+
if (!cleanedAppData.pricing_tag) {
|
|
1358
|
+
cleanedAppData.pricing_tag = `${appData.tag}:${productsBuilder_types_1.PricingTag.FREE}`;
|
|
1359
|
+
}
|
|
1357
1360
|
await this.productApi.updateProduct(this.product_id, Object.assign(Object.assign({}, cleanedAppData), { app_tag: appData.tag, component: enums_1.ProductComponents.APP, action: enums_1.RequestAction.CREATE }), this.getUserAccess());
|
|
1358
1361
|
await this.initializeProduct(this.product_id);
|
|
1359
1362
|
}
|