输入 API KEY
本站不保存 KEY 信息,查询后请自行保存
-
+
[官网线路]api.openai.com
[CZLoapi线路]oapi.czl.net
[群友CF反代]openai.996.lat
- [本地]
[已前置https]自定义
@@ -84,15 +83,17 @@
查询
-
+
页面列表
-
+
查API信息
- 通过access token获取sess
+ 通过access token获取sess
手动获取sess的方法
+ pandora无痛获取access
diff --git a/static/getsess.js b/static/getsess.js
new file mode 100644
index 0000000..8947ed1
--- /dev/null
+++ b/static/getsess.js
@@ -0,0 +1,212 @@
+let queriedApiKeys = [];
+let serialNumber = 1;
+
+function toggleCustomUrlInput() {
+ // 获取id为"api-url-select"的元素
+ const selectElement = document.getElementById("api-url-select");
+ // 获取id为"custom-url-input"的元素
+ const customUrlInput = document.getElementById("custom-url-input");
+
+ // 如果selectElement的值为"custom"
+ if (selectElement.value === "custom") {
+ // 从customUrlInput的classList中移除"hidden"
+ customUrlInput.classList.remove("hidden");
+ } else {
+ // 给customUrlInput的classList添加"hidden"
+ customUrlInput.classList.add("hidden");
+ }
+}
+
+async function checkBilling(apiKey, apiUrl) {
+ const headers = {
+ "Authorization": "Bearer " + apiKey,
+ "Content-Type": "application/json"
+ };
+ const urlGetsess = `${apiUrl}/dashboard/onboarding/login`;
+
+ try {
+ const response = await fetch(urlGetsess, {
+ method: "POST", // 设置请求方法为 POST
+ headers: headers,
+ body: JSON.stringify({}) // 此处放置要发送的数据
+ });
+
+ const getsessdata = await response.json();
+ console.log(getsessdata);
+ if (getsessdata && getsessdata.user && getsessdata.user.session) {
+ return getsessdata; // 直接返回整个getsessdata对象
+ } else {
+ console.error("Unexpected data structure: user or session property not found in the response.", getsessdata);
+ return null;
+ }
+ } catch (error) {
+ console.error(error);
+ return null;
+ }
+}
+
+//查询函数
+async function sendRequest() {
+ let button = document.querySelector("button");
+ button.textContent = "加载中...";
+ button.disabled = true;
+ button.classList.add("loading")
+
+ let apiKeyInput = document.getElementById("api-key-input");
+ let apiUrlSelect = document.getElementById("api-url-select");
+ let customUrlInput = document.getElementById("custom-url-input");
+ let table = document.getElementById("result-table");
+ let h2 = document.getElementById("result-head");
+
+ if (apiKeyInput.value.trim() === "") {
+ alert("请填写API KEY");
+ return;
+ }
+
+ document.getElementById("result-table").getElementsByTagName('tbody')[0].innerHTML = "";
+
+ let apiUrl = "";
+ if (apiUrlSelect.value === "custom") {
+ if (customUrlInput.value.trim() === "") {
+ mdui.alert({
+ headline: "无查询线路",
+ description: "请选择或自定义",
+ confirmText: "OK",
+ })
+ return;
+ } else {
+ apiUrl = customUrlInput.value.trim();
+ if (!apiUrl.startsWith("http://") && !apiUrl.startsWith("https://")) {
+ apiUrl = "https://" + apiUrl;
+ }
+ }
+ } else {
+ apiUrl = apiUrlSelect.value;
+ }
+
+ let apiKeys = apiKeyInput.value.split(/[,\s,\n]+/);
+
+ if (apiKeys.length === 0) {
+ mdui.alert({
+ headline: "未匹配到 access_token",
+ description: "请检查输入内容",
+ confirmText: "OK",
+ })
+ return;
+ }
+
+ mdui.alert({
+ headline: "成功匹配到 access_token",
+ description: apiKeys,
+ confirmText: "OK",
+ });
+
+ showLoadingAnimation();
+
+ let tableBody = document.querySelector("#result-table tbody");
+ for (let i = 0; i < apiKeys.length; i++) {
+ let apiKey = apiKeys[i].trim();
+
+ let data = await checkBilling(apiKey, apiUrl); // 获取 checkBilling 的结果
+
+ let row = document.createElement("tr");
+
+ let serialNumberCell = document.createElement("td");
+ serialNumberCell.textContent = serialNumber;
+ row.appendChild(serialNumberCell);
+
+ let apiKeyCell = document.createElement("td");
+ apiKeyCell.textContent = apiKey.replace(/^(.{10}).*(.{8})$/, "$1***$2");
+ row.appendChild(apiKeyCell);
+
+ if (data.user && data.user.session) {
+ let user = data.user;
+ let session = user.session;
+ let ip_country = data.ip_country;
+
+ let orgId = user.orgs.data[0].id;
+
+ let properties = ['id', 'email', 'name', 'phone_number', 'created', 'sensitive_id', 'session_created', orgId, 'ip_country'];
+ properties.forEach(prop => {
+ let cell = document.createElement("td");
+ if (prop === 'created' || prop === 'session_created') {
+ let timestamp = prop === 'created' ? user[prop] : session['created'];
+ cell.textContent = new Date(timestamp * 1000).toLocaleString();
+ } else if (prop === 'sensitive_id') {
+ cell.textContent = session[prop]; // 获取 session 对象中的 sensitive_id
+ } else if (prop === orgId) {
+ cell.textContent = orgId; // 直接使用 orgId 变量
+ } else if (prop === 'ip_country') {
+ cell.textContent = ip_country ? ip_country : 'N/A'; // 改为使用 ip_country 变量
+ } else {
+ cell.textContent = user[prop];
+ }
+ row.appendChild(cell);
+ });
+
+ } else {
+ // 接口返回的数据结构不符合预期
+ console.error("Unexpected data structure: data[0] or data.user is undefined.");
+ let errorMessageCell = document.createElement("td");
+ errorMessageCell.colSpan = "8";
+ errorMessageCell.classList.add("status-error");
+ errorMessageCell.textContent = "不正确或已失效的API-KEY";
+ row.appendChild(errorMessageCell);
+ }
+
+ tableBody.appendChild(row);
+
+ if (i === apiKeys.length - 1) {
+ queriedApiKeys = [];
+ }
+ serialNumber++;
+
+
+
+ button.textContent = "查询";
+ button.disabled = false;
+ button.classList.remove("loading");
+ }
+ hideLoadingAnimation();
+}
+
+
+let apiUrlSelect = document.getElementById("api-url-select");
+let customUrlInput = document.getElementById("custom-url-input");
+
+apiUrlSelect.addEventListener("change", function () {
+ if (apiUrlSelect.value === "custom") {
+ customUrlInput.style.display = "inline-block";
+ customUrlInput.style.marginTop = "5px";
+ } else {
+ customUrlInput.style.display = "none";
+ }
+});
+
+
+function showLoadingAnimation() {
+ const button = document.getElementById("query-button");
+
+ // 创建一个新的 元素
+ const progressElement = document.createElement("mdui-linear-progress");
+ progressElement.id = "query-progress";
+
+ // 将新元素替代原始按钮元素
+ button.parentElement.replaceChild(progressElement, button);
+}
+
+function hideLoadingAnimation() {
+ const progressElement = document.querySelector("mdui-linear-progress");
+
+ if (progressElement) {
+ const button = document.createElement("mdui-button");
+ button.id = "query-button";
+ button.innerHTML = "查询";
+ button.setAttribute("full-width", "");
+ button.setAttribute("icon", "search");
+ button.setAttribute("onclick", "sendRequest()");
+
+ // 将原始按钮元素替代回来
+ progressElement.parentElement.replaceChild(button, progressElement);
+ }
+}
\ No newline at end of file
diff --git a/static/js.js b/static/js.js
index d8cd1c0..80fbc05 100644
--- a/static/js.js
+++ b/static/js.js
@@ -397,6 +397,9 @@ function sendRequest() {
}
else if (sessKeyMatch !== null) {
result.push(sessKeyMatch[0]);
+ }else {
+ // 如果没有匹配到任何内容,保留原始行
+ result.push(line);
}
}
return result;
@@ -565,7 +568,7 @@ function sendRequest() {
} else if (model === 'gpt-4-32k') {
modelName = 'gpt4-32K';
}
- rateLimitsText += `${modelName}: ${rateLimitsData[model].max_requests_per_1_minute}, ${rateLimitsData[model].max_tokens_per_1_minute}\n`;
+ rateLimitsText += `${modelName}: ${rateLimitsData[model].max_requests_per_1_minute}, ${rateLimitsData[model].max_tokens_per_1_minute}-${rateLimitsData[model].max_requests_per_1_day}\n`;
} else {
rateLimitsText += model + ": ❌\n";
}
diff --git a/static/sess1.js b/static/sess1.js
deleted file mode 100644
index 2cc7336..0000000
--- a/static/sess1.js
+++ /dev/null
@@ -1,170 +0,0 @@
-let queriedApiKeys = [];
-let serialNumber = 1;
-
-
-async function checkBilling(apiKey, apiUrl) {
- const headers = {
- "Authorization": "Bearer " + apiKey,
- "Content-Type": "application/json"
- };
- const urlGetsess = `${apiUrl}/dashboard/onboarding/login`;
-
- try {
- let getSess;
- try {
- const response = await fetch(urlGetsess, {
- method: "POST", // 设置请求方法为 POST
- headers: headers,
- body: JSON.stringify({}) // 此处放置要发送的数据
- });
-
- const getsessdata = await response.json();
- console.log(getsessdata);
-
- // 获取"sensitive_id"
- const sensitiveId = getsessdata.user.session.sensitive_id;
-
- // 现在,sensitiveId 包含了"sensitive_id"的值
- console.log(sensitiveId);
- return [sensitiveId];
- } catch (error) {
- console.error(error);
- }
-
- } catch (error) {
- console.error(error);
- return [null];
- }
-}
-
-//查询函数
-async function sendRequest() {
- let button = document.querySelector("button");
- button.textContent = "加载中...";
- button.disabled = true;
- button.classList.add("loading")
-
- let apiKeyInput = document.getElementById("api-key-input");
- let apiUrlSelect = document.getElementById("api-url-select");
- let customUrlInput = document.getElementById("custom-url-input");
- let table = document.getElementById("result-table");
- let h2 = document.getElementById("result-head");
- h2.style.visibility = "visible";
- table.style.visibility = "visible";
-
- if (apiKeyInput.value.trim() === "") {
- alert("请填写API KEY");
- return;
- }
-
- document.getElementById("result-table").getElementsByTagName('tbody')[0].innerHTML = "";
-
- let apiUrl = "";
- if (apiUrlSelect.value === "custom") {
- if (customUrlInput.value.trim() === "") {
- alert("请设置API链接");
- return;
- } else {
- apiUrl = customUrlInput.value.trim();
- if (!apiUrl.startsWith("http://") && !apiUrl.startsWith("https://")) {
- apiUrl = "https://" + apiUrl;
- }
- }
- } else {
- apiUrl = apiUrlSelect.value;
- }
-
- let apiKeys = apiKeyInput.value.split(/[,\s,\n]+/);
-
- if (apiKeys.length === 0) {
- alert("未匹配到 API-KEY,请检查输入内容");
- return;
- }
-
- alert("成功匹配到 API Key,确认后开始查询:" + apiKeys);
-
- let tableBody = document.querySelector("#result-table tbody");
- for (let i = 0; i < apiKeys.length; i++) {
- let apiKey = apiKeys[i].trim();
-
- if (queriedApiKeys.includes(apiKey)) {
- console.log(`API KEY ${apiKey} 已查询过,跳过此次查询`);
- continue;
- }
- queriedApiKeys.push(apiKey);
-
- // 使用 await 关键字等待 checkBilling 的结果
- let data = await checkBilling(apiKey, apiUrl);
-
- data = data.map(item => {
- if (item === undefined || item === null) {
- return 'Not Found.'
- } else {
- return item;
- }
- })
-
-
- let row = document.createElement("tr");
-
- checkBilling(apiKey, apiUrl).then((data) => {
- data = data.map(item => {
- if (item === undefined) {
- return 'Not Found.'
- } else {
- return item
- }
- }
- )
-
- let row = document.createElement("tr");
-
- let serialNumberCell = document.createElement("td"); // 创建序列号单元格
- serialNumberCell.textContent = serialNumber; // 设置序列号文本
- row.appendChild(serialNumberCell); // 将序列号单元格添加到行中
-
- let apiKeyCell = document.createElement("td");
- apiKeyCell.textContent = apiKey.replace(/^(.{10}).*(.{8})$/, "$1***$2");
- row.appendChild(apiKeyCell);
-
- console.log('查看查询结果', data); // 添加 console.log 以查看 data 的值
-
- if (data[0] === undefined) {
- let errorMessageCell = document.createElement("td");
- errorMessageCell.colSpan = "8";
- errorMessageCell.classList.add("status-error");
- errorMessageCell.textContent = "不正确或已失效的API-KEY";
- row.appendChild(errorMessageCell);
- } else {
- let sensitiveIdResult = document.createElement("td");
- sensitiveIdResult.textContent = data[0];
- row.appendChild(sensitiveIdResult);
- }
- tableBody.appendChild(row);
-
- if (i === apiKeys.length - 1) {
- queriedApiKeys = [];
- }
- serialNumber++; // 增加序列号
- h2.style.display = 'block';
- table.style.display = 'table';
-
- button.textContent = "查询";
- button.disabled = false;
- button.classList.remove("loading")
- })
-
- }
-}
-
-let apiUrlSelect = document.getElementById("api-url-select");
-let customUrlInput = document.getElementById("custom-url-input");
-
-apiUrlSelect.addEventListener("change", function () {
- if (apiUrlSelect.value === "custom") {
- customUrlInput.style.display = "inline-block";
- customUrlInput.style.marginTop = "5px";
- } else {
- customUrlInput.style.display = "none";
- }
-});
\ No newline at end of file