MCPcopy Index your code
hub / github.com/desktop/desktop / parseCopilotPaymentRequiredError

Function parseCopilotPaymentRequiredError

app/src/lib/copilot-error.ts:138–189  ·  view source on GitHub ↗
(
  responseText: string,
  retryAfter: string | null
)

Source from the content-addressed store, hash-verified

136}
137
138export function parseCopilotPaymentRequiredError(
139 responseText: string,
140 retryAfter: string | null
141): CopilotError {
142 const trimmedResponse = responseText.trim()
143 let message = trimmedResponse
144 let paymentRequiredErrorCode: CopilotPaymentRequiredErrorCode | undefined
145
146 if (trimmedResponse.length > 0) {
147 try {
148 const parsed = JSON.parse(trimmedResponse)
149 if (isRecord(parsed)) {
150 const error = parsed.error
151 const topLevelMessage = getStringProperty(parsed, 'message')
152
153 if (isRecord(error)) {
154 const errorMessage = getStringProperty(error, 'message')
155 const errorCode = getStringProperty(error, 'code')
156
157 if (errorMessage !== undefined && errorMessage.trim().length > 0) {
158 message = errorMessage
159 } else if (
160 topLevelMessage !== undefined &&
161 topLevelMessage.trim().length > 0
162 ) {
163 message = topLevelMessage
164 }
165
166 if (isPaymentRequiredErrorCode(errorCode)) {
167 paymentRequiredErrorCode = errorCode
168 }
169 } else if (
170 topLevelMessage !== undefined &&
171 topLevelMessage.trim().length > 0
172 ) {
173 message = topLevelMessage
174 }
175 }
176 } catch {
177 // Preserve the raw response body when the server doesn't return JSON.
178 }
179 }
180
181 if (message.length === 0) {
182 message = getFallbackPaymentRequiredMessage(paymentRequiredErrorCode)
183 }
184
185 return new CopilotError(message, HttpStatusCode.PaymentRequired, {
186 paymentRequiredErrorCode,
187 retryAfter: retryAfter ?? undefined,
188 })
189}
190
191function getRetryAfterMessage(retryAfter: string) {
192 if (/^\d+$/.test(retryAfter)) {

Callers 2

copilotRequestMethod · 0.90

Calls 5

getStringPropertyFunction · 0.85
isRecordFunction · 0.70
parseMethod · 0.65

Tested by

no test coverage detected