dsh-plugin-image-workbench 1.1.5 → 1.1.7
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 -21
- package/README.en.md +5 -3
- package/README.md +7 -3
- package/client.js +241 -241
- package/cordis.patch.yml +14 -14
- package/host.js +51 -0
- package/install.mjs +333 -387
- package/package.json +3 -2
- package/scripts/fetch-style-images.mjs +104 -0
- package/scripts/vendor-snapshot.py +154 -154
- package/server/access.py +26 -26
- package/server/app.py +1371 -1329
- package/server/catalog.py +147 -147
- package/server/composer.py +391 -391
- package/server/drafts.py +158 -158
- package/server/history.py +575 -575
- package/server/imaging.py +172 -172
- package/server/pool.py +1335 -1335
- package/server/pool_admin.py +921 -921
- package/server/pool_service.py +1073 -1073
- package/server/requirements.txt +6 -6
- package/server/smoke_check.py +402 -402
- package/server/static/access.html +202 -202
- package/server/static/index.html +15 -0
- package/vendor/chatgpt2api/source/.env.example +82 -82
- package/vendor/chatgpt2api/source/.python-version +1 -1
- package/vendor/chatgpt2api/source/LICENSE +21 -21
- package/vendor/chatgpt2api/source/README.md +391 -391
- package/vendor/chatgpt2api/source/VERSION +1 -1
- package/vendor/chatgpt2api/source/api/__init__.py +2 -2
- package/vendor/chatgpt2api/source/api/accounts.py +537 -537
- package/vendor/chatgpt2api/source/api/ai.py +217 -217
- package/vendor/chatgpt2api/source/api/app.py +62 -62
- package/vendor/chatgpt2api/source/api/errors.py +46 -46
- package/vendor/chatgpt2api/source/api/image_inputs.py +309 -309
- package/vendor/chatgpt2api/source/api/image_tasks.py +120 -120
- package/vendor/chatgpt2api/source/api/support.py +134 -134
- package/vendor/chatgpt2api/source/api/system.py +365 -365
- package/vendor/chatgpt2api/source/assets/kunrouai.svg +50 -50
- package/vendor/chatgpt2api/source/config.default.json +108 -108
- package/vendor/chatgpt2api/source/main.py +9 -9
- package/vendor/chatgpt2api/source/pyproject.toml +27 -27
- package/vendor/chatgpt2api/source/scripts/init_proxy_config.py +186 -186
- package/vendor/chatgpt2api/source/scripts/migrate_storage.py +163 -163
- package/vendor/chatgpt2api/source/scripts/privoxy-warp.conf +13 -13
- package/vendor/chatgpt2api/source/scripts/test_outlook_token_mailbox.py +385 -385
- package/vendor/chatgpt2api/source/scripts/test_storage.py +129 -129
- package/vendor/chatgpt2api/source/scripts/verify_oauth_refresh.py +92 -92
- package/vendor/chatgpt2api/source/services/account_service.py +1757 -1757
- package/vendor/chatgpt2api/source/services/auth_service.py +253 -253
- package/vendor/chatgpt2api/source/services/backup_service.py +671 -671
- package/vendor/chatgpt2api/source/services/config.py +667 -667
- package/vendor/chatgpt2api/source/services/content_filter.py +242 -242
- package/vendor/chatgpt2api/source/services/cpa_service.py +315 -315
- package/vendor/chatgpt2api/source/services/editable_file_task_service.py +260 -260
- package/vendor/chatgpt2api/source/services/image_service.py +376 -376
- package/vendor/chatgpt2api/source/services/image_storage_service.py +405 -405
- package/vendor/chatgpt2api/source/services/image_tags_service.py +76 -76
- package/vendor/chatgpt2api/source/services/image_task_service.py +550 -550
- package/vendor/chatgpt2api/source/services/log_service.py +337 -337
- package/vendor/chatgpt2api/source/services/model_service.py +182 -182
- package/vendor/chatgpt2api/source/services/oauth_login_service.py +267 -267
- package/vendor/chatgpt2api/source/services/openai_backend_api.py +2763 -2763
- package/vendor/chatgpt2api/source/services/openai_oauth.py +32 -32
- package/vendor/chatgpt2api/source/services/protocol/__init__.py +2 -2
- package/vendor/chatgpt2api/source/services/protocol/anthropic_v1_messages.py +307 -307
- package/vendor/chatgpt2api/source/services/protocol/chat_completion_cache.py +238 -238
- package/vendor/chatgpt2api/source/services/protocol/conversation.py +1644 -1644
- package/vendor/chatgpt2api/source/services/protocol/error_response.py +124 -124
- package/vendor/chatgpt2api/source/services/protocol/openai_search.py +19 -19
- package/vendor/chatgpt2api/source/services/protocol/openai_v1_chat_complete.py +316 -316
- package/vendor/chatgpt2api/source/services/protocol/openai_v1_image_edit.py +86 -86
- package/vendor/chatgpt2api/source/services/protocol/openai_v1_image_generations.py +42 -42
- package/vendor/chatgpt2api/source/services/protocol/openai_v1_models.py +53 -53
- package/vendor/chatgpt2api/source/services/protocol/openai_v1_response.py +453 -453
- package/vendor/chatgpt2api/source/services/protocol/web_search_tool.py +160 -160
- package/vendor/chatgpt2api/source/services/proxy_service.py +648 -648
- package/vendor/chatgpt2api/source/services/storage/__init__.py +5 -5
- package/vendor/chatgpt2api/source/services/storage/base.py +38 -38
- package/vendor/chatgpt2api/source/services/storage/database_storage.py +194 -194
- package/vendor/chatgpt2api/source/services/storage/factory.py +104 -104
- package/vendor/chatgpt2api/source/services/storage/git_storage.py +183 -183
- package/vendor/chatgpt2api/source/services/storage/json_storage.py +95 -95
- package/vendor/chatgpt2api/source/services/sub2api_service.py +531 -531
- package/vendor/chatgpt2api/source/utils/helper.py +469 -469
- package/vendor/chatgpt2api/source/utils/image_tokens.py +346 -346
- package/vendor/chatgpt2api/source/utils/log.py +110 -110
- package/vendor/chatgpt2api/source/utils/pkce.py +19 -19
- package/vendor/chatgpt2api/source/utils/pow.py +207 -207
- package/vendor/chatgpt2api/source/utils/sentinel.py +159 -159
- package/vendor/chatgpt2api/source/utils/turnstile.py +184 -184
- package/vendor/chatgpt2api/source/uv.lock +904 -904
- package/vendor/chatgpt2api/source/web/bun.lock +1501 -1501
- package/vendor/chatgpt2api/source/web/components.json +24 -24
- package/vendor/chatgpt2api/source/web/eslint.config.mjs +17 -17
- package/vendor/chatgpt2api/source/web/next.config.ts +40 -40
- package/vendor/chatgpt2api/source/web/package.json +58 -58
- package/vendor/chatgpt2api/source/web/postcss.config.mjs +5 -5
- package/vendor/chatgpt2api/source/web/src/app/accounts/components/account-import-dialog.tsx +925 -925
- package/vendor/chatgpt2api/source/web/src/app/accounts/page.tsx +1307 -1307
- package/vendor/chatgpt2api/source/web/src/app/debug/components/chat-panel.tsx +224 -224
- package/vendor/chatgpt2api/source/web/src/app/debug/components/editable-file-panel.tsx +444 -444
- package/vendor/chatgpt2api/source/web/src/app/debug/components/ppt-panel.tsx +9 -9
- package/vendor/chatgpt2api/source/web/src/app/debug/components/psd-panel.tsx +9 -9
- package/vendor/chatgpt2api/source/web/src/app/debug/components/search-panel.tsx +172 -172
- package/vendor/chatgpt2api/source/web/src/app/debug/components/skill-panel.tsx +169 -169
- package/vendor/chatgpt2api/source/web/src/app/debug/components/types.ts +39 -39
- package/vendor/chatgpt2api/source/web/src/app/debug/page.tsx +59 -59
- package/vendor/chatgpt2api/source/web/src/app/globals.css +230 -230
- package/vendor/chatgpt2api/source/web/src/app/image/components/image-composer.tsx +542 -542
- package/vendor/chatgpt2api/source/web/src/app/image/components/image-results.tsx +554 -554
- package/vendor/chatgpt2api/source/web/src/app/image/components/image-sidebar.tsx +176 -176
- package/vendor/chatgpt2api/source/web/src/app/image/page.tsx +1799 -1799
- package/vendor/chatgpt2api/source/web/src/app/image-manager/page.tsx +732 -732
- package/vendor/chatgpt2api/source/web/src/app/layout.tsx +50 -50
- package/vendor/chatgpt2api/source/web/src/app/login/page.tsx +101 -101
- package/vendor/chatgpt2api/source/web/src/app/logs/page.tsx +356 -356
- package/vendor/chatgpt2api/source/web/src/app/page.tsx +30 -30
- package/vendor/chatgpt2api/source/web/src/app/settings/components/api-docs-card.tsx +341 -341
- package/vendor/chatgpt2api/source/web/src/app/settings/components/backup-settings-card.tsx +447 -447
- package/vendor/chatgpt2api/source/web/src/app/settings/components/base-url-card.tsx +71 -71
- package/vendor/chatgpt2api/source/web/src/app/settings/components/config-card.tsx +491 -491
- package/vendor/chatgpt2api/source/web/src/app/settings/components/cpa-pool-dialog.tsx +108 -108
- package/vendor/chatgpt2api/source/web/src/app/settings/components/cpa-pools-card.tsx +169 -169
- package/vendor/chatgpt2api/source/web/src/app/settings/components/import-browser-dialog.tsx +185 -185
- package/vendor/chatgpt2api/source/web/src/app/settings/components/proxy-runtime-card.tsx +379 -379
- package/vendor/chatgpt2api/source/web/src/app/settings/components/proxy-settings-card.tsx +127 -127
- package/vendor/chatgpt2api/source/web/src/app/settings/components/proxy-settings.tsx +200 -200
- package/vendor/chatgpt2api/source/web/src/app/settings/components/settings-header.tsx +12 -12
- package/vendor/chatgpt2api/source/web/src/app/settings/components/sub2api-connections.tsx +886 -886
- package/vendor/chatgpt2api/source/web/src/app/settings/components/third-party-apps-card.tsx +81 -81
- package/vendor/chatgpt2api/source/web/src/app/settings/components/user-keys-card.tsx +422 -422
- package/vendor/chatgpt2api/source/web/src/app/settings/page.tsx +135 -135
- package/vendor/chatgpt2api/source/web/src/app/settings/store.ts +1069 -1069
- package/vendor/chatgpt2api/source/web/src/components/date-range-filter.tsx +49 -49
- package/vendor/chatgpt2api/source/web/src/components/header-actions.tsx +24 -24
- package/vendor/chatgpt2api/source/web/src/components/image-lightbox.tsx +434 -434
- package/vendor/chatgpt2api/source/web/src/components/image-thumbnail.tsx +46 -46
- package/vendor/chatgpt2api/source/web/src/components/theme-script.tsx +18 -18
- package/vendor/chatgpt2api/source/web/src/components/theme-toggle.tsx +14 -14
- package/vendor/chatgpt2api/source/web/src/components/top-nav.tsx +263 -263
- package/vendor/chatgpt2api/source/web/src/components/ui/animated-theme-toggler.tsx +256 -256
- package/vendor/chatgpt2api/source/web/src/components/ui/badge.tsx +41 -41
- package/vendor/chatgpt2api/source/web/src/components/ui/button.tsx +59 -59
- package/vendor/chatgpt2api/source/web/src/components/ui/calendar.tsx +46 -46
- package/vendor/chatgpt2api/source/web/src/components/ui/card.tsx +61 -61
- package/vendor/chatgpt2api/source/web/src/components/ui/checkbox.tsx +27 -27
- package/vendor/chatgpt2api/source/web/src/components/ui/dia-text-reveal.tsx +267 -267
- package/vendor/chatgpt2api/source/web/src/components/ui/dialog.tsx +132 -132
- package/vendor/chatgpt2api/source/web/src/components/ui/field.tsx +13 -13
- package/vendor/chatgpt2api/source/web/src/components/ui/input.tsx +19 -19
- package/vendor/chatgpt2api/source/web/src/components/ui/label.tsx +24 -24
- package/vendor/chatgpt2api/source/web/src/components/ui/morphing-text.tsx +149 -149
- package/vendor/chatgpt2api/source/web/src/components/ui/popover.tsx +38 -38
- package/vendor/chatgpt2api/source/web/src/components/ui/select.tsx +175 -175
- package/vendor/chatgpt2api/source/web/src/components/ui/sheet.tsx +143 -143
- package/vendor/chatgpt2api/source/web/src/components/ui/table.tsx +29 -29
- package/vendor/chatgpt2api/source/web/src/components/ui/tabs.tsx +91 -91
- package/vendor/chatgpt2api/source/web/src/components/ui/text-3d-flip.tsx +269 -269
- package/vendor/chatgpt2api/source/web/src/components/ui/textarea.tsx +18 -18
- package/vendor/chatgpt2api/source/web/src/components/version-release-dialog.tsx +127 -127
- package/vendor/chatgpt2api/source/web/src/constants/common-env.ts +6 -6
- package/vendor/chatgpt2api/source/web/src/hooks/use-version-check.ts +85 -85
- package/vendor/chatgpt2api/source/web/src/lib/api.ts +926 -926
- package/vendor/chatgpt2api/source/web/src/lib/auth-session.ts +26 -26
- package/vendor/chatgpt2api/source/web/src/lib/release.ts +25 -25
- package/vendor/chatgpt2api/source/web/src/lib/request.ts +93 -93
- package/vendor/chatgpt2api/source/web/src/lib/use-auth-guard.ts +89 -89
- package/vendor/chatgpt2api/source/web/src/lib/utils.ts +6 -6
- package/vendor/chatgpt2api/source/web/src/store/auth.ts +112 -112
- package/vendor/chatgpt2api/source/web/src/store/editable-file-history.ts +33 -33
- package/vendor/chatgpt2api/source/web/src/store/image-conversations.ts +318 -318
- package/vendor/chatgpt2api/source/web/tsconfig.json +42 -42
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import localforage from "localforage";
|
|
4
|
-
|
|
5
|
-
export type AuthRole = "admin" | "user";
|
|
6
|
-
|
|
7
|
-
export type StoredAuthSession = {
|
|
8
|
-
key: string;
|
|
9
|
-
role: AuthRole;
|
|
10
|
-
subjectId: string;
|
|
11
|
-
name: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export const AUTH_KEY_STORAGE_KEY = "chatgpt2api_auth_key";
|
|
15
|
-
export const AUTH_SESSION_STORAGE_KEY = "chatgpt2api_auth_session";
|
|
16
|
-
|
|
17
|
-
const authStorage = localforage.createInstance({
|
|
18
|
-
name: "chatgpt2api",
|
|
19
|
-
storeName: "auth",
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
function normalizeSession(value: unknown, fallbackKey = ""): StoredAuthSession | null {
|
|
23
|
-
if (!value || typeof value !== "object") {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const candidate = value as Partial<StoredAuthSession>;
|
|
28
|
-
const key = String(candidate.key || fallbackKey || "").trim();
|
|
29
|
-
const role = candidate.role === "admin" || candidate.role === "user" ? candidate.role : null;
|
|
30
|
-
if (!key || !role) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
key,
|
|
36
|
-
role,
|
|
37
|
-
subjectId: String(candidate.subjectId || "").trim(),
|
|
38
|
-
name: String(candidate.name || "").trim(),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function getDefaultRouteForRole(role: AuthRole) {
|
|
43
|
-
return role === "admin" ? "/accounts" : "/image";
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export async function getStoredAuthKey() {
|
|
47
|
-
if (typeof window === "undefined") {
|
|
48
|
-
return "";
|
|
49
|
-
}
|
|
50
|
-
const value = await authStorage.getItem<string>(AUTH_KEY_STORAGE_KEY);
|
|
51
|
-
return String(value || "").trim();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export async function getStoredAuthSession() {
|
|
55
|
-
if (typeof window === "undefined") {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const [storedKey, storedSession] = await Promise.all([
|
|
60
|
-
authStorage.getItem<string>(AUTH_KEY_STORAGE_KEY),
|
|
61
|
-
authStorage.getItem<StoredAuthSession>(AUTH_SESSION_STORAGE_KEY),
|
|
62
|
-
]);
|
|
63
|
-
|
|
64
|
-
const normalizedSession = normalizeSession(storedSession, String(storedKey || ""));
|
|
65
|
-
if (normalizedSession) {
|
|
66
|
-
if (normalizedSession.key !== String(storedKey || "").trim()) {
|
|
67
|
-
await authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedSession.key);
|
|
68
|
-
}
|
|
69
|
-
return normalizedSession;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (String(storedKey || "").trim()) {
|
|
73
|
-
await clearStoredAuthSession();
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export async function setStoredAuthSession(session: StoredAuthSession) {
|
|
79
|
-
const normalizedSession = normalizeSession(session);
|
|
80
|
-
if (!normalizedSession) {
|
|
81
|
-
await clearStoredAuthSession();
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
await Promise.all([
|
|
86
|
-
authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedSession.key),
|
|
87
|
-
authStorage.setItem(AUTH_SESSION_STORAGE_KEY, normalizedSession),
|
|
88
|
-
]);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export async function setStoredAuthKey(authKey: string) {
|
|
92
|
-
const normalizedAuthKey = String(authKey || "").trim();
|
|
93
|
-
if (!normalizedAuthKey) {
|
|
94
|
-
await clearStoredAuthSession();
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
await authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedAuthKey);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export async function clearStoredAuthSession() {
|
|
101
|
-
if (typeof window === "undefined") {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
await Promise.all([
|
|
105
|
-
authStorage.removeItem(AUTH_KEY_STORAGE_KEY),
|
|
106
|
-
authStorage.removeItem(AUTH_SESSION_STORAGE_KEY),
|
|
107
|
-
]);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export async function clearStoredAuthKey() {
|
|
111
|
-
await clearStoredAuthSession();
|
|
112
|
-
}
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import localforage from "localforage";
|
|
4
|
+
|
|
5
|
+
export type AuthRole = "admin" | "user";
|
|
6
|
+
|
|
7
|
+
export type StoredAuthSession = {
|
|
8
|
+
key: string;
|
|
9
|
+
role: AuthRole;
|
|
10
|
+
subjectId: string;
|
|
11
|
+
name: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const AUTH_KEY_STORAGE_KEY = "chatgpt2api_auth_key";
|
|
15
|
+
export const AUTH_SESSION_STORAGE_KEY = "chatgpt2api_auth_session";
|
|
16
|
+
|
|
17
|
+
const authStorage = localforage.createInstance({
|
|
18
|
+
name: "chatgpt2api",
|
|
19
|
+
storeName: "auth",
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
function normalizeSession(value: unknown, fallbackKey = ""): StoredAuthSession | null {
|
|
23
|
+
if (!value || typeof value !== "object") {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const candidate = value as Partial<StoredAuthSession>;
|
|
28
|
+
const key = String(candidate.key || fallbackKey || "").trim();
|
|
29
|
+
const role = candidate.role === "admin" || candidate.role === "user" ? candidate.role : null;
|
|
30
|
+
if (!key || !role) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
key,
|
|
36
|
+
role,
|
|
37
|
+
subjectId: String(candidate.subjectId || "").trim(),
|
|
38
|
+
name: String(candidate.name || "").trim(),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function getDefaultRouteForRole(role: AuthRole) {
|
|
43
|
+
return role === "admin" ? "/accounts" : "/image";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function getStoredAuthKey() {
|
|
47
|
+
if (typeof window === "undefined") {
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
const value = await authStorage.getItem<string>(AUTH_KEY_STORAGE_KEY);
|
|
51
|
+
return String(value || "").trim();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export async function getStoredAuthSession() {
|
|
55
|
+
if (typeof window === "undefined") {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const [storedKey, storedSession] = await Promise.all([
|
|
60
|
+
authStorage.getItem<string>(AUTH_KEY_STORAGE_KEY),
|
|
61
|
+
authStorage.getItem<StoredAuthSession>(AUTH_SESSION_STORAGE_KEY),
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
const normalizedSession = normalizeSession(storedSession, String(storedKey || ""));
|
|
65
|
+
if (normalizedSession) {
|
|
66
|
+
if (normalizedSession.key !== String(storedKey || "").trim()) {
|
|
67
|
+
await authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedSession.key);
|
|
68
|
+
}
|
|
69
|
+
return normalizedSession;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (String(storedKey || "").trim()) {
|
|
73
|
+
await clearStoredAuthSession();
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export async function setStoredAuthSession(session: StoredAuthSession) {
|
|
79
|
+
const normalizedSession = normalizeSession(session);
|
|
80
|
+
if (!normalizedSession) {
|
|
81
|
+
await clearStoredAuthSession();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
await Promise.all([
|
|
86
|
+
authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedSession.key),
|
|
87
|
+
authStorage.setItem(AUTH_SESSION_STORAGE_KEY, normalizedSession),
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export async function setStoredAuthKey(authKey: string) {
|
|
92
|
+
const normalizedAuthKey = String(authKey || "").trim();
|
|
93
|
+
if (!normalizedAuthKey) {
|
|
94
|
+
await clearStoredAuthSession();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
await authStorage.setItem(AUTH_KEY_STORAGE_KEY, normalizedAuthKey);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export async function clearStoredAuthSession() {
|
|
101
|
+
if (typeof window === "undefined") {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await Promise.all([
|
|
105
|
+
authStorage.removeItem(AUTH_KEY_STORAGE_KEY),
|
|
106
|
+
authStorage.removeItem(AUTH_SESSION_STORAGE_KEY),
|
|
107
|
+
]);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export async function clearStoredAuthKey() {
|
|
111
|
+
await clearStoredAuthSession();
|
|
112
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import localforage from "localforage";
|
|
4
|
-
|
|
5
|
-
export type EditableFileDraft = {
|
|
6
|
-
prompt?: string;
|
|
7
|
-
images?: string[];
|
|
8
|
-
title?: string;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const editableFileStorage = localforage.createInstance({
|
|
12
|
-
name: "chatgpt2api",
|
|
13
|
-
storeName: "editable_file_history",
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
const draftsKey = (kind: string) => `drafts:${kind}`;
|
|
17
|
-
const deletedKey = (kind: string) => `deleted:${kind}`;
|
|
18
|
-
|
|
19
|
-
export async function listEditableFileDrafts(kind: string): Promise<Record<string, EditableFileDraft>> {
|
|
20
|
-
return (await editableFileStorage.getItem<Record<string, EditableFileDraft>>(draftsKey(kind))) || {};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function saveEditableFileDrafts(kind: string, drafts: Record<string, EditableFileDraft>): Promise<void> {
|
|
24
|
-
await editableFileStorage.setItem(draftsKey(kind), drafts);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function listDeletedEditableFileIds(kind: string): Promise<Set<string>> {
|
|
28
|
-
return new Set((await editableFileStorage.getItem<string[]>(deletedKey(kind))) || []);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export async function saveDeletedEditableFileIds(kind: string, ids: Set<string>): Promise<void> {
|
|
32
|
-
await editableFileStorage.setItem(deletedKey(kind), [...ids]);
|
|
33
|
-
}
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import localforage from "localforage";
|
|
4
|
+
|
|
5
|
+
export type EditableFileDraft = {
|
|
6
|
+
prompt?: string;
|
|
7
|
+
images?: string[];
|
|
8
|
+
title?: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const editableFileStorage = localforage.createInstance({
|
|
12
|
+
name: "chatgpt2api",
|
|
13
|
+
storeName: "editable_file_history",
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const draftsKey = (kind: string) => `drafts:${kind}`;
|
|
17
|
+
const deletedKey = (kind: string) => `deleted:${kind}`;
|
|
18
|
+
|
|
19
|
+
export async function listEditableFileDrafts(kind: string): Promise<Record<string, EditableFileDraft>> {
|
|
20
|
+
return (await editableFileStorage.getItem<Record<string, EditableFileDraft>>(draftsKey(kind))) || {};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function saveEditableFileDrafts(kind: string, drafts: Record<string, EditableFileDraft>): Promise<void> {
|
|
24
|
+
await editableFileStorage.setItem(draftsKey(kind), drafts);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function listDeletedEditableFileIds(kind: string): Promise<Set<string>> {
|
|
28
|
+
return new Set((await editableFileStorage.getItem<string[]>(deletedKey(kind))) || []);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function saveDeletedEditableFileIds(kind: string, ids: Set<string>): Promise<void> {
|
|
32
|
+
await editableFileStorage.setItem(deletedKey(kind), [...ids]);
|
|
33
|
+
}
|