dsh-coding-subscription-oauth 0.6.3 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/CONTRIBUTING.md +13 -4
  3. package/INSTALL.md +7 -5
  4. package/README.de.md +6 -6
  5. package/README.es.md +6 -6
  6. package/README.fr.md +6 -6
  7. package/README.ja.md +6 -6
  8. package/README.ko.md +6 -6
  9. package/README.md +6 -6
  10. package/README.pt-BR.md +6 -6
  11. package/README.ru.md +6 -6
  12. package/README.zh-CN.md +6 -6
  13. package/docs/00-project-rules.md +4 -4
  14. package/docs/02-architecture.md +7 -3
  15. package/docs/02-architecture.zh-CN.md +7 -3
  16. package/lib/bin.js +1333 -569
  17. package/lib/bin.js.map +4 -4
  18. package/lib/client.js +1 -1
  19. package/lib/client.js.map +2 -2
  20. package/lib/gateway-protocol.d.ts +3 -46
  21. package/lib/gateway-protocol.d.ts.map +1 -1
  22. package/lib/gateway-routes.d.ts.map +1 -1
  23. package/lib/grok-errors.d.ts +2 -12
  24. package/lib/grok-errors.d.ts.map +1 -1
  25. package/lib/grok-imagine/client.d.ts +73 -0
  26. package/lib/grok-imagine/client.d.ts.map +1 -0
  27. package/lib/grok-imagine/index.d.ts +8 -0
  28. package/lib/grok-imagine/index.d.ts.map +1 -0
  29. package/lib/grok-imagine/net.d.ts +10 -0
  30. package/lib/grok-imagine/net.d.ts.map +1 -0
  31. package/lib/grok-imagine/parse.d.ts +20 -0
  32. package/lib/grok-imagine/parse.d.ts.map +1 -0
  33. package/lib/grok-imagine/types.d.ts +191 -0
  34. package/lib/grok-imagine/types.d.ts.map +1 -0
  35. package/lib/grok-imagine.d.ts +3 -263
  36. package/lib/grok-imagine.d.ts.map +1 -1
  37. package/lib/http-json.d.ts +2 -9
  38. package/lib/http-json.d.ts.map +1 -1
  39. package/lib/index.js +1395 -26178
  40. package/lib/index.js.map +4 -4
  41. package/lib/kimi-errors.d.ts +2 -12
  42. package/lib/kimi-errors.d.ts.map +1 -1
  43. package/lib/runtime/gateway-protocol.d.ts +47 -0
  44. package/lib/runtime/gateway-protocol.d.ts.map +1 -0
  45. package/lib/runtime/grok-errors.d.ts +13 -0
  46. package/lib/runtime/grok-errors.d.ts.map +1 -0
  47. package/lib/runtime/http-json.d.ts +10 -0
  48. package/lib/runtime/http-json.d.ts.map +1 -0
  49. package/lib/runtime/kimi-errors.d.ts +13 -0
  50. package/lib/runtime/kimi-errors.d.ts.map +1 -0
  51. package/package.json +12 -7
  52. package/scripts/release.mjs +1 -0
  53. package/src/adapter.ts +0 -348
  54. package/src/alias-adapter.ts +0 -147
  55. package/src/auth-routes.ts +0 -921
  56. package/src/auth.ts +0 -67
  57. package/src/bin.ts +0 -350
  58. package/src/capability-routes.ts +0 -279
  59. package/src/capability-runtime.ts +0 -314
  60. package/src/capability-settings.ts +0 -671
  61. package/src/capability-tools.ts +0 -685
  62. package/src/catalog.ts +0 -271
  63. package/src/client/GrokBuildSettings.tsx +0 -771
  64. package/src/client/api.ts +0 -88
  65. package/src/client/components/AboutTab.tsx +0 -30
  66. package/src/client/components/AccountsTab.tsx +0 -241
  67. package/src/client/components/Badge.tsx +0 -33
  68. package/src/client/components/CapabilitiesTab.tsx +0 -265
  69. package/src/client/components/CliPullPreview.tsx +0 -116
  70. package/src/client/components/CopyButton.tsx +0 -57
  71. package/src/client/components/GatewayTab.tsx +0 -469
  72. package/src/client/components/NoticeBanner.tsx +0 -46
  73. package/src/client/components/ProgressBar.tsx +0 -53
  74. package/src/client/components/ProviderCard.tsx +0 -606
  75. package/src/client/components/SettingsTabs.tsx +0 -75
  76. package/src/client/components/ToggleSwitch.tsx +0 -71
  77. package/src/client/constants.ts +0 -230
  78. package/src/client/display.ts +0 -61
  79. package/src/client/dshClientAdapter.ts +0 -127
  80. package/src/client/gatewaySnippets.ts +0 -37
  81. package/src/client/index.tsx +0 -156
  82. package/src/client/locales.ts +0 -540
  83. package/src/client/microStyles.ts +0 -52
  84. package/src/client/parsers.ts +0 -398
  85. package/src/client/styles.ts +0 -325
  86. package/src/client/types.ts +0 -199
  87. package/src/codex-http.ts +0 -447
  88. package/src/codex-images.ts +0 -503
  89. package/src/codex-model-capabilities.ts +0 -320
  90. package/src/codex-search.ts +0 -245
  91. package/src/codex-usage.ts +0 -263
  92. package/src/compatibility.ts +0 -55
  93. package/src/dsh-host-adapter.ts +0 -173
  94. package/src/gateway-anthropic-messages.ts +0 -84
  95. package/src/gateway-auth.ts +0 -102
  96. package/src/gateway-backend.ts +0 -274
  97. package/src/gateway-body.ts +0 -49
  98. package/src/gateway-config.ts +0 -76
  99. package/src/gateway-http.ts +0 -104
  100. package/src/gateway-openai-chat.ts +0 -124
  101. package/src/gateway-openai-responses.ts +0 -53
  102. package/src/gateway-parse.ts +0 -224
  103. package/src/gateway-protocol.ts +0 -52
  104. package/src/gateway-routes.ts +0 -158
  105. package/src/gateway.ts +0 -258
  106. package/src/grok-errors.ts +0 -24
  107. package/src/grok-imagine.ts +0 -1627
  108. package/src/grok-import.ts +0 -151
  109. package/src/http-json.ts +0 -82
  110. package/src/ids.ts +0 -59
  111. package/src/imagine-routes.ts +0 -463
  112. package/src/index.ts +0 -735
  113. package/src/invariant.ts +0 -17
  114. package/src/kimi-errors.ts +0 -26
  115. package/src/media-store.ts +0 -927
  116. package/src/oauth-import-routes.ts +0 -324
  117. package/src/oauth-providers.ts +0 -152
  118. package/src/oauth-session.ts +0 -183
  119. package/src/oauth-sources.ts +0 -1104
  120. package/src/oauth.ts +0 -620
  121. package/src/provider.ts +0 -128
  122. package/src/proxy.ts +0 -11
  123. package/src/redact.ts +0 -72
  124. package/src/session.ts +0 -218
  125. package/src/store.ts +0 -217
  126. package/src/web-origin.ts +0 -296
  127. package/src/web-routes.ts +0 -38
