@iam-brain/opencode-codex-auth 1.2.4 → 1.3.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 (213) hide show
  1. package/README.md +42 -83
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +41 -18
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/accounts-tools.d.ts.map +1 -1
  6. package/dist/lib/accounts-tools.js +112 -29
  7. package/dist/lib/accounts-tools.js.map +1 -1
  8. package/dist/lib/cache-io.d.ts.map +1 -1
  9. package/dist/lib/cache-io.js +6 -1
  10. package/dist/lib/cache-io.js.map +1 -1
  11. package/dist/lib/codex-native/accounts.d.ts.map +1 -1
  12. package/dist/lib/codex-native/accounts.js +18 -12
  13. package/dist/lib/codex-native/accounts.js.map +1 -1
  14. package/dist/lib/codex-native/acquire-auth.d.ts +1 -1
  15. package/dist/lib/codex-native/acquire-auth.d.ts.map +1 -1
  16. package/dist/lib/codex-native/acquire-auth.js +318 -204
  17. package/dist/lib/codex-native/acquire-auth.js.map +1 -1
  18. package/dist/lib/codex-native/auth-menu-flow.d.ts.map +1 -1
  19. package/dist/lib/codex-native/auth-menu-flow.js +27 -12
  20. package/dist/lib/codex-native/auth-menu-flow.js.map +1 -1
  21. package/dist/lib/codex-native/auth-menu-quotas.d.ts.map +1 -1
  22. package/dist/lib/codex-native/auth-menu-quotas.js +11 -4
  23. package/dist/lib/codex-native/auth-menu-quotas.js.map +1 -1
  24. package/dist/lib/codex-native/catalog-auth.d.ts.map +1 -1
  25. package/dist/lib/codex-native/catalog-auth.js +4 -2
  26. package/dist/lib/codex-native/catalog-auth.js.map +1 -1
  27. package/dist/lib/codex-native/chat-hooks.d.ts.map +1 -1
  28. package/dist/lib/codex-native/chat-hooks.js +0 -8
  29. package/dist/lib/codex-native/chat-hooks.js.map +1 -1
  30. package/dist/lib/codex-native/client-identity.d.ts.map +1 -1
  31. package/dist/lib/codex-native/client-identity.js +11 -4
  32. package/dist/lib/codex-native/client-identity.js.map +1 -1
  33. package/dist/lib/codex-native/collaboration.d.ts +1 -1
  34. package/dist/lib/codex-native/collaboration.d.ts.map +1 -1
  35. package/dist/lib/codex-native/collaboration.js +9 -116
  36. package/dist/lib/codex-native/collaboration.js.map +1 -1
  37. package/dist/lib/codex-native/oauth-auth-methods.d.ts.map +1 -1
  38. package/dist/lib/codex-native/oauth-auth-methods.js +25 -6
  39. package/dist/lib/codex-native/oauth-auth-methods.js.map +1 -1
  40. package/dist/lib/codex-native/oauth-server-debug.d.ts +10 -0
  41. package/dist/lib/codex-native/oauth-server-debug.d.ts.map +1 -0
  42. package/dist/lib/codex-native/oauth-server-debug.js +92 -0
  43. package/dist/lib/codex-native/oauth-server-debug.js.map +1 -0
  44. package/dist/lib/codex-native/oauth-server-network.d.ts +5 -0
  45. package/dist/lib/codex-native/oauth-server-network.d.ts.map +1 -0
  46. package/dist/lib/codex-native/oauth-server-network.js +39 -0
  47. package/dist/lib/codex-native/oauth-server-network.js.map +1 -0
  48. package/dist/lib/codex-native/oauth-server-types.d.ts +24 -0
  49. package/dist/lib/codex-native/oauth-server-types.d.ts.map +1 -0
  50. package/dist/lib/codex-native/oauth-server-types.js +2 -0
  51. package/dist/lib/codex-native/oauth-server-types.js.map +1 -0
  52. package/dist/lib/codex-native/oauth-server.d.ts +2 -16
  53. package/dist/lib/codex-native/oauth-server.d.ts.map +1 -1
  54. package/dist/lib/codex-native/oauth-server.js +63 -118
  55. package/dist/lib/codex-native/oauth-server.js.map +1 -1
  56. package/dist/lib/codex-native/openai-loader-fetch-quota.d.ts +18 -0
  57. package/dist/lib/codex-native/openai-loader-fetch-quota.d.ts.map +1 -0
  58. package/dist/lib/codex-native/openai-loader-fetch-quota.js +71 -0
  59. package/dist/lib/codex-native/openai-loader-fetch-quota.js.map +1 -0
  60. package/dist/lib/codex-native/openai-loader-fetch-state.d.ts +27 -0
  61. package/dist/lib/codex-native/openai-loader-fetch-state.d.ts.map +1 -0
  62. package/dist/lib/codex-native/openai-loader-fetch-state.js +91 -0
  63. package/dist/lib/codex-native/openai-loader-fetch-state.js.map +1 -0
  64. package/dist/lib/codex-native/openai-loader-fetch.d.ts.map +1 -1
  65. package/dist/lib/codex-native/openai-loader-fetch.js +49 -131
  66. package/dist/lib/codex-native/openai-loader-fetch.js.map +1 -1
  67. package/dist/lib/codex-native/originator.d.ts.map +1 -1
  68. package/dist/lib/codex-native/originator.js +18 -1
  69. package/dist/lib/codex-native/originator.js.map +1 -1
  70. package/dist/lib/codex-native/request-transform-instructions.d.ts +16 -0
  71. package/dist/lib/codex-native/request-transform-instructions.d.ts.map +1 -0
  72. package/dist/lib/codex-native/request-transform-instructions.js +114 -0
  73. package/dist/lib/codex-native/request-transform-instructions.js.map +1 -0
  74. package/dist/lib/codex-native/request-transform-model.d.ts +39 -0
  75. package/dist/lib/codex-native/request-transform-model.d.ts.map +1 -0
  76. package/dist/lib/codex-native/request-transform-model.js +270 -0
  77. package/dist/lib/codex-native/request-transform-model.js.map +1 -0
  78. package/dist/lib/codex-native/request-transform-payload-helpers.d.ts +26 -0
  79. package/dist/lib/codex-native/request-transform-payload-helpers.d.ts.map +1 -0
  80. package/dist/lib/codex-native/request-transform-payload-helpers.js +232 -0
  81. package/dist/lib/codex-native/request-transform-payload-helpers.js.map +1 -0
  82. package/dist/lib/codex-native/request-transform-payload.d.ts +53 -0
  83. package/dist/lib/codex-native/request-transform-payload.d.ts.map +1 -0
  84. package/dist/lib/codex-native/request-transform-payload.js +214 -0
  85. package/dist/lib/codex-native/request-transform-payload.js.map +1 -0
  86. package/dist/lib/codex-native/request-transform-shared.d.ts +8 -0
  87. package/dist/lib/codex-native/request-transform-shared.d.ts.map +1 -0
  88. package/dist/lib/codex-native/request-transform-shared.js +49 -0
  89. package/dist/lib/codex-native/request-transform-shared.js.map +1 -0
  90. package/dist/lib/codex-native/request-transform.d.ts +3 -122
  91. package/dist/lib/codex-native/request-transform.d.ts.map +1 -1
  92. package/dist/lib/codex-native/request-transform.js +3 -831
  93. package/dist/lib/codex-native/request-transform.js.map +1 -1
  94. package/dist/lib/codex-native/session-affinity-state.d.ts +14 -1
  95. package/dist/lib/codex-native/session-affinity-state.d.ts.map +1 -1
  96. package/dist/lib/codex-native/session-affinity-state.js +21 -8
  97. package/dist/lib/codex-native/session-affinity-state.js.map +1 -1
  98. package/dist/lib/codex-native.js.map +1 -1
  99. package/dist/lib/codex-prompts-cache.d.ts.map +1 -1
  100. package/dist/lib/codex-prompts-cache.js.map +1 -1
  101. package/dist/lib/codex-quota-fetch.d.ts.map +1 -1
  102. package/dist/lib/codex-quota-fetch.js +13 -10
  103. package/dist/lib/codex-quota-fetch.js.map +1 -1
  104. package/dist/lib/codex-status-storage.d.ts.map +1 -1
  105. package/dist/lib/codex-status-storage.js.map +1 -1
  106. package/dist/lib/codex-status.d.ts.map +1 -1
  107. package/dist/lib/codex-status.js +28 -3
  108. package/dist/lib/codex-status.js.map +1 -1
  109. package/dist/lib/config/io.d.ts +16 -0
  110. package/dist/lib/config/io.d.ts.map +1 -0
  111. package/dist/lib/config/io.js +64 -0
  112. package/dist/lib/config/io.js.map +1 -0
  113. package/dist/lib/config/parse.d.ts +21 -0
  114. package/dist/lib/config/parse.d.ts.map +1 -0
  115. package/dist/lib/config/parse.js +347 -0
  116. package/dist/lib/config/parse.js.map +1 -0
  117. package/dist/lib/config/resolve.d.ts +27 -0
  118. package/dist/lib/config/resolve.d.ts.map +1 -0
  119. package/dist/lib/config/resolve.js +152 -0
  120. package/dist/lib/config/resolve.js.map +1 -0
  121. package/dist/lib/config/types.d.ts +72 -0
  122. package/dist/lib/config/types.d.ts.map +1 -0
  123. package/dist/lib/config/types.js +151 -0
  124. package/dist/lib/config/types.js.map +1 -0
  125. package/dist/lib/config/validation.d.ts +6 -0
  126. package/dist/lib/config/validation.d.ts.map +1 -0
  127. package/dist/lib/config/validation.js +160 -0
  128. package/dist/lib/config/validation.js.map +1 -0
  129. package/dist/lib/config.d.ts +5 -111
  130. package/dist/lib/config.d.ts.map +1 -1
  131. package/dist/lib/config.js +5 -835
  132. package/dist/lib/config.js.map +1 -1
  133. package/dist/lib/fetch-orchestrator-helpers.d.ts +13 -0
  134. package/dist/lib/fetch-orchestrator-helpers.d.ts.map +1 -0
  135. package/dist/lib/fetch-orchestrator-helpers.js +63 -0
  136. package/dist/lib/fetch-orchestrator-helpers.js.map +1 -0
  137. package/dist/lib/fetch-orchestrator-types.d.ts +71 -0
  138. package/dist/lib/fetch-orchestrator-types.d.ts.map +1 -0
  139. package/dist/lib/fetch-orchestrator-types.js +11 -0
  140. package/dist/lib/fetch-orchestrator-types.js.map +1 -0
  141. package/dist/lib/fetch-orchestrator.d.ts +3 -69
  142. package/dist/lib/fetch-orchestrator.d.ts.map +1 -1
  143. package/dist/lib/fetch-orchestrator.js +78 -57
  144. package/dist/lib/fetch-orchestrator.js.map +1 -1
  145. package/dist/lib/identity.d.ts +6 -0
  146. package/dist/lib/identity.d.ts.map +1 -1
  147. package/dist/lib/identity.js +25 -4
  148. package/dist/lib/identity.js.map +1 -1
  149. package/dist/lib/model-catalog/cache-helpers.d.ts +23 -0
  150. package/dist/lib/model-catalog/cache-helpers.d.ts.map +1 -0
  151. package/dist/lib/model-catalog/cache-helpers.js +210 -0
  152. package/dist/lib/model-catalog/cache-helpers.js.map +1 -0
  153. package/dist/lib/model-catalog/catalog-fetch.d.ts +3 -0
  154. package/dist/lib/model-catalog/catalog-fetch.d.ts.map +1 -0
  155. package/dist/lib/model-catalog/catalog-fetch.js +159 -0
  156. package/dist/lib/model-catalog/catalog-fetch.js.map +1 -0
  157. package/dist/lib/model-catalog/provider.d.ts +6 -0
  158. package/dist/lib/model-catalog/provider.d.ts.map +1 -0
  159. package/dist/lib/model-catalog/provider.js +254 -0
  160. package/dist/lib/model-catalog/provider.js.map +1 -0
  161. package/dist/lib/model-catalog/shared.d.ts +95 -0
  162. package/dist/lib/model-catalog/shared.d.ts.map +1 -0
  163. package/dist/lib/model-catalog/shared.js +154 -0
  164. package/dist/lib/model-catalog/shared.js.map +1 -0
  165. package/dist/lib/model-catalog.d.ts +3 -68
  166. package/dist/lib/model-catalog.d.ts.map +1 -1
  167. package/dist/lib/model-catalog.js +3 -767
  168. package/dist/lib/model-catalog.js.map +1 -1
  169. package/dist/lib/opencode-install.d.ts.map +1 -1
  170. package/dist/lib/opencode-install.js +5 -6
  171. package/dist/lib/opencode-install.js.map +1 -1
  172. package/dist/lib/orchestrator-agent.d.ts.map +1 -1
  173. package/dist/lib/orchestrator-agent.js +2 -1
  174. package/dist/lib/orchestrator-agent.js.map +1 -1
  175. package/dist/lib/paths.d.ts.map +1 -1
  176. package/dist/lib/paths.js +8 -2
  177. package/dist/lib/paths.js.map +1 -1
  178. package/dist/lib/proactive-refresh.d.ts.map +1 -1
  179. package/dist/lib/proactive-refresh.js +48 -13
  180. package/dist/lib/proactive-refresh.js.map +1 -1
  181. package/dist/lib/quarantine.js.map +1 -1
  182. package/dist/lib/quota-threshold-alerts.d.ts.map +1 -1
  183. package/dist/lib/quota-threshold-alerts.js +3 -1
  184. package/dist/lib/quota-threshold-alerts.js.map +1 -1
  185. package/dist/lib/refresh-queue.d.ts.map +1 -1
  186. package/dist/lib/refresh-queue.js +1 -0
  187. package/dist/lib/refresh-queue.js.map +1 -1
  188. package/dist/lib/request-snapshots.d.ts.map +1 -1
  189. package/dist/lib/request-snapshots.js +46 -10
  190. package/dist/lib/request-snapshots.js.map +1 -1
  191. package/dist/lib/rotation.d.ts.map +1 -1
  192. package/dist/lib/rotation.js +3 -2
  193. package/dist/lib/rotation.js.map +1 -1
  194. package/dist/lib/session-affinity.d.ts.map +1 -1
  195. package/dist/lib/session-affinity.js +35 -20
  196. package/dist/lib/session-affinity.js.map +1 -1
  197. package/dist/lib/storage/domain-state.d.ts +23 -0
  198. package/dist/lib/storage/domain-state.d.ts.map +1 -0
  199. package/dist/lib/storage/domain-state.js +275 -0
  200. package/dist/lib/storage/domain-state.js.map +1 -0
  201. package/dist/lib/storage/migration.d.ts +13 -0
  202. package/dist/lib/storage/migration.d.ts.map +1 -0
  203. package/dist/lib/storage/migration.js +225 -0
  204. package/dist/lib/storage/migration.js.map +1 -0
  205. package/dist/lib/storage.d.ts +2 -9
  206. package/dist/lib/storage.d.ts.map +1 -1
  207. package/dist/lib/storage.js +44 -470
  208. package/dist/lib/storage.js.map +1 -1
  209. package/dist/lib/ui/auth-menu.d.ts +3 -2
  210. package/dist/lib/ui/auth-menu.d.ts.map +1 -1
  211. package/dist/lib/ui/auth-menu.js +1 -1
  212. package/dist/lib/ui/auth-menu.js.map +1 -1
  213. package/package.json +28 -15
