@windrun-huaiin/backend-core 15.0.0 → 16.0.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 (340) hide show
  1. package/LICENSE +1 -1
  2. package/dist/app/api/stripe/checkout/route.js +2 -2
  3. package/dist/app/api/stripe/checkout/route.mjs +1 -1
  4. package/dist/app/api/stripe/customer-portal/route.js +2 -2
  5. package/dist/app/api/stripe/customer-portal/route.mjs +1 -1
  6. package/dist/app/api/user/anonymous/init/route.js +6 -6
  7. package/dist/app/api/user/anonymous/init/route.mjs +1 -1
  8. package/dist/app/api/webhook/clerk/user/route.js +4 -4
  9. package/dist/app/api/webhook/clerk/user/route.mjs +1 -1
  10. package/dist/app/api/webhook/stripe/route.js +2 -2
  11. package/dist/app/api/webhook/stripe/route.mjs +1 -1
  12. package/dist/auth/auth-middleware.js +3 -3
  13. package/dist/auth/auth-middleware.mjs +1 -1
  14. package/dist/auth/auth-utils.js +10 -10
  15. package/dist/auth/auth-utils.mjs +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +44 -0
  19. package/dist/index.mjs +8 -1
  20. package/dist/lib/index.js +19 -0
  21. package/dist/lib/index.mjs +1 -1
  22. package/dist/lib/money-price-helper.js +3 -3
  23. package/dist/lib/money-price-helper.mjs +1 -1
  24. package/dist/lib/stripe-config.js +8 -8
  25. package/dist/lib/stripe-config.mjs +1 -1
  26. package/dist/lib/upstash/qstash.d.ts +20 -7
  27. package/dist/lib/upstash/qstash.d.ts.map +1 -1
  28. package/dist/lib/upstash/qstash.js +45 -19
  29. package/dist/lib/upstash/qstash.mjs +35 -9
  30. package/dist/lib/upstash/redis-counter.js +7 -7
  31. package/dist/lib/upstash/redis-counter.mjs +1 -1
  32. package/dist/lib/upstash/redis-favorite.js +9 -9
  33. package/dist/lib/upstash/redis-favorite.mjs +1 -1
  34. package/dist/lib/upstash/redis-like.js +9 -9
  35. package/dist/lib/upstash/redis-like.mjs +1 -1
  36. package/dist/lib/upstash/redis-lock.js +6 -6
  37. package/dist/lib/upstash/redis-lock.mjs +1 -1
  38. package/dist/lib/upstash/redis-structures.d.ts +83 -0
  39. package/dist/lib/upstash/redis-structures.d.ts.map +1 -1
  40. package/dist/lib/upstash/redis-structures.js +245 -25
  41. package/dist/lib/upstash/redis-structures.mjs +203 -2
  42. package/dist/lib/upstash-config.d.ts.map +1 -1
  43. package/dist/lib/upstash-config.js +90 -18
  44. package/dist/lib/upstash-config.mjs +80 -8
  45. package/dist/prisma/prisma-transaction-util.js +2 -2
  46. package/dist/prisma/prisma-transaction-util.mjs +1 -1
  47. package/dist/services/aggregate/anonymous.aggregate.service.js +6 -6
  48. package/dist/services/aggregate/anonymous.aggregate.service.mjs +1 -1
  49. package/dist/services/aggregate/billing.aggregate.service.js +21 -21
  50. package/dist/services/aggregate/billing.aggregate.service.mjs +1 -1
  51. package/dist/services/aggregate/user.aggregate.service.js +10 -10
  52. package/dist/services/aggregate/user.aggregate.service.mjs +1 -1
  53. package/dist/services/ai/abort.d.ts +2 -0
  54. package/dist/services/ai/abort.d.ts.map +1 -0
  55. package/dist/services/ai/abort.js +24 -0
  56. package/dist/services/ai/abort.mjs +22 -0
  57. package/dist/services/ai/env.d.ts +21 -0
  58. package/dist/services/ai/env.d.ts.map +1 -0
  59. package/dist/services/ai/env.js +85 -0
  60. package/dist/services/ai/env.mjs +80 -0
  61. package/dist/services/ai/error.d.ts +3 -0
  62. package/dist/services/ai/error.d.ts.map +1 -0
  63. package/dist/services/ai/error.js +54 -0
  64. package/dist/services/ai/error.mjs +52 -0
  65. package/dist/services/ai/index.d.ts +9 -0
  66. package/dist/services/ai/index.d.ts.map +1 -0
  67. package/dist/services/ai/index.js +30 -0
  68. package/dist/services/ai/index.mjs +7 -0
  69. package/dist/services/ai/message-builder.d.ts +4 -0
  70. package/dist/services/ai/message-builder.d.ts.map +1 -0
  71. package/dist/services/ai/message-builder.js +15 -0
  72. package/dist/services/ai/message-builder.mjs +13 -0
  73. package/dist/services/ai/mock.d.ts +30 -0
  74. package/dist/services/ai/mock.d.ts.map +1 -0
  75. package/dist/services/ai/mock.js +314 -0
  76. package/dist/services/ai/mock.mjs +308 -0
  77. package/dist/services/ai/openrouter-client.d.ts +12 -0
  78. package/dist/services/ai/openrouter-client.d.ts.map +1 -0
  79. package/dist/services/ai/openrouter-client.js +81 -0
  80. package/dist/services/ai/openrouter-client.mjs +78 -0
  81. package/dist/services/ai/route.d.ts +6 -0
  82. package/dist/services/ai/route.d.ts.map +1 -0
  83. package/dist/services/ai/route.js +178 -0
  84. package/dist/services/ai/route.mjs +173 -0
  85. package/dist/services/ai/types.d.ts +98 -0
  86. package/dist/services/ai/types.d.ts.map +1 -0
  87. package/dist/services/context/user-context-service.js +3 -3
  88. package/dist/services/context/user-context-service.mjs +1 -1
  89. package/dist/services/database/apilog.service.js +14 -14
  90. package/dist/services/database/apilog.service.mjs +1 -1
  91. package/dist/services/database/credit.service.js +20 -20
  92. package/dist/services/database/credit.service.mjs +1 -1
  93. package/dist/services/database/creditAuditLog.service.js +13 -13
  94. package/dist/services/database/creditAuditLog.service.mjs +1 -1
  95. package/dist/services/database/subscription.service.js +16 -16
  96. package/dist/services/database/subscription.service.mjs +1 -1
  97. package/dist/services/database/transaction.service.js +18 -18
  98. package/dist/services/database/transaction.service.mjs +1 -1
  99. package/dist/services/database/user.service.js +14 -14
  100. package/dist/services/database/user.service.mjs +1 -1
  101. package/dist/services/database/userBackup.service.js +15 -15
  102. package/dist/services/database/userBackup.service.mjs +1 -1
  103. package/dist/services/stripe/webhook-handler.js +13 -13
  104. package/dist/services/stripe/webhook-handler.mjs +3 -3
  105. package/package.json +14 -4
  106. package/src/index.ts +1 -0
  107. package/src/lib/upstash/qstash.ts +55 -15
  108. package/src/lib/upstash/redis-structures.ts +248 -0
  109. package/src/lib/upstash-config.ts +106 -4
  110. package/src/services/ai/abort.ts +26 -0
  111. package/src/services/ai/env.ts +120 -0
  112. package/src/services/ai/error.ts +64 -0
  113. package/src/services/ai/index.ts +8 -0
  114. package/src/services/ai/message-builder.ts +17 -0
  115. package/src/services/ai/mock.ts +378 -0
  116. package/src/services/ai/openrouter-client.ts +94 -0
  117. package/src/services/ai/route.ts +218 -0
  118. package/src/services/ai/types.ts +131 -0
  119. package/dist/_virtual/_commonjs-dynamic-modules.js +0 -7
  120. package/dist/_virtual/_commonjs-dynamic-modules.mjs +0 -5
  121. package/dist/_virtual/_commonjsHelpers.js +0 -10
  122. package/dist/_virtual/_commonjsHelpers.mjs +0 -7
  123. package/dist/_virtual/aes.js +0 -5
  124. package/dist/_virtual/aes.mjs +0 -3
  125. package/dist/_virtual/blowfish.js +0 -5
  126. package/dist/_virtual/blowfish.mjs +0 -3
  127. package/dist/_virtual/cipher-core.js +0 -5
  128. package/dist/_virtual/cipher-core.mjs +0 -3
  129. package/dist/_virtual/core.js +0 -5
  130. package/dist/_virtual/core.mjs +0 -3
  131. package/dist/_virtual/enc-base64.js +0 -5
  132. package/dist/_virtual/enc-base64.mjs +0 -3
  133. package/dist/_virtual/enc-base64url.js +0 -5
  134. package/dist/_virtual/enc-base64url.mjs +0 -3
  135. package/dist/_virtual/enc-utf16.js +0 -5
  136. package/dist/_virtual/enc-utf16.mjs +0 -3
  137. package/dist/_virtual/evpkdf.js +0 -5
  138. package/dist/_virtual/evpkdf.mjs +0 -3
  139. package/dist/_virtual/format-hex.js +0 -5
  140. package/dist/_virtual/format-hex.mjs +0 -3
  141. package/dist/_virtual/hmac.js +0 -5
  142. package/dist/_virtual/hmac.mjs +0 -3
  143. package/dist/_virtual/index.js +0 -11
  144. package/dist/_virtual/index.mjs +0 -7
  145. package/dist/_virtual/index2.js +0 -5
  146. package/dist/_virtual/index2.mjs +0 -3
  147. package/dist/_virtual/lib-typedarrays.js +0 -5
  148. package/dist/_virtual/lib-typedarrays.mjs +0 -3
  149. package/dist/_virtual/md5.js +0 -5
  150. package/dist/_virtual/md5.mjs +0 -3
  151. package/dist/_virtual/mode-cfb.js +0 -5
  152. package/dist/_virtual/mode-cfb.mjs +0 -3
  153. package/dist/_virtual/mode-ctr-gladman.js +0 -5
  154. package/dist/_virtual/mode-ctr-gladman.mjs +0 -3
  155. package/dist/_virtual/mode-ctr.js +0 -5
  156. package/dist/_virtual/mode-ctr.mjs +0 -3
  157. package/dist/_virtual/mode-ecb.js +0 -5
  158. package/dist/_virtual/mode-ecb.mjs +0 -3
  159. package/dist/_virtual/mode-ofb.js +0 -5
  160. package/dist/_virtual/mode-ofb.mjs +0 -3
  161. package/dist/_virtual/pad-ansix923.js +0 -5
  162. package/dist/_virtual/pad-ansix923.mjs +0 -3
  163. package/dist/_virtual/pad-iso10126.js +0 -5
  164. package/dist/_virtual/pad-iso10126.mjs +0 -3
  165. package/dist/_virtual/pad-iso97971.js +0 -5
  166. package/dist/_virtual/pad-iso97971.mjs +0 -3
  167. package/dist/_virtual/pad-nopadding.js +0 -5
  168. package/dist/_virtual/pad-nopadding.mjs +0 -3
  169. package/dist/_virtual/pad-zeropadding.js +0 -5
  170. package/dist/_virtual/pad-zeropadding.mjs +0 -3
  171. package/dist/_virtual/pbkdf2.js +0 -5
  172. package/dist/_virtual/pbkdf2.mjs +0 -3
  173. package/dist/_virtual/rabbit-legacy.js +0 -5
  174. package/dist/_virtual/rabbit-legacy.mjs +0 -3
  175. package/dist/_virtual/rabbit.js +0 -5
  176. package/dist/_virtual/rabbit.mjs +0 -3
  177. package/dist/_virtual/rc4.js +0 -5
  178. package/dist/_virtual/rc4.mjs +0 -3
  179. package/dist/_virtual/ripemd160.js +0 -5
  180. package/dist/_virtual/ripemd160.mjs +0 -3
  181. package/dist/_virtual/sha1.js +0 -5
  182. package/dist/_virtual/sha1.mjs +0 -3
  183. package/dist/_virtual/sha224.js +0 -5
  184. package/dist/_virtual/sha224.mjs +0 -3
  185. package/dist/_virtual/sha256.js +0 -5
  186. package/dist/_virtual/sha256.mjs +0 -3
  187. package/dist/_virtual/sha3.js +0 -5
  188. package/dist/_virtual/sha3.mjs +0 -3
  189. package/dist/_virtual/sha384.js +0 -5
  190. package/dist/_virtual/sha384.mjs +0 -3
  191. package/dist/_virtual/sha512.js +0 -5
  192. package/dist/_virtual/sha512.mjs +0 -3
  193. package/dist/_virtual/tripledes.js +0 -5
  194. package/dist/_virtual/tripledes.mjs +0 -3
  195. package/dist/_virtual/x64-core.js +0 -5
  196. package/dist/_virtual/x64-core.mjs +0 -3
  197. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +0 -48
  198. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.mjs +0 -45
  199. package/dist/node_modules/.pnpm/@upstash_qstash@2.10.1/node_modules/@upstash/qstash/chunk-35B33QW3.js +0 -1848
  200. package/dist/node_modules/.pnpm/@upstash_qstash@2.10.1/node_modules/@upstash/qstash/chunk-35B33QW3.mjs +0 -1830
  201. package/dist/node_modules/.pnpm/@upstash_redis@1.37.0/node_modules/@upstash/redis/chunk-IH7W44G6.js +0 -5308
  202. package/dist/node_modules/.pnpm/@upstash_redis@1.37.0/node_modules/@upstash/redis/chunk-IH7W44G6.mjs +0 -5302
  203. package/dist/node_modules/.pnpm/@upstash_redis@1.37.0/node_modules/@upstash/redis/nodejs.js +0 -116
  204. package/dist/node_modules/.pnpm/@upstash_redis@1.37.0/node_modules/@upstash/redis/nodejs.mjs +0 -113
  205. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/aes.js +0 -248
  206. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/aes.mjs +0 -246
  207. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/blowfish.js +0 -485
  208. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/blowfish.mjs +0 -483
  209. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/cipher-core.js +0 -906
  210. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/cipher-core.mjs +0 -904
  211. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/core.js +0 -818
  212. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/core.mjs +0 -816
  213. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-base64.js +0 -146
  214. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-base64.mjs +0 -144
  215. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-base64url.js +0 -158
  216. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-base64url.mjs +0 -156
  217. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-utf16.js +0 -159
  218. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/enc-utf16.mjs +0 -157
  219. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/evpkdf.js +0 -146
  220. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/evpkdf.mjs +0 -144
  221. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/format-hex.js +0 -77
  222. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/format-hex.mjs +0 -75
  223. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/hmac.js +0 -153
  224. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/hmac.mjs +0 -151
  225. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.js +0 -62
  226. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.mjs +0 -60
  227. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/lib-typedarrays.js +0 -86
  228. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/lib-typedarrays.mjs +0 -84
  229. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/md5.js +0 -278
  230. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/md5.mjs +0 -276
  231. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-cfb.js +0 -91
  232. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-cfb.mjs +0 -89
  233. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ctr-gladman.js +0 -127
  234. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ctr-gladman.mjs +0 -125
  235. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ctr.js +0 -69
  236. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ctr.mjs +0 -67
  237. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ecb.js +0 -51
  238. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ecb.mjs +0 -49
  239. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ofb.js +0 -65
  240. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/mode-ofb.mjs +0 -63
  241. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-ansix923.js +0 -60
  242. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-ansix923.mjs +0 -58
  243. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-iso10126.js +0 -55
  244. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-iso10126.mjs +0 -53
  245. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-iso97971.js +0 -51
  246. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-iso97971.mjs +0 -49
  247. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-nopadding.js +0 -41
  248. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-nopadding.mjs +0 -39
  249. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-zeropadding.js +0 -58
  250. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pad-zeropadding.mjs +0 -56
  251. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pbkdf2.js +0 -157
  252. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/pbkdf2.mjs +0 -155
  253. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rabbit-legacy.js +0 -204
  254. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rabbit-legacy.mjs +0 -202
  255. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rabbit.js +0 -206
  256. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rabbit.mjs +0 -204
  257. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rc4.js +0 -153
  258. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/rc4.mjs +0 -151
  259. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/ripemd160.js +0 -277
  260. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/ripemd160.mjs +0 -275
  261. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha1.js +0 -160
  262. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha1.mjs +0 -158
  263. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha224.js +0 -91
  264. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha224.mjs +0 -89
  265. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha256.js +0 -209
  266. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha256.mjs +0 -207
  267. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha3.js +0 -337
  268. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha3.mjs +0 -335
  269. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha384.js +0 -95
  270. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha384.mjs +0 -93
  271. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha512.js +0 -337
  272. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/sha512.mjs +0 -335
  273. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/tripledes.js +0 -793
  274. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/tripledes.mjs +0 -791
  275. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/x64-core.js +0 -314
  276. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/x64-core.mjs +0 -312
  277. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jws/compact/verify.js +0 -26
  278. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jws/compact/verify.mjs +0 -24
  279. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jws/flattened/verify.js +0 -127
  280. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jws/flattened/verify.mjs +0 -125
  281. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jwt/verify.js +0 -20
  282. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jwt/verify.mjs +0 -18
  283. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/key/import.js +0 -31
  284. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/key/import.mjs +0 -29
  285. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/buffer_utils.js +0 -18
  286. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/buffer_utils.mjs +0 -14
  287. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/check_key_type.js +0 -82
  288. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/check_key_type.mjs +0 -80
  289. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/crypto_key.js +0 -103
  290. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/crypto_key.mjs +0 -101
  291. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/epoch.js +0 -7
  292. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/epoch.mjs +0 -3
  293. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/invalid_key_input.js +0 -38
  294. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/invalid_key_input.mjs +0 -33
  295. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_disjoint.js +0 -27
  296. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_disjoint.mjs +0 -23
  297. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_jwk.js +0 -21
  298. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_jwk.mjs +0 -16
  299. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_object.js +0 -22
  300. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_object.mjs +0 -18
  301. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/jwt_claims_set.js +0 -111
  302. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/jwt_claims_set.mjs +0 -107
  303. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/secs.js +0 -61
  304. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/secs.mjs +0 -57
  305. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_algorithms.js +0 -16
  306. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_algorithms.mjs +0 -12
  307. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_crit.js +0 -40
  308. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_crit.mjs +0 -36
  309. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/base64url.js +0 -15
  310. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/base64url.mjs +0 -13
  311. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/check_key_length.js +0 -23
  312. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/check_key_length.mjs +0 -19
  313. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/dsa_digest.js +0 -30
  314. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/dsa_digest.mjs +0 -26
  315. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_named_curve.js +0 -60
  316. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_named_curve.mjs +0 -56
  317. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_sign_verify_key.js +0 -35
  318. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_sign_verify_key.mjs +0 -31
  319. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/hmac_digest.js +0 -20
  320. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/hmac_digest.mjs +0 -16
  321. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_like.js +0 -15
  322. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_like.mjs +0 -10
  323. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_object.js +0 -28
  324. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_object.mjs +0 -5
  325. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/jwk_to_key.js +0 -14
  326. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/jwk_to_key.mjs +0 -10
  327. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/node_key.js +0 -115
  328. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/node_key.mjs +0 -111
  329. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/sign.js +0 -42
  330. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/sign.mjs +0 -19
  331. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/verify.js +0 -54
  332. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/verify.mjs +0 -31
  333. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/webcrypto.js +0 -32
  334. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/webcrypto.mjs +0 -7
  335. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/util/errors.js +0 -69
  336. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/util/errors.mjs +0 -60
  337. package/dist/node_modules/.pnpm/neverthrow@7.2.0/node_modules/neverthrow/dist/index.es.js +0 -422
  338. package/dist/node_modules/.pnpm/neverthrow@7.2.0/node_modules/neverthrow/dist/index.es.mjs +0 -415
  339. package/dist/node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.web.js +0 -6
  340. package/dist/node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.web.mjs +0 -4
