acrylblends 1.0.4 → 1.0.6
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/docs/framework/agents/index.md +7 -5
- package/lib/accept-CNNHu4Cf.js +193 -0
- package/lib/{accepts-XBuZPVRI.js → accepts-Btq83xPd.js} +1 -1
- package/lib/accepts.js +1 -1
- package/lib/acryl-base.js +1 -331
- package/lib/adapter-CaZ6FZUU.js +37 -0
- package/lib/adapter.js +1 -36
- package/lib/{app-BM0rTCp7.js → app-CQcGWjrk.js} +4 -4
- package/lib/app-base-CpRMZL4v.js +332 -0
- package/lib/{audit-D5z9uwOP.d.ts → audit-GcLtvNLV.d.ts} +4 -2
- package/lib/{base-NSN_SNv-.js → base-D_6kfOr-.js} +1 -1
- package/lib/basic-auth-C0HTRpXh.js +20 -0
- package/lib/basic-auth-DFLflXNe.js +95 -0
- package/lib/basic-auth.js +1 -94
- package/lib/bearer-auth-Cwxt-vgS.js +94 -0
- package/lib/bearer-auth.js +1 -93
- package/lib/body-D7f4e7w_.js +94 -0
- package/lib/body-limit-WmIjWRLt.js +66 -0
- package/lib/body-limit.js +1 -65
- package/lib/buffer-CkEOJCcY.js +51 -0
- package/lib/bun.js +3 -3
- package/lib/cache-B0bHH7s5.js +169 -0
- package/lib/cache.js +1 -168
- package/lib/{client-DDLXwhBo.js → client-BrMFnMEd.js} +1 -1
- package/lib/{client-modules-CLvWOjbd.js → client-modules-drj4mjhj.js} +4 -4
- package/lib/client.js +1 -1
- package/lib/color-COa3DplO.js +37 -0
- package/lib/combine-TWuGdcbC.js +137 -0
- package/lib/combine.js +1 -136
- package/lib/{components-cEW3ovK0.js → components-B2ka9Ax1.js} +4 -4
- package/lib/{components-JXVm45kK.js → components-PVXwaOaC.js} +2 -2
- package/lib/compress-BzWqsHF1.js +79 -0
- package/lib/compress-C-9vK4B2.d.ts +11 -0
- package/lib/compress-DCyrrQ5D.js +11 -0
- package/lib/compress.d.ts +1 -1
- package/lib/compress.js +2 -78
- package/lib/concurrent-DrF3d2c-.js +30 -0
- package/lib/conninfo-BCROmdnf.d.ts +11 -0
- package/lib/conninfo-CWJwieh4.js +19 -0
- package/lib/constants-CBSEudrb.js +7 -0
- package/lib/{context-DDO0cfuP.js → context-CkOh7Ygv.js} +2 -2
- package/lib/context-storage-iuPoI_CR.js +52 -0
- package/lib/context-storage.js +1 -51
- package/lib/cookie-B1LlkzOe.js +125 -0
- package/lib/cookie-BHIduy2T.js +82 -0
- package/lib/cookie.js +1 -81
- package/lib/cordis/db-sqlite.d.ts +1 -1
- package/lib/cordis/door.d.ts +99 -5
- package/lib/cordis/door.js +562 -20
- package/lib/cordis/inspect.js +4 -4
- package/lib/cordis/kv-db.d.ts +1 -1
- package/lib/cordis/kv-db.js +1 -1
- package/lib/cordis/kv-json.d.ts +1 -1
- package/lib/cordis/kv-json.js +1 -1
- package/lib/cordis/node-server.d.ts +1 -1
- package/lib/cordis/node-server.js +3 -116
- package/lib/cordis/router-http.js +2 -2
- package/lib/cordis/router.js +4 -4
- package/lib/cordis/state.js +7 -7
- package/lib/{core-CaY8XDZ6.js → core-BOu1jYua.js} +1 -1
- package/lib/cors-CbAQ-8qU.js +106 -0
- package/lib/cors.js +1 -105
- package/lib/crypto-iVP-N-tS.js +34 -0
- package/lib/csrf-DqqOZtgy.js +101 -0
- package/lib/csrf.js +1 -100
- package/lib/css-C5CPVMvM.js +134 -0
- package/lib/css.js +2 -133
- package/lib/db/sqlite.d.ts +1 -25
- package/lib/dev-CLgu-JRe.js +50 -0
- package/lib/dev.js +1 -49
- package/lib/dom-YjND9Jt3.js +74 -0
- package/lib/door/host.d.ts +2 -2
- package/lib/door/host.js +1 -1
- package/lib/door/page.d.ts +3 -1
- package/lib/door/page.js +2 -2
- package/lib/door/protocol.d.ts +1 -1
- package/lib/door/protocol.js +1 -212
- package/lib/encode-BhbNLrjp.js +33 -0
- package/lib/factory-CLdSf-xS.js +30 -0
- package/lib/factory.js +1 -29
- package/lib/handler-C0wZ0KwO.js +12 -0
- package/lib/helpers-BEjcdbgw.js +5 -0
- package/lib/{hooks-w72iLeFR.js → hooks-CfC07ri0.js} +1 -1
- package/lib/html-CgNa89xw.js +31 -0
- package/lib/html-DGExBFNg.js +103 -0
- package/lib/html.d.ts +2 -5
- package/lib/html.js +2 -30
- package/lib/http-exception-MjWkT89V.js +54 -0
- package/lib/http-exception.js +1 -53
- package/lib/index-dAzQsJG9.d.ts +6 -0
- package/lib/index.js +3 -3
- package/lib/ip-restriction-jKtKCRM_.js +166 -0
- package/lib/ip-restriction.js +1 -165
- package/lib/ipaddr-DCoIo528.js +238 -0
- package/lib/jsx/dom/client.js +1 -1
- package/lib/jsx/dom/jsx-dev-runtime.js +1 -1
- package/lib/jsx/dom/jsx-runtime.js +2 -1
- package/lib/jsx/dom/server.js +3 -3
- package/lib/jsx/dom.js +5 -73
- package/lib/jsx/jsx-dev-runtime.d.ts +2 -5
- package/lib/jsx/jsx-dev-runtime.js +2 -13
- package/lib/jsx/jsx-runtime.d.ts +2 -2
- package/lib/jsx/jsx-runtime.js +4 -4
- package/lib/jsx/streaming.js +1 -1
- package/lib/jsx-CUQgttxU.js +47 -0
- package/lib/jsx-dev-runtime-B4WTyq8r.js +14 -0
- package/lib/{jsx-dev-runtime-CWLRA2F3.js → jsx-dev-runtime-BLfA-EhI.js} +2 -2
- package/lib/jsx-dev-runtime-CGt4kNYr.d.ts +6 -0
- package/lib/jsx-renderer-CfifM4hT.js +99 -0
- package/lib/jsx-renderer.js +1 -98
- package/lib/jsx-runtime-COCRWBJ9.js +2 -0
- package/lib/jsx.js +5 -46
- package/lib/{jwk-LkzeoaU8.js → jwk-CDPpYQpD.js} +3 -3
- package/lib/jwk.js +1 -1
- package/lib/{jwt-BGJBw5AF.js → jwt-BXoIA2fQ.js} +2 -2
- package/lib/{jwt-CskdhEW9.js → jwt-lyS4Q3mT.js} +3 -3
- package/lib/jwt.js +2 -2
- package/lib/kv/db.d.ts +1 -10
- package/lib/kv/db.js +1 -56
- package/lib/kv/json.d.ts +1 -9
- package/lib/kv/json.js +1 -223
- package/lib/{language-D9a4zqvn.js → language-DeGRtLJt.js} +2 -2
- package/lib/language.js +1 -1
- package/lib/{linear-router-C3FPib6h.js → linear-router-CmZn_JLV.js} +2 -2
- package/lib/logger-Ckxu8diz.js +54 -0
- package/lib/logger.js +1 -53
- package/lib/loopback-only-BbasoF7R.js +90 -0
- package/lib/loopback-only.js +1 -89
- package/lib/method-not-allowed-TO2_hnfl.js +82 -0
- package/lib/method-not-allowed.js +1 -81
- package/lib/method-override-DnZKfJbV.js +103 -0
- package/lib/method-override.js +1 -102
- package/lib/middleware-BfG_fp8P.js +12 -0
- package/lib/mime-BnScXkQn.js +77 -0
- package/lib/mount-QkK_3NtJ.js +67 -0
- package/lib/mount.js +1 -66
- package/lib/node-server/conninfo.d.ts +1 -10
- package/lib/node-server/conninfo.js +1 -18
- package/lib/node-server/register.js +25 -2
- package/lib/node-server/serve-static.d.ts +1 -17
- package/lib/node-server/serve-static.js +1 -1
- package/lib/node-server.d.ts +2 -2
- package/lib/node-server.js +4 -4
- package/lib/open-BqK4D2Wn.d.ts +11 -0
- package/lib/open-But9E2rL.js +57 -0
- package/lib/open-CULVJgOc.d.ts +12 -0
- package/lib/open-Dp4sxspc.js +224 -0
- package/lib/open-T7kgbO2O.d.ts +27 -0
- package/lib/{pattern-router-HZxjDGEQ.js → pattern-router-CJBecJBd.js} +1 -1
- package/lib/powered-by-CXQNjNIX.js +24 -0
- package/lib/powered-by.js +1 -23
- package/lib/pretty-json-CeC1yvYt.js +39 -0
- package/lib/pretty-json.js +1 -38
- package/lib/{protocol-C37gPePD.d.ts → protocol-CR31M7K_.d.ts} +2 -0
- package/lib/protocol-Dt0AZBOz.js +213 -0
- package/lib/proxy-C2w_mH7k.js +121 -0
- package/lib/proxy.js +1 -120
- package/lib/quick.js +4 -4
- package/lib/{reg-exp-router-DC1R3qoY.js → reg-exp-router-C_WV84eV.js} +2 -2
- package/lib/request-DvMgGtlW.js +323 -0
- package/lib/request.js +1 -322
- package/lib/route-D8m-a2I1.js +126 -0
- package/lib/route.js +1 -125
- package/lib/router/linear-router.js +1 -1
- package/lib/router/pattern-router.js +1 -1
- package/lib/router/reg-exp-router.js +1 -1
- package/lib/router/smart-router.js +1 -1
- package/lib/router/trie-router.js +1 -1
- package/lib/router-Be_o6nFu.js +35 -0
- package/lib/router.js +1 -34
- package/lib/schema-validator-EK3cUUCt.js +22 -0
- package/lib/schema-validator.js +1 -21
- package/lib/{secure-headers-mP3j6Hm6.js → secure-headers-C5ZOcXqk.js} +1 -1
- package/lib/secure-headers.js +1 -1
- package/lib/serve-static-B7sqnftW.d.ts +18 -0
- package/lib/{serve-static-3uo_9rjF.js → serve-static-C1Nkj_xB.js} +2 -2
- package/lib/{serve-static-Cp5adzGo.js → serve-static-EiJf1zkO.js} +4 -4
- package/lib/serve-static.js +1 -1
- package/lib/{smart-router-C5CZ5XSM.js → smart-router-BjxkDQCE.js} +1 -1
- package/lib/{snapshot-text-BLz8nlSc.js → snapshot-text-CtQm3n8n.js} +23 -14
- package/lib/{src-dy3Fk9tA.js → src-BTBm4OPD.js} +6 -6
- package/lib/src-LX0E4ec4.js +117 -0
- package/lib/{ssg-BwjcA-Ge.js → ssg-BEl7MHqg.js} +5 -5
- package/lib/ssg.js +1 -1
- package/lib/stream-CzM_SHkq.js +88 -0
- package/lib/{streaming-DHST3Scg.js → streaming-BlDaph8U.js} +3 -3
- package/lib/streaming.js +1 -1
- package/lib/{test-websocket-D8WWqE5G.js → test-websocket-BLeEvybj.js} +2 -2
- package/lib/testing-BQx5T_UX.js +17 -0
- package/lib/testing.js +1 -16
- package/lib/timeout-FeqZ9A-0.js +42 -0
- package/lib/timeout.js +1 -41
- package/lib/tiny.js +2 -2
- package/lib/trailing-slash-DwTx-1sk.js +85 -0
- package/lib/trailing-slash.js +1 -84
- package/lib/{trie-router-CfFbapzL.js → trie-router-JydLKUa2.js} +2 -2
- package/lib/url-BPh4d6j-.js +197 -0
- package/lib/utils/accept.js +1 -192
- package/lib/utils/basic-auth.js +1 -19
- package/lib/utils/body.js +1 -93
- package/lib/utils/buffer.js +1 -50
- package/lib/utils/color.js +1 -36
- package/lib/utils/compress.d.ts +1 -10
- package/lib/utils/compress.js +1 -10
- package/lib/utils/concurrent.js +1 -29
- package/lib/utils/constants.js +1 -6
- package/lib/utils/cookie.js +1 -124
- package/lib/utils/crypto.js +1 -33
- package/lib/utils/encode.js +1 -32
- package/lib/utils/handler.js +1 -11
- package/lib/utils/html.js +1 -102
- package/lib/utils/ipaddr.js +1 -237
- package/lib/utils/jwt.js +1 -1
- package/lib/utils/mime.js +1 -76
- package/lib/utils/stream.js +1 -87
- package/lib/utils/url.js +1 -196
- package/lib/{validator-D84mq-dO.js → validator-Btiyt5VJ.js} +3 -3
- package/lib/validator.js +1 -1
- package/lib/websocket-DsyBIKVA.js +56 -0
- package/lib/ws.js +1 -55
- package/package.json +1 -1
- package/plugins/acryl-door/src/cli/acryl.ts +36 -5
- package/plugins/acryl-door/src/host/channel.ts +14 -6
- package/plugins/acryl-door/src/host/chat-tools.ts +2 -0
- package/plugins/acryl-door/src/host/door.ts +97 -12
- package/plugins/acryl-door/src/host/page-routes.ts +3 -1
- package/plugins/acryl-door/src/host/shell.ts +147 -0
- package/plugins/acryl-door/src/host/shim.ts +39 -3
- package/plugins/acryl-door/src/host/verbs.ts +39 -2
- package/plugins/acryl-door/src/index.ts +22 -3
- package/plugins/acryl-door/src/page/channel.ts +3 -1
- package/plugins/acryl-door/src/page/index.ts +2 -1
- package/plugins/acryl-door/src/page/protocol.ts +2 -0
- package/plugins/acryl-door/src/shell/protocol.ts +130 -0
- package/plugins/acryl-node-server/src/register.ts +29 -2
- package/plugins/agent/model.ts +6 -1
- package/plugins/agent/tools.ts +12 -2
- package/plugins/agent-panel/client/describe.ts +44 -0
- package/plugins/agent-panel/client/main.ts +4 -1
- package/plugins/agent-panel/headless.ts +29 -8
- package/plugins/agent-panel/index.ts +22 -10
- package/plugins/agent-panel/launch.ts +67 -0
- package/plugins/desktop/attach.ts +72 -0
- package/plugins/desktop/door-shell.ts +379 -0
- package/plugins/desktop/main.ts +82 -15
- package/plugins/extensions/index.ts +3 -4
- package/plugins/extensions/stage.ts +33 -5
- package/plugins/openai/index.ts +1 -1
- package/templates/agent/AGENTS.md +4 -0
- package/templates/agent/blend.yaml +4 -1
- package/templates/agent/src/app.ts +2 -0
- package/templates/agent/src/routes.ts +1 -1
- package/templates/agent/template.json +1 -0
- package/templates/agent/test/builder.test.ts +26 -21
- package/lib/helpers-CvTauQT5.js +0 -5
- package/lib/middleware-CPQ8himN.js +0 -12
- package/plugins/acryl-router/src/connection.d.ts +0 -25
- package/plugins/acryl-router/src/core/app-base.d.ts +0 -215
- package/plugins/acryl-router/src/core/app.d.ts +0 -19
- package/plugins/acryl-router/src/core/client/client.d.ts +0 -4
- package/plugins/acryl-router/src/core/client/fetch-result-please.d.ts +0 -35
- package/plugins/acryl-router/src/core/client/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/client/types.d.ts +0 -229
- package/plugins/acryl-router/src/core/client/utils.d.ts +0 -18
- package/plugins/acryl-router/src/core/compose.d.ts +0 -14
- package/plugins/acryl-router/src/core/context.d.ts +0 -443
- package/plugins/acryl-router/src/core/helper/accepts/accepts.d.ts +0 -30
- package/plugins/acryl-router/src/core/helper/accepts/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/helper/conninfo/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/helper/conninfo/types.d.ts +0 -36
- package/plugins/acryl-router/src/core/helper/cookie/index.d.ts +0 -25
- package/plugins/acryl-router/src/core/helper/css/common.d.ts +0 -59
- package/plugins/acryl-router/src/core/helper/css/index.d.ts +0 -80
- package/plugins/acryl-router/src/core/helper/dev/index.d.ts +0 -20
- package/plugins/acryl-router/src/core/helper/factory/index.d.ts +0 -82
- package/plugins/acryl-router/src/core/helper/html/index.d.ts +0 -8
- package/plugins/acryl-router/src/core/helper/proxy/index.d.ts +0 -73
- package/plugins/acryl-router/src/core/helper/route/index.d.ts +0 -75
- package/plugins/acryl-router/src/core/helper/ssg/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/helper/ssg/middleware.d.ts +0 -44
- package/plugins/acryl-router/src/core/helper/ssg/plugins.d.ts +0 -27
- package/plugins/acryl-router/src/core/helper/ssg/ssg.d.ts +0 -91
- package/plugins/acryl-router/src/core/helper/ssg/utils.d.ts +0 -16
- package/plugins/acryl-router/src/core/helper/streaming/index.d.ts +0 -8
- package/plugins/acryl-router/src/core/helper/streaming/sse.d.ts +0 -13
- package/plugins/acryl-router/src/core/helper/streaming/stream.d.ts +0 -3
- package/plugins/acryl-router/src/core/helper/streaming/text.d.ts +0 -3
- package/plugins/acryl-router/src/core/helper/streaming/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/helper/testing/index.d.ts +0 -13
- package/plugins/acryl-router/src/core/helper/websocket/index.d.ts +0 -70
- package/plugins/acryl-router/src/core/http-exception.d.ts +0 -58
- package/plugins/acryl-router/src/core/index.d.ts +0 -37
- package/plugins/acryl-router/src/core/jsx/base.d.ts +0 -61
- package/plugins/acryl-router/src/core/jsx/children.d.ts +0 -9
- package/plugins/acryl-router/src/core/jsx/components.d.ts +0 -15
- package/plugins/acryl-router/src/core/jsx/constants.d.ts +0 -6
- package/plugins/acryl-router/src/core/jsx/context.d.ts +0 -51
- package/plugins/acryl-router/src/core/jsx/dom/components.d.ts +0 -10
- package/plugins/acryl-router/src/core/jsx/dom/context.d.ts +0 -3
- package/plugins/acryl-router/src/core/jsx/dom/css.d.ts +0 -83
- package/plugins/acryl-router/src/core/jsx/dom/hooks/index.d.ts +0 -39
- package/plugins/acryl-router/src/core/jsx/dom/intrinsic-element/components.d.ts +0 -16
- package/plugins/acryl-router/src/core/jsx/dom/jsx-dev-runtime.d.ts +0 -8
- package/plugins/acryl-router/src/core/jsx/dom/jsx-runtime.d.ts +0 -7
- package/plugins/acryl-router/src/core/jsx/dom/render.d.ts +0 -73
- package/plugins/acryl-router/src/core/jsx/dom/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/jsx/hooks/index.d.ts +0 -47
- package/plugins/acryl-router/src/core/jsx/index.d.ts +0 -76
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/common.d.ts +0 -6
- package/plugins/acryl-router/src/core/jsx/intrinsic-element/components.d.ts +0 -13
- package/plugins/acryl-router/src/core/jsx/intrinsic-elements.d.ts +0 -735
- package/plugins/acryl-router/src/core/jsx/streaming.d.ts +0 -36
- package/plugins/acryl-router/src/core/jsx/types.d.ts +0 -36
- package/plugins/acryl-router/src/core/jsx/utils.d.ts +0 -4
- package/plugins/acryl-router/src/core/request/constants.d.ts +0 -1
- package/plugins/acryl-router/src/core/request.d.ts +0 -306
- package/plugins/acryl-router/src/core/router/reg-exp-router/index.d.ts +0 -6
- package/plugins/acryl-router/src/core/router/reg-exp-router/matcher.d.ts +0 -7
- package/plugins/acryl-router/src/core/router/reg-exp-router/node.d.ts +0 -13
- package/plugins/acryl-router/src/core/router/reg-exp-router/prepared-router.d.ts +0 -17
- package/plugins/acryl-router/src/core/router/reg-exp-router/router.d.ts +0 -11
- package/plugins/acryl-router/src/core/router/reg-exp-router/trie.d.ts +0 -8
- package/plugins/acryl-router/src/core/router/smart-router/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/router/smart-router/router.d.ts +0 -11
- package/plugins/acryl-router/src/core/router/trie-router/index.d.ts +0 -5
- package/plugins/acryl-router/src/core/router/trie-router/node.d.ts +0 -6
- package/plugins/acryl-router/src/core/router/trie-router/router.d.ts +0 -7
- package/plugins/acryl-router/src/core/router/utils.d.ts +0 -1
- package/plugins/acryl-router/src/core/router.d.ts +0 -97
- package/plugins/acryl-router/src/core/types.d.ts +0 -573
- package/plugins/acryl-router/src/core/utils/accept.d.ts +0 -6
- package/plugins/acryl-router/src/core/utils/body.d.ts +0 -79
- package/plugins/acryl-router/src/core/utils/buffer.d.ts +0 -17
- package/plugins/acryl-router/src/core/utils/color.d.ts +0 -21
- package/plugins/acryl-router/src/core/utils/concurrent.d.ts +0 -11
- package/plugins/acryl-router/src/core/utils/constants.d.ts +0 -4
- package/plugins/acryl-router/src/core/utils/cookie.d.ts +0 -41
- package/plugins/acryl-router/src/core/utils/crypto.d.ts +0 -15
- package/plugins/acryl-router/src/core/utils/handler.d.ts +0 -6
- package/plugins/acryl-router/src/core/utils/headers.d.ts +0 -8
- package/plugins/acryl-router/src/core/utils/html.d.ts +0 -44
- package/plugins/acryl-router/src/core/utils/http-status.d.ts +0 -32
- package/plugins/acryl-router/src/core/utils/mime.d.ts +0 -70
- package/plugins/acryl-router/src/core/utils/stream.d.ts +0 -31
- package/plugins/acryl-router/src/core/utils/types.d.ts +0 -128
- package/plugins/acryl-router/src/core/utils/url.d.ts +0 -44
- package/plugins/acryl-router/src/core/validator/index.d.ts +0 -7
- package/plugins/acryl-router/src/core/validator/utils.d.ts +0 -29
- package/plugins/acryl-router/src/core/validator/validator.d.ts +0 -16
- package/plugins/acryl-router/src/helpers/index.d.ts +0 -17
- package/plugins/acryl-router/src/helpers/schema-validator.d.ts +0 -54
package/lib/cordis/inspect.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as Acryl } from "../app-
|
|
2
|
-
import { loopbackOnly } from "../loopback-only.js";
|
|
3
|
-
import "../src-
|
|
4
|
-
import "../middleware-
|
|
1
|
+
import { t as Acryl } from "../app-CQcGWjrk.js";
|
|
2
|
+
import { i as loopbackOnly } from "../loopback-only-BbasoF7R.js";
|
|
3
|
+
import "../src-BTBm4OPD.js";
|
|
4
|
+
import "../middleware-BfG_fp8P.js";
|
|
5
5
|
import { Service } from "@deepseek-ai/cordis";
|
|
6
6
|
//#region ../../plugins/acryl-inspect/src/report.ts
|
|
7
7
|
/**
|
package/lib/cordis/kv-db.d.ts
CHANGED
package/lib/cordis/kv-db.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "../src-DRFVEQQb.js";
|
|
2
|
-
import { kvOnDb } from "../
|
|
2
|
+
import { t as kvOnDb } from "../open-But9E2rL.js";
|
|
3
3
|
import z from "@deepseek-ai/schemastery";
|
|
4
4
|
//#region ../../plugins/acryl-kv-db/src/index.ts
|
|
5
5
|
/** Stable Cordis plugin name, equal to the package name and the Loader row id. */
|
package/lib/cordis/kv-json.d.ts
CHANGED
package/lib/cordis/kv-json.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "../src-DRFVEQQb.js";
|
|
2
|
-
import { openKv } from "../
|
|
2
|
+
import { t as openKv } from "../open-Dp4sxspc.js";
|
|
3
3
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import z from "@deepseek-ai/schemastery";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as UpgradeHubOptions, i as testWebSocket, l as UpgradeRouter, n as TestWebSocketOptions, o as UpgradeEmitter, p as WebSocketLike, r as TestWebSocketResult, s as UpgradeHub, t as TestSocket, u as RequestError } from "../test-websocket-DyeS50Tr.js";
|
|
2
2
|
import { n as UpgradeWebSocket } from "../index-C-SklY6u.js";
|
|
3
|
-
import {
|
|
3
|
+
import { n as serveStatic, t as ServeStaticOptions } from "../serve-static-B7sqnftW.js";
|
|
4
4
|
import { Context, Service } from "@deepseek-ai/cordis";
|
|
5
5
|
import z from "@deepseek-ai/schemastery";
|
|
6
6
|
|
|
@@ -1,117 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as serveStatic } from "../serve-static-
|
|
3
|
-
import {
|
|
4
|
-
import z from "@deepseek-ai/schemastery";
|
|
5
|
-
//#region ../../plugins/acryl-node-server/src/index.ts
|
|
6
|
-
/** Stable Cordis plugin name, equal to the package name and the Loader row id. */
|
|
7
|
-
const name = "acryl-node-server";
|
|
8
|
-
const inject = ["router"];
|
|
9
|
-
/** Every field has a default, so a caller passes only what it changes: `ctx.plugin(plugin, { ... })` takes the partial shape. */
|
|
10
|
-
const Config = z.object({
|
|
11
|
-
hostname: z.string().default("127.0.0.1").description("Address to bind. Loopback by default; binding elsewhere exposes the app to the network."),
|
|
12
|
-
port: z.number().min(0).max(65535).default(0).description("Port to listen on; 0 lets the system choose. A taken port is followed by the next free one."),
|
|
13
|
-
scan: z.number().min(0).default(20).description("How many further ports to try when the configured one is taken."),
|
|
14
|
-
websocket: z.object({
|
|
15
|
-
maxPayload: z.number().min(1).default(1024 * 1024).description("The largest WebSocket frame accepted, in bytes; a bigger one closes the socket with 1009."),
|
|
16
|
-
heartbeat: z.number().min(0).default(3e4).description("Milliseconds between pings; a peer that did not answer the last one is terminated. 0 turns it off."),
|
|
17
|
-
grace: z.number().min(0).default(2e3).description("Milliseconds a closing socket gets before it is terminated when its plugin unloads.")
|
|
18
|
-
}).default({})
|
|
19
|
-
});
|
|
20
|
-
var NodeServer = class extends Service {
|
|
21
|
-
hostname;
|
|
22
|
-
config;
|
|
23
|
-
server;
|
|
24
|
-
hub;
|
|
25
|
-
bound = 0;
|
|
26
|
-
constructor(ctx, config) {
|
|
27
|
-
super(ctx, "nodeServer");
|
|
28
|
-
this.config = config;
|
|
29
|
-
this.hostname = config.hostname;
|
|
30
|
-
const router = ctx.router;
|
|
31
|
-
this.server = createAdaptorServer({
|
|
32
|
-
fetch: (request, { incoming }) => router.fetch(new Request(request), {
|
|
33
|
-
remoteAddress: incoming.socket.remoteAddress,
|
|
34
|
-
localPort: incoming.socket.localPort
|
|
35
|
-
}),
|
|
36
|
-
hostname: config.hostname,
|
|
37
|
-
overrideGlobalObjects: false
|
|
38
|
-
});
|
|
39
|
-
ctx.effect(() => async () => {
|
|
40
|
-
await this.hub?.close();
|
|
41
|
-
this.server.closeAllConnections();
|
|
42
|
-
if (this.server.listening) await new Promise((resolve) => {
|
|
43
|
-
this.server.close(() => {
|
|
44
|
-
resolve();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
}, "acryl-node-server: close listener and open connections");
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* `upgradeWebSocket` for the plugin that asks (call it once, in `apply`): `app.get('/ws', upgrade((c) => ({ onMessage(event, ws) { ... } })))`. Checks go in ordinary middleware on the
|
|
51
|
-
* route, and a handler that returns a `Response` refuses the upgrade with that status before any handshake. Every socket it accepts belongs to the calling plugin: when the plugin
|
|
52
|
-
* unloads they are closed with 1001 within `websocket.grace` and the handler sees `close` once. Pass `{ textOnly: true }` to drop binary frames. Needs the `ws` package.
|
|
53
|
-
*/
|
|
54
|
-
upgrades() {
|
|
55
|
-
if (!this.hub) {
|
|
56
|
-
this.hub = new UpgradeHub(this.config.websocket);
|
|
57
|
-
this.hub.attach(this.server, this.ctx.router);
|
|
58
|
-
}
|
|
59
|
-
return this.hub.upgradeWebSocketFor(this.ctx);
|
|
60
|
-
}
|
|
61
|
-
/** How many WebSocket connections are open now. */
|
|
62
|
-
get sockets() {
|
|
63
|
-
return this.hub?.size ?? 0;
|
|
64
|
-
}
|
|
65
|
-
/** The port in use, 0 before the server listens. */
|
|
66
|
-
get port() {
|
|
67
|
-
return this.bound;
|
|
68
|
-
}
|
|
69
|
-
/** The address clients use. */
|
|
70
|
-
get url() {
|
|
71
|
-
return `http://${this.hostname.includes(":") ? `[${this.hostname}]` : this.hostname}:${String(this.bound)}`;
|
|
72
|
-
}
|
|
73
|
-
/** Bind, scanning past taken ports. */
|
|
74
|
-
async listen() {
|
|
75
|
-
const { port, scan, hostname } = this.config;
|
|
76
|
-
const last = port === 0 ? 0 : Math.min(65535, port + scan);
|
|
77
|
-
for (let candidate = port; candidate <= last; candidate += 1) try {
|
|
78
|
-
await new Promise((resolve, reject) => {
|
|
79
|
-
const onError = (error) => {
|
|
80
|
-
reject(error);
|
|
81
|
-
};
|
|
82
|
-
this.server.once("error", onError);
|
|
83
|
-
this.server.listen(candidate, hostname, () => {
|
|
84
|
-
this.server.off("error", onError);
|
|
85
|
-
resolve();
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
this.bound = this.server.address().port;
|
|
89
|
-
return;
|
|
90
|
-
} catch (error) {
|
|
91
|
-
if (!isPortUnavailable(error)) throw error;
|
|
92
|
-
}
|
|
93
|
-
throw new Error(`acryl-node-server: no free port from ${String(port)} to ${String(last)} on ${hostname}`);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* Whether a failed bind means "this port, try the next one". A port another socket holds answers `EADDRINUSE` everywhere. On Windows a port
|
|
98
|
-
* inside a range the system reserves (Hyper-V, WSL and Docker exclude ranges, `netsh interface ipv4 show excludedportrange`) answers
|
|
99
|
-
* `EACCES`, which is a property of that port too; elsewhere `EACCES` means the process may not bind low ports at all, so moving on would
|
|
100
|
-
* only hide the reason.
|
|
101
|
-
*/
|
|
102
|
-
function isPortUnavailable(error, platform = process.platform) {
|
|
103
|
-
const code = error?.code;
|
|
104
|
-
return code === "EADDRINUSE" || platform === "win32" && code === "EACCES";
|
|
105
|
-
}
|
|
106
|
-
/** Loads once the server listens, so a plugin that injects `nodeServer` can rely on `url`. A failure to bind fails the plugin. */
|
|
107
|
-
async function apply(ctx, config = {}) {
|
|
108
|
-
await new NodeServer(ctx, {
|
|
109
|
-
hostname: "127.0.0.1",
|
|
110
|
-
port: 0,
|
|
111
|
-
scan: 20,
|
|
112
|
-
websocket: {},
|
|
113
|
-
...config
|
|
114
|
-
}).listen();
|
|
115
|
-
}
|
|
116
|
-
//#endregion
|
|
1
|
+
import { l as RequestError, n as UpgradeEmitter, r as UpgradeHub, t as testWebSocket } from "../test-websocket-BLeEvybj.js";
|
|
2
|
+
import { t as serveStatic } from "../serve-static-C1Nkj_xB.js";
|
|
3
|
+
import { a as isPortUnavailable, i as inject, n as NodeServer, o as name, r as apply, t as Config } from "../src-LX0E4ec4.js";
|
|
117
4
|
export { Config, NodeServer, RequestError, UpgradeEmitter, UpgradeHub, apply, inject, isPortUnavailable, name, serveStatic, testWebSocket };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as UpgradeEmitter, r as UpgradeHub } from "../test-websocket-
|
|
2
|
-
import "
|
|
1
|
+
import { n as UpgradeEmitter, r as UpgradeHub } from "../test-websocket-BLeEvybj.js";
|
|
2
|
+
import "../src-LX0E4ec4.js";
|
|
3
3
|
import { Readable } from "node:stream";
|
|
4
4
|
import { Service } from "@deepseek-ai/cordis";
|
|
5
5
|
import { pipeline } from "node:stream/promises";
|
package/lib/cordis/router.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { HTTPException } from "../http-exception.js";
|
|
2
|
-
import { t as Context } from "../context-
|
|
3
|
-
import { t as Acryl } from "../app-
|
|
1
|
+
import { t as HTTPException } from "../http-exception-MjWkT89V.js";
|
|
2
|
+
import { t as Context } from "../context-CkOh7Ygv.js";
|
|
3
|
+
import { t as Acryl } from "../app-CQcGWjrk.js";
|
|
4
4
|
import { n as getConnInfo, t as connectionOf } from "../connection-C7xgP1hP.js";
|
|
5
|
-
import { i as name, n as Router, r as apply, t as Config } from "../src-
|
|
5
|
+
import { i as name, n as Router, r as apply, t as Config } from "../src-BTBm4OPD.js";
|
|
6
6
|
export { Acryl, Config, Context, HTTPException, Router, apply, connectionOf, getConnInfo, name };
|
package/lib/cordis/state.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { t as Acryl } from "../app-
|
|
2
|
-
import { methodNotAllowed } from "../method-not-allowed.js";
|
|
3
|
-
import { r as streamSSE } from "../streaming-
|
|
4
|
-
import { loopbackOnly } from "../loopback-only.js";
|
|
5
|
-
import "../helpers-
|
|
6
|
-
import "../src-
|
|
7
|
-
import "../middleware-
|
|
1
|
+
import { t as Acryl } from "../app-CQcGWjrk.js";
|
|
2
|
+
import { t as methodNotAllowed } from "../method-not-allowed-TO2_hnfl.js";
|
|
3
|
+
import { r as streamSSE } from "../streaming-BlDaph8U.js";
|
|
4
|
+
import { i as loopbackOnly } from "../loopback-only-BbasoF7R.js";
|
|
5
|
+
import "../helpers-BEjcdbgw.js";
|
|
6
|
+
import "../src-BTBm4OPD.js";
|
|
7
|
+
import "../middleware-BfG_fp8P.js";
|
|
8
8
|
import { Service } from "@deepseek-ai/cordis";
|
|
9
9
|
//#region ../../plugins/acryl-state/src/cell.ts
|
|
10
10
|
/** A writable cell. `report` receives anything a listener throws; one failing listener never blocks the others. */
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/middleware/cors/index.ts
|
|
2
|
+
/**
|
|
3
|
+
* CORS Middleware for Acryl.
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* @param {CORSOptions} [options] - The options for the CORS middleware.
|
|
7
|
+
* @param {string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
|
|
8
|
+
* @param {string[] | ((origin: string, c: Context) => Promise<string[]> | string[])} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'QUERY']] - The value of "Access-Control-Allow-Methods" CORS header.
|
|
9
|
+
* @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
|
|
10
|
+
* @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
|
|
11
|
+
* @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
|
|
12
|
+
* @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
|
|
13
|
+
* @returns {MiddlewareHandler} The middleware handler function.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const app = new Acryl()
|
|
18
|
+
*
|
|
19
|
+
* app.use('/api/*', cors())
|
|
20
|
+
* app.use(
|
|
21
|
+
* '/api2/*',
|
|
22
|
+
* cors({
|
|
23
|
+
* origin: 'http://example.com',
|
|
24
|
+
* allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
|
|
25
|
+
* allowMethods: ['POST', 'GET', 'OPTIONS'],
|
|
26
|
+
* exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
|
|
27
|
+
* maxAge: 600,
|
|
28
|
+
* credentials: true,
|
|
29
|
+
* })
|
|
30
|
+
* )
|
|
31
|
+
*
|
|
32
|
+
* app.all('/api/abc', (c) => {
|
|
33
|
+
* return c.json({ success: true })
|
|
34
|
+
* })
|
|
35
|
+
* app.all('/api2/abc', (c) => {
|
|
36
|
+
* return c.json({ success: true })
|
|
37
|
+
* })
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
const cors = (options) => {
|
|
41
|
+
const opts = {
|
|
42
|
+
origin: "*",
|
|
43
|
+
allowMethods: [
|
|
44
|
+
"GET",
|
|
45
|
+
"HEAD",
|
|
46
|
+
"PUT",
|
|
47
|
+
"POST",
|
|
48
|
+
"DELETE",
|
|
49
|
+
"PATCH",
|
|
50
|
+
"QUERY"
|
|
51
|
+
],
|
|
52
|
+
allowHeaders: [],
|
|
53
|
+
exposeHeaders: [],
|
|
54
|
+
...options
|
|
55
|
+
};
|
|
56
|
+
const exposeHeadersStr = opts.exposeHeaders?.length ? opts.exposeHeaders.join(",") : void 0;
|
|
57
|
+
const allowHeadersStr = opts.allowHeaders?.length ? opts.allowHeaders.join(",") : void 0;
|
|
58
|
+
const findAllowOrigin = ((optsOrigin) => {
|
|
59
|
+
if (typeof optsOrigin === "string") if (optsOrigin === "*") return () => optsOrigin;
|
|
60
|
+
else return (origin) => optsOrigin === origin ? origin : null;
|
|
61
|
+
else if (typeof optsOrigin === "function") return optsOrigin;
|
|
62
|
+
else return (origin) => optsOrigin.includes(origin) ? origin : null;
|
|
63
|
+
})(opts.origin);
|
|
64
|
+
const findAllowMethods = ((optsAllowMethods) => {
|
|
65
|
+
if (typeof optsAllowMethods === "function") return async (origin, c) => (await optsAllowMethods(origin, c)).join(",");
|
|
66
|
+
else if (Array.isArray(optsAllowMethods)) {
|
|
67
|
+
const methodsStr = optsAllowMethods.join(",");
|
|
68
|
+
return () => methodsStr;
|
|
69
|
+
} else return () => "";
|
|
70
|
+
})(opts.allowMethods);
|
|
71
|
+
return async function cors(c, next) {
|
|
72
|
+
function set(key, value) {
|
|
73
|
+
c.res.headers.set(key, value);
|
|
74
|
+
}
|
|
75
|
+
const allowOrigin = await findAllowOrigin(c.req.header("origin") || "", c);
|
|
76
|
+
if (allowOrigin) set("Access-Control-Allow-Origin", allowOrigin);
|
|
77
|
+
if (opts.credentials) set("Access-Control-Allow-Credentials", "true");
|
|
78
|
+
if (exposeHeadersStr) set("Access-Control-Expose-Headers", exposeHeadersStr);
|
|
79
|
+
if (c.req.method === "OPTIONS") {
|
|
80
|
+
if (opts.origin !== "*") c.res.headers.append("Vary", "Origin");
|
|
81
|
+
if (opts.maxAge != null) set("Access-Control-Max-Age", opts.maxAge.toString());
|
|
82
|
+
const allowMethods = await findAllowMethods(c.req.header("origin") || "", c);
|
|
83
|
+
if (allowMethods) set("Access-Control-Allow-Methods", allowMethods);
|
|
84
|
+
let headersStr = allowHeadersStr;
|
|
85
|
+
if (!headersStr) {
|
|
86
|
+
const requestHeaders = c.req.header("Access-Control-Request-Headers");
|
|
87
|
+
if (requestHeaders) headersStr = requestHeaders.split(",").map((h) => h.trim()).join(",");
|
|
88
|
+
}
|
|
89
|
+
if (headersStr) {
|
|
90
|
+
set("Access-Control-Allow-Headers", headersStr);
|
|
91
|
+
c.res.headers.append("Vary", "Access-Control-Request-Headers");
|
|
92
|
+
}
|
|
93
|
+
c.res.headers.delete("Content-Length");
|
|
94
|
+
c.res.headers.delete("Content-Type");
|
|
95
|
+
return new Response(null, {
|
|
96
|
+
headers: c.res.headers,
|
|
97
|
+
status: 204,
|
|
98
|
+
statusText: "No Content"
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
await next();
|
|
102
|
+
if (opts.origin !== "*") c.header("Vary", "Origin", { append: true });
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
//#endregion
|
|
106
|
+
export { cors as t };
|
package/lib/cors.js
CHANGED
|
@@ -1,106 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* CORS Middleware for Acryl.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @param {CORSOptions} [options] - The options for the CORS middleware.
|
|
7
|
-
* @param {string | string[] | ((origin: string, c: Context) => Promise<string | undefined | null> | string | undefined | null)} [options.origin='*'] - The value of "Access-Control-Allow-Origin" CORS header.
|
|
8
|
-
* @param {string[] | ((origin: string, c: Context) => Promise<string[]> | string[])} [options.allowMethods=['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH', 'QUERY']] - The value of "Access-Control-Allow-Methods" CORS header.
|
|
9
|
-
* @param {string[]} [options.allowHeaders=[]] - The value of "Access-Control-Allow-Headers" CORS header.
|
|
10
|
-
* @param {number} [options.maxAge] - The value of "Access-Control-Max-Age" CORS header.
|
|
11
|
-
* @param {boolean} [options.credentials] - The value of "Access-Control-Allow-Credentials" CORS header.
|
|
12
|
-
* @param {string[]} [options.exposeHeaders=[]] - The value of "Access-Control-Expose-Headers" CORS header.
|
|
13
|
-
* @returns {MiddlewareHandler} The middleware handler function.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```ts
|
|
17
|
-
* const app = new Acryl()
|
|
18
|
-
*
|
|
19
|
-
* app.use('/api/*', cors())
|
|
20
|
-
* app.use(
|
|
21
|
-
* '/api2/*',
|
|
22
|
-
* cors({
|
|
23
|
-
* origin: 'http://example.com',
|
|
24
|
-
* allowHeaders: ['X-Custom-Header', 'Upgrade-Insecure-Requests'],
|
|
25
|
-
* allowMethods: ['POST', 'GET', 'OPTIONS'],
|
|
26
|
-
* exposeHeaders: ['Content-Length', 'X-Kuma-Revision'],
|
|
27
|
-
* maxAge: 600,
|
|
28
|
-
* credentials: true,
|
|
29
|
-
* })
|
|
30
|
-
* )
|
|
31
|
-
*
|
|
32
|
-
* app.all('/api/abc', (c) => {
|
|
33
|
-
* return c.json({ success: true })
|
|
34
|
-
* })
|
|
35
|
-
* app.all('/api2/abc', (c) => {
|
|
36
|
-
* return c.json({ success: true })
|
|
37
|
-
* })
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
const cors = (options) => {
|
|
41
|
-
const opts = {
|
|
42
|
-
origin: "*",
|
|
43
|
-
allowMethods: [
|
|
44
|
-
"GET",
|
|
45
|
-
"HEAD",
|
|
46
|
-
"PUT",
|
|
47
|
-
"POST",
|
|
48
|
-
"DELETE",
|
|
49
|
-
"PATCH",
|
|
50
|
-
"QUERY"
|
|
51
|
-
],
|
|
52
|
-
allowHeaders: [],
|
|
53
|
-
exposeHeaders: [],
|
|
54
|
-
...options
|
|
55
|
-
};
|
|
56
|
-
const exposeHeadersStr = opts.exposeHeaders?.length ? opts.exposeHeaders.join(",") : void 0;
|
|
57
|
-
const allowHeadersStr = opts.allowHeaders?.length ? opts.allowHeaders.join(",") : void 0;
|
|
58
|
-
const findAllowOrigin = ((optsOrigin) => {
|
|
59
|
-
if (typeof optsOrigin === "string") if (optsOrigin === "*") return () => optsOrigin;
|
|
60
|
-
else return (origin) => optsOrigin === origin ? origin : null;
|
|
61
|
-
else if (typeof optsOrigin === "function") return optsOrigin;
|
|
62
|
-
else return (origin) => optsOrigin.includes(origin) ? origin : null;
|
|
63
|
-
})(opts.origin);
|
|
64
|
-
const findAllowMethods = ((optsAllowMethods) => {
|
|
65
|
-
if (typeof optsAllowMethods === "function") return async (origin, c) => (await optsAllowMethods(origin, c)).join(",");
|
|
66
|
-
else if (Array.isArray(optsAllowMethods)) {
|
|
67
|
-
const methodsStr = optsAllowMethods.join(",");
|
|
68
|
-
return () => methodsStr;
|
|
69
|
-
} else return () => "";
|
|
70
|
-
})(opts.allowMethods);
|
|
71
|
-
return async function cors(c, next) {
|
|
72
|
-
function set(key, value) {
|
|
73
|
-
c.res.headers.set(key, value);
|
|
74
|
-
}
|
|
75
|
-
const allowOrigin = await findAllowOrigin(c.req.header("origin") || "", c);
|
|
76
|
-
if (allowOrigin) set("Access-Control-Allow-Origin", allowOrigin);
|
|
77
|
-
if (opts.credentials) set("Access-Control-Allow-Credentials", "true");
|
|
78
|
-
if (exposeHeadersStr) set("Access-Control-Expose-Headers", exposeHeadersStr);
|
|
79
|
-
if (c.req.method === "OPTIONS") {
|
|
80
|
-
if (opts.origin !== "*") c.res.headers.append("Vary", "Origin");
|
|
81
|
-
if (opts.maxAge != null) set("Access-Control-Max-Age", opts.maxAge.toString());
|
|
82
|
-
const allowMethods = await findAllowMethods(c.req.header("origin") || "", c);
|
|
83
|
-
if (allowMethods) set("Access-Control-Allow-Methods", allowMethods);
|
|
84
|
-
let headersStr = allowHeadersStr;
|
|
85
|
-
if (!headersStr) {
|
|
86
|
-
const requestHeaders = c.req.header("Access-Control-Request-Headers");
|
|
87
|
-
if (requestHeaders) headersStr = requestHeaders.split(",").map((h) => h.trim()).join(",");
|
|
88
|
-
}
|
|
89
|
-
if (headersStr) {
|
|
90
|
-
set("Access-Control-Allow-Headers", headersStr);
|
|
91
|
-
c.res.headers.append("Vary", "Access-Control-Request-Headers");
|
|
92
|
-
}
|
|
93
|
-
c.res.headers.delete("Content-Length");
|
|
94
|
-
c.res.headers.delete("Content-Type");
|
|
95
|
-
return new Response(null, {
|
|
96
|
-
headers: c.res.headers,
|
|
97
|
-
status: 204,
|
|
98
|
-
statusText: "No Content"
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
await next();
|
|
102
|
-
if (opts.origin !== "*") c.header("Vary", "Origin", { append: true });
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
//#endregion
|
|
1
|
+
import { t as cors } from "./cors-CbAQ-8qU.js";
|
|
106
2
|
export { cors };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region ../../plugins/acryl-router/src/core/utils/crypto.ts
|
|
2
|
+
const sha256 = async (data) => {
|
|
3
|
+
return await createHash(data, {
|
|
4
|
+
name: "SHA-256",
|
|
5
|
+
alias: "sha256"
|
|
6
|
+
});
|
|
7
|
+
};
|
|
8
|
+
const sha1 = async (data) => {
|
|
9
|
+
return await createHash(data, {
|
|
10
|
+
name: "SHA-1",
|
|
11
|
+
alias: "sha1"
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
const md5 = async (data) => {
|
|
15
|
+
return await createHash(data, {
|
|
16
|
+
name: "MD5",
|
|
17
|
+
alias: "md5"
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
const createHash = async (data, algorithm) => {
|
|
21
|
+
let sourceBuffer;
|
|
22
|
+
if (ArrayBuffer.isView(data) || data instanceof ArrayBuffer) sourceBuffer = data;
|
|
23
|
+
else {
|
|
24
|
+
if (typeof data === "object") data = JSON.stringify(data);
|
|
25
|
+
sourceBuffer = new TextEncoder().encode(String(data));
|
|
26
|
+
}
|
|
27
|
+
if (crypto && crypto.subtle) {
|
|
28
|
+
const buffer = await crypto.subtle.digest({ name: algorithm.name }, sourceBuffer);
|
|
29
|
+
return Array.prototype.map.call(new Uint8Array(buffer), (x) => ("00" + x.toString(16)).slice(-2)).join("");
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
export { sha256 as i, md5 as n, sha1 as r, createHash as t };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { t as HTTPException } from "./http-exception-MjWkT89V.js";
|
|
2
|
+
//#region ../../plugins/acryl-router/src/core/middleware/csrf/index.ts
|
|
3
|
+
const secFetchSiteValues = [
|
|
4
|
+
"same-origin",
|
|
5
|
+
"same-site",
|
|
6
|
+
"none",
|
|
7
|
+
"cross-site"
|
|
8
|
+
];
|
|
9
|
+
const isSecFetchSite = (value) => secFetchSiteValues.includes(value);
|
|
10
|
+
const isSafeMethodRe = /^(GET|HEAD|OPTIONS)$/;
|
|
11
|
+
const isRequestedByFormElementRe = /^\b(application\/x-www-form-urlencoded|multipart\/form-data|text\/plain)\b/i;
|
|
12
|
+
/**
|
|
13
|
+
* CSRF Protection Middleware for Acryl.
|
|
14
|
+
*
|
|
15
|
+
* Protects against Cross-Site Request Forgery attacks by validating request origins
|
|
16
|
+
* and sec-fetch-site headers. The request is allowed if either validation passes.
|
|
17
|
+
*
|
|
18
|
+
*
|
|
19
|
+
* @param {CSRFOptions} [options] - The options for the CSRF protection middleware.
|
|
20
|
+
* @param {string|string[]|(origin: string, context: Context) => boolean} [options.origin] -
|
|
21
|
+
* Allowed origins for requests.
|
|
22
|
+
* - string: Single allowed origin (e.g., 'https://example.com')
|
|
23
|
+
* - string[]: Multiple allowed origins
|
|
24
|
+
* - function: Custom validation logic
|
|
25
|
+
* - Default: Only same origin as the request URL
|
|
26
|
+
* @param {string|string[]|(secFetchSite: string, context: Context) => boolean} [options.secFetchSite] -
|
|
27
|
+
* Sec-Fetch-Site header validation. Standard values include 'same-origin', 'same-site', 'cross-site', 'none'.
|
|
28
|
+
* - string: Single allowed value (e.g., 'same-origin')
|
|
29
|
+
* - string[]: Multiple allowed values (e.g., ['same-origin', 'same-site'])
|
|
30
|
+
* - function: Custom validation with access to context
|
|
31
|
+
* - Default: Only allows 'same-origin'
|
|
32
|
+
* @returns {MiddlewareHandler} The middleware handler function.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const app = new Acryl()
|
|
37
|
+
*
|
|
38
|
+
* // Default: both origin and sec-fetch-site validation
|
|
39
|
+
* app.use('*', csrf())
|
|
40
|
+
*
|
|
41
|
+
* // Allow specific origins
|
|
42
|
+
* app.use('*', csrf({ origin: 'https://example.com' }))
|
|
43
|
+
* app.use('*', csrf({ origin: ['https://app.com', 'https://api.com'] }))
|
|
44
|
+
*
|
|
45
|
+
* // Allow specific sec-fetch-site values
|
|
46
|
+
* app.use('*', csrf({ secFetchSite: 'same-origin' }))
|
|
47
|
+
* app.use('*', csrf({ secFetchSite: ['same-origin', 'same-site'] }))
|
|
48
|
+
*
|
|
49
|
+
* // Dynamic sec-fetch-site validation
|
|
50
|
+
* app.use('*', csrf({
|
|
51
|
+
* secFetchSite: (secFetchSite, c) => {
|
|
52
|
+
* // Always allow same-origin
|
|
53
|
+
* if (secFetchSite === 'same-origin') return true
|
|
54
|
+
* // Allow cross-site for webhook endpoints
|
|
55
|
+
* if (secFetchSite === 'cross-site' && c.req.path.startsWith('/webhook/')) {
|
|
56
|
+
* return true
|
|
57
|
+
* }
|
|
58
|
+
* return false
|
|
59
|
+
* }
|
|
60
|
+
* }))
|
|
61
|
+
*
|
|
62
|
+
* // Dynamic origin validation
|
|
63
|
+
* app.use('*', csrf({
|
|
64
|
+
* origin: (origin, c) => {
|
|
65
|
+
* // Allow same origin
|
|
66
|
+
* if (origin === new URL(c.req.url).origin) return true
|
|
67
|
+
* // Allow specific trusted domains
|
|
68
|
+
* return ['https://app.example.com', 'https://admin.example.com'].includes(origin)
|
|
69
|
+
* }
|
|
70
|
+
* }))
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
const csrf = (options) => {
|
|
74
|
+
const originHandler = ((optsOrigin) => {
|
|
75
|
+
if (!optsOrigin) return (origin, c) => origin === new URL(c.req.url).origin;
|
|
76
|
+
else if (typeof optsOrigin === "string") return (origin) => origin === optsOrigin;
|
|
77
|
+
else if (typeof optsOrigin === "function") return optsOrigin;
|
|
78
|
+
else return (origin) => optsOrigin.includes(origin);
|
|
79
|
+
})(options?.origin);
|
|
80
|
+
const isAllowedOrigin = async (origin, c) => {
|
|
81
|
+
if (origin === void 0) return false;
|
|
82
|
+
return await originHandler(origin, c);
|
|
83
|
+
};
|
|
84
|
+
const secFetchSiteHandler = ((optsSecFetchSite) => {
|
|
85
|
+
if (!optsSecFetchSite) return (secFetchSite) => secFetchSite === "same-origin";
|
|
86
|
+
else if (typeof optsSecFetchSite === "string") return (secFetchSite) => secFetchSite === optsSecFetchSite;
|
|
87
|
+
else if (typeof optsSecFetchSite === "function") return optsSecFetchSite;
|
|
88
|
+
else return (secFetchSite) => optsSecFetchSite.includes(secFetchSite);
|
|
89
|
+
})(options?.secFetchSite);
|
|
90
|
+
const isAllowedSecFetchSite = async (secFetchSite, c) => {
|
|
91
|
+
if (secFetchSite === void 0) return false;
|
|
92
|
+
if (!isSecFetchSite(secFetchSite)) return false;
|
|
93
|
+
return await secFetchSiteHandler(secFetchSite, c);
|
|
94
|
+
};
|
|
95
|
+
return async function csrf(c, next) {
|
|
96
|
+
if (!isSafeMethodRe.test(c.req.method) && isRequestedByFormElementRe.test(c.req.header("content-type") || "text/plain") && !await isAllowedSecFetchSite(c.req.header("sec-fetch-site"), c) && !await isAllowedOrigin(c.req.header("origin"), c)) throw new HTTPException(403, { res: new Response("Forbidden", { status: 403 }) });
|
|
97
|
+
await next();
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
//#endregion
|
|
101
|
+
export { csrf as t };
|