@@ -1,832 +1,4 @@
1
- import { resolveInstructionsForModel } from "../model-catalog.js";
2
- import { sanitizeRequestPayloadForCompat } from "../compat-sanitizer.js";
3
- import { isRecord } from "../util.js";
4
- import { isOrchestratorInstructions, replaceCodexToolCallsForOpenCode } from "./collaboration.js";
5
- function asString(value) {
6
- if (typeof value !== "string")
7
- return undefined;
8
- const trimmed = value.trim();
9
- return trimmed ? trimmed : undefined;
10
- }
11
- function asStringArray(value) {
12
- if (!Array.isArray(value))
13
- return undefined;
14
- return value.filter((item) => typeof item === "string" && item.trim().length > 0);
15
- }
16
- function normalizeReasoningSummaryOption(value) {
17
- const normalized = asString(value)?.toLowerCase();
18
- if (!normalized || normalized === "none")
19
- return undefined;
20
- if (normalized === "auto" || normalized === "concise" || normalized === "detailed")
21
- return normalized;
22
- return undefined;
23
- }
24
- function normalizeTextVerbosity(value) {
25
- const normalized = asString(value)?.toLowerCase();
26
- if (!normalized)
27
- return undefined;
28
- if (normalized === "low" || normalized === "medium" || normalized === "high")
29
- return normalized;
30
- return undefined;
31
- }
32
- function normalizeVerbositySetting(value) {
33
- const normalized = asString(value)?.toLowerCase();
34
- if (!normalized)
35
- return undefined;
36
- if (normalized === "default" || normalized === "low" || normalized === "medium" || normalized === "high") {
37
- return normalized;
38
- }
39
- return undefined;
40
- }
41
- function readModelRuntimeDefaults(options) {
42
- const raw = options.codexRuntimeDefaults;
43
- if (!isRecord(raw))
44
- return {};
45
- return {
46
- applyPatchToolType: asString(raw.applyPatchToolType),
47
- defaultReasoningEffort: asString(raw.defaultReasoningEffort),
48
- supportsReasoningSummaries: typeof raw.supportsReasoningSummaries === "boolean" ? raw.supportsReasoningSummaries : undefined,
49
- reasoningSummaryFormat: asString(raw.reasoningSummaryFormat),
50
- defaultVerbosity: raw.defaultVerbosity === "low" || raw.defaultVerbosity === "medium" || raw.defaultVerbosity === "high"
51
- ? raw.defaultVerbosity
52
- : undefined,
53
- supportsVerbosity: typeof raw.supportsVerbosity === "boolean" ? raw.supportsVerbosity : undefined
54
- };
55
- }
56
- function mergeUnique(values) {
57
- const out = [];
58
- const seen = new Set();
59
- for (const value of values) {
60
- if (seen.has(value))
61
- continue;
62
- seen.add(value);
63
- out.push(value);
64
- }
65
- return out;
66
- }
67
- function normalizePersonalityKey(value) {
68
- const normalized = asString(value)?.toLowerCase();
69
- if (!normalized)
70
- return undefined;
71
- if (normalized.includes("/") || normalized.includes("\\") || normalized.includes("..")) {
72
- return undefined;
73
- }
74
- return normalized;
75
- }
76
- export function getModelLookupCandidates(model) {
77
- const out = [];
78
- const seen = new Set();
79
- const add = (value) => {
80
- const trimmed = value?.trim();
81
- if (!trimmed)
82
- return;
83
- if (seen.has(trimmed))
84
- return;
85
- seen.add(trimmed);
86
- out.push(trimmed);
87
- };
88
- add(model.id);
89
- add(model.api?.id);
90
- add(model.id?.split("/").pop());
91
- add(model.api?.id?.split("/").pop());
92
- return out;
93
- }
94
- export function getVariantLookupCandidates(input) {
95
- const out = [];
96
- const seen = new Set();
97
- const add = (value) => {
98
- const trimmed = value?.trim();
99
- if (!trimmed)
100
- return;
101
- if (seen.has(trimmed))
102
- return;
103
- seen.add(trimmed);
104
- out.push(trimmed);
105
- };
106
- if (isRecord(input.message)) {
107
- add(asString(input.message.variant));
108
- }
109
- for (const candidate of input.modelCandidates) {
110
- const slash = candidate.lastIndexOf("/");
111
- if (slash <= 0 || slash >= candidate.length - 1)
112
- continue;
113
- add(candidate.slice(slash + 1));
114
- }
115
- return out;
116
- }
117
- const EFFORT_SUFFIX_REGEX = /-(none|minimal|low|medium|high|xhigh)$/i;
118
- function stripEffortSuffix(value) {
119
- return value.replace(EFFORT_SUFFIX_REGEX, "");
120
- }
121
- export function findCatalogModelForCandidates(catalogModels, modelCandidates) {
122
- if (!catalogModels || catalogModels.length === 0)
123
- return undefined;
124
- const wanted = new Set();
125
- for (const candidate of modelCandidates) {
126
- const normalized = candidate.trim().toLowerCase();
127
- if (!normalized)
128
- continue;
129
- wanted.add(normalized);
130
- wanted.add(stripEffortSuffix(normalized));
131
- }
132
- return catalogModels.find((model) => {
133
- const slug = model.slug.trim().toLowerCase();
134
- if (!slug)
135
- return false;
136
- return wanted.has(slug) || wanted.has(stripEffortSuffix(slug));
137
- });
138
- }
139
- function resolveCaseInsensitiveEntry(entries, candidate) {
140
- if (!entries)
141
- return undefined;
142
- const direct = entries[candidate];
143
- if (direct !== undefined)
144
- return direct;
145
- const lowered = entries[candidate.toLowerCase()];
146
- if (lowered !== undefined)
147
- return lowered;
148
- const loweredCandidate = candidate.toLowerCase();
149
- for (const [name, entry] of Object.entries(entries)) {
150
- if (name.trim().toLowerCase() === loweredCandidate) {
151
- return entry;
152
- }
153
- }
154
- return undefined;
155
- }
156
- function getModelPersonalityOverride(behaviorSettings, modelCandidates, variantCandidates) {
157
- const models = behaviorSettings?.perModel;
158
- if (!models)
159
- return undefined;
160
- for (const candidate of modelCandidates) {
161
- const entry = resolveCaseInsensitiveEntry(models, candidate);
162
- if (!entry)
163
- continue;
164
- for (const variantCandidate of variantCandidates) {
165
- const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
166
- const variantPersonality = normalizePersonalityKey(variantEntry?.personality);
167
- if (variantPersonality)
168
- return variantPersonality;
169
- }
170
- const modelPersonality = normalizePersonalityKey(entry.personality);
171
- if (modelPersonality)
172
- return modelPersonality;
173
- }
174
- return undefined;
175
- }
176
- export function getModelThinkingSummariesOverride(behaviorSettings, modelCandidates, variantCandidates) {
177
- const models = behaviorSettings?.perModel;
178
- if (!models)
179
- return undefined;
180
- for (const candidate of modelCandidates) {
181
- const entry = resolveCaseInsensitiveEntry(models, candidate);
182
- if (!entry)
183
- continue;
184
- for (const variantCandidate of variantCandidates) {
185
- const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
186
- if (typeof variantEntry?.thinkingSummaries === "boolean") {
187
- return variantEntry.thinkingSummaries;
188
- }
189
- }
190
- if (typeof entry.thinkingSummaries === "boolean") {
191
- return entry.thinkingSummaries;
192
- }
193
- }
194
- return undefined;
195
- }
196
- export function getModelVerbosityEnabledOverride(behaviorSettings, modelCandidates, variantCandidates) {
197
- const models = behaviorSettings?.perModel;
198
- if (!models)
199
- return undefined;
200
- for (const candidate of modelCandidates) {
201
- const entry = resolveCaseInsensitiveEntry(models, candidate);
202
- if (!entry)
203
- continue;
204
- for (const variantCandidate of variantCandidates) {
205
- const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
206
- if (typeof variantEntry?.verbosityEnabled === "boolean") {
207
- return variantEntry.verbosityEnabled;
208
- }
209
- }
210
- if (typeof entry.verbosityEnabled === "boolean") {
211
- return entry.verbosityEnabled;
212
- }
213
- }
214
- return undefined;
215
- }
216
- export function getModelVerbosityOverride(behaviorSettings, modelCandidates, variantCandidates) {
217
- const models = behaviorSettings?.perModel;
218
- if (!models)
219
- return undefined;
220
- for (const candidate of modelCandidates) {
221
- const entry = resolveCaseInsensitiveEntry(models, candidate);
222
- if (!entry)
223
- continue;
224
- for (const variantCandidate of variantCandidates) {
225
- const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
226
- const variantVerbosity = normalizeVerbositySetting(variantEntry?.verbosity);
227
- if (variantVerbosity)
228
- return variantVerbosity;
229
- }
230
- const modelVerbosity = normalizeVerbositySetting(entry.verbosity);
231
- if (modelVerbosity)
232
- return modelVerbosity;
233
- }
234
- return undefined;
235
- }
236
- export function resolvePersonalityForModel(input) {
237
- const modelOverride = getModelPersonalityOverride(input.behaviorSettings, input.modelCandidates, input.variantCandidates);
238
- if (modelOverride)
239
- return modelOverride;
240
- const globalOverride = normalizePersonalityKey(input.behaviorSettings?.global?.personality);
241
- if (globalOverride)
242
- return globalOverride;
243
- return normalizePersonalityKey(input.fallback);
244
- }
245
- export function applyCodexRuntimeDefaultsToParams(input) {
246
- const options = input.output.options;
247
- const modelOptions = input.modelOptions;
248
- const defaults = readModelRuntimeDefaults(modelOptions);
249
- const codexInstructions = asString(modelOptions.codexInstructions);
250
- if (codexInstructions && (input.preferCodexInstructions || asString(options.instructions) === undefined)) {
251
- options.instructions = codexInstructions;
252
- }
253
- if (asString(options.reasoningEffort) === undefined && defaults.defaultReasoningEffort) {
254
- options.reasoningEffort = defaults.defaultReasoningEffort;
255
- }
256
- const reasoningEffort = asString(options.reasoningEffort);
257
- const hasReasoning = reasoningEffort !== undefined && reasoningEffort !== "none";
258
- const rawReasoningSummary = asString(options.reasoningSummary);
259
- const hadExplicitReasoningSummary = rawReasoningSummary !== undefined;
260
- const currentReasoningSummary = normalizeReasoningSummaryOption(rawReasoningSummary);
261
- if (rawReasoningSummary !== undefined) {
262
- if (currentReasoningSummary) {
263
- options.reasoningSummary = currentReasoningSummary;
264
- }
265
- else {
266
- delete options.reasoningSummary;
267
- }
268
- }
269
- if (!hadExplicitReasoningSummary && currentReasoningSummary === undefined) {
270
- if (hasReasoning && (defaults.supportsReasoningSummaries === true || input.thinkingSummariesOverride === true)) {
271
- if (input.thinkingSummariesOverride === false) {
272
- delete options.reasoningSummary;
273
- }
274
- else {
275
- if (defaults.reasoningSummaryFormat?.toLowerCase() === "none") {
276
- delete options.reasoningSummary;
277
- }
278
- else {
279
- options.reasoningSummary = defaults.reasoningSummaryFormat ?? "auto";
280
- }
281
- }
282
- }
283
- }
284
- const rawTextVerbosity = asString(options.textVerbosity);
285
- const explicitTextVerbosity = normalizeTextVerbosity(rawTextVerbosity);
286
- if (rawTextVerbosity !== undefined && !explicitTextVerbosity) {
287
- delete options.textVerbosity;
288
- }
289
- const verbosityEnabled = input.verbosityEnabledOverride ?? true;
290
- const verbositySetting = input.verbosityOverride ?? "default";
291
- const supportsVerbosity = defaults.supportsVerbosity !== false;
292
- if (!supportsVerbosity || !verbosityEnabled) {
293
- delete options.textVerbosity;
294
- }
295
- else if (normalizeTextVerbosity(options.textVerbosity) === undefined) {
296
- if (verbositySetting === "default") {
297
- if (defaults.defaultVerbosity) {
298
- options.textVerbosity = defaults.defaultVerbosity;
299
- }
300
- }
301
- else {
302
- options.textVerbosity = verbositySetting;
303
- }
304
- }
305
- if (asString(options.applyPatchToolType) === undefined && defaults.applyPatchToolType) {
306
- options.applyPatchToolType = defaults.applyPatchToolType;
307
- }
308
- if (typeof options.parallelToolCalls !== "boolean" && input.modelToolCallCapable !== undefined) {
309
- options.parallelToolCalls = input.modelToolCallCapable;
310
- }
311
- const shouldIncludeReasoning = hasReasoning &&
312
- ((asString(options.reasoningSummary) !== undefined &&
313
- asString(options.reasoningSummary)?.toLowerCase() !== "none") ||
314
- defaults.supportsReasoningSummaries === true);
315
- if (shouldIncludeReasoning) {
316
- const include = asStringArray(options.include) ?? [];
317
- options.include = mergeUnique([...include, "reasoning.encrypted_content"]);
318
- }
319
- }
320
- export async function sanitizeOutboundRequestIfNeeded(request, enabled) {
321
- const transformed = await transformOutboundRequestPayload({
322
- request,
323
- stripReasoningReplayEnabled: false,
324
- remapDeveloperMessagesToUserEnabled: false,
325
- compatInputSanitizerEnabled: enabled,
326
- promptCacheKeyOverrideEnabled: false
327
- });
328
- return {
329
- request: transformed.request,
330
- changed: transformed.compatSanitizer.changed
331
- };
332
- }
333
- function stripReasoningReplayFromPayload(payload) {
334
- if (!Array.isArray(payload.input)) {
335
- return {
336
- changed: false,
337
- reason: "missing_input_array",
338
- removedPartCount: 0,
339
- removedFieldCount: 0
340
- };
341
- }
342
- let changed = false;
343
- let removedPartCount = 0;
344
- let removedFieldCount = 0;
345
- const nextInput = [];
346
- for (const item of payload.input) {
347
- if (isReasoningReplayPart(item)) {
348
- changed = true;
349
- removedPartCount += 1;
350
- continue;
351
- }
352
- if (!isRecord(item)) {
353
- nextInput.push(item);
354
- continue;
355
- }
356
- const nextItem = { ...item };
357
- const role = asString(nextItem.role)?.toLowerCase();
358
- if (role === "assistant" && Array.isArray(nextItem.content)) {
359
- const contentOut = [];
360
- for (const entry of nextItem.content) {
361
- if (isReasoningReplayPart(entry)) {
362
- changed = true;
363
- removedPartCount += 1;
364
- continue;
365
- }
366
- const strippedEntry = stripReasoningReplayFields(entry);
367
- if (strippedEntry.removed > 0) {
368
- changed = true;
369
- removedFieldCount += strippedEntry.removed;
370
- }
371
- contentOut.push(strippedEntry.value);
372
- }
373
- nextItem.content = contentOut;
374
- }
375
- const strippedItem = stripReasoningReplayFields(nextItem);
376
- if (strippedItem.removed > 0) {
377
- changed = true;
378
- removedFieldCount += strippedItem.removed;
379
- }
380
- nextInput.push(strippedItem.value);
381
- }
382
- if (!changed) {
383
- return {
384
- changed: false,
385
- reason: "no_reasoning_replay",
386
- removedPartCount,
387
- removedFieldCount
388
- };
389
- }
390
- payload.input = nextInput;
391
- return {
392
- changed: true,
393
- reason: "updated",
394
- removedPartCount,
395
- removedFieldCount
396
- };
397
- }
398
- function remapDeveloperMessagesToUserOnPayload(payload) {
399
- if (!Array.isArray(payload.input)) {
400
- return {
401
- changed: false,
402
- reason: "missing_input_array",
403
- remappedCount: 0,
404
- preservedCount: 0
405
- };
406
- }
407
- let nextInput;
408
- let remappedCount = 0;
409
- let preservedCount = 0;
410
- let developerCount = 0;
411
- for (let index = 0; index < payload.input.length; index += 1) {
412
- const item = payload.input[index];
413
- if (!isRecord(item))
414
- continue;
415
- if (item.role !== "developer")
416
- continue;
417
- developerCount += 1;
418
- if (shouldPreserveDeveloperRole(item)) {
419
- preservedCount += 1;
420
- continue;
421
- }
422
- if (!nextInput)
423
- nextInput = payload.input.slice();
424
- nextInput[index] = {
425
- ...item,
426
- role: "user"
427
- };
428
- remappedCount += 1;
429
- }
430
- if (!nextInput) {
431
- return {
432
- changed: false,
433
- reason: developerCount === 0 ? "no_developer_messages" : "permissions_only",
434
- remappedCount,
435
- preservedCount
436
- };
437
- }
438
- payload.input = nextInput;
439
- return {
440
- changed: true,
441
- reason: "updated",
442
- remappedCount,
443
- preservedCount
444
- };
445
- }
446
- function applyPromptCacheKeyOverrideToPayload(payload, promptCacheKey) {
447
- if (!promptCacheKey) {
448
- return { changed: false, reason: "missing_key" };
449
- }
450
- const current = asString(payload.prompt_cache_key);
451
- if (current === promptCacheKey) {
452
- return { changed: false, reason: "already_matches" };
453
- }
454
- payload.prompt_cache_key = promptCacheKey;
455
- return {
456
- changed: true,
457
- reason: current ? "replaced" : "set"
458
- };
459
- }
460
- export async function transformOutboundRequestPayload(input) {
461
- const disabledReplay = {
462
- changed: false,
463
- reason: "disabled",
464
- removedPartCount: 0,
465
- removedFieldCount: 0
466
- };
467
- const disabledRoleRemap = {
468
- changed: false,
469
- reason: "disabled",
470
- remappedCount: 0,
471
- preservedCount: 0
472
- };
473
- const disabledPromptCacheKey = {
474
- changed: false,
475
- reason: "disabled"
476
- };
477
- const disabledCompatSanitizer = {
478
- changed: false,
479
- reason: "disabled"
480
- };
481
- const method = input.request.method.toUpperCase();
482
- if (method !== "POST") {
483
- return {
484
- request: input.request,
485
- changed: false,
486
- replay: input.stripReasoningReplayEnabled ? { ...disabledReplay, reason: "non_post" } : disabledReplay,
487
- developerRoleRemap: input.remapDeveloperMessagesToUserEnabled
488
- ? { ...disabledRoleRemap, reason: "non_post" }
489
- : disabledRoleRemap,
490
- promptCacheKey: input.promptCacheKeyOverrideEnabled
491
- ? { ...disabledPromptCacheKey, reason: "non_post" }
492
- : disabledPromptCacheKey,
493
- compatSanitizer: input.compatInputSanitizerEnabled
494
- ? { ...disabledCompatSanitizer, reason: "non_post" }
495
- : disabledCompatSanitizer
496
- };
497
- }
498
- let raw;
499
- try {
500
- raw = await input.request.clone().text();
501
- }
502
- catch {
503
- return {
504
- request: input.request,
505
- changed: false,
506
- replay: input.stripReasoningReplayEnabled ? { ...disabledReplay, reason: "invalid_json" } : disabledReplay,
507
- developerRoleRemap: input.remapDeveloperMessagesToUserEnabled
508
- ? { ...disabledRoleRemap, reason: "invalid_json" }
509
- : disabledRoleRemap,
510
- promptCacheKey: input.promptCacheKeyOverrideEnabled
511
- ? { ...disabledPromptCacheKey, reason: "invalid_json" }
512
- : disabledPromptCacheKey,
513
- compatSanitizer: input.compatInputSanitizerEnabled
514
- ? { ...disabledCompatSanitizer, reason: "invalid_json" }
515
- : disabledCompatSanitizer
516
- };
517
- }
518
- if (!raw) {
519
- return {
520
- request: input.request,
521
- changed: false,
522
- replay: input.stripReasoningReplayEnabled ? { ...disabledReplay, reason: "empty_body" } : disabledReplay,
523
- developerRoleRemap: input.remapDeveloperMessagesToUserEnabled
524
- ? { ...disabledRoleRemap, reason: "empty_body" }
525
- : disabledRoleRemap,
526
- promptCacheKey: input.promptCacheKeyOverrideEnabled
527
- ? { ...disabledPromptCacheKey, reason: "empty_body" }
528
- : disabledPromptCacheKey,
529
- compatSanitizer: input.compatInputSanitizerEnabled
530
- ? { ...disabledCompatSanitizer, reason: "empty_body" }
531
- : disabledCompatSanitizer
532
- };
533
- }
534
- let payload;
535
- try {
536
- payload = JSON.parse(raw);
537
- }
538
- catch {
539
- return {
540
- request: input.request,
541
- changed: false,
542
- replay: input.stripReasoningReplayEnabled ? { ...disabledReplay, reason: "invalid_json" } : disabledReplay,
543
- developerRoleRemap: input.remapDeveloperMessagesToUserEnabled
544
- ? { ...disabledRoleRemap, reason: "invalid_json" }
545
- : disabledRoleRemap,
546
- promptCacheKey: input.promptCacheKeyOverrideEnabled
547
- ? { ...disabledPromptCacheKey, reason: "invalid_json" }
548
- : disabledPromptCacheKey,
549
- compatSanitizer: input.compatInputSanitizerEnabled
550
- ? { ...disabledCompatSanitizer, reason: "invalid_json" }
551
- : disabledCompatSanitizer
552
- };
553
- }
554
- if (!isRecord(payload)) {
555
- return {
556
- request: input.request,
557
- changed: false,
558
- replay: input.stripReasoningReplayEnabled ? { ...disabledReplay, reason: "non_object_body" } : disabledReplay,
559
- developerRoleRemap: input.remapDeveloperMessagesToUserEnabled
560
- ? { ...disabledRoleRemap, reason: "non_object_body" }
561
- : disabledRoleRemap,
562
- promptCacheKey: input.promptCacheKeyOverrideEnabled
563
- ? { ...disabledPromptCacheKey, reason: "non_object_body" }
564
- : disabledPromptCacheKey,
565
- compatSanitizer: input.compatInputSanitizerEnabled
566
- ? { ...disabledCompatSanitizer, reason: "non_object_body" }
567
- : disabledCompatSanitizer
568
- };
569
- }
570
- let changed = false;
571
- const replay = input.stripReasoningReplayEnabled ? stripReasoningReplayFromPayload(payload) : disabledReplay;
572
- changed = changed || replay.changed;
573
- const developerRoleRemap = input.remapDeveloperMessagesToUserEnabled
574
- ? remapDeveloperMessagesToUserOnPayload(payload)
575
- : disabledRoleRemap;
576
- changed = changed || developerRoleRemap.changed;
577
- const promptCacheKey = input.promptCacheKeyOverrideEnabled
578
- ? applyPromptCacheKeyOverrideToPayload(payload, asString(input.promptCacheKeyOverride))
579
- : disabledPromptCacheKey;
580
- changed = changed || promptCacheKey.changed;
581
- const compatSanitizedPayload = input.compatInputSanitizerEnabled ? sanitizeRequestPayloadForCompat(payload) : null;
582
- const compatSanitizer = input.compatInputSanitizerEnabled
583
- ? {
584
- changed: compatSanitizedPayload?.changed === true,
585
- reason: compatSanitizedPayload?.changed === true ? "updated" : "already_matches"
586
- }
587
- : disabledCompatSanitizer;
588
- const finalPayload = compatSanitizedPayload?.payload ?? payload;
589
- changed = changed || compatSanitizer.changed;
590
- if (!changed) {
591
- return {
592
- request: input.request,
593
- changed: false,
594
- replay,
595
- developerRoleRemap,
596
- promptCacheKey,
597
- compatSanitizer
598
- };
599
- }
600
- return {
601
- request: rebuildRequestWithJsonBody(input.request, finalPayload),
602
- changed: true,
603
- replay,
604
- developerRoleRemap,
605
- promptCacheKey,
606
- compatSanitizer
607
- };
608
- }
609
- export async function applyPromptCacheKeyOverrideToRequest(input) {
610
- const transformed = await transformOutboundRequestPayload({
611
- request: input.request,
612
- stripReasoningReplayEnabled: false,
613
- remapDeveloperMessagesToUserEnabled: false,
614
- compatInputSanitizerEnabled: false,
615
- promptCacheKeyOverrideEnabled: input.enabled,
616
- promptCacheKeyOverride: input.promptCacheKey
617
- });
618
- return {
619
- request: transformed.request,
620
- changed: transformed.promptCacheKey.changed,
621
- reason: transformed.promptCacheKey.reason
622
- };
623
- }
624
- function rebuildRequestWithJsonBody(request, body) {
625
- const headers = new Headers(request.headers);
626
- headers.set("content-type", "application/json");
627
- return new Request(request.url, {
628
- method: request.method,
629
- headers,
630
- body: JSON.stringify(body),
631
- redirect: request.redirect,
632
- signal: request.signal,
633
- credentials: request.credentials,
634
- mode: request.mode,
635
- referrer: request.referrer,
636
- referrerPolicy: request.referrerPolicy,
637
- integrity: request.integrity,
638
- keepalive: request.keepalive
639
- });
640
- }
641
- function messageContentToText(value) {
642
- if (typeof value === "string")
643
- return value;
644
- if (!Array.isArray(value))
645
- return "";
646
- const parts = [];
647
- for (const entry of value) {
648
- if (!isRecord(entry))
649
- continue;
650
- if (typeof entry.text === "string" && entry.text.trim().length > 0) {
651
- parts.push(entry.text);
652
- }
653
- }
654
- return parts.join("\n");
655
- }
656
- function shouldPreserveDeveloperRole(item) {
657
- const text = messageContentToText(item.content).toLowerCase();
658
- if (!text)
659
- return false;
660
- return (text.includes("<permissions instructions>") ||
661
- text.includes("filesystem sandboxing defines which files can be read or written"));
662
- }
663
- export async function remapDeveloperMessagesToUserOnRequest(input) {
664
- const transformed = await transformOutboundRequestPayload({
665
- request: input.request,
666
- stripReasoningReplayEnabled: false,
667
- remapDeveloperMessagesToUserEnabled: input.enabled,
668
- compatInputSanitizerEnabled: false,
669
- promptCacheKeyOverrideEnabled: false
670
- });
671
- return {
672
- request: transformed.request,
673
- changed: transformed.developerRoleRemap.changed,
674
- reason: transformed.developerRoleRemap.reason,
675
- remappedCount: transformed.developerRoleRemap.remappedCount,
676
- preservedCount: transformed.developerRoleRemap.preservedCount
677
- };
678
- }
679
- function stripReasoningReplayFields(value) {
680
- if (Array.isArray(value)) {
681
- let removed = 0;
682
- const next = value.map((entry) => {
683
- const result = stripReasoningReplayFields(entry);
684
- removed += result.removed;
685
- return result.value;
686
- });
687
- return { value: next, removed };
688
- }
689
- if (!isRecord(value)) {
690
- return { value, removed: 0 };
691
- }
692
- let removed = 0;
693
- const out = {};
694
- for (const [key, entry] of Object.entries(value)) {
695
- if (key.toLowerCase() === "reasoning_content") {
696
- removed += 1;
697
- continue;
698
- }
699
- const result = stripReasoningReplayFields(entry);
700
- removed += result.removed;
701
- out[key] = result.value;
702
- }
703
- return { value: out, removed };
704
- }
705
- function isReasoningReplayPart(entry) {
706
- if (!isRecord(entry))
707
- return false;
708
- const type = asString(entry.type)?.toLowerCase();
709
- if (!type)
710
- return false;
711
- return type.startsWith("reasoning");
712
- }
713
- export async function stripReasoningReplayFromRequest(input) {
714
- const transformed = await transformOutboundRequestPayload({
715
- request: input.request,
716
- stripReasoningReplayEnabled: input.enabled,
717
- remapDeveloperMessagesToUserEnabled: false,
718
- compatInputSanitizerEnabled: false,
719
- promptCacheKeyOverrideEnabled: false
720
- });
721
- return {
722
- request: transformed.request,
723
- changed: transformed.replay.changed,
724
- reason: transformed.replay.reason,
725
- removedPartCount: transformed.replay.removedPartCount,
726
- removedFieldCount: transformed.replay.removedFieldCount
727
- };
728
- }
729
- function getVariantCandidatesFromBody(input) {
730
- const out = [];
731
- const seen = new Set();
732
- const add = (value) => {
733
- const trimmed = value?.trim().toLowerCase();
734
- if (!trimmed)
735
- return;
736
- if (seen.has(trimmed))
737
- return;
738
- seen.add(trimmed);
739
- out.push(trimmed);
740
- };
741
- const reasoning = isRecord(input.body.reasoning) ? input.body.reasoning : undefined;
742
- add(asString(reasoning?.effort));
743
- const normalizedSlug = input.modelSlug.trim().toLowerCase();
744
- const suffix = normalizedSlug.match(EFFORT_SUFFIX_REGEX)?.[1];
745
- add(suffix);
746
- return out;
747
- }
748
- const COLLABORATION_INSTRUCTION_MARKERS = ["# Plan Mode (Conversational)", "# Sub-agents", "# Tooling Compatibility ("];
749
- function extractCollaborationInstructionTail(instructions) {
750
- const normalized = instructions.trim();
751
- if (!normalized)
752
- return undefined;
753
- let markerIndex;
754
- for (const marker of COLLABORATION_INSTRUCTION_MARKERS) {
755
- const index = normalized.indexOf(marker);
756
- if (index < 0)
757
- continue;
758
- if (markerIndex === undefined || index < markerIndex)
759
- markerIndex = index;
760
- }
761
- if (markerIndex === undefined)
762
- return undefined;
763
- const tail = normalized.slice(markerIndex).trim();
764
- return tail.length > 0 ? tail : undefined;
765
- }
766
- export async function applyCatalogInstructionOverrideToRequest(input) {
767
- if (!input.enabled)
768
- return { request: input.request, changed: false, reason: "disabled" };
769
- const method = input.request.method.toUpperCase();
770
- if (method !== "POST")
771
- return { request: input.request, changed: false, reason: "non_post" };
772
- let payload;
773
- try {
774
- const raw = await input.request.clone().text();
775
- if (!raw)
776
- return { request: input.request, changed: false, reason: "empty_body" };
777
- payload = JSON.parse(raw);
778
- }
779
- catch (error) {
780
- if (!(error instanceof SyntaxError)) {
781
- // request body could not be parsed as JSON
782
- }
783
- return { request: input.request, changed: false, reason: "invalid_json" };
784
- }
785
- if (!isRecord(payload))
786
- return { request: input.request, changed: false, reason: "non_object_body" };
787
- const modelSlugRaw = asString(payload.model);
788
- if (!modelSlugRaw)
789
- return { request: input.request, changed: false, reason: "missing_model" };
790
- const modelCandidates = getModelLookupCandidates({
791
- id: modelSlugRaw,
792
- api: { id: modelSlugRaw }
793
- });
794
- const variantCandidates = getVariantCandidatesFromBody({
795
- body: payload,
796
- modelSlug: modelSlugRaw
797
- });
798
- const effectivePersonality = resolvePersonalityForModel({
799
- behaviorSettings: input.behaviorSettings,
800
- modelCandidates,
801
- variantCandidates,
802
- fallback: input.fallbackPersonality
803
- });
804
- const catalogModel = findCatalogModelForCandidates(input.catalogModels, modelCandidates);
805
- if (!catalogModel)
806
- return { request: input.request, changed: false, reason: "catalog_model_not_found" };
807
- const rendered = resolveInstructionsForModel(catalogModel, effectivePersonality);
808
- if (!rendered)
809
- return { request: input.request, changed: false, reason: "rendered_empty_or_unsafe" };
810
- const renderedForRequest = input.replaceCodexToolCalls === true ? (replaceCodexToolCallsForOpenCode(rendered) ?? rendered) : rendered;
811
- const currentInstructions = asString(payload.instructions);
812
- const preserveOrchestratorInstructions = input.preserveOrchestratorInstructions !== false;
813
- if (preserveOrchestratorInstructions && isOrchestratorInstructions(currentInstructions)) {
814
- return { request: input.request, changed: false, reason: "orchestrator_instructions_preserved" };
815
- }
816
- if (currentInstructions === renderedForRequest) {
817
- return { request: input.request, changed: false, reason: "already_matches" };
818
- }
819
- if (currentInstructions && currentInstructions.includes(renderedForRequest)) {
820
- return { request: input.request, changed: false, reason: "already_contains_rendered" };
821
- }
822
- const collaborationTail = currentInstructions ? extractCollaborationInstructionTail(currentInstructions) : undefined;
823
- const nextInstructionsBase = collaborationTail ? `${renderedForRequest}\n\n${collaborationTail}` : renderedForRequest;
824
- const nextInstructions = nextInstructionsBase;
825
- if (currentInstructions === nextInstructions) {
826
- return { request: input.request, changed: false, reason: "already_matches" };
827
- }
828
- payload.instructions = nextInstructions;
829
- const updatedRequest = rebuildRequestWithJsonBody(input.request, payload);
830
- return { request: updatedRequest, changed: true, reason: "updated" };
831
- }
1
+ export { applyCodexRuntimeDefaultsToParams, findCatalogModelForCandidates, getModelLookupCandidates, getModelThinkingSummariesOverride, getModelVerbosityEnabledOverride, getModelVerbosityOverride, getVariantLookupCandidates, resolvePersonalityForModel } from "./request-transform-model.js";
2
+ export { applyPromptCacheKeyOverrideToRequest, remapDeveloperMessagesToUserOnRequest, sanitizeOutboundRequestIfNeeded, stripReasoningReplayFromRequest, transformOutboundRequestPayload } from "./request-transform-payload.js";
3
+ export { applyCatalogInstructionOverrideToRequest } from "./request-transform-instructions.js";
832
4
  //# sourceMappingURL=request-transform.js.map