pool-anything 0.1.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/LICENSE +202 -0
- package/README.md +280 -0
- package/bin/pool-anything.js +4 -0
- package/data/providers.json +38 -0
- package/dist/admin/branding.js +34 -0
- package/dist/admin/components.js +189 -0
- package/dist/admin/pages.js +1891 -0
- package/dist/admin/shell.js +129 -0
- package/dist/admin/tokens.js +32 -0
- package/dist/cli/nl.js +147 -0
- package/dist/cli/repl.js +470 -0
- package/dist/cli/ui.js +81 -0
- package/dist/cli.js +199 -0
- package/dist/common/http.js +55 -0
- package/dist/config/env.js +94 -0
- package/dist/config/paths.js +112 -0
- package/dist/data/providers.json +38 -0
- package/dist/db/index.js +20 -0
- package/dist/db/init.js +11 -0
- package/dist/logo.png +0 -0
- package/dist/media/capabilities.js +103 -0
- package/dist/middleware/auth.js +37 -0
- package/dist/observability/health.js +31 -0
- package/dist/pool/index.js +407 -0
- package/dist/pool/rotation.js +123 -0
- package/dist/proxy/dns.js +39 -0
- package/dist/proxy/forward.js +350 -0
- package/dist/public/logos/anthropic.svg +1 -0
- package/dist/public/logos/anyscale.svg +1 -0
- package/dist/public/logos/appwrite.svg +1 -0
- package/dist/public/logos/brave.svg +1 -0
- package/dist/public/logos/cartesia.svg +4 -0
- package/dist/public/logos/claude.svg +1 -0
- package/dist/public/logos/cloudflare.svg +1 -0
- package/dist/public/logos/cohere-command.svg +1 -0
- package/dist/public/logos/cohere.svg +1 -0
- package/dist/public/logos/deepgram.svg +1 -0
- package/dist/public/logos/elevenlabs.svg +1 -0
- package/dist/public/logos/finnhub.png +0 -0
- package/dist/public/logos/fireworks.svg +1 -0
- package/dist/public/logos/gemini.svg +1 -0
- package/dist/public/logos/google.svg +1 -0
- package/dist/public/logos/googlemaps.svg +1 -0
- package/dist/public/logos/groq.svg +1 -0
- package/dist/public/logos/huggingface.svg +1 -0
- package/dist/public/logos/mailgun.svg +1 -0
- package/dist/public/logos/manifest.json +197 -0
- package/dist/public/logos/mapbox.svg +1 -0
- package/dist/public/logos/mistral.svg +1 -0
- package/dist/public/logos/neon.svg +1 -0
- package/dist/public/logos/openai.svg +1 -0
- package/dist/public/logos/openrouter.svg +1 -0
- package/dist/public/logos/openweather.png +0 -0
- package/dist/public/logos/perplexity.svg +1 -0
- package/dist/public/logos/pool-anything.svg +111 -0
- package/dist/public/logos/postmark.svg +4 -0
- package/dist/public/logos/replicate.svg +1 -0
- package/dist/public/logos/resend.svg +1 -0
- package/dist/public/logos/scrapingbee.svg +72 -0
- package/dist/public/logos/sendgrid.svg +1 -0
- package/dist/public/logos/serper.png +0 -0
- package/dist/public/logos/supabase.svg +1 -0
- package/dist/public/logos/tavily.svg +1 -0
- package/dist/public/logos/together.svg +1 -0
- package/dist/public/logos/turso.svg +1 -0
- package/dist/public/logos/twilio.svg +1 -0
- package/dist/public/logos/upstash.svg +1 -0
- package/dist/router/api.js +20 -0
- package/dist/server.js +431 -0
- package/dist/upstream/index.js +137 -0
- package/package.json +68 -0
- package/public/logos/anthropic.svg +1 -0
- package/public/logos/anyscale.svg +1 -0
- package/public/logos/appwrite.svg +1 -0
- package/public/logos/brave.svg +1 -0
- package/public/logos/cartesia.svg +4 -0
- package/public/logos/claude.svg +1 -0
- package/public/logos/cloudflare.svg +1 -0
- package/public/logos/cohere-command.svg +1 -0
- package/public/logos/cohere.svg +1 -0
- package/public/logos/deepgram.svg +1 -0
- package/public/logos/elevenlabs.svg +1 -0
- package/public/logos/finnhub.png +0 -0
- package/public/logos/fireworks.svg +1 -0
- package/public/logos/gemini.svg +1 -0
- package/public/logos/google.svg +1 -0
- package/public/logos/googlemaps.svg +1 -0
- package/public/logos/groq.svg +1 -0
- package/public/logos/huggingface.svg +1 -0
- package/public/logos/mailgun.svg +1 -0
- package/public/logos/manifest.json +197 -0
- package/public/logos/mapbox.svg +1 -0
- package/public/logos/mistral.svg +1 -0
- package/public/logos/neon.svg +1 -0
- package/public/logos/openai.svg +1 -0
- package/public/logos/openrouter.svg +1 -0
- package/public/logos/openweather.png +0 -0
- package/public/logos/perplexity.svg +1 -0
- package/public/logos/pool-anything.svg +111 -0
- package/public/logos/postmark.svg +4 -0
- package/public/logos/replicate.svg +1 -0
- package/public/logos/resend.svg +1 -0
- package/public/logos/scrapingbee.svg +72 -0
- package/public/logos/sendgrid.svg +1 -0
- package/public/logos/serper.png +0 -0
- package/public/logos/supabase.svg +1 -0
- package/public/logos/tavily.svg +1 -0
- package/public/logos/together.svg +1 -0
- package/public/logos/turso.svg +1 -0
- package/public/logos/twilio.svg +1 -0
- package/public/logos/upstash.svg +1 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/** Shared component layer — docs-first.
|
|
2
|
+
* Net-new `ds-*` components ported from landing/docs.html (see
|
|
3
|
+
* design-system.md §10d) with literals swapped to tokensCss vars.
|
|
4
|
+
* `ds-` prefix avoids collisions with existing admin selectors
|
|
5
|
+
* (notably admin playground `.code` vs docs `.code`).
|
|
6
|
+
* Bridge rules at the bottom re-skin existing admin analogues
|
|
7
|
+
* (same selectors, docs values) — no markup/JS changes.
|
|
8
|
+
* Interpolate AFTER page CSS so equal-specificity rules win. */
|
|
9
|
+
export const docsComponentsCss = `
|
|
10
|
+
/* — global focus (docs :focus-visible, §11 #15) — */
|
|
11
|
+
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible,
|
|
12
|
+
textarea:focus-visible, summary:focus-visible {
|
|
13
|
+
outline:2px solid var(--accent); outline-offset:2px; border-radius:4px;
|
|
14
|
+
}
|
|
15
|
+
/* — eyebrow label (docs .eyebrow) — */
|
|
16
|
+
.ds-eyebrow { font-size:11px; letter-spacing:.08em; font-weight:700; color:var(--ink-faint); margin:0 0 4px; }
|
|
17
|
+
/* — inline code (docs .article code) — */
|
|
18
|
+
.ds-inline { font-family:var(--font-mono); font-size:12.5px; background:var(--code-bg);
|
|
19
|
+
border:1px solid var(--line-soft); border-radius:var(--radius-sm); padding:1px 6px;
|
|
20
|
+
color:var(--ink); white-space:nowrap; }
|
|
21
|
+
/* — code block + copy (docs .code / .code-tools) — */
|
|
22
|
+
.ds-code { position:relative; background:var(--card); border:1px solid var(--line);
|
|
23
|
+
border-radius:var(--radius-md); margin:8px 0 12px; overflow:hidden; }
|
|
24
|
+
.ds-code pre { margin:0; padding:13px 46px 13px 14px; overflow-x:auto;
|
|
25
|
+
font-family:var(--font-mono); font-size:12.5px; line-height:1.6; color:var(--code-ink); }
|
|
26
|
+
.ds-code pre code { background:none; border:0; padding:0; white-space:pre; }
|
|
27
|
+
.ds-code.dark { background:var(--code-dark); border-color:var(--code-dark); }
|
|
28
|
+
.ds-code.dark pre { color:var(--code-dark-ink); }
|
|
29
|
+
.ds-code-tools { position:absolute; top:8px; right:8px; display:flex; gap:4px; }
|
|
30
|
+
.ds-code-tools button { border:1px solid transparent; background:none; border-radius:var(--radius-sm);
|
|
31
|
+
cursor:pointer; width:26px; height:26px; display:inline-flex; align-items:center;
|
|
32
|
+
justify-content:center; color:var(--ink-faint); font-size:13px; }
|
|
33
|
+
.ds-code-tools button:hover { background:var(--paper-2); color:var(--ink); border-color:var(--line); }
|
|
34
|
+
.ds-tok-cmd { color:var(--tok-cmd); font-weight:600; } .ds-tok-url { color:var(--link-ink); }
|
|
35
|
+
.ds-tok-str { color:var(--tok-str); } .ds-tok-com { color:var(--code-com); } .ds-tok-k { color:var(--tok-kw); }
|
|
36
|
+
/* — callouts (docs .callout info/tip) — */
|
|
37
|
+
.ds-callout { display:flex; gap:10px; border:1px solid var(--line); border-radius:var(--radius-md);
|
|
38
|
+
background:var(--paper-2); padding:11px 14px; margin:14px 0; font-size:13.5px; color:var(--body-copy); }
|
|
39
|
+
.ds-callout .ic { flex-shrink:0; width:20px; height:20px; border-radius:50%;
|
|
40
|
+
display:inline-flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; margin-top:2px; }
|
|
41
|
+
.ds-callout.info .ic { background:var(--info-chip); color:var(--ink-soft); }
|
|
42
|
+
.ds-callout.tip { background:var(--green-bg); border-color:var(--green-line); }
|
|
43
|
+
.ds-callout.tip .ic { background:var(--green-chip); color:#fff; }
|
|
44
|
+
.ds-callout a { color:var(--ink); text-decoration:underline; text-underline-offset:2px; }
|
|
45
|
+
/* — tabs (docs .ptabs / .subtabs) — */
|
|
46
|
+
.ds-ptabs { display:flex; gap:2px; border-bottom:1px solid var(--line); margin:14px 0 4px; overflow-x:auto; }
|
|
47
|
+
.ds-ptabs button { border:0; background:none; font:inherit; font-size:13px; color:var(--ink-soft);
|
|
48
|
+
padding:8px 12px; cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-1px; white-space:nowrap; }
|
|
49
|
+
.ds-ptabs button:hover { color:var(--ink); }
|
|
50
|
+
.ds-ptabs button.on { color:var(--ink); font-weight:600; border-bottom-color:var(--accent); }
|
|
51
|
+
.ds-subtabs { display:flex; gap:18px; margin:12px 0 2px; font-size:13px; }
|
|
52
|
+
.ds-subtabs button { border:0; background:none; font:inherit; color:var(--ink-soft);
|
|
53
|
+
cursor:pointer; padding:4px 0; border-bottom:2px solid transparent; }
|
|
54
|
+
.ds-subtabs button.on { color:var(--ink); font-weight:600; border-bottom-color:var(--accent); }
|
|
55
|
+
.ds-tabpanel { display:none; } .ds-tabpanel.on { display:block; }
|
|
56
|
+
.ds-plabel { font-size:13px; font-weight:600; margin:16px 0 6px; }
|
|
57
|
+
/* — data table (docs table.grid) — */
|
|
58
|
+
.ds-tbl-wrap { overflow-x:auto; margin:12px 0; }
|
|
59
|
+
table.ds-grid { width:100%; border-collapse:collapse; font-size:13.5px; }
|
|
60
|
+
table.ds-grid th { text-align:left; font-size:12px; font-weight:600; color:var(--ink-faint);
|
|
61
|
+
padding:8px 10px; border-bottom:1px solid var(--line); }
|
|
62
|
+
table.ds-grid td { padding:9px 10px; border-bottom:1px solid var(--line-soft);
|
|
63
|
+
vertical-align:top; color:var(--body-copy); }
|
|
64
|
+
table.ds-grid td:first-child { color:var(--ink); }
|
|
65
|
+
table.ds-grid a { color:var(--ink); text-decoration:underline;
|
|
66
|
+
text-decoration-color:var(--underline); text-underline-offset:3px; }
|
|
67
|
+
/* — endpoint plate + method badges (docs .ep / .m) — */
|
|
68
|
+
.ds-ep { background:var(--card); border:1px solid var(--line); border-radius:var(--radius-lg);
|
|
69
|
+
padding:13px 15px; margin:12px 0; }
|
|
70
|
+
.ds-ep-head { display:flex; align-items:center; gap:9px; flex-wrap:wrap; }
|
|
71
|
+
.ds-ep-head .route { font-family:var(--font-mono); font-size:13px; font-weight:600; }
|
|
72
|
+
.ds-m { font-family:var(--font-mono); font-size:11px; font-weight:700;
|
|
73
|
+
border-radius:var(--radius-xs); padding:2px 8px; letter-spacing:.03em; }
|
|
74
|
+
.ds-m.get { background:var(--link-bg); color:var(--link-ink); border:1px solid var(--link-line); }
|
|
75
|
+
.ds-m.post { background:var(--ink); color:#fff; }
|
|
76
|
+
.ds-m.patch { background:var(--warn-bg); color:var(--warn-ink); border:1px solid var(--warn-line); }
|
|
77
|
+
.ds-m.delete { background:var(--danger-bg); color:var(--danger-ink); border:1px solid var(--danger-line); }
|
|
78
|
+
.ds-ep p { font-size:13.5px; margin:7px 0 0; }
|
|
79
|
+
/* — accordion (docs .acc) — */
|
|
80
|
+
.ds-acc { border:1px solid var(--line); border-radius:var(--radius-lg); overflow:hidden;
|
|
81
|
+
margin:12px 0; background:var(--card); }
|
|
82
|
+
.ds-acc-item + .ds-acc-item { border-top:1px solid var(--line-soft); }
|
|
83
|
+
.ds-acc-btn { width:100%; display:flex; align-items:center; gap:10px; text-align:left;
|
|
84
|
+
background:none; border:0; font:inherit; font-size:13.5px; font-weight:600; color:var(--ink);
|
|
85
|
+
padding:11px 14px; cursor:pointer; }
|
|
86
|
+
.ds-acc-btn:hover { background:var(--paper); }
|
|
87
|
+
.ds-acc-btn .chev { color:var(--ink-faint); font-size:11px; width:14px; transition:transform .18s ease; }
|
|
88
|
+
.ds-acc-item.open .ds-acc-btn .chev { transform:rotate(90deg); }
|
|
89
|
+
/* — right-rail scroll-spy (docs .toc) — */
|
|
90
|
+
.ds-toc { font-size:12.5px; }
|
|
91
|
+
.ds-toc a { display:block; color:var(--ink-soft); text-decoration:none;
|
|
92
|
+
padding:3px 0 3px 12px; border-left:2px solid transparent; }
|
|
93
|
+
.ds-toc a:hover { color:var(--ink); }
|
|
94
|
+
.ds-toc a.on { color:var(--ink); font-weight:600; border-left-color:var(--accent); }
|
|
95
|
+
.ds-toc a.sub { padding-left:24px; }
|
|
96
|
+
/* — search input (docs .search) — */
|
|
97
|
+
.ds-search { display:flex; align-items:center; gap:8px; background:var(--card);
|
|
98
|
+
border:1px solid var(--line); border-radius:var(--radius-md); padding:6px 10px;
|
|
99
|
+
font-size:13px; color:var(--ink-faint); }
|
|
100
|
+
.ds-search input { border:0; outline:0; background:none; width:100%; font-size:13px; color:var(--ink); }
|
|
101
|
+
.ds-search kbd { font-family:inherit; font-size:11px; border:1px solid var(--line);
|
|
102
|
+
border-radius:var(--radius-xs); padding:0 5px; background:var(--paper); color:var(--ink-faint); }
|
|
103
|
+
/* — feedback pill + pager (docs) — */
|
|
104
|
+
.ds-feedback { display:flex; align-items:center; gap:10px; margin:26px 0 8px;
|
|
105
|
+
font-size:13px; color:var(--ink-soft); }
|
|
106
|
+
.ds-feedback button { display:inline-flex; align-items:center; gap:6px; font-size:12.5px;
|
|
107
|
+
border:1px solid var(--line); background:var(--card); border-radius:var(--radius-pill);
|
|
108
|
+
padding:5px 12px; cursor:pointer; color:var(--ink-soft); }
|
|
109
|
+
.ds-feedback button:hover { color:var(--ink); border-color:var(--ink-faint); }
|
|
110
|
+
.ds-feedback button.picked { background:var(--ink); color:#fff; border-color:var(--ink); }
|
|
111
|
+
|
|
112
|
+
/* ══ bridge: existing admin analogues re-skinned to docs values ══ */
|
|
113
|
+
/* nav active → docs sidenav [data-active] (§11 #4) */
|
|
114
|
+
.mi.active { background:var(--accent-soft); color:var(--accent); }
|
|
115
|
+
.mi.active .ic { opacity:1; }
|
|
116
|
+
/* home search: neutral focus border, no accent ring (explicit choice;
|
|
117
|
+
see home-focus test). Containment stays on the outer card so the inner
|
|
118
|
+
input never overflows it. */
|
|
119
|
+
.search-card { overflow:hidden; }
|
|
120
|
+
.search-card:focus-within { border-color:var(--ink-faint); box-shadow:none; }
|
|
121
|
+
.search-box { background:var(--card); border-radius:var(--radius-md); overflow:hidden; }
|
|
122
|
+
.search-box input { height:100%; }
|
|
123
|
+
.kbd { align-items:center; }
|
|
124
|
+
.kbd kbd { border-radius:var(--radius-xs); color:var(--ink-soft); border-color:var(--line); }
|
|
125
|
+
/* tips banner → callout.info geometry */
|
|
126
|
+
.tips-banner { background:var(--paper-2); border-radius:var(--radius-md); padding:11px 14px; }
|
|
127
|
+
/* stat-list → table.grid idiom */
|
|
128
|
+
.stat-list .sl { color:var(--ink-faint); font-size:12px; font-weight:600; }
|
|
129
|
+
.stat-list .srow { border-top-color:var(--line-soft); }
|
|
130
|
+
.stat-list .sv { color:var(--ink); }
|
|
131
|
+
/* playground copy buttons → code-tools 26px */
|
|
132
|
+
#copyTop.btn, #copyCode.btn { min-height:26px; min-width:26px; padding:0 6px; border-color:transparent;
|
|
133
|
+
color:var(--ink-faint); }
|
|
134
|
+
#copyTop.btn:hover, #copyCode.btn:hover { background:var(--paper-2); color:var(--ink);
|
|
135
|
+
border-color:var(--line); }
|
|
136
|
+
/* playground token colors → docs tok palette (§11 #17) */
|
|
137
|
+
.k { color:var(--tok-kw); } .s { color:var(--tok-str); } .n { color:var(--warn-ink); }
|
|
138
|
+
.fn { color:var(--link-ink); } .c { color:var(--code-com); }
|
|
139
|
+
/* error text + note boxes → docs danger/warn (§11 #2-3) */
|
|
140
|
+
.err, .perr { color:var(--danger-ink); }
|
|
141
|
+
.msg.assistant.err { border-color:var(--danger-line); background:var(--danger-bg); }
|
|
142
|
+
.cap-note { color:var(--warn-ink); background:var(--warn-bg); border-color:var(--warn-line); }
|
|
143
|
+
.cap-note.ok { color:var(--green-ink); background:var(--green-bg); border-color:var(--green-line); }
|
|
144
|
+
.ana-delta.up { color:var(--green-ink); } .ana-delta.down { color:var(--danger-ink); }
|
|
145
|
+
.submit { border-color:var(--danger-ink); box-shadow:0 0 0 3px var(--danger-ring); }
|
|
146
|
+
.meter { background:var(--line); } .meter i { background:var(--chart-blue); }
|
|
147
|
+
|
|
148
|
+
/* ══ custom dropdown: trigger + menu over a hidden native select ══ */
|
|
149
|
+
/* trigger mirrors .ctl geometry; menu mirrors endpoint-plate cards */
|
|
150
|
+
.dd { position:relative; display:inline-flex; min-width:0; vertical-align:middle; }
|
|
151
|
+
.dd-block { display:flex; width:100%; }
|
|
152
|
+
.dd-btn { display:inline-flex; align-items:center; gap:8px; width:100%;
|
|
153
|
+
border:1px solid var(--line); background:var(--card); border-radius:8px;
|
|
154
|
+
min-height:34px; padding:0 10px; font-size:13px; color:var(--ink);
|
|
155
|
+
font-family:inherit; cursor:pointer; text-align:left; }
|
|
156
|
+
.dd-btn:hover { background:var(--paper-2); }
|
|
157
|
+
.dd-btn:disabled { opacity:.4; cursor:not-allowed; }
|
|
158
|
+
.dd-ghost .dd-btn { border-color:transparent; font-weight:600; }
|
|
159
|
+
.dd-ghost .dd-btn:hover { background:var(--paper-2); border-color:var(--line); }
|
|
160
|
+
.dd-val { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
|
161
|
+
.dd-btn .chev { display:inline-flex; flex-shrink:0; color:var(--ink-faint);
|
|
162
|
+
transition:transform .18s ease; }
|
|
163
|
+
.dd.open .dd-btn .chev { transform:rotate(180deg); }
|
|
164
|
+
.dd-menu { position:absolute; top:calc(100% + 4px); left:0; min-width:100%;
|
|
165
|
+
max-height:240px; overflow:auto; background:var(--card);
|
|
166
|
+
border:1px solid var(--line); border-radius:10px;
|
|
167
|
+
box-shadow:var(--shadow-md); padding:4px; z-index:60; margin:0; }
|
|
168
|
+
.dd-item { display:flex; align-items:center; gap:8px; width:100%; border:0;
|
|
169
|
+
background:none; font-family:inherit; font-size:13px; color:var(--ink);
|
|
170
|
+
border-radius:6px; padding:7px 8px; cursor:pointer; text-align:left; }
|
|
171
|
+
.dd-item:hover { background:var(--paper-2); }
|
|
172
|
+
.dd-item:disabled { opacity:.4; cursor:not-allowed; }
|
|
173
|
+
.dd-item .dd-txt { flex:1; min-width:0; overflow:hidden;
|
|
174
|
+
text-overflow:ellipsis; white-space:nowrap; }
|
|
175
|
+
.dd-item .tick { display:inline-flex; flex-shrink:0; width:14px; opacity:0; }
|
|
176
|
+
.dd-item[aria-selected="true"] { font-weight:600; }
|
|
177
|
+
.dd-item[aria-selected="true"] .tick { opacity:1; }
|
|
178
|
+
.row>.dd { flex:1 1 auto; min-width:140px; }
|
|
179
|
+
.pg-top>.dd { max-width:220px; }`;
|
|
180
|
+
const DD_CHEV = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>`;
|
|
181
|
+
/** Custom dropdown markup: visible trigger + menu over a hidden native select.
|
|
182
|
+
* Client JS (clientDropdownJs in pages.ts) builds the menu from the select's
|
|
183
|
+
* options and dispatches real input/change events, so existing `.value`
|
|
184
|
+
* reads, `.onchange` handlers, and option-population code keep working.
|
|
185
|
+
* wrapClass: "dd-block" (full-width, e.g. form rows + studio fields) or
|
|
186
|
+
* "dd-ghost" (borderless, e.g. the code-language picker). */
|
|
187
|
+
export function ddSelect(id, ariaLabel, options = "", wrapClass = "") {
|
|
188
|
+
return `<span class="dd${wrapClass ? " " + wrapClass : ""}" id="dd-${id}"><select id="${id}" aria-label="${ariaLabel}" hidden>${options}</select><button type="button" class="dd-btn" aria-haspopup="listbox" aria-expanded="false" aria-label="${ariaLabel}"><span class="dd-val"></span><span class="chev">${DD_CHEV}</span></button><div class="dd-menu" role="listbox" hidden></div></span>`;
|
|
189
|
+
}
|