openrouter-genimage-kote-opencode 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/.opencode/skills/openrouter-image-generation/SKILL.md +379 -0
  2. package/CHANGELOG.md +10 -0
  3. package/LICENSE +21 -0
  4. package/README.md +229 -0
  5. package/README.ru.md +229 -0
  6. package/SECURITY.md +31 -0
  7. package/THIRD_PARTY_NOTICES.md +16 -0
  8. package/dist/cli.d.ts +20 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +277 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/balance-command.d.ts +5 -0
  13. package/dist/commands/balance-command.d.ts.map +1 -0
  14. package/dist/commands/balance-command.js +20 -0
  15. package/dist/commands/balance-command.js.map +1 -0
  16. package/dist/config/resolve.d.ts +5 -0
  17. package/dist/config/resolve.d.ts.map +1 -0
  18. package/dist/config/resolve.js +113 -0
  19. package/dist/config/resolve.js.map +1 -0
  20. package/dist/config/schema.d.ts +188 -0
  21. package/dist/config/schema.d.ts.map +1 -0
  22. package/dist/config/schema.js +144 -0
  23. package/dist/config/schema.js.map +1 -0
  24. package/dist/config/types.d.ts +75 -0
  25. package/dist/config/types.d.ts.map +1 -0
  26. package/dist/config/types.js +30 -0
  27. package/dist/config/types.js.map +1 -0
  28. package/dist/logging.d.ts +46 -0
  29. package/dist/logging.d.ts.map +1 -0
  30. package/dist/logging.js +58 -0
  31. package/dist/logging.js.map +1 -0
  32. package/dist/openrouter/capabilities.d.ts +22 -0
  33. package/dist/openrouter/capabilities.d.ts.map +1 -0
  34. package/dist/openrouter/capabilities.js +137 -0
  35. package/dist/openrouter/capabilities.js.map +1 -0
  36. package/dist/openrouter/client.d.ts +54 -0
  37. package/dist/openrouter/client.d.ts.map +1 -0
  38. package/dist/openrouter/client.js +440 -0
  39. package/dist/openrouter/client.js.map +1 -0
  40. package/dist/openrouter/errors.d.ts +22 -0
  41. package/dist/openrouter/errors.d.ts.map +1 -0
  42. package/dist/openrouter/errors.js +75 -0
  43. package/dist/openrouter/errors.js.map +1 -0
  44. package/dist/openrouter/models.d.ts +37 -0
  45. package/dist/openrouter/models.d.ts.map +1 -0
  46. package/dist/openrouter/models.js +113 -0
  47. package/dist/openrouter/models.js.map +1 -0
  48. package/dist/openrouter/requests.d.ts +6 -0
  49. package/dist/openrouter/requests.d.ts.map +1 -0
  50. package/dist/openrouter/requests.js +74 -0
  51. package/dist/openrouter/requests.js.map +1 -0
  52. package/dist/openrouter/schemas.d.ts +37 -0
  53. package/dist/openrouter/schemas.d.ts.map +1 -0
  54. package/dist/openrouter/schemas.js +2 -0
  55. package/dist/openrouter/schemas.js.map +1 -0
  56. package/dist/output/attachments.d.ts +10 -0
  57. package/dist/output/attachments.d.ts.map +1 -0
  58. package/dist/output/attachments.js +13 -0
  59. package/dist/output/attachments.js.map +1 -0
  60. package/dist/output/formats.d.ts +42 -0
  61. package/dist/output/formats.d.ts.map +1 -0
  62. package/dist/output/formats.js +126 -0
  63. package/dist/output/formats.js.map +1 -0
  64. package/dist/output/index.d.ts +5 -0
  65. package/dist/output/index.d.ts.map +1 -0
  66. package/dist/output/index.js +5 -0
  67. package/dist/output/index.js.map +1 -0
  68. package/dist/output/paths.d.ts +38 -0
  69. package/dist/output/paths.d.ts.map +1 -0
  70. package/dist/output/paths.js +296 -0
  71. package/dist/output/paths.js.map +1 -0
  72. package/dist/output/writer.d.ts +33 -0
  73. package/dist/output/writer.d.ts.map +1 -0
  74. package/dist/output/writer.js +176 -0
  75. package/dist/output/writer.js.map +1 -0
  76. package/dist/references/attachments.d.ts +82 -0
  77. package/dist/references/attachments.d.ts.map +1 -0
  78. package/dist/references/attachments.js +238 -0
  79. package/dist/references/attachments.js.map +1 -0
  80. package/dist/references/data-url.d.ts +12 -0
  81. package/dist/references/data-url.d.ts.map +1 -0
  82. package/dist/references/data-url.js +75 -0
  83. package/dist/references/data-url.js.map +1 -0
  84. package/dist/references/formats.d.ts +13 -0
  85. package/dist/references/formats.d.ts.map +1 -0
  86. package/dist/references/formats.js +50 -0
  87. package/dist/references/formats.js.map +1 -0
  88. package/dist/references/index.d.ts +7 -0
  89. package/dist/references/index.d.ts.map +1 -0
  90. package/dist/references/index.js +7 -0
  91. package/dist/references/index.js.map +1 -0
  92. package/dist/references/limits.d.ts +15 -0
  93. package/dist/references/limits.d.ts.map +1 -0
  94. package/dist/references/limits.js +62 -0
  95. package/dist/references/limits.js.map +1 -0
  96. package/dist/references/project-files.d.ts +13 -0
  97. package/dist/references/project-files.d.ts.map +1 -0
  98. package/dist/references/project-files.js +148 -0
  99. package/dist/references/project-files.js.map +1 -0
  100. package/dist/references/remote-urls.d.ts +3 -0
  101. package/dist/references/remote-urls.d.ts.map +1 -0
  102. package/dist/references/remote-urls.js +22 -0
  103. package/dist/references/remote-urls.js.map +1 -0
  104. package/dist/server.d.ts +8 -0
  105. package/dist/server.d.ts.map +1 -0
  106. package/dist/server.js +97 -0
  107. package/dist/server.js.map +1 -0
  108. package/dist/tools/balance.d.ts +8 -0
  109. package/dist/tools/balance.d.ts.map +1 -0
  110. package/dist/tools/balance.js +133 -0
  111. package/dist/tools/balance.js.map +1 -0
  112. package/dist/tools/common.d.ts +3 -0
  113. package/dist/tools/common.d.ts.map +1 -0
  114. package/dist/tools/common.js +18 -0
  115. package/dist/tools/common.js.map +1 -0
  116. package/dist/tools/edit-image.d.ts +90 -0
  117. package/dist/tools/edit-image.d.ts.map +1 -0
  118. package/dist/tools/edit-image.js +47 -0
  119. package/dist/tools/edit-image.js.map +1 -0
  120. package/dist/tools/generate-image.d.ts +70 -0
  121. package/dist/tools/generate-image.d.ts.map +1 -0
  122. package/dist/tools/generate-image.js +36 -0
  123. package/dist/tools/generate-image.js.map +1 -0
  124. package/dist/tools/generation.d.ts +19 -0
  125. package/dist/tools/generation.d.ts.map +1 -0
  126. package/dist/tools/generation.js +154 -0
  127. package/dist/tools/generation.js.map +1 -0
  128. package/dist/tools/schema.d.ts +127 -0
  129. package/dist/tools/schema.d.ts.map +1 -0
  130. package/dist/tools/schema.js +47 -0
  131. package/dist/tools/schema.js.map +1 -0
  132. package/dist/tools/types.d.ts +18 -0
  133. package/dist/tools/types.d.ts.map +1 -0
  134. package/dist/tools/types.js +2 -0
  135. package/dist/tools/types.js.map +1 -0
  136. package/dist/transport/direct.d.ts +10 -0
  137. package/dist/transport/direct.d.ts.map +1 -0
  138. package/dist/transport/direct.js +15 -0
  139. package/dist/transport/direct.js.map +1 -0
  140. package/dist/transport/index.d.ts +4 -0
  141. package/dist/transport/index.d.ts.map +1 -0
  142. package/dist/transport/index.js +4 -0
  143. package/dist/transport/index.js.map +1 -0
  144. package/dist/transport/kote-gateway.d.ts +19 -0
  145. package/dist/transport/kote-gateway.d.ts.map +1 -0
  146. package/dist/transport/kote-gateway.js +224 -0
  147. package/dist/transport/kote-gateway.js.map +1 -0
  148. package/dist/transport/types.d.ts +10 -0
  149. package/dist/transport/types.d.ts.map +1 -0
  150. package/dist/transport/types.js +9 -0
  151. package/dist/transport/types.js.map +1 -0
  152. package/dist/utils/abort.d.ts +19 -0
  153. package/dist/utils/abort.d.ts.map +1 -0
  154. package/dist/utils/abort.js +121 -0
  155. package/dist/utils/abort.js.map +1 -0
  156. package/docs/architecture.md +75 -0
  157. package/docs/configuration.md +110 -0
  158. package/docs/image-to-image.md +101 -0
  159. package/docs/security.md +49 -0
  160. package/docs/testing.md +81 -0
  161. package/docs/troubleshooting.md +73 -0
  162. package/package.json +88 -0
  163. package/schema/plugin-options.schema.json +182 -0
