@vigilbase/cli 0.1.4 → 0.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/CLOUDFLARE.md +2 -0
- package/COMMANDS.md +43 -6
- package/LOCAL.md +731 -0
- package/README.md +58 -6
- package/dist/auth/device-auth.d.ts.map +1 -1
- package/dist/auth/device-auth.js +7 -3
- package/dist/auth/device-auth.js.map +1 -1
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/provider.d.ts +18 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +62 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/refresh.d.ts +10 -0
- package/dist/auth/refresh.d.ts.map +1 -0
- package/dist/auth/refresh.js +143 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/auth/store.d.ts +27 -2
- package/dist/auth/store.d.ts.map +1 -1
- package/dist/auth/store.js +23 -8
- package/dist/auth/store.js.map +1 -1
- package/dist/auth/token-metadata.d.ts +10 -0
- package/dist/auth/token-metadata.d.ts.map +1 -0
- package/dist/auth/token-metadata.js +22 -0
- package/dist/auth/token-metadata.js.map +1 -0
- package/dist/auth/types.d.ts +8 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +20 -8
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/helpers.d.ts +15 -0
- package/dist/commands/helpers.d.ts.map +1 -1
- package/dist/commands/helpers.js +2 -2
- package/dist/commands/helpers.js.map +1 -1
- package/dist/commands/index.d.ts +3 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/local.d.ts +30 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +1520 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/public-tools.d.ts.map +1 -1
- package/dist/commands/public-tools.js +8 -4
- package/dist/commands/public-tools.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +16 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +36 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/help.d.ts +1 -1
- package/dist/lib/help.d.ts.map +1 -1
- package/dist/lib/help.js +9 -0
- package/dist/lib/help.js.map +1 -1
- package/dist/lib/network.d.ts.map +1 -1
- package/dist/lib/network.js +2 -1
- package/dist/lib/network.js.map +1 -1
- package/dist/lib/one-client.d.ts +3 -2
- package/dist/lib/one-client.d.ts.map +1 -1
- package/dist/lib/one-client.js +46 -2
- package/dist/lib/one-client.js.map +1 -1
- package/dist/lib/security-client.d.ts +1 -1
- package/dist/lib/tui.d.ts +309 -0
- package/dist/lib/tui.d.ts.map +1 -0
- package/dist/lib/tui.js +847 -0
- package/dist/lib/tui.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.d.ts +95 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.js +184 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.d.ts +113 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.js +313 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/child-env.d.ts +32 -0
- package/dist/local/cloudflare-checkup/cf/child-env.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/child-env.js +81 -0
- package/dist/local/cloudflare-checkup/cf/child-env.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/install.d.ts +106 -0
- package/dist/local/cloudflare-checkup/cf/install.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/install.js +309 -0
- package/dist/local/cloudflare-checkup/cf/install.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/locate.d.ts +44 -0
- package/dist/local/cloudflare-checkup/cf/locate.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/locate.js +228 -0
- package/dist/local/cloudflare-checkup/cf/locate.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.d.ts +89 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.js +275 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.js.map +1 -0
- package/dist/local/cloudflare-checkup/collector.d.ts +48 -0
- package/dist/local/cloudflare-checkup/collector.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/collector.js +296 -0
- package/dist/local/cloudflare-checkup/collector.js.map +1 -0
- package/dist/local/cloudflare-checkup/contract.d.ts +2793 -0
- package/dist/local/cloudflare-checkup/contract.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/contract.js +1614 -0
- package/dist/local/cloudflare-checkup/contract.js.map +1 -0
- package/dist/local/cloudflare-checkup/email-verification.d.ts +125 -0
- package/dist/local/cloudflare-checkup/email-verification.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/email-verification.js +212 -0
- package/dist/local/cloudflare-checkup/email-verification.js.map +1 -0
- package/dist/local/cloudflare-checkup/errors.d.ts +28 -0
- package/dist/local/cloudflare-checkup/errors.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/errors.js +99 -0
- package/dist/local/cloudflare-checkup/errors.js.map +1 -0
- package/dist/local/cloudflare-checkup/output.d.ts +24 -0
- package/dist/local/cloudflare-checkup/output.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/output.js +89 -0
- package/dist/local/cloudflare-checkup/output.js.map +1 -0
- package/dist/local/cloudflare-checkup/prompts.d.ts +41 -0
- package/dist/local/cloudflare-checkup/prompts.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/prompts.js +140 -0
- package/dist/local/cloudflare-checkup/prompts.js.map +1 -0
- package/dist/local/cloudflare-checkup/rate-budget.d.ts +42 -0
- package/dist/local/cloudflare-checkup/rate-budget.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/rate-budget.js +80 -0
- package/dist/local/cloudflare-checkup/rate-budget.js.map +1 -0
- package/dist/local/cloudflare-checkup/snapshot-file.d.ts +53 -0
- package/dist/local/cloudflare-checkup/snapshot-file.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/snapshot-file.js +186 -0
- package/dist/local/cloudflare-checkup/snapshot-file.js.map +1 -0
- package/dist/local/cloudflare-checkup/submit-client.d.ts +98 -0
- package/dist/local/cloudflare-checkup/submit-client.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/submit-client.js +349 -0
- package/dist/local/cloudflare-checkup/submit-client.js.map +1 -0
- package/dist/local/cloudflare-checkup/terminal-ui.d.ts +171 -0
- package/dist/local/cloudflare-checkup/terminal-ui.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/terminal-ui.js +404 -0
- package/dist/local/cloudflare-checkup/terminal-ui.js.map +1 -0
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@ monitoring, organization, and support operations from the terminal.
|
|
|
6
6
|
## Install and sign in
|
|
7
7
|
|
|
8
8
|
Node 20+ is required. Node 22.19+ or Node 24.5+ enables automatic system
|
|
9
|
-
certificate trust.
|
|
9
|
+
certificate trust. `cloudflare-checkup` needs Node 22.18+, because it runs
|
|
10
|
+
Cloudflare's `cf` under the same Node.
|
|
10
11
|
|
|
11
12
|
```bash
|
|
12
13
|
npm install -g @vigilbase/cli
|
|
@@ -32,6 +33,7 @@ preserved; resolve a conflicting installation yourself before linking.
|
|
|
32
33
|
| [CLOUDFLARE.md](./CLOUDFLARE.md) | Accounts, zones, DNS, WAF, analytics, Zero Trust, Workers/Pages, audit, checkups |
|
|
33
34
|
| [SECURITY.md](./SECURITY.md) | Incidents, logs, intelligence, analytics, assets, connections, policies, notifications, reports |
|
|
34
35
|
| [ONE.md](./ONE.md) | Customer records/billing/reports/investigations, organizations, monitoring, support |
|
|
36
|
+
| [LOCAL.md](./LOCAL.md) | `cloudflare-checkup`: one command that verifies your work email, collects Cloudflare config on your machine with Cloudflare's `cf` and uploads it after you confirm |
|
|
35
37
|
|
|
36
38
|
These references ship with the npm package. Built-in help is available through
|
|
37
39
|
`vigilbase <command> --help` or `vigilbase help <command>`.
|
|
@@ -113,7 +115,8 @@ billing portal sessions, scans, and checkup starts).
|
|
|
113
115
|
Every command supports `-j` / `--json`. JSON goes to stdout; progress and browser
|
|
114
116
|
instructions go to stderr. Progress animations are disabled for JSON, CI, and
|
|
115
117
|
non-TTY output. Preserve JSON pagination fields when fetching subsequent pages;
|
|
116
|
-
list commands do not silently fetch every page
|
|
118
|
+
list commands do not silently fetch every page (local collection pages through
|
|
119
|
+
every list by design). New text views display complete
|
|
117
120
|
identifiers. All human-readable output removes terminal control sequences and
|
|
118
121
|
bidirectional overrides, including identities, tool results, skills, and errors.
|
|
119
122
|
JSON preserves successful response data with control characters escaped. Default
|
|
@@ -130,6 +133,26 @@ Commands use named One APIs and existing server authorization. They do not accep
|
|
|
130
133
|
Cloudflare/provider secrets, delegated identity claims, or an arbitrary upstream
|
|
131
134
|
URL. Billing records are fetched on demand and not persisted by the CLI.
|
|
132
135
|
|
|
136
|
+
Exception: `vigilbase cloudflare-checkup` (also `local cloudflare-checkup`) runs
|
|
137
|
+
Cloudflare's own `cf` CLI on your machine with a fixed allowlist of read-only
|
|
138
|
+
commands. cf owns your Cloudflare login; the Vigilbase CLI never reads, prints,
|
|
139
|
+
stores or uploads it. Its only Vigilbase requests are the email verification
|
|
140
|
+
and the explicit upload of a snapshot file you can inspect, after you confirm.
|
|
141
|
+
The command asks for your work email, and vigilbase.com emails you a 6-digit
|
|
142
|
+
code to enter; it then installs cf if needed (asks first), signs in read-only,
|
|
143
|
+
lets you choose the account, collects, uploads and prints the results link
|
|
144
|
+
(opening it in your browser on macOS and Linux).
|
|
145
|
+
Results go to the verified address. Your email address goes to vigilbase.com
|
|
146
|
+
only so it can send the code; the CLI never prints, logs or stores it (it shows
|
|
147
|
+
the masked `j***@acme.com`). In a terminal the steps show as an interactive
|
|
148
|
+
timeline with arrow-key questions; pipes, CI, `TERM=dumb` and `--json` get
|
|
149
|
+
plain lines. See [LOCAL.md](./LOCAL.md).
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npx @vigilbase/cli cloudflare-checkup # also shown at https://vigilbase.com/tools/cloudflare-checkup?mode=local
|
|
153
|
+
npx @vigilbase/cli cloudflare-checkup logout # later: remove the read-only cf login and the cf it installed
|
|
154
|
+
```
|
|
155
|
+
|
|
133
156
|
## Login and configuration
|
|
134
157
|
|
|
135
158
|
`login` opens a browser and waits for device approval. On remote terminals, run
|
|
@@ -144,26 +167,45 @@ The credential directory must be an absolute path, owned by the current user,
|
|
|
144
167
|
and mode `0700`; `credentials.json` must be an owned regular file with mode
|
|
145
168
|
`0600`. Symlinks, hard links, and unsafe parent directories are rejected. Existing
|
|
146
169
|
files with broader permissions require `chmod 700 <config-directory>` and
|
|
147
|
-
`chmod 600 <config-directory>/credentials.json`.
|
|
148
|
-
|
|
170
|
+
`chmod 600 <config-directory>/credentials.json`. Legacy manual/session credentials contain only access-token metadata. Identity
|
|
171
|
+
credentials use version 2 and store the rotating refresh token with its issuer,
|
|
172
|
+
client and One resource binding.
|
|
149
173
|
|
|
150
174
|
Credentials are stored atomically in `~/.config/vigilbase/credentials.json` with
|
|
151
175
|
owner-only file permissions. `XDG_CONFIG_HOME` or `VIGILBASE_CONFIG_DIR` can change
|
|
152
176
|
the location. Tokens are restricted to their issuing One origin. Legacy credential
|
|
153
177
|
files remain valid for production only; re-login for a custom One origin.
|
|
154
|
-
`
|
|
178
|
+
`login` reads One's protected-resource discovery at runtime. Until cutover, One
|
|
179
|
+
advertises its legacy device flow (missing metadata also retains that flow).
|
|
180
|
+
After cutover it advertises Identity, which grants a token for the organization
|
|
181
|
+
you choose during device approval. `whoami` and `doctor` use Identity userinfo
|
|
182
|
+
for these grants. `logout` revokes the Identity refresh token before removing the
|
|
183
|
+
local file; legacy logout remains local. Network failures retain the file for retry.
|
|
184
|
+
|
|
185
|
+
Identity access tokens last five minutes. Refresh starts within 60 seconds of
|
|
186
|
+
expiry, or once after One returns 401. An exclusive credentials lock coordinates
|
|
187
|
+
independent CLI processes; each holder rereads the file before rotating. A durable
|
|
188
|
+
pending marker prevents retry after an uncertain token exchange. Run `login`
|
|
189
|
+
again after an uncertain refresh. Fresh login/logout may retire a dead process's
|
|
190
|
+
owned lock, but never steal a live process lock. If a damaged lock cannot be
|
|
191
|
+
recovered, stop all CLI processes before removing `credentials.json.lock` and
|
|
192
|
+
logging in again. Never reuse the refresh token manually.
|
|
155
193
|
|
|
156
194
|
| Option | Environment variable | Default |
|
|
157
195
|
| --- | --- | --- |
|
|
158
196
|
| `--base-url <origin>` | `VIGILBASE_BASE_URL` | `https://vigilbase.com` |
|
|
159
197
|
| `--one-url <origin>` | `VIGILBASE_ONE_URL` | `https://one.vigilbase.com` |
|
|
198
|
+
| `--auth-url <origin>` | `VIGILBASE_AUTH_URL` | issuer selected by One discovery |
|
|
160
199
|
| `--client-id <id>` | `VIGILBASE_CLIENT_ID` | `vigilbase-cli` |
|
|
161
200
|
| `--timeout <ms>` | — | `60000` per request |
|
|
162
201
|
|
|
163
202
|
Origins must be HTTP(S) URLs without paths, credentials, or queries. Authenticated
|
|
164
203
|
One origins require HTTPS. HTTP is allowed only for loopback development
|
|
165
204
|
(`localhost`, `127.0.0.0/8`, or `::1`). This applies to device authorization,
|
|
166
|
-
explicit tokens, and saved sessions.
|
|
205
|
+
explicit tokens, and saved sessions. Identity issuer and endpoint origins are
|
|
206
|
+
restricted to `auth.vigilbase.com` and `identity-staging.vigilbase.com`; local
|
|
207
|
+
Identity requires explicit `--auth-url` and a loopback One origin. Arbitrary
|
|
208
|
+
issuers, endpoints, and API redirects are refused.
|
|
167
209
|
`VIGILBASE_API_URL` and `VIGILBASE_PUBLIC_URL` are legacy public-origin aliases,
|
|
168
210
|
used after `VIGILBASE_BASE_URL` when no explicit flag is supplied.
|
|
169
211
|
`VIGILBASE_CLI_NO_OPEN=1` disables automatic browser opening.
|
|
@@ -216,6 +258,16 @@ operation in both JSON and text, with exact methods, paths, query filters, beare
|
|
|
216
258
|
headers, bodies, error exits, and included documentation. Fixtures use temporary
|
|
217
259
|
credentials and a loopback server; simulated mutations never touch production.
|
|
218
260
|
|
|
261
|
+
The local Cloudflare Checkup has a cross-package end-to-end test in apps/com: the
|
|
262
|
+
built CLI collects through the smoke's fake `cf` and uploads to the real
|
|
263
|
+
vigilbase.com route handlers, with One's tool-runs API faked on loopback. Run it
|
|
264
|
+
after a build:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
pnpm --filter @vigilbase/cli build
|
|
268
|
+
pnpm --filter com exec vitest run lib/cloudflare-checkup/local/__tests__/e2e-local-cli.test.ts
|
|
269
|
+
```
|
|
270
|
+
|
|
219
271
|
The separate `smoke:e2e` script runs real public scanners. Configure
|
|
220
272
|
`VIGILBASE_BASE_URL` and `VIGILBASE_SMOKE_ARTIFACTS` as shown in COMMANDS.md.
|
|
221
273
|
Authenticated production verification requires a valid One session and appropriate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../../src/auth/device-auth.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAOnB,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;gBAGpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;CAQ7D;
|
|
1
|
+
{"version":3,"file":"device-auth.d.ts","sourceRoot":"","sources":["../../src/auth/device-auth.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAOnB,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;gBAGpB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;CAQ7D;AAoCD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAiC7B;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,GACrD;IACE,MAAM,EAAE,WAAW,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,uBAAuB,CAAA;CAC/B,CAAA;AAEL,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CA4ErB;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3E;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,SAAS,GAAG,WAAW,CAAA;KAC9B,KAAK,IAAI,CAAA;IACV,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,GACA,OAAO,CAAC,kBAAkB,CAAC,CAkF7B"}
|
package/dist/auth/device-auth.js
CHANGED
|
@@ -27,21 +27,24 @@ function isRetryableTokenStatus(status) {
|
|
|
27
27
|
status >= 500);
|
|
28
28
|
}
|
|
29
29
|
async function postJson(config, path, body) {
|
|
30
|
-
const
|
|
30
|
+
const provider = config.authProvider;
|
|
31
|
+
const url = provider ? (path === '/device/code' ? provider.deviceEndpoint : provider.tokenEndpoint) : `${authBase(config)}${path}`;
|
|
32
|
+
const form = provider && path === '/device/token';
|
|
31
33
|
const { response, text } = await requestText(config, url, {
|
|
32
34
|
method: 'POST',
|
|
33
35
|
headers: {
|
|
34
36
|
Accept: 'application/json',
|
|
35
|
-
'Content-Type': 'application/json',
|
|
37
|
+
'Content-Type': form ? 'application/x-www-form-urlencoded' : 'application/json',
|
|
36
38
|
'User-Agent': config.userAgent,
|
|
37
39
|
},
|
|
38
|
-
body: JSON.stringify(body),
|
|
40
|
+
body: form ? new URLSearchParams(Object.entries(body).map(([key, value]) => [key, String(value)])) : JSON.stringify(body),
|
|
39
41
|
});
|
|
40
42
|
return { status: response.status, json: parseJsonResponse(response, text) };
|
|
41
43
|
}
|
|
42
44
|
export async function requestDeviceCode(config, options) {
|
|
43
45
|
const { status, json } = await postJson(config, '/device/code', {
|
|
44
46
|
client_id: config.clientId,
|
|
47
|
+
...(config.authProvider ? { resource: config.authProvider.resource, scope: 'openid profile email offline_access one:api' } : {}),
|
|
45
48
|
...(options?.scope ? { scope: options.scope } : {}),
|
|
46
49
|
});
|
|
47
50
|
if (status === 404) {
|
|
@@ -75,6 +78,7 @@ export async function pollDeviceToken(config, deviceCode) {
|
|
|
75
78
|
grant_type: DEVICE_GRANT,
|
|
76
79
|
device_code: deviceCode,
|
|
77
80
|
client_id: config.clientId,
|
|
81
|
+
...(config.authProvider ? { resource: config.authProvider.resource } : {}),
|
|
78
82
|
}));
|
|
79
83
|
}
|
|
80
84
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-auth.js","sourceRoot":"","sources":["../../src/auth/device-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAmBhF,MAAM,YAAY,GAAG,8CAA8C,CAAA;AAEnE,iFAAiF;AACjF,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAEnC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IACb,MAAM,CAAQ;IACd,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,OAA0D;QAE1D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,MAAiB;IACjC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAA;AAC3D,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,OAAO,CACL,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,IAAI,GAAG,CACd,CAAA;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAiB,EACjB,IAAY,EACZ,IAA6B;IAE7B,MAAM,
|
|
1
|
+
{"version":3,"file":"device-auth.js","sourceRoot":"","sources":["../../src/auth/device-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAmBhF,MAAM,YAAY,GAAG,8CAA8C,CAAA;AAEnE,iFAAiF;AACjF,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAEnC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IACb,MAAM,CAAQ;IACd,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,OAA0D;QAE1D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,MAAiB;IACjC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAA;AAC3D,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,OAAO,CACL,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,IAAI,GAAG,CACd,CAAA;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAiB,EACjB,IAAY,EACZ,IAA6B;IAE7B,MAAM,QAAQ,GAAC,MAAM,CAAC,YAAY,CAAA;IAClC,MAAM,GAAG,GAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAG,cAAc,CAAA,CAAC,CAAA,QAAQ,CAAC,cAAc,CAAA,CAAC,CAAA,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAA;IAC1H,MAAM,IAAI,GAAC,QAAQ,IAAI,IAAI,KAAG,eAAe,CAAA;IAC7C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,IAAI,CAAA,CAAC,CAAA,mCAAmC,CAAA,CAAC,CAAA,kBAAkB;YAC3E,YAAY,EAAE,MAAM,CAAC,SAAS;SAC/B;QACD,IAAI,EAAE,IAAI,CAAA,CAAC,CAAA,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAC,KAAK,CAAC,EAAC,EAAE,CAAA,CAAC,GAAG,EAAC,MAAM,CAAC,KAAK,CAAC,CAAoB,CAAC,CAAC,CAAA,CAAC,CAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KACrI,CAAC,CAAA;IACF,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAA;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAiB,EACjB,OAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE;QAC9D,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,GAAG,CAAC,MAAM,CAAC,YAAY,CAAA,CAAC,CAAA,EAAC,QAAQ,EAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAC,KAAK,EAAC,6CAA6C,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;QACvH,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC,CAAA;IAEF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CACvB,0CAA0C,MAAM,CAAC,UAAU,QAAQ;YACjE,kGAAkG,EACpG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAChC,CAAA;IACH,CAAC;IAED,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CAAC,oCAAoC,MAAM,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACvD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7D,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CAAC,+EAA+E,EAAE;YACzG,MAAM,EAAE,IAAI,EAAE,kBAAkB;SACjC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC;AAaD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAiB,EACjB,UAAkB;IAElB,IAAI,MAAc,CAAA;IAClB,IAAI,IAAa,CAAA;IACjB,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE;YAC3D,UAAU,EAAE,YAAY;YACxB,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,GAAG,CAAC,MAAM,CAAC,YAAY,CAAA,CAAC,CAAA,EAAC,QAAQ,EAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC;SACpE,CAAC,CAAC,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,IAAI,yEAAyE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,KAAK,CAAA;QAC5I,MAAM,WAAW,GACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAA;QACxE,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,CAAC;YACb,KAAK,EAAE;gBACL,KAAK,EAAE,uBAAuB;gBAC9B,iBAAiB,EAAE,WAAW;aAC/B;SACF,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAClD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAClB,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;IACpD,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CAAC,gCAAgC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAA;IACnG,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5D,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAClB,MAAM,SAAS,GAA4B,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,CAAA;IAC/G,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAA;IAE5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,uBAAuB,CAAC;QAC7B,KAAK,WAAW;YACd,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAChD,KAAK,eAAe;YAClB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC/C,KAAK,eAAe;YAClB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAChD;YACE,MAAK;IACT,CAAC;IAED,4EAA4E;IAC5E,yCAAyC;IACzC,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,MAAM;YAClB,KAAK,EAAE;gBACL,KAAK,EAAE,uBAAuB;gBAC9B,iBAAiB,EACf,SAAS,CAAC,iBAAiB;oBAC3B,SAAS,CAAC,KAAK;oBACf,sCAAsC,MAAM,GAAG;aAClD;SACF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,qCAAqC,MAAM,GAAG,EAC9C,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAClC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC1D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,CAAC,IAAI,eAAe,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACnF,CAAC,CAAA;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC5C,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,EAAE,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAiB,EACjB,MAA0B,EAC1B,OAQC;IAED,IAAI,WAAW,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;IACtD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,oBAAoB,GAAG,CAAC,CAAA;IAC5B,MAAM,YAAY,GAChB,OAAO,EAAE,uBAAuB,IAAI,yBAAyB,CAAA;IAC/D,IAAI,mBAAmB,GAAG,CAAC,CAAA;IAE3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE;gBAC5C,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,WAAW;aAClB,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,CAAA;QACZ,OAAO,EAAE,SAAS,EAAE,CAAC;YACnB,OAAO;YACP,WAAW;YACX,IAAI,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACzD,CAAC,CAAA;QACF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9F,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,MAAK;QAEjC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;QAChE,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,YAAY;gBACf,OAAO,MAAM,CAAC,KAAK,CAAA;YACrB,KAAK,SAAS;gBACZ,oBAAoB,GAAG,CAAC,CAAA;gBACxB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACvC,WAAW,IAAI,CAAC,CAAA;gBAClB,CAAC;gBACD,MAAK;YACP,KAAK,WAAW;gBACd,oBAAoB,IAAI,CAAC,CAAA;gBACzB,mBAAmB,GAAG,MAAM,CAAC,UAAU,CAAA;gBACvC,IAAI,oBAAoB,IAAI,YAAY,EAAE,CAAC;oBACzC,MAAM,IAAI,eAAe,CACvB,6CAA6C,MAAM,CAAC,UAAU,6BAA6B;wBACzF,CAAC,mBAAmB;4BAClB,CAAC,CAAC,UAAU,mBAAmB,GAAG;4BAClC,CAAC,CAAC,EAAE,CAAC;wBACP,KAAK,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,8CAA8C,EAAE,EACzF;wBACE,MAAM,EAAE,mBAAmB;wBAC3B,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,MAAM,CAAC,KAAK;qBACnB,CACF,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,KAAK,QAAQ;gBACX,MAAM,IAAI,eAAe,CAAC,mCAAmC,EAAE;oBAC7D,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,MAAM,CAAC,KAAK;iBACnB,CAAC,CAAA;YACJ,KAAK,SAAS;gBACZ,MAAM,IAAI,eAAe,CACvB,uDAAuD,EACvD,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAC3D,CAAA;YACH,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,WAAW,GAAU,MAAM,CAAA;gBACjC,MAAM,IAAI,eAAe,CACvB,2BAA2B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EACxD;oBACE,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,YAAY;iBACnB,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,2EAA2E,EAC3E,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAC/B,CAAA;AACH,CAAC"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { clearOneCredentials, credentialsPath, getOneAccessToken, readCredentials, writeOneCredentials, } from './store.js';
|
|
2
2
|
export { DeviceAuthError, pollDeviceToken, requestDeviceCode, waitForDeviceAuthorization, } from './device-auth.js';
|
|
3
3
|
export type { CredentialsFile, DeviceCodeResponse, DeviceTokenSuccess, OneCredentials, StoredUser, } from './types.js';
|
|
4
|
+
export { discoverAuthProvider, identityProvider } from './provider.js';
|
|
5
|
+
export { managedAccessToken, revokeSavedCredentials } from './refresh.js';
|
|
6
|
+
export type { AuthProvider } from './provider.js';
|
|
4
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAC,oBAAoB,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAA;AACnE,OAAO,EAAC,kBAAkB,EAAC,sBAAsB,EAAC,MAAM,cAAc,CAAA;AACtE,YAAY,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { clearOneCredentials, credentialsPath, getOneAccessToken, readCredentials, writeOneCredentials, } from './store.js';
|
|
2
2
|
export { DeviceAuthError, pollDeviceToken, requestDeviceCode, waitForDeviceAuthorization, } from './device-auth.js';
|
|
3
|
+
export { discoverAuthProvider, identityProvider } from './provider.js';
|
|
4
|
+
export { managedAccessToken, revokeSavedCredentials } from './refresh.js';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAA;AASzB,OAAO,EAAC,oBAAoB,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAA;AACnE,OAAO,EAAC,kBAAkB,EAAC,sBAAsB,EAAC,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CliConfig } from '../lib/config.js';
|
|
2
|
+
export interface AuthProvider {
|
|
3
|
+
issuer: string;
|
|
4
|
+
tokenEndpoint: string;
|
|
5
|
+
deviceEndpoint: string;
|
|
6
|
+
userinfoEndpoint: string;
|
|
7
|
+
revocationEndpoint: string;
|
|
8
|
+
resource: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function validateIdentityIssuer(raw: string, config: Pick<CliConfig, 'oneBaseUrl' | 'identityBaseUrl'>): string;
|
|
11
|
+
export declare function identityProvider(config: CliConfig, issuer: string): Promise<AuthProvider>;
|
|
12
|
+
/**
|
|
13
|
+
* Older One deployments answer the protected-resource path with a sign-in
|
|
14
|
+
* redirect or an HTML page; those mean "no Identity metadata" (legacy login).
|
|
15
|
+
* JSON that is present but malformed or names another resource still aborts.
|
|
16
|
+
*/
|
|
17
|
+
export declare function discoverAuthProvider(config: CliConfig): Promise<AuthProvider | undefined>;
|
|
18
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/auth/provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEnE,MAAM,WAAW,YAAY;IAAE,MAAM,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,gBAAgB,EAAC,MAAM,CAAC;IAAA,kBAAkB,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAA;CAAC;AAC1J,wBAAgB,sBAAsB,CAAC,GAAG,EAAC,MAAM,EAAC,MAAM,EAAC,IAAI,CAAC,SAAS,EAAC,YAAY,GAAC,iBAAiB,CAAC,GAAE,MAAM,CAK9G;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAC,CAO3F;AACD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAC,SAAS,GAAE,OAAO,CAAC,YAAY,GAAC,SAAS,CAAC,CAiB3F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DeviceAuthError } from './device-auth.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { validateOneOrigin } from '../lib/config.js';
|
|
4
|
+
import { requestText, parseJsonResponse } from '../lib/network.js';
|
|
5
|
+
export function validateIdentityIssuer(raw, config) {
|
|
6
|
+
const origin = validateOneOrigin(raw);
|
|
7
|
+
const loopback = ['localhost', '127.0.0.1', '[::1]'].includes(new URL(origin).hostname);
|
|
8
|
+
if (!['https://auth.vigilbase.com', 'https://identity-staging.vigilbase.com'].includes(origin) && !(loopback && config.identityBaseUrl === origin && ['localhost', '127.0.0.1', '[::1]'].includes(new URL(config.oneBaseUrl).hostname)))
|
|
9
|
+
throw new Error('Untrusted Identity issuer. Configure --auth-url explicitly for loopback development.');
|
|
10
|
+
return origin;
|
|
11
|
+
}
|
|
12
|
+
async function json(config, url) { const { response, text } = await requestText(config, url, { headers: { Accept: 'application/json', 'User-Agent': config.userAgent } }); return { response, body: parseJsonResponse(response, text) }; }
|
|
13
|
+
export async function identityProvider(config, issuer) {
|
|
14
|
+
issuer = validateIdentityIssuer(issuer, config);
|
|
15
|
+
const { response, body } = await json(config, `${issuer}/.well-known/openid-configuration`);
|
|
16
|
+
const data = z.object({ issuer: z.literal(issuer), token_endpoint: z.string(), device_authorization_endpoint: z.string(), userinfo_endpoint: z.string(), revocation_endpoint: z.string() }).safeParse(body);
|
|
17
|
+
if (!response.ok || !data.success)
|
|
18
|
+
throw new Error('Invalid Identity discovery response.');
|
|
19
|
+
const endpoint = (raw, paths) => { let url; try {
|
|
20
|
+
url = new URL(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error('Invalid Identity endpoint.');
|
|
24
|
+
} ; if (url.origin !== issuer || url.username || url.password || url.search || url.hash || !paths.includes(url.pathname))
|
|
25
|
+
throw new Error('Untrusted Identity endpoint.'); return url.href; };
|
|
26
|
+
return { issuer, resource: validateOneOrigin(config.oneBaseUrl), tokenEndpoint: endpoint(data.data.token_endpoint, ['/api/auth/oauth2/token', '/token']), deviceEndpoint: endpoint(data.data.device_authorization_endpoint, ['/api/auth/device/code']), userinfoEndpoint: endpoint(data.data.userinfo_endpoint, ['/api/auth/oauth2/userinfo', '/userinfo']), revocationEndpoint: endpoint(data.data.revocation_endpoint, ['/api/auth/oauth2/revoke', '/revoke']) };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Older One deployments answer the protected-resource path with a sign-in
|
|
30
|
+
* redirect or an HTML page; those mean "no Identity metadata" (legacy login).
|
|
31
|
+
* JSON that is present but malformed or names another resource still aborts.
|
|
32
|
+
*/
|
|
33
|
+
export async function discoverAuthProvider(config) {
|
|
34
|
+
const one = validateOneOrigin(config.oneBaseUrl);
|
|
35
|
+
const { response, text } = await requestText(config, `${one}/.well-known/oauth-protected-resource`, { headers: { Accept: 'application/json', 'User-Agent': config.userAgent }, redirect: 'manual' });
|
|
36
|
+
if (response.type === 'opaqueredirect' || response.status === 0 || (response.status >= 300 && response.status < 400))
|
|
37
|
+
return undefined;
|
|
38
|
+
if (response.status === 404)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (response.status === 429)
|
|
41
|
+
throw new DeviceAuthError('Discovery rate limit exceeded.', { status: 429, code: 'rate_limited' });
|
|
42
|
+
let body;
|
|
43
|
+
if (response.ok) {
|
|
44
|
+
const contentType = (response.headers.get('content-type') ?? '').split(';')[0].trim().toLowerCase();
|
|
45
|
+
if (contentType && contentType !== 'application/json' && !contentType.endsWith('+json'))
|
|
46
|
+
return undefined;
|
|
47
|
+
try {
|
|
48
|
+
body = JSON.parse(text);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const metadata = z.object({ resource: z.literal(one), authorization_servers: z.array(z.string()).length(1) }).safeParse(body);
|
|
55
|
+
if (!response.ok || !metadata.success)
|
|
56
|
+
throw new Error('Invalid One protected-resource discovery response.');
|
|
57
|
+
const issuer = metadata.data.authorization_servers[0];
|
|
58
|
+
if (issuer === `${one}/api/auth`)
|
|
59
|
+
return undefined;
|
|
60
|
+
return identityProvider(config, issuer);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/auth/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CliConfig } from '../lib/config.js';
|
|
2
|
+
import type { OneCredentials } from './types.js';
|
|
3
|
+
export declare function boundIdentityCredentials(config: CliConfig, one: OneCredentials): boolean;
|
|
4
|
+
/** Library callers may omit or mistype timeoutMs; NaN would make the wait unbounded. */
|
|
5
|
+
export declare function credentialsLockWaitMs(timeoutMs: unknown): number;
|
|
6
|
+
/** Never steal a stale lock: a crashed refresh may have consumed the rotating token. */
|
|
7
|
+
export declare function withCredentialsLock<T>(config: CliConfig, callback: () => Promise<T>, replaceDeadLock?: boolean): Promise<T>;
|
|
8
|
+
export declare function managedAccessToken(config: CliConfig, failedToken?: string): Promise<string | null>;
|
|
9
|
+
export declare function revokeSavedCredentials(config: CliConfig): Promise<boolean>;
|
|
10
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAKjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,wBAAgB,wBAAwB,CAAC,MAAM,EAAC,SAAS,EAAC,GAAG,EAAC,cAAc,GAAE,OAAO,CAEpF;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,SAAS,EAAC,OAAO,GAAE,MAAM,CAG9D;AACD,wFAAwF;AACxF,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAC,SAAS,EAAC,QAAQ,EAAC,MAAI,OAAO,CAAC,CAAC,CAAC,EAAC,eAAe,UAAM,GAAE,OAAO,CAAC,CAAC,CAAC,CA2BtH;AACD,wBAAsB,kBAAkB,CAAC,MAAM,EAAC,SAAS,EAAC,WAAW,CAAC,EAAC,MAAM,GAAE,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAsBlG;AACD,wBAAsB,sBAAsB,CAAC,MAAM,EAAC,SAAS,GAAE,OAAO,CAAC,OAAO,CAAC,CAW9E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { readIdentityTokenMetadata } from './token-metadata.js';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { open, rm, lstat } from 'node:fs/promises';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { DEFAULT_TIMEOUT_MS, validateOneOrigin } from '../lib/config.js';
|
|
7
|
+
import { requestText, parseJsonResponse } from '../lib/network.js';
|
|
8
|
+
import { assertFile, checkDirectory, credentialsPath, readCredentials, writeOneCredentials, clearOneCredentials } from './store.js';
|
|
9
|
+
import { identityProvider, validateIdentityIssuer } from './provider.js';
|
|
10
|
+
export function boundIdentityCredentials(config, one) {
|
|
11
|
+
try {
|
|
12
|
+
return one.clientId === config.clientId && one.resource === validateOneOrigin(config.oneBaseUrl) && one.oneBaseUrl === one.resource && validateIdentityIssuer(one.issuer, config) === one.issuer;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const MAX_LOCK_WAIT_MS = 15_000;
|
|
19
|
+
/** Library callers may omit or mistype timeoutMs; NaN would make the wait unbounded. */
|
|
20
|
+
export function credentialsLockWaitMs(timeoutMs) {
|
|
21
|
+
const requested = typeof timeoutMs === 'number' && Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : DEFAULT_TIMEOUT_MS;
|
|
22
|
+
return Math.min(requested, MAX_LOCK_WAIT_MS);
|
|
23
|
+
}
|
|
24
|
+
/** Never steal a stale lock: a crashed refresh may have consumed the rotating token. */
|
|
25
|
+
export async function withCredentialsLock(config, callback, replaceDeadLock = false) {
|
|
26
|
+
const path = `${credentialsPath(config)}.lock`;
|
|
27
|
+
await checkDirectory(dirname(path), true);
|
|
28
|
+
const deadline = Date.now() + credentialsLockWaitMs(config.timeoutMs);
|
|
29
|
+
let handle;
|
|
30
|
+
for (;;) {
|
|
31
|
+
try {
|
|
32
|
+
handle = await open(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (!(error instanceof Error && 'code' in error && error.code === 'EEXIST'))
|
|
37
|
+
throw error;
|
|
38
|
+
const existing = await lstat(path);
|
|
39
|
+
assertFile(existing);
|
|
40
|
+
if (replaceDeadLock) {
|
|
41
|
+
const existingHandle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
42
|
+
let owner = '';
|
|
43
|
+
try {
|
|
44
|
+
assertFile(await existingHandle.stat());
|
|
45
|
+
owner = await existingHandle.readFile('utf8');
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await existingHandle.close();
|
|
49
|
+
}
|
|
50
|
+
const pid = Number(owner);
|
|
51
|
+
let dead = false;
|
|
52
|
+
if (Number.isSafeInteger(pid) && pid > 0) {
|
|
53
|
+
try {
|
|
54
|
+
process.kill(pid, 0);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
dead = error instanceof Error && 'code' in error && error.code === 'ESRCH';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (dead) {
|
|
61
|
+
const current = await lstat(path);
|
|
62
|
+
if (current.ino === existing.ino && current.dev === existing.dev) {
|
|
63
|
+
await rm(path);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (Date.now() >= deadline)
|
|
69
|
+
throw new Error('Credentials are locked by another command. A crashed refresh requires a new login; do not reuse its refresh token.');
|
|
70
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
await handle.chmod(0o600);
|
|
74
|
+
const info = await handle.stat();
|
|
75
|
+
assertFile(info);
|
|
76
|
+
try {
|
|
77
|
+
await handle.writeFile(String(process.pid));
|
|
78
|
+
await handle.sync();
|
|
79
|
+
return await callback();
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
await handle.close();
|
|
83
|
+
const current = await lstat(path).catch(() => null);
|
|
84
|
+
if (current?.ino === info.ino && current.dev === info.dev)
|
|
85
|
+
await rm(path);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export async function managedAccessToken(config, failedToken) {
|
|
89
|
+
const initial = await readCredentials(config);
|
|
90
|
+
if (initial.version !== 2 || !initial.one || !boundIdentityCredentials(config, initial.one))
|
|
91
|
+
return null;
|
|
92
|
+
if (!failedToken && Date.parse(initial.one.expiresAt ?? '') - Date.now() > 60_000) {
|
|
93
|
+
readIdentityTokenMetadata(initial.one.accessToken, { issuer: initial.one.issuer, clientId: initial.one.clientId, resource: initial.one.resource });
|
|
94
|
+
return initial.one.accessToken;
|
|
95
|
+
}
|
|
96
|
+
return withCredentialsLock(config, async () => {
|
|
97
|
+
const current = await readCredentials(config), one = current.one;
|
|
98
|
+
if (current.version !== 2 || !one || !boundIdentityCredentials(config, one))
|
|
99
|
+
return null;
|
|
100
|
+
if (failedToken && one.accessToken !== failedToken) {
|
|
101
|
+
readIdentityTokenMetadata(one.accessToken, { issuer: one.issuer, clientId: one.clientId, resource: one.resource });
|
|
102
|
+
return one.accessToken;
|
|
103
|
+
}
|
|
104
|
+
if (!failedToken && Date.parse(one.expiresAt ?? '') - Date.now() > 60_000) {
|
|
105
|
+
readIdentityTokenMetadata(one.accessToken, { issuer: one.issuer, clientId: one.clientId, resource: one.resource });
|
|
106
|
+
return one.accessToken;
|
|
107
|
+
}
|
|
108
|
+
if (one.refreshPending)
|
|
109
|
+
throw new Error('A previous refresh has an uncertain result. Run `vigilbase login` again; its token cannot be retried safely.');
|
|
110
|
+
const provider = await identityProvider(config, one.issuer);
|
|
111
|
+
await writeOneCredentials(config, { ...one, refreshPending: true });
|
|
112
|
+
const { response, text } = await requestText(config, provider.tokenEndpoint, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': config.userAgent }, body: new URLSearchParams({ grant_type: 'refresh_token', refresh_token: one.refreshToken, client_id: one.clientId, resource: one.resource }) });
|
|
113
|
+
const body = parseJsonResponse(response, text);
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
if (z.object({ error: z.literal('invalid_grant') }).safeParse(body).success)
|
|
116
|
+
await clearOneCredentials(config);
|
|
117
|
+
throw new Error('Identity refresh failed. Run `vigilbase login` again.');
|
|
118
|
+
}
|
|
119
|
+
const token = z.object({ access_token: z.string().min(1), refresh_token: z.string().min(1), expires_in: z.number().int().positive().max(300), scope: z.string().optional() }).safeParse(body);
|
|
120
|
+
if (!token.success)
|
|
121
|
+
throw new Error('Invalid Identity refresh response.');
|
|
122
|
+
const metadata = readIdentityTokenMetadata(token.data.access_token, { issuer: one.issuer, clientId: one.clientId, resource: one.resource });
|
|
123
|
+
if (one.orgId && metadata.organizationId !== one.orgId)
|
|
124
|
+
throw new Error('Identity refresh changed its bound organization. Run `vigilbase login` again.');
|
|
125
|
+
await writeOneCredentials(config, { ...one, orgId: metadata.organizationId, refreshPending: false, accessToken: token.data.access_token, refreshToken: token.data.refresh_token, expiresAt: new Date(Date.now() + token.data.expires_in * 1000).toISOString(), scope: token.data.scope ?? one.scope });
|
|
126
|
+
return token.data.access_token;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
export async function revokeSavedCredentials(config) {
|
|
130
|
+
return withCredentialsLock(config, async () => {
|
|
131
|
+
const saved = await readCredentials(config);
|
|
132
|
+
if (saved.version === 2 && saved.one) {
|
|
133
|
+
if (!boundIdentityCredentials(config, saved.one))
|
|
134
|
+
throw new Error('Saved credentials belong to a different issuer, resource, or client. Use the matching configuration to log out.');
|
|
135
|
+
const provider = await identityProvider(config, saved.one.issuer);
|
|
136
|
+
const { response } = await requestText(config, provider.revocationEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': config.userAgent }, body: new URLSearchParams({ token: saved.one.refreshToken, token_type_hint: 'refresh_token', client_id: saved.one.clientId }) });
|
|
137
|
+
if (!response.ok)
|
|
138
|
+
throw new Error('Identity revocation failed. Credentials retained so logout can be retried.');
|
|
139
|
+
}
|
|
140
|
+
return clearOneCredentials(config);
|
|
141
|
+
}, true);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/auth/refresh.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/store.d.ts
CHANGED
|
@@ -1,7 +1,32 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Stats } from 'node:fs';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { type CliConfig } from '../lib/config.js';
|
|
2
4
|
import type { CredentialsFile, OneCredentials } from './types.js';
|
|
3
|
-
type CredentialsConfig = Pick<CliConfig, 'configDir'> & Partial<Pick<CliConfig, 'oneBaseUrl'>>;
|
|
5
|
+
type CredentialsConfig = Pick<CliConfig, 'configDir'> & Partial<Pick<CliConfig, 'oneBaseUrl' | 'clientId' | 'identityBaseUrl' | 'timeoutMs' | 'userAgent'>>;
|
|
6
|
+
export declare const OneCredentialsSchema: z.ZodObject<{
|
|
7
|
+
issuer: z.ZodOptional<z.ZodString>;
|
|
8
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
9
|
+
resource: z.ZodOptional<z.ZodString>;
|
|
10
|
+
refreshToken: z.ZodOptional<z.ZodString>;
|
|
11
|
+
refreshTokenExpiresAt: z.ZodOptional<z.ZodString>;
|
|
12
|
+
refreshPending: z.ZodOptional<z.ZodBoolean>;
|
|
13
|
+
orgId: z.ZodOptional<z.ZodString>;
|
|
14
|
+
oneBaseUrl: z.ZodOptional<z.ZodString>;
|
|
15
|
+
accessToken: z.ZodString;
|
|
16
|
+
tokenType: z.ZodOptional<z.ZodString>;
|
|
17
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
18
|
+
expiresAt: z.ZodOptional<z.ZodString>;
|
|
19
|
+
obtainedAt: z.ZodString;
|
|
20
|
+
user: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
id: z.ZodOptional<z.ZodString>;
|
|
22
|
+
email: z.ZodOptional<z.ZodString>;
|
|
23
|
+
name: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>>;
|
|
25
|
+
}, z.core.$strip>;
|
|
4
26
|
export declare function credentialsPath(config: Pick<CliConfig, 'configDir'>): string;
|
|
27
|
+
export declare function assertFile(info: Stats): void;
|
|
28
|
+
/** Check every ancestor before traversing it; a writable non-sticky parent permits replacement. */
|
|
29
|
+
export declare function checkDirectory(configDir: string, isCreate?: boolean): Promise<boolean>;
|
|
5
30
|
export declare function readCredentials(config: Pick<CliConfig, 'configDir'>): Promise<CredentialsFile>;
|
|
6
31
|
export declare function writeOneCredentials(config: CredentialsConfig, one: OneCredentials): Promise<void>;
|
|
7
32
|
export declare function clearOneCredentials(config: Pick<CliConfig, 'configDir'>): Promise<boolean>;
|
package/dist/auth/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAG/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAMjE,KAAK,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,GAAC,UAAU,GAAC,iBAAiB,GAAC,WAAW,GAAC,WAAW,CAAC,CAAC,CAAA;AACnJ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;iBAK/B,CAAA;AAGF,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,MAAM,CAG5E;AASD,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAQ5C;AAED,mGAAmG;AACnG,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA+B1F;AASD,wBAAsB,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBpG;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvG;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhG;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBzF"}
|