unbound-cli 1.15.0 → 1.15.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbound-cli",
3
- "version": "1.15.0",
3
+ "version": "1.15.2",
4
4
  "description": "CLI tool for Unbound - AI Gateway management",
5
5
  "main": "src/index.js",
6
6
  "bin": {
package/src/auth-pages.js CHANGED
@@ -23,13 +23,11 @@ function escapeHtml(value) {
23
23
  .replace(/'/g, ''');
24
24
  }
25
25
 
26
- // Unbound shield mark (public/Unbound.svg in unbound-fe), inlined verbatim.
27
- const LOGO_SVG =
28
- '<svg width="28" height="27" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">' +
29
- '<path d="M5.12736 6.88525C6.33833 14.4266 11.9473 18.6338 12.0038 18.6757L9.577 22.0419C9.28788 21.8335 2.47374 16.8456 0.979492 7.53649L5.12639 6.88525H5.12736Z" fill="#7B56FB"/>' +
30
- '<path d="M18.7655 6.81787L22.8988 7.24132C22.8637 7.59566 21.9496 15.9907 14.6361 21.9394L12.0059 18.6755C17.9322 13.8559 18.7577 6.88796 18.7655 6.81787Z" fill="#7B56FB"/>' +
31
- '<path d="M12.1878 1.4375C14.6214 1.4375 17.3928 1.8113 20.282 2.91325L18.7654 6.81775C11.5638 4.07068 5.19258 6.85572 5.12833 6.88492L3.42188 3.10697C3.63993 3.00865 7.20178 1.4375 12.1878 1.4375Z" fill="#7B56FB"/>' +
32
- '</svg>';
26
+ // Full Unbound logo (public/unbound_logo_dark_theme.svg in unbound-fe), inlined
27
+ // verbatim. Kept at the asset's native 100x18 proportions and scaled up to
28
+ // 150px wide — the same treatment as the auto-topup modal — so the wordmark
29
+ // keeps its shape instead of being shrunk or squashed to fit a box.
30
+ const LOGO_SVG = '<svg aria-hidden="true" width="150" height="27" viewBox="0 0 100 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M28.3097 3.82617H30.9472V13.9767H28.3097V12.574C27.5351 13.6571 26.4897 14.1983 25.1742 14.1983C24.0547 14.1983 23.173 13.8383 22.5276 13.1184C21.8823 12.3985 21.5596 11.4241 21.5596 10.1934V3.82617H24.1971V9.62096C24.1971 10.3104 24.3411 10.8269 24.6301 11.1712C24.919 11.5163 25.3956 11.6885 26.0591 11.6885C26.7844 11.6885 27.3408 11.4735 27.7286 11.0427C28.1163 10.6119 28.3097 9.98504 28.3097 9.16051V3.82617Z" fill="#2C2C2C"/><path d="M38.455 3.60352C39.5985 3.60352 40.4957 3.961 41.1477 4.67434C41.7997 5.38767 42.1248 6.36623 42.1248 7.60838V13.9756H39.4873V8.18086C39.4873 7.49142 39.34 6.97495 39.0445 6.63064C38.7489 6.28633 38.2632 6.11335 37.5874 6.11335C36.0629 6.11335 35.3006 6.95601 35.3006 8.64131V13.9748H32.6631V3.82509H35.3006V5.20892C36.0629 4.1381 37.1141 3.60352 38.4542 3.60352H38.455Z" fill="#2C2C2C"/><path d="M49.6116 3.6029C50.9271 3.6029 52.0277 4.09877 52.9126 5.08887C53.7975 6.07979 54.2404 7.34995 54.2404 8.90017C54.2404 10.4504 53.8008 11.7214 52.9217 12.7115C52.0425 13.7024 50.9386 14.1974 49.6108 14.1974C48.283 14.1974 47.1881 13.6686 46.4012 12.6101V13.9759H43.7637V0.968681L46.4012 0V5.24537C47.1881 4.15066 48.2575 3.6029 49.6108 3.6029H49.6116ZM49.0033 11.6868C49.7409 11.6868 50.3525 11.4281 50.8382 10.9117C51.3238 10.3944 51.5667 9.7247 51.5667 8.90017C51.5667 8.07563 51.3271 7.40513 50.8472 6.88867C50.3681 6.37221 49.7532 6.11356 49.0033 6.11356C48.2534 6.11356 47.6318 6.37221 47.1404 6.88867C46.649 7.40596 46.4028 8.07646 46.4028 8.90017C46.4028 9.72387 46.649 10.3952 47.1404 10.9117C47.6318 11.4281 48.2534 11.6868 49.0033 11.6868Z" fill="#2C2C2C"/><path d="M57.0085 5.11667C58.0293 4.10845 59.2772 3.60352 60.7524 3.60352C62.2275 3.60352 63.4788 4.10845 64.5053 5.11667C65.5318 6.12571 66.0455 7.38681 66.0455 8.89996C66.0455 10.4131 65.5384 11.6899 64.5234 12.6923C63.5093 13.6956 62.2514 14.1964 60.7516 14.1964C59.2517 14.1964 58.0128 13.6923 56.9978 12.6833C55.9837 11.6742 55.4766 10.4131 55.4766 8.89996C55.4766 7.38681 55.9869 6.12571 57.0077 5.11667H57.0085ZM62.6243 6.88846C62.1263 6.372 61.5023 6.11335 60.7524 6.11335C60.0025 6.11335 59.3785 6.372 58.8805 6.88846C58.3824 7.40575 58.1338 8.07625 58.1338 8.89996C58.1338 9.72367 58.3832 10.395 58.8805 10.9115C59.3785 11.4279 60.0025 11.6866 60.7524 11.6866C61.5023 11.6866 62.1263 11.4279 62.6243 10.9115C63.1224 10.3942 63.371 9.72449 63.371 8.89996C63.371 8.07543 63.1224 7.40493 62.6243 6.88846Z" fill="#2C2C2C"/><path d="M74.1789 3.82617H76.8164V13.9767H74.1789V12.574C73.4042 13.6571 72.3588 14.1983 71.0433 14.1983C69.9238 14.1983 69.0422 13.8383 68.3968 13.1184C67.7514 12.3985 67.4287 11.4241 67.4287 10.1934V3.82617H70.0662V9.62096C70.0662 10.3104 70.2103 10.8269 70.4992 11.1712C70.7882 11.5163 71.2648 11.6885 71.9283 11.6885C72.6535 11.6885 73.21 11.4735 73.5977 11.0427C73.9854 10.6119 74.1789 9.98504 74.1789 9.16051V3.82617Z" fill="#2C2C2C"/><path d="M84.3232 3.60352C85.4666 3.60352 86.3639 3.961 87.0159 4.67434C87.6678 5.38767 87.993 6.36623 87.993 7.60838V13.9756H85.3555V8.18086C85.3555 7.49142 85.2081 6.97495 84.9126 6.63064C84.6171 6.28633 84.1314 6.11335 83.4556 6.11335C81.931 6.11335 81.1688 6.95601 81.1688 8.64131V13.9748H78.5312V3.82509H81.1688V5.20892C81.931 4.1381 82.9822 3.60352 84.3224 3.60352H84.3232Z" fill="#2C2C2C"/><path d="M97.3623 0.968681L99.9998 0V13.975H97.3623V12.6093C96.5877 13.6678 95.5241 14.1966 94.1716 14.1966C92.8191 14.1966 91.7399 13.7016 90.8607 12.7106C89.9816 11.7205 89.542 10.4496 89.542 8.89934C89.542 7.34912 89.9816 6.07896 90.8607 5.08804C91.7399 4.09795 92.8372 3.60207 94.1527 3.60207C95.4681 3.60207 96.5753 4.14984 97.3623 5.24455V0.968681ZM94.7618 11.6868C95.5118 11.6868 96.1325 11.4281 96.6247 10.9117C97.1162 10.3944 97.3623 9.7247 97.3623 8.90016C97.3623 8.07563 97.1162 7.40513 96.6247 6.88867C96.1325 6.3722 95.5118 6.11356 94.7618 6.11356C94.0119 6.11356 93.397 6.3722 92.9179 6.88867C92.438 7.40596 92.1984 8.07646 92.1984 8.90016C92.1984 9.72387 92.4413 10.3952 92.9269 10.9117C93.4126 11.4281 94.0243 11.6868 94.7618 11.6868Z" fill="#2C2C2C"/><path d="M3.50761 4.90186C4.53166 11.2831 9.27488 14.8432 9.32262 14.8786L7.27041 17.727C7.02593 17.5507 1.2636 13.33 0 5.45292L3.50679 4.90186H3.50761Z" fill="#7B56FB"/><path d="M15.0395 4.84521L18.5347 5.20353C18.5051 5.50336 17.7321 12.607 11.5475 17.6407L9.32324 14.8788C14.3348 10.8006 15.0329 4.90452 15.0395 4.84521Z" fill="#7B56FB"/><path d="M9.47728 0.29248C11.5353 0.29248 13.8789 0.608784 16.3221 1.54122L15.0396 4.84511C8.94961 2.52061 3.56184 4.87724 3.50751 4.90195L2.06445 1.70514C2.24885 1.62194 5.2609 0.29248 9.47728 0.29248Z" fill="#7B56FB"/></svg>';
33
31
 
34
32
  /**
35
33
  * Shared page shell. `status` slots the icon block, heading, and body copy;
@@ -69,15 +67,10 @@ function renderPage({ title, icon, heading, body }) {
69
67
  .brand {
70
68
  display: inline-flex;
71
69
  align-items: center;
72
- gap: 8px;
73
70
  margin-bottom: 28px;
74
71
  }
75
- .brand span {
76
- color: #17132B;
77
- font-size: 17px;
78
- font-weight: 600;
79
- letter-spacing: 0.02em;
80
- }
72
+ /* The wordmark ships its own intrinsic 150x27; never constrain it to a box. */
73
+ .brand svg { display: block; }
81
74
  .icon {
82
75
  display: block;
83
76
  width: 64px;
@@ -97,20 +90,27 @@ function renderPage({ title, icon, heading, body }) {
97
90
  h1 { color: #3d3d3d; font-size: 20px; font-weight: 600; margin-bottom: 10px; }
98
91
  p { color: #6b7280; font-size: 14px; line-height: 1.6; }
99
92
  .identity {
100
- display: inline-flex;
101
- flex-direction: column;
102
- gap: 2px;
103
- margin: 14px 0 6px;
104
- padding: 9px 18px;
93
+ display: block;
94
+ margin: 16px 0 18px;
105
95
  border: 1px solid #e5e7eb;
106
96
  border-radius: 12px;
107
97
  background: #fafafb;
108
- font-size: 13px;
109
- max-width: 100%;
98
+ text-align: left;
110
99
  overflow-wrap: anywhere;
111
100
  }
112
- .identity b { color: #3d3d3d; font-weight: 500; }
113
- .identity i { color: #6b7280; font-style: normal; font-size: 12px; }
101
+ /* Label above value, not beside it: a 400px card cannot hold a long tenant
102
+ name and a long email on the same line without truncating one of them. */
103
+ .identity .row { padding: 10px 16px; }
104
+ .identity .row + .row { border-top: 1px solid #e5e7eb; }
105
+ .identity dt {
106
+ color: #6b7280;
107
+ font-size: 11px;
108
+ font-weight: 500;
109
+ letter-spacing: 0.04em;
110
+ text-transform: uppercase;
111
+ margin-bottom: 3px;
112
+ }
113
+ .identity dd { color: #3d3d3d; font-size: 13px; font-weight: 500; }
114
114
  @keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
115
115
  @keyframes draw { to { stroke-dashoffset: 0; } }
116
116
  @media (prefers-reduced-motion: reduce) {
@@ -120,7 +120,7 @@ function renderPage({ title, icon, heading, body }) {
120
120
  </head>
121
121
  <body>
122
122
  <main class="card">
123
- <div class="brand">${LOGO_SVG}<span>unbound</span></div>
123
+ <div class="brand">${LOGO_SVG}</div>
124
124
  ${icon}
125
125
  <h1>${heading}</h1>
126
126
  ${body}
@@ -148,13 +148,16 @@ const CROSS_ICON =
148
148
  * query-param values — escaped here, and omitted entirely when absent.
149
149
  */
150
150
  function successPage({ email, orgName } = {}) {
151
- // Stacked (email over org) rather than one truncating line — real tenant
152
- // emails and org names routinely overflow a 400px card side by side.
153
- const identityParts = [];
154
- if (email) identityParts.push(`<b>${escapeHtml(email)}</b>`);
155
- if (orgName) identityParts.push(`<i>${escapeHtml(orgName)}</i>`);
156
- const identity = identityParts.length
157
- ? `<div class="identity">${identityParts.join('')}</div>`
151
+ // Each value carries its own label so the reader can tell an org named after
152
+ // a person from the account email. Rows are omitted when the query param is
153
+ // absent, so a missing org never leaves a dangling "Organization" label.
154
+ const row = (label, value) =>
155
+ `<div class="row"><dt>${label}</dt><dd>${escapeHtml(value)}</dd></div>`;
156
+ const identityRows = [];
157
+ if (orgName) identityRows.push(row('Organization', orgName));
158
+ if (email) identityRows.push(row('Email', email));
159
+ const identity = identityRows.length
160
+ ? `<dl class="identity">${identityRows.join('')}</dl>`
158
161
  : '';
159
162
 
160
163
  return renderPage({
@@ -89,7 +89,7 @@ AGENTS / SCRIPTING
89
89
  $ unbound analytics tool-use terminal --format json --limit 100 \\
90
90
  | jq -r '.rows[] | @tsv'
91
91
  $ unbound analytics tool-use terminal --format json \\
92
- | jq '[.columns, .rows[]] | @csv'
92
+ | jq -r '(.columns, .rows[]) | @csv'
93
93
  `;
94
94
 
95
95
  const FILTER_HELP = `