@babelpeak/babel-suite-server-sdk 0.1.0 → 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/dist/client.d.ts +130 -13
- package/dist/client.js +279 -11
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +23 -2
- package/dist/plugin.js +32 -7
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -1,19 +1,42 @@
|
|
|
1
1
|
import { type JWTPayload } from 'jose';
|
|
2
|
+
/** Percorso del token ServiceAccount proiettato con audience = issuer di Suite. */
|
|
3
|
+
export declare const DEFAULT_SA_TOKEN_FILE = "/var/run/secrets/babel-suite/token";
|
|
4
|
+
/** URL interno di Suite quando il servizio gira nel cluster e SUITE_INTERNAL_URL manca. */
|
|
5
|
+
export declare const DEFAULT_IN_CLUSTER_SUITE_URL = "http://babel-suite.babel-suite.svc.cluster.local:3001";
|
|
6
|
+
/** Audience delle chiamate verso Suite /internal/*. */
|
|
7
|
+
export declare const SUITE_INTERNAL_AUDIENCE = "suite-internal";
|
|
8
|
+
export declare const SERVICE_TOKEN_TYP = "svc+jwt";
|
|
9
|
+
export declare const EVENT_TOKEN_TYP = "suite-event+jwt";
|
|
2
10
|
export interface PermissionDefinition {
|
|
3
11
|
key: string;
|
|
4
12
|
description?: string;
|
|
5
13
|
/** Ruoli di sistema che ricevono il permesso di default; admin lo riceve sempre. */
|
|
6
14
|
defaultRoles?: ('admin' | 'user')[];
|
|
7
15
|
}
|
|
16
|
+
/** `{ [audience]: { [servizio chiamante]: scope[] } }` */
|
|
17
|
+
export type AcceptsFrom = Record<string, Record<string, string[]>>;
|
|
8
18
|
export interface SuiteClientOptions {
|
|
9
19
|
/** URL dell'issuer di Suite (es. https://suite.babelpeak.com). */
|
|
10
20
|
issuer: string;
|
|
11
21
|
/** Chiave del servizio: è l'`aud` atteso nei JWT. */
|
|
12
22
|
service: string;
|
|
13
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Service key per le route /internal/* (llm-config, permessi, introspect): solo fuori
|
|
25
|
+
* produzione, quando manca il token ServiceAccount. Con NODE_ENV=production viene ignorata.
|
|
26
|
+
*/
|
|
14
27
|
serviceKey?: string;
|
|
15
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Base URL delle route interne (/internal/*). Default: env SUITE_INTERNAL_URL; dentro
|
|
30
|
+
* Kubernetes (KUBERNETES_SERVICE_HOST) l'URL del Service di Suite; altrimenti l'issuer.
|
|
31
|
+
*/
|
|
16
32
|
internalUrl?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Token ServiceAccount proiettato. Default: env SUITE_SA_TOKEN_FILE o /var/run/secrets/babel-suite/token.
|
|
35
|
+
* Con NODE_ENV=production è obbligatorio: senza il file il costruttore lancia un errore.
|
|
36
|
+
*/
|
|
37
|
+
tokenFile?: string;
|
|
38
|
+
/** Tentativi verso /internal/workload/token se Suite non risponde. Default: 4. */
|
|
39
|
+
serviceTokenAttempts?: number;
|
|
17
40
|
/** Credenziali del client OIDC del servizio, per il token exchange fra servizi. */
|
|
18
41
|
clientId?: string;
|
|
19
42
|
clientSecret?: string;
|
|
@@ -62,6 +85,33 @@ export declare class SuiteError extends Error {
|
|
|
62
85
|
}
|
|
63
86
|
export declare class TokenError extends Error {
|
|
64
87
|
}
|
|
88
|
+
/** Token di servizio valido ma senza gli scope richiesti (→ 403). */
|
|
89
|
+
export declare class ScopeError extends Error {
|
|
90
|
+
}
|
|
91
|
+
/** Chi chiama, secondo un `svc+jwt` verificato. */
|
|
92
|
+
export interface ServiceAuth {
|
|
93
|
+
caller: string;
|
|
94
|
+
orgId?: string;
|
|
95
|
+
scopes: string[];
|
|
96
|
+
/**
|
|
97
|
+
* Token delegato (fase 8 di docs/SERVICE-AUTH.md): l'utente di Suite per cui agisce il
|
|
98
|
+
* chiamante. Quando c'è, `orgId` c'è sempre e il principal della richiesta è questo utente.
|
|
99
|
+
*/
|
|
100
|
+
onBehalfOf?: string;
|
|
101
|
+
/** Permessi dell'utente in questo servizio nell'org, calcolati da Suite all'emissione. */
|
|
102
|
+
userPermissions?: string[];
|
|
103
|
+
token: string;
|
|
104
|
+
claims: JWTPayload;
|
|
105
|
+
}
|
|
106
|
+
export interface SuiteWebhookEvent {
|
|
107
|
+
event: string;
|
|
108
|
+
org_id: string;
|
|
109
|
+
service: string;
|
|
110
|
+
reason: string;
|
|
111
|
+
}
|
|
112
|
+
type HeaderBag = Record<string, string | string[] | undefined>;
|
|
113
|
+
/** URL interno di default, senza configurazione (docs/SERVICE-AUTH.md, "Default automatici"). */
|
|
114
|
+
export declare function defaultInternalUrl(issuer: string, env?: NodeJS.ProcessEnv): string;
|
|
65
115
|
interface Discovery {
|
|
66
116
|
issuer: string;
|
|
67
117
|
jwks_uri: string;
|
|
@@ -82,29 +132,96 @@ export declare class SuiteClient {
|
|
|
82
132
|
private readonly cache;
|
|
83
133
|
private readonly inflight;
|
|
84
134
|
private webhookSecret?;
|
|
135
|
+
readonly tokenFile: string;
|
|
136
|
+
private readonly serviceTokens;
|
|
137
|
+
private readonly serviceTokenInflight;
|
|
138
|
+
private readonly seenWebhookJti;
|
|
139
|
+
/** NODE_ENV=production alla creazione: niente fallback a service key e HMAC. */
|
|
140
|
+
readonly production: boolean;
|
|
85
141
|
constructor(opts: SuiteClientOptions);
|
|
142
|
+
/** Vero se c'è il token ServiceAccount proiettato (identità workload). */
|
|
143
|
+
hasWorkloadIdentity(): boolean;
|
|
144
|
+
/** Vero se il client può chiamare /internal/* (token SA o, fuori produzione, service key). */
|
|
145
|
+
hasInternalCredentials(): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Token di servizio `svc+jwt` per `audience` (es. "docs", "code.orchestrator", "suite-internal").
|
|
148
|
+
* Il token SA si rilegge dal file a ogni emissione (kubelet lo ruota); il risultato resta in
|
|
149
|
+
* cache per (audience, org, utente, scope) fino a exp - 60 s; richieste concorrenti condividono
|
|
150
|
+
* la stessa chiamata; se Suite non risponde si riprova con backoff.
|
|
151
|
+
*
|
|
152
|
+
* `onBehalfOf` (id utente di Suite, richiede `orgId`) chiede un token delegato: Suite verifica
|
|
153
|
+
* che chiamante e destinatario siano abilitati nell'org, che l'utente sia membro con almeno un
|
|
154
|
+
* permesso del servizio chiamante e che gli scope siano delegabili; altrimenti 403 con `reason`.
|
|
155
|
+
*/
|
|
156
|
+
getServiceToken(audience: string, opts?: {
|
|
157
|
+
orgId?: string;
|
|
158
|
+
onBehalfOf?: string;
|
|
159
|
+
scope?: string;
|
|
160
|
+
}): Promise<string>;
|
|
161
|
+
private requestServiceToken;
|
|
162
|
+
/**
|
|
163
|
+
* Verifica un token di servizio in ingresso: `typ` svc+jwt, `iss`, `aud` (default: questo
|
|
164
|
+
* servizio), `exp` con 30 s di tolleranza, e gli scope richiesti. Accetta la richiesta
|
|
165
|
+
* (headers.authorization) o direttamente il token.
|
|
166
|
+
*
|
|
167
|
+
* Token delegati (`on_behalf_of`): senza `org_id` sono sempre rifiutati. Con `delegableCallers`
|
|
168
|
+
* un token delegato di un chiamante non in elenco è rifiutato con ScopeError (403); senza
|
|
169
|
+
* l'opzione non si controlla il chiamante (lo fa il plugin con `acceptsDelegationFrom`).
|
|
170
|
+
*/
|
|
171
|
+
verifyServiceToken(reqOrToken: string | {
|
|
172
|
+
headers: HeaderBag;
|
|
173
|
+
}, opts?: {
|
|
174
|
+
scopes?: string[];
|
|
175
|
+
audience?: string;
|
|
176
|
+
delegableCallers?: string[];
|
|
177
|
+
}): Promise<ServiceAuth>;
|
|
86
178
|
/** Discovery da /.well-known, una volta sola (ritentata se fallisce). */
|
|
87
179
|
getDiscovery(): Promise<Discovery>;
|
|
88
180
|
private getJwks;
|
|
89
181
|
/** Valida firma, issuer, `aud` = servizio e `typ` at+jwt. Nessuna chiamata a Suite per richiesta. */
|
|
90
182
|
verifyToken(token: string): Promise<SuiteAuth>;
|
|
183
|
+
/**
|
|
184
|
+
* Credenziali per /internal/*: token workload aud=suite-internal se c'è il token SA (sempre, in
|
|
185
|
+
* produzione), altrimenti fuori produzione la service key.
|
|
186
|
+
*/
|
|
91
187
|
private internalHeaders;
|
|
92
188
|
private internal;
|
|
93
|
-
/**
|
|
94
|
-
|
|
189
|
+
/**
|
|
190
|
+
* Upsert idempotente dei permessi del servizio: si chiama a ogni avvio. `acceptsFrom`
|
|
191
|
+
* dichiara chi può chiamare le audience del servizio e con quali scope
|
|
192
|
+
* (`{ [audience]: { [caller]: scopes[] } }`); sostituisce le regole delle audience indicate.
|
|
193
|
+
* `acceptsDelegationFrom` (stessa forma) è il sottoinsieme delegabile con `on_behalf_of`; deve
|
|
194
|
+
* stare dentro `acceptsFrom` della stessa chiamata. Un'audience registrata senza delega la perde.
|
|
195
|
+
*/
|
|
196
|
+
registerPermissions(permissions: PermissionDefinition[], opts?: {
|
|
197
|
+
acceptsFrom?: AcceptsFrom;
|
|
198
|
+
acceptsDelegationFrom?: AcceptsFrom;
|
|
199
|
+
}): Promise<{
|
|
95
200
|
registered: number;
|
|
96
201
|
}>;
|
|
97
|
-
/**
|
|
202
|
+
/**
|
|
203
|
+
* Registra l'URL di invalidazione. Fuori produzione Suite restituisce anche un segreto HMAC,
|
|
204
|
+
* che resta in memoria; in produzione le notifiche sono firmate solo con JWT.
|
|
205
|
+
*/
|
|
98
206
|
registerWebhook(url: string): Promise<{
|
|
99
|
-
|
|
207
|
+
url: string;
|
|
208
|
+
secret?: string;
|
|
209
|
+
signature?: string;
|
|
100
210
|
}>;
|
|
101
|
-
/**
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
211
|
+
/**
|
|
212
|
+
* Verifica una notifica di Suite con il JWT `suite-event+jwt` (Authorization: Bearer, legato al
|
|
213
|
+
* corpo grezzo con body_sha256, con protezione dal replay sul jti). Un JWT presente ma non
|
|
214
|
+
* valido è sempre un rifiuto: l'HMAC non lo salva mai. Solo fuori produzione, e solo se la
|
|
215
|
+
* notifica non ha un bearer, resta il fallback all'HMAC `x-suite-signature`.
|
|
216
|
+
*/
|
|
217
|
+
verifyWebhookRequest(headers: HeaderBag, rawBody: string): Promise<SuiteWebhookEvent>;
|
|
218
|
+
private verifyWebhookJwt;
|
|
219
|
+
/**
|
|
220
|
+
* Verifica firma HMAC e freschezza di una notifica di Suite. Ritorna l'org da invalidare.
|
|
221
|
+
* Sempre rifiutata in produzione.
|
|
222
|
+
* @deprecated usare `verifyWebhookRequest` (JWT).
|
|
223
|
+
*/
|
|
224
|
+
verifyWebhook(headers: Record<string, string | string[] | undefined>, rawBody: string): SuiteWebhookEvent;
|
|
108
225
|
/** Config LLM dell'organizzazione, con cache e deduplica delle richieste concorrenti. */
|
|
109
226
|
llmConfig(orgId: string): Promise<LlmConfig>;
|
|
110
227
|
/** Invalida la cache (di un'org o tutta). */
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
1
|
+
import { createHash, createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
2
4
|
import { createRemoteJWKSet, customFetch, jwtVerify } from 'jose';
|
|
5
|
+
/** Percorso del token ServiceAccount proiettato con audience = issuer di Suite. */
|
|
6
|
+
export const DEFAULT_SA_TOKEN_FILE = '/var/run/secrets/babel-suite/token';
|
|
7
|
+
/** URL interno di Suite quando il servizio gira nel cluster e SUITE_INTERNAL_URL manca. */
|
|
8
|
+
export const DEFAULT_IN_CLUSTER_SUITE_URL = 'http://babel-suite.babel-suite.svc.cluster.local:3001';
|
|
9
|
+
/** Audience delle chiamate verso Suite /internal/*. */
|
|
10
|
+
export const SUITE_INTERNAL_AUDIENCE = 'suite-internal';
|
|
11
|
+
export const SERVICE_TOKEN_TYP = 'svc+jwt';
|
|
12
|
+
export const EVENT_TOKEN_TYP = 'suite-event+jwt';
|
|
13
|
+
/** Tolleranza sull'orologio per i token tra servizi. */
|
|
14
|
+
const SERVICE_CLOCK_TOLERANCE = 30;
|
|
15
|
+
/** Il token di servizio si rinnova 60 s prima della scadenza. */
|
|
16
|
+
const SERVICE_TOKEN_SKEW_MS = 60_000;
|
|
3
17
|
export class SuiteError extends Error {
|
|
4
18
|
status;
|
|
5
19
|
body;
|
|
@@ -11,7 +25,28 @@ export class SuiteError extends Error {
|
|
|
11
25
|
}
|
|
12
26
|
export class TokenError extends Error {
|
|
13
27
|
}
|
|
28
|
+
/** Token di servizio valido ma senza gli scope richiesti (→ 403). */
|
|
29
|
+
export class ScopeError extends Error {
|
|
30
|
+
}
|
|
31
|
+
const header = (headers, name) => {
|
|
32
|
+
const v = headers[name];
|
|
33
|
+
return Array.isArray(v) ? v[0] : v;
|
|
34
|
+
};
|
|
35
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
36
|
+
/** URL interno di default, senza configurazione (docs/SERVICE-AUTH.md, "Default automatici"). */
|
|
37
|
+
export function defaultInternalUrl(issuer, env = process.env) {
|
|
38
|
+
if (env.SUITE_INTERNAL_URL)
|
|
39
|
+
return env.SUITE_INTERNAL_URL;
|
|
40
|
+
if (env.KUBERNETES_SERVICE_HOST)
|
|
41
|
+
return DEFAULT_IN_CLUSTER_SUITE_URL;
|
|
42
|
+
return issuer;
|
|
43
|
+
}
|
|
14
44
|
const WEBHOOK_TOLERANCE_SEC = 300;
|
|
45
|
+
/**
|
|
46
|
+
* Produzione secondo NODE_ENV, letto alla creazione del client. In produzione (fase 7 di
|
|
47
|
+
* docs/SERVICE-AUTH.md) niente service key né HMAC: solo identità workload e webhook JWT.
|
|
48
|
+
*/
|
|
49
|
+
const isProduction = (env = process.env) => env.NODE_ENV === 'production';
|
|
15
50
|
/**
|
|
16
51
|
* Client di Suite indipendente dal framework: validazione JWT con JWKS in cache,
|
|
17
52
|
* config LLM con cache e invalidazione, registrazione permessi e webhook, token exchange.
|
|
@@ -27,12 +62,177 @@ export class SuiteClient {
|
|
|
27
62
|
cache = new Map();
|
|
28
63
|
inflight = new Map();
|
|
29
64
|
webhookSecret;
|
|
65
|
+
tokenFile;
|
|
66
|
+
serviceTokens = new Map();
|
|
67
|
+
serviceTokenInflight = new Map();
|
|
68
|
+
seenWebhookJti = new Map();
|
|
69
|
+
/** NODE_ENV=production alla creazione: niente fallback a service key e HMAC. */
|
|
70
|
+
production;
|
|
30
71
|
constructor(opts) {
|
|
31
72
|
this.opts = opts;
|
|
32
73
|
this.issuer = opts.issuer.replace(/\/$/, '');
|
|
33
74
|
this.service = opts.service;
|
|
34
|
-
this.internalUrl = (opts.internalUrl ?? this.issuer).replace(/\/$/, '');
|
|
75
|
+
this.internalUrl = (opts.internalUrl ?? defaultInternalUrl(this.issuer)).replace(/\/$/, '');
|
|
76
|
+
this.tokenFile = opts.tokenFile ?? process.env.SUITE_SA_TOKEN_FILE ?? DEFAULT_SA_TOKEN_FILE;
|
|
35
77
|
this.doFetch = opts.fetch ?? fetch;
|
|
78
|
+
this.production = isProduction();
|
|
79
|
+
if (this.production && !this.hasWorkloadIdentity()) {
|
|
80
|
+
// Meglio non partire che ripiegare in silenzio su una service key che Suite rifiuta.
|
|
81
|
+
throw new SuiteError(`NODE_ENV=production ma il token ServiceAccount ${this.tokenFile} non esiste: in ` +
|
|
82
|
+
'produzione il servizio si autentica solo con l’identità workload. Montare il volume ' +
|
|
83
|
+
'proiettato "suite-identity" (audience = issuer di Suite) o impostare SUITE_SA_TOKEN_FILE. ' +
|
|
84
|
+
'Vedi docs/SERVICE-AUTH.md.');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Vero se c'è il token ServiceAccount proiettato (identità workload). */
|
|
88
|
+
hasWorkloadIdentity() {
|
|
89
|
+
return existsSync(this.tokenFile);
|
|
90
|
+
}
|
|
91
|
+
/** Vero se il client può chiamare /internal/* (token SA o, fuori produzione, service key). */
|
|
92
|
+
hasInternalCredentials() {
|
|
93
|
+
return this.hasWorkloadIdentity() || (!this.production && !!this.opts.serviceKey);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Token di servizio `svc+jwt` per `audience` (es. "docs", "code.orchestrator", "suite-internal").
|
|
97
|
+
* Il token SA si rilegge dal file a ogni emissione (kubelet lo ruota); il risultato resta in
|
|
98
|
+
* cache per (audience, org, utente, scope) fino a exp - 60 s; richieste concorrenti condividono
|
|
99
|
+
* la stessa chiamata; se Suite non risponde si riprova con backoff.
|
|
100
|
+
*
|
|
101
|
+
* `onBehalfOf` (id utente di Suite, richiede `orgId`) chiede un token delegato: Suite verifica
|
|
102
|
+
* che chiamante e destinatario siano abilitati nell'org, che l'utente sia membro con almeno un
|
|
103
|
+
* permesso del servizio chiamante e che gli scope siano delegabili; altrimenti 403 con `reason`.
|
|
104
|
+
*/
|
|
105
|
+
async getServiceToken(audience, opts = {}) {
|
|
106
|
+
if (opts.onBehalfOf && !opts.orgId) {
|
|
107
|
+
throw new SuiteError('onBehalfOf richiede orgId');
|
|
108
|
+
}
|
|
109
|
+
const key = [audience, opts.orgId ?? '', opts.onBehalfOf ?? '', opts.scope ?? ''].join('\u0000');
|
|
110
|
+
const hit = this.serviceTokens.get(key);
|
|
111
|
+
if (hit && hit.refreshAt > Date.now())
|
|
112
|
+
return hit.token;
|
|
113
|
+
const pending = this.serviceTokenInflight.get(key);
|
|
114
|
+
if (pending)
|
|
115
|
+
return pending;
|
|
116
|
+
const p = this.requestServiceToken(audience, opts)
|
|
117
|
+
.then(({ token, expiresIn }) => {
|
|
118
|
+
this.serviceTokens.set(key, {
|
|
119
|
+
token,
|
|
120
|
+
refreshAt: Date.now() + Math.max(0, expiresIn * 1000 - SERVICE_TOKEN_SKEW_MS),
|
|
121
|
+
});
|
|
122
|
+
return token;
|
|
123
|
+
})
|
|
124
|
+
.finally(() => this.serviceTokenInflight.delete(key));
|
|
125
|
+
this.serviceTokenInflight.set(key, p);
|
|
126
|
+
return p;
|
|
127
|
+
}
|
|
128
|
+
async requestServiceToken(audience, opts) {
|
|
129
|
+
const attempts = Math.max(1, this.opts.serviceTokenAttempts ?? 4);
|
|
130
|
+
let lastError;
|
|
131
|
+
for (let i = 0; i < attempts; i++) {
|
|
132
|
+
if (i > 0)
|
|
133
|
+
await sleep(Math.min(5_000, 250 * 2 ** (i - 1)) * (0.5 + Math.random() / 2));
|
|
134
|
+
let saToken;
|
|
135
|
+
try {
|
|
136
|
+
saToken = (await readFile(this.tokenFile, 'utf8')).trim();
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
throw new SuiteError(`token ServiceAccount non leggibile (${this.tokenFile}): ${err.message}`);
|
|
140
|
+
}
|
|
141
|
+
let res;
|
|
142
|
+
try {
|
|
143
|
+
res = await this.doFetch(`${this.internalUrl}/internal/workload/token`, {
|
|
144
|
+
method: 'POST',
|
|
145
|
+
headers: { authorization: `Bearer ${saToken}`, 'content-type': 'application/json' },
|
|
146
|
+
body: JSON.stringify({
|
|
147
|
+
audience,
|
|
148
|
+
...(opts.orgId ? { org_id: opts.orgId } : {}),
|
|
149
|
+
...(opts.onBehalfOf ? { on_behalf_of: opts.onBehalfOf } : {}),
|
|
150
|
+
...(opts.scope ? { scope: opts.scope } : {}),
|
|
151
|
+
}),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
lastError = err;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const text = await res.text();
|
|
159
|
+
const body = text ? JSON.parse(text) : undefined;
|
|
160
|
+
if (res.ok && typeof body?.access_token === 'string') {
|
|
161
|
+
return {
|
|
162
|
+
token: body.access_token,
|
|
163
|
+
expiresIn: typeof body.expires_in === 'number' ? body.expires_in : 300,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const err = new SuiteError(`token di servizio per ${audience}: HTTP ${res.status}`, res.status, body);
|
|
167
|
+
// 4xx (tranne 429) è una risposta definitiva: inutile riprovare.
|
|
168
|
+
if (res.status < 500 && res.status !== 429)
|
|
169
|
+
throw err;
|
|
170
|
+
lastError = err;
|
|
171
|
+
}
|
|
172
|
+
throw lastError instanceof SuiteError
|
|
173
|
+
? lastError
|
|
174
|
+
: new SuiteError(`Suite non raggiungibile: ${lastError?.message ?? 'errore'}`);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Verifica un token di servizio in ingresso: `typ` svc+jwt, `iss`, `aud` (default: questo
|
|
178
|
+
* servizio), `exp` con 30 s di tolleranza, e gli scope richiesti. Accetta la richiesta
|
|
179
|
+
* (headers.authorization) o direttamente il token.
|
|
180
|
+
*
|
|
181
|
+
* Token delegati (`on_behalf_of`): senza `org_id` sono sempre rifiutati. Con `delegableCallers`
|
|
182
|
+
* un token delegato di un chiamante non in elenco è rifiutato con ScopeError (403); senza
|
|
183
|
+
* l'opzione non si controlla il chiamante (lo fa il plugin con `acceptsDelegationFrom`).
|
|
184
|
+
*/
|
|
185
|
+
async verifyServiceToken(reqOrToken, opts = {}) {
|
|
186
|
+
let token;
|
|
187
|
+
if (typeof reqOrToken === 'string')
|
|
188
|
+
token = reqOrToken;
|
|
189
|
+
else {
|
|
190
|
+
const h = header(reqOrToken.headers, 'authorization');
|
|
191
|
+
if (!h?.startsWith('Bearer '))
|
|
192
|
+
throw new TokenError('bearer token mancante');
|
|
193
|
+
token = h.slice(7).trim();
|
|
194
|
+
}
|
|
195
|
+
let payload;
|
|
196
|
+
try {
|
|
197
|
+
({ payload } = await jwtVerify(token, await this.getJwks(), {
|
|
198
|
+
issuer: this.issuer,
|
|
199
|
+
audience: opts.audience ?? this.service,
|
|
200
|
+
typ: SERVICE_TOKEN_TYP,
|
|
201
|
+
algorithms: ['RS256'],
|
|
202
|
+
clockTolerance: SERVICE_CLOCK_TOLERANCE,
|
|
203
|
+
requiredClaims: ['exp', 'iat', 'sub'],
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
throw new TokenError(`token di servizio non valido: ${err.message}`);
|
|
208
|
+
}
|
|
209
|
+
const caller = payload.azp;
|
|
210
|
+
if (payload.token_use !== 'service' ||
|
|
211
|
+
typeof caller !== 'string' ||
|
|
212
|
+
payload.sub !== `svc:${caller}`) {
|
|
213
|
+
throw new TokenError('non è un token di servizio');
|
|
214
|
+
}
|
|
215
|
+
const scopes = typeof payload.scope === 'string' ? payload.scope.split(' ').filter(Boolean) : [];
|
|
216
|
+
const orgId = typeof payload.org_id === 'string' ? payload.org_id : undefined;
|
|
217
|
+
let delegation = {};
|
|
218
|
+
if (payload.on_behalf_of !== undefined) {
|
|
219
|
+
const perms = payload.user_permissions;
|
|
220
|
+
if (typeof payload.on_behalf_of !== 'string' ||
|
|
221
|
+
!payload.on_behalf_of ||
|
|
222
|
+
!orgId ||
|
|
223
|
+
!Array.isArray(perms) ||
|
|
224
|
+
!perms.every((p) => typeof p === 'string')) {
|
|
225
|
+
throw new TokenError('token delegato non valido (on_behalf_of senza org_id o permessi)');
|
|
226
|
+
}
|
|
227
|
+
if (opts.delegableCallers && !opts.delegableCallers.includes(caller)) {
|
|
228
|
+
throw new ScopeError(`token delegati di ${caller} non accettati`);
|
|
229
|
+
}
|
|
230
|
+
delegation = { onBehalfOf: payload.on_behalf_of, userPermissions: perms };
|
|
231
|
+
}
|
|
232
|
+
const missing = (opts.scopes ?? []).filter((s) => !scopes.includes(s));
|
|
233
|
+
if (missing.length)
|
|
234
|
+
throw new ScopeError(`scope richiesto: ${missing.join(', ')}`);
|
|
235
|
+
return { caller, orgId, scopes, ...delegation, token, claims: payload };
|
|
36
236
|
}
|
|
37
237
|
/** Discovery da /.well-known, una volta sola (ritentata se fallisce). */
|
|
38
238
|
getDiscovery() {
|
|
@@ -81,16 +281,24 @@ export class SuiteClient {
|
|
|
81
281
|
: [];
|
|
82
282
|
return { userId: payload.sub, orgId: payload.org_id, permissions, token, claims: payload };
|
|
83
283
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Credenziali per /internal/*: token workload aud=suite-internal se c'è il token SA (sempre, in
|
|
286
|
+
* produzione), altrimenti fuori produzione la service key.
|
|
287
|
+
*/
|
|
288
|
+
async internalHeaders() {
|
|
289
|
+
if (this.production || this.hasWorkloadIdentity()) {
|
|
290
|
+
return { authorization: `Bearer ${await this.getServiceToken(SUITE_INTERNAL_AUDIENCE)}` };
|
|
291
|
+
}
|
|
292
|
+
if (!this.opts.serviceKey) {
|
|
293
|
+
throw new SuiteError('né token ServiceAccount né serviceKey configurati');
|
|
294
|
+
}
|
|
87
295
|
return {
|
|
88
296
|
'x-suite-service': this.service,
|
|
89
297
|
'x-suite-service-key': this.opts.serviceKey,
|
|
90
298
|
};
|
|
91
299
|
}
|
|
92
300
|
async internal(method, path, body) {
|
|
93
|
-
const headers = this.internalHeaders();
|
|
301
|
+
const headers = await this.internalHeaders();
|
|
94
302
|
if (body !== undefined)
|
|
95
303
|
headers['content-type'] = 'application/json';
|
|
96
304
|
const res = await this.doFetch(`${this.internalUrl}/internal${path}`, {
|
|
@@ -104,21 +312,81 @@ export class SuiteClient {
|
|
|
104
312
|
throw new SuiteError(`Suite ${method} ${path}: HTTP ${res.status}`, res.status, parsed);
|
|
105
313
|
return parsed;
|
|
106
314
|
}
|
|
107
|
-
/**
|
|
108
|
-
|
|
315
|
+
/**
|
|
316
|
+
* Upsert idempotente dei permessi del servizio: si chiama a ogni avvio. `acceptsFrom`
|
|
317
|
+
* dichiara chi può chiamare le audience del servizio e con quali scope
|
|
318
|
+
* (`{ [audience]: { [caller]: scopes[] } }`); sostituisce le regole delle audience indicate.
|
|
319
|
+
* `acceptsDelegationFrom` (stessa forma) è il sottoinsieme delegabile con `on_behalf_of`; deve
|
|
320
|
+
* stare dentro `acceptsFrom` della stessa chiamata. Un'audience registrata senza delega la perde.
|
|
321
|
+
*/
|
|
322
|
+
registerPermissions(permissions, opts = {}) {
|
|
109
323
|
return this.internal('POST', '/permissions/register', {
|
|
110
324
|
service: this.service,
|
|
111
325
|
permissions,
|
|
326
|
+
...(opts.acceptsFrom ? { acceptsFrom: opts.acceptsFrom } : {}),
|
|
327
|
+
...(opts.acceptsDelegationFrom ? { acceptsDelegationFrom: opts.acceptsDelegationFrom } : {}),
|
|
112
328
|
});
|
|
113
329
|
}
|
|
114
|
-
/**
|
|
330
|
+
/**
|
|
331
|
+
* Registra l'URL di invalidazione. Fuori produzione Suite restituisce anche un segreto HMAC,
|
|
332
|
+
* che resta in memoria; in produzione le notifiche sono firmate solo con JWT.
|
|
333
|
+
*/
|
|
115
334
|
async registerWebhook(url) {
|
|
116
335
|
const res = await this.internal('POST', '/llm-config/webhook', { url });
|
|
117
|
-
this.webhookSecret = res.secret;
|
|
336
|
+
this.webhookSecret = this.production ? undefined : (res.secret ?? undefined);
|
|
118
337
|
return res;
|
|
119
338
|
}
|
|
120
|
-
/**
|
|
339
|
+
/**
|
|
340
|
+
* Verifica una notifica di Suite con il JWT `suite-event+jwt` (Authorization: Bearer, legato al
|
|
341
|
+
* corpo grezzo con body_sha256, con protezione dal replay sul jti). Un JWT presente ma non
|
|
342
|
+
* valido è sempre un rifiuto: l'HMAC non lo salva mai. Solo fuori produzione, e solo se la
|
|
343
|
+
* notifica non ha un bearer, resta il fallback all'HMAC `x-suite-signature`.
|
|
344
|
+
*/
|
|
345
|
+
async verifyWebhookRequest(headers, rawBody) {
|
|
346
|
+
const auth = header(headers, 'authorization');
|
|
347
|
+
if (auth?.startsWith('Bearer ')) {
|
|
348
|
+
await this.verifyWebhookJwt(auth.slice(7).trim(), rawBody);
|
|
349
|
+
return JSON.parse(rawBody);
|
|
350
|
+
}
|
|
351
|
+
if (this.production) {
|
|
352
|
+
throw new TokenError('webhook senza JWT suite-event+jwt (in produzione l’HMAC non vale)');
|
|
353
|
+
}
|
|
354
|
+
return this.verifyWebhook(headers, rawBody);
|
|
355
|
+
}
|
|
356
|
+
async verifyWebhookJwt(token, rawBody) {
|
|
357
|
+
let payload;
|
|
358
|
+
try {
|
|
359
|
+
({ payload } = await jwtVerify(token, await this.getJwks(), {
|
|
360
|
+
issuer: this.issuer,
|
|
361
|
+
audience: this.service,
|
|
362
|
+
typ: EVENT_TOKEN_TYP,
|
|
363
|
+
algorithms: ['RS256'],
|
|
364
|
+
clockTolerance: SERVICE_CLOCK_TOLERANCE,
|
|
365
|
+
requiredClaims: ['exp', 'iat', 'jti'],
|
|
366
|
+
}));
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
throw new TokenError(`JWT del webhook non valido: ${err.message}`);
|
|
370
|
+
}
|
|
371
|
+
const digest = createHash('sha256').update(rawBody).digest('hex');
|
|
372
|
+
if (payload.body_sha256 !== digest)
|
|
373
|
+
throw new TokenError('body_sha256 non corrisponde');
|
|
374
|
+
const now = Date.now();
|
|
375
|
+
for (const [jti, exp] of this.seenWebhookJti)
|
|
376
|
+
if (exp < now)
|
|
377
|
+
this.seenWebhookJti.delete(jti);
|
|
378
|
+
if (this.seenWebhookJti.has(payload.jti))
|
|
379
|
+
throw new TokenError('webhook già ricevuto (replay)');
|
|
380
|
+
this.seenWebhookJti.set(payload.jti, (payload.exp + SERVICE_CLOCK_TOLERANCE) * 1000);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Verifica firma HMAC e freschezza di una notifica di Suite. Ritorna l'org da invalidare.
|
|
384
|
+
* Sempre rifiutata in produzione.
|
|
385
|
+
* @deprecated usare `verifyWebhookRequest` (JWT).
|
|
386
|
+
*/
|
|
121
387
|
verifyWebhook(headers, rawBody) {
|
|
388
|
+
if (this.production)
|
|
389
|
+
throw new TokenError('in produzione i webhook HMAC non sono accettati');
|
|
122
390
|
if (!this.webhookSecret)
|
|
123
391
|
throw new TokenError('webhook non registrato');
|
|
124
392
|
const ts = String(headers['x-suite-timestamp'] ?? '');
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { suiteAuth, type SuiteAuthOptions } from './plugin.js';
|
|
2
|
-
export { SuiteClient, SuiteError, TokenError, type LlmConfig, type OrgMember, type PermissionDefinition, type SuiteAuth, type SuiteClientOptions, } from './client.js';
|
|
2
|
+
export { DEFAULT_IN_CLUSTER_SUITE_URL, DEFAULT_SA_TOKEN_FILE, EVENT_TOKEN_TYP, SERVICE_TOKEN_TYP, SUITE_INTERNAL_AUDIENCE, ScopeError, SuiteClient, SuiteError, TokenError, defaultInternalUrl, type AcceptsFrom, type LlmConfig, type ServiceAuth, type SuiteWebhookEvent, type OrgMember, type PermissionDefinition, type SuiteAuth, type SuiteClientOptions, } from './client.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { suiteAuth } from './plugin.js';
|
|
2
|
-
export { SuiteClient, SuiteError, TokenError, } from './client.js';
|
|
2
|
+
export { DEFAULT_IN_CLUSTER_SUITE_URL, DEFAULT_SA_TOKEN_FILE, EVENT_TOKEN_TYP, SERVICE_TOKEN_TYP, SUITE_INTERNAL_AUDIENCE, ScopeError, SuiteClient, SuiteError, TokenError, defaultInternalUrl, } from './client.js';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,kBAAkB,GASnB,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import type { FastifyPluginAsync, preHandlerAsyncHookHandler } from 'fastify';
|
|
2
|
-
import { SuiteClient, type PermissionDefinition, type SuiteAuth, type SuiteClientOptions } from './client.js';
|
|
2
|
+
import { SuiteClient, type AcceptsFrom, type PermissionDefinition, type ServiceAuth, type SuiteAuth, type SuiteClientOptions } from './client.js';
|
|
3
3
|
export interface SuiteAuthOptions extends SuiteClientOptions {
|
|
4
4
|
/** Permessi del servizio, registrati all'avvio con upsert idempotente. */
|
|
5
5
|
permissions?: PermissionDefinition[];
|
|
6
|
+
/**
|
|
7
|
+
* Chi può chiamare questo servizio con un token di servizio e con quali scope,
|
|
8
|
+
* registrato all'avvio insieme ai permessi: `{ [audience]: { [caller]: scope[] } }`.
|
|
9
|
+
*/
|
|
10
|
+
acceptsFrom?: AcceptsFrom;
|
|
11
|
+
/**
|
|
12
|
+
* Sottoinsieme di `acceptsFrom` che i chiamanti possono usare con token delegati
|
|
13
|
+
* (`on_behalf_of`, fase 8): `{ [audience]: { [caller]: scope[] } }`. `requireServiceToken`
|
|
14
|
+
* rifiuta con 403 i token delegati di chiamanti non elencati per l'audience (senza questa
|
|
15
|
+
* opzione, tutti i token delegati).
|
|
16
|
+
*/
|
|
17
|
+
acceptsDelegationFrom?: AcceptsFrom;
|
|
6
18
|
/**
|
|
7
19
|
* URL pubblico (raggiungibile da Suite) dell'endpoint di invalidazione. Se valorizzato,
|
|
8
20
|
* all'avvio il plugin lo registra presso Suite (la route su `webhookPath` è sempre montata).
|
|
@@ -10,7 +22,7 @@ export interface SuiteAuthOptions extends SuiteClientOptions {
|
|
|
10
22
|
webhookUrl?: string;
|
|
11
23
|
/**
|
|
12
24
|
* Path locale dell'endpoint di invalidazione, montato sempre dal plugin
|
|
13
|
-
* (
|
|
25
|
+
* (senza un JWT valido, o fuori produzione una firma HMAC valida, risponde 401). Default: /internal/config-changed.
|
|
14
26
|
* `false` per non montarlo.
|
|
15
27
|
*/
|
|
16
28
|
webhookPath?: string | false;
|
|
@@ -24,9 +36,18 @@ declare module 'fastify' {
|
|
|
24
36
|
authenticate: preHandlerAsyncHookHandler;
|
|
25
37
|
/** preHandler: autentica e richiede il permesso indicato (nel token scoped del servizio). */
|
|
26
38
|
requirePermission: (...permissions: string[]) => preHandlerAsyncHookHandler;
|
|
39
|
+
/**
|
|
40
|
+
* preHandler per le chiamate da altri servizi: richiede un `svc+jwt` con `aud` di questo
|
|
41
|
+
* servizio (o `audience`) e gli scope indicati; popola `req.serviceAuth`.
|
|
42
|
+
*/
|
|
43
|
+
requireServiceToken: (opts?: {
|
|
44
|
+
scopes?: string[];
|
|
45
|
+
audience?: string;
|
|
46
|
+
}) => preHandlerAsyncHookHandler;
|
|
27
47
|
}
|
|
28
48
|
interface FastifyRequest {
|
|
29
49
|
auth: SuiteAuth;
|
|
50
|
+
serviceAuth: ServiceAuth;
|
|
30
51
|
}
|
|
31
52
|
}
|
|
32
53
|
export declare const suiteAuth: FastifyPluginAsync<SuiteAuthOptions>;
|
package/dist/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fp from 'fastify-plugin';
|
|
2
|
-
import { SuiteClient, TokenError, } from './client.js';
|
|
2
|
+
import { ScopeError, SuiteClient, TokenError, } from './client.js';
|
|
3
3
|
function unauthorized(reply, message) {
|
|
4
4
|
return reply
|
|
5
5
|
.code(401)
|
|
@@ -10,6 +10,7 @@ const plugin = async (app, opts) => {
|
|
|
10
10
|
const client = new SuiteClient(opts);
|
|
11
11
|
app.decorate('suite', client);
|
|
12
12
|
app.decorateRequest('auth', null);
|
|
13
|
+
app.decorateRequest('serviceAuth', null);
|
|
13
14
|
async function authenticate(req, reply) {
|
|
14
15
|
const header = req.headers.authorization;
|
|
15
16
|
if (!header?.startsWith('Bearer '))
|
|
@@ -39,14 +40,33 @@ const plugin = async (app, opts) => {
|
|
|
39
40
|
}
|
|
40
41
|
};
|
|
41
42
|
});
|
|
43
|
+
app.decorate('requireServiceToken', (o = {}) => {
|
|
44
|
+
return async function (req, reply) {
|
|
45
|
+
const audience = o.audience ?? client.service;
|
|
46
|
+
try {
|
|
47
|
+
req.serviceAuth = await client.verifyServiceToken(req, {
|
|
48
|
+
...o,
|
|
49
|
+
delegableCallers: Object.keys(opts.acceptsDelegationFrom?.[audience] ?? {}),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
if (err instanceof ScopeError) {
|
|
54
|
+
return reply.code(403).send({ error: 'forbidden', message: err.message });
|
|
55
|
+
}
|
|
56
|
+
if (err instanceof TokenError)
|
|
57
|
+
return unauthorized(reply, err.message);
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
});
|
|
42
62
|
if (opts.webhookPath !== false) {
|
|
43
63
|
const path = opts.webhookPath ?? '/internal/config-changed';
|
|
44
64
|
await app.register(async (child) => {
|
|
45
|
-
//
|
|
65
|
+
// JWT (body_sha256) e firma HMAC sono calcolati sul body grezzo.
|
|
46
66
|
child.addContentTypeParser('application/json', { parseAs: 'string' }, (_req, body, done) => done(null, body));
|
|
47
67
|
child.post(path, async (req, reply) => {
|
|
48
68
|
try {
|
|
49
|
-
const event = client.
|
|
69
|
+
const event = await client.verifyWebhookRequest(req.headers, String(req.body ?? ''));
|
|
50
70
|
client.invalidate(event.org_id);
|
|
51
71
|
return reply.code(204).send();
|
|
52
72
|
}
|
|
@@ -59,13 +79,18 @@ const plugin = async (app, opts) => {
|
|
|
59
79
|
});
|
|
60
80
|
});
|
|
61
81
|
}
|
|
62
|
-
// Registrazione all'avvio: permessi e webhook. Senza
|
|
82
|
+
// Registrazione all'avvio: permessi, acceptsFrom e webhook. Senza token SA né service key
|
|
83
|
+
// non c'è modo di chiamare /internal/*.
|
|
63
84
|
app.addHook('onReady', async () => {
|
|
64
|
-
if (!
|
|
85
|
+
if (!client.hasInternalCredentials())
|
|
65
86
|
return;
|
|
66
87
|
try {
|
|
67
|
-
if (opts.permissions?.length)
|
|
68
|
-
await client.registerPermissions(opts.permissions
|
|
88
|
+
if (opts.permissions?.length || opts.acceptsFrom) {
|
|
89
|
+
await client.registerPermissions(opts.permissions ?? [], {
|
|
90
|
+
acceptsFrom: opts.acceptsFrom,
|
|
91
|
+
acceptsDelegationFrom: opts.acceptsDelegationFrom,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
69
94
|
if (opts.webhookUrl)
|
|
70
95
|
await client.registerWebhook(opts.webhookUrl);
|
|
71
96
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EACL,WAAW,EACX,UAAU,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED