pinata 1.7.2 → 1.8.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.d.mts +75 -6
- package/dist/index.d.ts +75 -6
- package/dist/index.js +549 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +549 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -110,20 +110,101 @@ var testAuthentication = async (config) => {
|
|
|
110
110
|
}
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
+
// src/utils/resumable.ts
|
|
114
|
+
function getFileIdFromUrl(url) {
|
|
115
|
+
const match = url.match(/\/files\/([^\/]+)/);
|
|
116
|
+
if (match && match[1]) {
|
|
117
|
+
return match[1];
|
|
118
|
+
}
|
|
119
|
+
throw new NetworkError("File ID not found in URL", 400, url);
|
|
120
|
+
}
|
|
121
|
+
|
|
113
122
|
// src/core/uploads/file.ts
|
|
114
123
|
var uploadFile = async (config, file, options) => {
|
|
115
124
|
if (!config) {
|
|
116
125
|
throw new ValidationError("Pinata configuration is missing");
|
|
117
126
|
}
|
|
118
127
|
const jwt = options?.keys || config.pinataJwt;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (options?.groupId) {
|
|
123
|
-
data.append("group_id", options.groupId);
|
|
128
|
+
let endpoint = "https://uploads.pinata.cloud/v3";
|
|
129
|
+
if (config.uploadUrl) {
|
|
130
|
+
endpoint = config.uploadUrl;
|
|
124
131
|
}
|
|
125
|
-
if (
|
|
126
|
-
|
|
132
|
+
if (file.size > 94371840) {
|
|
133
|
+
let headers2;
|
|
134
|
+
if (config.customHeaders && Object.keys(config.customHeaders).length > 0) {
|
|
135
|
+
headers2 = {
|
|
136
|
+
Authorization: `Bearer ${jwt}`,
|
|
137
|
+
...config.customHeaders
|
|
138
|
+
};
|
|
139
|
+
} else {
|
|
140
|
+
headers2 = {
|
|
141
|
+
Authorization: `Bearer ${jwt}`,
|
|
142
|
+
Source: "sdk/file"
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const name = options?.metadata?.name || file.name || "File from SDK";
|
|
146
|
+
let metadata = `filename ${btoa(name)},filetype ${btoa(file.type)}`;
|
|
147
|
+
if (options?.groupId) {
|
|
148
|
+
metadata + `,group_id ${btoa(options.groupId)}`;
|
|
149
|
+
}
|
|
150
|
+
if (options?.metadata?.keyvalues) {
|
|
151
|
+
metadata + `,keyvalues ${btoa(JSON.stringify(options.metadata.keyvalues))}`;
|
|
152
|
+
}
|
|
153
|
+
const urlReq = await fetch(`${endpoint}/files`, {
|
|
154
|
+
method: "POST",
|
|
155
|
+
headers: {
|
|
156
|
+
"Upload-Length": `${file.size}`,
|
|
157
|
+
"Upload-Metadata": metadata,
|
|
158
|
+
...headers2
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
const url = urlReq.headers.get("Location");
|
|
162
|
+
if (!url) {
|
|
163
|
+
throw new NetworkError("Upload URL not provided", urlReq.status, "");
|
|
164
|
+
}
|
|
165
|
+
const chunkSize = 50 * 1024 * 1024;
|
|
166
|
+
const totalChunks = Math.ceil(file.size / chunkSize);
|
|
167
|
+
let offset = 0;
|
|
168
|
+
let uploadReq;
|
|
169
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
170
|
+
const chunk = file.slice(offset, offset + chunkSize);
|
|
171
|
+
uploadReq = await fetch(url, {
|
|
172
|
+
method: "PATCH",
|
|
173
|
+
headers: {
|
|
174
|
+
"Content-Type": "application/offset+octet-stream",
|
|
175
|
+
"Upload-Offset": offset.toString(),
|
|
176
|
+
...headers2
|
|
177
|
+
},
|
|
178
|
+
body: chunk
|
|
179
|
+
});
|
|
180
|
+
if (!uploadReq.ok) {
|
|
181
|
+
const errorData = await uploadReq.text();
|
|
182
|
+
throw new NetworkError(
|
|
183
|
+
`HTTP error during chunk upload: ${errorData}`,
|
|
184
|
+
uploadReq.status,
|
|
185
|
+
errorData
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
offset += chunk.size;
|
|
189
|
+
}
|
|
190
|
+
if (uploadReq.status === 204) {
|
|
191
|
+
const fileId = getFileIdFromUrl(url);
|
|
192
|
+
let dataEndpoint;
|
|
193
|
+
if (config.endpointUrl) {
|
|
194
|
+
dataEndpoint = config.endpointUrl;
|
|
195
|
+
} else {
|
|
196
|
+
dataEndpoint = "https://api.pinata.cloud/v3";
|
|
197
|
+
}
|
|
198
|
+
const fileInfoReq = await fetch(`${dataEndpoint}/files/${fileId}`, {
|
|
199
|
+
method: "GET",
|
|
200
|
+
headers: {
|
|
201
|
+
Authorization: `Bearer ${process.env.PINATA_JWT}`
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
const fileInfo = await fileInfoReq.json();
|
|
205
|
+
const data2 = fileInfo.data;
|
|
206
|
+
return data2;
|
|
207
|
+
}
|
|
127
208
|
}
|
|
128
209
|
let headers;
|
|
129
210
|
if (config.customHeaders && Object.keys(config.customHeaders).length > 0) {
|
|
@@ -137,9 +218,14 @@ var uploadFile = async (config, file, options) => {
|
|
|
137
218
|
Source: "sdk/file"
|
|
138
219
|
};
|
|
139
220
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
221
|
+
const data = new FormData();
|
|
222
|
+
data.append("file", file, file.name);
|
|
223
|
+
data.append("name", options?.metadata?.name || file.name || "File from SDK");
|
|
224
|
+
if (options?.groupId) {
|
|
225
|
+
data.append("group_id", options.groupId);
|
|
226
|
+
}
|
|
227
|
+
if (options?.metadata?.keyvalues) {
|
|
228
|
+
data.append("keyvalues", JSON.stringify(options.metadata.keyvalues));
|
|
143
229
|
}
|
|
144
230
|
try {
|
|
145
231
|
const request = await fetch(`${endpoint}/files`, {
|
|
@@ -1410,6 +1496,211 @@ var deleteGroup = async (config, options) => {
|
|
|
1410
1496
|
}
|
|
1411
1497
|
};
|
|
1412
1498
|
|
|
1499
|
+
// src/core/analytics/analyticsTopUsage.ts
|
|
1500
|
+
var analyticsTopUsage = async (config, options) => {
|
|
1501
|
+
if (!config) {
|
|
1502
|
+
throw new ValidationError("Pinata configuration is missing");
|
|
1503
|
+
}
|
|
1504
|
+
const params = new URLSearchParams();
|
|
1505
|
+
if (options) {
|
|
1506
|
+
const {
|
|
1507
|
+
cid,
|
|
1508
|
+
gateway_domain,
|
|
1509
|
+
start_date,
|
|
1510
|
+
end_date,
|
|
1511
|
+
file_name,
|
|
1512
|
+
user_agent,
|
|
1513
|
+
country,
|
|
1514
|
+
region,
|
|
1515
|
+
referer,
|
|
1516
|
+
limit,
|
|
1517
|
+
sort_order,
|
|
1518
|
+
sort_by,
|
|
1519
|
+
attribute
|
|
1520
|
+
} = options;
|
|
1521
|
+
const domain = gateway_domain || config.pinataGateway;
|
|
1522
|
+
if (domain) {
|
|
1523
|
+
const cleanDomain = domain.replace(/^https?:\/\//, "");
|
|
1524
|
+
params.append("gateway_domain", cleanDomain);
|
|
1525
|
+
}
|
|
1526
|
+
if (cid) {
|
|
1527
|
+
params.append("cid", cid);
|
|
1528
|
+
}
|
|
1529
|
+
if (start_date)
|
|
1530
|
+
params.append("start_date", start_date);
|
|
1531
|
+
if (end_date)
|
|
1532
|
+
params.append("end_date", end_date);
|
|
1533
|
+
if (file_name)
|
|
1534
|
+
params.append("file_name", file_name);
|
|
1535
|
+
if (user_agent)
|
|
1536
|
+
params.append("user_agent", user_agent.toString());
|
|
1537
|
+
if (country)
|
|
1538
|
+
params.append("country", country.toString());
|
|
1539
|
+
if (region)
|
|
1540
|
+
params.append("region", region);
|
|
1541
|
+
if (referer)
|
|
1542
|
+
params.append("referer", referer.toString());
|
|
1543
|
+
if (limit)
|
|
1544
|
+
params.append("limit", limit.toString());
|
|
1545
|
+
if (sort_order)
|
|
1546
|
+
params.append("sort_order", sort_order);
|
|
1547
|
+
if (sort_by)
|
|
1548
|
+
params.append("sort_by", sort_by);
|
|
1549
|
+
if (attribute)
|
|
1550
|
+
params.append("by", attribute);
|
|
1551
|
+
}
|
|
1552
|
+
let endpoint = "https://api.pinata.cloud/v3";
|
|
1553
|
+
if (config.endpointUrl) {
|
|
1554
|
+
endpoint = config.endpointUrl;
|
|
1555
|
+
}
|
|
1556
|
+
const url = `${endpoint}/ipfs/gateway_analytics_top?${params.toString()}`;
|
|
1557
|
+
try {
|
|
1558
|
+
let headers;
|
|
1559
|
+
if (config.customHeaders && Object.keys(config.customHeaders).length > 0) {
|
|
1560
|
+
headers = { ...config.customHeaders };
|
|
1561
|
+
} else {
|
|
1562
|
+
headers = {
|
|
1563
|
+
Authorization: `Bearer ${config.pinataJwt}`,
|
|
1564
|
+
Source: "sdk/analyticsTopUsage"
|
|
1565
|
+
};
|
|
1566
|
+
}
|
|
1567
|
+
const request = await fetch(url, {
|
|
1568
|
+
method: "GET",
|
|
1569
|
+
headers
|
|
1570
|
+
});
|
|
1571
|
+
if (!request.ok) {
|
|
1572
|
+
const errorData = await request.text();
|
|
1573
|
+
if (request.status === 401 || request.status === 403) {
|
|
1574
|
+
throw new AuthenticationError(
|
|
1575
|
+
`Authentication failed: ${errorData}`,
|
|
1576
|
+
request.status,
|
|
1577
|
+
errorData
|
|
1578
|
+
);
|
|
1579
|
+
}
|
|
1580
|
+
throw new NetworkError(
|
|
1581
|
+
`HTTP error: ${errorData}`,
|
|
1582
|
+
request.status,
|
|
1583
|
+
errorData
|
|
1584
|
+
);
|
|
1585
|
+
}
|
|
1586
|
+
const res = await request.json();
|
|
1587
|
+
return res;
|
|
1588
|
+
} catch (error) {
|
|
1589
|
+
if (error instanceof PinataError) {
|
|
1590
|
+
throw error;
|
|
1591
|
+
}
|
|
1592
|
+
if (error instanceof Error) {
|
|
1593
|
+
throw new PinataError(
|
|
1594
|
+
`Error processing anaytics usage: ${error.message}`
|
|
1595
|
+
);
|
|
1596
|
+
}
|
|
1597
|
+
throw new PinataError(
|
|
1598
|
+
"An unknown error occurred while fetching gateway usage"
|
|
1599
|
+
);
|
|
1600
|
+
}
|
|
1601
|
+
};
|
|
1602
|
+
|
|
1603
|
+
// src/core/analytics/analyticsDateInterval.ts
|
|
1604
|
+
var analyticsDateInterval = async (config, options) => {
|
|
1605
|
+
if (!config) {
|
|
1606
|
+
throw new ValidationError("Pinata configuration is missing");
|
|
1607
|
+
}
|
|
1608
|
+
const params = new URLSearchParams();
|
|
1609
|
+
if (options) {
|
|
1610
|
+
const {
|
|
1611
|
+
cid,
|
|
1612
|
+
gateway_domain,
|
|
1613
|
+
start_date,
|
|
1614
|
+
end_date,
|
|
1615
|
+
file_name,
|
|
1616
|
+
user_agent,
|
|
1617
|
+
country,
|
|
1618
|
+
region,
|
|
1619
|
+
referer,
|
|
1620
|
+
limit,
|
|
1621
|
+
sort_order,
|
|
1622
|
+
date_interval,
|
|
1623
|
+
sort_by
|
|
1624
|
+
} = options;
|
|
1625
|
+
if (cid)
|
|
1626
|
+
params.append("cid", cid);
|
|
1627
|
+
if (gateway_domain)
|
|
1628
|
+
params.append("gateway_domain", gateway_domain);
|
|
1629
|
+
if (start_date)
|
|
1630
|
+
params.append("start_date", start_date);
|
|
1631
|
+
if (end_date)
|
|
1632
|
+
params.append("end_date", end_date);
|
|
1633
|
+
if (file_name)
|
|
1634
|
+
params.append("file_name", file_name);
|
|
1635
|
+
if (user_agent)
|
|
1636
|
+
params.append("user_agent", user_agent.toString());
|
|
1637
|
+
if (country)
|
|
1638
|
+
params.append("country", country.toString());
|
|
1639
|
+
if (region)
|
|
1640
|
+
params.append("region", region);
|
|
1641
|
+
if (referer)
|
|
1642
|
+
params.append("referer", referer.toString());
|
|
1643
|
+
if (limit)
|
|
1644
|
+
params.append("limit", limit.toString());
|
|
1645
|
+
if (sort_order)
|
|
1646
|
+
params.append("sort_order", sort_order);
|
|
1647
|
+
if (sort_by)
|
|
1648
|
+
params.append("sort_by", sort_by);
|
|
1649
|
+
if (date_interval)
|
|
1650
|
+
params.append("by", date_interval);
|
|
1651
|
+
}
|
|
1652
|
+
let endpoint = "https://api.pinata.cloud/v3";
|
|
1653
|
+
if (config.endpointUrl) {
|
|
1654
|
+
endpoint = config.endpointUrl;
|
|
1655
|
+
}
|
|
1656
|
+
const url = `${endpoint}/ipfs/gateway_analytics_time_series?${params.toString()}`;
|
|
1657
|
+
try {
|
|
1658
|
+
let headers;
|
|
1659
|
+
if (config.customHeaders && Object.keys(config.customHeaders).length > 0) {
|
|
1660
|
+
headers = { ...config.customHeaders };
|
|
1661
|
+
} else {
|
|
1662
|
+
headers = {
|
|
1663
|
+
Authorization: `Bearer ${config.pinataJwt}`,
|
|
1664
|
+
Source: "sdk/analyticsDateInterval"
|
|
1665
|
+
};
|
|
1666
|
+
}
|
|
1667
|
+
const request = await fetch(url, {
|
|
1668
|
+
method: "GET",
|
|
1669
|
+
headers
|
|
1670
|
+
});
|
|
1671
|
+
if (!request.ok) {
|
|
1672
|
+
const errorData = await request.text();
|
|
1673
|
+
if (request.status === 401 || request.status === 403) {
|
|
1674
|
+
throw new AuthenticationError(
|
|
1675
|
+
`Authentication failed: ${errorData}`,
|
|
1676
|
+
request.status,
|
|
1677
|
+
errorData
|
|
1678
|
+
);
|
|
1679
|
+
}
|
|
1680
|
+
throw new NetworkError(
|
|
1681
|
+
`HTTP error: ${errorData}`,
|
|
1682
|
+
request.status,
|
|
1683
|
+
errorData
|
|
1684
|
+
);
|
|
1685
|
+
}
|
|
1686
|
+
const res = await request.json();
|
|
1687
|
+
const resData = res.data;
|
|
1688
|
+
return resData;
|
|
1689
|
+
} catch (error) {
|
|
1690
|
+
if (error instanceof PinataError) {
|
|
1691
|
+
throw error;
|
|
1692
|
+
}
|
|
1693
|
+
if (error instanceof Error) {
|
|
1694
|
+
throw new PinataError(
|
|
1695
|
+
`Error processing anaytics usage: ${error.message}`
|
|
1696
|
+
);
|
|
1697
|
+
}
|
|
1698
|
+
throw new PinataError(
|
|
1699
|
+
"An unknown error occurred while fetching gateway usage"
|
|
1700
|
+
);
|
|
1701
|
+
}
|
|
1702
|
+
};
|
|
1703
|
+
|
|
1413
1704
|
// src/core/files/swapCid.ts
|
|
1414
1705
|
var swapCid = async (config, options) => {
|
|
1415
1706
|
if (!config) {
|
|
@@ -1745,6 +2036,7 @@ var PinataSDK = class {
|
|
|
1745
2036
|
this.gateways = new Gateways(this.config);
|
|
1746
2037
|
this.keys = new Keys(this.config);
|
|
1747
2038
|
this.groups = new Groups(this.config);
|
|
2039
|
+
this.analytics = new Analytics(this.config);
|
|
1748
2040
|
}
|
|
1749
2041
|
setNewHeaders(headers) {
|
|
1750
2042
|
if (!this.config) {
|
|
@@ -1756,6 +2048,7 @@ var PinataSDK = class {
|
|
|
1756
2048
|
this.gateways.updateConfig(this.config);
|
|
1757
2049
|
this.keys.updateConfig(this.config);
|
|
1758
2050
|
this.groups.updateConfig(this.config);
|
|
2051
|
+
this.analytics.updateConfig(this.config);
|
|
1759
2052
|
}
|
|
1760
2053
|
setNewJwt(jwt) {
|
|
1761
2054
|
if (!this.config) {
|
|
@@ -1767,6 +2060,7 @@ var PinataSDK = class {
|
|
|
1767
2060
|
this.gateways.updateConfig(this.config);
|
|
1768
2061
|
this.keys.updateConfig(this.config);
|
|
1769
2062
|
this.groups.updateConfig(this.config);
|
|
2063
|
+
this.analytics.updateConfig(this.config);
|
|
1770
2064
|
}
|
|
1771
2065
|
testAuthentication() {
|
|
1772
2066
|
return testAuthentication(this.config);
|
|
@@ -2221,6 +2515,251 @@ var FilterGroups = class {
|
|
|
2221
2515
|
return allItems;
|
|
2222
2516
|
}
|
|
2223
2517
|
};
|
|
2518
|
+
var Analytics = class {
|
|
2519
|
+
constructor(config) {
|
|
2520
|
+
this.config = formatConfig(config);
|
|
2521
|
+
this.requests = new AnalyticsRequests(this.config);
|
|
2522
|
+
this.bandwidth = new AnalyticsBandwidth(this.config);
|
|
2523
|
+
}
|
|
2524
|
+
updateConfig(newConfig) {
|
|
2525
|
+
this.config = newConfig;
|
|
2526
|
+
this.requests.updateConfig(newConfig);
|
|
2527
|
+
this.bandwidth.updateConfig(newConfig);
|
|
2528
|
+
}
|
|
2529
|
+
// detailed(options: {
|
|
2530
|
+
// domain: string;
|
|
2531
|
+
// start: string;
|
|
2532
|
+
// end: string;
|
|
2533
|
+
// sortBy: "requests" | "bandwidth";
|
|
2534
|
+
// attribute:
|
|
2535
|
+
// | "cid"
|
|
2536
|
+
// | "country"
|
|
2537
|
+
// | "region"
|
|
2538
|
+
// | "user_agent"
|
|
2539
|
+
// | "referer"
|
|
2540
|
+
// | "file_name";
|
|
2541
|
+
// }): TopAnalyticsBuilder {
|
|
2542
|
+
// return new TopAnalyticsBuilder(
|
|
2543
|
+
// this.config,
|
|
2544
|
+
// options.domain,
|
|
2545
|
+
// options.start,
|
|
2546
|
+
// options.end,
|
|
2547
|
+
// options.sortBy,
|
|
2548
|
+
// options.attribute,
|
|
2549
|
+
// );
|
|
2550
|
+
// }
|
|
2551
|
+
summary(options) {
|
|
2552
|
+
return new TimeIntervalAnalyticsBuilder(
|
|
2553
|
+
this.config,
|
|
2554
|
+
options.domain,
|
|
2555
|
+
options.start,
|
|
2556
|
+
options.end,
|
|
2557
|
+
options.interval
|
|
2558
|
+
);
|
|
2559
|
+
}
|
|
2560
|
+
};
|
|
2561
|
+
var calculateDates = (days) => {
|
|
2562
|
+
const end = /* @__PURE__ */ new Date();
|
|
2563
|
+
const start = /* @__PURE__ */ new Date();
|
|
2564
|
+
start.setDate(start.getDate() - days);
|
|
2565
|
+
return {
|
|
2566
|
+
start: start.toISOString().split("T")[0],
|
|
2567
|
+
end: end.toISOString().split("T")[0]
|
|
2568
|
+
};
|
|
2569
|
+
};
|
|
2570
|
+
var AnalyticsFilter = class {
|
|
2571
|
+
constructor(config, domain, start, end) {
|
|
2572
|
+
this.config = config;
|
|
2573
|
+
this.query = {
|
|
2574
|
+
gateway_domain: domain,
|
|
2575
|
+
start_date: start,
|
|
2576
|
+
end_date: end,
|
|
2577
|
+
sort_by: "requests",
|
|
2578
|
+
// Will be overridden in child classes
|
|
2579
|
+
attribute: "cid"
|
|
2580
|
+
};
|
|
2581
|
+
}
|
|
2582
|
+
cid(cid) {
|
|
2583
|
+
this.query.attribute = "cid";
|
|
2584
|
+
if (cid) {
|
|
2585
|
+
this.query.cid = cid;
|
|
2586
|
+
}
|
|
2587
|
+
return this;
|
|
2588
|
+
}
|
|
2589
|
+
fileName(fileName) {
|
|
2590
|
+
this.query.attribute = "file_name";
|
|
2591
|
+
if (fileName) {
|
|
2592
|
+
this.query.file_name = fileName;
|
|
2593
|
+
}
|
|
2594
|
+
return this;
|
|
2595
|
+
}
|
|
2596
|
+
userAgent(userAgent) {
|
|
2597
|
+
this.query.attribute = "user_agent";
|
|
2598
|
+
if (userAgent) {
|
|
2599
|
+
this.query.user_agent = userAgent;
|
|
2600
|
+
}
|
|
2601
|
+
return this;
|
|
2602
|
+
}
|
|
2603
|
+
country(country) {
|
|
2604
|
+
this.query.attribute = "country";
|
|
2605
|
+
if (country) {
|
|
2606
|
+
this.query.country = country;
|
|
2607
|
+
}
|
|
2608
|
+
return this;
|
|
2609
|
+
}
|
|
2610
|
+
region(region) {
|
|
2611
|
+
this.query.attribute = "region";
|
|
2612
|
+
if (region) {
|
|
2613
|
+
this.query.region = region;
|
|
2614
|
+
}
|
|
2615
|
+
return this;
|
|
2616
|
+
}
|
|
2617
|
+
referer(referer) {
|
|
2618
|
+
this.query.attribute = "referer";
|
|
2619
|
+
if (referer) {
|
|
2620
|
+
this.query.referer = referer;
|
|
2621
|
+
}
|
|
2622
|
+
return this;
|
|
2623
|
+
}
|
|
2624
|
+
limit(limit) {
|
|
2625
|
+
this.query.limit = limit;
|
|
2626
|
+
return this;
|
|
2627
|
+
}
|
|
2628
|
+
sort(order) {
|
|
2629
|
+
this.query.sort_order = order;
|
|
2630
|
+
return this;
|
|
2631
|
+
}
|
|
2632
|
+
days(numberOfDays) {
|
|
2633
|
+
const { start, end } = calculateDates(numberOfDays);
|
|
2634
|
+
this.query.start_date = start;
|
|
2635
|
+
this.query.end_date = end;
|
|
2636
|
+
return this;
|
|
2637
|
+
}
|
|
2638
|
+
then(onfulfilled) {
|
|
2639
|
+
return analyticsTopUsage(this.config, this.query).then(onfulfilled);
|
|
2640
|
+
}
|
|
2641
|
+
};
|
|
2642
|
+
var AnalyticsRequests = class extends AnalyticsFilter {
|
|
2643
|
+
constructor(config) {
|
|
2644
|
+
super(config, "", "", "");
|
|
2645
|
+
this.query.sort_by = "requests";
|
|
2646
|
+
}
|
|
2647
|
+
updateConfig(newConfig) {
|
|
2648
|
+
this.config = newConfig;
|
|
2649
|
+
}
|
|
2650
|
+
customDates(start, end) {
|
|
2651
|
+
if (start)
|
|
2652
|
+
this.query.start_date = start;
|
|
2653
|
+
if (end)
|
|
2654
|
+
this.query.end_date = end;
|
|
2655
|
+
return this;
|
|
2656
|
+
}
|
|
2657
|
+
from(domain) {
|
|
2658
|
+
this.query.gateway_domain = domain;
|
|
2659
|
+
return this;
|
|
2660
|
+
}
|
|
2661
|
+
};
|
|
2662
|
+
var AnalyticsBandwidth = class extends AnalyticsFilter {
|
|
2663
|
+
constructor(config) {
|
|
2664
|
+
super(config, "", "", "");
|
|
2665
|
+
this.query.sort_by = "bandwidth";
|
|
2666
|
+
}
|
|
2667
|
+
updateConfig(newConfig) {
|
|
2668
|
+
this.config = newConfig;
|
|
2669
|
+
}
|
|
2670
|
+
customDates(start, end) {
|
|
2671
|
+
if (start)
|
|
2672
|
+
this.query.start_date = start;
|
|
2673
|
+
if (end)
|
|
2674
|
+
this.query.end_date = end;
|
|
2675
|
+
return this;
|
|
2676
|
+
}
|
|
2677
|
+
from(domain) {
|
|
2678
|
+
this.query.gateway_domain = domain;
|
|
2679
|
+
return this;
|
|
2680
|
+
}
|
|
2681
|
+
};
|
|
2682
|
+
var AnalyticsBuilder = class {
|
|
2683
|
+
constructor(config, query) {
|
|
2684
|
+
this.requestCount = 0;
|
|
2685
|
+
this.lastRequestTime = 0;
|
|
2686
|
+
this.MAX_REQUESTS_PER_MINUTE = 30;
|
|
2687
|
+
this.MINUTE_IN_MS = 6e4;
|
|
2688
|
+
this.config = config;
|
|
2689
|
+
this.query = query;
|
|
2690
|
+
}
|
|
2691
|
+
cid(cid) {
|
|
2692
|
+
this.query.cid = cid;
|
|
2693
|
+
return this;
|
|
2694
|
+
}
|
|
2695
|
+
fileName(fileName) {
|
|
2696
|
+
this.query.file_name = fileName;
|
|
2697
|
+
return this;
|
|
2698
|
+
}
|
|
2699
|
+
userAgent(userAgent) {
|
|
2700
|
+
this.query.user_agent = userAgent;
|
|
2701
|
+
return this;
|
|
2702
|
+
}
|
|
2703
|
+
country(country) {
|
|
2704
|
+
this.query.country = country;
|
|
2705
|
+
return this;
|
|
2706
|
+
}
|
|
2707
|
+
region(region) {
|
|
2708
|
+
this.query.region = region;
|
|
2709
|
+
return this;
|
|
2710
|
+
}
|
|
2711
|
+
referer(referer) {
|
|
2712
|
+
this.query.referer = referer;
|
|
2713
|
+
return this;
|
|
2714
|
+
}
|
|
2715
|
+
limit(limit) {
|
|
2716
|
+
this.query.limit = limit;
|
|
2717
|
+
return this;
|
|
2718
|
+
}
|
|
2719
|
+
sort(order) {
|
|
2720
|
+
this.query.sort_order = order;
|
|
2721
|
+
return this;
|
|
2722
|
+
}
|
|
2723
|
+
// private async rateLimit(): Promise<void> {
|
|
2724
|
+
// this.requestCount++;
|
|
2725
|
+
// const now = Date.now();
|
|
2726
|
+
// if (this.requestCount >= this.MAX_REQUESTS_PER_MINUTE) {
|
|
2727
|
+
// const timePassedSinceLastRequest = now - this.lastRequestTime;
|
|
2728
|
+
// if (timePassedSinceLastRequest < this.MINUTE_IN_MS) {
|
|
2729
|
+
// const delayTime = this.MINUTE_IN_MS - timePassedSinceLastRequest;
|
|
2730
|
+
// await new Promise((resolve) => setTimeout(resolve, delayTime));
|
|
2731
|
+
// }
|
|
2732
|
+
// this.requestCount = 0;
|
|
2733
|
+
// }
|
|
2734
|
+
// this.lastRequestTime = Date.now();
|
|
2735
|
+
// }
|
|
2736
|
+
async getAnalytics() {
|
|
2737
|
+
throw new Error("getAnalytics method must be implemented in derived class");
|
|
2738
|
+
}
|
|
2739
|
+
then(onfulfilled) {
|
|
2740
|
+
return this.getAnalytics().then(onfulfilled);
|
|
2741
|
+
}
|
|
2742
|
+
};
|
|
2743
|
+
var TimeIntervalAnalyticsBuilder = class extends AnalyticsBuilder {
|
|
2744
|
+
constructor(config, domain, start, end, dateInterval) {
|
|
2745
|
+
super(config, {
|
|
2746
|
+
gateway_domain: domain,
|
|
2747
|
+
start_date: start,
|
|
2748
|
+
end_date: end,
|
|
2749
|
+
date_interval: dateInterval
|
|
2750
|
+
});
|
|
2751
|
+
}
|
|
2752
|
+
sortBy(sortBy) {
|
|
2753
|
+
this.query.sort_by = sortBy;
|
|
2754
|
+
return this;
|
|
2755
|
+
}
|
|
2756
|
+
async getAnalytics() {
|
|
2757
|
+
return analyticsDateInterval(this.config, this.query);
|
|
2758
|
+
}
|
|
2759
|
+
async all() {
|
|
2760
|
+
return this.getAnalytics();
|
|
2761
|
+
}
|
|
2762
|
+
};
|
|
2224
2763
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2225
2764
|
0 && (module.exports = {
|
|
2226
2765
|
PinataSDK
|