@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 CHANGED
@@ -10,7 +10,8 @@ npm install @relyper/sp-auth
10
10
 
11
11
  Requires Node 20+. ESM only.
12
12
 
13
- Two integrations live here, and they are not alternatives of equal standing:
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 = {
@@ -1 +1 @@
1
- {"version":3,"file":"coins.d.ts","sourceRoot":"","sources":["../src/coins.ts"],"names":[],"mappings":"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"}
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 readJson(response);
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
- if (response.status === 403 || error === 'coins_not_enabled_for_client') {
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: 403
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.', { status: 400 });
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
- async function readJson(response) {
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 (await response.json());
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":"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"}
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.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",