@@ -5,267 +5,7 @@
5
5
  * a signed upstream URL.
6
6
  * @module dsh-coding-subscription-oauth/grok-imagine
7
7
  */
8
- import { IMAGINE_MEDIA_ROUTE_PREFIX, imagineMediaPath, isTrustedImaginePeer, type MediaArtifactMeta, type MediaStore, type MediaStoreVideoType, type TrustedImagineAuthz } from "./media-store.js";
9
- export declare const XAI_API_ORIGIN = "https://api.x.ai";
10
- export declare const GROK_IMAGINE_IMAGE_PATH = "/v1/images/generations";
11
- export declare const GROK_IMAGINE_VIDEO_START_PATH = "/v1/videos/generations";
12
- export declare const GROK_IMAGINE_IMAGE_MODEL = "grok-imagine-image-2.0";
13
- export declare const GROK_IMAGINE_VIDEO_MODEL = "grok-imagine-video-1.5";
14
- export declare const GROK_IMAGINE_IMAGE_TOOL = "grok_imagine_image";
15
- export declare const GROK_IMAGINE_VIDEO_TOOL = "grok_imagine_video";
16
- export declare const GROK_IMAGINE_VIDEO_STATUS_TOOL = "grok_imagine_video_status";
17
- export declare const IMAGINE_IMAGE_ROUTE_PREFIX = "/plugins/dsh-grok-build/imagine/images/";
18
- /** Frozen xAI output hosts. Callers cannot widen this list. */
19
- export declare const XAI_OUTPUT_HOSTS: readonly ["imgen.x.ai", "videogen.x.ai", "vidgen.x.ai"];
20
- export declare const IMAGINE_IMAGE_RESOLUTIONS: readonly ["1k", "2k"];
21
- export declare const IMAGINE_VIDEO_RESOLUTIONS: readonly ["480p", "720p", "1080p"];
22
- export declare const IMAGINE_IMAGE_ASPECT_RATIOS: readonly ["1:1", "3:4", "4:3", "9:16", "16:9", "2:3", "3:2", "9:19.5", "19.5:9", "9:20", "20:9", "1:2", "2:1", "auto"];
23
- export declare const IMAGINE_VIDEO_ASPECT_RATIOS: readonly ["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"];
24
- export declare const IMAGINE_VIDEO_MIN_DURATION_SECONDS = 1;
25
- export declare const IMAGINE_VIDEO_MAX_DURATION_SECONDS = 15;
26
- export declare const IMAGINE_IMAGE_MAX_N = 10;
27
- /**
28
- * Hard ceilings enforced both at the tool boundary (consumer guard) and inside
29
- * the Imagine client (defence-in-depth). The prompt ceiling uses UTF-16 code
30
- * units because that is what the JSON wire format bounds; the image-id arrays
31
- * are bounded so a runaway caller cannot exhaust the bounded body reader.
32
- */
33
- export declare const IMAGINE_PROMPT_MAX_LENGTH = 4000;
34
- export declare const IMAGINE_IMAGE_IDS_MIN = 1;
35
- export declare const IMAGINE_IMAGE_IDS_MAX = 5;
36
- export declare const DEFAULT_IMAGE_DOWNLOAD_MAX_BYTES: number;
37
- export declare const DEFAULT_API_TIMEOUT_MS = 30000;
38
- export declare const DEFAULT_IMAGE_DOWNLOAD_TIMEOUT_MS = 15000;
39
- export declare const DEFAULT_VIDEO_DOWNLOAD_TIMEOUT_MS = 60000;
40
- export declare const DEFAULT_MAX_REDIRECTS = 3;
41
- export declare const DEFAULT_API_JSON_MAX_BYTES: number;
42
- export declare const MAX_CACHED_VIDEO_JOBS = 256;
43
- export type ImagineOperation = "image.generate" | "video.start" | "video.status";
44
- export type ImagineImageResolution = (typeof IMAGINE_IMAGE_RESOLUTIONS)[number];
45
- export type ImagineVideoResolution = (typeof IMAGINE_VIDEO_RESOLUTIONS)[number];
46
- export type ImagineImageAspectRatio = (typeof IMAGINE_IMAGE_ASPECT_RATIOS)[number];
47
- export type ImagineVideoAspectRatio = (typeof IMAGINE_VIDEO_ASPECT_RATIOS)[number];
48
- export type ImagineApiKeyResolver = (operation: ImagineOperation) => Promise<string>;
49
- export type ImagineFetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
50
- export type ImagineDnsLookup = (hostname: string) => Promise<readonly string[]>;
51
- export type ImagineImageMediaType = "image/png" | "image/jpeg" | "image/webp" | "image/gif";
52
- export interface ImagineMediaHopRequest {
53
- timeoutMs: number;
54
- maxBytes: number;
55
- accept: string;
56
- signal?: AbortSignal;
57
- }
58
- export interface ImagineMediaHop {
59
- status: number;
60
- location?: string;
61
- contentType?: string;
62
- data?: Uint8Array;
63
- }
64
- /** Single-hop GET. Must not follow redirects or attach credentials. */
65
- export interface ImagineMediaTransport {
66
- get(url: URL, request: ImagineMediaHopRequest): Promise<ImagineMediaHop>;
67
- }
68
- export interface ImagineDownloadRequest {
69
- url: string;
70
- timeoutMs: number;
71
- maxBytes: number;
72
- accept: string;
73
- signal?: AbortSignal;
74
- }
75
- export interface ImagineDownloadResult {
76
- data: Uint8Array;
77
- contentType?: string;
78
- }
79
- /** Full download including redirect revalidation. Production default is pinned. */
80
- export interface ImagineDownloader {
81
- download(request: ImagineDownloadRequest): Promise<ImagineDownloadResult>;
82
- }
83
- export type GrokImagineErrorCode = "MISSING_CREDENTIAL" | "AUTH" | "QUOTA" | "RATE_LIMIT" | "SSRF" | "INVALID_INPUT" | "UPSTREAM" | "TIMEOUT" | "MEDIA";
84
- export declare class GrokImagineError extends Error {
85
- readonly code: GrokImagineErrorCode;
86
- readonly status?: number;
87
- constructor(code: GrokImagineErrorCode, message: string, options?: {
88
- cause?: unknown;
89
- status?: number;
90
- });
91
- }
92
- export interface ImagineImageAttachmentRef {
93
- attachmentId: string;
94
- mediaType: ImagineImageMediaType;
95
- bytes: number;
96
- width: number;
97
- height: number;
98
- name?: string;
99
- }
100
- export interface ImagineImageLimits {
101
- maxImageBytes?: number;
102
- mediaTypes?: readonly string[];
103
- }
104
- /** Structural AttachmentStore surface used by Imagine. */
105
- export interface ImagineAttachmentStore {
106
- imageLimits?: ImagineImageLimits;
107
- saveImage(input: {
108
- data: Uint8Array;
109
- mediaType: ImagineImageMediaType;
110
- name?: string;
111
- }): Promise<ImagineImageAttachmentRef>;
112
- readImage?(ref: ImagineImageAttachmentRef, signal?: AbortSignal): Promise<{
113
- ref: ImagineImageAttachmentRef;
114
- data: Uint8Array;
115
- }>;
116
- }
117
- export interface GenerateImagineImageInput {
118
- prompt: string;
119
- model?: string;
120
- n?: number;
121
- aspectRatio?: string;
122
- resolution?: string;
123
- name?: string;
124
- }
125
- export interface ImagineImageResult {
126
- model: string;
127
- images: readonly ImaginePersistedImage[];
128
- attachment: ImagineImageAttachmentRef;
129
- path: string;
130
- }
131
- export interface ImaginePersistedImage {
132
- attachment: ImagineImageAttachmentRef;
133
- path: string;
134
- }
135
- export interface StartImagineVideoInput {
136
- prompt: string;
137
- model?: string;
138
- duration?: number;
139
- aspectRatio?: string;
140
- resolution?: string;
141
- name?: string;
142
- }
143
- export interface ImagineVideoStartResult {
144
- model: string;
145
- requestId: string;
146
- status: "pending";
147
- }
148
- export type ImagineVideoJobStatus = "pending" | "completed" | "failed";
149
- export interface ImagineVideoStatusResult {
150
- requestId: string;
151
- status: ImagineVideoJobStatus;
152
- artifact?: MediaArtifactMeta;
153
- path?: string;
154
- error?: string;
155
- }
156
- export interface GrokImagineClientOptions {
157
- resolveApiKey: ImagineApiKeyResolver;
158
- attachments: ImagineAttachmentStore;
159
- media: MediaStore;
160
- /** API-only test seam. Never used for media and never a production default. */
161
- fetch?: ImagineFetch;
162
- /** Media downloads. Production default pins DNS at connect time via undici. */
163
- downloader?: ImagineDownloader;
164
- now?: () => number;
165
- imageDownloadTimeoutMs?: number;
166
- videoDownloadTimeoutMs?: number;
167
- apiTimeoutMs?: number;
168
- maxRedirects?: number;
169
- imageMaxBytes?: number;
170
- apiJsonMaxBytes?: number;
171
- }
172
- export interface ImagineImageDownloadHeaders {
173
- "Content-Type": string;
174
- "Content-Length": string;
175
- "Content-Disposition": string;
176
- "Cache-Control": string;
177
- "X-Content-Type-Options": "nosniff";
178
- }
179
- export interface ImagineImageDownloadView {
180
- ref: ImagineImageAttachmentRef;
181
- body: Uint8Array;
182
- headers: ImagineImageDownloadHeaders;
183
- }
184
- export declare function redactImagineMessage(error: unknown): string;
185
- /** True when an address is loopback, private, reserved, documentation, or an embedded special form. */
186
- export declare function isBlockedIp(address: string): boolean;
187
- export declare function isAllowlistedImagineHost(hostname: string): boolean;
188
- export declare function grokImagineVideoStatusPath(requestId: string): string;
189
- export declare function isSafeImagineAttachmentId(attachmentId: string): boolean;
190
- export declare function imagineImagePath(attachmentId: string): string;
191
- export declare function parseImagineImagePath(pathname: string): string | undefined;
192
- export declare function imagineImageDownloadHeaders(ref: ImagineImageAttachmentRef): ImagineImageDownloadHeaders;
193
- export { IMAGINE_MEDIA_ROUTE_PREFIX, imagineMediaPath, isTrustedImaginePeer };
194
- export declare function detectImageMediaType(data: Uint8Array): ImagineImageMediaType | undefined;
195
- export declare function detectVideoMediaType(data: Uint8Array): MediaStoreVideoType | undefined;
196
- export declare function defaultImagineLookup(hostname: string): Promise<readonly string[]>;
197
- export declare function assertSafeRemoteMediaUrl(raw: string, lookup: ImagineDnsLookup): Promise<URL>;
198
- export declare function createPinnedMediaTransport(lookup?: ImagineDnsLookup): ImagineMediaTransport;
199
- export declare function createPinnedApiFetch(lookup?: ImagineDnsLookup, maxBytes?: number): ImagineFetch;
200
- export declare function downloadRemoteImagineMedia(initialUrl: string, transport: ImagineMediaTransport, options: {
201
- lookup: ImagineDnsLookup;
202
- timeoutMs: number;
203
- maxBytes: number;
204
- accept: string;
205
- maxRedirects: number;
206
- signal?: AbortSignal;
207
- }): Promise<ImagineDownloadResult>;
208
- export declare function createPinnedImagineDownloader(options?: {
209
- lookup?: ImagineDnsLookup;
210
- maxRedirects?: number;
211
- }): ImagineDownloader;
212
- /**
213
- * Test-only adapter around an injected fetch. Ordinary mock fetch is not
214
- * production-safe: it cannot pin DNS at connect time.
215
- */
216
- export declare function createImagineDownloaderFromFetch(fetchImpl: ImagineFetch, options: {
217
- trustedTestTransport: true;
218
- lookup?: ImagineDnsLookup;
219
- maxRedirects?: number;
220
- }): ImagineDownloader;
221
- /**
222
- * Validate a tool-supplied Imagine video `requestId`. Returns the id unchanged
223
- * on success or throws an `INVALID_INPUT` error. Exposed so capability tools
224
- * fail closed at the boundary instead of dispatching a malformed id to the
225
- * internal client.
226
- */
227
- export declare function parseVideoRequestId(value: unknown): string;
228
- /** Enforce min/max bounds on a candidate image-id array. */
229
- export declare function clampImagineImageIds(ids: readonly unknown[]): readonly string[];
230
- export declare class GrokImagineClient {
231
- private readonly resolveApiKey;
232
- private readonly attachments;
233
- private readonly media;
234
- private readonly apiFetch;
235
- private readonly downloader;
236
- private readonly imageDownloadTimeoutMs;
237
- private readonly videoDownloadTimeoutMs;
238
- private readonly apiTimeoutMs;
239
- private readonly maxRedirects;
240
- private readonly imageMaxBytes;
241
- private readonly apiJsonMaxBytes;
242
- private readonly videoResults;
243
- private readonly videoInflight;
244
- private readonly disposeController;
245
- private disposed;
246
- constructor(options: GrokImagineClientOptions);
247
- /**
248
- * Permanently retire this client. In-flight API calls, downloads, and
249
- * media persistence operations are aborted; subsequent operations fail
250
- * closed with an `INVALID_INPUT` error until callers construct a new client.
251
- */
252
- dispose(): void;
253
- /** @returns true once {@link dispose} has been called. */
254
- get isDisposed(): boolean;
255
- private assertWritable;
256
- generateImage(input: GenerateImagineImageInput, signal?: AbortSignal): Promise<ImagineImageResult>;
257
- startVideo(input: StartImagineVideoInput, signal?: AbortSignal): Promise<ImagineVideoStartResult>;
258
- videoStatus(requestId: string, options?: {
259
- name?: string;
260
- signal?: AbortSignal;
261
- }): Promise<ImagineVideoStatusResult>;
262
- private pollVideo;
263
- private rememberVideo;
264
- private persistGeneratedImage;
265
- private resolveCredential;
266
- private apiJson;
267
- }
268
- export declare function createGrokImagineClient(options: GrokImagineClientOptions): GrokImagineClient;
269
- /** Gate a same-origin image download. Requires an explicit trusted/authz token. */
270
- export declare function openTrustedImagineImageDownload(attachments: ImagineAttachmentStore, ref: ImagineImageAttachmentRef, authz: TrustedImagineAuthz): Promise<ImagineImageDownloadView>;
8
+ export type { GenerateImagineImageInput, GrokImagineClientOptions, GrokImagineErrorCode, ImagineApiKeyResolver, ImagineAttachmentStore, ImagineDnsLookup, ImagineDownloader, ImagineDownloadRequest, ImagineDownloadResult, ImagineFetch, ImagineImageAspectRatio, ImagineImageAttachmentRef, ImagineImageDownloadHeaders, ImagineImageDownloadView, ImagineImageLimits, ImagineImageMediaType, ImagineImageResolution, ImagineImageResult, ImagineMediaHop, ImagineMediaHopRequest, ImagineMediaTransport, ImagineOperation, ImaginePersistedImage, ImagineVideoAspectRatio, ImagineVideoJobStatus, ImagineVideoResolution, ImagineVideoStartResult, ImagineVideoStatusResult, StartImagineVideoInput, } from "./grok-imagine/index.js";
9
+ export { assertSafeRemoteMediaUrl, clampImagineImageIds, createGrokImagineClient, createImagineDownloaderFromFetch, createPinnedApiFetch, createPinnedImagineDownloader, createPinnedMediaTransport, DEFAULT_API_JSON_MAX_BYTES, DEFAULT_API_TIMEOUT_MS, DEFAULT_IMAGE_DOWNLOAD_MAX_BYTES, DEFAULT_IMAGE_DOWNLOAD_TIMEOUT_MS, DEFAULT_MAX_REDIRECTS, DEFAULT_VIDEO_DOWNLOAD_TIMEOUT_MS, defaultImagineLookup, detectImageMediaType, detectVideoMediaType, downloadRemoteImagineMedia, GROK_IMAGINE_IMAGE_MODEL, GROK_IMAGINE_IMAGE_PATH, GROK_IMAGINE_IMAGE_TOOL, GROK_IMAGINE_VIDEO_MODEL, GROK_IMAGINE_VIDEO_START_PATH, GROK_IMAGINE_VIDEO_STATUS_TOOL, GROK_IMAGINE_VIDEO_TOOL, GrokImagineClient, GrokImagineError, grokImagineVideoStatusPath, IMAGINE_IMAGE_ASPECT_RATIOS, IMAGINE_IMAGE_IDS_MAX, IMAGINE_IMAGE_IDS_MIN, IMAGINE_IMAGE_MAX_N, IMAGINE_IMAGE_RESOLUTIONS, IMAGINE_IMAGE_ROUTE_PREFIX, IMAGINE_PROMPT_MAX_LENGTH, IMAGINE_VIDEO_ASPECT_RATIOS, IMAGINE_VIDEO_MAX_DURATION_SECONDS, IMAGINE_VIDEO_MIN_DURATION_SECONDS, IMAGINE_VIDEO_RESOLUTIONS, imagineImageDownloadHeaders, imagineImagePath, isAllowlistedImagineHost, isBlockedIp, isSafeImagineAttachmentId, MAX_CACHED_VIDEO_JOBS, openTrustedImagineImageDownload, parseImagineImagePath, parseVideoRequestId, redactImagineMessage, XAI_API_ORIGIN, XAI_OUTPUT_HOSTS, } from "./grok-imagine/index.js";
10
+ export { IMAGINE_MEDIA_ROUTE_PREFIX, imagineMediaPath, isTrustedImaginePeer } from "./media-store.js";
271
11
  //# sourceMappingURL=grok-imagine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grok-imagine.d.ts","sourceRoot":"","sources":["../../src/grok-imagine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grok-imagine.d.ts","sourceRoot":"","sources":["../../src/grok-imagine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACX,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,gCAAgC,EAChC,iCAAiC,EACjC,qBAAqB,EACrB,iCAAiC,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,8BAA8B,EAC9B,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,0BAA0B,EAC1B,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,kCAAkC,EAClC,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,EACX,yBAAyB,EACzB,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,10 +1,3 @@
1
- import type { IncomingMessage } from "node:http";
2
- export declare const JSON_BODY_LIMIT_BYTES: number;
3
- export declare class JsonRequestError extends Error {
4
- readonly statusCode: 400 | 413;
5
- constructor(statusCode: 400 | 413, message: string);
6
- }
7
- /** Read one JSON request body with a strict in-memory ceiling. */
8
- export declare function readJsonRequest(request: IncomingMessage, limit?: number): Promise<unknown>;
9
- export declare function requestErrorStatus(error: unknown, fallback: number): number;
1
+ /** Compatibility facade implementation lives in `src/runtime/` (mirrored from Hub vendor core). */
2
+ export { JSON_BODY_LIMIT_BYTES, JsonRequestError, readJsonRequest, requestErrorStatus, } from "./runtime/http-json.js";
10
3
  //# sourceMappingURL=http-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-json.d.ts","sourceRoot":"","sources":["../../src/http-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,eAAO,MAAM,qBAAqB,QAAY,CAAC;AAE/C,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC;gBAEnB,UAAU,EAAE,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM;CAKlD;AASD,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,SAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDzG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"http-json.d.ts","sourceRoot":"","sources":["../../src/http-json.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GAClB,MAAM,wBAAwB,CAAC"}