@mcp-abap-adt/auth-broker 4.0.0 → 5.0.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 +273 -1
- package/README.md +1028 -908
- package/dist/AuthBroker.d.ts +353 -99
- package/dist/AuthBroker.d.ts.map +1 -1
- package/dist/AuthBroker.js +806 -258
- package/dist/DestinationConfigError.d.ts +35 -6
- package/dist/DestinationConfigError.d.ts.map +1 -1
- package/dist/DestinationConfigError.js +51 -9
- package/dist/SessionWriter.d.ts +70 -33
- package/dist/SessionWriter.d.ts.map +1 -1
- package/dist/SessionWriter.js +118 -94
- package/dist/binding.d.ts +137 -64
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +330 -131
- package/dist/bindingOf.d.ts +33 -14
- package/dist/bindingOf.d.ts.map +1 -1
- package/dist/bindingOf.js +50 -20
- package/dist/buildIdentity.d.ts +137 -0
- package/dist/buildIdentity.d.ts.map +1 -0
- package/dist/buildIdentity.js +393 -0
- package/dist/clientAuthentication.d.ts +124 -0
- package/dist/clientAuthentication.d.ts.map +1 -0
- package/dist/clientAuthentication.js +218 -0
- package/dist/contractShape.d.ts +24 -0
- package/dist/contractShape.d.ts.map +1 -0
- package/dist/contractShape.js +24 -0
- package/dist/destinations.d.ts +174 -53
- package/dist/destinations.d.ts.map +1 -1
- package/dist/destinations.js +460 -150
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/quietLogger.d.ts +24 -0
- package/dist/quietLogger.d.ts.map +1 -0
- package/dist/quietLogger.js +63 -0
- package/package.json +9 -7
package/dist/destinations.d.ts
CHANGED
|
@@ -4,18 +4,40 @@
|
|
|
4
4
|
* Two fields choose the provider — `authType` and, for `jwt` and `saml`,
|
|
5
5
|
* `grantType` — and nothing else: no field's presence or absence is ever
|
|
6
6
|
* read to pick a row. Both come from the key store's means.
|
|
7
|
+
*
|
|
8
|
+
* Every token row takes the consumer's `renewal` (called once per build, with
|
|
9
|
+
* the destination and its grant) and persists through auth-providers'
|
|
10
|
+
* `refreshStatePersistence` over the broker's write, governed by the
|
|
11
|
+
* consumer's `onWriteFailure`; a row built without either is refused naming
|
|
12
|
+
* it, beside every other missing field, in one error. A failure the broker
|
|
13
|
+
* reads — the SNC provider's, a validator's, a provider constructor's — is
|
|
14
|
+
* read through auth-errors (`readFailure`) and carried by the
|
|
15
|
+
* `DestinationConfigError`, never matched by class.
|
|
7
16
|
*/
|
|
8
|
-
import { type IDeviceCodePresenter, type OidcCallbackResult } from '@mcp-abap-adt/auth-providers';
|
|
9
|
-
import type { IAssertionReplayStore, IAuthorizationStrategy, IAuthProvider,
|
|
17
|
+
import { type IDeviceCodePresenter, type OidcCallbackResult, type PersistedTokens } from '@mcp-abap-adt/auth-providers';
|
|
18
|
+
import type { IAssertionReplayStore, IAuthorizationStrategy, IAuthProvider, IClientAuthentication, IRenewalStrategy } from '@mcp-abap-adt/interfaces-auth';
|
|
10
19
|
import type { DestinationGrant, IConfig, IConnectionConfig } from '@mcp-abap-adt/interfaces-auth-broker';
|
|
11
20
|
import type { IAuthorizationConfig } from '@mcp-abap-adt/interfaces-auth-sap';
|
|
12
21
|
import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
|
|
13
22
|
import { type Binding } from './binding';
|
|
23
|
+
import type { ClientIdentity } from './clientAuthentication';
|
|
24
|
+
import { DestinationConfigError } from './DestinationConfigError';
|
|
14
25
|
type StatedAuthType = NonNullable<IConnectionConfig['authType']>;
|
|
26
|
+
/**
|
|
27
|
+
* `authType` and `grantType` are a `jwt` / `saml` pair of the closed list —
|
|
28
|
+
* so neither holds `;` or `/`. Never throws.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isStatedRow(authType: unknown, grant: unknown): grant is DestinationGrant & string;
|
|
15
31
|
/** The stated `authType`, or the error naming it. */
|
|
16
32
|
export declare function statedAuthType(destination: string, means: IConnectionConfig | null): StatedAuthType;
|
|
17
33
|
/** The stated grant of a `jwt` or `saml` destination, or the error naming it. */
|
|
18
34
|
export declare function statedGrant(destination: string, authType: 'jwt' | 'saml', means: IConnectionConfig): DestinationGrant;
|
|
35
|
+
/**
|
|
36
|
+
* A row's client: the key store's secret client, or — on the strategy path
|
|
37
|
+
* without one — the certificate client's identity, which carries no secret
|
|
38
|
+
* field at all, so it can never pass for a (public) secret client.
|
|
39
|
+
*/
|
|
40
|
+
export type RowClient = IAuthorizationConfig | ClientIdentity;
|
|
19
41
|
/** `basic` → `BasicAuthProvider(username, password)`, from the means alone. */
|
|
20
42
|
export declare function basicProvider(destination: string, means: IConnectionConfig): IAuthProvider;
|
|
21
43
|
/**
|
|
@@ -24,96 +46,192 @@ export declare function basicProvider(destination: string, means: IConnectionCon
|
|
|
24
46
|
* `sncLib` is absent and the user's name taken from the credential when
|
|
25
47
|
* `sncMyName` is, and the provider documents its own `qop` default.
|
|
26
48
|
*/
|
|
27
|
-
export declare function sncProvider(destination: string, means: IConnectionConfig, logger: ILogger): IAuthProvider;
|
|
49
|
+
export declare function sncProvider(destination: string, means: IConnectionConfig, logger: ILogger): IAuthProvider & Attachable;
|
|
28
50
|
/**
|
|
29
51
|
* `none` → the credential handed over, from the session: the only way in, so
|
|
30
52
|
* required. Read from the secret alone — the means are not a seed.
|
|
31
53
|
*
|
|
32
54
|
* The broker did not obtain it and cannot obtain it again, so a binding that
|
|
33
|
-
* does not match is refused, never discarded: `issuedFor`
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
55
|
+
* does not match is refused, never discarded: `issuedFor` must equal the
|
|
56
|
+
* destination's resource — it is what stops the credential going to another
|
|
57
|
+
* one — and `issuedBy` must be exactly the row's record: a credential
|
|
58
|
+
* handed over with a 4.x binding, or none, is refused until it is written
|
|
59
|
+
* again with 5.0.0's `bindingOf`.
|
|
37
60
|
*/
|
|
38
61
|
export declare function handedOverProvider(destination: string, authType: 'jwt' | 'saml', secret: IConfig | null, binding: Binding): IAuthProvider;
|
|
62
|
+
/** Every grant that obtains a secret: `DestinationGrant` without `'none'`. */
|
|
63
|
+
export type TokenGrant = Exclude<DestinationGrant, 'none'>;
|
|
64
|
+
/**
|
|
65
|
+
* A provider that has parties: every token provider
|
|
66
|
+
* (`BaseTokenProvider.attach`) and the SNC one (`SncLogonProvider.attach`).
|
|
67
|
+
*/
|
|
68
|
+
export interface Attachable {
|
|
69
|
+
attach(signal: AbortSignal): () => void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A token row's provider, and the refresh token the builder handed it from
|
|
73
|
+
* the session — the very value in the provider's config, so what the broker
|
|
74
|
+
* takes as the refresh token the build owns at its start is what the
|
|
75
|
+
* provider was given, for every grant, and cannot drift from it:
|
|
76
|
+
* `client_credentials` is handed none (its row takes no seed), `saml2_pure`
|
|
77
|
+
* none (it holds cookies), and a build that started with nothing none.
|
|
78
|
+
*/
|
|
79
|
+
export interface RowBuild {
|
|
80
|
+
/** A token provider: it has parties. */
|
|
81
|
+
readonly provider: IAuthProvider & Attachable;
|
|
82
|
+
readonly seededRefreshToken: string | undefined;
|
|
83
|
+
}
|
|
84
|
+
/** How the consumer's `renewal` option is shaped. */
|
|
85
|
+
export type RenewalOption = (destination: string, grant: TokenGrant) => IRenewalStrategy;
|
|
86
|
+
/**
|
|
87
|
+
* What every token row takes from the broker beside its own data: the
|
|
88
|
+
* consumer's `renewal` and `onWriteFailure` (each refused by name when
|
|
89
|
+
* absent) and the broker's one write of the destination's session.
|
|
90
|
+
*/
|
|
91
|
+
export interface TokenRowOptions {
|
|
92
|
+
renewal: RenewalOption | undefined;
|
|
93
|
+
onWriteFailure: 'fail' | 'continue' | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* One session write for the destination: resolves when it landed, rejects
|
|
96
|
+
* with the store's error when it did not.
|
|
97
|
+
*/
|
|
98
|
+
write: (tokens: PersistedTokens) => Promise<void>;
|
|
99
|
+
logger: ILogger;
|
|
100
|
+
/**
|
|
101
|
+
* The consumer's `authDebug === true`, decided once by the broker: every
|
|
102
|
+
* token provider a row builds is given it.
|
|
103
|
+
*/
|
|
104
|
+
authDebug: boolean;
|
|
105
|
+
}
|
|
106
|
+
/** `onWriteFailure` as given: `'fail'` or `'continue'`, nothing else. */
|
|
107
|
+
export declare function isWriteFailurePolicy(value: unknown): value is 'fail' | 'continue';
|
|
108
|
+
/**
|
|
109
|
+
* The consumer options a token row lacks, by name: `renewal` when it is no
|
|
110
|
+
* function, `onWriteFailure` when it is neither `'fail'` nor `'continue'`.
|
|
111
|
+
* There is no default for either.
|
|
112
|
+
*/
|
|
113
|
+
export declare function optionsLacking(options: Pick<TokenRowOptions, 'renewal' | 'onWriteFailure'>): string[];
|
|
39
114
|
/** The UAA grants: one client, one token endpoint (`<uaaUrl>/oauth/token`). */
|
|
40
115
|
export type UaaGrant = 'authorization_code' | 'client_credentials' | 'passcode';
|
|
41
116
|
export declare function isUaaGrant(grant: DestinationGrant): grant is UaaGrant;
|
|
42
|
-
/**
|
|
43
|
-
|
|
117
|
+
/**
|
|
118
|
+
* What a token row's check reads of its client and options. `client`
|
|
119
|
+
* `undefined` means "not known yet": the consumer's `clientAuthentication`
|
|
120
|
+
* strategy will tell the client identity, so its fields are not judged.
|
|
121
|
+
*/
|
|
122
|
+
interface ClientCheck {
|
|
44
123
|
destination: string;
|
|
124
|
+
client: RowClient | null | undefined;
|
|
125
|
+
/** Whether the client authenticates through the consumer's strategy. */
|
|
126
|
+
clientAuthenticated: boolean;
|
|
127
|
+
renewal: RenewalOption | undefined;
|
|
128
|
+
onWriteFailure: 'fail' | 'continue' | undefined;
|
|
129
|
+
}
|
|
130
|
+
/** What a UAA row's check reads. */
|
|
131
|
+
export interface UaaCheck extends ClientCheck {
|
|
45
132
|
grant: UaaGrant;
|
|
46
|
-
/** The client, from the key store's `getAuthorizationConfig`. */
|
|
47
|
-
client: IAuthorizationConfig | null;
|
|
48
|
-
/** The session secret — the seed; `null` when there is no session. */
|
|
49
|
-
secret: IConfig | null;
|
|
50
133
|
/** The consumer's `authorization` option. */
|
|
51
134
|
authorization: ((destination: string, grant: 'authorization_code' | 'passcode') => IAuthorizationStrategy<string>) | undefined;
|
|
52
|
-
|
|
53
|
-
|
|
135
|
+
}
|
|
136
|
+
/** What a UAA row is built from. */
|
|
137
|
+
export interface UaaRow extends Omit<UaaCheck, 'client' | 'clientAuthenticated'>, TokenRowOptions {
|
|
138
|
+
/**
|
|
139
|
+
* The client: the key store's `getAuthorizationConfig` — or, with a
|
|
140
|
+
* strategy and no secret client, the certificate client's identity.
|
|
141
|
+
*/
|
|
142
|
+
client: RowClient | null;
|
|
143
|
+
/** The session secret — the seed; `null` when there is no session. */
|
|
144
|
+
secret: IConfig | null;
|
|
145
|
+
/**
|
|
146
|
+
* The consumer strategy's answer. Given, the provider authenticates its
|
|
147
|
+
* client with it and gets no `clientSecret`; absent, 4.0.0's secret.
|
|
148
|
+
*/
|
|
149
|
+
clientAuthentication?: IClientAuthentication;
|
|
54
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Every field and option a UAA row lacks, named in one error — or nothing.
|
|
153
|
+
* `serviceUrl` is not among them: the providers read the client and `uaaUrl`
|
|
154
|
+
* only. Without a strategy, `uaaClientSecret: ''` is a public client:
|
|
155
|
+
* `passcode` takes it as no secret; the other two rows' providers require a
|
|
156
|
+
* secret, so for them `''` is missing.
|
|
157
|
+
*/
|
|
158
|
+
export declare function uaaRefusal(check: UaaCheck): DestinationConfigError | undefined;
|
|
55
159
|
/**
|
|
56
160
|
* `jwt` / `authorization_code` → `AuthorizationCodeProvider`,
|
|
57
161
|
* `client_credentials` → `ClientCredentialsProvider`, `passcode` →
|
|
58
162
|
* `UaaPasscodeProvider`: the client from the key store, the seed from the
|
|
59
|
-
* session (not for `client_credentials`, whose row takes the client alone)
|
|
163
|
+
* session (not for `client_credentials`, whose row takes the client alone),
|
|
164
|
+
* the consumer's renewal for this grant, and the broker's persistence.
|
|
60
165
|
*
|
|
61
|
-
* Every field and option the row lacks is named in one error
|
|
62
|
-
* consumer's `authorization`
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
166
|
+
* Every field and option the row lacks is named in one error
|
|
167
|
+
* (`uaaRefusal`), before the consumer's `authorization` or `renewal` is
|
|
168
|
+
* called. On the strategy path the client may be a certificate client's
|
|
169
|
+
* identity, which holds no secret field at all (`RowClient`). With the
|
|
170
|
+
* strategy's answer (`clientAuthentication`) no secret is required and none
|
|
171
|
+
* is passed: the provider authenticates its client with the answer.
|
|
66
172
|
*/
|
|
67
|
-
export declare function uaaProvider(row: UaaRow):
|
|
173
|
+
export declare function uaaProvider(row: UaaRow): RowBuild;
|
|
68
174
|
/** The OIDC grants: a client, and an issuer or explicit endpoints. */
|
|
69
175
|
export type OidcGrant = 'oidc_authorization_code' | 'device_code' | 'password' | 'token_exchange';
|
|
70
176
|
export declare function isOidcGrant(grant: DestinationGrant): grant is OidcGrant;
|
|
71
|
-
/** What an OIDC row
|
|
72
|
-
export interface
|
|
73
|
-
destination: string;
|
|
177
|
+
/** What an OIDC row's check reads. */
|
|
178
|
+
export interface OidcCheck extends ClientCheck {
|
|
74
179
|
grant: OidcGrant;
|
|
75
180
|
means: IConnectionConfig;
|
|
181
|
+
oidcAuthorization: ((destination: string) => IAuthorizationStrategy<OidcCallbackResult>) | undefined;
|
|
182
|
+
deviceCodePresenter: ((destination: string) => IDeviceCodePresenter) | undefined;
|
|
183
|
+
}
|
|
184
|
+
/** What an OIDC row is built from. */
|
|
185
|
+
export interface OidcRow extends Omit<OidcCheck, 'client' | 'clientAuthenticated'>, TokenRowOptions {
|
|
76
186
|
/** The client, from the key store's `getAuthorizationConfig`. */
|
|
77
|
-
client:
|
|
187
|
+
client: RowClient | null;
|
|
78
188
|
/** The session secret — the seed; `null` when there is none, or it is not bound here. */
|
|
79
189
|
secret: IConfig | null;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
logger: ILogger;
|
|
83
|
-
onTokens: (result: ITokenResult) => Promise<void>;
|
|
190
|
+
/** The consumer strategy's answer: given, it replaces the secret. */
|
|
191
|
+
clientAuthentication?: IClientAuthentication;
|
|
84
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Every field and option an OIDC row lacks, named in one error — or nothing.
|
|
195
|
+
* The endpoints: `oidcIssuerUrl`, from which the provider discovers them, or
|
|
196
|
+
* every explicit endpoint the row uses — without either the error names the
|
|
197
|
+
* issuer and the endpoints missing.
|
|
198
|
+
*/
|
|
199
|
+
export declare function oidcRefusal(check: OidcCheck): DestinationConfigError | undefined;
|
|
85
200
|
/**
|
|
86
201
|
* `jwt` / `oidc_authorization_code` → `OidcBrowserProvider`, `device_code` →
|
|
87
202
|
* `OidcDeviceFlowProvider`, `password` → `OidcPasswordProvider`,
|
|
88
203
|
* `token_exchange` → `OidcTokenExchangeProvider`: the client id (and secret,
|
|
89
204
|
* `''` being a public client) from the key store's client, the grant's data
|
|
90
|
-
* from its `oidc*` fields, the seed from the session
|
|
205
|
+
* from its `oidc*` fields, the seed from the session, the consumer's renewal
|
|
206
|
+
* for this grant, and the broker's persistence.
|
|
91
207
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* named in one error, before any collaborator is called. `token_exchange`
|
|
96
|
-
* takes one scope string: the stored scopes joined by a space.
|
|
208
|
+
* Every field and option the row lacks is named in one error
|
|
209
|
+
* (`oidcRefusal`), before any collaborator is called. `token_exchange` takes
|
|
210
|
+
* one scope string: the stored scopes joined by a space.
|
|
97
211
|
*/
|
|
98
|
-
export declare function oidcProvider(row: OidcRow):
|
|
212
|
+
export declare function oidcProvider(row: OidcRow): RowBuild;
|
|
99
213
|
/** The SAML grants: an identity provider's assertion, validated first. */
|
|
100
214
|
export type SamlGrant = 'saml2_pure' | 'saml2_bearer';
|
|
101
215
|
export declare function isSamlGrant(grant: DestinationGrant): grant is SamlGrant;
|
|
102
|
-
/** What a SAML row
|
|
103
|
-
export interface
|
|
104
|
-
destination: string;
|
|
216
|
+
/** What a SAML row's check reads. */
|
|
217
|
+
export interface SamlCheck extends ClientCheck {
|
|
105
218
|
grant: SamlGrant;
|
|
106
219
|
means: IConnectionConfig;
|
|
107
|
-
/** `saml2_bearer`'s client, from the key store; `null` for `saml2_pure`. */
|
|
108
|
-
client: IAuthorizationConfig | null;
|
|
109
|
-
/** The session secret — the seed; `null` when there is none, or it is not bound here. */
|
|
110
|
-
secret: IConfig | null;
|
|
111
220
|
authorization: ((destination: string, grant: SamlGrant) => IAuthorizationStrategy<string>) | undefined;
|
|
112
221
|
samlCookies: ((destination: string) => (samlResponse: string) => Promise<string>) | undefined;
|
|
113
222
|
assertionReplayStore: ((destination: string) => IAssertionReplayStore) | undefined;
|
|
114
|
-
logger: ILogger;
|
|
115
|
-
onTokens: (result: ITokenResult) => Promise<void>;
|
|
116
223
|
}
|
|
224
|
+
/** What a SAML row is built from. */
|
|
225
|
+
export interface SamlRow extends Omit<SamlCheck, 'client' | 'clientAuthenticated'>, TokenRowOptions {
|
|
226
|
+
/** `saml2_bearer`'s client, from the key store; `null` for `saml2_pure`. */
|
|
227
|
+
client: RowClient | null;
|
|
228
|
+
/** The session secret — the seed; `null` when there is none, or it is not bound here. */
|
|
229
|
+
secret: IConfig | null;
|
|
230
|
+
/** `saml2_bearer`: the consumer strategy's answer; given, it replaces the secret. */
|
|
231
|
+
clientAuthentication?: IClientAuthentication;
|
|
232
|
+
}
|
|
233
|
+
/** Every field and option a SAML row lacks, named in one error — or nothing. */
|
|
234
|
+
export declare function samlRefusal(check: SamlCheck): DestinationConfigError | undefined;
|
|
117
235
|
/**
|
|
118
236
|
* `saml` / `saml2_pure` → `Saml2PureProvider`, `saml2_bearer` →
|
|
119
237
|
* `Saml2BearerProvider`, each validating the assertion before anything uses
|
|
@@ -126,14 +244,17 @@ export interface SamlRow {
|
|
|
126
244
|
*
|
|
127
245
|
* `saml2_pure` is seeded with the stored cookies and `expiresAt`;
|
|
128
246
|
* `saml2_bearer` with the stored token, its refresh token and expiry, and
|
|
129
|
-
* takes the client (`uaaUrl`, `uaaClientId`;
|
|
130
|
-
*
|
|
247
|
+
* takes the client (`uaaUrl`, `uaaClientId`; without a strategy,
|
|
248
|
+
* `uaaClientSecret` `''` a public client; on the strategy path the identity
|
|
249
|
+
* alone, no secret) and `samlTokenUrl` when stated. Both take the consumer's
|
|
250
|
+
* renewal for their grant and the broker's persistence.
|
|
131
251
|
*
|
|
132
|
-
* Every field and option the row lacks is named in one error
|
|
133
|
-
* collaborator is called; so is a
|
|
134
|
-
*
|
|
135
|
-
* the value
|
|
252
|
+
* Every field and option the row lacks is named in one error
|
|
253
|
+
* (`samlRefusal`), before any collaborator is called; so is a
|
|
254
|
+
* `samlClockSkewMs` that is not a whole number of milliseconds, and a
|
|
255
|
+
* certificate the validator cannot read — by name, never the value, the
|
|
256
|
+
* validator's error carried.
|
|
136
257
|
*/
|
|
137
|
-
export declare function samlProvider(row: SamlRow):
|
|
258
|
+
export declare function samlProvider(row: SamlRow): RowBuild;
|
|
138
259
|
export {};
|
|
139
260
|
//# sourceMappingURL=destinations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"destinations.d.ts","sourceRoot":"","sources":["../src/destinations.ts"],"names":[],"mappings":"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"}
|