opencode-cursor-proxy 1.0.1
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/LICENSE +21 -0
- package/README.md +139 -0
- package/README.zh-CN.md +136 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/agent-service.d.ts +136 -0
- package/dist/lib/api/agent-service.js +938 -0
- package/dist/lib/api/agent-service.js.map +1 -0
- package/dist/lib/api/ai-service.d.ts +26 -0
- package/dist/lib/api/ai-service.js +38 -0
- package/dist/lib/api/ai-service.js.map +1 -0
- package/dist/lib/api/cursor-client.d.ts +119 -0
- package/dist/lib/api/cursor-client.js +511 -0
- package/dist/lib/api/cursor-client.js.map +1 -0
- package/dist/lib/api/cursor-models.d.ts +13 -0
- package/dist/lib/api/cursor-models.js +34 -0
- package/dist/lib/api/cursor-models.js.map +1 -0
- package/dist/lib/api/openai-compat.d.ts +10 -0
- package/dist/lib/api/openai-compat.js +262 -0
- package/dist/lib/api/openai-compat.js.map +1 -0
- package/dist/lib/api/proto/agent-messages.d.ts +25 -0
- package/dist/lib/api/proto/agent-messages.js +132 -0
- package/dist/lib/api/proto/agent-messages.js.map +1 -0
- package/dist/lib/api/proto/bidi.d.ts +17 -0
- package/dist/lib/api/proto/bidi.js +24 -0
- package/dist/lib/api/proto/bidi.js.map +1 -0
- package/dist/lib/api/proto/decoding.d.ts +19 -0
- package/dist/lib/api/proto/decoding.js +118 -0
- package/dist/lib/api/proto/decoding.js.map +1 -0
- package/dist/lib/api/proto/encoding.d.ts +64 -0
- package/dist/lib/api/proto/encoding.js +180 -0
- package/dist/lib/api/proto/encoding.js.map +1 -0
- package/dist/lib/api/proto/exec.d.ts +12 -0
- package/dist/lib/api/proto/exec.js +383 -0
- package/dist/lib/api/proto/exec.js.map +1 -0
- package/dist/lib/api/proto/index.d.ts +13 -0
- package/dist/lib/api/proto/index.js +10 -0
- package/dist/lib/api/proto/index.js.map +1 -0
- package/dist/lib/api/proto/interaction.d.ts +15 -0
- package/dist/lib/api/proto/interaction.js +99 -0
- package/dist/lib/api/proto/interaction.js.map +1 -0
- package/dist/lib/api/proto/kv.d.ts +52 -0
- package/dist/lib/api/proto/kv.js +156 -0
- package/dist/lib/api/proto/kv.js.map +1 -0
- package/dist/lib/api/proto/tool-calls.d.ts +9 -0
- package/dist/lib/api/proto/tool-calls.js +144 -0
- package/dist/lib/api/proto/tool-calls.js.map +1 -0
- package/dist/lib/api/proto/types.d.ts +201 -0
- package/dist/lib/api/proto/types.js +10 -0
- package/dist/lib/api/proto/types.js.map +1 -0
- package/dist/lib/auth/helpers.d.ts +40 -0
- package/dist/lib/auth/helpers.js +103 -0
- package/dist/lib/auth/helpers.js.map +1 -0
- package/dist/lib/auth/index.d.ts +7 -0
- package/dist/lib/auth/index.js +10 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/login.d.ts +55 -0
- package/dist/lib/auth/login.js +184 -0
- package/dist/lib/auth/login.js.map +1 -0
- package/dist/lib/config.d.ts +153 -0
- package/dist/lib/config.js +182 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/openai-compat/handler.d.ts +40 -0
- package/dist/lib/openai-compat/handler.js +808 -0
- package/dist/lib/openai-compat/handler.js.map +1 -0
- package/dist/lib/openai-compat/index.d.ts +9 -0
- package/dist/lib/openai-compat/index.js +13 -0
- package/dist/lib/openai-compat/index.js.map +1 -0
- package/dist/lib/openai-compat/types.d.ts +127 -0
- package/dist/lib/openai-compat/types.js +6 -0
- package/dist/lib/openai-compat/types.js.map +1 -0
- package/dist/lib/openai-compat/utils.d.ts +143 -0
- package/dist/lib/openai-compat/utils.js +348 -0
- package/dist/lib/openai-compat/utils.js.map +1 -0
- package/dist/lib/session-reuse.d.ts +88 -0
- package/dist/lib/session-reuse.js +198 -0
- package/dist/lib/session-reuse.js.map +1 -0
- package/dist/lib/storage.d.ts +55 -0
- package/dist/lib/storage.js +159 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/utils/cache.d.ts +131 -0
- package/dist/lib/utils/cache.js +297 -0
- package/dist/lib/utils/cache.js.map +1 -0
- package/dist/lib/utils/fetch.d.ts +84 -0
- package/dist/lib/utils/fetch.js +261 -0
- package/dist/lib/utils/fetch.js.map +1 -0
- package/dist/lib/utils/index.d.ts +13 -0
- package/dist/lib/utils/index.js +22 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/jwt.d.ts +40 -0
- package/dist/lib/utils/jwt.js +102 -0
- package/dist/lib/utils/jwt.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +107 -0
- package/dist/lib/utils/logger.js +227 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/lib/utils/model-resolver.d.ts +49 -0
- package/dist/lib/utils/model-resolver.js +503 -0
- package/dist/lib/utils/model-resolver.js.map +1 -0
- package/dist/lib/utils/request-pool.d.ts +38 -0
- package/dist/lib/utils/request-pool.js +105 -0
- package/dist/lib/utils/request-pool.js.map +1 -0
- package/dist/lib/utils/request-transformer.d.ts +87 -0
- package/dist/lib/utils/request-transformer.js +154 -0
- package/dist/lib/utils/request-transformer.js.map +1 -0
- package/dist/lib/utils/tokenizer.d.ts +14 -0
- package/dist/lib/utils/tokenizer.js +76 -0
- package/dist/lib/utils/tokenizer.js.map +1 -0
- package/dist/plugin/index.d.ts +8 -0
- package/dist/plugin/index.js +9 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/plugin.d.ts +21 -0
- package/dist/plugin/plugin.js +309 -0
- package/dist/plugin/plugin.js.map +1 -0
- package/dist/plugin/types.d.ts +120 -0
- package/dist/plugin/types.js +7 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.js +95 -0
- package/dist/server.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential Storage
|
|
3
|
+
*
|
|
4
|
+
* File-based credential storage for cross-platform compatibility.
|
|
5
|
+
* Stores authentication tokens in a JSON file.
|
|
6
|
+
*/
|
|
7
|
+
export interface StoredCredentials {
|
|
8
|
+
accessToken?: string;
|
|
9
|
+
refreshToken?: string;
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CredentialManager {
|
|
13
|
+
getAccessToken(): Promise<string | undefined>;
|
|
14
|
+
getRefreshToken(): Promise<string | undefined>;
|
|
15
|
+
getApiKey(): Promise<string | undefined>;
|
|
16
|
+
getAllCredentials(): Promise<StoredCredentials>;
|
|
17
|
+
setAuthentication(accessToken: string, refreshToken: string, apiKey?: string): Promise<void>;
|
|
18
|
+
clearAuthentication(): Promise<void>;
|
|
19
|
+
getStoragePath(): string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* FileCredentialManager - File-based credential storage
|
|
23
|
+
*
|
|
24
|
+
* Storage Locations:
|
|
25
|
+
* - Windows: %APPDATA%\<TitleCase(domain)>\auth.json
|
|
26
|
+
* - macOS: ~/.<domain>/auth.json
|
|
27
|
+
* - Linux: $XDG_CONFIG_HOME/<domain>/auth.json or ~/.config/<domain>/auth.json
|
|
28
|
+
*/
|
|
29
|
+
export declare class FileCredentialManager implements CredentialManager {
|
|
30
|
+
private cachedAccessToken;
|
|
31
|
+
private cachedRefreshToken;
|
|
32
|
+
private cachedApiKey;
|
|
33
|
+
private authFilePath;
|
|
34
|
+
constructor(domain?: string);
|
|
35
|
+
private toWindowsTitleCase;
|
|
36
|
+
private getAuthFilePath;
|
|
37
|
+
getStoragePath(): string;
|
|
38
|
+
private ensureDirectoryExists;
|
|
39
|
+
private readAuthData;
|
|
40
|
+
private writeAuthData;
|
|
41
|
+
setAuthentication(accessToken: string, refreshToken: string, apiKey?: string): Promise<void>;
|
|
42
|
+
getAccessToken(): Promise<string | undefined>;
|
|
43
|
+
getRefreshToken(): Promise<string | undefined>;
|
|
44
|
+
getApiKey(): Promise<string | undefined>;
|
|
45
|
+
getAllCredentials(): Promise<StoredCredentials>;
|
|
46
|
+
clearAuthentication(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Clear cached values to force reload from disk
|
|
49
|
+
*/
|
|
50
|
+
clearCache(): void;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a credential manager for the specified domain
|
|
54
|
+
*/
|
|
55
|
+
export declare function createCredentialManager(domain?: string): FileCredentialManager;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential Storage
|
|
3
|
+
*
|
|
4
|
+
* File-based credential storage for cross-platform compatibility.
|
|
5
|
+
* Stores authentication tokens in a JSON file.
|
|
6
|
+
*/
|
|
7
|
+
import { platform, homedir } from "node:os";
|
|
8
|
+
import { join, dirname } from "node:path";
|
|
9
|
+
import { promises as fs } from "node:fs";
|
|
10
|
+
/**
|
|
11
|
+
* FileCredentialManager - File-based credential storage
|
|
12
|
+
*
|
|
13
|
+
* Storage Locations:
|
|
14
|
+
* - Windows: %APPDATA%\<TitleCase(domain)>\auth.json
|
|
15
|
+
* - macOS: ~/.<domain>/auth.json
|
|
16
|
+
* - Linux: $XDG_CONFIG_HOME/<domain>/auth.json or ~/.config/<domain>/auth.json
|
|
17
|
+
*/
|
|
18
|
+
export class FileCredentialManager {
|
|
19
|
+
cachedAccessToken = null;
|
|
20
|
+
cachedRefreshToken = null;
|
|
21
|
+
cachedApiKey = null;
|
|
22
|
+
authFilePath;
|
|
23
|
+
constructor(domain = "cursor") {
|
|
24
|
+
this.authFilePath = this.getAuthFilePath(domain);
|
|
25
|
+
}
|
|
26
|
+
toWindowsTitleCase(domain) {
|
|
27
|
+
if (domain.length === 0)
|
|
28
|
+
return domain;
|
|
29
|
+
return domain.charAt(0).toUpperCase() + domain.slice(1).toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
getAuthFilePath(domain) {
|
|
32
|
+
const currentPlatform = platform();
|
|
33
|
+
switch (currentPlatform) {
|
|
34
|
+
case "win32": {
|
|
35
|
+
const appData = process.env.APPDATA || join(homedir(), "AppData", "Roaming");
|
|
36
|
+
const folder = this.toWindowsTitleCase(domain);
|
|
37
|
+
return join(appData, folder, "auth.json");
|
|
38
|
+
}
|
|
39
|
+
case "darwin":
|
|
40
|
+
return join(homedir(), `.${domain}`, "auth.json");
|
|
41
|
+
default: {
|
|
42
|
+
const configDir = process.env.XDG_CONFIG_HOME || join(homedir(), ".config");
|
|
43
|
+
return join(configDir, domain, "auth.json");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getStoragePath() {
|
|
48
|
+
return this.authFilePath;
|
|
49
|
+
}
|
|
50
|
+
async ensureDirectoryExists() {
|
|
51
|
+
const dir = dirname(this.authFilePath);
|
|
52
|
+
try {
|
|
53
|
+
await fs.mkdir(dir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error.code !== "EEXIST")
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async readAuthData() {
|
|
61
|
+
try {
|
|
62
|
+
const data = await fs.readFile(this.authFilePath, "utf-8");
|
|
63
|
+
return JSON.parse(data);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error.code === "ENOENT")
|
|
67
|
+
return null;
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async writeAuthData(data) {
|
|
72
|
+
await this.ensureDirectoryExists();
|
|
73
|
+
await fs.writeFile(this.authFilePath, JSON.stringify(data, null, 2), "utf-8");
|
|
74
|
+
}
|
|
75
|
+
async setAuthentication(accessToken, refreshToken, apiKey) {
|
|
76
|
+
await this.writeAuthData({ accessToken, refreshToken, apiKey });
|
|
77
|
+
this.cachedAccessToken = accessToken;
|
|
78
|
+
this.cachedRefreshToken = refreshToken;
|
|
79
|
+
this.cachedApiKey = apiKey ?? null;
|
|
80
|
+
}
|
|
81
|
+
async getAccessToken() {
|
|
82
|
+
if (this.cachedAccessToken)
|
|
83
|
+
return this.cachedAccessToken;
|
|
84
|
+
const authData = await this.readAuthData();
|
|
85
|
+
if (authData?.accessToken) {
|
|
86
|
+
this.cachedAccessToken = authData.accessToken;
|
|
87
|
+
this.cachedRefreshToken = authData.refreshToken ?? null;
|
|
88
|
+
this.cachedApiKey = authData.apiKey ?? null;
|
|
89
|
+
return authData.accessToken;
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
async getRefreshToken() {
|
|
94
|
+
if (this.cachedRefreshToken)
|
|
95
|
+
return this.cachedRefreshToken;
|
|
96
|
+
const authData = await this.readAuthData();
|
|
97
|
+
if (authData?.refreshToken) {
|
|
98
|
+
this.cachedAccessToken = authData.accessToken ?? null;
|
|
99
|
+
this.cachedRefreshToken = authData.refreshToken;
|
|
100
|
+
this.cachedApiKey = authData.apiKey ?? null;
|
|
101
|
+
return authData.refreshToken;
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
async getApiKey() {
|
|
106
|
+
if (this.cachedApiKey)
|
|
107
|
+
return this.cachedApiKey;
|
|
108
|
+
const authData = await this.readAuthData();
|
|
109
|
+
if (authData?.apiKey) {
|
|
110
|
+
this.cachedApiKey = authData.apiKey;
|
|
111
|
+
return authData.apiKey;
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
async getAllCredentials() {
|
|
116
|
+
if (this.cachedAccessToken !== null && this.cachedRefreshToken !== null) {
|
|
117
|
+
return {
|
|
118
|
+
accessToken: this.cachedAccessToken || undefined,
|
|
119
|
+
refreshToken: this.cachedRefreshToken || undefined,
|
|
120
|
+
apiKey: this.cachedApiKey || undefined,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const authData = await this.readAuthData();
|
|
124
|
+
if (authData) {
|
|
125
|
+
this.cachedAccessToken = authData.accessToken || null;
|
|
126
|
+
this.cachedRefreshToken = authData.refreshToken || null;
|
|
127
|
+
this.cachedApiKey = authData.apiKey || null;
|
|
128
|
+
return authData;
|
|
129
|
+
}
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
async clearAuthentication() {
|
|
133
|
+
try {
|
|
134
|
+
await fs.unlink(this.authFilePath);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error.code !== "ENOENT")
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
this.cachedAccessToken = null;
|
|
141
|
+
this.cachedRefreshToken = null;
|
|
142
|
+
this.cachedApiKey = null;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Clear cached values to force reload from disk
|
|
146
|
+
*/
|
|
147
|
+
clearCache() {
|
|
148
|
+
this.cachedAccessToken = null;
|
|
149
|
+
this.cachedRefreshToken = null;
|
|
150
|
+
this.cachedApiKey = null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a credential manager for the specified domain
|
|
155
|
+
*/
|
|
156
|
+
export function createCredentialManager(domain = "cursor") {
|
|
157
|
+
return new FileCredentialManager(domain);
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/lib/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU Cache Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides memory-efficient caching with:
|
|
5
|
+
* - Least Recently Used eviction
|
|
6
|
+
* - Time-based expiration (TTL)
|
|
7
|
+
* - Size limits
|
|
8
|
+
* - Optional dispose callbacks
|
|
9
|
+
*/
|
|
10
|
+
export interface LRUCacheOptions<V> {
|
|
11
|
+
/** Maximum number of items in cache */
|
|
12
|
+
max: number;
|
|
13
|
+
/** Time-to-live in milliseconds (0 = no expiration) */
|
|
14
|
+
ttl?: number;
|
|
15
|
+
/** Callback when an item is evicted */
|
|
16
|
+
onEvict?: (key: string, value: V) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Simple LRU Cache with TTL support
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const cache = new LRUCache<User>({ max: 100, ttl: 60000 });
|
|
24
|
+
*
|
|
25
|
+
* cache.set("user:1", { id: 1, name: "Alice" });
|
|
26
|
+
* const user = cache.get("user:1");
|
|
27
|
+
*
|
|
28
|
+
* // With dispose callback
|
|
29
|
+
* const sessions = new LRUCache<Session>({
|
|
30
|
+
* max: 50,
|
|
31
|
+
* ttl: 15 * 60 * 1000,
|
|
32
|
+
* onEvict: (key, session) => session.close(),
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class LRUCache<V> {
|
|
37
|
+
private cache;
|
|
38
|
+
private max;
|
|
39
|
+
private ttl;
|
|
40
|
+
private onEvict?;
|
|
41
|
+
constructor(options: LRUCacheOptions<V>);
|
|
42
|
+
/**
|
|
43
|
+
* Get an item from the cache
|
|
44
|
+
* Returns undefined if not found or expired
|
|
45
|
+
*/
|
|
46
|
+
get(key: string): V | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Set an item in the cache
|
|
49
|
+
*/
|
|
50
|
+
set(key: string, value: V, ttl?: number): this;
|
|
51
|
+
/**
|
|
52
|
+
* Check if a key exists and is not expired
|
|
53
|
+
*/
|
|
54
|
+
has(key: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Delete an item from the cache
|
|
57
|
+
*/
|
|
58
|
+
delete(key: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Clear all items from the cache
|
|
61
|
+
*/
|
|
62
|
+
clear(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get the number of items in the cache
|
|
65
|
+
*/
|
|
66
|
+
get size(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Get all keys in the cache
|
|
69
|
+
*/
|
|
70
|
+
keys(): IterableIterator<string>;
|
|
71
|
+
/**
|
|
72
|
+
* Get all values in the cache (excluding expired)
|
|
73
|
+
*/
|
|
74
|
+
values(): IterableIterator<V>;
|
|
75
|
+
/**
|
|
76
|
+
* Get all entries in the cache (excluding expired)
|
|
77
|
+
*/
|
|
78
|
+
entries(): IterableIterator<[string, V]>;
|
|
79
|
+
/**
|
|
80
|
+
* Remove expired entries
|
|
81
|
+
*/
|
|
82
|
+
prune(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Get cache statistics
|
|
85
|
+
*/
|
|
86
|
+
stats(): {
|
|
87
|
+
size: number;
|
|
88
|
+
max: number;
|
|
89
|
+
ttl: number;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A Map that automatically evicts oldest entries when max size is reached
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* const blobs = new BoundedMap<Uint8Array>(1000);
|
|
98
|
+
* blobs.set("key", new Uint8Array([1, 2, 3]));
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare class BoundedMap<V> {
|
|
102
|
+
private map;
|
|
103
|
+
private max;
|
|
104
|
+
private onEvict?;
|
|
105
|
+
constructor(max: number, onEvict?: (key: string, value: V) => void);
|
|
106
|
+
get(key: string): V | undefined;
|
|
107
|
+
set(key: string, value: V): this;
|
|
108
|
+
has(key: string): boolean;
|
|
109
|
+
delete(key: string): boolean;
|
|
110
|
+
clear(): void;
|
|
111
|
+
get size(): number;
|
|
112
|
+
keys(): IterableIterator<string>;
|
|
113
|
+
values(): IterableIterator<V>;
|
|
114
|
+
entries(): IterableIterator<[string, V]>;
|
|
115
|
+
forEach(callback: (value: V, key: string, map: BoundedMap<V>) => void): void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Memoize an async function with cache
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* const fetchUser = memoizeAsync(
|
|
123
|
+
* async (id: string) => await api.getUser(id),
|
|
124
|
+
* { max: 100, ttl: 60000 }
|
|
125
|
+
* );
|
|
126
|
+
*
|
|
127
|
+
* const user = await fetchUser("user:1"); // Fetches from API
|
|
128
|
+
* const cached = await fetchUser("user:1"); // Returns cached value
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function memoizeAsync<T>(fn: (key: string) => Promise<T>, options: LRUCacheOptions<T>): (key: string) => Promise<T>;
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU Cache Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides memory-efficient caching with:
|
|
5
|
+
* - Least Recently Used eviction
|
|
6
|
+
* - Time-based expiration (TTL)
|
|
7
|
+
* - Size limits
|
|
8
|
+
* - Optional dispose callbacks
|
|
9
|
+
*/
|
|
10
|
+
// --- LRU Cache Implementation ---
|
|
11
|
+
/**
|
|
12
|
+
* Simple LRU Cache with TTL support
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const cache = new LRUCache<User>({ max: 100, ttl: 60000 });
|
|
17
|
+
*
|
|
18
|
+
* cache.set("user:1", { id: 1, name: "Alice" });
|
|
19
|
+
* const user = cache.get("user:1");
|
|
20
|
+
*
|
|
21
|
+
* // With dispose callback
|
|
22
|
+
* const sessions = new LRUCache<Session>({
|
|
23
|
+
* max: 50,
|
|
24
|
+
* ttl: 15 * 60 * 1000,
|
|
25
|
+
* onEvict: (key, session) => session.close(),
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class LRUCache {
|
|
30
|
+
cache;
|
|
31
|
+
max;
|
|
32
|
+
ttl;
|
|
33
|
+
onEvict;
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this.cache = new Map();
|
|
36
|
+
this.max = options.max;
|
|
37
|
+
this.ttl = options.ttl ?? 0;
|
|
38
|
+
this.onEvict = options.onEvict;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get an item from the cache
|
|
42
|
+
* Returns undefined if not found or expired
|
|
43
|
+
*/
|
|
44
|
+
get(key) {
|
|
45
|
+
const entry = this.cache.get(key);
|
|
46
|
+
if (!entry) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
// Check expiration
|
|
50
|
+
if (entry.expiresAt !== null && Date.now() > entry.expiresAt) {
|
|
51
|
+
this.delete(key);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
// Move to end (most recently used)
|
|
55
|
+
this.cache.delete(key);
|
|
56
|
+
this.cache.set(key, entry);
|
|
57
|
+
return entry.value;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set an item in the cache
|
|
61
|
+
*/
|
|
62
|
+
set(key, value, ttl) {
|
|
63
|
+
// Delete existing entry if present
|
|
64
|
+
if (this.cache.has(key)) {
|
|
65
|
+
this.cache.delete(key);
|
|
66
|
+
}
|
|
67
|
+
// Evict oldest entries if at capacity
|
|
68
|
+
while (this.cache.size >= this.max) {
|
|
69
|
+
const oldestKey = this.cache.keys().next().value;
|
|
70
|
+
if (oldestKey !== undefined) {
|
|
71
|
+
this.delete(oldestKey);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Calculate expiration
|
|
75
|
+
const effectiveTtl = ttl ?? this.ttl;
|
|
76
|
+
const expiresAt = effectiveTtl > 0 ? Date.now() + effectiveTtl : null;
|
|
77
|
+
// Add new entry
|
|
78
|
+
this.cache.set(key, { value, expiresAt });
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if a key exists and is not expired
|
|
83
|
+
*/
|
|
84
|
+
has(key) {
|
|
85
|
+
const entry = this.cache.get(key);
|
|
86
|
+
if (!entry)
|
|
87
|
+
return false;
|
|
88
|
+
if (entry.expiresAt !== null && Date.now() > entry.expiresAt) {
|
|
89
|
+
this.delete(key);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Delete an item from the cache
|
|
96
|
+
*/
|
|
97
|
+
delete(key) {
|
|
98
|
+
const entry = this.cache.get(key);
|
|
99
|
+
if (entry && this.onEvict) {
|
|
100
|
+
this.onEvict(key, entry.value);
|
|
101
|
+
}
|
|
102
|
+
return this.cache.delete(key);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Clear all items from the cache
|
|
106
|
+
*/
|
|
107
|
+
clear() {
|
|
108
|
+
if (this.onEvict) {
|
|
109
|
+
for (const [key, entry] of this.cache) {
|
|
110
|
+
this.onEvict(key, entry.value);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this.cache.clear();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get the number of items in the cache
|
|
117
|
+
*/
|
|
118
|
+
get size() {
|
|
119
|
+
return this.cache.size;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get all keys in the cache
|
|
123
|
+
*/
|
|
124
|
+
keys() {
|
|
125
|
+
return this.cache.keys();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get all values in the cache (excluding expired)
|
|
129
|
+
*/
|
|
130
|
+
*values() {
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
for (const [key, entry] of this.cache) {
|
|
133
|
+
if (entry.expiresAt !== null && now > entry.expiresAt) {
|
|
134
|
+
this.delete(key);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
yield entry.value;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get all entries in the cache (excluding expired)
|
|
142
|
+
*/
|
|
143
|
+
*entries() {
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
for (const [key, entry] of this.cache) {
|
|
146
|
+
if (entry.expiresAt !== null && now > entry.expiresAt) {
|
|
147
|
+
this.delete(key);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
yield [key, entry.value];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Remove expired entries
|
|
155
|
+
*/
|
|
156
|
+
prune() {
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
let pruned = 0;
|
|
159
|
+
for (const [key, entry] of this.cache) {
|
|
160
|
+
if (entry.expiresAt !== null && now > entry.expiresAt) {
|
|
161
|
+
this.delete(key);
|
|
162
|
+
pruned++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return pruned;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get cache statistics
|
|
169
|
+
*/
|
|
170
|
+
stats() {
|
|
171
|
+
return {
|
|
172
|
+
size: this.cache.size,
|
|
173
|
+
max: this.max,
|
|
174
|
+
ttl: this.ttl,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// --- Bounded Map (Size-Limited) ---
|
|
179
|
+
/**
|
|
180
|
+
* A Map that automatically evicts oldest entries when max size is reached
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* const blobs = new BoundedMap<Uint8Array>(1000);
|
|
185
|
+
* blobs.set("key", new Uint8Array([1, 2, 3]));
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
export class BoundedMap {
|
|
189
|
+
map;
|
|
190
|
+
max;
|
|
191
|
+
onEvict;
|
|
192
|
+
constructor(max, onEvict) {
|
|
193
|
+
this.map = new Map();
|
|
194
|
+
this.max = max;
|
|
195
|
+
this.onEvict = onEvict;
|
|
196
|
+
}
|
|
197
|
+
get(key) {
|
|
198
|
+
return this.map.get(key);
|
|
199
|
+
}
|
|
200
|
+
set(key, value) {
|
|
201
|
+
// Delete existing if present
|
|
202
|
+
if (this.map.has(key)) {
|
|
203
|
+
this.map.delete(key);
|
|
204
|
+
}
|
|
205
|
+
// Evict oldest if at capacity
|
|
206
|
+
while (this.map.size >= this.max) {
|
|
207
|
+
const oldestKey = this.map.keys().next().value;
|
|
208
|
+
if (oldestKey !== undefined) {
|
|
209
|
+
const oldValue = this.map.get(oldestKey);
|
|
210
|
+
if (oldValue !== undefined && this.onEvict) {
|
|
211
|
+
this.onEvict(oldestKey, oldValue);
|
|
212
|
+
}
|
|
213
|
+
this.map.delete(oldestKey);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
this.map.set(key, value);
|
|
217
|
+
return this;
|
|
218
|
+
}
|
|
219
|
+
has(key) {
|
|
220
|
+
return this.map.has(key);
|
|
221
|
+
}
|
|
222
|
+
delete(key) {
|
|
223
|
+
const value = this.map.get(key);
|
|
224
|
+
if (value !== undefined && this.onEvict) {
|
|
225
|
+
this.onEvict(key, value);
|
|
226
|
+
}
|
|
227
|
+
return this.map.delete(key);
|
|
228
|
+
}
|
|
229
|
+
clear() {
|
|
230
|
+
if (this.onEvict) {
|
|
231
|
+
for (const [key, value] of this.map) {
|
|
232
|
+
this.onEvict(key, value);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
this.map.clear();
|
|
236
|
+
}
|
|
237
|
+
get size() {
|
|
238
|
+
return this.map.size;
|
|
239
|
+
}
|
|
240
|
+
keys() {
|
|
241
|
+
return this.map.keys();
|
|
242
|
+
}
|
|
243
|
+
values() {
|
|
244
|
+
return this.map.values();
|
|
245
|
+
}
|
|
246
|
+
entries() {
|
|
247
|
+
return this.map.entries();
|
|
248
|
+
}
|
|
249
|
+
forEach(callback) {
|
|
250
|
+
this.map.forEach((value, key) => callback(value, key, this));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// --- Async Memoization ---
|
|
254
|
+
/**
|
|
255
|
+
* Memoize an async function with cache
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```ts
|
|
259
|
+
* const fetchUser = memoizeAsync(
|
|
260
|
+
* async (id: string) => await api.getUser(id),
|
|
261
|
+
* { max: 100, ttl: 60000 }
|
|
262
|
+
* );
|
|
263
|
+
*
|
|
264
|
+
* const user = await fetchUser("user:1"); // Fetches from API
|
|
265
|
+
* const cached = await fetchUser("user:1"); // Returns cached value
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
export function memoizeAsync(fn, options) {
|
|
269
|
+
const cache = new LRUCache(options);
|
|
270
|
+
const pending = new Map();
|
|
271
|
+
return async (key) => {
|
|
272
|
+
// Return cached value if available
|
|
273
|
+
const cached = cache.get(key);
|
|
274
|
+
if (cached !== undefined) {
|
|
275
|
+
return cached;
|
|
276
|
+
}
|
|
277
|
+
// Return pending promise if already fetching
|
|
278
|
+
const pendingPromise = pending.get(key);
|
|
279
|
+
if (pendingPromise) {
|
|
280
|
+
return pendingPromise;
|
|
281
|
+
}
|
|
282
|
+
// Fetch and cache
|
|
283
|
+
const promise = fn(key)
|
|
284
|
+
.then((value) => {
|
|
285
|
+
cache.set(key, value);
|
|
286
|
+
pending.delete(key);
|
|
287
|
+
return value;
|
|
288
|
+
})
|
|
289
|
+
.catch((error) => {
|
|
290
|
+
pending.delete(key);
|
|
291
|
+
throw error;
|
|
292
|
+
});
|
|
293
|
+
pending.set(key, promise);
|
|
294
|
+
return promise;
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/lib/utils/cache.ts"],"names":[],"mappings":"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"}
|