@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.
- package/dist/adapters/cloudflare.d.ts +6 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -0
- package/dist/adapters/cloudflare.js +12 -0
- package/dist/adapters/cloudflare.js.map +1 -0
- package/dist/adapters/express.d.ts +3 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +22 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/hono.d.ts +4 -0
- package/dist/adapters/hono.d.ts.map +1 -0
- package/dist/adapters/hono.js +19 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/next.d.ts +6 -0
- package/dist/adapters/next.d.ts.map +1 -0
- package/dist/adapters/next.js +15 -0
- package/dist/adapters/next.js.map +1 -0
- package/dist/adapters/node.d.ts +21 -0
- package/dist/adapters/node.d.ts.map +1 -0
- package/dist/adapters/node.js +108 -0
- package/dist/adapters/node.js.map +1 -0
- package/dist/browser/index.d.ts +52 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +202 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/core/cookies.d.ts +4 -0
- package/dist/core/cookies.d.ts.map +1 -0
- package/dist/core/cookies.js +44 -0
- package/dist/core/cookies.js.map +1 -0
- package/dist/core/crypto.d.ts +10 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +68 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/jwt.d.ts +8 -0
- package/dist/core/jwt.d.ts.map +1 -0
- package/dist/core/jwt.js +15 -0
- package/dist/core/jwt.js.map +1 -0
- package/dist/core/oauth.d.ts +39 -0
- package/dist/core/oauth.d.ts.map +1 -0
- package/dist/core/oauth.js +86 -0
- package/dist/core/oauth.js.map +1 -0
- package/dist/core/stores.d.ts +18 -0
- package/dist/core/stores.d.ts.map +1 -0
- package/dist/core/stores.js +39 -0
- package/dist/core/stores.js.map +1 -0
- package/dist/core/types.d.ts +84 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +31 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +368 -0
- package/dist/server/index.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
function bytesToBase64(bytes) {
|
|
2
|
+
if (typeof Buffer !== "undefined") {
|
|
3
|
+
return Buffer.from(bytes).toString("base64");
|
|
4
|
+
}
|
|
5
|
+
let binary = "";
|
|
6
|
+
for (const byte of bytes) {
|
|
7
|
+
binary += String.fromCharCode(byte);
|
|
8
|
+
}
|
|
9
|
+
if (typeof btoa === "function") {
|
|
10
|
+
return btoa(binary);
|
|
11
|
+
}
|
|
12
|
+
throw new Error("No base64 encoder available");
|
|
13
|
+
}
|
|
14
|
+
function base64ToBytes(base64) {
|
|
15
|
+
if (typeof Buffer !== "undefined") {
|
|
16
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
17
|
+
}
|
|
18
|
+
if (typeof atob === "function") {
|
|
19
|
+
const binary = atob(base64);
|
|
20
|
+
const bytes = new Uint8Array(binary.length);
|
|
21
|
+
for (let i = 0; i < binary.length; i += 1) {
|
|
22
|
+
bytes[i] = binary.charCodeAt(i);
|
|
23
|
+
}
|
|
24
|
+
return bytes;
|
|
25
|
+
}
|
|
26
|
+
throw new Error("No base64 decoder available");
|
|
27
|
+
}
|
|
28
|
+
export function base64UrlEncode(input) {
|
|
29
|
+
return bytesToBase64(input)
|
|
30
|
+
.replace(/=/g, "")
|
|
31
|
+
.replace(/\+/g, "-")
|
|
32
|
+
.replace(/\//g, "_");
|
|
33
|
+
}
|
|
34
|
+
export function base64UrlDecode(input) {
|
|
35
|
+
const normalized = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
36
|
+
const padding = (4 - (normalized.length % 4)) % 4;
|
|
37
|
+
const padded = normalized + "=".repeat(padding);
|
|
38
|
+
return base64ToBytes(padded);
|
|
39
|
+
}
|
|
40
|
+
export function createDefaultCrypto() {
|
|
41
|
+
const cryptoObj = globalThis.crypto;
|
|
42
|
+
if (!cryptoObj?.getRandomValues || !cryptoObj?.subtle) {
|
|
43
|
+
throw new Error("Web Crypto is required; provide config.crypto in non-web runtimes");
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
randomBytes: (length) => {
|
|
47
|
+
const bytes = new Uint8Array(length);
|
|
48
|
+
cryptoObj.getRandomValues(bytes);
|
|
49
|
+
return bytes;
|
|
50
|
+
},
|
|
51
|
+
sha256: async (input) => {
|
|
52
|
+
const copy = new Uint8Array(input.byteLength);
|
|
53
|
+
copy.set(input);
|
|
54
|
+
const digest = await cryptoObj.subtle.digest("SHA-256", copy.buffer);
|
|
55
|
+
return new Uint8Array(digest);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export async function generatePkcePair(crypto) {
|
|
60
|
+
const codeVerifier = base64UrlEncode(crypto.randomBytes(32));
|
|
61
|
+
const digest = await crypto.sha256(new TextEncoder().encode(codeVerifier));
|
|
62
|
+
const codeChallenge = base64UrlEncode(digest);
|
|
63
|
+
return { codeVerifier, codeChallenge };
|
|
64
|
+
}
|
|
65
|
+
export function randomId(crypto, bytes = 32) {
|
|
66
|
+
return base64UrlEncode(crypto.randomBytes(bytes));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/core/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { Clock, CookieOptions, CryptoLike, FetchLike, Logger, ObulServerConfig, ObulSession, SessionRecord, SessionStore, StateRecord, TokenRecord, TokenStore } from "./types";
|
|
2
|
+
export { MemorySessionStore, MemoryTokenStore } from "./stores";
|
|
3
|
+
export { createDefaultCrypto, generatePkcePair, randomId } from "./crypto";
|
|
4
|
+
export { decodeJwtPayload } from "./jwt";
|
|
5
|
+
export { parseCookies, serializeCookie } from "./cookies";
|
|
6
|
+
export { createObulOAuthClient } from "./oauth";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MemorySessionStore, MemoryTokenStore } from "./stores";
|
|
2
|
+
export { createDefaultCrypto, generatePkcePair, randomId } from "./crypto";
|
|
3
|
+
export { decodeJwtPayload } from "./jwt";
|
|
4
|
+
export { parseCookies, serializeCookie } from "./cookies";
|
|
5
|
+
export { createObulOAuthClient } from "./oauth";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/core/jwt.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUhE"}
|
package/dist/core/jwt.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { base64UrlDecode } from "./crypto";
|
|
2
|
+
export function decodeJwtPayload(token) {
|
|
3
|
+
const parts = token.split(".");
|
|
4
|
+
if (parts.length < 2)
|
|
5
|
+
return null;
|
|
6
|
+
try {
|
|
7
|
+
const payloadBytes = base64UrlDecode(parts[1]);
|
|
8
|
+
const json = new TextDecoder().decode(payloadBytes);
|
|
9
|
+
return JSON.parse(json);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/core/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAS1C,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { FetchLike, Logger } from "./types";
|
|
2
|
+
export type ObulOAuthClientConfig = {
|
|
3
|
+
issuerUrl: string;
|
|
4
|
+
authEndpoint: string;
|
|
5
|
+
tokenEndpoint: string;
|
|
6
|
+
revocationEndpoint?: string;
|
|
7
|
+
clientId: string;
|
|
8
|
+
clientSecret?: string;
|
|
9
|
+
redirectUri: string;
|
|
10
|
+
scopes: string[];
|
|
11
|
+
};
|
|
12
|
+
export type TokenResponse = {
|
|
13
|
+
access_token: string;
|
|
14
|
+
refresh_token?: string;
|
|
15
|
+
expires_in?: number;
|
|
16
|
+
token_type?: string;
|
|
17
|
+
scope?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function createObulOAuthClient(config: ObulOAuthClientConfig, options: {
|
|
20
|
+
fetch: FetchLike;
|
|
21
|
+
logger?: Logger;
|
|
22
|
+
}): {
|
|
23
|
+
getAuthUrl: (params: {
|
|
24
|
+
state: string;
|
|
25
|
+
codeChallenge: string;
|
|
26
|
+
}) => string;
|
|
27
|
+
exchangeCode: (params: {
|
|
28
|
+
code: string;
|
|
29
|
+
codeVerifier: string;
|
|
30
|
+
}) => Promise<TokenResponse>;
|
|
31
|
+
refresh: (params: {
|
|
32
|
+
refreshToken: string;
|
|
33
|
+
}) => Promise<TokenResponse>;
|
|
34
|
+
revoke: (params: {
|
|
35
|
+
token: string;
|
|
36
|
+
tokenTypeHint?: "access_token" | "refresh_token";
|
|
37
|
+
}) => Promise<void>;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/core/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;yBAKlB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;2BAYhC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;sBA2B3C;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE;qBAyBzB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,cAAc,GAAG,eAAe,CAAA;KAAE;EAwBlG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export function createObulOAuthClient(config, options) {
|
|
2
|
+
const fetcher = options.fetch;
|
|
3
|
+
const logger = options.logger;
|
|
4
|
+
const getAuthUrl = (params) => {
|
|
5
|
+
const url = new URL(config.authEndpoint, config.issuerUrl);
|
|
6
|
+
url.searchParams.set("client_id", config.clientId);
|
|
7
|
+
url.searchParams.set("redirect_uri", config.redirectUri);
|
|
8
|
+
url.searchParams.set("response_type", "code");
|
|
9
|
+
url.searchParams.set("scope", config.scopes.join(" "));
|
|
10
|
+
url.searchParams.set("code_challenge", params.codeChallenge);
|
|
11
|
+
url.searchParams.set("code_challenge_method", "S256");
|
|
12
|
+
url.searchParams.set("state", params.state);
|
|
13
|
+
return url.toString();
|
|
14
|
+
};
|
|
15
|
+
const exchangeCode = async (params) => {
|
|
16
|
+
const body = new URLSearchParams();
|
|
17
|
+
body.set("grant_type", "authorization_code");
|
|
18
|
+
body.set("code", params.code);
|
|
19
|
+
body.set("redirect_uri", config.redirectUri);
|
|
20
|
+
body.set("client_id", config.clientId);
|
|
21
|
+
body.set("code_verifier", params.codeVerifier);
|
|
22
|
+
if (config.clientSecret)
|
|
23
|
+
body.set("client_secret", config.clientSecret);
|
|
24
|
+
const res = await fetcher(new URL(config.tokenEndpoint, config.issuerUrl), {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: {
|
|
27
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
28
|
+
Accept: "application/json"
|
|
29
|
+
},
|
|
30
|
+
body
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
const text = await res.text();
|
|
34
|
+
logger?.warn?.("Token exchange failed", { status: res.status, text });
|
|
35
|
+
throw new Error(`Token exchange failed (${res.status})`);
|
|
36
|
+
}
|
|
37
|
+
return (await res.json());
|
|
38
|
+
};
|
|
39
|
+
const refresh = async (params) => {
|
|
40
|
+
const body = new URLSearchParams();
|
|
41
|
+
body.set("grant_type", "refresh_token");
|
|
42
|
+
body.set("refresh_token", params.refreshToken);
|
|
43
|
+
body.set("client_id", config.clientId);
|
|
44
|
+
if (config.clientSecret)
|
|
45
|
+
body.set("client_secret", config.clientSecret);
|
|
46
|
+
const res = await fetcher(new URL(config.tokenEndpoint, config.issuerUrl), {
|
|
47
|
+
method: "POST",
|
|
48
|
+
headers: {
|
|
49
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
50
|
+
Accept: "application/json"
|
|
51
|
+
},
|
|
52
|
+
body
|
|
53
|
+
});
|
|
54
|
+
if (!res.ok) {
|
|
55
|
+
const text = await res.text();
|
|
56
|
+
logger?.warn?.("Token refresh failed", { status: res.status, text });
|
|
57
|
+
throw new Error(`Token refresh failed (${res.status})`);
|
|
58
|
+
}
|
|
59
|
+
return (await res.json());
|
|
60
|
+
};
|
|
61
|
+
const revoke = async (params) => {
|
|
62
|
+
if (!config.revocationEndpoint)
|
|
63
|
+
return;
|
|
64
|
+
const body = new URLSearchParams();
|
|
65
|
+
body.set("token", params.token);
|
|
66
|
+
if (params.tokenTypeHint)
|
|
67
|
+
body.set("token_type_hint", params.tokenTypeHint);
|
|
68
|
+
body.set("client_id", config.clientId);
|
|
69
|
+
if (config.clientSecret)
|
|
70
|
+
body.set("client_secret", config.clientSecret);
|
|
71
|
+
const res = await fetcher(new URL(config.revocationEndpoint, config.issuerUrl), {
|
|
72
|
+
method: "POST",
|
|
73
|
+
headers: {
|
|
74
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
75
|
+
Accept: "application/json"
|
|
76
|
+
},
|
|
77
|
+
body
|
|
78
|
+
});
|
|
79
|
+
if (!res.ok) {
|
|
80
|
+
const text = await res.text();
|
|
81
|
+
logger?.warn?.("Token revocation failed", { status: res.status, text });
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
return { getAuthUrl, exchangeCode, refresh, revoke };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/core/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SessionRecord, SessionStore, StateRecord, TokenRecord, TokenStore } from "./types";
|
|
2
|
+
export declare class MemoryTokenStore implements TokenStore {
|
|
3
|
+
private store;
|
|
4
|
+
get(id: string): Promise<TokenRecord | undefined>;
|
|
5
|
+
set(id: string, record: TokenRecord): Promise<void>;
|
|
6
|
+
delete(id: string): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class MemorySessionStore implements SessionStore {
|
|
9
|
+
private sessions;
|
|
10
|
+
private states;
|
|
11
|
+
getSession(id: string): Promise<SessionRecord | undefined>;
|
|
12
|
+
setSession(id: string, record: SessionRecord): Promise<void>;
|
|
13
|
+
deleteSession(id: string): Promise<void>;
|
|
14
|
+
getState(id: string): Promise<StateRecord | undefined>;
|
|
15
|
+
setState(id: string, record: StateRecord): Promise<void>;
|
|
16
|
+
deleteState(id: string): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=stores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/core/stores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEhG,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,KAAK,CAAiC;IAExC,GAAG,CAAC,EAAE,EAAE,MAAM;IAId,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAInC,MAAM,CAAC,EAAE,EAAE,MAAM;CAGxB;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAAiC;IAEzC,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAI5C,aAAa,CAAC,EAAE,EAAE,MAAM;IAIxB,QAAQ,CAAC,EAAE,EAAE,MAAM;IAInB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAIxC,WAAW,CAAC,EAAE,EAAE,MAAM;CAG7B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class MemoryTokenStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.store = new Map();
|
|
4
|
+
}
|
|
5
|
+
async get(id) {
|
|
6
|
+
return this.store.get(id);
|
|
7
|
+
}
|
|
8
|
+
async set(id, record) {
|
|
9
|
+
this.store.set(id, record);
|
|
10
|
+
}
|
|
11
|
+
async delete(id) {
|
|
12
|
+
this.store.delete(id);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class MemorySessionStore {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.sessions = new Map();
|
|
18
|
+
this.states = new Map();
|
|
19
|
+
}
|
|
20
|
+
async getSession(id) {
|
|
21
|
+
return this.sessions.get(id);
|
|
22
|
+
}
|
|
23
|
+
async setSession(id, record) {
|
|
24
|
+
this.sessions.set(id, record);
|
|
25
|
+
}
|
|
26
|
+
async deleteSession(id) {
|
|
27
|
+
this.sessions.delete(id);
|
|
28
|
+
}
|
|
29
|
+
async getState(id) {
|
|
30
|
+
return this.states.get(id);
|
|
31
|
+
}
|
|
32
|
+
async setState(id, record) {
|
|
33
|
+
this.states.set(id, record);
|
|
34
|
+
}
|
|
35
|
+
async deleteState(id) {
|
|
36
|
+
this.states.delete(id);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/core/stores.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAA7B;QACU,UAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAahD,CAAC;IAXC,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,MAAmB;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAA/B;QACU,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;QAC3C,WAAM,GAAG,IAAI,GAAG,EAAuB,CAAA;IAyBjD,CAAC;IAvBC,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,MAAqB;QAChD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,MAAmB;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export type ObulSession = {
|
|
2
|
+
authenticated: boolean;
|
|
3
|
+
expiresAt?: number;
|
|
4
|
+
limits?: {
|
|
5
|
+
allowed_hosts: string[];
|
|
6
|
+
max_price_per_request: number;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export type TokenRecord = {
|
|
10
|
+
accessToken: string;
|
|
11
|
+
refreshToken?: string;
|
|
12
|
+
expiresAt: number;
|
|
13
|
+
};
|
|
14
|
+
export type SessionRecord = {
|
|
15
|
+
id: string;
|
|
16
|
+
tokenId: string;
|
|
17
|
+
csrfToken: string;
|
|
18
|
+
expiresAt: number;
|
|
19
|
+
};
|
|
20
|
+
export type StateRecord = {
|
|
21
|
+
codeVerifier: string;
|
|
22
|
+
returnTo?: string;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
};
|
|
25
|
+
export interface TokenStore {
|
|
26
|
+
get: (id: string) => Promise<TokenRecord | undefined>;
|
|
27
|
+
set: (id: string, record: TokenRecord) => Promise<void>;
|
|
28
|
+
delete: (id: string) => Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionStore {
|
|
31
|
+
getSession: (id: string) => Promise<SessionRecord | undefined>;
|
|
32
|
+
setSession: (id: string, record: SessionRecord) => Promise<void>;
|
|
33
|
+
deleteSession: (id: string) => Promise<void>;
|
|
34
|
+
getState: (id: string) => Promise<StateRecord | undefined>;
|
|
35
|
+
setState: (id: string, record: StateRecord) => Promise<void>;
|
|
36
|
+
deleteState: (id: string) => Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export type Logger = {
|
|
39
|
+
debug?: (message: string, meta?: unknown) => void;
|
|
40
|
+
info?: (message: string, meta?: unknown) => void;
|
|
41
|
+
warn?: (message: string, meta?: unknown) => void;
|
|
42
|
+
error?: (message: string, meta?: unknown) => void;
|
|
43
|
+
};
|
|
44
|
+
export type CookieOptions = {
|
|
45
|
+
httpOnly?: boolean;
|
|
46
|
+
secure?: boolean;
|
|
47
|
+
sameSite?: "lax" | "strict" | "none";
|
|
48
|
+
path?: string;
|
|
49
|
+
domain?: string;
|
|
50
|
+
maxAge?: number;
|
|
51
|
+
};
|
|
52
|
+
export type ObulServerConfig = {
|
|
53
|
+
issuerUrl: string;
|
|
54
|
+
authEndpoint: string;
|
|
55
|
+
tokenEndpoint: string;
|
|
56
|
+
revocationEndpoint?: string;
|
|
57
|
+
apiBaseUrl?: string;
|
|
58
|
+
clientId: string;
|
|
59
|
+
clientSecret?: string;
|
|
60
|
+
redirectUri: string;
|
|
61
|
+
scopes: string[];
|
|
62
|
+
cookieName?: string;
|
|
63
|
+
cookieOptions?: CookieOptions;
|
|
64
|
+
stateTtlSeconds?: number;
|
|
65
|
+
sessionTtlSeconds?: number;
|
|
66
|
+
tokenStore?: TokenStore;
|
|
67
|
+
sessionStore?: SessionStore;
|
|
68
|
+
logger?: Logger;
|
|
69
|
+
postLoginRedirect?: string;
|
|
70
|
+
postLogoutRedirect?: string;
|
|
71
|
+
basePath?: string;
|
|
72
|
+
fetch?: FetchLike;
|
|
73
|
+
crypto?: CryptoLike;
|
|
74
|
+
clock?: Clock;
|
|
75
|
+
};
|
|
76
|
+
export type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
77
|
+
export type CryptoLike = {
|
|
78
|
+
randomBytes: (length: number) => Uint8Array;
|
|
79
|
+
sha256: (input: Uint8Array) => Promise<Uint8Array>;
|
|
80
|
+
};
|
|
81
|
+
export type Clock = {
|
|
82
|
+
now: () => number;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ObulServerConfig, ObulSession } from "../core/types";
|
|
2
|
+
export type HandleCallbackResult = {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
redirectTo?: string;
|
|
5
|
+
session?: ObulSession;
|
|
6
|
+
error?: {
|
|
7
|
+
code: string;
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare function createObulServer(config: ObulServerConfig): {
|
|
12
|
+
handle: (request: Request) => Promise<Response>;
|
|
13
|
+
obulClient: {
|
|
14
|
+
getAuthUrl: (params: {
|
|
15
|
+
state: string;
|
|
16
|
+
codeChallenge: string;
|
|
17
|
+
}) => string;
|
|
18
|
+
exchangeCode: (params: {
|
|
19
|
+
code: string;
|
|
20
|
+
codeVerifier: string;
|
|
21
|
+
}) => Promise<import("../core/oauth").TokenResponse>;
|
|
22
|
+
refresh: (params: {
|
|
23
|
+
refreshToken: string;
|
|
24
|
+
}) => Promise<import("../core/oauth").TokenResponse>;
|
|
25
|
+
revoke: (params: {
|
|
26
|
+
token: string;
|
|
27
|
+
tokenTypeHint?: "access_token" | "refresh_token";
|
|
28
|
+
}) => Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,gBAAgB,EAChB,WAAW,EAMZ,MAAM,eAAe,CAAA;AAQtB,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C,CAAA;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB;sBAoXxB,OAAO,KAAG,OAAO,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;yBA9S5C,CAAC;;;EAkUhB"}
|