@openclaw/slack 2026.9.6 → 2026.9.7
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/assets/icon.png +0 -0
- package/dist/.setup/{account-inspect-DP1Bcwj4.mjs → account-inspect-DWBXpER6.mjs} +1 -1
- package/dist/.setup/{accounts-BBHvg0pY.mjs → accounts-D_N9IqNA.mjs} +23 -1
- package/dist/.setup/{action-runtime-B01d85zt.mjs → action-runtime-DfWvuiZd.mjs} +26 -41
- package/dist/.setup/action-runtime.runtime-Ck4bAWOX.mjs +2 -0
- package/dist/.setup/{actions-DKCtBgCI.mjs → actions-Df0CzcDl.mjs} +88 -175
- package/dist/.setup/{approval-handler.runtime-DMszKn_7.mjs → approval-handler.runtime-Ed6Sw5VK.mjs} +37 -47
- package/dist/.setup/{approval-message-updates-Tb_qRokK.mjs → approval-message-updates-BadvtA7R.mjs} +1 -2
- package/dist/.setup/{channel-CErYZ5zw.mjs → channel-C7bgPSTE.mjs} +181 -273
- package/dist/.setup/channel-meta-C443t-lI.mjs +27 -0
- package/dist/.setup/{channel-type-Dxk8VJUb.mjs → channel-type-ClOttrZ5.mjs} +13 -21
- package/dist/.setup/{channel.setup-BVoUtdPn.mjs → channel.setup-Dh2jzAjN.mjs} +35 -42
- package/dist/.setup/{config-schema-CyL279e7.mjs → config-schema-BZCxmHKG.mjs} +24 -21
- package/dist/.setup/{directory-config-CQTSH45W.mjs → directory-config-BOUWH3hR.mjs} +7 -10
- package/dist/.setup/{directory-live-BCcj89QV.mjs → directory-live-B2O4B_Ho.mjs} +9 -21
- package/dist/.setup/doctor-contract-CRN1Z_c7.mjs +342 -0
- package/dist/.setup/{message-tool-api-C0PTFaNV.mjs → message-tool-api-Cu4lwlGy.mjs} +34 -48
- package/dist/.setup/{provider-C-jPaGt2.mjs → monitor-BPVfkumU.mjs} +2181 -2693
- package/dist/.setup/{outbound-adapter-A7Wdn8ZT.mjs → outbound-adapter-Bv48XUjq.mjs} +10 -21
- package/dist/.setup/{pipeline.runtime-BlPOexmJ.mjs → pipeline.runtime-B1H63Frf.mjs} +311 -457
- package/dist/.setup/{plugin-routes-C3X0eVaK.mjs → plugin-routes-B8tooDLj.mjs} +1 -1
- package/dist/.setup/{policy-BApW53pI.mjs → policy-D-jfM174.mjs} +5 -5
- package/dist/.setup/{probe-DiYIMPJo.mjs → probe-B2Y9qc_z.mjs} +101 -39
- package/dist/.setup/{registry-bbjH7IHX.mjs → registry-CIbMfuf8.mjs} +6 -2
- package/dist/.setup/{relay-source-DfOnjJTE.mjs → relay-source-BpKdjsll.mjs} +10 -12
- package/dist/.setup/{replies-BBAJxUOQ.mjs → replies-BAnUtr2f.mjs} +16 -76
- package/dist/.setup/{reply-blocks-Bm8kf6mK.mjs → reply-blocks-SE1kTE3I.mjs} +27 -154
- package/dist/.setup/{resolve-channels-BXbMBbJD.mjs → resolve-channels-XXBn8UU_.mjs} +4 -5
- package/dist/.setup/{resolve-users-65WqvIqD.mjs → resolve-users-DW0ngD03.mjs} +20 -22
- package/dist/.setup/{scopes-h3YB-mMs.mjs → scopes-CasuDvaa.mjs} +6 -17
- package/dist/.setup/{secret-contract-DxmvbxBF.mjs → secret-contract-BaZcu6P_.mjs} +15 -20
- package/dist/.setup/{secret-contract-api-D9UfYujm.mjs → secret-contract-api-Dp6290Vg.mjs} +1 -1
- package/dist/.setup/{security-audit-BypHqcq5.mjs → security-audit-BqDc-6VL.mjs} +1 -1
- package/dist/.setup/{send-Cp6omkOg.mjs → send-BOVLQi3n.mjs} +84 -171
- package/dist/.setup/{session-status-Cf7AvWOt.mjs → session-status-DscajIsd.mjs} +315 -238
- package/dist/.setup/{setup-plugin-api-dLPkL06L.mjs → setup-plugin-api-DTtbTKNk.mjs} +1 -1
- package/dist/.setup/{setup-surface-D3DLcCxu.mjs → setup-surface-Dn7QgWRE.mjs} +24 -56
- package/dist/.setup/{shared-CJ3arAFL.mjs → shared-qau-uDGl.mjs} +30 -56
- package/dist/.setup/{slash-dispatch.runtime-HFy_XvyO.mjs → slash-dispatch.runtime--AEzLVBF.mjs} +1 -1
- package/dist/.setup/{streaming-compat-B-e0mqM0.mjs → streaming-compat-C5Wut626.mjs} +31 -8
- package/dist/.setup/{target-parsing-DEsPjngB.mjs → target-parsing-FFE26kOV.mjs} +1 -7
- package/dist/.setup/{targets-Cku2KCvg.mjs → targets-C6LZQL1Q.mjs} +1 -1
- package/dist/.setup/{thread-ts-CukseRVL.mjs → thread-ts-Cvt7WD6B.mjs} +0 -1
- package/dist/account-inspect-api.js +1 -1
- package/dist/api.js +18 -17
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/directory-contract-api.js +1 -1
- package/dist/doctor-contract-api.js +1 -1
- package/dist/http-routes-api.js +1 -1
- package/dist/index.js +1 -1
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +11 -12
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -2
- package/dist/setup-plugin-api.js +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/bolt/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/bolt/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/bolt/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/bolt/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/child_process.d.ts +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/crypto.d.ts +20 -8
- package/node_modules/@slack/web-api/node_modules/@types/node/ffi.d.ts +14 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/http2.d.ts +3 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/net.d.ts +16 -4
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/process.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/quic.d.ts +39 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/stream/iter.d.ts +9 -12
- package/node_modules/@slack/web-api/node_modules/@types/node/test/reporters.d.ts +1 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/test.d.ts +72 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/tls.d.ts +14 -10
- package/node_modules/@slack/web-api/node_modules/@types/node/vm.d.ts +2 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/worker_threads.d.ts +4 -1
- package/node_modules/get-east-asian-width/index.js +8 -3
- package/node_modules/get-east-asian-width/lookup-data.js +1 -1
- package/node_modules/get-east-asian-width/lookup.js +4 -4
- package/node_modules/get-east-asian-width/package.json +1 -1
- package/node_modules/typebox/build/compile/code.mjs +1 -2
- package/node_modules/typebox/build/compile/validator.mjs +5 -1
- package/node_modules/typebox/build/format/iri.mjs +16 -9
- package/node_modules/typebox/build/guard/emit.mjs +2 -2
- package/node_modules/typebox/build/guard/guard.d.mts +7 -5
- package/node_modules/typebox/build/guard/guard.mjs +14 -9
- package/node_modules/typebox/build/guard/index.mjs +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
- package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
- package/node_modules/typebox/build/schema/build.mjs +2 -3
- package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
- package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
- package/node_modules/typebox/build/schema/parse.mjs +3 -0
- package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
- package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
- package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
- package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
- package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
- package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
- package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
- package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
- package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
- package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +3 -1
- package/node_modules/undici/README.md +81 -25
- package/node_modules/undici/docs/docs/api/Agent.md +249 -42
- package/node_modules/undici/docs/docs/api/BalancedPool.md +246 -48
- package/node_modules/undici/docs/docs/api/CacheStorage.md +171 -13
- package/node_modules/undici/docs/docs/api/CacheStore.md +294 -98
- package/node_modules/undici/docs/docs/api/Client.md +407 -162
- package/node_modules/undici/docs/docs/api/ClientStats.md +80 -14
- package/node_modules/undici/docs/docs/api/Connector.md +118 -35
- package/node_modules/undici/docs/docs/api/ContentType.md +65 -25
- package/node_modules/undici/docs/docs/api/Cookies.md +122 -71
- package/node_modules/undici/docs/docs/api/Debug.md +34 -18
- package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +364 -164
- package/node_modules/undici/docs/docs/api/Dispatcher.md +490 -1055
- package/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +105 -93
- package/node_modules/undici/docs/docs/api/Errors.md +503 -28
- package/node_modules/undici/docs/docs/api/EventSource.md +326 -13
- package/node_modules/undici/docs/docs/api/Fetch.md +681 -30
- package/node_modules/undici/docs/docs/api/GlobalInstallation.md +78 -96
- package/node_modules/undici/docs/docs/api/H2CClient.md +298 -176
- package/node_modules/undici/docs/docs/api/Interceptors.md +418 -0
- package/node_modules/undici/docs/docs/api/MockAgent.md +333 -314
- package/node_modules/undici/docs/docs/api/MockCallHistory.md +272 -98
- package/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +189 -26
- package/node_modules/undici/docs/docs/api/MockClient.md +151 -33
- package/node_modules/undici/docs/docs/api/MockErrors.md +56 -5
- package/node_modules/undici/docs/docs/api/MockPool.md +321 -258
- package/node_modules/undici/docs/docs/api/Pool.md +236 -41
- package/node_modules/undici/docs/docs/api/PoolStats.md +119 -13
- package/node_modules/undici/docs/docs/api/ProxyAgent.md +179 -160
- package/node_modules/undici/docs/docs/api/RedirectHandler.md +238 -55
- package/node_modules/undici/docs/docs/api/RetryAgent.md +113 -27
- package/node_modules/undici/docs/docs/api/RetryHandler.md +161 -79
- package/node_modules/undici/docs/docs/api/RoundRobinPool.md +166 -72
- package/node_modules/undici/docs/docs/api/SnapshotAgent.md +262 -517
- package/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +177 -196
- package/node_modules/undici/docs/docs/api/Util.md +68 -11
- package/node_modules/undici/docs/docs/api/WebSocket.md +475 -80
- package/node_modules/undici/docs/docs/api/api-lifecycle.md +100 -32
- package/node_modules/undici/docs/docs/best-practices/client-certificate.md +2 -0
- package/node_modules/undici/docs/docs/best-practices/crawling.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/migrating-from-v7-to-v8.md +233 -0
- package/node_modules/undici/docs/docs/best-practices/mocking-request.md +9 -7
- package/node_modules/undici/docs/docs/best-practices/proxy.md +3 -1
- package/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +10 -8
- package/node_modules/undici/docs/docs/best-practices/writing-tests.md +2 -0
- package/node_modules/undici/docs/docs/getting-started.md +281 -0
- package/node_modules/undici/docs/docs/index.md +784 -0
- package/node_modules/undici/docs/docs/site.json +125 -0
- package/node_modules/undici/docs/docs/type-map.json +79 -0
- package/node_modules/undici/index.js +4 -2
- package/node_modules/undici/lib/api/api-connect.js +13 -11
- package/node_modules/undici/lib/api/api-pipeline.js +26 -13
- package/node_modules/undici/lib/api/api-request.js +51 -21
- package/node_modules/undici/lib/api/api-stream.js +81 -20
- package/node_modules/undici/lib/api/api-upgrade.js +21 -11
- package/node_modules/undici/lib/api/readable.js +45 -9
- package/node_modules/undici/lib/cache/memory-cache-store.js +3 -3
- package/node_modules/undici/lib/cache/sqlite-cache-store.js +3 -1
- package/node_modules/undici/lib/core/connect.js +46 -7
- package/node_modules/undici/lib/core/constants.js +1 -24
- package/node_modules/undici/lib/core/errors.js +22 -2
- package/node_modules/undici/lib/core/request.js +100 -18
- package/node_modules/undici/lib/core/symbols.js +4 -0
- package/node_modules/undici/lib/core/util.js +105 -48
- package/node_modules/undici/lib/dispatcher/agent.js +51 -32
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +23 -27
- package/node_modules/undici/lib/dispatcher/client-h1.js +86 -24
- package/node_modules/undici/lib/dispatcher/client-h2.js +1091 -361
- package/node_modules/undici/lib/dispatcher/client.js +109 -36
- package/node_modules/undici/lib/dispatcher/dispatcher-base.js +19 -6
- package/node_modules/undici/lib/dispatcher/dispatcher.js +15 -5
- package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +110 -0
- package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
- package/node_modules/undici/lib/dispatcher/h2c-client.js +4 -4
- package/node_modules/undici/lib/dispatcher/pool-base.js +28 -10
- package/node_modules/undici/lib/dispatcher/pool.js +30 -5
- package/node_modules/undici/lib/dispatcher/proxy-agent.js +95 -19
- package/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/node_modules/undici/lib/dispatcher/round-robin-pool.js +32 -10
- package/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +153 -63
- package/node_modules/undici/lib/global.js +37 -14
- package/node_modules/undici/lib/handler/cache-handler.js +49 -7
- package/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/node_modules/undici/lib/handler/decorator-handler.js +8 -3
- package/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/undici/lib/handler/redirect-handler.js +66 -66
- package/node_modules/undici/lib/handler/retry-handler.js +191 -50
- package/node_modules/undici/lib/interceptor/cache.js +75 -25
- package/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/node_modules/undici/lib/interceptor/dns.js +12 -1
- package/node_modules/undici/lib/interceptor/redirect.js +3 -3
- package/node_modules/undici/lib/llhttp/llhttp-wasm.js +1 -1
- package/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +1 -1
- package/node_modules/undici/lib/mock/mock-agent.js +21 -9
- package/node_modules/undici/lib/mock/mock-call-history.js +1 -1
- package/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/node_modules/undici/lib/mock/mock-utils.js +281 -47
- package/node_modules/undici/lib/mock/snapshot-agent.js +25 -7
- package/node_modules/undici/lib/mock/snapshot-recorder.js +38 -3
- package/node_modules/undici/lib/util/cache.js +92 -10
- package/node_modules/undici/lib/util/runtime-features.js +3 -34
- package/node_modules/undici/lib/web/cache/cache.js +6 -8
- package/node_modules/undici/lib/web/cookies/parse.js +150 -146
- package/node_modules/undici/lib/web/cookies/util.js +1 -1
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/undici/lib/web/eventsource/eventsource.js +20 -21
- package/node_modules/undici/lib/web/eventsource/util.js +32 -1
- package/node_modules/undici/lib/web/fetch/body.js +48 -10
- package/node_modules/undici/lib/web/fetch/constants.js +1 -1
- package/node_modules/undici/lib/web/fetch/formdata.js +21 -2
- package/node_modules/undici/lib/web/fetch/index.js +242 -223
- package/node_modules/undici/lib/web/fetch/request.js +35 -6
- package/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/node_modules/undici/lib/web/fetch/util.js +10 -2
- package/node_modules/undici/lib/web/webidl/index.js +5 -7
- package/node_modules/undici/lib/web/websocket/frame.js +1 -7
- package/node_modules/undici/lib/web/websocket/receiver.js +1 -1
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +10 -10
- package/node_modules/undici/lib/web/websocket/websocket.js +25 -3
- package/node_modules/undici/package.json +10 -10
- package/node_modules/undici/types/agent.d.ts +0 -2
- package/node_modules/undici/types/client.d.ts +69 -24
- package/node_modules/undici/types/connector.d.ts +1 -0
- package/node_modules/undici/types/cookies.d.ts +1 -1
- package/node_modules/undici/types/dispatcher.d.ts +8 -30
- package/node_modules/undici/types/dispatcher1-wrapper.d.ts +7 -0
- package/node_modules/undici/types/errors.d.ts +10 -0
- package/node_modules/undici/types/fetch.d.ts +5 -1
- package/node_modules/undici/types/formdata.d.ts +0 -6
- package/node_modules/undici/types/h2c-client.d.ts +6 -6
- package/node_modules/undici/types/handlers.d.ts +2 -0
- package/node_modules/undici/types/header.d.ts +5 -0
- package/node_modules/undici/types/index.d.ts +3 -1
- package/node_modules/undici/types/interceptors.d.ts +1 -1
- package/node_modules/undici/types/mock-agent.d.ts +11 -10
- package/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici/types/pool.d.ts +0 -2
- package/node_modules/undici/types/proxy-agent.d.ts +9 -2
- package/node_modules/undici/types/round-robin-pool.d.ts +0 -2
- package/node_modules/undici/types/snapshot-agent.d.ts +4 -0
- package/node_modules/undici/types/socks5-proxy-agent.d.ts +4 -2
- package/node_modules/undici/types/webidl.d.ts +0 -1
- package/openclaw.plugin.json +31 -3
- package/package.json +7 -7
- package/dist/.setup/accounts.runtime-DN-PPocC.mjs +0 -2
- package/dist/.setup/action-runtime.runtime-C8R8CUan.mjs +0 -2
- package/dist/.setup/doctor-contract-CtMUqjvk.mjs +0 -186
- package/dist/.setup/monitor-_Sht7Dqy.mjs +0 -13
- package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
- package/dist/.setup/send.runtime-B4caZU6T.mjs +0 -2
- package/dist/.setup/slash-commands.runtime-BpSH0b3q.mjs +0 -2
- package/dist/.setup/slash-skill-commands.runtime-Bi1JWZHY.mjs +0 -2
- package/node_modules/undici/lib/handler/unwrap-handler.js +0 -106
- package/node_modules/undici/lib/handler/wrap-handler.js +0 -105
- package/node_modules/undici/lib/llhttp/.gitkeep +0 -0
- package/node_modules/undici/lib/util/promise.js +0 -28
- /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
|
@@ -1,30 +1,188 @@
|
|
|
1
1
|
# CacheStorage
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<!--introduced_in=v5.22.1-->
|
|
4
|
+
<!--type=module-->
|
|
5
|
+
<!-- source_link=lib/web/cache/cachestorage.js -->
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
> Stability: 2 - Stable
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
undici provides a spec-compliant implementation of the [W3C Service Worker
|
|
10
|
+
`CacheStorage`][] and [`Cache`][] interfaces. A `CacheStorage` is a named
|
|
11
|
+
collection of [`Cache`][] objects, each of which stores `Request`/`Response`
|
|
12
|
+
pairs.
|
|
13
|
+
|
|
14
|
+
The class itself is not exported; instead, undici exposes a single shared
|
|
15
|
+
`CacheStorage` instance named `caches`. Import it from `'undici'`:
|
|
16
|
+
|
|
17
|
+
```mjs
|
|
18
|
+
import { caches } from 'undici'
|
|
19
|
+
|
|
20
|
+
const cache = await caches.open('v1')
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```cjs
|
|
24
|
+
const { caches } = require('undici')
|
|
25
|
+
|
|
26
|
+
caches.open('v1').then((cache) => {
|
|
27
|
+
// ...
|
|
28
|
+
})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## `caches`
|
|
32
|
+
|
|
33
|
+
<!-- YAML
|
|
34
|
+
added: v5.22.1
|
|
35
|
+
-->
|
|
36
|
+
|
|
37
|
+
* Type: {CacheStorage}
|
|
38
|
+
|
|
39
|
+
The shared [`CacheStorage`](#class-cachestorage) instance exported by undici.
|
|
40
|
+
All caches opened through `caches` live for the lifetime of the process.
|
|
41
|
+
|
|
42
|
+
```mjs
|
|
43
|
+
import { caches } from 'undici'
|
|
44
|
+
|
|
45
|
+
await caches.open('v1')
|
|
46
|
+
console.log(await caches.keys()) // ['v1']
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Class: `CacheStorage`
|
|
50
|
+
|
|
51
|
+
<!-- YAML
|
|
52
|
+
added: v5.22.1
|
|
53
|
+
-->
|
|
54
|
+
|
|
55
|
+
Represents the storage for [`Cache`][] objects. Each `CacheStorage` keeps a
|
|
56
|
+
mapping of cache names to their backing list of cached responses.
|
|
57
|
+
|
|
58
|
+
The constructor is not public: attempting to instantiate `CacheStorage`
|
|
59
|
+
directly throws a `TypeError`. Use the exported [`caches`](#caches) instance
|
|
60
|
+
instead.
|
|
61
|
+
|
|
62
|
+
### `caches.match(request[, options])`
|
|
63
|
+
|
|
64
|
+
<!-- YAML
|
|
65
|
+
added: v5.22.1
|
|
66
|
+
-->
|
|
67
|
+
|
|
68
|
+
* `request` {Request|string} The request to match against. A string is treated
|
|
69
|
+
as a URL.
|
|
70
|
+
* `options` {Object} (optional)
|
|
71
|
+
* `ignoreSearch` {boolean} When `true`, ignores the query string of the URL
|
|
72
|
+
when matching. **Default:** `false`.
|
|
73
|
+
* `ignoreMethod` {boolean} When `true`, prevents matching operations from
|
|
74
|
+
validating the `Request` `http` method. **Default:** `false`.
|
|
75
|
+
* `ignoreVary` {boolean} When `true`, ignores the `Vary` header when matching.
|
|
76
|
+
**Default:** `false`.
|
|
77
|
+
* `cacheName` {string} When set, restricts the search to the cache with this
|
|
78
|
+
name. **Default:** `undefined`.
|
|
79
|
+
* Returns: {Promise} Fulfills with the first matching {Response}, or
|
|
80
|
+
`undefined` if no response matched.
|
|
81
|
+
|
|
82
|
+
Searches the caches for a response matching `request`. When `options.cacheName`
|
|
83
|
+
is provided, only that cache is searched; otherwise every cache is searched in
|
|
84
|
+
insertion order and the first match is returned.
|
|
85
|
+
|
|
86
|
+
```mjs
|
|
87
|
+
import { caches } from 'undici'
|
|
88
|
+
|
|
89
|
+
const response = await caches.match('https://example.com/data', {
|
|
90
|
+
cacheName: 'v1'
|
|
91
|
+
})
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### `caches.has(cacheName)`
|
|
95
|
+
|
|
96
|
+
<!-- YAML
|
|
97
|
+
added: v5.22.1
|
|
98
|
+
-->
|
|
99
|
+
|
|
100
|
+
* `cacheName` {string} The name of the cache to look up.
|
|
101
|
+
* Returns: {Promise} Fulfills with `true` if a cache named `cacheName` exists,
|
|
102
|
+
otherwise `false`.
|
|
103
|
+
|
|
104
|
+
Checks whether a cache with the given name exists in the storage.
|
|
105
|
+
|
|
106
|
+
```mjs
|
|
107
|
+
import { caches } from 'undici'
|
|
108
|
+
|
|
109
|
+
await caches.open('v1')
|
|
110
|
+
console.log(await caches.has('v1')) // true
|
|
111
|
+
console.log(await caches.has('v2')) // false
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### `caches.open(cacheName)`
|
|
115
|
+
|
|
116
|
+
<!-- YAML
|
|
117
|
+
added: v5.22.1
|
|
118
|
+
-->
|
|
119
|
+
|
|
120
|
+
* `cacheName` {string} The name of the cache to open.
|
|
121
|
+
* Returns: {Promise} Fulfills with the {Cache} named `cacheName`.
|
|
122
|
+
|
|
123
|
+
Opens the cache named `cacheName`, creating it if it does not already exist.
|
|
124
|
+
|
|
125
|
+
Each call returns a new [`Cache`][] object, but caches opened with the same name
|
|
126
|
+
share their underlying list of cached responses. As a result, a response stored
|
|
127
|
+
through one instance is visible through another instance with the same name.
|
|
8
128
|
|
|
9
129
|
```mjs
|
|
10
130
|
import { caches } from 'undici'
|
|
131
|
+
import assert from 'node:assert'
|
|
11
132
|
|
|
12
|
-
const
|
|
13
|
-
const
|
|
133
|
+
const cache1 = await caches.open('v1')
|
|
134
|
+
const cache2 = await caches.open('v1')
|
|
14
135
|
|
|
15
|
-
//
|
|
16
|
-
assert(
|
|
17
|
-
//
|
|
18
|
-
assert.deepStrictEqual(await
|
|
136
|
+
// open() returns distinct objects,
|
|
137
|
+
assert(cache1 !== cache2)
|
|
138
|
+
// but they share the same cached responses.
|
|
139
|
+
assert.deepStrictEqual(await cache1.match('/req'), await cache2.match('/req'))
|
|
19
140
|
```
|
|
20
141
|
|
|
21
|
-
|
|
142
|
+
### `caches.delete(cacheName)`
|
|
22
143
|
|
|
23
|
-
|
|
144
|
+
<!-- YAML
|
|
145
|
+
added: v5.22.1
|
|
146
|
+
-->
|
|
147
|
+
|
|
148
|
+
* `cacheName` {string} The name of the cache to delete.
|
|
149
|
+
* Returns: {Promise} Fulfills with `true` if the cache existed and was deleted,
|
|
150
|
+
otherwise `false`.
|
|
151
|
+
|
|
152
|
+
Removes the cache named `cacheName` from the storage. Any [`Cache`][] objects
|
|
153
|
+
already obtained for that name, along with the `Request`/`Response` pairs they
|
|
154
|
+
returned, remain usable after deletion.
|
|
24
155
|
|
|
25
156
|
```mjs
|
|
26
|
-
|
|
157
|
+
import { caches } from 'undici'
|
|
158
|
+
|
|
159
|
+
const cache = await caches.open('v1')
|
|
160
|
+
const response = await cache.match('/req')
|
|
161
|
+
|
|
27
162
|
await caches.delete('v1')
|
|
28
163
|
|
|
29
|
-
|
|
164
|
+
// The already-retrieved response is still usable.
|
|
165
|
+
await response.text()
|
|
30
166
|
```
|
|
167
|
+
|
|
168
|
+
### `caches.keys()`
|
|
169
|
+
|
|
170
|
+
<!-- YAML
|
|
171
|
+
added: v5.22.1
|
|
172
|
+
-->
|
|
173
|
+
|
|
174
|
+
* Returns: {Promise} Fulfills with a {string[]} of cache names in insertion
|
|
175
|
+
order.
|
|
176
|
+
|
|
177
|
+
Returns the names of all caches currently held by the storage.
|
|
178
|
+
|
|
179
|
+
```mjs
|
|
180
|
+
import { caches } from 'undici'
|
|
181
|
+
|
|
182
|
+
await caches.open('v1')
|
|
183
|
+
await caches.open('v2')
|
|
184
|
+
console.log(await caches.keys()) // ['v1', 'v2']
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
[W3C Service Worker `CacheStorage`]: https://w3c.github.io/ServiceWorker/#cachestorage-interface
|
|
188
|
+
[`Cache`]: https://w3c.github.io/ServiceWorker/#cache-interface
|
|
@@ -1,164 +1,360 @@
|
|
|
1
1
|
# Cache Store
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
[RFC-9111](https://www.rfc-editor.org/rfc/rfc9111.html).
|
|
3
|
+
<!--introduced_in=v7.0.0-->
|
|
4
|
+
<!--type=module-->
|
|
5
|
+
<!-- source_link=lib/cache/memory-cache-store.js -->
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
> Stability: 2 - Stable
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
A cache store is the storage backend used by the cache interceptor to persist
|
|
10
|
+
and retrieve cached responses. A store decides which stored response to serve
|
|
11
|
+
for a request by comparing the request against the response's `Vary` header, and
|
|
12
|
+
is expected to be compliant with [RFC 9111][].
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
undici ships two stores. `MemoryCacheStore` keeps responses in memory, while
|
|
15
|
+
`SqliteCacheStore` persists them to a SQLite database. Both are available under
|
|
16
|
+
the `cacheStores` export:
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
```mjs
|
|
19
|
+
import { cacheStores } from 'undici'
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
const { MemoryCacheStore, SqliteCacheStore } = cacheStores
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`SqliteCacheStore` requires the [`node:sqlite`][] API. The class is always
|
|
25
|
+
exported, but constructing one throws if `node:sqlite` is not available in the
|
|
26
|
+
running Node.js version.
|
|
19
27
|
|
|
20
|
-
|
|
28
|
+
A cache store implements three methods — `get(key)`, `createWriteStream(key,
|
|
29
|
+
value)`, and `delete(key)` — that operate on a [`CacheKey`](#cachekey) and a
|
|
30
|
+
[`CacheValue`](#cachevalue). Any object implementing this contract can be passed
|
|
31
|
+
to the cache interceptor, so custom stores (for example, backed by Redis or a
|
|
32
|
+
remote service) are supported as well.
|
|
21
33
|
|
|
22
|
-
|
|
34
|
+
## Class: `MemoryCacheStore`
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
<!-- YAML
|
|
37
|
+
added: v7.0.0
|
|
38
|
+
-->
|
|
25
39
|
|
|
26
|
-
|
|
40
|
+
* Extends: {EventEmitter}
|
|
27
41
|
|
|
28
|
-
|
|
42
|
+
Stores cached responses in memory. The store enforces upper bounds on the total
|
|
43
|
+
number of responses, the total size of all responses, and the size of any single
|
|
44
|
+
response. When a limit is exceeded, the store evicts approximately half of its
|
|
45
|
+
entries and emits a [`'maxSizeExceeded'`](#event-maxsizeexceeded) event.
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
```mjs
|
|
48
|
+
import { interceptors, cacheStores, Agent, setGlobalDispatcher } from 'undici'
|
|
31
49
|
|
|
32
|
-
|
|
50
|
+
const store = new cacheStores.MemoryCacheStore({ maxSize: 50 * 1024 * 1024 })
|
|
51
|
+
|
|
52
|
+
setGlobalDispatcher(
|
|
53
|
+
new Agent().compose(interceptors.cache({ store }))
|
|
54
|
+
)
|
|
55
|
+
```
|
|
33
56
|
|
|
34
|
-
|
|
57
|
+
### `new MemoryCacheStore([options])`
|
|
35
58
|
|
|
36
|
-
|
|
59
|
+
<!-- YAML
|
|
60
|
+
added: v7.0.0
|
|
61
|
+
-->
|
|
37
62
|
|
|
63
|
+
* `options` {Object} (optional)
|
|
64
|
+
* `maxCount` {number} The maximum number of responses to store. **Default:**
|
|
65
|
+
`1024`.
|
|
66
|
+
* `maxSize` {number} The maximum total size, in bytes, of all stored
|
|
67
|
+
responses. **Default:** `104857600` (100 MiB).
|
|
68
|
+
* `maxEntrySize` {number} The maximum size, in bytes, of a single response
|
|
69
|
+
body. Responses whose body exceeds this value are not cached. **Default:**
|
|
70
|
+
`5242880` (5 MiB).
|
|
71
|
+
* `errorCallback` {Function} A callback invoked with any error raised by the
|
|
72
|
+
store. (optional)
|
|
73
|
+
* `err` {Error}
|
|
38
74
|
|
|
39
|
-
|
|
75
|
+
Each of `maxCount`, `maxSize`, and `maxEntrySize` must be a non-negative
|
|
76
|
+
integer; a `TypeError` is thrown otherwise.
|
|
40
77
|
|
|
41
|
-
|
|
42
|
-
Under the hood, it uses Node.js' [`node:sqlite`](https://nodejs.org/api/sqlite.html) api.
|
|
43
|
-
The `SqliteCacheStore` is only exposed if the `node:sqlite` api is present.
|
|
78
|
+
### `memoryCacheStore.size`
|
|
44
79
|
|
|
45
|
-
|
|
80
|
+
<!-- YAML
|
|
81
|
+
added: v7.0.0
|
|
82
|
+
-->
|
|
46
83
|
|
|
47
|
-
|
|
48
|
-
- `maxCount` - The maximum number of entries to store in the database. Default `Infinity`.
|
|
49
|
-
- `maxEntrySize` - The maximum size in bytes that a response's body can be. If a response's body is greater than or equal to this, the response will not be cached. Default `Infinity`.
|
|
84
|
+
* Type: {number}
|
|
50
85
|
|
|
51
|
-
|
|
86
|
+
The current total size, in bytes, of all stored response bodies.
|
|
52
87
|
|
|
53
|
-
|
|
88
|
+
### `memoryCacheStore.isFull()`
|
|
54
89
|
|
|
55
|
-
|
|
90
|
+
<!-- YAML
|
|
91
|
+
added: v7.0.0
|
|
92
|
+
-->
|
|
56
93
|
|
|
57
|
-
|
|
58
|
-
|
|
94
|
+
* Returns: {boolean} `true` when the store has reached its `maxSize` or
|
|
95
|
+
`maxCount` limit, `false` otherwise.
|
|
59
96
|
|
|
60
|
-
###
|
|
97
|
+
### `memoryCacheStore.get(key)`
|
|
61
98
|
|
|
62
|
-
|
|
99
|
+
<!-- YAML
|
|
100
|
+
added: v7.0.0
|
|
101
|
+
-->
|
|
63
102
|
|
|
64
|
-
*
|
|
103
|
+
* `key` {CacheKey} The request to look up. See [`CacheKey`](#cachekey).
|
|
104
|
+
* Returns: {GetResult|undefined} The matching cached response, or `undefined`
|
|
105
|
+
when there is no fresh entry for `key`. See [`GetResult`](#getresult).
|
|
65
106
|
|
|
66
|
-
|
|
67
|
-
|
|
107
|
+
Looks up a cached response for `key`. A stored entry matches only when its
|
|
108
|
+
`method` equals `key.method`, its `deleteAt` time is in the future, and every
|
|
109
|
+
header listed in its `vary` map matches the corresponding header in
|
|
110
|
+
`key.headers`.
|
|
68
111
|
|
|
69
|
-
|
|
112
|
+
### `memoryCacheStore.createWriteStream(key, value)`
|
|
70
113
|
|
|
71
|
-
|
|
114
|
+
<!-- YAML
|
|
115
|
+
added: v7.0.0
|
|
116
|
+
-->
|
|
72
117
|
|
|
73
|
-
*
|
|
74
|
-
|
|
118
|
+
* `key` {CacheKey} The request the response is being cached for. See
|
|
119
|
+
[`CacheKey`](#cachekey).
|
|
120
|
+
* `value` {CacheValue} The response metadata to store. See
|
|
121
|
+
[`CacheValue`](#cachevalue).
|
|
122
|
+
* Returns: {Writable|undefined} A writable stream that the response body is
|
|
123
|
+
written to, or `undefined` when the response cannot be cached.
|
|
75
124
|
|
|
76
|
-
|
|
125
|
+
Returns a {Writable} stream used to write the response body into the store. When
|
|
126
|
+
the stream finishes, the entry is committed; if its accumulated size exceeds
|
|
127
|
+
`maxEntrySize`, the stream is destroyed and nothing is stored. Writing a new
|
|
128
|
+
entry whose `key` matches an existing one replaces that entry.
|
|
77
129
|
|
|
78
|
-
|
|
130
|
+
### `memoryCacheStore.delete(key)`
|
|
79
131
|
|
|
80
|
-
|
|
81
|
-
|
|
132
|
+
<!-- YAML
|
|
133
|
+
added: v7.0.0
|
|
134
|
+
-->
|
|
82
135
|
|
|
83
|
-
|
|
136
|
+
* `key` {CacheKey} The request whose cached responses should be removed. See
|
|
137
|
+
[`CacheKey`](#cachekey).
|
|
138
|
+
* Returns: {undefined}
|
|
84
139
|
|
|
85
|
-
|
|
140
|
+
Removes every cached response stored for `key.origin` and `key.path`. Throws a
|
|
141
|
+
`TypeError` if `key` is not an object.
|
|
86
142
|
|
|
87
|
-
|
|
143
|
+
### Event: `'maxSizeExceeded'`
|
|
88
144
|
|
|
89
|
-
|
|
145
|
+
<!-- YAML
|
|
146
|
+
added: v7.10.0
|
|
147
|
+
-->
|
|
90
148
|
|
|
91
|
-
`
|
|
149
|
+
* `data` {Object}
|
|
150
|
+
* `size` {number} The current total size, in bytes, of all stored responses.
|
|
151
|
+
* `maxSize` {number} The configured `maxSize` limit.
|
|
152
|
+
* `count` {number} The current number of stored responses.
|
|
153
|
+
* `maxCount` {number} The configured `maxCount` limit.
|
|
92
154
|
|
|
93
|
-
|
|
155
|
+
Emitted when the store exceeds its `maxSize` or `maxCount` limit, immediately
|
|
156
|
+
before entries are evicted. The event fires only once per overflow; it is not
|
|
157
|
+
emitted again until the store drops back below both limits.
|
|
94
158
|
|
|
95
|
-
`
|
|
159
|
+
## Class: `SqliteCacheStore`
|
|
96
160
|
|
|
97
|
-
|
|
161
|
+
<!-- YAML
|
|
162
|
+
added: v7.0.0
|
|
163
|
+
-->
|
|
98
164
|
|
|
99
|
-
`
|
|
165
|
+
Stores cached responses in a SQLite database using the [`node:sqlite`][] API.
|
|
166
|
+
The constructor throws when [`node:sqlite`][] is not available.
|
|
100
167
|
|
|
101
|
-
|
|
168
|
+
```mjs
|
|
169
|
+
import { interceptors, cacheStores, Agent, setGlobalDispatcher } from 'undici'
|
|
102
170
|
|
|
103
|
-
|
|
104
|
-
and their respective values for later comparison. Values are `null` when the
|
|
105
|
-
header specified in `Vary` was not present in the original request. These `null`
|
|
106
|
-
values are automatically filtered out during revalidation so they are not sent
|
|
107
|
-
as request headers.
|
|
171
|
+
const store = new cacheStores.SqliteCacheStore({ location: './cache.db' })
|
|
108
172
|
|
|
109
|
-
|
|
173
|
+
setGlobalDispatcher(
|
|
174
|
+
new Agent().compose(interceptors.cache({ store }))
|
|
175
|
+
)
|
|
110
176
|
```
|
|
111
|
-
|
|
177
|
+
|
|
178
|
+
### `new SqliteCacheStore([options])`
|
|
179
|
+
|
|
180
|
+
<!-- YAML
|
|
181
|
+
added: v7.0.0
|
|
182
|
+
-->
|
|
183
|
+
|
|
184
|
+
* `options` {Object} (optional)
|
|
185
|
+
* `location` {string} The location of the SQLite database. Use `':memory:'`
|
|
186
|
+
for an in-memory database. **Default:** `':memory:'`.
|
|
187
|
+
* `maxCount` {number} The maximum number of responses to store. **Default:**
|
|
188
|
+
`Infinity`.
|
|
189
|
+
* `maxEntrySize` {number} The maximum size, in bytes, of a single response
|
|
190
|
+
body. Responses whose body exceeds this value are not cached. Must not
|
|
191
|
+
exceed `2000000000` (2 GB). **Default:** `2000000000` (2 GB).
|
|
192
|
+
|
|
193
|
+
`maxCount` and `maxEntrySize` must be non-negative integers; a `TypeError` is
|
|
194
|
+
thrown otherwise, or if `maxEntrySize` is greater than 2 GB.
|
|
195
|
+
|
|
196
|
+
### `sqliteCacheStore.close()`
|
|
197
|
+
|
|
198
|
+
<!-- YAML
|
|
199
|
+
added: v7.0.0
|
|
200
|
+
-->
|
|
201
|
+
|
|
202
|
+
* Returns: {undefined}
|
|
203
|
+
|
|
204
|
+
Closes the connection to the underlying SQLite database.
|
|
205
|
+
|
|
206
|
+
### `sqliteCacheStore.size`
|
|
207
|
+
|
|
208
|
+
<!-- YAML
|
|
209
|
+
added: v7.0.0
|
|
210
|
+
-->
|
|
211
|
+
|
|
212
|
+
* Type: {number}
|
|
213
|
+
|
|
214
|
+
The number of responses currently stored in the database.
|
|
215
|
+
|
|
216
|
+
### `sqliteCacheStore.get(key)`
|
|
217
|
+
|
|
218
|
+
<!-- YAML
|
|
219
|
+
added: v7.0.0
|
|
220
|
+
-->
|
|
221
|
+
|
|
222
|
+
* `key` {CacheKey} The request to look up. See [`CacheKey`](#cachekey).
|
|
223
|
+
* Returns: {GetResult|undefined} The matching cached response, or `undefined`
|
|
224
|
+
when there is no fresh entry for `key`. The returned `body` is a {Buffer}.
|
|
225
|
+
See [`GetResult`](#getresult).
|
|
226
|
+
|
|
227
|
+
Looks up a cached response for `key`, comparing the request method and every
|
|
228
|
+
header named in the stored `vary` map.
|
|
229
|
+
|
|
230
|
+
### `sqliteCacheStore.set(key, value)`
|
|
231
|
+
|
|
232
|
+
<!-- YAML
|
|
233
|
+
added: v7.0.0
|
|
234
|
+
-->
|
|
235
|
+
|
|
236
|
+
* `key` {CacheKey} The request the response is being cached for. See
|
|
237
|
+
[`CacheKey`](#cachekey).
|
|
238
|
+
* `value` {CacheValue} The response to store, with its `body` set to a {Buffer},
|
|
239
|
+
an {Array} of {Buffer}, or `null`. See [`CacheValue`](#cachevalue).
|
|
240
|
+
* Returns: {undefined}
|
|
241
|
+
|
|
242
|
+
Writes a response into the database directly, without going through a stream. If
|
|
243
|
+
the body exceeds `maxEntrySize`, nothing is stored. When an entry already exists
|
|
244
|
+
for `key` it is overwritten; otherwise a new row is inserted and old entries are
|
|
245
|
+
pruned to honour `maxCount`. This method is used internally by
|
|
246
|
+
[`sqliteCacheStore.createWriteStream()`](#sqlitecachestorecreatewritestreamkey-value).
|
|
247
|
+
|
|
248
|
+
### `sqliteCacheStore.createWriteStream(key, value)`
|
|
249
|
+
|
|
250
|
+
<!-- YAML
|
|
251
|
+
added: v7.0.0
|
|
252
|
+
-->
|
|
253
|
+
|
|
254
|
+
* `key` {CacheKey} The request the response is being cached for. See
|
|
255
|
+
[`CacheKey`](#cachekey).
|
|
256
|
+
* `value` {CacheValue} The response metadata to store. See
|
|
257
|
+
[`CacheValue`](#cachevalue).
|
|
258
|
+
* Returns: {Writable|undefined} A writable stream that the response body is
|
|
259
|
+
written to, or `undefined` when the response cannot be cached.
|
|
260
|
+
|
|
261
|
+
Returns a {Writable} stream used to write the response body into the store. When
|
|
262
|
+
the stream finishes, the buffered body is committed via
|
|
263
|
+
[`sqliteCacheStore.set()`](#sqlitecachestoresetkey-value). If the body exceeds
|
|
264
|
+
`maxEntrySize`, the stream is destroyed and nothing is stored.
|
|
265
|
+
|
|
266
|
+
### `sqliteCacheStore.delete(key)`
|
|
267
|
+
|
|
268
|
+
<!-- YAML
|
|
269
|
+
added: v7.0.0
|
|
270
|
+
-->
|
|
271
|
+
|
|
272
|
+
* `key` {CacheKey} The request whose cached responses should be removed. See
|
|
273
|
+
[`CacheKey`](#cachekey).
|
|
274
|
+
* Returns: {undefined}
|
|
275
|
+
|
|
276
|
+
Removes every cached response stored for the URL derived from `key.origin` and
|
|
277
|
+
`key.path`. Throws a `TypeError` if `key` is not an object.
|
|
278
|
+
|
|
279
|
+
## Implementing a custom cache store
|
|
280
|
+
|
|
281
|
+
A cache store is any object that implements the `CacheStore` interface:
|
|
282
|
+
|
|
283
|
+
* `get(key)` — Look up a response. Returns a [`GetResult`](#getresult),
|
|
284
|
+
`undefined`, or a {Promise} resolving to either.
|
|
285
|
+
* `createWriteStream(key, value)` — Return a {Writable} to receive the response
|
|
286
|
+
body, or `undefined` if the response cannot be stored.
|
|
287
|
+
* `delete(key)` — Remove all responses for `key`. May return a {Promise}.
|
|
288
|
+
|
|
289
|
+
Returning a {Promise} from `get` or `delete` lets a store be backed by an
|
|
290
|
+
asynchronous resource; the cache interceptor awaits these values, including on
|
|
291
|
+
the revalidation and stale-while-revalidate paths.
|
|
292
|
+
|
|
293
|
+
### `CacheKey`
|
|
294
|
+
|
|
295
|
+
The request a response is being looked up or stored for.
|
|
296
|
+
|
|
297
|
+
* `origin` {string} The request origin.
|
|
298
|
+
* `method` {string} The request method.
|
|
299
|
+
* `path` {string} The request path.
|
|
300
|
+
* `headers` {Record<string, string|string[]>} The request headers, used to
|
|
301
|
+
satisfy `Vary`. (optional)
|
|
302
|
+
|
|
303
|
+
### `CacheValue`
|
|
304
|
+
|
|
305
|
+
The metadata of a cached response, excluding its body.
|
|
306
|
+
|
|
307
|
+
* `statusCode` {number} The response's HTTP status code.
|
|
308
|
+
* `statusMessage` {string} The response's HTTP status message.
|
|
309
|
+
* `headers` {Record<string, string|string[]>} The response headers.
|
|
310
|
+
* `vary` {Record<string, string|string[]|null>} The header names listed in the
|
|
311
|
+
response's `Vary` header mapped to the values they had in the original
|
|
312
|
+
request. A value is `null` when that header was absent from the original
|
|
313
|
+
request. (optional)
|
|
314
|
+
* `etag` {string} The response's entity tag. (optional)
|
|
315
|
+
* `cacheControlDirectives` {Object} The parsed `Cache-Control` directives of the
|
|
316
|
+
response. (optional)
|
|
317
|
+
* `cachedAt` {number} The time, in milliseconds, at which the response was
|
|
318
|
+
cached.
|
|
319
|
+
* `staleAt` {number} The time, in milliseconds, at which the response becomes
|
|
320
|
+
stale.
|
|
321
|
+
* `deleteAt` {number} The time, in milliseconds, at which the response must be
|
|
322
|
+
evicted. A store must not return a response once this time has passed.
|
|
323
|
+
|
|
324
|
+
The `vary` map drives response selection. For a response such as:
|
|
325
|
+
|
|
326
|
+
```http
|
|
327
|
+
Vary: content-encoding, accept
|
|
112
328
|
content-encoding: utf8
|
|
113
|
-
|
|
329
|
+
accept: application/json
|
|
114
330
|
```
|
|
115
331
|
|
|
116
|
-
|
|
332
|
+
the recorded map is:
|
|
333
|
+
|
|
117
334
|
```js
|
|
118
335
|
{
|
|
119
336
|
'content-encoding': 'utf8',
|
|
120
|
-
|
|
337
|
+
accept: 'application/json'
|
|
121
338
|
}
|
|
122
339
|
```
|
|
123
340
|
|
|
124
|
-
If the original request did not include the `
|
|
341
|
+
If the original request did not include the `accept` header, its value is
|
|
342
|
+
recorded as `null`:
|
|
343
|
+
|
|
125
344
|
```js
|
|
126
345
|
{
|
|
127
346
|
'content-encoding': 'utf8',
|
|
128
|
-
|
|
347
|
+
accept: null
|
|
129
348
|
}
|
|
130
349
|
```
|
|
131
350
|
|
|
132
|
-
###
|
|
133
|
-
|
|
134
|
-
`number` - Time in millis that this value was cached.
|
|
135
|
-
|
|
136
|
-
### Property `staleAt`
|
|
137
|
-
|
|
138
|
-
`number` - Time in millis that this value is considered stale.
|
|
139
|
-
|
|
140
|
-
### Property `deleteAt`
|
|
141
|
-
|
|
142
|
-
`number` - Time in millis that this value is to be deleted from the cache. This
|
|
143
|
-
is either the same sa staleAt or the `max-stale` caching directive.
|
|
144
|
-
|
|
145
|
-
The store must not return a response after the time defined in this property.
|
|
146
|
-
|
|
147
|
-
## `CacheStoreReadable`
|
|
148
|
-
|
|
149
|
-
This extends Node's [`Readable`](https://nodejs.org/api/stream.html#class-streamreadable)
|
|
150
|
-
and defines extra properties relevant to the cache interceptor.
|
|
151
|
-
|
|
152
|
-
### Getter: `value`
|
|
153
|
-
|
|
154
|
-
The response's [`CacheStoreValue`](/docs/docs/api/CacheStore.md#cachestorevalue)
|
|
155
|
-
|
|
156
|
-
## `CacheStoreWriteable`
|
|
351
|
+
### `GetResult`
|
|
157
352
|
|
|
158
|
-
|
|
159
|
-
|
|
353
|
+
The value returned by `get`. It contains every field of
|
|
354
|
+
[`CacheValue`](#cachevalue) plus the response body.
|
|
160
355
|
|
|
161
|
-
|
|
356
|
+
* `body` {Readable|Iterable|AsyncIterable|Buffer|string} The cached response
|
|
357
|
+
body. (optional)
|
|
162
358
|
|
|
163
|
-
|
|
164
|
-
|
|
359
|
+
[RFC 9111]: https://www.rfc-editor.org/rfc/rfc9111.html
|
|
360
|
+
[`node:sqlite`]: https://nodejs.org/api/sqlite.html
|