spiceflow 1.4.0 → 1.5.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.
- package/README.md +1 -0
- package/dist/client/errors.js +4 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +73 -51
- package/dist/client/index.js.map +1 -1
- package/dist/client.test.js +32 -73
- package/dist/client.test.js.map +1 -1
- package/dist/context.d.ts +0 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +9 -6
- package/dist/cors.js.map +1 -1
- package/dist/error.js +8 -18
- package/dist/error.js.map +1 -1
- package/dist/mcp-transport.js +12 -8
- package/dist/mcp-transport.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +10 -12
- package/dist/mcp.js.map +1 -1
- package/dist/mcp.test.js +5 -12
- package/dist/mcp.test.js.map +1 -1
- package/dist/middleware.test.js +2 -2
- package/dist/middleware.test.js.map +1 -1
- package/dist/openapi.js +117 -77
- package/dist/openapi.js.map +1 -1
- package/dist/openapi.test.js +98 -27
- package/dist/openapi.test.js.map +1 -1
- package/dist/spiceflow.d.ts +1 -2
- package/dist/spiceflow.d.ts.map +1 -1
- package/dist/spiceflow.js +99 -104
- package/dist/spiceflow.js.map +1 -1
- package/dist/spiceflow.test.js +127 -62
- package/dist/spiceflow.test.js.map +1 -1
- package/dist/static-node.js +6 -3
- package/dist/static-node.js.map +1 -1
- package/dist/static.js +3 -5
- package/dist/static.js.map +1 -1
- package/dist/stream.test.js +45 -66
- package/dist/stream.test.js.map +1 -1
- package/dist/types.test.js +10 -45
- package/dist/types.test.js.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/zod.test.js +2 -2
- package/dist/zod.test.js.map +1 -1
- package/package.json +10 -2
- package/src/client/index.ts +29 -7
- package/src/client.test.ts +20 -14
- package/src/context.ts +1 -1
- package/src/cors.ts +1 -0
- package/src/mcp.test.ts +5 -12
- package/src/mcp.ts +1 -0
- package/src/middleware.test.ts +1 -1
- package/src/openapi.test.ts +88 -0
- package/src/spiceflow.test.ts +120 -2
- package/src/spiceflow.ts +33 -11
- package/src/stream.test.ts +10 -2
- package/src/zod.test.ts +2 -3
package/dist/stream.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../src/stream.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../src/stream.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,SAAS,eAAe,CAAC,KAAe;IACtC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;SAClE,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YAClD,MAAM,GAAG,CAAA;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,GAAG,CAAA;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,GAAG,CAAA;QACX,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG;aACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAChB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,CAAC;gBAAE,OAAM;YAEd,MAAM,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA;YAE7B,IAAI,GAAG,GAAG,EAAE,CAAA;YACZ,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;YAEpD,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC9C,IAAI,IAAI;oBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;gBAE7B,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CACrD,QAAQ,CAAC,KAAK,EAAG,CAClB,CAAA;gBAED,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;gBACvB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;QAEJ,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YAClD,MAAM,GAAG,CAAA;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CACpC;;;;;;;;KAQD,CACA,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;aACxB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACrB,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;aACxB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACrB,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAA;QACjC,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;aACxB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACd,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC,CAAC;aACD,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEJ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAE3B,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YAClD,MAAM,GAAG,CAAA;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,GAAG,CAAA;YACT,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,GAAG,CAAA;QACX,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QAExC,UAAU,CAAC,GAAG,EAAE;YACd,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,QAAQ,GAAG,MAAM,GAAG;aACvB,MAAM,CACL,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CACH;aACA,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,CAAC;gBAAE,OAAM;YAEd,MAAM,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA;YAE7B,IAAI,GAAG,GAAG,EAAE,CAAA;YACZ,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;YAEpD,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC9C,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;gBACrB,CAAC;gBAED,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CACrD,QAAQ,CAAC,KAAK,EAAG,CAClB,CAAA;gBAED,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;gBACvB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;QAEJ,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,wDAAwD;IACxD,oCAAoC;IAEpC,uDAAuD;IACvD,uEAAuE;IAEvE,cAAc;IACd,cAAc;IACd,cAAc;IACd,MAAM;IAEN,sEAAsE;IAEtE,6DAA6D;IAC7D,0BAA0B;IAC1B,KAAK;IACL,KAAK;IACL,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,OAAO,GAAG;YACd,EAAE,OAAO,EAAE,OAAO,EAAE;YACpB,EAAE,QAAQ,EAAE,OAAO,EAAE;YACrB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YACnB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;SACtB,CAAA;QACD,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC,EAAE,EAAE;YACtD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAE3D,IAAI,MAAM,GAAG,EAAW,CAAA;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;SACF,CAAC,CAAA;QACF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,EAAE,SAAS,EAAG,CAAA;QAEjC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;YAC9C,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,OAAO,EAAE,CAAA;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QACF,MAAM,OAAO,CAAA;QAEb,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACvC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACtC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,wDAAwD;IACxD,oCAAoC;IAEpC,uDAAuD;IACvD,uEAAuE;IAEvE,cAAc;IACd,cAAc;IACd,cAAc;IACd,MAAM;IAEN,sEAAsE;IAEtE,6DAA6D;IAC7D,0BAA0B;IAC1B,KAAK;IACL,KAAK;IAEL,8DAA8D;IAC9D,oCAAoC;IAEpC,6DAA6D;IAC7D,uEAAuE;IAEvE,cAAc;IACd,cAAc;IACd,cAAc;IACd,MAAM;IAEN,sEAAsE;IAEtE,6DAA6D;IAC7D,0BAA0B;IAC1B,KAAK;IACL,KAAK;IAEL,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;aACxB,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;YACjB,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC;aACD,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;YACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACzB,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE,OAAO;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE;aACxB,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;YACjB,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC;aACD,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;YACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEJ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACzB,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE,OAAO;SACf,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;QACtD,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,SAAS,CAAC;YAClD,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;YACjB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;YACjB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAA;YAEf,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG;aACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAChB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,CAAC;gBAAE,OAAM;YAEd,MAAM,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA;YAE7B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAA;YAE1D,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;gBAC9C,IAAI,IAAI;oBAAE,OAAO,OAAO,EAAE,CAAA;gBAE1B,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CACxD,QAAQ,CAAC,CAAC,EAAE,CAAC,CACd,CAAA;gBAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/types.test.js
CHANGED
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
2
|
-
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
3
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4
|
-
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
5
|
-
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
6
|
-
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
7
|
-
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
8
|
-
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
9
|
-
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
10
|
-
function fulfill(value) { resume("next", value); }
|
|
11
|
-
function reject(value) { resume("throw", value); }
|
|
12
|
-
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
13
|
-
};
|
|
14
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
15
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
16
|
-
var m = o[Symbol.asyncIterator], i;
|
|
17
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
18
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
19
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
20
|
-
};
|
|
21
1
|
import { test, expect } from 'vitest';
|
|
22
2
|
import { Spiceflow } from './spiceflow.js';
|
|
23
3
|
import { createSpiceflowClient } from './client/index.js';
|
|
@@ -49,37 +29,22 @@ test('`use` on Spiceflow return', async () => {
|
|
|
49
29
|
expect(await res.json()).toEqual('hi');
|
|
50
30
|
});
|
|
51
31
|
test('async generator type with client', async () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
yield yield __await({ message: 'Hello' });
|
|
56
|
-
yield yield __await({ message: 'World' });
|
|
57
|
-
});
|
|
32
|
+
const app = new Spiceflow().get('/stream', async function* () {
|
|
33
|
+
yield { message: 'Hello' };
|
|
34
|
+
yield { message: 'World' };
|
|
58
35
|
});
|
|
59
36
|
const client = createSpiceflowClient(app);
|
|
60
37
|
const streamResponse = await client.stream.get();
|
|
61
38
|
if (streamResponse.error) {
|
|
62
39
|
throw streamResponse.error;
|
|
63
40
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
item.something;
|
|
72
|
-
item.message;
|
|
73
|
-
expect(item).toHaveProperty('message');
|
|
74
|
-
expect(typeof item.message).toBe('string');
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
78
|
-
finally {
|
|
79
|
-
try {
|
|
80
|
-
if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
|
|
81
|
-
}
|
|
82
|
-
finally { if (e_1) throw e_1.error; }
|
|
41
|
+
// Type check: each yielded item should have the 'message' property
|
|
42
|
+
for await (const item of streamResponse.data) {
|
|
43
|
+
// @ts-expect-error
|
|
44
|
+
item.something;
|
|
45
|
+
item.message;
|
|
46
|
+
expect(item).toHaveProperty('message');
|
|
47
|
+
expect(typeof item.message).toBe('string');
|
|
83
48
|
}
|
|
84
49
|
});
|
|
85
50
|
//# sourceMappingURL=types.test.js.map
|
package/dist/types.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,UAAW,GAAG,QAOpC,CAAA;AAED,eAAO,MAAM,GAAG,SAAU,MAAM,YAAY,WAAW,YACN,CAAA;AAEjD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAQpE;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DZ,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAEzB,GACF,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,UAAW,GAAG,QAOpC,CAAA;AAED,eAAO,MAAM,GAAG,SAAU,MAAM,YAAY,WAAW,YACN,CAAA;AAEjD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAQpE;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DZ,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAEzB,GACF,CAAC,IAAI,MAAM,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAC1C,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAA;AACxC,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAA;AAExD;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QACd,MAAM,WACH,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,aACF,CAAA;AAEnC,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAA;AAEtC,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,QAAQ,CAoB1D"}
|
package/dist/zod.test.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
2
3
|
import { Spiceflow } from './spiceflow.js';
|
|
3
4
|
import { req } from './utils.js';
|
|
4
|
-
import { z } from 'zod';
|
|
5
5
|
test('body is parsed as json', async () => {
|
|
6
6
|
let name = '';
|
|
7
7
|
const res = await new Spiceflow()
|
package/dist/zod.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.test.js","sourceRoot":"","sources":["../src/zod.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"zod.test.js","sourceRoot":"","sources":["../src/zod.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;IACxC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,EAAE;SAC9B,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;SAEf,IAAI,CACH,OAAO,EACP,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACnC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAChB,mBAAmB;QACnB,IAAI,CAAC,gBAAgB,CAAA;QACrB,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,UAAU;SACX,CAAA;IACH,CAAC,EACD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,CAAC;KACH,CACF;SACA,IAAI,CACH,QAAQ,EACR,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACnC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAChB,mBAAmB;QACnB,IAAI,CAAC,gBAAgB,CAAA;QACrB,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAA;IACH,CAAC,EACD;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;QACF,QAAQ,EAAE;YACR,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;gBACZ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;gBAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACrB,CAAC;YACF,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;gBACZ,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;aACzB,CAAC;SACH;KACF,CACF;SACA,MAAM,CACL,GAAG,CAAC,OAAO,EAAE;QACX,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACvC,CAAC,CACH,CAAA;IACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;AACtE,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spiceflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Simple API framework with RPC and type safety",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -41,15 +41,23 @@
|
|
|
41
41
|
"license": "",
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@medley/router": "^0.2.1",
|
|
44
|
-
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
45
44
|
"@sinclair/typebox": "^0.33.7",
|
|
46
45
|
"ajv": "^8.17.1",
|
|
47
46
|
"ajv-formats": "^3.0.1",
|
|
48
47
|
"eventsource-parser": "^3.0.0",
|
|
49
48
|
"openapi-types": "^12.1.3",
|
|
49
|
+
"superjson": "^2.2.2",
|
|
50
50
|
"zod": "^3.24.1",
|
|
51
51
|
"zod-to-json-schema": "^3.24.1"
|
|
52
52
|
},
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
55
|
+
},
|
|
56
|
+
"peerDependenciesMeta": {
|
|
57
|
+
"@modelcontextprotocol/sdk": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
53
61
|
"devDependencies": {
|
|
54
62
|
"@types/node": "22.7.4",
|
|
55
63
|
"eventsource": "^3.0.2",
|
package/src/client/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/* eslint-disable no-case-declarations */
|
|
3
3
|
/* eslint-disable prefer-const */
|
|
4
4
|
import type { Spiceflow } from '../spiceflow.js'
|
|
5
|
+
import superjson from 'superjson'
|
|
5
6
|
import { EventSourceParserStream } from 'eventsource-parser/stream'
|
|
6
7
|
|
|
7
8
|
import type { SpiceflowClient } from './types.js'
|
|
@@ -161,17 +162,17 @@ export async function* streamSSEResponse(
|
|
|
161
162
|
const { done, value: event } = await reader.read()
|
|
162
163
|
if (done) break
|
|
163
164
|
if (event?.event === 'error') {
|
|
164
|
-
throw new SpiceflowFetchError(500, event.data)
|
|
165
|
+
throw new SpiceflowFetchError(500, superjsonDeserialize(event.data))
|
|
165
166
|
}
|
|
166
167
|
if (event) {
|
|
167
|
-
yield
|
|
168
|
+
yield tryParsingSSEJson(event.data)
|
|
168
169
|
}
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
|
|
172
|
-
function
|
|
173
|
+
function tryParsingSSEJson(data: string): any {
|
|
173
174
|
try {
|
|
174
|
-
return JSON.parse(data)
|
|
175
|
+
return superjsonDeserialize(JSON.parse(data))
|
|
175
176
|
} catch (error) {
|
|
176
177
|
return null
|
|
177
178
|
}
|
|
@@ -185,6 +186,10 @@ const createProxy = (
|
|
|
185
186
|
): any =>
|
|
186
187
|
new Proxy(() => {}, {
|
|
187
188
|
get(_, param: string): any {
|
|
189
|
+
// handle case where createClient returns a promise and await calls .then on it
|
|
190
|
+
if ((!paths.length && param === 'then') || param === 'catch') {
|
|
191
|
+
return _[param]
|
|
192
|
+
}
|
|
188
193
|
return createProxy(
|
|
189
194
|
domain,
|
|
190
195
|
config,
|
|
@@ -237,7 +242,7 @@ const createProxy = (
|
|
|
237
242
|
}
|
|
238
243
|
}
|
|
239
244
|
|
|
240
|
-
return (async () => {
|
|
245
|
+
return Promise.resolve().then(async () => {
|
|
241
246
|
let fetchInit = {
|
|
242
247
|
method: method?.toUpperCase(),
|
|
243
248
|
body,
|
|
@@ -365,6 +370,7 @@ const createProxy = (
|
|
|
365
370
|
}
|
|
366
371
|
|
|
367
372
|
const url = domain + path + q
|
|
373
|
+
// console.log({ url, fetchInit })
|
|
368
374
|
const response = await (instance?.handle(
|
|
369
375
|
new Request(url, fetchInit),
|
|
370
376
|
) ?? fetcher!(url, fetchInit))
|
|
@@ -402,6 +408,7 @@ const createProxy = (
|
|
|
402
408
|
|
|
403
409
|
case 'application/json':
|
|
404
410
|
data = await response.json()
|
|
411
|
+
data = superjsonDeserialize(data)
|
|
405
412
|
break
|
|
406
413
|
case 'application/octet-stream':
|
|
407
414
|
data = await response.arrayBuffer()
|
|
@@ -423,7 +430,11 @@ const createProxy = (
|
|
|
423
430
|
}
|
|
424
431
|
|
|
425
432
|
if (response.status >= 300 || response.status < 200) {
|
|
426
|
-
error = new SpiceflowFetchError(
|
|
433
|
+
error = new SpiceflowFetchError(
|
|
434
|
+
response.status,
|
|
435
|
+
data || 'Unknown error',
|
|
436
|
+
)
|
|
437
|
+
// console.trace({ error, data })
|
|
427
438
|
data = null
|
|
428
439
|
}
|
|
429
440
|
|
|
@@ -434,7 +445,7 @@ const createProxy = (
|
|
|
434
445
|
status: response.status,
|
|
435
446
|
headers: response.headers,
|
|
436
447
|
}
|
|
437
|
-
})
|
|
448
|
+
})
|
|
438
449
|
}
|
|
439
450
|
|
|
440
451
|
if (typeof body === 'object')
|
|
@@ -468,3 +479,14 @@ export const createSpiceflowClient = <
|
|
|
468
479
|
|
|
469
480
|
return createProxy('http://e.ly', config, [], domain)
|
|
470
481
|
}
|
|
482
|
+
|
|
483
|
+
function superjsonDeserialize(data: any) {
|
|
484
|
+
if (data?.__superjsonMeta) {
|
|
485
|
+
const { __superjsonMeta, ...rest } = data
|
|
486
|
+
return superjson.deserialize({
|
|
487
|
+
json: rest,
|
|
488
|
+
meta: __superjsonMeta,
|
|
489
|
+
})
|
|
490
|
+
}
|
|
491
|
+
return data
|
|
492
|
+
}
|
package/src/client.test.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
import { createSpiceflowClient } from './client/index.js'
|
|
3
|
-
import { Spiceflow
|
|
3
|
+
import { Spiceflow } from './spiceflow.js'
|
|
4
|
+
import { Type as t } from '@sinclair/typebox'
|
|
4
5
|
|
|
5
6
|
import { describe, expect, it } from 'vitest'
|
|
6
|
-
|
|
7
7
|
const app = new Spiceflow()
|
|
8
8
|
.get('/', () => 'a')
|
|
9
9
|
.post('/', () => 'a')
|
|
@@ -11,11 +11,11 @@ const app = new Spiceflow()
|
|
|
11
11
|
.get('/true', () => true)
|
|
12
12
|
.get('/false', () => false)
|
|
13
13
|
.post('/array', async ({ request }) => await request.json(), {
|
|
14
|
-
body:
|
|
14
|
+
body: z.array(z.string()),
|
|
15
15
|
})
|
|
16
16
|
.post('/mirror', async ({ request }) => await request.json())
|
|
17
17
|
.post('/body', async ({ request }) => await request.text(), {
|
|
18
|
-
body:
|
|
18
|
+
body: z.string(),
|
|
19
19
|
})
|
|
20
20
|
.post('/zodAny', async ({ request }) => await request.json(), {
|
|
21
21
|
body: z.object({ body: z.array(z.any()) }),
|
|
@@ -25,9 +25,9 @@ const app = new Spiceflow()
|
|
|
25
25
|
return { body: body || null }
|
|
26
26
|
})
|
|
27
27
|
.post('/deep/nested/mirror', async ({ request }) => await request.json(), {
|
|
28
|
-
body:
|
|
29
|
-
username:
|
|
30
|
-
password:
|
|
28
|
+
body: z.object({
|
|
29
|
+
username: z.string(),
|
|
30
|
+
password: z.string(),
|
|
31
31
|
}),
|
|
32
32
|
})
|
|
33
33
|
.get('/throws', () => {
|
|
@@ -62,8 +62,8 @@ const app = new Spiceflow()
|
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
response: {
|
|
65
|
-
200:
|
|
66
|
-
x:
|
|
65
|
+
200: z.object({
|
|
66
|
+
x: z.string(),
|
|
67
67
|
}),
|
|
68
68
|
},
|
|
69
69
|
},
|
|
@@ -78,8 +78,8 @@ const app = new Spiceflow()
|
|
|
78
78
|
.get('/dateObject', () => ({ date: new Date() }))
|
|
79
79
|
.get('/redirect', ({ redirect }) => redirect('http://localhost:8083/true'))
|
|
80
80
|
.post('/redirect', ({ redirect }) => redirect('http://localhost:8083/true'), {
|
|
81
|
-
body:
|
|
82
|
-
username:
|
|
81
|
+
body: z.object({
|
|
82
|
+
username: z.string(),
|
|
83
83
|
}),
|
|
84
84
|
})
|
|
85
85
|
// .get('/formdata', () => ({
|
|
@@ -210,9 +210,7 @@ describe('client', () => {
|
|
|
210
210
|
expect(data).toMatchInlineSnapshot(
|
|
211
211
|
`"this string will not be parsed as json"`,
|
|
212
212
|
)
|
|
213
|
-
expect(error).toMatchInlineSnapshot(
|
|
214
|
-
`null`,
|
|
215
|
-
)
|
|
213
|
+
expect(error).toMatchInlineSnapshot(`null`)
|
|
216
214
|
})
|
|
217
215
|
|
|
218
216
|
it('stream ', async () => {
|
|
@@ -271,3 +269,11 @@ describe('client', () => {
|
|
|
271
269
|
// expect(value).toEqual('Kirifuji Nagisa')
|
|
272
270
|
// })
|
|
273
271
|
})
|
|
272
|
+
|
|
273
|
+
describe('client as promise', () => {
|
|
274
|
+
it('should work with async client', async () => {
|
|
275
|
+
const asyncClient = Promise.resolve(client)
|
|
276
|
+
const { data } = await (await asyncClient).mirror.post({ test: 'value' })
|
|
277
|
+
expect(data).toEqual({ test: 'value' })
|
|
278
|
+
}, 200)
|
|
279
|
+
})
|
package/src/context.ts
CHANGED
package/src/cors.ts
CHANGED
package/src/mcp.test.ts
CHANGED
|
@@ -195,12 +195,12 @@ describe('MCP Plugin', () => {
|
|
|
195
195
|
{
|
|
196
196
|
"mimeType": "application/json",
|
|
197
197
|
"name": "GET /goSomething",
|
|
198
|
-
"uri": "http://localhost:
|
|
198
|
+
"uri": "http://localhost:4000/goSomething",
|
|
199
199
|
},
|
|
200
200
|
{
|
|
201
201
|
"mimeType": "application/json",
|
|
202
202
|
"name": "GET /users",
|
|
203
|
-
"uri": "http://localhost:
|
|
203
|
+
"uri": "http://localhost:4000/users",
|
|
204
204
|
},
|
|
205
205
|
]
|
|
206
206
|
`)
|
|
@@ -220,22 +220,15 @@ describe('MCP Plugin', () => {
|
|
|
220
220
|
[
|
|
221
221
|
{
|
|
222
222
|
"mimeType": "application/json",
|
|
223
|
-
"text": "{
|
|
224
|
-
|
|
225
|
-
{
|
|
226
|
-
"id": 1,
|
|
227
|
-
"name": "John"
|
|
228
|
-
}
|
|
229
|
-
]
|
|
230
|
-
}",
|
|
231
|
-
"uri": "http://localhost:3000/users",
|
|
223
|
+
"text": "{"users":[{"id":1,"name":"John"}]}",
|
|
224
|
+
"uri": "http://localhost:4000/users",
|
|
232
225
|
},
|
|
233
226
|
]
|
|
234
227
|
`)
|
|
235
228
|
})
|
|
236
229
|
})
|
|
237
230
|
|
|
238
|
-
async function getAvailablePort(startPort =
|
|
231
|
+
async function getAvailablePort(startPort = 4000, maxRetries = 10) {
|
|
239
232
|
const net = await import('net')
|
|
240
233
|
|
|
241
234
|
return await new Promise<number>((resolve, reject) => {
|
package/src/mcp.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import { zodToJsonSchema } from 'zod-to-json-schema'
|
|
10
10
|
import { SSEServerTransportSpiceflow } from './mcp-transport.js'
|
|
11
11
|
import { isZodSchema, Spiceflow } from './spiceflow.js'
|
|
12
|
+
import { OpenAPIV3 } from 'openapi-types'
|
|
12
13
|
|
|
13
14
|
function getJsonSchema(schema: any) {
|
|
14
15
|
if (!schema) return undefined
|
package/src/middleware.test.ts
CHANGED
|
@@ -358,7 +358,7 @@ test('each middleware and route is called exactly once if an error is thrown', a
|
|
|
358
358
|
const res = await app.handle(new Request('http://localhost/test'))
|
|
359
359
|
|
|
360
360
|
expect(res.status).toBe(500)
|
|
361
|
-
expect(await res.text()).
|
|
361
|
+
expect(await res.text()).toMatchInlineSnapshot(`"{"message":"Route response"}"`)
|
|
362
362
|
expect(callOrder).toEqual(['middleware1', 'middleware2', 'middleware3', 'route'])
|
|
363
363
|
|
|
364
364
|
// Check that each middleware and route is called exactly once
|
package/src/openapi.test.ts
CHANGED
|
@@ -159,6 +159,73 @@ test('openapi response', async () => {
|
|
|
159
159
|
.then((x) => x.json())
|
|
160
160
|
expect(openapiSchema).toMatchInlineSnapshot(`
|
|
161
161
|
{
|
|
162
|
+
"__superjsonMeta": {
|
|
163
|
+
"values": {
|
|
164
|
+
"paths./addBody.patch.responses.200.content.application/json.schema.items": [
|
|
165
|
+
"undefined",
|
|
166
|
+
],
|
|
167
|
+
"paths./addBody.patch.responses.200.content.application/json.schema.patternProperties": [
|
|
168
|
+
"undefined",
|
|
169
|
+
],
|
|
170
|
+
"paths./addBody.patch.responses.200.content.application/json.schema.required": [
|
|
171
|
+
"undefined",
|
|
172
|
+
],
|
|
173
|
+
"paths./formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.items": [
|
|
174
|
+
"undefined",
|
|
175
|
+
],
|
|
176
|
+
"paths./formWithSchemaForm.post.responses.200.content.multipart/form-data.schema.patternProperties": [
|
|
177
|
+
"undefined",
|
|
178
|
+
],
|
|
179
|
+
"paths./one/ids/{id}.get.parameters.0.description": [
|
|
180
|
+
"undefined",
|
|
181
|
+
],
|
|
182
|
+
"paths./one/ids/{id}.get.parameters.0.examples": [
|
|
183
|
+
"undefined",
|
|
184
|
+
],
|
|
185
|
+
"paths./one/ids/{id}.get.responses.404.content.application/json.schema.items": [
|
|
186
|
+
"undefined",
|
|
187
|
+
],
|
|
188
|
+
"paths./one/ids/{id}.get.responses.404.content.application/json.schema.patternProperties": [
|
|
189
|
+
"undefined",
|
|
190
|
+
],
|
|
191
|
+
"paths./queryParams.get.parameters.0.description": [
|
|
192
|
+
"undefined",
|
|
193
|
+
],
|
|
194
|
+
"paths./queryParams.get.parameters.0.examples": [
|
|
195
|
+
"undefined",
|
|
196
|
+
],
|
|
197
|
+
"paths./queryParams.get.responses.200.content.application/json.schema.items": [
|
|
198
|
+
"undefined",
|
|
199
|
+
],
|
|
200
|
+
"paths./queryParams.get.responses.200.content.application/json.schema.patternProperties": [
|
|
201
|
+
"undefined",
|
|
202
|
+
],
|
|
203
|
+
"paths./queryParams.get.responses.200.content.application/json.schema.required": [
|
|
204
|
+
"undefined",
|
|
205
|
+
],
|
|
206
|
+
"paths./queryParams.post.responses.200.content.application/json.schema.items": [
|
|
207
|
+
"undefined",
|
|
208
|
+
],
|
|
209
|
+
"paths./queryParams.post.responses.200.content.application/json.schema.patternProperties": [
|
|
210
|
+
"undefined",
|
|
211
|
+
],
|
|
212
|
+
"paths./queryParams.post.responses.200.content.application/json.schema.required": [
|
|
213
|
+
"undefined",
|
|
214
|
+
],
|
|
215
|
+
"paths./streamWithSchema.get.responses.200.content.application/json.schema.items": [
|
|
216
|
+
"undefined",
|
|
217
|
+
],
|
|
218
|
+
"paths./streamWithSchema.get.responses.200.content.application/json.schema.patternProperties": [
|
|
219
|
+
"undefined",
|
|
220
|
+
],
|
|
221
|
+
"paths./two/ids/{id}.get.parameters.0.description": [
|
|
222
|
+
"undefined",
|
|
223
|
+
],
|
|
224
|
+
"paths./two/ids/{id}.get.parameters.0.examples": [
|
|
225
|
+
"undefined",
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
162
229
|
"components": {
|
|
163
230
|
"schemas": {},
|
|
164
231
|
},
|
|
@@ -196,11 +263,14 @@ test('openapi response', async () => {
|
|
|
196
263
|
"content": {
|
|
197
264
|
"application/json": {
|
|
198
265
|
"schema": {
|
|
266
|
+
"items": null,
|
|
267
|
+
"patternProperties": null,
|
|
199
268
|
"properties": {
|
|
200
269
|
"name": {
|
|
201
270
|
"type": "string",
|
|
202
271
|
},
|
|
203
272
|
},
|
|
273
|
+
"required": null,
|
|
204
274
|
"type": "object",
|
|
205
275
|
},
|
|
206
276
|
},
|
|
@@ -226,6 +296,8 @@ test('openapi response', async () => {
|
|
|
226
296
|
"content": {
|
|
227
297
|
"multipart/form-data": {
|
|
228
298
|
"schema": {
|
|
299
|
+
"items": null,
|
|
300
|
+
"patternProperties": null,
|
|
229
301
|
"properties": {
|
|
230
302
|
"age": {
|
|
231
303
|
"type": "string",
|
|
@@ -259,6 +331,8 @@ test('openapi response', async () => {
|
|
|
259
331
|
"get": {
|
|
260
332
|
"parameters": [
|
|
261
333
|
{
|
|
334
|
+
"description": null,
|
|
335
|
+
"examples": null,
|
|
262
336
|
"in": "path",
|
|
263
337
|
"name": "id",
|
|
264
338
|
"required": true,
|
|
@@ -282,6 +356,8 @@ test('openapi response', async () => {
|
|
|
282
356
|
"content": {
|
|
283
357
|
"application/json": {
|
|
284
358
|
"schema": {
|
|
359
|
+
"items": null,
|
|
360
|
+
"patternProperties": null,
|
|
285
361
|
"properties": {
|
|
286
362
|
"message": {
|
|
287
363
|
"type": "string",
|
|
@@ -333,6 +409,8 @@ test('openapi response', async () => {
|
|
|
333
409
|
"get": {
|
|
334
410
|
"parameters": [
|
|
335
411
|
{
|
|
412
|
+
"description": null,
|
|
413
|
+
"examples": null,
|
|
336
414
|
"in": "query",
|
|
337
415
|
"name": "name",
|
|
338
416
|
"required": true,
|
|
@@ -346,11 +424,14 @@ test('openapi response', async () => {
|
|
|
346
424
|
"content": {
|
|
347
425
|
"application/json": {
|
|
348
426
|
"schema": {
|
|
427
|
+
"items": null,
|
|
428
|
+
"patternProperties": null,
|
|
349
429
|
"properties": {
|
|
350
430
|
"name": {
|
|
351
431
|
"type": "string",
|
|
352
432
|
},
|
|
353
433
|
},
|
|
434
|
+
"required": null,
|
|
354
435
|
"type": "object",
|
|
355
436
|
},
|
|
356
437
|
},
|
|
@@ -395,11 +476,14 @@ test('openapi response', async () => {
|
|
|
395
476
|
"content": {
|
|
396
477
|
"application/json": {
|
|
397
478
|
"schema": {
|
|
479
|
+
"items": null,
|
|
480
|
+
"patternProperties": null,
|
|
398
481
|
"properties": {
|
|
399
482
|
"name": {
|
|
400
483
|
"type": "string",
|
|
401
484
|
},
|
|
402
485
|
},
|
|
486
|
+
"required": null,
|
|
403
487
|
"type": "object",
|
|
404
488
|
},
|
|
405
489
|
},
|
|
@@ -451,6 +535,8 @@ test('openapi response', async () => {
|
|
|
451
535
|
"content": {
|
|
452
536
|
"application/json": {
|
|
453
537
|
"schema": {
|
|
538
|
+
"items": null,
|
|
539
|
+
"patternProperties": null,
|
|
454
540
|
"properties": {
|
|
455
541
|
"count": {
|
|
456
542
|
"type": "number",
|
|
@@ -483,6 +569,8 @@ test('openapi response', async () => {
|
|
|
483
569
|
"get": {
|
|
484
570
|
"parameters": [
|
|
485
571
|
{
|
|
572
|
+
"description": null,
|
|
573
|
+
"examples": null,
|
|
486
574
|
"in": "path",
|
|
487
575
|
"name": "id",
|
|
488
576
|
"required": true,
|