@obul.ai/sdk 0.1.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.
Files changed (61) hide show
  1. package/dist/adapters/cloudflare.d.ts +6 -0
  2. package/dist/adapters/cloudflare.d.ts.map +1 -0
  3. package/dist/adapters/cloudflare.js +12 -0
  4. package/dist/adapters/cloudflare.js.map +1 -0
  5. package/dist/adapters/express.d.ts +3 -0
  6. package/dist/adapters/express.d.ts.map +1 -0
  7. package/dist/adapters/express.js +22 -0
  8. package/dist/adapters/express.js.map +1 -0
  9. package/dist/adapters/hono.d.ts +4 -0
  10. package/dist/adapters/hono.d.ts.map +1 -0
  11. package/dist/adapters/hono.js +19 -0
  12. package/dist/adapters/hono.js.map +1 -0
  13. package/dist/adapters/next.d.ts +6 -0
  14. package/dist/adapters/next.d.ts.map +1 -0
  15. package/dist/adapters/next.js +15 -0
  16. package/dist/adapters/next.js.map +1 -0
  17. package/dist/adapters/node.d.ts +21 -0
  18. package/dist/adapters/node.d.ts.map +1 -0
  19. package/dist/adapters/node.js +108 -0
  20. package/dist/adapters/node.js.map +1 -0
  21. package/dist/browser/index.d.ts +52 -0
  22. package/dist/browser/index.d.ts.map +1 -0
  23. package/dist/browser/index.js +202 -0
  24. package/dist/browser/index.js.map +1 -0
  25. package/dist/core/cookies.d.ts +4 -0
  26. package/dist/core/cookies.d.ts.map +1 -0
  27. package/dist/core/cookies.js +44 -0
  28. package/dist/core/cookies.js.map +1 -0
  29. package/dist/core/crypto.d.ts +10 -0
  30. package/dist/core/crypto.d.ts.map +1 -0
  31. package/dist/core/crypto.js +68 -0
  32. package/dist/core/crypto.js.map +1 -0
  33. package/dist/core/index.d.ts +7 -0
  34. package/dist/core/index.d.ts.map +1 -0
  35. package/dist/core/index.js +6 -0
  36. package/dist/core/index.js.map +1 -0
  37. package/dist/core/jwt.d.ts +8 -0
  38. package/dist/core/jwt.d.ts.map +1 -0
  39. package/dist/core/jwt.js +15 -0
  40. package/dist/core/jwt.js.map +1 -0
  41. package/dist/core/oauth.d.ts +39 -0
  42. package/dist/core/oauth.d.ts.map +1 -0
  43. package/dist/core/oauth.js +86 -0
  44. package/dist/core/oauth.js.map +1 -0
  45. package/dist/core/stores.d.ts +18 -0
  46. package/dist/core/stores.d.ts.map +1 -0
  47. package/dist/core/stores.js +39 -0
  48. package/dist/core/stores.js.map +1 -0
  49. package/dist/core/types.d.ts +84 -0
  50. package/dist/core/types.d.ts.map +1 -0
  51. package/dist/core/types.js +2 -0
  52. package/dist/core/types.js.map +1 -0
  53. package/dist/index.d.ts +2 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +2 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/server/index.d.ts +31 -0
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +368 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/package.json +68 -0
@@ -0,0 +1,368 @@
1
+ import { createDefaultCrypto, generatePkcePair, randomId } from "../core/crypto";
2
+ import { parseCookies, serializeCookie } from "../core/cookies";
3
+ import { decodeJwtPayload } from "../core/jwt";
4
+ import { createObulOAuthClient } from "../core/oauth";
5
+ import { MemorySessionStore, MemoryTokenStore } from "../core/stores";
6
+ const CSRF_COOKIE_NAME = "obul_csrf";
7
+ const DEFAULT_STATE_TTL_SECONDS = 300;
8
+ const DEFAULT_SESSION_TTL_SECONDS = 60 * 60 * 24;
9
+ const EXPIRY_SKEW_MS = 30000;
10
+ export function createObulServer(config) {
11
+ const fetcher = config.fetch ?? fetch;
12
+ const crypto = config.crypto ?? createDefaultCrypto();
13
+ const clock = config.clock ?? { now: () => Date.now() };
14
+ const tokenStore = config.tokenStore ?? new MemoryTokenStore();
15
+ const sessionStore = config.sessionStore ?? new MemorySessionStore();
16
+ const logger = config.logger ?? console;
17
+ const cookieName = config.cookieName ?? "obul_session";
18
+ const cookieOptions = {
19
+ httpOnly: true,
20
+ secure: true,
21
+ sameSite: "lax",
22
+ path: "/",
23
+ ...config.cookieOptions
24
+ };
25
+ const csrfCookieOptions = {
26
+ httpOnly: false,
27
+ secure: cookieOptions.secure,
28
+ sameSite: cookieOptions.sameSite,
29
+ path: cookieOptions.path ?? "/"
30
+ };
31
+ const stateTtlSeconds = config.stateTtlSeconds ?? DEFAULT_STATE_TTL_SECONDS;
32
+ const sessionTtlSeconds = config.sessionTtlSeconds ?? DEFAULT_SESSION_TTL_SECONDS;
33
+ const basePath = normalizeBasePath(config.basePath);
34
+ const obulClient = createObulOAuthClient({
35
+ issuerUrl: config.issuerUrl,
36
+ authEndpoint: config.authEndpoint,
37
+ tokenEndpoint: config.tokenEndpoint,
38
+ revocationEndpoint: config.revocationEndpoint,
39
+ clientId: config.clientId,
40
+ clientSecret: config.clientSecret,
41
+ redirectUri: config.redirectUri,
42
+ scopes: config.scopes
43
+ }, { fetch: fetcher, logger });
44
+ const setSessionCookies = (headers, sessionId, csrfToken) => {
45
+ const maxAge = sessionTtlSeconds;
46
+ headers.append("Set-Cookie", serializeCookie(cookieName, sessionId, {
47
+ ...cookieOptions,
48
+ maxAge
49
+ }));
50
+ headers.append("Set-Cookie", serializeCookie(CSRF_COOKIE_NAME, csrfToken, {
51
+ ...csrfCookieOptions,
52
+ maxAge
53
+ }));
54
+ };
55
+ const clearSessionCookies = (headers) => {
56
+ headers.append("Set-Cookie", serializeCookie(cookieName, "", {
57
+ ...cookieOptions,
58
+ maxAge: 0
59
+ }));
60
+ headers.append("Set-Cookie", serializeCookie(CSRF_COOKIE_NAME, "", {
61
+ ...csrfCookieOptions,
62
+ maxAge: 0
63
+ }));
64
+ };
65
+ const requireCsrf = (request, cookies) => {
66
+ const method = request.method.toUpperCase();
67
+ if (method === "GET" || method === "HEAD" || method === "OPTIONS")
68
+ return { ok: true };
69
+ const cookie = cookies[CSRF_COOKIE_NAME];
70
+ const header = request.headers.get("x-obul-csrf") ?? request.headers.get("x-csrf-token");
71
+ if (!cookie || !header || cookie !== header) {
72
+ return { ok: false, response: jsonResponse({ error: "csrf_failed" }, 403) };
73
+ }
74
+ return { ok: true };
75
+ };
76
+ const resolveSession = async (cookies) => {
77
+ const sessionId = cookies[cookieName];
78
+ if (!sessionId)
79
+ return undefined;
80
+ const session = await sessionStore.getSession(sessionId);
81
+ if (!session)
82
+ return undefined;
83
+ const now = clock.now();
84
+ if (session.expiresAt <= now) {
85
+ await sessionStore.deleteSession(sessionId);
86
+ await tokenStore.delete(session.tokenId);
87
+ return undefined;
88
+ }
89
+ const token = await tokenStore.get(session.tokenId);
90
+ if (!token)
91
+ return undefined;
92
+ if (token.expiresAt <= now + EXPIRY_SKEW_MS) {
93
+ return { session, token, expired: true };
94
+ }
95
+ return { session, token, expired: false };
96
+ };
97
+ const handleLogin = async (request) => {
98
+ const { codeVerifier, codeChallenge } = await generatePkcePair(crypto);
99
+ const state = randomId(crypto, 16);
100
+ const url = new URL(request.url);
101
+ const returnTo = url.searchParams.get("return_to") ?? config.postLoginRedirect;
102
+ const stateRecord = {
103
+ codeVerifier,
104
+ returnTo: returnTo ?? undefined,
105
+ createdAt: clock.now()
106
+ };
107
+ await sessionStore.setState(state, stateRecord);
108
+ const authUrl = obulClient.getAuthUrl({ state, codeChallenge });
109
+ return redirectResponse(authUrl);
110
+ };
111
+ const handleCallback = async (request) => {
112
+ const url = new URL(request.url);
113
+ const error = url.searchParams.get("error");
114
+ const errorDescription = url.searchParams.get("error_description");
115
+ if (error) {
116
+ logger.warn?.("OAuth callback error", { error, errorDescription });
117
+ return jsonResponse({ error, error_description: errorDescription ?? undefined }, 401);
118
+ }
119
+ const code = url.searchParams.get("code");
120
+ const state = url.searchParams.get("state");
121
+ if (!code || !state) {
122
+ return jsonResponse({ error: "missing_code_or_state" }, 400);
123
+ }
124
+ const stateRecord = await sessionStore.getState(state);
125
+ if (!stateRecord) {
126
+ return jsonResponse({ error: "invalid_state" }, 400);
127
+ }
128
+ const now = clock.now();
129
+ if (stateRecord.createdAt + stateTtlSeconds * 1000 <= now) {
130
+ await sessionStore.deleteState(state);
131
+ return jsonResponse({ error: "state_expired" }, 400);
132
+ }
133
+ await sessionStore.deleteState(state);
134
+ try {
135
+ const tokenResponse = await obulClient.exchangeCode({ code, codeVerifier: stateRecord.codeVerifier });
136
+ const expiresIn = tokenResponse.expires_in ?? 3600;
137
+ const tokenExpiresAt = now + expiresIn * 1000;
138
+ const sessionId = randomId(crypto, 24);
139
+ const tokenId = randomId(crypto, 24);
140
+ const csrfToken = randomId(crypto, 16);
141
+ const tokenRecord = {
142
+ accessToken: tokenResponse.access_token,
143
+ refreshToken: tokenResponse.refresh_token,
144
+ expiresAt: tokenExpiresAt
145
+ };
146
+ const sessionRecord = {
147
+ id: sessionId,
148
+ tokenId,
149
+ csrfToken,
150
+ expiresAt: now + sessionTtlSeconds * 1000
151
+ };
152
+ await tokenStore.set(tokenId, tokenRecord);
153
+ await sessionStore.setSession(sessionId, sessionRecord);
154
+ const claims = decodeJwtPayload(tokenRecord.accessToken);
155
+ const sessionPayload = {
156
+ authenticated: true,
157
+ expiresAt: tokenRecord.expiresAt,
158
+ limits: {
159
+ allowed_hosts: Array.isArray(claims?.allowed_hosts) ? claims?.allowed_hosts : [],
160
+ max_price_per_request: typeof claims?.max_price_per_request === "number" ? claims.max_price_per_request : 0
161
+ }
162
+ };
163
+ const headers = new Headers();
164
+ setSessionCookies(headers, sessionId, csrfToken);
165
+ const wantsJson = request.headers.get("accept")?.includes("application/json");
166
+ const isClient = request.headers.get("x-obul-client");
167
+ if (wantsJson || isClient) {
168
+ const body = {
169
+ ok: true,
170
+ redirectTo: stateRecord.returnTo,
171
+ session: sessionPayload
172
+ };
173
+ headers.set("Content-Type", "application/json");
174
+ return new Response(JSON.stringify(body), { status: 200, headers });
175
+ }
176
+ headers.set("Location", stateRecord.returnTo ?? config.postLoginRedirect ?? "/");
177
+ return new Response(null, { status: 302, headers });
178
+ }
179
+ catch (err) {
180
+ logger.error?.("OAuth callback failed", err);
181
+ return jsonResponse({ error: "token_exchange_failed" }, 500);
182
+ }
183
+ };
184
+ const handleSession = async (cookies) => {
185
+ const resolved = await resolveSession(cookies);
186
+ if (!resolved || resolved.expired) {
187
+ return jsonResponse({ authenticated: false });
188
+ }
189
+ const claims = decodeJwtPayload(resolved.token.accessToken);
190
+ return jsonResponse({
191
+ authenticated: true,
192
+ expiresAt: resolved.token.expiresAt,
193
+ limits: {
194
+ allowed_hosts: Array.isArray(claims?.allowed_hosts) ? claims?.allowed_hosts : [],
195
+ max_price_per_request: typeof claims?.max_price_per_request === "number" ? claims.max_price_per_request : 0
196
+ }
197
+ });
198
+ };
199
+ const handleRefresh = async (request, cookies) => {
200
+ const csrfCheck = requireCsrf(request, cookies);
201
+ if (!csrfCheck.ok)
202
+ return csrfCheck.response;
203
+ const resolved = await resolveSession(cookies);
204
+ if (!resolved) {
205
+ return jsonResponse({ error: "not_authenticated" }, 401);
206
+ }
207
+ const refreshToken = resolved.token.refreshToken;
208
+ if (!refreshToken) {
209
+ return jsonResponse({ error: "missing_refresh_token" }, 400);
210
+ }
211
+ try {
212
+ const refreshed = await obulClient.refresh({ refreshToken });
213
+ const now = clock.now();
214
+ const expiresIn = refreshed.expires_in ?? 3600;
215
+ const updatedToken = {
216
+ accessToken: refreshed.access_token,
217
+ refreshToken: refreshed.refresh_token ?? refreshToken,
218
+ expiresAt: now + expiresIn * 1000
219
+ };
220
+ await tokenStore.set(resolved.session.tokenId, updatedToken);
221
+ return jsonResponse({ ok: true, expiresAt: updatedToken.expiresAt });
222
+ }
223
+ catch (err) {
224
+ logger.warn?.("Token refresh failed", err);
225
+ return jsonResponse({ error: "refresh_failed" }, 401);
226
+ }
227
+ };
228
+ const handleLogout = async (request, cookies) => {
229
+ const csrfCheck = requireCsrf(request, cookies);
230
+ if (!csrfCheck.ok)
231
+ return csrfCheck.response;
232
+ const resolved = await resolveSession(cookies);
233
+ if (resolved) {
234
+ const { accessToken, refreshToken } = resolved.token;
235
+ if (refreshToken) {
236
+ await obulClient.revoke({ token: refreshToken, tokenTypeHint: "refresh_token" });
237
+ }
238
+ if (accessToken) {
239
+ await obulClient.revoke({ token: accessToken, tokenTypeHint: "access_token" });
240
+ }
241
+ await tokenStore.delete(resolved.session.tokenId);
242
+ await sessionStore.deleteSession(resolved.session.id);
243
+ }
244
+ const headers = new Headers({ "Content-Type": "application/json" });
245
+ clearSessionCookies(headers);
246
+ return new Response(JSON.stringify({ ok: true, redirectTo: config.postLogoutRedirect }), {
247
+ status: 200,
248
+ headers
249
+ });
250
+ };
251
+ const handleProxy = async (request, cookies) => {
252
+ const csrfCheck = requireCsrf(request, cookies);
253
+ if (!csrfCheck.ok)
254
+ return csrfCheck.response;
255
+ const resolved = await resolveSession(cookies);
256
+ if (!resolved || resolved.expired) {
257
+ return jsonResponse({ error: "not_authenticated" }, 401);
258
+ }
259
+ if (!config.apiBaseUrl) {
260
+ return jsonResponse({ error: "api_base_url_not_configured" }, 500);
261
+ }
262
+ const url = new URL(request.url);
263
+ const apiPrefix = `${basePath}/api`;
264
+ const suffix = url.pathname.startsWith(apiPrefix) ? url.pathname.slice(apiPrefix.length) : "";
265
+ const target = new URL(`${suffix || "/"}${url.search}`, config.apiBaseUrl);
266
+ const claims = decodeJwtPayload(resolved.token.accessToken);
267
+ const allowedHosts = Array.isArray(claims?.allowed_hosts) ? claims.allowed_hosts : [];
268
+ if (allowedHosts.length > 0 && !allowedHosts.includes(target.hostname)) {
269
+ return jsonResponse({ error: "host_not_allowed" }, 403);
270
+ }
271
+ const maxPriceClaim = typeof claims?.max_price_per_request === "number" ? claims.max_price_per_request : undefined;
272
+ const requestedMaxPrice = request.headers.get("x-obul-max-price");
273
+ if (requestedMaxPrice && maxPriceClaim != null) {
274
+ const requested = Number(requestedMaxPrice);
275
+ if (!Number.isFinite(requested) || requested > maxPriceClaim) {
276
+ return jsonResponse({ error: "max_price_exceeded" }, 400);
277
+ }
278
+ }
279
+ try {
280
+ const hopByHop = new Set([
281
+ "connection",
282
+ "keep-alive",
283
+ "proxy-authenticate",
284
+ "proxy-authorization",
285
+ "te",
286
+ "trailer",
287
+ "transfer-encoding",
288
+ "upgrade",
289
+ "host",
290
+ "cookie",
291
+ "authorization"
292
+ ]);
293
+ const headers = new Headers();
294
+ request.headers.forEach((value, key) => {
295
+ if (hopByHop.has(key.toLowerCase()))
296
+ return;
297
+ headers.set(key, value);
298
+ });
299
+ headers.set("Authorization", `Bearer ${resolved.token.accessToken}`);
300
+ if (requestedMaxPrice)
301
+ headers.set("X-Obul-Max-Price", requestedMaxPrice);
302
+ const body = await readBody(request);
303
+ const upstream = await fetcher(target.toString(), {
304
+ method: request.method,
305
+ headers,
306
+ body: body && request.method !== "GET" && request.method !== "HEAD" ? body : undefined
307
+ });
308
+ const responseHeaders = new Headers();
309
+ upstream.headers.forEach((value, key) => {
310
+ if (key.toLowerCase() === "set-cookie")
311
+ return;
312
+ responseHeaders.set(key, value);
313
+ });
314
+ const buffer = await upstream.arrayBuffer();
315
+ return new Response(buffer, { status: upstream.status, headers: responseHeaders });
316
+ }
317
+ catch (err) {
318
+ logger.error?.("Proxy request failed", err);
319
+ return jsonResponse({ error: "upstream_error" }, 502);
320
+ }
321
+ };
322
+ const handle = async (request) => {
323
+ const url = new URL(request.url);
324
+ if (!url.pathname.startsWith(basePath)) {
325
+ return jsonResponse({ error: "not_found" }, 404);
326
+ }
327
+ const cookies = parseCookies(request.headers.get("cookie"));
328
+ const path = url.pathname.slice(basePath.length) || "/";
329
+ if (path === "/login" && request.method === "GET")
330
+ return handleLogin(request);
331
+ if (path === "/callback" && request.method === "GET")
332
+ return handleCallback(request);
333
+ if (path === "/session" && request.method === "GET")
334
+ return handleSession(cookies);
335
+ if (path === "/refresh" && request.method === "POST")
336
+ return handleRefresh(request, cookies);
337
+ if (path === "/logout" && request.method === "POST")
338
+ return handleLogout(request, cookies);
339
+ if (path.startsWith("/api/"))
340
+ return handleProxy(request, cookies);
341
+ return jsonResponse({ error: "not_found" }, 404);
342
+ };
343
+ return { handle, obulClient };
344
+ }
345
+ function normalizeBasePath(basePath) {
346
+ if (!basePath)
347
+ return "/obul";
348
+ if (!basePath.startsWith("/"))
349
+ return `/${basePath}`;
350
+ return basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
351
+ }
352
+ function redirectResponse(location) {
353
+ return new Response(null, { status: 302, headers: { Location: location } });
354
+ }
355
+ function jsonResponse(data, status = 200) {
356
+ return new Response(JSON.stringify(data), {
357
+ status,
358
+ headers: { "Content-Type": "application/json" }
359
+ });
360
+ }
361
+ async function readBody(request) {
362
+ const method = request.method.toUpperCase();
363
+ if (method === "GET" || method === "HEAD")
364
+ return undefined;
365
+ const buffer = await request.arrayBuffer();
366
+ return buffer.byteLength ? buffer : undefined;
367
+ }
368
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@obul.ai/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Single-package Obul BFF SDK facade with browser client, server core, and framework adapters.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./browser": {
14
+ "types": "./dist/browser/index.d.ts",
15
+ "default": "./dist/browser/index.js"
16
+ },
17
+ "./server": {
18
+ "types": "./dist/server/index.d.ts",
19
+ "default": "./dist/server/index.js"
20
+ },
21
+ "./core": {
22
+ "types": "./dist/core/index.d.ts",
23
+ "default": "./dist/core/index.js"
24
+ },
25
+ "./adapters/express": {
26
+ "types": "./dist/adapters/express.d.ts",
27
+ "default": "./dist/adapters/express.js"
28
+ },
29
+ "./adapters/next": {
30
+ "types": "./dist/adapters/next.d.ts",
31
+ "default": "./dist/adapters/next.js"
32
+ },
33
+ "./adapters/hono": {
34
+ "types": "./dist/adapters/hono.d.ts",
35
+ "default": "./dist/adapters/hono.js"
36
+ },
37
+ "./adapters/cloudflare": {
38
+ "types": "./dist/adapters/cloudflare.d.ts",
39
+ "default": "./dist/adapters/cloudflare.js"
40
+ }
41
+ },
42
+ "files": [
43
+ "dist"
44
+ ],
45
+ "sideEffects": false,
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "typecheck": "tsc -p tsconfig.json --noEmit"
49
+ },
50
+ "peerDependencies": {
51
+ "cookie-parser": "^1.4.6",
52
+ "express": "^4.18.0",
53
+ "hono": "^4.0.0",
54
+ "next": ">=13.0.0"
55
+ },
56
+ "peerDependenciesMeta": {
57
+ "cookie-parser": { "optional": true },
58
+ "express": { "optional": true },
59
+ "hono": { "optional": true },
60
+ "next": { "optional": true }
61
+ },
62
+ "devDependencies": {
63
+ "@types/cookie-parser": "^1.4.7",
64
+ "@types/express": "^4.17.21",
65
+ "@types/node": "^20.11.30",
66
+ "hono": "^4.0.0"
67
+ }
68
+ }