11import { random } from 'lodash-es'
2- import { FetchError , ofetch } from 'ofetch'
2+ import { FetchError , FetchResponse , ofetch } from 'ofetch'
33import { uuid } from '~utils'
44import { ChatError , ErrorCode } from '~utils/errors'
55import { ConversationResponse } from './types'
@@ -17,29 +17,38 @@ export async function createConversation(): Promise<ConversationResponse> {
1717 'x-ms-useragent' : 'azsdk-js-api-client-factory/1.0.0-beta.1 core-rest-pipeline/1.10.3 OS/macOS' ,
1818 }
1919
20- let resp : ConversationResponse
20+ let rawResponse : FetchResponse < ConversationResponse >
2121 try {
22- resp = await ofetch ( API_ENDPOINT , { headers, redirect : 'error' } )
23- if ( ! resp . result ) {
22+ rawResponse = await ofetch . raw < ConversationResponse > ( API_ENDPOINT , { headers, redirect : 'error' } )
23+ if ( ! rawResponse . _data ? .result ) {
2424 throw new Error ( 'Invalid response' )
2525 }
2626 } catch ( err ) {
2727 console . error ( 'retry bing create' , err )
28- resp = await ofetch ( API_ENDPOINT , {
28+ rawResponse = await ofetch . raw < ConversationResponse > ( API_ENDPOINT , {
2929 headers : { ...headers , 'x-forwarded-for' : randomIP ( ) } ,
3030 redirect : 'error' ,
3131 } )
32- if ( ! resp ) {
32+ if ( ! rawResponse . _data ) {
3333 throw new FetchError ( `Failed to fetch (${ API_ENDPOINT } )` )
3434 }
3535 }
3636
37- if ( resp . result . value !== 'Success' ) {
38- const message = `${ resp . result . value } : ${ resp . result . message } `
39- if ( resp . result . value === 'UnauthorizedRequest' ) {
37+ const data = rawResponse . _data
38+
39+ if ( data . result . value !== 'Success' ) {
40+ const message = `${ data . result . value } : ${ data . result . message } `
41+ if ( data . result . value === 'UnauthorizedRequest' ) {
4042 throw new ChatError ( message , ErrorCode . BING_UNAUTHORIZED )
4143 }
4244 throw new Error ( message )
4345 }
44- return resp
46+
47+ const conversationSignature = rawResponse . headers . get ( 'x-sydney-conversationsignature' ) !
48+ const encryptedConversationSignature = rawResponse . headers . get ( 'x-sydney-encryptedconversationsignature' ) || undefined
49+
50+ data . conversationSignature = data . conversationSignature || conversationSignature
51+ data . encryptedConversationSignature = encryptedConversationSignature
52+
53+ return data
4554}
0 commit comments