@@ -0,0 +1,314 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var ai = require('@windrun-huaiin/contracts/ai');
5
+
6
+ const streamingHeaders = {
7
+ 'Content-Type': 'text/event-stream; charset=utf-8',
8
+ 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate, no-transform',
9
+ Connection: 'keep-alive',
10
+ Pragma: 'no-cache',
11
+ 'X-Accel-Buffering': 'no',
12
+ };
13
+ function encodeEvent(event) {
14
+ return `data: ${JSON.stringify(event)}\n\n`;
15
+ }
16
+ function createStreamResponse(events) {
17
+ const encoder = new TextEncoder();
18
+ const stream = new ReadableStream({
19
+ start(controller) {
20
+ for (const event of events) {
21
+ controller.enqueue(encoder.encode(encodeEvent(event)));
22
+ }
23
+ controller.close();
24
+ },
25
+ });
26
+ return new Response(stream, {
27
+ headers: streamingHeaders,
28
+ });
29
+ }
30
+ function createSimpleMockHandler(text) {
31
+ return (context) => {
32
+ const messageId = `mock-${context.requestId}`;
33
+ return createStreamResponse([
34
+ {
35
+ type: 'message_started',
36
+ messageId,
37
+ createdAt: Date.now(),
38
+ },
39
+ {
40
+ type: 'text_delta',
41
+ messageId,
42
+ text,
43
+ },
44
+ {
45
+ type: 'message_completed',
46
+ messageId,
47
+ createdAt: Date.now(),
48
+ },
49
+ ]);
50
+ };
51
+ }
52
+ function createErrorMockResponse(statusCode, message) {
53
+ return Response.json(ai.createAIErrorPayload({
54
+ message,
55
+ upstreamStatusCode: statusCode,
56
+ }), { status: statusCode });
57
+ }
58
+ function getMockScenario(mockType, mockTimeoutMs) {
59
+ switch (mockType) {
60
+ case 1:
61
+ return {
62
+ mode: 'text_stream',
63
+ initialDelayMs: mockTimeoutMs,
64
+ };
65
+ case 2:
66
+ return {
67
+ mode: 'text_stream',
68
+ immediateErrorType: 'timeout',
69
+ };
70
+ case 3:
71
+ return {
72
+ mode: 'text_stream',
73
+ streamFailureType: 'timeout',
74
+ streamFailureAfterChunks: 3,
75
+ };
76
+ case 4:
77
+ return {
78
+ mode: 'text_stream',
79
+ streamFailureType: 'request_aborted',
80
+ streamFailureAfterChunks: 3,
81
+ };
82
+ case 5:
83
+ return {
84
+ mode: 'text_stream',
85
+ streamFailureType: 'stream_error',
86
+ streamFailureAfterChunks: 3,
87
+ };
88
+ case 6:
89
+ return {
90
+ mode: 'event_sequence',
91
+ };
92
+ case 7:
93
+ return {
94
+ mode: 'event_sequence',
95
+ };
96
+ default:
97
+ return {
98
+ mode: 'text_stream',
99
+ };
100
+ }
101
+ }
102
+ function sleep(delayInMs) {
103
+ return tslib.__awaiter(this, void 0, void 0, function* () {
104
+ yield new Promise((resolve) => setTimeout(resolve, delayInMs));
105
+ });
106
+ }
107
+ function createMockErrorPayload(failureType) {
108
+ if (failureType === 'timeout') {
109
+ return ai.createAIErrorPayload({
110
+ message: 'Request timed out',
111
+ upstreamStatusCode: 408,
112
+ });
113
+ }
114
+ if (failureType === 'request_aborted') {
115
+ return ai.createAIErrorPayload({
116
+ message: 'Request aborted',
117
+ upstreamStatusCode: 499,
118
+ });
119
+ }
120
+ return ai.createAIErrorPayload({
121
+ message: 'Error communicating with AI',
122
+ upstreamStatusCode: 502,
123
+ failureReason: 'stream_error',
124
+ });
125
+ }
126
+ function createMockFailureResponse(failureType) {
127
+ var _a;
128
+ const payload = createMockErrorPayload(failureType);
129
+ return Response.json(payload, { status: (_a = payload.upstreamStatusCode) !== null && _a !== void 0 ? _a : 500 });
130
+ }
131
+ function chunkTextByWords(text, chunkSize) {
132
+ var _a;
133
+ const wordChunks = (_a = text.match(/\S+\s*/g)) !== null && _a !== void 0 ? _a : [text];
134
+ const normalizedChunkSize = Math.max(1, chunkSize);
135
+ const chunks = [];
136
+ for (let index = 0; index < wordChunks.length; index += normalizedChunkSize) {
137
+ chunks.push(wordChunks.slice(index, index + normalizedChunkSize).join(''));
138
+ }
139
+ return chunks;
140
+ }
141
+ function createConfigurableMockHandler(options) {
142
+ return (context) => tslib.__awaiter(this, void 0, void 0, function* () {
143
+ var _a, _b, _c, _d;
144
+ if (((_a = options.initialDelayMs) !== null && _a !== void 0 ? _a : 0) > 0) {
145
+ yield sleep(options.initialDelayMs);
146
+ }
147
+ const messageId = `mock-${context.requestId}`;
148
+ const chunks = chunkTextByWords(options.text, (_b = options.chunkSize) !== null && _b !== void 0 ? _b : 4);
149
+ const chunkDelayMs = Math.max(0, (_c = options.chunkDelayMs) !== null && _c !== void 0 ? _c : 0);
150
+ const failureAfterChunks = (_d = options.streamFailureAfterChunks) !== null && _d !== void 0 ? _d : 0;
151
+ const encoder = new TextEncoder();
152
+ const stream = new ReadableStream({
153
+ start(controller) {
154
+ return tslib.__awaiter(this, void 0, void 0, function* () {
155
+ controller.enqueue(encoder.encode(encodeEvent({
156
+ type: 'message_started',
157
+ messageId,
158
+ createdAt: Date.now(),
159
+ })));
160
+ for (let index = 0; index < chunks.length; index += 1) {
161
+ if (options.streamFailureType &&
162
+ failureAfterChunks > 0 &&
163
+ index >= failureAfterChunks) {
164
+ controller.enqueue(encoder.encode(encodeEvent({
165
+ type: 'error',
166
+ error: createMockErrorPayload(options.streamFailureType),
167
+ })));
168
+ controller.close();
169
+ return;
170
+ }
171
+ controller.enqueue(encoder.encode(encodeEvent({
172
+ type: 'text_delta',
173
+ messageId,
174
+ text: chunks[index],
175
+ })));
176
+ if (chunkDelayMs > 0) {
177
+ yield sleep(chunkDelayMs);
178
+ }
179
+ }
180
+ controller.enqueue(encoder.encode(encodeEvent({
181
+ type: 'message_completed',
182
+ messageId,
183
+ createdAt: Date.now(),
184
+ })));
185
+ controller.close();
186
+ });
187
+ },
188
+ });
189
+ return new Response(stream, {
190
+ headers: streamingHeaders,
191
+ });
192
+ });
193
+ }
194
+ function createEventSequenceMockHandler(events) {
195
+ return () => tslib.__awaiter(this, void 0, void 0, function* () { return createStreamResponse(events); });
196
+ }
197
+ function createMarkdownShowcaseEvents(messageId) {
198
+ return [
199
+ {
200
+ type: 'message_started',
201
+ messageId,
202
+ createdAt: Date.now(),
203
+ },
204
+ {
205
+ type: 'text_delta',
206
+ messageId,
207
+ text: [
208
+ '# Markdown Showcase',
209
+ '',
210
+ 'This scenario verifies headings, lists, quotes, tables, code, and image rendering in the chat message body.',
211
+ '',
212
+ '## Bullet List',
213
+ '',
214
+ '- Bullet list item one',
215
+ '- Bullet list item two',
216
+ '',
217
+ '## Quote',
218
+ '',
219
+ '> Blockquote content for layout verification.',
220
+ '',
221
+ '## Table',
222
+ '',
223
+ '| Column | Value |',
224
+ '| --- | --- |',
225
+ '| Status | OK |',
226
+ '| Mode | Markdown |',
227
+ '',
228
+ '## Code',
229
+ '',
230
+ '```ts',
231
+ "const mode = 'markdown-showcase';",
232
+ 'console.log(mode);',
233
+ '```',
234
+ '',
235
+ '## Image',
236
+ '',
237
+ '![Mock Image](https://r2.d8ger.com/default.webp)',
238
+ ].join('\n'),
239
+ },
240
+ {
241
+ type: 'message_completed',
242
+ messageId,
243
+ createdAt: Date.now(),
244
+ },
245
+ ];
246
+ }
247
+ function createTrophyCardShowcaseEvents(messageId) {
248
+ return [
249
+ {
250
+ type: 'message_started',
251
+ messageId,
252
+ createdAt: Date.now(),
253
+ },
254
+ {
255
+ type: 'text_delta',
256
+ messageId,
257
+ text: [
258
+ '# Trophy Card Showcase',
259
+ '',
260
+ 'This scenario verifies a structured chat part rendered between normal markdown blocks.',
261
+ '',
262
+ 'The card below is emitted as a dedicated `trophy_card` part, not as Markdown component syntax.',
263
+ ].join('\n'),
264
+ },
265
+ {
266
+ type: 'part',
267
+ messageId,
268
+ part: {
269
+ type: 'trophy_card',
270
+ title: 'Structured Trophy Card',
271
+ description: 'This is rendered from `MessagePart`, which is the recommended path for chat-specific rich blocks.\n\n- Reusable shared React component\n- Chat-specific structured part\n- Ready to extend to file, audio, and video cards',
272
+ },
273
+ },
274
+ {
275
+ type: 'text_delta',
276
+ messageId,
277
+ text: '\n\nUse this as the reference pattern for future file, audio, video, or tool result parts.',
278
+ },
279
+ {
280
+ type: 'message_completed',
281
+ messageId,
282
+ createdAt: Date.now(),
283
+ },
284
+ ];
285
+ }
286
+ function createScenarioMockHandler(params) {
287
+ const scenario = getMockScenario(params.mockType, params.mockTimeoutSeconds * 1000);
288
+ const messageId = `mock-scenario-${params.mockType}`;
289
+ if (scenario.immediateErrorType) {
290
+ return () => tslib.__awaiter(this, void 0, void 0, function* () { return createMockFailureResponse(scenario.immediateErrorType); });
291
+ }
292
+ if (scenario.mode === 'event_sequence') {
293
+ if (params.mockType === 6) {
294
+ return createEventSequenceMockHandler(createMarkdownShowcaseEvents(messageId));
295
+ }
296
+ if (params.mockType === 7) {
297
+ return createEventSequenceMockHandler(createTrophyCardShowcaseEvents(messageId));
298
+ }
299
+ }
300
+ return createConfigurableMockHandler({
301
+ text: params.text,
302
+ initialDelayMs: scenario.initialDelayMs,
303
+ chunkDelayMs: params.mockStreamChunkDelayMs,
304
+ chunkSize: params.mockStreamChunkSize,
305
+ streamFailureType: scenario.streamFailureType,
306
+ streamFailureAfterChunks: scenario.streamFailureAfterChunks,
307
+ });
308
+ }
309
+
310
+ exports.createConfigurableMockHandler = createConfigurableMockHandler;
311
+ exports.createErrorMockResponse = createErrorMockResponse;
312
+ exports.createScenarioMockHandler = createScenarioMockHandler;
313
+ exports.createSimpleMockHandler = createSimpleMockHandler;
314
+ exports.getMockScenario = getMockScenario;
@@ -0,0 +1,308 @@
1
+ import { __awaiter } from 'tslib';
2
+ import { createAIErrorPayload } from '@windrun-huaiin/contracts/ai';
3
+
4
+ const streamingHeaders = {
5
+ 'Content-Type': 'text/event-stream; charset=utf-8',
6
+ 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate, no-transform',
7
+ Connection: 'keep-alive',
8
+ Pragma: 'no-cache',
9
+ 'X-Accel-Buffering': 'no',
10
+ };
11
+ function encodeEvent(event) {
12
+ return `data: ${JSON.stringify(event)}\n\n`;
13
+ }
14
+ function createStreamResponse(events) {
15
+ const encoder = new TextEncoder();
16
+ const stream = new ReadableStream({
17
+ start(controller) {
18
+ for (const event of events) {
19
+ controller.enqueue(encoder.encode(encodeEvent(event)));
20
+ }
21
+ controller.close();
22
+ },
23
+ });
24
+ return new Response(stream, {
25
+ headers: streamingHeaders,
26
+ });
27
+ }
28
+ function createSimpleMockHandler(text) {
29
+ return (context) => {
30
+ const messageId = `mock-${context.requestId}`;
31
+ return createStreamResponse([
32
+ {
33
+ type: 'message_started',
34
+ messageId,
35
+ createdAt: Date.now(),
36
+ },
37
+ {
38
+ type: 'text_delta',
39
+ messageId,
40
+ text,
41
+ },
42
+ {
43
+ type: 'message_completed',
44
+ messageId,
45
+ createdAt: Date.now(),
46
+ },
47
+ ]);
48
+ };
49
+ }
50
+ function createErrorMockResponse(statusCode, message) {
51
+ return Response.json(createAIErrorPayload({
52
+ message,
53
+ upstreamStatusCode: statusCode,
54
+ }), { status: statusCode });
55
+ }
56
+ function getMockScenario(mockType, mockTimeoutMs) {
57
+ switch (mockType) {
58
+ case 1:
59
+ return {
60
+ mode: 'text_stream',
61
+ initialDelayMs: mockTimeoutMs,
62
+ };
63
+ case 2:
64
+ return {
65
+ mode: 'text_stream',
66
+ immediateErrorType: 'timeout',
67
+ };
68
+ case 3:
69
+ return {
70
+ mode: 'text_stream',
71
+ streamFailureType: 'timeout',
72
+ streamFailureAfterChunks: 3,
73
+ };
74
+ case 4:
75
+ return {
76
+ mode: 'text_stream',
77
+ streamFailureType: 'request_aborted',
78
+ streamFailureAfterChunks: 3,
79
+ };
80
+ case 5:
81
+ return {
82
+ mode: 'text_stream',
83
+ streamFailureType: 'stream_error',
84
+ streamFailureAfterChunks: 3,
85
+ };
86
+ case 6:
87
+ return {
88
+ mode: 'event_sequence',
89
+ };
90
+ case 7:
91
+ return {
92
+ mode: 'event_sequence',
93
+ };
94
+ default:
95
+ return {
96
+ mode: 'text_stream',
97
+ };
98
+ }
99
+ }
100
+ function sleep(delayInMs) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ yield new Promise((resolve) => setTimeout(resolve, delayInMs));
103
+ });
104
+ }
105
+ function createMockErrorPayload(failureType) {
106
+ if (failureType === 'timeout') {
107
+ return createAIErrorPayload({
108
+ message: 'Request timed out',
109
+ upstreamStatusCode: 408,
110
+ });
111
+ }
112
+ if (failureType === 'request_aborted') {
113
+ return createAIErrorPayload({
114
+ message: 'Request aborted',
115
+ upstreamStatusCode: 499,
116
+ });
117
+ }
118
+ return createAIErrorPayload({
119
+ message: 'Error communicating with AI',
120
+ upstreamStatusCode: 502,
121
+ failureReason: 'stream_error',
122
+ });
123
+ }
124
+ function createMockFailureResponse(failureType) {
125
+ var _a;
126
+ const payload = createMockErrorPayload(failureType);
127
+ return Response.json(payload, { status: (_a = payload.upstreamStatusCode) !== null && _a !== void 0 ? _a : 500 });
128
+ }
129
+ function chunkTextByWords(text, chunkSize) {
130
+ var _a;
131
+ const wordChunks = (_a = text.match(/\S+\s*/g)) !== null && _a !== void 0 ? _a : [text];
132
+ const normalizedChunkSize = Math.max(1, chunkSize);
133
+ const chunks = [];
134
+ for (let index = 0; index < wordChunks.length; index += normalizedChunkSize) {
135
+ chunks.push(wordChunks.slice(index, index + normalizedChunkSize).join(''));
136
+ }
137
+ return chunks;
138
+ }
139
+ function createConfigurableMockHandler(options) {
140
+ return (context) => __awaiter(this, void 0, void 0, function* () {
141
+ var _a, _b, _c, _d;
142
+ if (((_a = options.initialDelayMs) !== null && _a !== void 0 ? _a : 0) > 0) {
143
+ yield sleep(options.initialDelayMs);
144
+ }
145
+ const messageId = `mock-${context.requestId}`;
146
+ const chunks = chunkTextByWords(options.text, (_b = options.chunkSize) !== null && _b !== void 0 ? _b : 4);
147
+ const chunkDelayMs = Math.max(0, (_c = options.chunkDelayMs) !== null && _c !== void 0 ? _c : 0);
148
+ const failureAfterChunks = (_d = options.streamFailureAfterChunks) !== null && _d !== void 0 ? _d : 0;
149
+ const encoder = new TextEncoder();
150
+ const stream = new ReadableStream({
151
+ start(controller) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ controller.enqueue(encoder.encode(encodeEvent({
154
+ type: 'message_started',
155
+ messageId,
156
+ createdAt: Date.now(),
157
+ })));
158
+ for (let index = 0; index < chunks.length; index += 1) {
159
+ if (options.streamFailureType &&
160
+ failureAfterChunks > 0 &&
161
+ index >= failureAfterChunks) {
162
+ controller.enqueue(encoder.encode(encodeEvent({
163
+ type: 'error',
164
+ error: createMockErrorPayload(options.streamFailureType),
165
+ })));
166
+ controller.close();
167
+ return;
168
+ }
169
+ controller.enqueue(encoder.encode(encodeEvent({
170
+ type: 'text_delta',
171
+ messageId,
172
+ text: chunks[index],
173
+ })));
174
+ if (chunkDelayMs > 0) {
175
+ yield sleep(chunkDelayMs);
176
+ }
177
+ }
178
+ controller.enqueue(encoder.encode(encodeEvent({
179
+ type: 'message_completed',
180
+ messageId,
181
+ createdAt: Date.now(),
182
+ })));
183
+ controller.close();
184
+ });
185
+ },
186
+ });
187
+ return new Response(stream, {
188
+ headers: streamingHeaders,
189
+ });
190
+ });
191
+ }
192
+ function createEventSequenceMockHandler(events) {
193
+ return () => __awaiter(this, void 0, void 0, function* () { return createStreamResponse(events); });
194
+ }
195
+ function createMarkdownShowcaseEvents(messageId) {
196
+ return [
197
+ {
198
+ type: 'message_started',
199
+ messageId,
200
+ createdAt: Date.now(),
201
+ },
202
+ {
203
+ type: 'text_delta',
204
+ messageId,
205
+ text: [
206
+ '# Markdown Showcase',
207
+ '',
208
+ 'This scenario verifies headings, lists, quotes, tables, code, and image rendering in the chat message body.',
209
+ '',
210
+ '## Bullet List',
211
+ '',
212
+ '- Bullet list item one',
213
+ '- Bullet list item two',
214
+ '',
215
+ '## Quote',
216
+ '',
217
+ '> Blockquote content for layout verification.',
218
+ '',
219
+ '## Table',
220
+ '',
221
+ '| Column | Value |',
222
+ '| --- | --- |',
223
+ '| Status | OK |',
224
+ '| Mode | Markdown |',
225
+ '',
226
+ '## Code',
227
+ '',
228
+ '```ts',
229
+ "const mode = 'markdown-showcase';",
230
+ 'console.log(mode);',
231
+ '```',
232
+ '',
233
+ '## Image',
234
+ '',
235
+ '![Mock Image](https://r2.d8ger.com/default.webp)',
236
+ ].join('\n'),
237
+ },
238
+ {
239
+ type: 'message_completed',
240
+ messageId,
241
+ createdAt: Date.now(),
242
+ },
243
+ ];
244
+ }
245
+ function createTrophyCardShowcaseEvents(messageId) {
246
+ return [
247
+ {
248
+ type: 'message_started',
249
+ messageId,
250
+ createdAt: Date.now(),
251
+ },
252
+ {
253
+ type: 'text_delta',
254
+ messageId,
255
+ text: [
256
+ '# Trophy Card Showcase',
257
+ '',
258
+ 'This scenario verifies a structured chat part rendered between normal markdown blocks.',
259
+ '',
260
+ 'The card below is emitted as a dedicated `trophy_card` part, not as Markdown component syntax.',
261
+ ].join('\n'),
262
+ },
263
+ {
264
+ type: 'part',
265
+ messageId,
266
+ part: {
267
+ type: 'trophy_card',
268
+ title: 'Structured Trophy Card',
269
+ description: 'This is rendered from `MessagePart`, which is the recommended path for chat-specific rich blocks.\n\n- Reusable shared React component\n- Chat-specific structured part\n- Ready to extend to file, audio, and video cards',
270
+ },
271
+ },
272
+ {
273
+ type: 'text_delta',
274
+ messageId,
275
+ text: '\n\nUse this as the reference pattern for future file, audio, video, or tool result parts.',
276
+ },
277
+ {
278
+ type: 'message_completed',
279
+ messageId,
280
+ createdAt: Date.now(),
281
+ },
282
+ ];
283
+ }
284
+ function createScenarioMockHandler(params) {
285
+ const scenario = getMockScenario(params.mockType, params.mockTimeoutSeconds * 1000);
286
+ const messageId = `mock-scenario-${params.mockType}`;
287
+ if (scenario.immediateErrorType) {
288
+ return () => __awaiter(this, void 0, void 0, function* () { return createMockFailureResponse(scenario.immediateErrorType); });
289
+ }
290
+ if (scenario.mode === 'event_sequence') {
291
+ if (params.mockType === 6) {
292
+ return createEventSequenceMockHandler(createMarkdownShowcaseEvents(messageId));
293
+ }
294
+ if (params.mockType === 7) {
295
+ return createEventSequenceMockHandler(createTrophyCardShowcaseEvents(messageId));
296
+ }
297
+ }
298
+ return createConfigurableMockHandler({
299
+ text: params.text,
300
+ initialDelayMs: scenario.initialDelayMs,
301
+ chunkDelayMs: params.mockStreamChunkDelayMs,
302
+ chunkSize: params.mockStreamChunkSize,
303
+ streamFailureType: scenario.streamFailureType,
304
+ streamFailureAfterChunks: scenario.streamFailureAfterChunks,
305
+ });
306
+ }
307
+
308
+ export { createConfigurableMockHandler, createErrorMockResponse, createScenarioMockHandler, createSimpleMockHandler, getMockScenario };
@@ -0,0 +1,12 @@
1
+ import type { OpenRouterClientConfig, OpenRouterRequestBody, OpenRouterStreamResult } from './types';
2
+ export declare function callOpenRouterStream(config: OpenRouterClientConfig, body: OpenRouterRequestBody, signal: AbortSignal): Promise<OpenRouterStreamResult>;
3
+ export declare function guardedOpenRouterStreamStart(response: Response): Promise<{
4
+ ok: false;
5
+ error: import("@windrun-huaiin/contracts/ai").AIErrorPayload;
6
+ stream?: undefined;
7
+ } | {
8
+ ok: true;
9
+ stream: ReadableStream<Uint8Array<ArrayBufferLike>>;
10
+ error?: undefined;
11
+ }>;
12
+ //# sourceMappingURL=openrouter-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.d.ts","sourceRoot":"","sources":["../../../src/services/ai/openrouter-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAIjB,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAiCjC;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ;;;;;;;;GA4CnB"}