@@ -0,0 +1,440 @@
1
+ import { createHash } from "node:crypto";
2
+ import { GatewayTransportError } from "../transport/types.js";
3
+ import { abortableStreamRead, abortableDelay, createDeadlineSignal, isAbortError, } from "../utils/abort.js";
4
+ import { PluginError } from "./errors.js";
5
+ import { parseImageModelEndpointsResponse, parseImageModelsResponse, } from "./models.js";
6
+ export const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1/";
7
+ const RETRYABLE_GET_STATUS = new Set([429, 500, 502, 503, 504, 524, 529]);
8
+ const MAX_GET_RETRIES = 2;
9
+ const MAX_RETRY_DELAY_MS = 30_000;
10
+ function isRecord(value) {
11
+ return typeof value === "object" && value !== null && !Array.isArray(value);
12
+ }
13
+ function optionalFiniteNumber(record, name) {
14
+ const value = record[name];
15
+ if (value === undefined)
16
+ return undefined;
17
+ if (typeof value !== "number" || !Number.isFinite(value)) {
18
+ throw new TypeError(`Invalid numeric field: ${name}`);
19
+ }
20
+ return value;
21
+ }
22
+ function optionalNullableNumber(record, name) {
23
+ const value = record[name];
24
+ if (value === undefined || value === null)
25
+ return value;
26
+ if (typeof value !== "number" || !Number.isFinite(value)) {
27
+ throw new TypeError(`Invalid numeric field: ${name}`);
28
+ }
29
+ return value;
30
+ }
31
+ function optionalString(record, name) {
32
+ const value = record[name];
33
+ if (value === undefined)
34
+ return undefined;
35
+ if (typeof value !== "string")
36
+ throw new TypeError(`Invalid string field: ${name}`);
37
+ return value;
38
+ }
39
+ function optionalNullableString(record, name) {
40
+ const value = record[name];
41
+ if (value === undefined || value === null)
42
+ return value;
43
+ if (typeof value !== "string")
44
+ throw new TypeError(`Invalid string field: ${name}`);
45
+ return value;
46
+ }
47
+ function optionalLimitReset(record) {
48
+ const value = optionalNullableString(record, "limit_reset");
49
+ if (typeof value === "string" &&
50
+ !/^[A-Za-z0-9][A-Za-z0-9_.:+/-]{0,63}$/u.test(value)) {
51
+ throw new TypeError("Invalid string field: limit_reset");
52
+ }
53
+ return value;
54
+ }
55
+ function optionalExpiryTimestamp(record) {
56
+ const value = optionalNullableString(record, "expires_at");
57
+ if (typeof value === "string" &&
58
+ (value.length > 64 ||
59
+ /[\u0000-\u001f\u007f]/u.test(value) ||
60
+ !Number.isFinite(Date.parse(value)))) {
61
+ throw new TypeError("Invalid string field: expires_at");
62
+ }
63
+ return value;
64
+ }
65
+ function optionalBoolean(record, name) {
66
+ const value = record[name];
67
+ if (value === undefined)
68
+ return undefined;
69
+ if (typeof value !== "boolean")
70
+ throw new TypeError(`Invalid boolean field: ${name}`);
71
+ return value;
72
+ }
73
+ function parseKeyInfo(value) {
74
+ if (!isRecord(value) || !isRecord(value.data)) {
75
+ throw new TypeError("OpenRouter key response has an invalid shape.");
76
+ }
77
+ const data = value.data;
78
+ return {
79
+ ...optionalProperty("label", optionalString(data, "label")),
80
+ ...optionalProperty("usage", optionalFiniteNumber(data, "usage")),
81
+ ...optionalProperty("usage_daily", optionalFiniteNumber(data, "usage_daily")),
82
+ ...optionalProperty("usage_weekly", optionalFiniteNumber(data, "usage_weekly")),
83
+ ...optionalProperty("usage_monthly", optionalFiniteNumber(data, "usage_monthly")),
84
+ ...optionalProperty("byok_usage", optionalFiniteNumber(data, "byok_usage")),
85
+ ...optionalProperty("byok_usage_daily", optionalFiniteNumber(data, "byok_usage_daily")),
86
+ ...optionalProperty("byok_usage_weekly", optionalFiniteNumber(data, "byok_usage_weekly")),
87
+ ...optionalProperty("byok_usage_monthly", optionalFiniteNumber(data, "byok_usage_monthly")),
88
+ ...optionalProperty("limit", optionalNullableNumber(data, "limit")),
89
+ ...optionalProperty("limit_remaining", optionalNullableNumber(data, "limit_remaining")),
90
+ ...optionalProperty("limit_reset", optionalLimitReset(data)),
91
+ ...optionalProperty("is_free_tier", optionalBoolean(data, "is_free_tier")),
92
+ ...optionalProperty("is_management_key", optionalBoolean(data, "is_management_key")),
93
+ ...optionalProperty("expires_at", optionalExpiryTimestamp(data)),
94
+ };
95
+ }
96
+ function optionalProperty(key, value) {
97
+ return value === undefined ? {} : { [key]: value };
98
+ }
99
+ function parseCredits(value) {
100
+ if (!isRecord(value) || !isRecord(value.data)) {
101
+ throw new TypeError("OpenRouter credits response has an invalid shape.");
102
+ }
103
+ const totalCredits = optionalFiniteNumber(value.data, "total_credits");
104
+ const totalUsage = optionalFiniteNumber(value.data, "total_usage");
105
+ if (totalCredits === undefined || totalUsage === undefined) {
106
+ throw new TypeError("OpenRouter credits response is missing required fields.");
107
+ }
108
+ return { total_credits: totalCredits, total_usage: totalUsage };
109
+ }
110
+ function parseRetryAfter(value, now = Date.now()) {
111
+ if (value === null)
112
+ return undefined;
113
+ const seconds = Number(value);
114
+ if (Number.isFinite(seconds) && seconds >= 0)
115
+ return seconds * 1_000;
116
+ const date = Date.parse(value);
117
+ if (!Number.isFinite(date))
118
+ return undefined;
119
+ return Math.max(0, date - now);
120
+ }
121
+ function safeRequestId(value, sensitiveValues) {
122
+ if (value === null || value.length === 0 || value.length > 1_024)
123
+ return undefined;
124
+ if (sensitiveValues.some((sensitive) => sensitive !== undefined &&
125
+ sensitive !== "" &&
126
+ (value.includes(sensitive) || sensitive.includes(value)))) {
127
+ return undefined;
128
+ }
129
+ return `sha256:${createHash("sha256").update(value).digest("hex").slice(0, 16)}`;
130
+ }
131
+ function mapStatus(status, requestId) {
132
+ const details = {
133
+ status,
134
+ ...(requestId === undefined ? {} : { requestId }),
135
+ };
136
+ switch (status) {
137
+ case 400:
138
+ return new PluginError("GENIMAGE_BAD_REQUEST", "OpenRouter rejected the image request.", { details });
139
+ case 401:
140
+ return new PluginError("GENIMAGE_OPENROUTER_AUTH", "OpenRouter rejected the configured API key.", { details });
141
+ case 402:
142
+ return new PluginError("GENIMAGE_INSUFFICIENT_CREDITS", "OpenRouter reports insufficient credits for this request.", { details });
143
+ case 403:
144
+ return new PluginError("GENIMAGE_OPENROUTER_FORBIDDEN", "OpenRouter denied this request.", { details });
145
+ case 413:
146
+ return new PluginError("GENIMAGE_REQUEST_TOO_LARGE", "OpenRouter rejected the request because it is too large.", { details });
147
+ case 429:
148
+ return new PluginError("GENIMAGE_RATE_LIMITED", "OpenRouter rate-limited this request.", { details });
149
+ default:
150
+ return new PluginError("GENIMAGE_PROVIDER_ERROR", "OpenRouter could not complete the request.", { details });
151
+ }
152
+ }
153
+ async function readBoundedBody(response, maximumBytes, signal) {
154
+ const contentLength = response.headers.get("content-length");
155
+ if (contentLength !== null) {
156
+ const parsed = Number(contentLength);
157
+ if (Number.isFinite(parsed) && parsed > maximumBytes) {
158
+ await response.body?.cancel().catch(() => { });
159
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter response exceeds the configured size limit.", { details: { maxResponseBytes: maximumBytes } });
160
+ }
161
+ }
162
+ if (response.body === null)
163
+ return new Uint8Array();
164
+ const reader = response.body.getReader();
165
+ const chunks = [];
166
+ let total = 0;
167
+ try {
168
+ for (;;) {
169
+ if (signal.aborted)
170
+ throw signal.reason;
171
+ const chunk = await abortableStreamRead(reader, signal);
172
+ if (chunk.done)
173
+ break;
174
+ total += chunk.value.byteLength;
175
+ if (total > maximumBytes) {
176
+ await reader.cancel("response size limit exceeded").catch(() => { });
177
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter response exceeds the configured size limit.", { details: { maxResponseBytes: maximumBytes } });
178
+ }
179
+ chunks.push(chunk.value);
180
+ }
181
+ }
182
+ finally {
183
+ try {
184
+ reader.releaseLock();
185
+ }
186
+ catch {
187
+ void reader.cancel().catch(() => { });
188
+ }
189
+ }
190
+ const result = new Uint8Array(total);
191
+ let offset = 0;
192
+ for (const chunk of chunks) {
193
+ result.set(chunk, offset);
194
+ offset += chunk.byteLength;
195
+ }
196
+ return result;
197
+ }
198
+ function parseJson(bytes) {
199
+ try {
200
+ return JSON.parse(new TextDecoder().decode(bytes));
201
+ }
202
+ catch (error) {
203
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned invalid JSON.", { cause: error });
204
+ }
205
+ }
206
+ export class DefaultOpenRouterImageClient {
207
+ #options;
208
+ #transport;
209
+ #logger;
210
+ #baseUrl;
211
+ #sleep;
212
+ #random;
213
+ constructor(options) {
214
+ this.#options = options.pluginOptions;
215
+ this.#transport = options.transport;
216
+ this.#logger = options.logger;
217
+ this.#baseUrl = new URL(options.baseUrl ?? OPENROUTER_BASE_URL);
218
+ this.#sleep = options.sleep ?? abortableDelay;
219
+ this.#random = options.random ?? Math.random;
220
+ }
221
+ async listImageModels(signal) {
222
+ const data = await this.#requestJson({
223
+ method: "GET",
224
+ url: new URL("images/models", this.#baseUrl),
225
+ apiKey: this.#options.apiKey,
226
+ signal,
227
+ });
228
+ try {
229
+ return parseImageModelsResponse(data);
230
+ }
231
+ catch (error) {
232
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned invalid image-model metadata.", { cause: error });
233
+ }
234
+ }
235
+ async listImageModelEndpoints(path, signal) {
236
+ const url = this.#validateCapabilityUrl(path);
237
+ const data = await this.#requestJson({
238
+ method: "GET",
239
+ url,
240
+ apiKey: this.#options.apiKey,
241
+ signal,
242
+ });
243
+ try {
244
+ return parseImageModelEndpointsResponse(data);
245
+ }
246
+ catch (error) {
247
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned invalid endpoint capabilities.", { cause: error });
248
+ }
249
+ }
250
+ async generateImage(request, signal) {
251
+ const data = await this.#requestJson({
252
+ method: "POST",
253
+ url: new URL("images", this.#baseUrl),
254
+ apiKey: this.#options.apiKey,
255
+ body: request,
256
+ signal,
257
+ });
258
+ if (!isRecord(data)) {
259
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned an invalid image response.");
260
+ }
261
+ return data;
262
+ }
263
+ async getCurrentKey(signal) {
264
+ const data = await this.#requestJson({
265
+ method: "GET",
266
+ url: new URL("key", this.#baseUrl),
267
+ apiKey: this.#options.apiKey,
268
+ signal,
269
+ });
270
+ try {
271
+ return parseKeyInfo(data);
272
+ }
273
+ catch (error) {
274
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned invalid API-key information.", { cause: error });
275
+ }
276
+ }
277
+ async getCredits(managementApiKey, signal) {
278
+ const data = await this.#requestJson({
279
+ method: "GET",
280
+ url: new URL("credits", this.#baseUrl),
281
+ apiKey: managementApiKey,
282
+ signal,
283
+ });
284
+ try {
285
+ return parseCredits(data);
286
+ }
287
+ catch (error) {
288
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned invalid account credit information.", { cause: error });
289
+ }
290
+ }
291
+ #validateCapabilityUrl(path) {
292
+ let url;
293
+ try {
294
+ url = new URL(path, this.#baseUrl);
295
+ }
296
+ catch (error) {
297
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned an invalid endpoint-capabilities URL.", { cause: error });
298
+ }
299
+ const requiredPrefix = `${this.#baseUrl.pathname}images/models/`;
300
+ if (url.origin !== this.#baseUrl.origin ||
301
+ !url.pathname.startsWith(requiredPrefix) ||
302
+ !url.pathname.endsWith("/endpoints") ||
303
+ url.username !== "" ||
304
+ url.password !== "" ||
305
+ url.search !== "" ||
306
+ url.hash !== "") {
307
+ throw new PluginError("GENIMAGE_RESPONSE_INVALID", "OpenRouter returned an unsafe endpoint-capabilities URL.");
308
+ }
309
+ return url;
310
+ }
311
+ async #requestJson(options) {
312
+ let headers;
313
+ try {
314
+ headers = new Headers({
315
+ Authorization: `Bearer ${options.apiKey}`,
316
+ Accept: "application/json",
317
+ "X-Title": "openrouter-genimage-kote-opencode",
318
+ });
319
+ }
320
+ catch {
321
+ throw new PluginError("GENIMAGE_CONFIG_INVALID", "The configured OpenRouter credential cannot be used as an HTTP authorization header.", {
322
+ suggestion: "Configure a single-line OpenRouter API key.",
323
+ });
324
+ }
325
+ const body = options.body === undefined ? undefined : JSON.stringify(options.body);
326
+ if (body !== undefined)
327
+ headers.set("Content-Type", "application/json");
328
+ const deadline = createDeadlineSignal(options.signal, this.#options.requestTimeoutMs);
329
+ const maximumAttempts = options.method === "GET" ? MAX_GET_RETRIES + 1 : 1;
330
+ try {
331
+ for (let attempt = 0; attempt < maximumAttempts; attempt += 1) {
332
+ let response;
333
+ try {
334
+ response = await this.#transport.request(options.url, {
335
+ method: options.method,
336
+ headers,
337
+ redirect: "manual",
338
+ ...(body === undefined ? {} : { body }),
339
+ }, deadline.signal);
340
+ }
341
+ catch (error) {
342
+ if (error instanceof GatewayTransportError) {
343
+ throw new PluginError(error.code, error.message, { cause: error });
344
+ }
345
+ if (deadline.didTimeout()) {
346
+ const code = this.#options.routing === "proxy"
347
+ ? "GENIMAGE_GATEWAY_TIMEOUT"
348
+ : "GENIMAGE_TIMEOUT";
349
+ throw new PluginError(code, "The OpenRouter request timed out.", {
350
+ cause: error,
351
+ });
352
+ }
353
+ if (options.signal.aborted || isAbortError(error))
354
+ throw error;
355
+ if (options.method === "POST") {
356
+ throw new PluginError("GENIMAGE_REQUEST_STATUS_UNKNOWN", "The connection ended before OpenRouter confirmed the generation status. The request was not retried to avoid duplicate charges.", {
357
+ cause: error,
358
+ suggestion: "Check OpenRouter activity before manually trying the generation again.",
359
+ });
360
+ }
361
+ if (attempt + 1 >= maximumAttempts) {
362
+ throw new PluginError("GENIMAGE_PROVIDER_ERROR", "OpenRouter could not be reached after retrying the read-only request.", { cause: error });
363
+ }
364
+ await this.#sleep(250 + Math.floor(this.#random() * 250), deadline.signal);
365
+ continue;
366
+ }
367
+ const requestId = safeRequestId(response.headers.get("x-request-id") ??
368
+ response.headers.get("x-openrouter-request-id"), [
369
+ this.#options.apiKey,
370
+ this.#options.managementApiKey,
371
+ options.body?.prompt,
372
+ ]);
373
+ this.#logger.log("debug", "OpenRouter request completed.", {
374
+ routing: this.#options.routing,
375
+ model: this.#options.model,
376
+ httpStatus: response.status,
377
+ ...(requestId === undefined ? {} : { requestId }),
378
+ });
379
+ if (!response.ok &&
380
+ options.method === "GET" &&
381
+ RETRYABLE_GET_STATUS.has(response.status) &&
382
+ attempt + 1 < maximumAttempts) {
383
+ await response.body?.cancel().catch(() => { });
384
+ const retryAfter = parseRetryAfter(response.headers.get("retry-after"));
385
+ const jitter = Math.floor(this.#random() * 250);
386
+ const delay = Math.min(MAX_RETRY_DELAY_MS, retryAfter ?? 250 * 2 ** attempt);
387
+ await this.#sleep(delay + jitter, deadline.signal);
388
+ continue;
389
+ }
390
+ if (!response.ok) {
391
+ await response.body?.cancel().catch(() => { });
392
+ throw mapStatus(response.status, requestId);
393
+ }
394
+ let bytes;
395
+ try {
396
+ bytes = await readBoundedBody(response, this.#options.maxResponseBytes, deadline.signal);
397
+ }
398
+ catch (error) {
399
+ if (error instanceof PluginError)
400
+ throw error;
401
+ if (deadline.didTimeout()) {
402
+ const code = this.#options.routing === "proxy"
403
+ ? "GENIMAGE_GATEWAY_TIMEOUT"
404
+ : "GENIMAGE_TIMEOUT";
405
+ throw new PluginError(code, "The OpenRouter response timed out.", {
406
+ cause: error,
407
+ });
408
+ }
409
+ if (options.signal.aborted || isAbortError(error))
410
+ throw error;
411
+ if (options.method === "POST") {
412
+ throw new PluginError("GENIMAGE_REQUEST_STATUS_UNKNOWN", "OpenRouter accepted the request but its response ended before the generated image could be read. The request was not retried to avoid duplicate charges.", { cause: error });
413
+ }
414
+ if (attempt + 1 < maximumAttempts) {
415
+ await this.#sleep(250 + Math.floor(this.#random() * 250), deadline.signal);
416
+ continue;
417
+ }
418
+ throw new PluginError("GENIMAGE_PROVIDER_ERROR", "OpenRouter response streaming failed after retrying the read-only request.", { cause: error });
419
+ }
420
+ return parseJson(bytes);
421
+ }
422
+ throw new PluginError("GENIMAGE_PROVIDER_ERROR", "OpenRouter request attempts were exhausted.");
423
+ }
424
+ finally {
425
+ deadline.dispose();
426
+ }
427
+ }
428
+ }
429
+ export function createOpenRouterClient(pluginOptions, transport, logger, overrides = {}) {
430
+ return new DefaultOpenRouterImageClient({
431
+ pluginOptions,
432
+ transport,
433
+ logger,
434
+ ...overrides,
435
+ });
436
+ }
437
+ export function routingForClient(options) {
438
+ return options.routing;
439
+ }
440
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/openrouter/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare const PLUGIN_ERROR_CODES: readonly ["GENIMAGE_CONFIG_INVALID", "GENIMAGE_OPENROUTER_KEY_MISSING", "GENIMAGE_REFERENCE_REQUIRED", "GENIMAGE_REFERENCE_NOT_FOUND", "GENIMAGE_REFERENCE_INDEX_INVALID", "GENIMAGE_REFERENCE_FORMAT_UNSUPPORTED", "GENIMAGE_REFERENCE_TOO_LARGE", "GENIMAGE_TOTAL_REFERENCE_SIZE_EXCEEDED", "GENIMAGE_REFERENCE_INVALID", "GENIMAGE_REFERENCE_URL_INVALID", "GENIMAGE_TOO_MANY_REFERENCES", "GENIMAGE_ATTACHMENT_ACCESS_FAILED", "GENIMAGE_MODEL_NOT_FOUND", "GENIMAGE_MODEL_DOES_NOT_SUPPORT_IMAGE_INPUT", "GENIMAGE_MODEL_DOES_NOT_SUPPORT_IMAGE_OUTPUT", "GENIMAGE_PARAMETER_UNSUPPORTED", "GENIMAGE_OPENROUTER_AUTH", "GENIMAGE_OPENROUTER_FORBIDDEN", "GENIMAGE_INSUFFICIENT_CREDITS", "GENIMAGE_RATE_LIMITED", "GENIMAGE_BAD_REQUEST", "GENIMAGE_REQUEST_TOO_LARGE", "GENIMAGE_PROVIDER_ERROR", "GENIMAGE_TIMEOUT", "GENIMAGE_REQUEST_STATUS_UNKNOWN", "GENIMAGE_RESPONSE_INVALID", "GENIMAGE_IMAGE_INVALID", "GENIMAGE_GATEWAY_BOOTSTRAP_FAILED", "GENIMAGE_GATEWAY_SIGNATURE_INVALID", "GENIMAGE_GATEWAY_CACHE_EXPIRED", "GENIMAGE_GATEWAY_CONNECT_FAILED", "GENIMAGE_GATEWAY_TIMEOUT", "GENIMAGE_OUTPUT_PATH_INVALID", "GENIMAGE_OUTPUT_OUTSIDE_WORKTREE", "GENIMAGE_OUTPUT_FORMAT_MISMATCH", "GENIMAGE_OUTPUT_WRITE_FAILED", "GENIMAGE_SOURCE_OVERWRITE_FORBIDDEN"];
2
+ export type PluginErrorCode = (typeof PLUGIN_ERROR_CODES)[number];
3
+ export interface PluginErrorShape {
4
+ code: PluginErrorCode;
5
+ message: string;
6
+ details?: Record<string, unknown>;
7
+ suggestion?: string;
8
+ }
9
+ export interface PluginErrorOptions {
10
+ details?: Record<string, unknown>;
11
+ suggestion?: string;
12
+ cause?: unknown;
13
+ }
14
+ export declare class PluginError extends Error {
15
+ readonly code: PluginErrorCode;
16
+ readonly details: Record<string, unknown> | undefined;
17
+ readonly suggestion: string | undefined;
18
+ constructor(code: PluginErrorCode, message: string, options?: PluginErrorOptions);
19
+ toJSON(): PluginErrorShape;
20
+ }
21
+ export declare function isPluginError(error: unknown): error is PluginError;
22
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/openrouter/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,itCAsCrB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAID,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;gBAGrC,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB;IASlC,MAAM,IAAI,gBAAgB;CAU3B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAelE"}
@@ -0,0 +1,75 @@
1
+ export const PLUGIN_ERROR_CODES = [
2
+ "GENIMAGE_CONFIG_INVALID",
3
+ "GENIMAGE_OPENROUTER_KEY_MISSING",
4
+ "GENIMAGE_REFERENCE_REQUIRED",
5
+ "GENIMAGE_REFERENCE_NOT_FOUND",
6
+ "GENIMAGE_REFERENCE_INDEX_INVALID",
7
+ "GENIMAGE_REFERENCE_FORMAT_UNSUPPORTED",
8
+ "GENIMAGE_REFERENCE_TOO_LARGE",
9
+ "GENIMAGE_TOTAL_REFERENCE_SIZE_EXCEEDED",
10
+ "GENIMAGE_REFERENCE_INVALID",
11
+ "GENIMAGE_REFERENCE_URL_INVALID",
12
+ "GENIMAGE_TOO_MANY_REFERENCES",
13
+ "GENIMAGE_ATTACHMENT_ACCESS_FAILED",
14
+ "GENIMAGE_MODEL_NOT_FOUND",
15
+ "GENIMAGE_MODEL_DOES_NOT_SUPPORT_IMAGE_INPUT",
16
+ "GENIMAGE_MODEL_DOES_NOT_SUPPORT_IMAGE_OUTPUT",
17
+ "GENIMAGE_PARAMETER_UNSUPPORTED",
18
+ "GENIMAGE_OPENROUTER_AUTH",
19
+ "GENIMAGE_OPENROUTER_FORBIDDEN",
20
+ "GENIMAGE_INSUFFICIENT_CREDITS",
21
+ "GENIMAGE_RATE_LIMITED",
22
+ "GENIMAGE_BAD_REQUEST",
23
+ "GENIMAGE_REQUEST_TOO_LARGE",
24
+ "GENIMAGE_PROVIDER_ERROR",
25
+ "GENIMAGE_TIMEOUT",
26
+ "GENIMAGE_REQUEST_STATUS_UNKNOWN",
27
+ "GENIMAGE_RESPONSE_INVALID",
28
+ "GENIMAGE_IMAGE_INVALID",
29
+ "GENIMAGE_GATEWAY_BOOTSTRAP_FAILED",
30
+ "GENIMAGE_GATEWAY_SIGNATURE_INVALID",
31
+ "GENIMAGE_GATEWAY_CACHE_EXPIRED",
32
+ "GENIMAGE_GATEWAY_CONNECT_FAILED",
33
+ "GENIMAGE_GATEWAY_TIMEOUT",
34
+ "GENIMAGE_OUTPUT_PATH_INVALID",
35
+ "GENIMAGE_OUTPUT_OUTSIDE_WORKTREE",
36
+ "GENIMAGE_OUTPUT_FORMAT_MISMATCH",
37
+ "GENIMAGE_OUTPUT_WRITE_FAILED",
38
+ "GENIMAGE_SOURCE_OVERWRITE_FORBIDDEN",
39
+ ];
40
+ const PLUGIN_ERROR_CODE_SET = new Set(PLUGIN_ERROR_CODES);
41
+ export class PluginError extends Error {
42
+ code;
43
+ details;
44
+ suggestion;
45
+ constructor(code, message, options = {}) {
46
+ super(message, "cause" in options ? { cause: options.cause } : undefined);
47
+ this.name = "PluginError";
48
+ this.code = code;
49
+ this.details = options.details;
50
+ this.suggestion = options.suggestion;
51
+ }
52
+ toJSON() {
53
+ return {
54
+ code: this.code,
55
+ message: this.message,
56
+ ...(this.details === undefined ? {} : { details: this.details }),
57
+ ...(this.suggestion === undefined
58
+ ? {}
59
+ : { suggestion: this.suggestion }),
60
+ };
61
+ }
62
+ }
63
+ export function isPluginError(error) {
64
+ if (error instanceof PluginError) {
65
+ return true;
66
+ }
67
+ if (typeof error !== "object" || error === null) {
68
+ return false;
69
+ }
70
+ const candidate = error;
71
+ return (typeof candidate.code === "string" &&
72
+ PLUGIN_ERROR_CODE_SET.has(candidate.code) &&
73
+ typeof candidate.message === "string");
74
+ }
75
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/openrouter/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,yBAAyB;IACzB,iCAAiC;IACjC,6BAA6B;IAC7B,8BAA8B;IAC9B,kCAAkC;IAClC,uCAAuC;IACvC,8BAA8B;IAC9B,wCAAwC;IACxC,4BAA4B;IAC5B,gCAAgC;IAChC,8BAA8B;IAC9B,mCAAmC;IACnC,0BAA0B;IAC1B,6CAA6C;IAC7C,8CAA8C;IAC9C,gCAAgC;IAChC,0BAA0B;IAC1B,+BAA+B;IAC/B,+BAA+B;IAC/B,uBAAuB;IACvB,sBAAsB;IACtB,4BAA4B;IAC5B,yBAAyB;IACzB,kBAAkB;IAClB,iCAAiC;IACjC,2BAA2B;IAC3B,wBAAwB;IACxB,mCAAmC;IACnC,oCAAoC;IACpC,gCAAgC;IAChC,iCAAiC;IACjC,0BAA0B;IAC1B,8BAA8B;IAC9B,kCAAkC;IAClC,iCAAiC;IACjC,8BAA8B;IAC9B,qCAAqC;CAC7B,CAAA;AAiBV,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS,kBAAkB,CAAC,CAAA;AAEjE,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAiB;IACrB,OAAO,CAAqC;IAC5C,UAAU,CAAoB;IAEvC,YACE,IAAqB,EACrB,OAAe,EACf,UAA8B,EAAE;QAEhC,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACzE,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IACtC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;SACrC,CAAA;IACH,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,SAAS,GAAG,KAA8C,CAAA;IAChE,OAAO,CACL,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACzC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CACtC,CAAA;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ export type CapabilityDescriptor = {
2
+ type: "boolean";
3
+ } | {
4
+ type: "enum";
5
+ values: readonly (string | number)[];
6
+ } | {
7
+ type: "range";
8
+ min: number;
9
+ max: number;
10
+ };
11
+ export type SupportedParameters = Readonly<Record<string, CapabilityDescriptor>>;
12
+ export interface ImageModel {
13
+ id: string;
14
+ name?: string;
15
+ architecture: {
16
+ input_modalities: readonly string[];
17
+ output_modalities: readonly string[];
18
+ };
19
+ supported_parameters: SupportedParameters;
20
+ endpoints?: string;
21
+ supports_streaming?: boolean;
22
+ }
23
+ export interface ImageModelEndpoint {
24
+ provider_name?: string;
25
+ provider_slug?: string;
26
+ provider_tag?: string | null;
27
+ supported_parameters: SupportedParameters;
28
+ supports_streaming?: boolean;
29
+ }
30
+ export interface ImageModelEndpoints {
31
+ id: string;
32
+ endpoints: readonly ImageModelEndpoint[];
33
+ }
34
+ export declare function parseImageModelsResponse(value: unknown): ImageModel[];
35
+ export declare function parseImageModelEndpointsResponse(value: unknown): ImageModelEndpoints;
36
+ export declare function capabilitySupports(descriptor: CapabilityDescriptor | undefined, value: string | number | boolean | readonly unknown[]): boolean;
37
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/openrouter/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAA;AAEhF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,EAAE;QACZ,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;QACnC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;KACrC,CAAA;IACD,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAA;CACzC;AAyED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,CAUrE;AAqBD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAUpF;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,oBAAoB,GAAG,SAAS,EAC5C,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,OAAO,EAAE,GACpD,OAAO,CAWT"}