@relyper/sp-auth 0.3.0 → 0.4.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/README.md +20 -16
- package/dist/coins.d.ts +21 -0
- package/dist/coins.d.ts.map +1 -1
- package/dist/coins.js +61 -9
- package/dist/coins.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,8 @@ npm install @relyper/sp-auth
|
|
|
10
10
|
|
|
11
11
|
Requires Node 20+. ESM only.
|
|
12
12
|
|
|
13
|
-
Two
|
|
13
|
+
Two ways to establish who the user is, and they are not alternatives of equal
|
|
14
|
+
standing:
|
|
14
15
|
|
|
15
16
|
- **[OIDC login](#oidc-login)** — the app is a registered, confidential OIDC
|
|
16
17
|
client. Authorization Code Flow with PKCE, ID tokens verified against the
|
|
@@ -19,6 +20,9 @@ Two integrations live here, and they are not alternatives of equal standing:
|
|
|
19
20
|
by a trusted proxy. No secret, no signature, no verification. Only defensible
|
|
20
21
|
when the app is unreachable except through that gateway.
|
|
21
22
|
|
|
23
|
+
On top of that, **[Relyper Coins](#relyper-coins)** lets an app spend from the
|
|
24
|
+
central wallets, authenticating with the same client credentials as the login.
|
|
25
|
+
|
|
22
26
|
## OIDC login
|
|
23
27
|
|
|
24
28
|
### 1. Register the service provider
|
|
@@ -229,21 +233,6 @@ sets — which is why it is off by default.
|
|
|
229
233
|
|
|
230
234
|
Prefer the OIDC login. It needs no such assumption about the network.
|
|
231
235
|
|
|
232
|
-
## Design
|
|
233
|
-
|
|
234
|
-
- The OIDC client does no I/O you did not ask for: discovery and JWKS are
|
|
235
|
-
fetched lazily, cached, and go through your `fetch` if you supply one.
|
|
236
|
-
- Identity and application user stay separate. The package hands you a
|
|
237
|
-
`RelyperIdentity`; `resolveUser` maps it to your own record. That boundary is
|
|
238
|
-
what makes the package reusable across service providers.
|
|
239
|
-
- `subject` is the IdP's ID and never the primary key of your database.
|
|
240
|
-
- Errors carry a user-safe `message` and a separate `detail` for logs, so an
|
|
241
|
-
IdP's diagnostics never leak into a response.
|
|
242
|
-
|
|
243
|
-
## License
|
|
244
|
-
|
|
245
|
-
MIT
|
|
246
|
-
|
|
247
236
|
## Relyper Coins
|
|
248
237
|
|
|
249
238
|
Relyper Coins are held centrally: the wallet at the identity provider is the
|
|
@@ -287,3 +276,18 @@ admin UI, or `debit` throws with code `coins_not_enabled`.
|
|
|
287
276
|
`debit` refuses to overdraw a wallet. Because the exact cost of a request is
|
|
288
277
|
usually only known after the work is done, check the balance against an estimate
|
|
289
278
|
first and debit the real amount afterwards.
|
|
279
|
+
|
|
280
|
+
## Design
|
|
281
|
+
|
|
282
|
+
- The OIDC client does no I/O you did not ask for: discovery and JWKS are
|
|
283
|
+
fetched lazily, cached, and go through your `fetch` if you supply one.
|
|
284
|
+
- Identity and application user stay separate. The package hands you a
|
|
285
|
+
`RelyperIdentity`; `resolveUser` maps it to your own record. That boundary is
|
|
286
|
+
what makes the package reusable across service providers.
|
|
287
|
+
- `subject` is the IdP's ID and never the primary key of your database.
|
|
288
|
+
- Errors carry a user-safe `message` and a separate `detail` for logs, so an
|
|
289
|
+
IdP's diagnostics never leak into a response.
|
|
290
|
+
|
|
291
|
+
## License
|
|
292
|
+
|
|
293
|
+
MIT
|
package/dist/coins.d.ts
CHANGED
|
@@ -63,6 +63,12 @@ export type RelyperCoinsErrorCode =
|
|
|
63
63
|
| 'coins_not_enabled'
|
|
64
64
|
/** Client credentials rejected. */
|
|
65
65
|
| 'unauthorized'
|
|
66
|
+
/**
|
|
67
|
+
* Refused with 403 without saying it was the coin permission. Usually the
|
|
68
|
+
* request never reached the coins service: a wrong base URL, a gateway or a
|
|
69
|
+
* WAF. Read `url` and `responseBody` on the error.
|
|
70
|
+
*/
|
|
71
|
+
| 'forbidden'
|
|
66
72
|
/** The request was malformed. */
|
|
67
73
|
| 'invalid_request'
|
|
68
74
|
/** The identity provider was unreachable or answered unexpectedly. */
|
|
@@ -74,11 +80,26 @@ export declare class RelyperCoinsError extends Error {
|
|
|
74
80
|
readonly balanceRc?: number;
|
|
75
81
|
readonly requestedRc?: number;
|
|
76
82
|
readonly cause?: unknown;
|
|
83
|
+
/**
|
|
84
|
+
* What the service actually answered, and where it was asked.
|
|
85
|
+
*
|
|
86
|
+
* Kept because a status code alone does not identify a cause: a 403 from the
|
|
87
|
+
* coins service and a 403 from a proxy in front of it are the same number and
|
|
88
|
+
* mean entirely different things. Without the body, an operator holding a
|
|
89
|
+
* correctly configured client has nothing to go on but a message this library
|
|
90
|
+
* guessed. `responseError` is the service's own error code when it sent one.
|
|
91
|
+
*/
|
|
92
|
+
readonly url?: string;
|
|
93
|
+
readonly responseError?: string;
|
|
94
|
+
readonly responseBody?: string;
|
|
77
95
|
constructor(code: RelyperCoinsErrorCode, message: string, options?: {
|
|
78
96
|
status?: number;
|
|
79
97
|
balanceRc?: number;
|
|
80
98
|
requestedRc?: number;
|
|
81
99
|
cause?: unknown;
|
|
100
|
+
url?: string;
|
|
101
|
+
responseError?: string;
|
|
102
|
+
responseBody?: string;
|
|
82
103
|
});
|
|
83
104
|
}
|
|
84
105
|
export type RelyperCoinsOptions = {
|
package/dist/coins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coins.d.ts","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrC,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB;AAC/B,6CAA6C;AAC3C,oBAAoB;AACtB,kEAAkE;GAChE,mBAAmB;AACrB,mCAAmC;GACjC,cAAc;AAChB,iCAAiC;GAC/B,iBAAiB;AACnB,sEAAsE;GACpE,aAAa,CAAC;AAElB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"coins.d.ts","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
|
package/dist/coins.js
CHANGED
|
@@ -17,6 +17,18 @@ export class RelyperCoinsError extends Error {
|
|
|
17
17
|
balanceRc;
|
|
18
18
|
requestedRc;
|
|
19
19
|
cause;
|
|
20
|
+
/**
|
|
21
|
+
* What the service actually answered, and where it was asked.
|
|
22
|
+
*
|
|
23
|
+
* Kept because a status code alone does not identify a cause: a 403 from the
|
|
24
|
+
* coins service and a 403 from a proxy in front of it are the same number and
|
|
25
|
+
* mean entirely different things. Without the body, an operator holding a
|
|
26
|
+
* correctly configured client has nothing to go on but a message this library
|
|
27
|
+
* guessed. `responseError` is the service's own error code when it sent one.
|
|
28
|
+
*/
|
|
29
|
+
url;
|
|
30
|
+
responseError;
|
|
31
|
+
responseBody;
|
|
20
32
|
constructor(code, message, options = {}) {
|
|
21
33
|
super(message);
|
|
22
34
|
this.name = 'RelyperCoinsError';
|
|
@@ -25,6 +37,9 @@ export class RelyperCoinsError extends Error {
|
|
|
25
37
|
this.balanceRc = options.balanceRc;
|
|
26
38
|
this.requestedRc = options.requestedRc;
|
|
27
39
|
this.cause = options.cause;
|
|
40
|
+
this.url = options.url;
|
|
41
|
+
this.responseError = options.responseError;
|
|
42
|
+
this.responseBody = options.responseBody;
|
|
28
43
|
}
|
|
29
44
|
}
|
|
30
45
|
/**
|
|
@@ -69,31 +84,52 @@ export function createRelyperCoinsClient(options) {
|
|
|
69
84
|
catch (cause) {
|
|
70
85
|
throw new RelyperCoinsError('unavailable', 'The Relyper coin service could not be reached.', { cause });
|
|
71
86
|
}
|
|
72
|
-
const payload = await
|
|
87
|
+
const { payload, raw } = await readBody(response);
|
|
73
88
|
if (response.ok)
|
|
74
89
|
return payload ?? {};
|
|
75
90
|
const error = typeof payload?.error === 'string' ? payload.error : '';
|
|
91
|
+
// Passed to every throw below so the caller can log what was actually
|
|
92
|
+
// answered instead of only what this library concluded from it.
|
|
93
|
+
const evidence = { url, responseError: error || undefined, responseBody: raw || undefined };
|
|
76
94
|
if (response.status === 402 || error === 'insufficient_funds') {
|
|
77
95
|
throw new RelyperCoinsError('insufficient_funds', 'Not enough Relyper Coins.', {
|
|
78
96
|
status: 402,
|
|
79
97
|
balanceRc: numberOrUndefined(payload?.balanceRc),
|
|
80
|
-
requestedRc: numberOrUndefined(payload?.requestedRc)
|
|
98
|
+
requestedRc: numberOrUndefined(payload?.requestedRc),
|
|
99
|
+
...evidence
|
|
81
100
|
});
|
|
82
101
|
}
|
|
83
|
-
|
|
102
|
+
// Only the service's own error code identifies this cause. A bare 403 is
|
|
103
|
+
// not evidence of it: an unmatched route, a gateway or a WAF in front of
|
|
104
|
+
// the service answers with the same status, and reporting those as a
|
|
105
|
+
// permission the operator has already granted sends them looking in the
|
|
106
|
+
// wrong place.
|
|
107
|
+
if (error === 'coins_not_enabled_for_client') {
|
|
84
108
|
throw new RelyperCoinsError('coins_not_enabled', 'This application is not allowed to spend Relyper Coins.', {
|
|
85
|
-
status:
|
|
109
|
+
status: response.status,
|
|
110
|
+
...evidence
|
|
86
111
|
});
|
|
87
112
|
}
|
|
88
113
|
if (response.status === 401) {
|
|
89
114
|
throw new RelyperCoinsError('unauthorized', 'The Relyper coin service rejected this application.', {
|
|
90
|
-
status: 401
|
|
115
|
+
status: 401,
|
|
116
|
+
...evidence
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (response.status === 403) {
|
|
120
|
+
throw new RelyperCoinsError('forbidden', 'The Relyper coin service refused this request with 403.', {
|
|
121
|
+
status: 403,
|
|
122
|
+
...evidence
|
|
91
123
|
});
|
|
92
124
|
}
|
|
93
125
|
if (response.status === 400) {
|
|
94
|
-
throw new RelyperCoinsError('invalid_request', 'The coin request was rejected as invalid.', {
|
|
126
|
+
throw new RelyperCoinsError('invalid_request', 'The coin request was rejected as invalid.', {
|
|
127
|
+
status: 400,
|
|
128
|
+
...evidence
|
|
129
|
+
});
|
|
95
130
|
}
|
|
96
131
|
throw new RelyperCoinsError('unavailable', 'The Relyper coin service answered unexpectedly.', {
|
|
132
|
+
...evidence,
|
|
97
133
|
status: response.status
|
|
98
134
|
});
|
|
99
135
|
}
|
|
@@ -147,12 +183,28 @@ function trimTrailingSlashes(value) {
|
|
|
147
183
|
function numberOrUndefined(value) {
|
|
148
184
|
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
149
185
|
}
|
|
150
|
-
|
|
186
|
+
/**
|
|
187
|
+
* Reads the body once, as text, and parses JSON from that text.
|
|
188
|
+
*
|
|
189
|
+
* `response.json()` consumes the stream, so a body that is not JSON -- an HTML
|
|
190
|
+
* error page from a gateway, most importantly -- would be lost before anyone
|
|
191
|
+
* could look at it. The raw text is what makes those cases diagnosable, so it
|
|
192
|
+
* is kept and truncated rather than discarded.
|
|
193
|
+
*/
|
|
194
|
+
async function readBody(response) {
|
|
195
|
+
let raw = '';
|
|
196
|
+
try {
|
|
197
|
+
raw = await response.text();
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return { payload: null, raw: '' };
|
|
201
|
+
}
|
|
202
|
+
const trimmed = raw.length > 500 ? raw.slice(0, 500) + '...' : raw;
|
|
151
203
|
try {
|
|
152
|
-
return
|
|
204
|
+
return { payload: JSON.parse(raw), raw: trimmed };
|
|
153
205
|
}
|
|
154
206
|
catch {
|
|
155
|
-
return null;
|
|
207
|
+
return { payload: null, raw: trimmed };
|
|
156
208
|
}
|
|
157
209
|
}
|
|
158
210
|
//# sourceMappingURL=coins.js.map
|
package/dist/coins.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"coins.js","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@relyper/sp-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Relyper identity for a service provider: an OIDC client (Authorization Code + PKCE) with a Fastify adapter and session cookies, plus the header-based variant for gateway deployments.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Jonas Esser",
|