@eddyskywalker/dsh-chatgpt-subscription 0.1.12 → 0.1.14
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/CHANGELOG.md +5 -0
- package/README.md +7 -3
- package/lib/client.js +143 -34
- package/lib/client.js.map +1 -1
- package/lib/index.js +179 -10
- package/lib/types/client/CodexSubscriptionSection.d.ts +1 -0
- package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +186 -168
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/styles.d.ts.map +1 -1
- package/lib/types/host/adapter.d.ts +3 -1
- package/lib/types/host/adapter.d.ts.map +1 -1
- package/lib/types/host/model-catalog.d.ts +2 -1
- package/lib/types/host/model-catalog.d.ts.map +1 -1
- package/lib/types/host/platform-token-store.d.ts.map +1 -1
- package/lib/types/host/preferences.d.ts.map +1 -1
- package/lib/types/host/routes.d.ts.map +1 -1
- package/lib/types/host/subagent-model-preference.d.ts +8 -0
- package/lib/types/host/subagent-model-preference.d.ts.map +1 -0
- package/lib/types/host/token-store-macos.d.ts +19 -0
- package/lib/types/host/token-store-macos.d.ts.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/contracts.d.ts +10 -1
- package/lib/types/shared/contracts.d.ts.map +1 -1
- package/lib/types/shared/model-catalog.d.ts +5 -0
- package/lib/types/shared/model-catalog.d.ts.map +1 -1
- package/lib/types/shared/preferences.d.ts.map +1 -1
- package/package.json +3 -1
package/lib/index.js
CHANGED
|
@@ -6,11 +6,11 @@ import { WebError } from "@deepseek-ai/dsh-web";
|
|
|
6
6
|
import http from "node:http";
|
|
7
7
|
import { settingsNamespace } from "@deepseek-ai/dsh-settings";
|
|
8
8
|
import z from "@deepseek-ai/schemastery";
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
9
10
|
import { constants } from "node:fs";
|
|
10
11
|
import { chmod, lstat, mkdir, open, rename, stat, unlink } from "node:fs/promises";
|
|
11
12
|
import { homedir } from "node:os";
|
|
12
13
|
import { dirname, join } from "node:path";
|
|
13
|
-
import { spawn } from "node:child_process";
|
|
14
14
|
//#region src/compat.ts
|
|
15
15
|
/**
|
|
16
16
|
* Compatibility constants for the ChatGPT-backed Codex flow. The backend and
|
|
@@ -41,6 +41,7 @@ const OAUTH_AUTHORIZE_URL = `${CHATGPT_OAUTH_ISSUER}/oauth/authorize`;
|
|
|
41
41
|
const OAUTH_TOKEN_URL = `${CHATGPT_OAUTH_ISSUER}/oauth/token`;
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region src/shared/model-catalog.ts
|
|
44
|
+
const GPT_56_MAX_CONTEXT_WINDOW = 1e6;
|
|
44
45
|
const CODEX_MODEL_CATALOG = [
|
|
45
46
|
{
|
|
46
47
|
id: "gpt-5.6-sol",
|
|
@@ -107,6 +108,17 @@ const CODEX_MODEL_CATALOG = [
|
|
|
107
108
|
}
|
|
108
109
|
];
|
|
109
110
|
const DEFAULT_CODEX_MODEL = CODEX_MODEL_CATALOG[0];
|
|
111
|
+
const CONFIGURABLE_CONTEXT_MODEL_IDS = [
|
|
112
|
+
"gpt-5.6-sol",
|
|
113
|
+
"gpt-5.6-terra",
|
|
114
|
+
"gpt-5.6-luna"
|
|
115
|
+
];
|
|
116
|
+
function isCodexModelId(model) {
|
|
117
|
+
return typeof model === "string" && CODEX_MODEL_CATALOG.some((entry) => entry.id === model);
|
|
118
|
+
}
|
|
119
|
+
function isConfigurableContextModelId(model) {
|
|
120
|
+
return typeof model === "string" && CONFIGURABLE_CONTEXT_MODEL_IDS.some((id) => id === model);
|
|
121
|
+
}
|
|
110
122
|
function resolveCodexCatalogEntry(model) {
|
|
111
123
|
return CODEX_MODEL_CATALOG.find((entry) => entry.id === model) ?? DEFAULT_CODEX_MODEL;
|
|
112
124
|
}
|
|
@@ -139,15 +151,16 @@ function listCodexModels() {
|
|
|
139
151
|
inputModalities: [...entry.inputModalities]
|
|
140
152
|
}));
|
|
141
153
|
}
|
|
142
|
-
function resolveCodexModel(model) {
|
|
154
|
+
function resolveCodexModel(model, preferences) {
|
|
143
155
|
const entry = resolveCodexCatalogEntry(model);
|
|
156
|
+
const configuredContextWindow = isConfigurableContextModelId(model) ? preferences?.status().contextWindowOverrides[model] : void 0;
|
|
144
157
|
const efforts = MODEL_REASONING[entry.reasoningProfile];
|
|
145
158
|
return {
|
|
146
159
|
provider: PROVIDER_ID,
|
|
147
160
|
id: model,
|
|
148
161
|
name: entry.id === model ? entry.name : model,
|
|
149
162
|
inputModalities: [...entry.inputModalities],
|
|
150
|
-
context: { contextWindow: entry.contextWindow },
|
|
163
|
+
context: { contextWindow: configuredContextWindow ?? entry.contextWindow },
|
|
151
164
|
defaultMaxTokens: 32768,
|
|
152
165
|
reasoning: {
|
|
153
166
|
efforts: efforts.map((effort) => ({
|
|
@@ -176,9 +189,11 @@ const RETRY_POLICY = resolveRetryPolicy({
|
|
|
176
189
|
}, "dsh-chatgpt-subscription.retry");
|
|
177
190
|
var CodexChatGptAdapter = class extends LlmAdapter {
|
|
178
191
|
client;
|
|
179
|
-
|
|
192
|
+
preferences;
|
|
193
|
+
constructor(client, preferences) {
|
|
180
194
|
super();
|
|
181
195
|
this.client = client;
|
|
196
|
+
this.preferences = preferences;
|
|
182
197
|
}
|
|
183
198
|
providerInfo(provider) {
|
|
184
199
|
return {
|
|
@@ -193,7 +208,7 @@ var CodexChatGptAdapter = class extends LlmAdapter {
|
|
|
193
208
|
return listCodexModels();
|
|
194
209
|
}
|
|
195
210
|
async resolveModel(_provider, model) {
|
|
196
|
-
return resolveCodexModel(model);
|
|
211
|
+
return resolveCodexModel(model, this.preferences);
|
|
197
212
|
}
|
|
198
213
|
stream(options) {
|
|
199
214
|
return this.client.stream(options);
|
|
@@ -1049,7 +1064,13 @@ async function oauthErrorIdentifier(response) {
|
|
|
1049
1064
|
const PREFERENCES_NAMESPACE = "dsh-chatgpt-subscription";
|
|
1050
1065
|
const DEFAULT_PREFERENCES = {
|
|
1051
1066
|
quickQuotaVisible: false,
|
|
1052
|
-
searchProvider: "dsh"
|
|
1067
|
+
searchProvider: "dsh",
|
|
1068
|
+
subagentModel: "gpt-5.6-sol",
|
|
1069
|
+
contextWindowOverrides: {
|
|
1070
|
+
"gpt-5.6-sol": 272e3,
|
|
1071
|
+
"gpt-5.6-terra": 272e3,
|
|
1072
|
+
"gpt-5.6-luna": 272e3
|
|
1073
|
+
}
|
|
1053
1074
|
};
|
|
1054
1075
|
const SEARCH_PROVIDER_CODEX = "codex";
|
|
1055
1076
|
function isSearchProviderPreference(value) {
|
|
@@ -1060,7 +1081,13 @@ function isSearchProviderPreference(value) {
|
|
|
1060
1081
|
function registerPreferenceStore(settings) {
|
|
1061
1082
|
return new SettingsPreferenceStore(settings.register(settingsNamespace(PREFERENCES_NAMESPACE), z.object({
|
|
1062
1083
|
quickQuotaVisible: z.boolean().default(DEFAULT_PREFERENCES.quickQuotaVisible),
|
|
1063
|
-
searchProvider: z.union([z.const("dsh"), z.const(SEARCH_PROVIDER_CODEX)]).default(DEFAULT_PREFERENCES.searchProvider)
|
|
1084
|
+
searchProvider: z.union([z.const("dsh"), z.const(SEARCH_PROVIDER_CODEX)]).default(DEFAULT_PREFERENCES.searchProvider),
|
|
1085
|
+
subagentModel: z.string().default(DEFAULT_PREFERENCES.subagentModel),
|
|
1086
|
+
contextWindowOverrides: z.object({
|
|
1087
|
+
"gpt-5.6-sol": z.number().step(1).min(1).max(GPT_56_MAX_CONTEXT_WINDOW).default(DEFAULT_PREFERENCES.contextWindowOverrides["gpt-5.6-sol"]),
|
|
1088
|
+
"gpt-5.6-terra": z.number().step(1).min(1).max(GPT_56_MAX_CONTEXT_WINDOW).default(DEFAULT_PREFERENCES.contextWindowOverrides["gpt-5.6-terra"]),
|
|
1089
|
+
"gpt-5.6-luna": z.number().step(1).min(1).max(GPT_56_MAX_CONTEXT_WINDOW).default(DEFAULT_PREFERENCES.contextWindowOverrides["gpt-5.6-luna"])
|
|
1090
|
+
}).default(DEFAULT_PREFERENCES.contextWindowOverrides)
|
|
1064
1091
|
})));
|
|
1065
1092
|
}
|
|
1066
1093
|
var SettingsPreferenceStore = class {
|
|
@@ -1078,6 +1105,11 @@ var SettingsPreferenceStore = class {
|
|
|
1078
1105
|
if (!isSearchProviderPreference(patch.searchProvider)) throw new PreferenceError("Unsupported search provider preference.");
|
|
1079
1106
|
normalized.searchProvider = patch.searchProvider;
|
|
1080
1107
|
}
|
|
1108
|
+
if (patch.subagentModel !== void 0) normalized.subagentModel = patch.subagentModel;
|
|
1109
|
+
if (patch.contextWindowOverrides !== void 0) normalized.contextWindowOverrides = {
|
|
1110
|
+
...this.scope.get().contextWindowOverrides,
|
|
1111
|
+
...patch.contextWindowOverrides
|
|
1112
|
+
};
|
|
1081
1113
|
await this.scope.update(normalized);
|
|
1082
1114
|
return this.status();
|
|
1083
1115
|
}
|
|
@@ -2342,6 +2374,9 @@ function field(value, name) {
|
|
|
2342
2374
|
const candidate = value[name];
|
|
2343
2375
|
return typeof candidate === "string" && candidate !== "" ? candidate : null;
|
|
2344
2376
|
}
|
|
2377
|
+
function isRecord(value) {
|
|
2378
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2379
|
+
}
|
|
2345
2380
|
function readPreferencesUpdate(value) {
|
|
2346
2381
|
const patch = {};
|
|
2347
2382
|
if ("quickQuotaVisible" in value) {
|
|
@@ -2352,6 +2387,20 @@ function readPreferencesUpdate(value) {
|
|
|
2352
2387
|
if (value.searchProvider !== "dsh" && value.searchProvider !== "codex") throw new PreferenceError("searchProvider must be dsh or codex.");
|
|
2353
2388
|
patch.searchProvider = value.searchProvider;
|
|
2354
2389
|
}
|
|
2390
|
+
if ("subagentModel" in value) {
|
|
2391
|
+
if (!isCodexModelId(value.subagentModel)) throw new PreferenceError("subagentModel must be an available Codex model.");
|
|
2392
|
+
patch.subagentModel = value.subagentModel;
|
|
2393
|
+
}
|
|
2394
|
+
if ("contextWindowOverrides" in value) {
|
|
2395
|
+
if (!isRecord(value.contextWindowOverrides)) throw new PreferenceError("contextWindowOverrides must be an object.");
|
|
2396
|
+
const overrides = {};
|
|
2397
|
+
for (const [model, contextWindow] of Object.entries(value.contextWindowOverrides)) {
|
|
2398
|
+
if (!isConfigurableContextModelId(model)) throw new PreferenceError("Only GPT-5.6 context windows can be changed.");
|
|
2399
|
+
if (!Number.isSafeInteger(contextWindow) || contextWindow < 1 || contextWindow > 1e6) throw new PreferenceError(`contextWindowOverrides.${model} must be a positive integer no greater than the provider limit.`);
|
|
2400
|
+
overrides[model] = contextWindow;
|
|
2401
|
+
}
|
|
2402
|
+
patch.contextWindowOverrides = overrides;
|
|
2403
|
+
}
|
|
2355
2404
|
return patch;
|
|
2356
2405
|
}
|
|
2357
2406
|
function json(response, envelope, status = 200) {
|
|
@@ -2401,6 +2450,106 @@ function parseStoredCredentials(value) {
|
|
|
2401
2450
|
};
|
|
2402
2451
|
}
|
|
2403
2452
|
//#endregion
|
|
2453
|
+
//#region src/host/token-store-macos.ts
|
|
2454
|
+
const DEFAULT_SERVICE = "dsh-chatgpt-subscription";
|
|
2455
|
+
const DEFAULT_ACCOUNT = "oauth";
|
|
2456
|
+
/**
|
|
2457
|
+
* macOS credential storage backed by the login Keychain through the built-in
|
|
2458
|
+
* `security` command-line tool. The payload is encrypted at rest by the
|
|
2459
|
+
* Keychain, so this store reports itself as encrypted like Windows DPAPI.
|
|
2460
|
+
*/
|
|
2461
|
+
var MacKeychainTokenStore = class {
|
|
2462
|
+
service;
|
|
2463
|
+
account;
|
|
2464
|
+
storage = {
|
|
2465
|
+
kind: "macos-keychain",
|
|
2466
|
+
encrypted: true
|
|
2467
|
+
};
|
|
2468
|
+
constructor(service = DEFAULT_SERVICE, account = DEFAULT_ACCOUNT) {
|
|
2469
|
+
this.service = service;
|
|
2470
|
+
this.account = account;
|
|
2471
|
+
if (process.platform !== "darwin") throw new Error("macOS Keychain storage requires macOS");
|
|
2472
|
+
}
|
|
2473
|
+
async load() {
|
|
2474
|
+
const result = await runSecurity([
|
|
2475
|
+
"find-generic-password",
|
|
2476
|
+
"-a",
|
|
2477
|
+
this.account,
|
|
2478
|
+
"-s",
|
|
2479
|
+
this.service,
|
|
2480
|
+
"-w"
|
|
2481
|
+
]);
|
|
2482
|
+
if (result.code === 44) return null;
|
|
2483
|
+
if (result.code !== 0) throw new Error("Keychain credential read failed");
|
|
2484
|
+
try {
|
|
2485
|
+
const payload = result.stdout.replace(/\r?\n$/, "");
|
|
2486
|
+
return parseStoredCredentials(JSON.parse(payload));
|
|
2487
|
+
} catch {
|
|
2488
|
+
throw new Error("Keychain credential payload is invalid");
|
|
2489
|
+
}
|
|
2490
|
+
}
|
|
2491
|
+
async save(value) {
|
|
2492
|
+
if ((await runSecurity([
|
|
2493
|
+
"add-generic-password",
|
|
2494
|
+
"-a",
|
|
2495
|
+
this.account,
|
|
2496
|
+
"-s",
|
|
2497
|
+
this.service,
|
|
2498
|
+
"-w",
|
|
2499
|
+
JSON.stringify(value),
|
|
2500
|
+
"-U"
|
|
2501
|
+
])).code !== 0) throw new Error("Keychain credential write failed");
|
|
2502
|
+
}
|
|
2503
|
+
async clear() {
|
|
2504
|
+
const result = await runSecurity([
|
|
2505
|
+
"delete-generic-password",
|
|
2506
|
+
"-a",
|
|
2507
|
+
this.account,
|
|
2508
|
+
"-s",
|
|
2509
|
+
this.service
|
|
2510
|
+
]);
|
|
2511
|
+
if (result.code !== 0 && result.code !== 44) throw new Error("Keychain credential deletion failed");
|
|
2512
|
+
}
|
|
2513
|
+
};
|
|
2514
|
+
function runSecurity(args) {
|
|
2515
|
+
return new Promise((resolve, reject) => {
|
|
2516
|
+
const child = spawn("security", args, {
|
|
2517
|
+
env: { ...process.env },
|
|
2518
|
+
stdio: [
|
|
2519
|
+
"ignore",
|
|
2520
|
+
"pipe",
|
|
2521
|
+
"pipe"
|
|
2522
|
+
]
|
|
2523
|
+
});
|
|
2524
|
+
let stdout = "";
|
|
2525
|
+
let stderrLength = 0;
|
|
2526
|
+
const timer = setTimeout(() => {
|
|
2527
|
+
child.kill();
|
|
2528
|
+
reject(/* @__PURE__ */ new Error("Keychain helper timed out"));
|
|
2529
|
+
}, 1e4);
|
|
2530
|
+
child.stdout.setEncoding("utf8");
|
|
2531
|
+
child.stdout.on("data", (chunk) => {
|
|
2532
|
+
stdout += chunk;
|
|
2533
|
+
if (stdout.length > 1 << 20) child.kill();
|
|
2534
|
+
});
|
|
2535
|
+
child.stderr.on("data", (chunk) => {
|
|
2536
|
+
stderrLength += chunk.length;
|
|
2537
|
+
if (stderrLength > 1 << 20) child.kill();
|
|
2538
|
+
});
|
|
2539
|
+
child.once("error", (error) => {
|
|
2540
|
+
clearTimeout(timer);
|
|
2541
|
+
reject(error);
|
|
2542
|
+
});
|
|
2543
|
+
child.once("close", (code) => {
|
|
2544
|
+
clearTimeout(timer);
|
|
2545
|
+
resolve({
|
|
2546
|
+
code: code ?? 1,
|
|
2547
|
+
stdout
|
|
2548
|
+
});
|
|
2549
|
+
});
|
|
2550
|
+
});
|
|
2551
|
+
}
|
|
2552
|
+
//#endregion
|
|
2404
2553
|
//#region src/host/token-store-linux.ts
|
|
2405
2554
|
const DIRECTORY_MODE = 448;
|
|
2406
2555
|
const FILE_MODE = 384;
|
|
@@ -2607,8 +2756,9 @@ function runPowerShell(script, path, stdin) {
|
|
|
2607
2756
|
//#region src/host/platform-token-store.ts
|
|
2608
2757
|
function createPlatformTokenStore(platform = process.platform) {
|
|
2609
2758
|
if (platform === "win32") return new WindowsDpapiTokenStore();
|
|
2759
|
+
if (platform === "darwin") return new MacKeychainTokenStore();
|
|
2610
2760
|
if (platform === "linux") return new LinuxFileTokenStore();
|
|
2611
|
-
throw new Error(`Unsupported platform ${platform}; dsh-chatgpt-subscription supports Windows and Linux.`);
|
|
2761
|
+
throw new Error(`Unsupported platform ${platform}; dsh-chatgpt-subscription supports Windows, macOS, and Linux.`);
|
|
2612
2762
|
}
|
|
2613
2763
|
//#endregion
|
|
2614
2764
|
//#region src/host/search-provider-switcher.ts
|
|
@@ -2647,6 +2797,23 @@ function currentConfig(entry) {
|
|
|
2647
2797
|
return typeof config === "object" && config !== null && !Array.isArray(config) ? config : {};
|
|
2648
2798
|
}
|
|
2649
2799
|
//#endregion
|
|
2800
|
+
//#region src/host/subagent-model-preference.ts
|
|
2801
|
+
/**
|
|
2802
|
+
* Route in-process delegated agents through the configured ChatGPT subscription
|
|
2803
|
+
* model. Root sessions retain their own model selection.
|
|
2804
|
+
*/
|
|
2805
|
+
function installSubagentModelPreference(ctx, preferences) {
|
|
2806
|
+
return ctx.on("agent/request", async (payload, next) => {
|
|
2807
|
+
const resolved = await next();
|
|
2808
|
+
if (payload.agent.session.header.origin !== "subagent") return resolved;
|
|
2809
|
+
return {
|
|
2810
|
+
...resolved,
|
|
2811
|
+
provider: PROVIDER_ID,
|
|
2812
|
+
model: preferences.status().subagentModel
|
|
2813
|
+
};
|
|
2814
|
+
});
|
|
2815
|
+
}
|
|
2816
|
+
//#endregion
|
|
2650
2817
|
//#region src/index.ts
|
|
2651
2818
|
const inject = [
|
|
2652
2819
|
"webServer",
|
|
@@ -2664,7 +2831,7 @@ function apply(ctx) {
|
|
|
2664
2831
|
const adapter = new CodexChatGptAdapter(new ResponsesClient(oauth, ctx.attachments, {
|
|
2665
2832
|
localRawImages: { baseUrl: localWebServerBaseUrl(ctx.webServer.host, ctx.webServer.port) },
|
|
2666
2833
|
onGenerationFinished: () => usage.invalidate()
|
|
2667
|
-
}));
|
|
2834
|
+
}), preferences);
|
|
2668
2835
|
ctx.effect(() => {
|
|
2669
2836
|
const searchSwitcher = new SearchProviderSwitcher(ctx.loader);
|
|
2670
2837
|
const applySearchPreference = (searchProvider = preferences.status().searchProvider) => {
|
|
@@ -2674,12 +2841,14 @@ function apply(ctx) {
|
|
|
2674
2841
|
};
|
|
2675
2842
|
const disposeRoutes = registerRoutes(ctx, oauth, usage, preferences);
|
|
2676
2843
|
const disposeAdapter = ctx.llm.registerAdapter([PROVIDER_ID], adapter);
|
|
2844
|
+
const disposeSubagentModelPreference = installSubagentModelPreference(ctx, preferences);
|
|
2677
2845
|
const disposeImageTool = ctx.tools.register(createCodexImageTool(oauth, ctx.attachments));
|
|
2678
2846
|
const disposeSearchProvider = ctx.web.registerSearchProvider(createCodexSearchProvider(oauth));
|
|
2679
2847
|
const disposePreferenceWatch = preferences.watch((next) => applySearchPreference(next.searchProvider));
|
|
2680
2848
|
applySearchPreference();
|
|
2681
2849
|
return () => {
|
|
2682
2850
|
disposePreferenceWatch();
|
|
2851
|
+
disposeSubagentModelPreference();
|
|
2683
2852
|
disposeSearchProvider();
|
|
2684
2853
|
disposeImageTool();
|
|
2685
2854
|
disposeAdapter();
|
|
@@ -2692,4 +2861,4 @@ function localWebServerBaseUrl(host, port) {
|
|
|
2692
2861
|
return `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}`;
|
|
2693
2862
|
}
|
|
2694
2863
|
//#endregion
|
|
2695
|
-
export { CodexChatGptAdapter, LinuxFileTokenStore, OAuthService, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, inject, mapCodexUsage, parseCodexUsage, parseResponsesStream };
|
|
2864
|
+
export { CodexChatGptAdapter, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, inject, mapCodexUsage, parseCodexUsage, parseResponsesStream };
|
|
@@ -12,6 +12,7 @@ export declare function QuotaBar({ label, window, t }: {
|
|
|
12
12
|
t: Translate;
|
|
13
13
|
}): React.JSX.Element;
|
|
14
14
|
export declare function windowLabel(minutes: number | null, t: Translate): string;
|
|
15
|
+
export declare function parseCapacity(value: string): number | null;
|
|
15
16
|
export declare function formatReset(seconds: number): string;
|
|
16
17
|
export {};
|
|
17
18
|
//# sourceMappingURL=CodexSubscriptionSection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexSubscriptionSection.d.ts","sourceRoot":"","sources":["../../../src/client/CodexSubscriptionSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAmC,cAAc,EAAoC,MAAM,wBAAwB,CAAA;AAGrJ,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGjC,KAAK,KAAK,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAEtE,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;AAE3B,wBAAgB,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"CodexSubscriptionSection.d.ts","sourceRoot":"","sources":["../../../src/client/CodexSubscriptionSection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAmC,cAAc,EAAoC,MAAM,wBAAwB,CAAA;AAGrJ,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGjC,KAAK,KAAK,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;AAEtE,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;AAE3B,wBAAgB,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA4QxE;AAiBD,wBAAgB,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAO5F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAO7F;AAcD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAczH;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAQxE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO1D;AA0BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUnD"}
|