oauth2-cli 0.7.3 → 0.8.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/CHANGELOG.md +47 -37
- package/README.md +1 -1
- package/dist/Client.d.ts +12 -9
- package/dist/Client.js +33 -13
- package/dist/Credentials.d.ts +3 -17
- package/dist/{Request/index.d.ts → Export.d.ts} +2 -0
- package/dist/{Request/index.js → Export.js} +2 -0
- package/dist/Extend.d.ts +2 -0
- package/dist/Extend.js +2 -0
- package/dist/Session.d.ts +3 -3
- package/dist/Session.js +1 -2
- package/dist/Token/FileStorage.d.ts +2 -2
- package/dist/Token/{TokenStorage.d.ts → Storage.d.ts} +1 -1
- package/dist/Token/index.d.ts +1 -1
- package/dist/Token/index.js +1 -1
- package/dist/WebServer.js +1 -2
- package/dist/index.d.ts +2 -6
- package/dist/index.js +2 -6
- package/package.json +1 -1
- package/dist/Errors/BadResponse.d.ts +0 -3
- package/dist/Errors/BadResponse.js +0 -7
- package/dist/Errors/IndeterminateConfiguration.d.ts +0 -3
- package/dist/Errors/IndeterminateConfiguration.js +0 -5
- package/dist/Errors/MissingAccessToken.d.ts +0 -3
- package/dist/Errors/MissingAccessToken.js +0 -5
- package/dist/Errors/PortCollision.d.ts +0 -3
- package/dist/Errors/PortCollision.js +0 -5
- package/dist/Errors/index.d.ts +0 -4
- package/dist/Errors/index.js +0 -4
- /package/dist/{Request/Injection.d.ts → Injection.d.ts} +0 -0
- /package/dist/{Request/Injection.js → Injection.js} +0 -0
- /package/dist/{Request/Scope.d.ts → Scope.d.ts} +0 -0
- /package/dist/{Request/Scope.js → Scope.js} +0 -0
- /package/dist/Token/{TokenStorage.js → Storage.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,115 +2,125 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
-
## [0.
|
|
5
|
+
## [0.8.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.7.3...oauth2-cli/0.8.0) (2026-02-17)
|
|
6
6
|
|
|
7
|
+
### ⚠ BREAKING CHANGES
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
- clarify subclass groupings and extensibility
|
|
10
|
+
- simplify credentials structure
|
|
11
|
+
- rename Token.TokenStorage to less redundant Token.Storage
|
|
12
|
+
- simplify namespacing of Injection and Scope
|
|
13
|
+
- improved clarity of errors and causes
|
|
9
14
|
|
|
10
|
-
|
|
15
|
+
### Features
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
- base_url for API requests preempts issuer, if present ([972496a](https://github.com/battis/oauth2-cli/commit/972496a663751c12dce7271b33134c8055d84191))
|
|
18
|
+
- clarify subclass groupings and extensibility ([4fec372](https://github.com/battis/oauth2-cli/commit/4fec372019603c4bfada0e26d1813b3c196db536))
|
|
19
|
+
- rename Token.TokenStorage to less redundant Token.Storage ([149d65a](https://github.com/battis/oauth2-cli/commit/149d65ac218a2c230ed8bca76963e44a5a6ff441))
|
|
20
|
+
- simplify credentials structure ([0e95439](https://github.com/battis/oauth2-cli/commit/0e95439a30f78268ddf7363dc4feeb0b1ff0edba))
|
|
21
|
+
- simplify namespacing of Injection and Scope ([b5db750](https://github.com/battis/oauth2-cli/commit/b5db7503f557a0c2092d327742b1bdd82be0edbb))
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- export Scope without accidentally registering plugin ([3816537](https://github.com/battis/oauth2-cli/commit/38165376d6581b323cbb141a4923cd5613edeb63))
|
|
26
|
+
- improved clarity of errors and causes ([9f1ddce](https://github.com/battis/oauth2-cli/commit/9f1ddcec82c3295e39fc8857784634da072e7570))
|
|
27
|
+
- treat base_url as true base URL ([8a4b76c](https://github.com/battis/oauth2-cli/commit/8a4b76cb48041e31c7d0a72adb0312febad3ff28))
|
|
13
28
|
|
|
29
|
+
## [0.7.3](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.7.2...oauth2-cli/0.7.3) (2026-02-17)
|
|
14
30
|
|
|
15
31
|
### Bug Fixes
|
|
16
32
|
|
|
17
|
-
|
|
33
|
+
- push past failed well-known URL ([48eca87](https://github.com/battis/oauth2-cli/commit/48eca875e9fffe30adc88ad1b5fdf0202722bb12))
|
|
18
34
|
|
|
19
|
-
## [0.7.
|
|
35
|
+
## [0.7.2](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.7.1...oauth2-cli/0.7.2) (2026-02-16)
|
|
20
36
|
|
|
21
|
-
|
|
37
|
+
### Bug Fixes
|
|
22
38
|
|
|
39
|
+
- resolve remaining requestish requests correctly ([2be680c](https://github.com/battis/oauth2-cli/commit/2be680c9575bcfe9e816e450c85b94ccf5c8f950))
|
|
40
|
+
|
|
41
|
+
## [0.7.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.6.0...oauth2-cli/0.7.0) (2026-02-16)
|
|
23
42
|
|
|
24
43
|
### ⚠ BREAKING CHANGES
|
|
25
44
|
|
|
26
|
-
|
|
45
|
+
- make more properties of Client accessible to subclasses
|
|
27
46
|
|
|
28
47
|
### Features
|
|
29
48
|
|
|
30
|
-
|
|
49
|
+
- make more properties of Client accessible to subclasses ([74ef874](https://github.com/battis/oauth2-cli/commit/74ef874804323a9c3c496ddf7b0e24bac9e671e1))
|
|
31
50
|
|
|
32
51
|
## [0.6.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.5.1...oauth2-cli/0.6.0) (2026-02-15)
|
|
33
52
|
|
|
34
|
-
|
|
35
53
|
### ⚠ BREAKING CHANGES
|
|
36
54
|
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
- limit TokenStorage to storing _only_ refresh_tokens
|
|
56
|
+
- improve express shutdown, refactor entire package
|
|
39
57
|
|
|
40
58
|
### Features
|
|
41
59
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
60
|
+
- compatible with @battis/google-cloud-run-to-localhost ([3e449b1](https://github.com/battis/oauth2-cli/commit/3e449b14d546759f7e6543c86350ea83b60a80a7))
|
|
61
|
+
- display authorization starting URL on command line as well as opening browser ([fb72bcf](https://github.com/battis/oauth2-cli/commit/fb72bcffafaf66453f8f8f0f8af4b27ef11827c6))
|
|
62
|
+
- externalize path/port identification to gcrtl ([0f6c28b](https://github.com/battis/oauth2-cli/commit/0f6c28b31a7888eac524b28bcdc9c8eabbf57d91))
|
|
63
|
+
- fallback to package templates if ejs present but no alternative template providedd ([6b05454](https://github.com/battis/oauth2-cli/commit/6b05454976b1fb4144f91ba51fc1c9331f1c0f34))
|
|
64
|
+
- limit TokenStorage to storing _only_ refresh_tokens ([3de9c96](https://github.com/battis/oauth2-cli/commit/3de9c96510d15eebd51a0be7d8df278614541f95))
|
|
48
65
|
|
|
49
66
|
### Bug Fixes
|
|
50
67
|
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
- attempt to authorize and retry when encountering 401 error ([bc75fed](https://github.com/battis/oauth2-cli/commit/bc75fed052b548e41411287f7d98fa78c3f27ee5))
|
|
69
|
+
- improve express shutdown, refactor entire package ([a740313](https://github.com/battis/oauth2-cli/commit/a740313c33d26f07ebab5b282607d8828cf3c3a7))
|
|
53
70
|
|
|
54
71
|
## [0.5.1](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.5.0...oauth2-cli/0.5.1) (2026-01-20)
|
|
55
72
|
|
|
56
|
-
|
|
57
73
|
### Bug Fixes
|
|
58
74
|
|
|
59
|
-
|
|
75
|
+
- allow extending private methods for debugging ([ea9957f](https://github.com/battis/oauth2-cli/commit/ea9957f71629c4a177ebdf6acf0aecaa299a5260))
|
|
60
76
|
|
|
61
77
|
## [0.5.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.4.0...oauth2-cli/0.5.0) (2026-01-14)
|
|
62
78
|
|
|
63
|
-
|
|
64
79
|
### ⚠ BREAKING CHANGES
|
|
65
80
|
|
|
66
|
-
|
|
81
|
+
- move to Node.js v24 support
|
|
67
82
|
|
|
68
83
|
### Features
|
|
69
84
|
|
|
70
|
-
|
|
85
|
+
- move to Node.js v24 support ([03d5cf4](https://github.com/battis/oauth2-cli/commit/03d5cf455e38f7beb2fbf93f1612acb906c5f5a0))
|
|
71
86
|
|
|
72
87
|
## [0.4.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.3.0...oauth2-cli/0.4.0) (2026-01-04)
|
|
73
88
|
|
|
74
|
-
|
|
75
89
|
### ⚠ BREAKING CHANGES
|
|
76
90
|
|
|
77
|
-
|
|
91
|
+
- remove deprecated TokenManager
|
|
78
92
|
|
|
79
93
|
### Features
|
|
80
94
|
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
- provide fetch() and fetchJSON() methods to translate to openid-client requests ([3fe454f](https://github.com/battis/oauth2-cli/commit/3fe454f28497d704041ea4e599a4ad5b2b08b469))
|
|
83
96
|
|
|
84
97
|
### Bug Fixes
|
|
85
98
|
|
|
86
|
-
|
|
99
|
+
- remove deprecated TokenManager ([2dde67e](https://github.com/battis/oauth2-cli/commit/2dde67edd70b151bd1bab6de3845839a06957e65))
|
|
87
100
|
|
|
88
101
|
## [0.3.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.2.3...oauth2-cli/0.3.0) (2025-12-24)
|
|
89
102
|
|
|
90
|
-
|
|
91
103
|
### ⚠ BREAKING CHANGES
|
|
92
104
|
|
|
93
|
-
|
|
105
|
+
- resolve 1Password secret references successfully
|
|
94
106
|
|
|
95
107
|
### Bug Fixes
|
|
96
108
|
|
|
97
|
-
|
|
109
|
+
- resolve 1Password secret references successfully ([c4446e1](https://github.com/battis/oauth2-cli/commit/c4446e197a66271dac3ea8d58ff44725cc6be1db))
|
|
98
110
|
|
|
99
111
|
## [0.2.3](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.2.2...oauth2-cli/0.2.3) (2025-12-23)
|
|
100
112
|
|
|
101
|
-
|
|
102
113
|
### Bug Fixes
|
|
103
114
|
|
|
104
|
-
|
|
115
|
+
- add wildcard param name ([97b2e58](https://github.com/battis/oauth2-cli/commit/97b2e58835941797fce564c736d8c4bd6e3ce97f))
|
|
105
116
|
|
|
106
117
|
## [0.2.2](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.2.1...oauth2-cli/0.2.2) (2025-12-23)
|
|
107
118
|
|
|
108
119
|
## [0.2.1](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.2.0...oauth2-cli/0.2.1) (2025-09-11)
|
|
109
120
|
|
|
110
|
-
|
|
111
121
|
### Bug Fixes
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
- update dependencies to address transient openid-client config error ([f0ca9a8](https://github.com/battis/oauth2-cli/commit/f0ca9a8d2bb4551b80a49e48aa43df5ba66a5a9b))
|
|
114
124
|
|
|
115
125
|
## [0.2.0](https://github.com/battis/oauth2-cli/compare/oauth2-cli/0.1.6...oauth2-cli/0.2.0) (2025-03-09)
|
|
116
126
|
|
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ Broadly speaking, having provided the configuration, the client is immediately r
|
|
|
39
39
|
|
|
40
40
|
A `Client` requires some minimal information in order to interact with an OAuth 2.0 authorized API. The OAuth 2.0 base set is a `client_id`, `client_secret`, `authorization_endpoint`, `token_endpoint`, and a `redirect_uri`. For an OpenID-authenticated API, you could provide a `client_id`, `client_secret`, `issuer`, and `redirect_uri` and the Client will query the issuer for further details regarding required connection parameters (it is built on to of [openid-client](https://www.npmjs.com/package/openid-client)).
|
|
41
41
|
|
|
42
|
-
In both cases, the token can be persisted by passing an implementation of [`
|
|
42
|
+
In both cases, the token can be persisted by passing an implementation of [`Token.Storage`](https://github.com/battis/oauth2-cli/blob/main/packages/oauth2-cli/src/Token/TokenStorage.ts), such as [`FileStorage`](https://github.com/battis/oauth2-cli/blob/main/packages/oauth2-cli/src/Token/FileStorage.ts) which expects a path to a location to store a JSON file of access token data. _There are more secure ways to store your tokens, such as [@oauth2-cli/qui-cli](https://www.npmjs.com/package/@oauth2-cli/qui-cli)'s [`EnvironmentStorage`](https://github.com/battis/oauth2-cli/blob/main/packages/qui-cli/src/EnvironmentStorage.ts) which can be linked to a [1Password vault](https://github.com/battis/qui-cli/tree/main/packages/env#1password-integration)._
|
|
43
43
|
|
|
44
44
|
#### `redirect_uri` to Localhost
|
|
45
45
|
|
package/dist/Client.d.ts
CHANGED
|
@@ -3,8 +3,8 @@ import { Request } from 'express';
|
|
|
3
3
|
import { EventEmitter } from 'node:events';
|
|
4
4
|
import * as OpenIDClient from 'openid-client';
|
|
5
5
|
import * as requestish from 'requestish';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
6
|
+
import { Credentials } from './Credentials.js';
|
|
7
|
+
import { Injection } from './Injection.js';
|
|
8
8
|
import { Session, SessionOptions } from './Session.js';
|
|
9
9
|
import * as Token from './Token/index.js';
|
|
10
10
|
/**
|
|
@@ -14,20 +14,22 @@ import * as Token from './Token/index.js';
|
|
|
14
14
|
export declare const DEFAULT_REDIRECT_URI = "http://localhost:3000/oauth2-cli/redirect";
|
|
15
15
|
export type ClientOptions = {
|
|
16
16
|
/** Credentials for server access */
|
|
17
|
-
credentials: Credentials
|
|
17
|
+
credentials: Credentials;
|
|
18
18
|
/** Optional request components to inject */
|
|
19
19
|
inject?: {
|
|
20
20
|
search?: requestish.URLSearchParams.ish;
|
|
21
21
|
headers?: requestish.Headers.ish;
|
|
22
22
|
body?: requestish.Body.ish;
|
|
23
23
|
};
|
|
24
|
+
/** Base URL for all non-absolute requests */
|
|
25
|
+
base_url?: requestish.URL.ish;
|
|
24
26
|
/**
|
|
25
27
|
* Optional absolute path to EJS view templates directory, see
|
|
26
28
|
* [WebServer.setViews()](./Webserver.ts)
|
|
27
29
|
*/
|
|
28
30
|
views?: PathString;
|
|
29
31
|
/** Optional {@link TokenStorage} implementation to manage tokens */
|
|
30
|
-
storage?: Token.
|
|
32
|
+
storage?: Token.Storage;
|
|
31
33
|
};
|
|
32
34
|
type RefreshOptions = {
|
|
33
35
|
/**
|
|
@@ -38,7 +40,7 @@ type RefreshOptions = {
|
|
|
38
40
|
*/
|
|
39
41
|
refresh_token?: string;
|
|
40
42
|
/** Additional request injection for refresh grant flow */
|
|
41
|
-
inject?:
|
|
43
|
+
inject?: Injection;
|
|
42
44
|
};
|
|
43
45
|
type GetTokenOptions = {
|
|
44
46
|
/**
|
|
@@ -52,7 +54,7 @@ type GetTokenOptions = {
|
|
|
52
54
|
* Additional request injection for authorization code grant and/or refresh
|
|
53
55
|
* grant flows
|
|
54
56
|
*/
|
|
55
|
-
inject?:
|
|
57
|
+
inject?: Injection;
|
|
56
58
|
};
|
|
57
59
|
/**
|
|
58
60
|
* Wrap {@link https://www.npmjs.com/package/openid-client openid-client} in a
|
|
@@ -63,14 +65,15 @@ type GetTokenOptions = {
|
|
|
63
65
|
*/
|
|
64
66
|
export declare class Client extends EventEmitter {
|
|
65
67
|
static readonly TokenEvent = "token";
|
|
66
|
-
protected credentials: Credentials
|
|
68
|
+
protected credentials: Credentials;
|
|
69
|
+
protected base_url?: requestish.URL.ish;
|
|
67
70
|
protected config?: OpenIDClient.Configuration;
|
|
71
|
+
protected inject?: Injection;
|
|
68
72
|
protected views?: PathString;
|
|
69
|
-
protected inject?: Req.Injection;
|
|
70
73
|
private token?;
|
|
71
74
|
private tokenLock;
|
|
72
75
|
private storage?;
|
|
73
|
-
constructor({ credentials, views, inject, storage }: ClientOptions);
|
|
76
|
+
constructor({ credentials, base_url, views, inject, storage }: ClientOptions);
|
|
74
77
|
get redirect_uri(): requestish.URL.ish;
|
|
75
78
|
/**
|
|
76
79
|
* @throws IndeterminateConfiguration if provided credentials combined with
|
package/dist/Client.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Mutex } from 'async-mutex';
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
|
+
import path from 'node:path';
|
|
3
4
|
import * as OpenIDClient from 'openid-client';
|
|
4
5
|
import * as requestish from 'requestish';
|
|
5
|
-
import * as
|
|
6
|
-
import * as Req from './Request/index.js';
|
|
6
|
+
import * as Scope from './Scope.js';
|
|
7
7
|
import { Session } from './Session.js';
|
|
8
8
|
/**
|
|
9
9
|
* A generic `redirect_uri` to use if the server does not require pre-registered
|
|
@@ -20,15 +20,17 @@ export const DEFAULT_REDIRECT_URI = 'http://localhost:3000/oauth2-cli/redirect';
|
|
|
20
20
|
export class Client extends EventEmitter {
|
|
21
21
|
static TokenEvent = 'token';
|
|
22
22
|
credentials;
|
|
23
|
+
base_url;
|
|
23
24
|
config;
|
|
24
|
-
views;
|
|
25
25
|
inject;
|
|
26
|
+
views;
|
|
26
27
|
token;
|
|
27
28
|
tokenLock = new Mutex();
|
|
28
29
|
storage;
|
|
29
|
-
constructor({ credentials, views, inject, storage }) {
|
|
30
|
+
constructor({ credentials, base_url, views, inject, storage }) {
|
|
30
31
|
super();
|
|
31
32
|
this.credentials = credentials;
|
|
33
|
+
this.base_url = base_url;
|
|
32
34
|
this.views = views;
|
|
33
35
|
this.inject = inject;
|
|
34
36
|
this.storage = storage;
|
|
@@ -41,12 +43,13 @@ export class Client extends EventEmitter {
|
|
|
41
43
|
* OpenID discovery fail to generate a complete configuration
|
|
42
44
|
*/
|
|
43
45
|
async getConfiguration() {
|
|
46
|
+
let error = undefined;
|
|
44
47
|
if (!this.config && this.credentials.issuer) {
|
|
45
48
|
try {
|
|
46
49
|
this.config = await OpenIDClient.discovery(requestish.URL.from(this.credentials.issuer), this.credentials.client_id, { client_secret: this.credentials.client_secret });
|
|
47
50
|
}
|
|
48
|
-
catch (
|
|
49
|
-
|
|
51
|
+
catch (e) {
|
|
52
|
+
error = e;
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
if (!this.config && this.credentials?.authorization_endpoint) {
|
|
@@ -58,7 +61,12 @@ export class Client extends EventEmitter {
|
|
|
58
61
|
}, this.credentials.client_id, { client_secret: this.credentials.client_secret });
|
|
59
62
|
}
|
|
60
63
|
if (!this.config) {
|
|
61
|
-
throw new
|
|
64
|
+
throw new Error('The client configuration could not be constructed from provided credentials.', {
|
|
65
|
+
cause: {
|
|
66
|
+
credentials: this.credentials,
|
|
67
|
+
'OpenID configuration result': error
|
|
68
|
+
}
|
|
69
|
+
});
|
|
62
70
|
}
|
|
63
71
|
return this.config;
|
|
64
72
|
}
|
|
@@ -69,7 +77,7 @@ export class Client extends EventEmitter {
|
|
|
69
77
|
params.set('code_challenge_method', 'S256');
|
|
70
78
|
params.set('state', session.state);
|
|
71
79
|
if (this.credentials.scope) {
|
|
72
|
-
params.set('scope',
|
|
80
|
+
params.set('scope', Scope.toString(this.credentials.scope));
|
|
73
81
|
}
|
|
74
82
|
return params;
|
|
75
83
|
}
|
|
@@ -139,7 +147,9 @@ export class Client extends EventEmitter {
|
|
|
139
147
|
async save(token) {
|
|
140
148
|
this.token = token;
|
|
141
149
|
if (!token.access_token) {
|
|
142
|
-
throw new
|
|
150
|
+
throw new Error('No access_token in response.', {
|
|
151
|
+
cause: token
|
|
152
|
+
});
|
|
143
153
|
}
|
|
144
154
|
if (this.storage && this.token.refresh_token) {
|
|
145
155
|
await this.storage.save(this.token.refresh_token);
|
|
@@ -160,11 +170,19 @@ export class Client extends EventEmitter {
|
|
|
160
170
|
url = requestish.URL.from(url);
|
|
161
171
|
}
|
|
162
172
|
catch (error) {
|
|
163
|
-
if (this.credentials.issuer) {
|
|
164
|
-
url =
|
|
173
|
+
if (this.base_url || this.credentials.issuer) {
|
|
174
|
+
url = path.join(
|
|
175
|
+
// @ts-expect-error 2345 TS, I _just_ tested this!
|
|
176
|
+
requestish.URL.toString(this.base_url || this.credentials.issuer), requestish.URL.toString(url).replace(/^\/?/, ''));
|
|
165
177
|
}
|
|
166
178
|
else {
|
|
167
|
-
throw
|
|
179
|
+
throw new Error(`Invalid request URL "${url}"`, {
|
|
180
|
+
cause: {
|
|
181
|
+
base_url: this.base_url,
|
|
182
|
+
issuer: this.credentials.issuer,
|
|
183
|
+
error
|
|
184
|
+
}
|
|
185
|
+
});
|
|
168
186
|
}
|
|
169
187
|
}
|
|
170
188
|
const request = async () => await OpenIDClient.fetchProtectedResource(await this.getConfiguration(), (await this.getToken()).access_token, requestish.URL.from(requestish.URLSearchParams.appendTo(url, this.inject?.search || {})), method, body, requestish.Headers.merge(this.inject?.headers, headers), dPoPOptions);
|
|
@@ -189,7 +207,9 @@ export class Client extends EventEmitter {
|
|
|
189
207
|
return (await response.json());
|
|
190
208
|
}
|
|
191
209
|
else {
|
|
192
|
-
throw new
|
|
210
|
+
throw new Error('The response could not be parsed as JSON.', {
|
|
211
|
+
cause: response
|
|
212
|
+
});
|
|
193
213
|
}
|
|
194
214
|
}
|
|
195
215
|
/**
|
package/dist/Credentials.d.ts
CHANGED
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import * as requestish from 'requestish';
|
|
2
|
-
import * as
|
|
3
|
-
export type
|
|
2
|
+
import * as Scope from './Scope.js';
|
|
3
|
+
export type Credentials = {
|
|
4
4
|
client_id: string;
|
|
5
5
|
client_secret: string;
|
|
6
6
|
redirect_uri: requestish.URL.ish;
|
|
7
|
-
|
|
8
|
-
token_endpoint: requestish.URL.ish;
|
|
9
|
-
scope?: Req.Scope.ish;
|
|
10
|
-
};
|
|
11
|
-
export type OpenID = {
|
|
12
|
-
issuer: requestish.URL.ish;
|
|
13
|
-
client_id: string;
|
|
14
|
-
client_secret: string;
|
|
15
|
-
redirect_uri: requestish.URL.ish;
|
|
16
|
-
};
|
|
17
|
-
export type Combined = {
|
|
18
|
-
client_id: string;
|
|
19
|
-
client_secret: string;
|
|
20
|
-
redirect_uri: requestish.URL.ish;
|
|
21
|
-
scope?: Req.Scope.ish;
|
|
7
|
+
scope?: Scope.ish;
|
|
22
8
|
} & ({
|
|
23
9
|
issuer?: requestish.URL.ish;
|
|
24
10
|
authorization_endpoint: requestish.URL.ish;
|
package/dist/Extend.d.ts
ADDED
package/dist/Extend.js
ADDED
package/dist/Session.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PathString } from '@battis/descriptive-types';
|
|
2
2
|
import { Request } from 'express';
|
|
3
3
|
import { Client } from './Client.js';
|
|
4
|
-
import
|
|
4
|
+
import { Injection } from './Injection.js';
|
|
5
5
|
import * as Token from './Token/index.js';
|
|
6
6
|
import * as WebServer from './WebServer.js';
|
|
7
7
|
export type SessionOptions = {
|
|
@@ -9,7 +9,7 @@ export type SessionOptions = {
|
|
|
9
9
|
/** See {@link WebServer.setViews Webserver.setViews()} */
|
|
10
10
|
views?: PathString;
|
|
11
11
|
/** Additional request injection for authorization code grant flow */
|
|
12
|
-
inject?:
|
|
12
|
+
inject?: Injection;
|
|
13
13
|
};
|
|
14
14
|
export type Resolver = (response?: Token.Response, error?: Error) => void | Promise<void>;
|
|
15
15
|
export declare class Session {
|
|
@@ -20,7 +20,7 @@ export declare class Session {
|
|
|
20
20
|
/** OAuth 2.0 state (if PKCE is not supported) */
|
|
21
21
|
readonly state: string;
|
|
22
22
|
/** Additional request injection for Authorization Code Grant request */
|
|
23
|
-
readonly inject?:
|
|
23
|
+
readonly inject?: Injection;
|
|
24
24
|
private _resolve?;
|
|
25
25
|
private spinner?;
|
|
26
26
|
/**
|
package/dist/Session.js
CHANGED
|
@@ -3,7 +3,6 @@ import * as gcrtl from 'gcrtl';
|
|
|
3
3
|
import open from 'open';
|
|
4
4
|
import * as OpenIDClient from 'openid-client';
|
|
5
5
|
import ora from 'ora';
|
|
6
|
-
import * as Errors from './Errors/index.js';
|
|
7
6
|
import * as WebServer from './WebServer.js';
|
|
8
7
|
export class Session {
|
|
9
8
|
client;
|
|
@@ -49,7 +48,7 @@ export class Session {
|
|
|
49
48
|
resolve(response);
|
|
50
49
|
}
|
|
51
50
|
else {
|
|
52
|
-
reject(new
|
|
51
|
+
reject(new Error('Authorization Code Grant response undefined.'));
|
|
53
52
|
}
|
|
54
53
|
};
|
|
55
54
|
const url = gcrtl
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class FileStorage implements
|
|
1
|
+
import { Storage } from './Storage.js';
|
|
2
|
+
export declare class FileStorage implements Storage {
|
|
3
3
|
private fileLock;
|
|
4
4
|
private readonly filePath;
|
|
5
5
|
constructor(filePath: string);
|
package/dist/Token/index.d.ts
CHANGED
package/dist/Token/index.js
CHANGED
package/dist/WebServer.js
CHANGED
|
@@ -3,7 +3,6 @@ import * as gcrtl from 'gcrtl';
|
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import * as requestish from 'requestish';
|
|
6
|
-
import * as Errors from './Errors/index.js';
|
|
7
6
|
let ejs = undefined;
|
|
8
7
|
try {
|
|
9
8
|
ejs = (await import('ejs')).default;
|
|
@@ -31,7 +30,7 @@ export class WebServer {
|
|
|
31
30
|
const url = requestish.URL.from(this.session.redirect_uri);
|
|
32
31
|
this.port = url.port;
|
|
33
32
|
if (WebServer.activePorts.includes(this.port)) {
|
|
34
|
-
throw new
|
|
33
|
+
throw new Error(`Another process is already running at http://localhost:${url.port}.`, { cause: { activePorts: WebServer.activePorts } });
|
|
35
34
|
}
|
|
36
35
|
WebServer.activePorts.push(this.port);
|
|
37
36
|
const app = express();
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export *
|
|
3
|
-
export * as Errors from './Errors/index.js';
|
|
4
|
-
export * as Request from './Request/index.js';
|
|
5
|
-
export * as Token from './Token/index.js';
|
|
6
|
-
export * from './WebServer.js';
|
|
1
|
+
export * from './Export.js';
|
|
2
|
+
export * from './Extend.js';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export *
|
|
3
|
-
export * as Errors from './Errors/index.js';
|
|
4
|
-
export * as Request from './Request/index.js';
|
|
5
|
-
export * as Token from './Token/index.js';
|
|
6
|
-
export * from './WebServer.js';
|
|
1
|
+
export * from './Export.js';
|
|
2
|
+
export * from './Extend.js';
|
package/package.json
CHANGED
package/dist/Errors/index.d.ts
DELETED
package/dist/Errors/index.js
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|