UNPKG

mydocsai

Version:

A production-ready, responsive AI chatbot component for React applications with streaming support, mobile optimization, and secure API key handling.

5 lines (4 loc) 11.4 kB
import"http";import{Readable as e,Writable as r}from"stream";import{finished as n}from"stream/promises";import t from"node-fetch";import{NextResponse as o}from"next/server";function a(e){var r,n,t,o=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,t=Symbol.iterator);o--;){if(n&&null!=(r=e[n]))return r.call(e);if(t&&null!=(r=e[t]))return new c(r.call(e));n="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function c(e){function r(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var r=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:r}}))}return c=function(e){this.s=e,this.n=e.next},c.prototype={s:null,n:null,next:function(){return r(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):r(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):r(n.apply(this.s,arguments))}},new c(e)}function i(e,r,n,t,o,a,c){try{var i=e[a](c),s=i.value}catch(e){return void n(e)}i.done?r(s):Promise.resolve(s).then(t,o)}function s(e){return function(){var r=this,n=arguments;return new Promise((function(t,o){var a=e.apply(r,n);function c(e){i(a,t,o,c,s,"next",e)}function s(e){i(a,t,o,c,s,"throw",e)}c(void 0)}))}}function u(e,r,n){return(r=function(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,r);if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}(r))in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function l(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function d(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?l(Object(n),!0).forEach((function(r){u(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function p(){ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e,r,n="function"==typeof Symbol?Symbol:{},t=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function a(n,t,o,a){var s=t&&t.prototype instanceof i?t:i,u=Object.create(s.prototype);return f(u,"_invoke",function(n,t,o){var a,i,s,u=0,l=o||[],d=!1,p={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(r,n){return a=r,i=0,s=e,p.n=n,c}};function f(n,t){for(i=n,s=t,r=0;!d&&u&&!o&&r<l.length;r++){var o,a=l[r],f=p.p,b=a[2];n>3?(o=b===t)&&(s=a[(i=a[4])?5:(i=3,3)],a[4]=a[5]=e):a[0]<=f&&((o=n<2&&f<a[1])?(i=0,p.v=t,p.n=a[1]):f<b&&(o=n<3||a[0]>t||t>b)&&(a[4]=n,a[5]=t,p.n=b,i=0))}if(o||n>1)return c;throw d=!0,t}return function(o,l,b){if(u>1)throw TypeError("Generator is already running");for(d&&1===l&&f(l,b),i=l,s=b;(r=i<2?e:s)||!d;){a||(i?i<3?(i>1&&(p.n=-1),f(i,s)):p.n=s:p.v=s);try{if(u=2,a){if(i||(o="next"),r=a[o]){if(!(r=r.call(a,s)))throw TypeError("iterator result is not an object");if(!r.done)return r;s=r.value,i<2&&(i=0)}else 1===i&&(r=a.return)&&r.call(a),i<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),i=1);a=e}else if((r=(d=p.n<0)?s:n.call(t,p))!==c)break}catch(r){a=e,i=1,s=r}finally{u=1}}return{value:r,done:d}}}(n,o,a),!0),u}var c={};function i(){}function s(){}function u(){}r=Object.getPrototypeOf;var l=[][t]?r(r([][t]())):(f(r={},t,(function(){return this})),r),d=u.prototype=i.prototype=Object.create(l);function b(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,f(e,o,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=u,f(d,"constructor",u),f(u,"constructor",s),s.displayName="GeneratorFunction",f(u,o,"GeneratorFunction"),f(d),f(d,o,"Generator"),f(d,t,(function(){return this})),f(d,"toString",(function(){return"[object Generator]"})),(p=function(){return{w:a,m:b}})()}function f(e,r,n,t){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}f=function(e,r,n,t){if(r)o?o(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n;else{function a(r,n){f(e,r,(function(e){return this._invoke(r,n,e)}))}a("next",0),a("throw",1),a("return",2)}},f(e,r,n,t)}var b=function(e){var r=e.docsAiApiKey,o=e.docsAiApiBaseUrl,c=void 0===o?"https://api.mydocsai.tech/sendmessage":o;return r?function(){var e=s(p().m((function e(o,i){var s,u,l,f,b,y,g,h,m,v,S,w,k,x,D,A,O,j;return p().w((function(e){for(;;)switch(e.n){case 0:console.log("SDK (backend-core): Incoming request. Method: ".concat(o.method,", URL: ").concat(o.url)),e.p=1,u=[],l=!1,f=!1,e.p=2,y=a(o);case 3:return e.n=4,y.next();case 4:if(!(l=!(g=e.v).done)){e.n=6;break}h=g.value,u.push(h);case 5:l=!1,e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,A=e.v,f=!0,b=A;case 8:if(e.p=8,e.p=9,!l||null==y.return){e.n=10;break}return e.n=10,y.return();case 10:if(e.p=10,!f){e.n=11;break}throw b;case 11:return e.f(10);case 12:return e.f(8);case 13:m=Buffer.concat(u),v=m.toString("utf8"),console.log("SDK (backend-core): Request body received (length: ".concat(m.length,")")),e.p=14,S=JSON.parse(v),e.n=16;break;case 15:return e.p=15,O=e.v,console.error("SDK (backend-core): Error parsing request body:",O),i.writeHead(400,{"Content-Type":"application/json"}),i.end(JSON.stringify({message:"Invalid JSON in request body"})),e.a(2);case 16:return delete(w=d({"Content-Type":o.headers["content-type"]||"application/json",Authorization:r},o.headers)).host,delete w.connection,delete w["content-length"],delete w["transfer-encoding"],(null===(s=o.headers.accept)||void 0===s?void 0:s.includes("text/event-stream"))&&(w.Accept="text/event-stream",console.log("SDK (backend-core): Client expects event-stream. Setting Accept header.")),console.log("SDK (backend-core): Forwarding request to DocsAI API:",c),console.log("SDK (backend-core): Forwarding headers (partial):",{"Content-Type":w["content-type"],Authorization:w.authorization?"API Key ...":"None",Accept:w.accept}),e.n=17,t(c,{method:o.method,headers:w,body:JSON.stringify(S)});case 17:if(k=e.v,console.log("SDK (backend-core): DocsAI API responded with status: ".concat(k.status)),console.log("SDK (backend-core): DocsAI API response headers (partial):",{"Content-Type":k.headers.get("content-type"),"Transfer-Encoding":k.headers.get("transfer-encoding")}),i.writeHead(k.status,Object.fromEntries(k.headers.entries())),!(x=k.headers.get("content-type"))||!x.includes("text/event-stream")){e.n=19;break}return console.log("SDK (backend-core): Streaming response from DocsAI API. Piping to client."),k.body.pipe(i),e.n=18,n(k.body);case 18:console.log("SDK (backend-core): Streaming finished."),e.n=21;break;case 19:return console.log("SDK (backend-core): Non-streaming response from DocsAI API. Sending as JSON/text."),e.n=20,k.buffer();case 20:D=e.v,i.end(D);case 21:e.n=23;break;case 22:e.p=22,j=e.v,console.error("SDK (backend-core): Error during proxy operation:",j),i.headersSent||i.writeHead(500,{"Content-Type":"application/json"}),i.end(JSON.stringify({message:"Internal proxy error",error:j.message}));case 23:return e.a(2)}}),e,null,[[14,15],[9,,10,12],[2,7,8,13],[1,22]])})));return function(r,n){return e.apply(this,arguments)}}():(console.error("DocsAI SDK Error (backend-core): 'docsAiApiKey' is required but was not provided to createDocsAiProxy."),function(){var e=s(p().m((function e(r,n){return p().w((function(e){for(;;)switch(e.n){case 0:n.writeHead(500,{"Content-Type":"application/json"}),n.end(JSON.stringify({message:"Server configuration error: DocsAI API key not found in SDK setup."}));case 1:return e.a(2)}}),e)})));return function(r,n){return e.apply(this,arguments)}}())},y=function(n){var t=n.docsAiApiKey,a=n.docsAiApiBaseUrl,c=void 0===a?"https://api.mydocsai.tech/sendmessage":a;if(console.log("SDK (backend-next): createNextDocsAiProxy called during initialization."),!t)return console.error("SDK Error (backend-next): 'docsAiApiKey' is required but was not provided to createNextDocsAiProxy during initialization."),function(){var e=s(p().m((function e(r){return p().w((function(e){for(;;)if(0===e.n)return console.error("SDK (backend-next): Returning 500 status due to missing API key for request to",r.url),e.a(2,o.json({message:"Server configuration error: DocsAI API key not found in SDK setup."},{status:500}))}),e)})));return function(r){return e.apply(this,arguments)}}();var i=b({docsAiApiKey:t,docsAiApiBaseUrl:c});return console.log("SDK (backend-next): Core docsAiProxyHandler created successfully."),function(){var n=s(p().m((function n(t){var a,c,s,u,l,f,b,y,g,h,m,v,S,w,k,x;return p().w((function(n){for(;;)switch(n.n){case 0:return console.log("SDK (backend-next): Incoming request to Next.js proxy handler. Method: ".concat(t.method,", URL: ").concat(t.url)),n.p=1,n.n=2,t.arrayBuffer();case 2:return a=n.v,c=new e({read:function(){this.push(Buffer.from(a)),this.push(null)}}),Object.assign(c,{method:t.method,headers:Object.fromEntries(t.headers.entries()),url:t.nextUrl.pathname}),console.log("SDK (backend-next): Mock Node.js Request created for core proxy."),s=200,u={},l=[],f=!1,b=null,y=null,h=new Promise((function(e){g=e})),m=new r({write:function(e,r,n){f&&y?y.enqueue(e):l.push(e),n()},final:function(e){f&&y&&y.close(),e()}}),Object.assign(m,{statusCode:200,setHeader:function(e,r){u[e.toLowerCase()]=r},writeHead:function(e,r){var n;s=e,null!==(n=(u=d(d({},u),r))["content-type"])&&void 0!==n&&n.includes("text/event-stream")&&(f=!0,console.log("SDK (backend-next): Detected streaming response in writeHead. Initializing Web ReadableStream."),b=new ReadableStream({start:function(e){y=e},cancel:function(){console.log("SDK (backend-next): Web ReadableStream cancelled.")}})),g()}}),v=i(c,m),n.n=3,h;case 3:if(console.log("SDK (backend-next): writeHead was called. isStreamingResponse:",f),!f||!b){n.n=4;break}return console.log("SDK (backend-next): Returning NextResponse with Web ReadableStream for streaming."),n.a(2,new o(b,{status:s,headers:u}));case 4:return console.log("SDK (backend-next): Not a streaming response. Awaiting full proxy operation."),n.n=5,v;case 5:return console.log("SDK (backend-next): Full proxy operation completed for non-streaming."),S=Buffer.concat(l).toString("utf8"),n.p=6,w=JSON.parse(S),n.a(2,o.json(w,{status:s,headers:u}));case 7:return n.p=7,k=n.v,console.error("SDK (backend-next): Failed to parse responseBody as JSON. Returning as text."),console.error("SDK (backend-next): JSON parsing error:",k),console.error("SDK (backend-next): Problematic responseBody (full):",S),n.a(2,new o(S,{status:s,headers:u}));case 8:n.n=10;break;case 9:return n.p=9,x=n.v,console.error("SDK (backend-next): Uncaught error in createNextDocsAiProxy handler's try-catch block:",x),n.a(2,o.json({message:"Internal server error in DocsAI proxy.",error:x.message},{status:500}));case 10:return n.a(2)}}),n,null,[[6,7],[1,9]])})));return function(e){return n.apply(this,arguments)}}()};export{b as createDocsAiProxy,y as createNextDocsAiProxy}; //# sourceMappingURL=backend.esm.js.map