@hashimkarim/usagestat-linux-x64-gnu 2.0.2 → 2.2.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/native-manifest.json +808 -148
- package/package.json +112 -2
- package/plugins/abliteration/LICENSE +21 -0
- package/plugins/abliteration/icon.svg +5 -0
- package/plugins/abliteration/plugin.js +89 -0
- package/plugins/abliteration/plugin.json +24 -0
- package/plugins/aerostack/LICENSE +21 -0
- package/plugins/aerostack/icon.svg +1 -0
- package/plugins/aerostack/plugin.js +94 -0
- package/plugins/aerostack/plugin.json +24 -0
- package/plugins/aixy/icon.svg +1 -0
- package/plugins/aixy/plugin.js +5 -0
- package/plugins/aixy/plugin.json +9 -1
- package/plugins/antigravity/plugin.js +19 -10
- package/plugins/antigravity-cli/plugin.js +8 -3
- package/plugins/antigravity-ide/plugin.js +8 -5
- package/plugins/atlascloud/plugin.js +5 -0
- package/plugins/atlascloud/plugin.json +2 -1
- package/plugins/bifrost/icon.svg +3 -0
- package/plugins/bifrost/plugin.js +5 -0
- package/plugins/bifrost/plugin.json +9 -1
- package/plugins/chatbox/LICENSE +21 -0
- package/plugins/chatbox/icon.svg +4 -0
- package/plugins/chatbox/plugin.js +208 -0
- package/plugins/chatbox/plugin.json +24 -0
- package/plugins/claude/plugin.js +39 -2
- package/plugins/claudeplatform/LICENSE +21 -0
- package/plugins/claudeplatform/icon.svg +3 -0
- package/plugins/claudeplatform/plugin.js +244 -0
- package/plugins/claudeplatform/plugin.json +25 -0
- package/plugins/codex/plugin.js +14 -8
- package/plugins/codex/plugin.json +11 -2
- package/plugins/cosmic/LICENSE +21 -0
- package/plugins/cosmic/icon.svg +1 -0
- package/plugins/cosmic/plugin.js +134 -0
- package/plugins/cosmic/plugin.json +32 -0
- package/plugins/cursor/plugin.js +27 -8
- package/plugins/cursor-nightly/plugin.json +1 -1
- package/plugins/devpass/icon.svg +3 -0
- package/plugins/devpass/plugin.js +5 -0
- package/plugins/devpass/plugin.json +2 -1
- package/plugins/exa/LICENSE +21 -0
- package/plugins/exa/icon-color.svg +1 -0
- package/plugins/exa/icon.svg +1 -0
- package/plugins/exa/plugin.js +75 -0
- package/plugins/exa/plugin.json +32 -0
- package/plugins/fal/LICENSE +21 -0
- package/plugins/fal/icon-color.svg +1 -0
- package/plugins/fal/icon.svg +1 -0
- package/plugins/fal/plugin.js +74 -0
- package/plugins/fal/plugin.json +24 -0
- package/plugins/flora/LICENSE +21 -0
- package/plugins/flora/icon.svg +4 -0
- package/plugins/flora/plugin.js +93 -0
- package/plugins/flora/plugin.json +32 -0
- package/plugins/futureagi/LICENSE +21 -0
- package/plugins/futureagi/icon.svg +24 -0
- package/plugins/futureagi/plugin.js +139 -0
- package/plugins/futureagi/plugin.json +32 -0
- package/plugins/gemini-apps/LICENSE +1 -2
- package/plugins/gemini-apps/plugin.js +136 -465
- package/plugins/gemini-apps/plugin.json +13 -7
- package/plugins/gitkraken/icon.svg +2 -0
- package/plugins/gitkraken/plugin.js +5 -0
- package/plugins/gitkraken/plugin.json +9 -1
- package/plugins/googledeveloper/LICENSE +21 -0
- package/plugins/googledeveloper/icon.svg +3 -0
- package/plugins/googledeveloper/plugin.js +204 -0
- package/plugins/googledeveloper/plugin.json +25 -0
- package/plugins/helmcode/icon.svg +5 -0
- package/plugins/helmcode/plugin.js +120 -55
- package/plugins/helmcode/plugin.json +10 -2
- package/plugins/huggingface/plugin.js +6 -1
- package/plugins/huggingface/plugin.json +4 -3
- package/plugins/hyper/plugin.js +53 -47
- package/plugins/hyper/plugin.json +3 -2
- package/plugins/jetbrains-ai-assistant/LICENSE +22 -0
- package/plugins/jetbrains-ai-assistant/plugin.js +502 -16
- package/plugins/jetbrains-ai-assistant/plugin.json +27 -4
- package/plugins/kimi/plugin.js +54 -14
- package/plugins/kimi/plugin.json +46 -6
- package/plugins/langdock/LICENSE +21 -0
- package/plugins/langdock/icon.svg +4 -0
- package/plugins/langdock/plugin.js +106 -0
- package/plugins/langdock/plugin.json +25 -0
- package/plugins/linkup/LICENSE +21 -0
- package/plugins/linkup/icon.svg +10 -0
- package/plugins/linkup/plugin.js +46 -0
- package/plugins/linkup/plugin.json +24 -0
- package/plugins/lithosai/plugin.js +5 -0
- package/plugins/lithosai/plugin.json +2 -1
- package/plugins/llmman/icon.svg +4 -0
- package/plugins/llmman/plugin.js +5 -0
- package/plugins/llmman/plugin.json +9 -1
- package/plugins/munito/LICENSE +21 -0
- package/plugins/munito/icon.svg +7 -0
- package/plugins/munito/plugin.js +171 -0
- package/plugins/munito/plugin.json +24 -0
- package/plugins/muse/icon.svg +3 -0
- package/plugins/muse/plugin.js +5 -0
- package/plugins/muse/plugin.json +9 -1
- package/plugins/museai/plugin.js +10 -3
- package/plugins/museai/plugin.json +3 -2
- package/plugins/nous/plugin.js +5 -0
- package/plugins/nous/plugin.json +9 -1
- package/plugins/ollama/plugin.js +58 -0
- package/plugins/opencode-go/plugin.js +21 -9
- package/plugins/opendesign/LICENSE +21 -0
- package/plugins/opendesign/icon.svg +4 -0
- package/plugins/opendesign/plugin.js +108 -0
- package/plugins/opendesign/plugin.json +25 -0
- package/plugins/parallel/LICENSE +21 -0
- package/plugins/parallel/icon.svg +11 -0
- package/plugins/parallel/plugin.js +97 -0
- package/plugins/parallel/plugin.json +25 -0
- package/plugins/perplexity/LICENSE +22 -0
- package/plugins/perplexity/plugin.js +122 -0
- package/plugins/perplexity/plugin.json +36 -7
- package/plugins/qwencloud/LICENSE +21 -0
- package/plugins/qwencloud/plugin.js +197 -0
- package/plugins/qwencloud/plugin.json +17 -0
- package/plugins/raycast/icon.svg +4 -0
- package/plugins/raycast/plugin.js +5 -0
- package/plugins/raycast/plugin.json +9 -1
- package/plugins/replicate/plugin.js +5 -0
- package/plugins/replicate/plugin.json +2 -1
- package/plugins/sailresearch/LICENSE +21 -0
- package/plugins/sailresearch/icon.svg +4 -0
- package/plugins/sailresearch/plugin.js +104 -0
- package/plugins/sailresearch/plugin.json +24 -0
- package/plugins/siliconflow/LICENSE +21 -0
- package/plugins/siliconflow/icon.svg +3 -0
- package/plugins/siliconflow/plugin.js +87 -0
- package/plugins/siliconflow/plugin.json +32 -0
- package/plugins/sofya/LICENSE +21 -0
- package/plugins/sofya/icon.svg +3 -0
- package/plugins/sofya/plugin.js +86 -0
- package/plugins/sofya/plugin.json +24 -0
- package/plugins/soniox/LICENSE +21 -0
- package/plugins/soniox/icon.svg +3 -0
- package/plugins/soniox/plugin.js +103 -0
- package/plugins/soniox/plugin.json +24 -0
- package/plugins/synthetic/plugin.js +12 -0
- package/plugins/synthetic/plugin.json +51 -9
- package/plugins/tavily/LICENSE +21 -0
- package/plugins/tavily/icon.svg +3 -0
- package/plugins/tavily/plugin.js +61 -0
- package/plugins/tavily/plugin.json +24 -0
- package/plugins/tinyapi/LICENSE +21 -0
- package/plugins/tinyapi/icon.svg +4 -0
- package/plugins/tinyapi/plugin.js +73 -0
- package/plugins/tinyapi/plugin.json +25 -0
- package/plugins/traecn/LICENSE +21 -0
- package/plugins/traecn/icon.svg +3 -0
- package/plugins/traecn/plugin.js +103 -0
- package/plugins/traecn/plugin.json +25 -0
- package/plugins/tripo/LICENSE +21 -0
- package/plugins/tripo/icon.svg +4 -0
- package/plugins/tripo/plugin.js +60 -0
- package/plugins/tripo/plugin.json +24 -0
- package/plugins/typesafe/icon.svg +4 -0
- package/plugins/typesafe/plugin.js +85 -129
- package/plugins/typesafe/plugin.json +3 -2
- package/plugins/v0/plugin.js +5 -0
- package/plugins/v0/plugin.json +9 -1
- package/plugins/vercel/plugin.js +147 -0
- package/plugins/vercel/plugin.json +34 -3
- package/plugins/workbuddy/icon.svg +1 -1
- package/plugins/workbuddy/plugin.js +110 -19
- package/plugins/workbuddy/plugin.json +32 -2
- package/plugins/xai/plugin.js +9 -0
- package/plugins/xapi/LICENSE +21 -0
- package/plugins/xapi/icon.svg +1 -0
- package/plugins/xapi/plugin.js +90 -0
- package/plugins/xapi/plugin.json +25 -0
- package/plugins/xkiro/icon.svg +1 -0
- package/plugins/xkiro/plugin.js +5 -0
- package/plugins/xkiro/plugin.json +2 -1
- package/usagestat +0 -0
- package/usagestatd +0 -0
- package/plugins/cursor-nightly/plugin.js +0 -1416
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "soniox",
|
|
4
|
+
"name": "Soniox",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"api"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "api",
|
|
12
|
+
"usageDashboardUrl": "https://console.soniox.com",
|
|
13
|
+
"envVars": [
|
|
14
|
+
"SONIOX_ORG_API_KEY"
|
|
15
|
+
],
|
|
16
|
+
"setupFields": [],
|
|
17
|
+
"upstream": {
|
|
18
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
+
"revision": "1f6da9bec44455288ddee5ef6f3617a803d8eb2a",
|
|
20
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/soniox.js",
|
|
21
|
+
"sha256": "205af76549b697bc66a8d1a16008463310c2ee218e4d9c5f44edbb7b2ceed0b0",
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -207,6 +207,18 @@
|
|
|
207
207
|
|
|
208
208
|
json = unwrapQuotasJson(json);
|
|
209
209
|
|
|
210
|
+
var weekly = json.planWeeklyLimit
|
|
211
|
+
if (weekly && typeof weekly === "object") {
|
|
212
|
+
var remaining = toFiniteNumber(weekly.percentRemaining)
|
|
213
|
+
var used = toFiniteNumber(weekly.percentUsed)
|
|
214
|
+
if (used === null && remaining !== null) used = 100 - remaining
|
|
215
|
+
if (used === null || used < 0 || used > 100) throw "Synthetic weekly usage is invalid."
|
|
216
|
+
var line = {label:"Weekly plan limit",used,limit:100,format:{kind:"percent"},periodDurationMs:7*86400000}
|
|
217
|
+
var reset = ctx.util.toIso(weekly.resetsAt || weekly.renewsAt || weekly.resetAt)
|
|
218
|
+
if (reset) line.resetsAt = reset
|
|
219
|
+
return {lines:[ctx.line.progress(line)]}
|
|
220
|
+
}
|
|
221
|
+
|
|
210
222
|
var rfl = pickRollingFiveHour(json);
|
|
211
223
|
var wtl = pickWeeklyToken(json);
|
|
212
224
|
|
|
@@ -7,17 +7,59 @@
|
|
|
7
7
|
"icon": "icon.svg",
|
|
8
8
|
"brandColor": "#000000",
|
|
9
9
|
"lines": [
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
10
|
+
{
|
|
11
|
+
"type": "progress",
|
|
12
|
+
"label": "Weekly plan limit",
|
|
13
|
+
"scope": "overview",
|
|
14
|
+
"primaryOrder": 0
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "progress",
|
|
18
|
+
"label": "5h Rate Limit",
|
|
19
|
+
"scope": "overview",
|
|
20
|
+
"primaryOrder": 1
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "progress",
|
|
24
|
+
"label": "Mana Bar",
|
|
25
|
+
"scope": "overview"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "badge",
|
|
29
|
+
"label": "Rate Limited",
|
|
30
|
+
"scope": "overview"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "badge",
|
|
34
|
+
"label": "Quotas",
|
|
35
|
+
"scope": "overview"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "progress",
|
|
39
|
+
"label": "Subscription",
|
|
40
|
+
"scope": "overview",
|
|
41
|
+
"primaryOrder": 2
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "progress",
|
|
45
|
+
"label": "Free Tool Calls",
|
|
46
|
+
"scope": "detail"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"type": "progress",
|
|
50
|
+
"label": "Search",
|
|
51
|
+
"scope": "overview"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"supportedModes": [
|
|
55
|
+
"api",
|
|
56
|
+
"local"
|
|
17
57
|
],
|
|
18
|
-
"supportedModes": ["api", "local"],
|
|
19
58
|
"autoMode": "local",
|
|
20
59
|
"links": [
|
|
21
|
-
{
|
|
60
|
+
{
|
|
61
|
+
"label": "Dashboard",
|
|
62
|
+
"url": "https://synthetic.new/billing"
|
|
63
|
+
}
|
|
22
64
|
]
|
|
23
65
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="55" height="55" viewBox="0 0 55 55" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.8088 0C44.4762 0 47.3101 9.1895e-05 49.4748 1.10306C51.3788 2.07326 52.927 3.62135 53.8971 5.52544C55.0001 7.69013 55 10.524 55 16.1914V38.8088C55 44.4761 55.0001 47.3099 53.8971 49.4746C52.927 51.3786 51.3788 52.9267 49.4748 53.8969C47.3101 54.9999 44.4762 55 38.8088 55H16.1914C10.5239 55 7.69014 54.9999 5.52544 53.8969C3.62133 52.9267 2.07325 51.3787 1.10306 49.4746C0.000109958 47.3099 0 44.4762 0 38.8088V16.1912C0 10.5238 0.000107614 7.69012 1.10306 5.52544C2.07325 3.62133 3.62133 2.07326 5.52544 1.10306C7.69014 8.88436e-05 10.5239 0 16.1914 0H38.8088ZM23.3863 30.405C23.0885 30.405 22.7934 30.4638 22.5183 30.5782C22.2433 30.6926 21.9933 30.8603 21.7827 31.0716L17.4534 35.4188L16.3029 34.2638C15.4573 33.415 14.0099 33.8346 13.7471 35.0064L12.1073 42.3023C12.0498 42.5532 12.0568 42.8148 12.128 43.0621C12.199 43.3085 12.3313 43.5327 12.5123 43.7136L12.5108 43.7159C12.6915 43.8987 12.9155 44.0321 13.1619 44.1037C13.4083 44.1752 13.6688 44.1824 13.9188 44.1246L21.1862 42.4776C22.3527 42.2137 22.7715 40.7614 21.9259 39.9124L20.7754 38.7574L25.1056 34.411C25.5306 33.9842 25.7695 33.4049 25.7695 32.8013C25.7695 32.1977 25.5306 31.6185 25.1056 31.1916L25.0476 31.1334L25.0497 31.1319L24.9896 31.0716C24.7791 30.8603 24.529 30.6926 24.254 30.5782C23.979 30.4638 23.684 30.4051 23.3863 30.405ZM39.0054 27.6663C37.9941 27.0245 36.6768 27.7546 36.6766 28.9556V30.5884H27.3981C27.7081 31.1832 27.8847 31.8596 27.8847 32.5774C27.8846 33.6152 27.5181 34.5672 26.908 35.3099L36.6758 35.3096L36.6752 36.9424C36.6753 38.1434 37.9941 38.8736 39.0054 38.2319L45.3045 34.2387C45.7757 33.9384 46.0114 33.443 46.0115 32.948C46.0109 32.4536 45.7752 31.9592 45.303 31.6601L39.0054 27.6663ZM23.6104 10.2206C23.3539 10.2194 23.101 10.2839 22.8763 10.4081C22.6514 10.5325 22.4614 10.7132 22.3253 10.9318L18.3472 17.2549H18.3458C17.7067 18.2701 18.4346 19.5933 19.6307 19.5936H21.2578V28.9869C21.9327 28.5406 22.7403 28.2801 23.609 28.2801C24.4781 28.2801 25.2864 28.5407 25.9615 28.9875V19.5936H27.5884C28.7849 19.5936 29.5112 18.2702 28.8728 17.2541L24.8939 10.9318C24.5951 10.4584 24.1029 10.2212 23.6104 10.2206Z" fill="#1F1E1E"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Account plan","API key","Additional"],"defaults":{},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/tavily.js
|
|
5
|
+
defineProvider({
|
|
6
|
+
id: "tavily",
|
|
7
|
+
name: "Tavily",
|
|
8
|
+
endpoints: ["https://api.tavily.com"],
|
|
9
|
+
auth: { type: "bearer", secret: "TAVILY_API_KEY" },
|
|
10
|
+
settings: [{ key: "TAVILY_API_KEY", title: "Tavily API key", type: "secure" }],
|
|
11
|
+
capabilities: ["http-status"],
|
|
12
|
+
async fetchUsage(ctx) {
|
|
13
|
+
const response = await ctx.http.get("https://api.tavily.com/usage");
|
|
14
|
+
const message = `Tavily returned HTTP ${response.status}.`;
|
|
15
|
+
if (response.status === 401) throw ctx.fail.authenticationExpired(message);
|
|
16
|
+
if (response.status === 403) throw ctx.fail.permissionDenied(message);
|
|
17
|
+
// The usage endpoint allows only ten requests per ten minutes; do not replay a throttled request.
|
|
18
|
+
if (response.status === 429) throw ctx.fail.rateLimited(message);
|
|
19
|
+
if (response.status >= 500) throw ctx.fail.providerUnavailable(message);
|
|
20
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(message);
|
|
21
|
+
const fail = () => {
|
|
22
|
+
throw ctx.fail.parseFailure("Tavily returned an unrecognized credit usage response.");
|
|
23
|
+
};
|
|
24
|
+
const record = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
25
|
+
const count = (value) => (Number.isSafeInteger(value) && value >= 0 ? value : fail());
|
|
26
|
+
let data;
|
|
27
|
+
try {
|
|
28
|
+
data = JSON.parse(response.bodyText);
|
|
29
|
+
} catch {
|
|
30
|
+
return fail();
|
|
31
|
+
}
|
|
32
|
+
if (!record(data) || !record(data.account) || !record(data.key)) return fail();
|
|
33
|
+
const { account, key } = data;
|
|
34
|
+
const format = (value) => `${ctx.format.number(count(value))} credits`;
|
|
35
|
+
const rows = (usage, cap, unlimited = false) =>
|
|
36
|
+
[
|
|
37
|
+
{ label: "Used", value: format(usage) },
|
|
38
|
+
{ label: "Limit", value: cap === null ? (unlimited ? "Unlimited" : null) : format(cap) },
|
|
39
|
+
{ label: "Remaining", value: cap === null ? null : format(Math.max(0, cap - usage)) },
|
|
40
|
+
].filter((row) => row.value !== null);
|
|
41
|
+
const details = [
|
|
42
|
+
{ title: "Account plan", rows: rows(account.plan_usage, count(account.plan_limit)) },
|
|
43
|
+
{ title: "API key", rows: rows(key.usage, key.limit, true) },
|
|
44
|
+
];
|
|
45
|
+
if (account.paygo_usage !== undefined || account.paygo_limit !== undefined) {
|
|
46
|
+
details.push({ title: "Pay as you go", rows: rows(account.paygo_usage, account.paygo_limit) });
|
|
47
|
+
}
|
|
48
|
+
const plan = account.current_plan;
|
|
49
|
+
if (plan !== undefined && (typeof plan !== "string" || !plan.trim() || plan.length > 120)) return fail();
|
|
50
|
+
return {
|
|
51
|
+
primary: account.plan_limit > 0 ? { usedPercent: ctx.pct(account.plan_usage, account.plan_limit) } : undefined,
|
|
52
|
+
secondary: key.limit > 0 ? { usedPercent: ctx.pct(key.usage, key.limit) } : undefined,
|
|
53
|
+
details,
|
|
54
|
+
identity: { loginMethod: plan === undefined ? "API key" : plan.trim() },
|
|
55
|
+
dataConfidence: "exact",
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// END UPSTREAM
|
|
61
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "tavily",
|
|
4
|
+
"name": "Tavily",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"api"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "api",
|
|
12
|
+
"usageDashboardUrl": "https://app.tavily.com",
|
|
13
|
+
"envVars": [
|
|
14
|
+
"TAVILY_API_KEY"
|
|
15
|
+
],
|
|
16
|
+
"setupFields": [],
|
|
17
|
+
"upstream": {
|
|
18
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
+
"revision": "1f6da9bec44455288ddee5ef6f3617a803d8eb2a",
|
|
20
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/tavily.js",
|
|
21
|
+
"sha256": "2859e56104c9e73d2650b87e034c5f2955c09ea7507e128a22e1ab42b5ae35a0",
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 106 81" aria-label="TinyApi">
|
|
2
|
+
<path fill="currentColor" transform="translate(-9.626586 49.746547)" d="M 77.953125 -23.203125 L 87.640625 -15.109375 L 59.203125 18.90625 C 57.003906 21.539062 54.429688 23.601562 51.484375 25.09375 C 48.546875 26.582031 45.460938 27.46875 42.234375 27.75 C 39.015625 28.03125 35.835938 27.707031 32.703125 26.78125 C 29.578125 25.863281 26.691406 24.300781 24.046875 22.09375 L 22.75 21.015625 C 20.101562 18.796875 18.035156 16.21875 16.546875 13.28125 C 15.066406 10.351562 14.179688 7.273438 13.890625 4.046875 C 13.609375 0.828125 13.941406 -2.351562 14.890625 -5.5 C 15.835938 -8.65625 17.410156 -11.550781 19.609375 -14.1875 L 48.046875 -48.203125 L 57.78125 -40.0625 L 29.34375 -6.046875 C 27.894531 -4.316406 26.988281 -2.367188 26.625 -0.203125 C 26.257812 1.953125 26.441406 4.046875 27.171875 6.078125 C 27.898438 8.117188 29.128906 9.863281 30.859375 11.3125 L 32.15625 12.390625 C 33.894531 13.835938 35.828125 14.738281 37.953125 15.09375 C 40.085938 15.457031 42.1875 15.265625 44.25 14.515625 C 46.3125 13.773438 48.066406 12.539062 49.515625 10.8125 Z M 77.953125 -23.203125"/>
|
|
3
|
+
<path fill="currentColor" transform="translate(115.142795 30.459118)" d="M -77.953125 23.203125 L -87.640625 15.109375 L -59.203125 -18.90625 C -57.003906 -21.539062 -54.429688 -23.601562 -51.484375 -25.09375 C -48.546875 -26.582031 -45.460938 -27.46875 -42.234375 -27.75 C -39.015625 -28.03125 -35.835938 -27.707031 -32.703125 -26.78125 C -29.578125 -25.863281 -26.691406 -24.300781 -24.046875 -22.09375 L -22.75 -21.015625 C -20.101562 -18.796875 -18.035156 -16.21875 -16.546875 -13.28125 C -15.066406 -10.351562 -14.179688 -7.273438 -13.890625 -4.046875 C -13.609375 -0.828125 -13.941406 2.351562 -14.890625 5.5 C -15.835938 8.65625 -17.410156 11.550781 -19.609375 14.1875 L -48.046875 48.203125 L -57.78125 40.0625 L -29.34375 6.046875 C -27.894531 4.316406 -26.988281 2.367188 -26.625 0.203125 C -26.257812 -1.953125 -26.441406 -4.046875 -27.171875 -6.078125 C -27.898438 -8.117188 -29.128906 -9.863281 -30.859375 -11.3125 L -32.15625 -12.390625 C -33.894531 -13.835938 -35.828125 -14.738281 -37.953125 -15.09375 C -40.085938 -15.457031 -42.1875 -15.265625 -44.25 -14.515625 C -46.3125 -13.773438 -48.066406 -12.539062 -49.515625 -10.8125 Z M -77.953125 23.203125"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Credits","Additional","Additional"],"defaults":{},"autoMode":"web"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/tinyapi.js
|
|
5
|
+
defineProvider({
|
|
6
|
+
id: "tinyapi",
|
|
7
|
+
name: "TinyApi",
|
|
8
|
+
endpoints: ["https://tinyapi.rest"],
|
|
9
|
+
settings: [],
|
|
10
|
+
capabilities: ["browser-cookies", "http-status"],
|
|
11
|
+
cookieDomains: ["tinyapi.rest"],
|
|
12
|
+
async fetchUsage(ctx) {
|
|
13
|
+
const domain = "tinyapi.rest";
|
|
14
|
+
const policy = ctx.browser.availability(domain);
|
|
15
|
+
if (policy === "off") throw ctx.fail.missingCredential("TinyApi cookies are disabled.");
|
|
16
|
+
let response;
|
|
17
|
+
let rejected = false;
|
|
18
|
+
for await (const session of ctx.browser.sessions(domain)) {
|
|
19
|
+
const candidate = await ctx.http.get(`https://${domain}/api/user/credits`, {
|
|
20
|
+
headers: { Cookie: session.header },
|
|
21
|
+
timeoutSeconds: 15,
|
|
22
|
+
});
|
|
23
|
+
if (candidate.status === 401 || candidate.status === 403) {
|
|
24
|
+
rejected = true;
|
|
25
|
+
ctx.browser.rejectCookie(domain, session);
|
|
26
|
+
if (policy === "manual") break;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
response = candidate;
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
if (!response) {
|
|
33
|
+
throw rejected
|
|
34
|
+
? ctx.fail.authenticationExpired("TinyApi session expired. Sign in again or paste a fresh Cookie header.")
|
|
35
|
+
: ctx.fail.missingCredential(
|
|
36
|
+
`Sign in to tinyapi.rest. Supported browsers: ${ctx.browser.supportedBrowsers}. Or set a manual Cookie header.`,
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
if (response.status === 429) throw ctx.fail.rateLimited("TinyApi credits requests are rate limited.");
|
|
40
|
+
if (response.status >= 500)
|
|
41
|
+
throw ctx.fail.providerUnavailable(`TinyApi credits service returned HTTP ${response.status}.`);
|
|
42
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(`TinyApi credits request returned HTTP ${response.status}.`);
|
|
43
|
+
let payload;
|
|
44
|
+
try {
|
|
45
|
+
payload = JSON.parse(response.bodyText);
|
|
46
|
+
} catch {
|
|
47
|
+
throw ctx.fail.parseFailure("TinyApi credits response is not valid JSON.");
|
|
48
|
+
}
|
|
49
|
+
const balance = payload?.data?.totalAvailable;
|
|
50
|
+
if (payload?.success !== true || typeof balance !== "number" || !Number.isFinite(balance) || balance < 0) {
|
|
51
|
+
throw ctx.fail.parseFailure("TinyApi credits response is missing a valid available balance.");
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
details: [
|
|
55
|
+
{
|
|
56
|
+
title: "Credits",
|
|
57
|
+
rows: [
|
|
58
|
+
{
|
|
59
|
+
label: "Available credits",
|
|
60
|
+
value: `${ctx.format.number(balance, { maximumFractionDigits: 2 })} credits`,
|
|
61
|
+
usageValue: balance,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
identity: { loginMethod: "Browser session" },
|
|
67
|
+
dataConfidence: "exact",
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// END UPSTREAM
|
|
73
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "tinyapi",
|
|
4
|
+
"name": "TinyApi",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"web"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "web",
|
|
12
|
+
"usageDashboardUrl": "https://tinyapi.rest",
|
|
13
|
+
"webUrl": "https://tinyapi.rest",
|
|
14
|
+
"envVars": [
|
|
15
|
+
"TINYAPI_COOKIE"
|
|
16
|
+
],
|
|
17
|
+
"setupFields": [],
|
|
18
|
+
"upstream": {
|
|
19
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
20
|
+
"revision": "1f6da9bec44455288ddee5ef6f3617a803d8eb2a",
|
|
21
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/tinyapi.js",
|
|
22
|
+
"sha256": "14f874b433198e9bfb9f1d689a0822f35ac8d97945cab015c039f836eed4ef17",
|
|
23
|
+
"license": "MIT"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
|
|
2
|
+
<path fill-rule="evenodd" d="M24 20.541H3.428v-3.426H0V3.4h24V20.54zM3.428 17.115h17.144V6.827H3.428v10.288zm8.573-5.196l-2.425 2.424-2.424-2.424 2.424-2.424 2.425 2.424zm6.857-.001l-2.424 2.423-2.425-2.423 2.425-2.425 2.424 2.425z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Credits","Additional","Additional"],"defaults":{},"autoMode":"web"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/traecn.js
|
|
5
|
+
defineProvider({
|
|
6
|
+
id: "traecn",
|
|
7
|
+
name: "Trae CN",
|
|
8
|
+
endpoints: ["https://api.trae.cn"],
|
|
9
|
+
settings: [],
|
|
10
|
+
capabilities: ["browser-cookies", "http-status"],
|
|
11
|
+
// Include parent-domain sessions shared by the dashboard and API.
|
|
12
|
+
cookieDomains: ["trae.cn", "api.trae.cn"],
|
|
13
|
+
async fetchUsage(ctx) {
|
|
14
|
+
const domain = ctx.browser.availability("api.trae.cn") === "manual" ? "api.trae.cn" : "trae.cn";
|
|
15
|
+
const signIn = "Sign in to Trae CN at trae.cn, then refresh CodexBar.";
|
|
16
|
+
const malformed = () => {
|
|
17
|
+
throw ctx.fail.parseFailure("Trae CN usage response format changed.");
|
|
18
|
+
};
|
|
19
|
+
const finite = (value) => typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
20
|
+
const rejected = (response) =>
|
|
21
|
+
response.status === 401 || response.status === 403 || (response.status >= 300 && response.status < 400);
|
|
22
|
+
const read = (response) => {
|
|
23
|
+
const message = "Trae CN request failed. Try refreshing later.";
|
|
24
|
+
if (response.status === 429) throw ctx.fail.rateLimited(message);
|
|
25
|
+
if (response.status === 408 || response.status >= 500) throw ctx.fail.providerUnavailable(message);
|
|
26
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(message);
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(response.bodyText);
|
|
29
|
+
} catch {
|
|
30
|
+
return malformed();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
if (ctx.browser.availability(domain) === "off") throw ctx.fail.missingCredential(signIn);
|
|
34
|
+
let sessionRejected = false;
|
|
35
|
+
for await (const session of ctx.browser.sessions(domain)) {
|
|
36
|
+
const headers = { Cookie: session.header ?? "", Origin: "https://www.trae.cn", Referer: "https://www.trae.cn/" };
|
|
37
|
+
const tokenResponse = await ctx.http.post("https://api.trae.cn/cloudide/api/v3/common/GetUserToken", {
|
|
38
|
+
headers,
|
|
39
|
+
body: {},
|
|
40
|
+
timeoutSeconds: 15,
|
|
41
|
+
});
|
|
42
|
+
if (rejected(tokenResponse)) {
|
|
43
|
+
sessionRejected = true;
|
|
44
|
+
ctx.browser.rejectCookie(domain, session);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const tokenPayload = read(tokenResponse);
|
|
48
|
+
const token = tokenPayload?.Result?.Token;
|
|
49
|
+
if (typeof token !== "string" || !token.trim()) return malformed();
|
|
50
|
+
// The exchanged token lives only for this refresh, and only goes back to the declared API origin.
|
|
51
|
+
const usageResponse = await ctx.http.post("https://api.trae.cn/trae/api/v2/pay/user_current_entitlement_list", {
|
|
52
|
+
headers: { ...headers, Authorization: `Cloud-IDE-JWT ${token}` },
|
|
53
|
+
body: { require_usage: true, full_data: true },
|
|
54
|
+
timeoutSeconds: 15,
|
|
55
|
+
});
|
|
56
|
+
if (rejected(usageResponse)) {
|
|
57
|
+
sessionRejected = true;
|
|
58
|
+
ctx.browser.rejectCookie(domain, session);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const payload = read(usageResponse);
|
|
62
|
+
const { total_amount: total, consumed_amount: used } = payload?.usage_summary ?? {};
|
|
63
|
+
if (payload?.code === 1001) {
|
|
64
|
+
sessionRejected = true;
|
|
65
|
+
ctx.browser.rejectCookie(domain, session);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (payload?.is_credits_billing !== true || !finite(total) || !finite(used)) return malformed();
|
|
69
|
+
const packs = Array.isArray(payload.user_entitlement_pack_list) ? payload.user_entitlement_pack_list : [];
|
|
70
|
+
const subscription = packs.find(
|
|
71
|
+
(pack) => pack && pack.group_type === 0 && (pack.status === undefined || pack.status === 1),
|
|
72
|
+
);
|
|
73
|
+
const plan = typeof subscription?.display_desc === "string" ? subscription.display_desc.trim() : undefined;
|
|
74
|
+
const remaining = Math.max(0, total - used);
|
|
75
|
+
const hasFraction = [used, total, remaining].some((value) => !Number.isInteger(value));
|
|
76
|
+
const number = (value) =>
|
|
77
|
+
ctx.format.number(value, {
|
|
78
|
+
minimumFractionDigits: hasFraction ? 2 : 0,
|
|
79
|
+
maximumFractionDigits: 2,
|
|
80
|
+
});
|
|
81
|
+
// Pack expiry and billing timestamps do not establish an aggregate reset or subscription renewal.
|
|
82
|
+
return {
|
|
83
|
+
primary: total > 0 ? { usedPercent: Math.min(100, (used / total) * 100) } : undefined,
|
|
84
|
+
identity: plan ? { loginMethod: plan } : undefined,
|
|
85
|
+
details: [
|
|
86
|
+
{
|
|
87
|
+
title: "Credits",
|
|
88
|
+
rows: [
|
|
89
|
+
{ label: "Used", value: number(used) },
|
|
90
|
+
{ label: "Total", value: number(total) },
|
|
91
|
+
{ label: "Remaining", value: number(remaining) },
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
dataConfidence: "exact",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
throw sessionRejected ? ctx.fail.authenticationExpired(signIn) : ctx.fail.missingCredential(signIn);
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// END UPSTREAM
|
|
103
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "traecn",
|
|
4
|
+
"name": "Trae CN",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"web"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "web",
|
|
12
|
+
"usageDashboardUrl": "https://www.trae.cn",
|
|
13
|
+
"webUrl": "https://trae.cn",
|
|
14
|
+
"envVars": [
|
|
15
|
+
"TRAECN_COOKIE"
|
|
16
|
+
],
|
|
17
|
+
"setupFields": [],
|
|
18
|
+
"upstream": {
|
|
19
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
20
|
+
"revision": "1f6da9bec44455288ddee5ef6f3617a803d8eb2a",
|
|
21
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/traecn.js",
|
|
22
|
+
"sha256": "a41123c0e7220f6c5577abd64c7ce3c2854d59ffdd4a7e92a439099dc7068042",
|
|
23
|
+
"license": "MIT"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="11.5 0 100 100">
|
|
2
|
+
<path d="M91.473 8.51074H33.043L41.3462 22.6625H65.4259L53.3138 43.2764L58.7833 52.5905C59.3789 53.6014 60.4439 54.2151 61.6172 54.2151C62.7905 54.2151 63.8555 53.6014 64.4512 52.5905L82.0325 22.6625H107.195C106.311 14.5758 99.5958 8.51074 91.4549 8.51074H91.473Z" fill="currentColor"/>
|
|
3
|
+
<path d="M61.6539 73.4931C59.4337 73.4931 57.4482 72.3559 56.3291 70.4425L21.5273 11.2002C15.7511 15.5143 12.5019 24.4494 17.0146 32.139L47.755 84.4679C50.6792 89.4499 55.8777 92.4283 61.672 92.4283C67.4482 92.4283 72.6649 89.4499 75.5891 84.4679L105.084 34.2329H88.2606L66.997 70.4245C65.8778 72.3378 63.8742 73.475 61.672 73.475L61.6539 73.4931Z" fill="currentColor"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Generated by tools/vendor-codexbar-providers.cjs; see LICENSE.
|
|
2
|
+
globalThis.__usagestat_bundled_options = {"labels":["Credits","Reserved","Additional"],"defaults":{},"autoMode":"api"};
|
|
3
|
+
(function(defineProvider) {
|
|
4
|
+
// BEGIN UPSTREAM Sources/CodexBarCore/Resources/Plugins/tripo.js
|
|
5
|
+
defineProvider({
|
|
6
|
+
id: "tripo",
|
|
7
|
+
name: "Tripo",
|
|
8
|
+
endpoints: ["https://openapi.tripo3d.ai"],
|
|
9
|
+
auth: { type: "bearer", secret: "TRIPO_API_KEY" },
|
|
10
|
+
settings: [
|
|
11
|
+
{ key: "TRIPO_API_KEY", title: "API key", type: "secure" },
|
|
12
|
+
{ key: "MESSAGES", title: "Tripo", type: "plain" },
|
|
13
|
+
],
|
|
14
|
+
capabilities: ["http-status"],
|
|
15
|
+
async fetchUsage(ctx) {
|
|
16
|
+
const messages = JSON.parse(ctx.settings.get("MESSAGES") || "{}");
|
|
17
|
+
const message = (key) => messages[key] || key;
|
|
18
|
+
const response = await ctx.http.get("https://openapi.tripo3d.ai/v3/account/balance");
|
|
19
|
+
if (response.status === 401) throw ctx.fail.authenticationExpired(message("Check your API key in Settings."));
|
|
20
|
+
if (response.status === 403) throw ctx.fail.permissionDenied(message("Check your API key in Settings."));
|
|
21
|
+
if (response.status === 429)
|
|
22
|
+
throw ctx.fail.rateLimited(message("Tripo is rate limiting requests. Try again later."));
|
|
23
|
+
if (response.status >= 500)
|
|
24
|
+
throw ctx.fail.providerUnavailable(message("Tripo request failed. Try refreshing later."));
|
|
25
|
+
if (response.status !== 200) throw ctx.fail.apiFailure(message("Tripo request failed. Try refreshing later."));
|
|
26
|
+
const fail = () => {
|
|
27
|
+
throw ctx.fail.parseFailure(message("Tripo returned an unrecognized response. Update CodexBar and try again."));
|
|
28
|
+
};
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = JSON.parse(response.bodyText);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
void error;
|
|
34
|
+
return fail();
|
|
35
|
+
}
|
|
36
|
+
if (!body || typeof body !== "object" || Array.isArray(body) || !Number.isInteger(body.code)) return fail();
|
|
37
|
+
if (body.code !== 0) throw ctx.fail.apiFailure(message("Tripo request failed. Try refreshing later."));
|
|
38
|
+
if (!body.data || typeof body.data !== "object" || Array.isArray(body.data)) return fail();
|
|
39
|
+
const credits = (value) =>
|
|
40
|
+
typeof value === "number" && Number.isFinite(value) && value >= 0
|
|
41
|
+
? ctx.format.number(value, { maximumFractionDigits: 2 })
|
|
42
|
+
: fail();
|
|
43
|
+
return {
|
|
44
|
+
details: [
|
|
45
|
+
{
|
|
46
|
+
title: "Credits",
|
|
47
|
+
rows: [
|
|
48
|
+
// The API balance is already available credits; frozen credits are a separate reservation.
|
|
49
|
+
{ label: "Balance", value: credits(body.data.balance) },
|
|
50
|
+
{ label: "Reserved", value: credits(body.data.frozen) },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
dataConfidence: "exact",
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// END UPSTREAM
|
|
60
|
+
})(globalThis.defineProvider);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"id": "tripo",
|
|
4
|
+
"name": "Tripo",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"entry": "plugin.js",
|
|
7
|
+
"enabledByDefault": false,
|
|
8
|
+
"supportedModes": [
|
|
9
|
+
"api"
|
|
10
|
+
],
|
|
11
|
+
"autoMode": "api",
|
|
12
|
+
"usageDashboardUrl": "https://platform.tripo3d.ai",
|
|
13
|
+
"envVars": [
|
|
14
|
+
"TRIPO_API_KEY"
|
|
15
|
+
],
|
|
16
|
+
"setupFields": [],
|
|
17
|
+
"upstream": {
|
|
18
|
+
"repository": "https://github.com/steipete/CodexBar",
|
|
19
|
+
"revision": "1f6da9bec44455288ddee5ef6f3617a803d8eb2a",
|
|
20
|
+
"path": "Sources/CodexBarCore/Resources/Plugins/tripo.js",
|
|
21
|
+
"sha256": "78325930a28ec25a2a5164c0f596d8e003fdae966aa53c52c0f761e7d19dfb21",
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg fill="currentColor" viewBox="24.68 24.68 350.65 350.65" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<title>TypeSafe</title>
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M256.407 86.5946V138.33L303.032 168.589L303.045 283.148L199.987 350L143.594 313.42V260.25L96.9556 229.993V116.866L101.395 113.977L199.999 50L256.407 86.5946ZM171.208 308.124L199.975 326.788L275.394 277.838L246.639 259.188L171.208 308.124ZM209.728 179.157V230.005L163.078 260.264V290.192L236.923 242.283V161.517L209.728 179.157ZM256.407 242.31L283.55 259.92V179.144L256.407 161.532V242.31ZM124.582 224.709L153.337 243.374L182.104 224.709L153.349 206.057L124.582 224.709ZM116.438 127.421V206.791L143.594 189.166V138.318L190.258 108.034V79.5105L116.438 127.421ZM163.078 189.154L190.246 206.779V179.144L163.078 161.517V189.154ZM171.208 143.589L199.999 162.266L228.768 143.601L199.987 124.925L171.208 143.589ZM209.742 108.034L236.923 125.671V97.1619L209.742 79.5105V108.034Z" />
|
|
4
|
+
</svg>
|