@moltzap/client 2026.1001.2 → 2026.1004.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -6
- package/bin/moltzapd +2 -2
- package/dist/{harness-mcp-contract.d.ts → delivery/history-export.d.ts} +94 -136
- package/dist/delivery/history-export.d.ts.map +1 -0
- package/dist/{daemon/runtime → delivery}/history-export.js +36 -3
- package/dist/delivery/history-export.js.map +1 -0
- package/dist/delivery/host-delivery.d.ts +51 -0
- package/dist/delivery/host-delivery.d.ts.map +1 -0
- package/dist/delivery/host-delivery.js +109 -0
- package/dist/delivery/host-delivery.js.map +1 -0
- package/dist/delivery/inbox.d.ts +141 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +129 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/index.d.ts +4 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +4 -0
- package/dist/delivery/index.js.map +1 -0
- package/dist/delivery/operations.d.ts +789 -0
- package/dist/delivery/operations.d.ts.map +1 -0
- package/dist/delivery/operations.js +162 -0
- package/dist/delivery/operations.js.map +1 -0
- package/dist/delivery/pass.d.ts +91 -0
- package/dist/delivery/pass.d.ts.map +1 -0
- package/dist/{daemon/runtime/pending-delivery.js → delivery/pass.js} +61 -34
- package/dist/delivery/pass.js.map +1 -0
- package/dist/delivery/send-invocations.d.ts +106 -0
- package/dist/delivery/send-invocations.d.ts.map +1 -0
- package/dist/delivery/send-invocations.js +109 -0
- package/dist/delivery/send-invocations.js.map +1 -0
- package/dist/endpoint/harness-endpoint/capability.d.ts +39 -0
- package/dist/endpoint/harness-endpoint/capability.d.ts.map +1 -0
- package/dist/endpoint/harness-endpoint/capability.js +9 -0
- package/dist/endpoint/harness-endpoint/capability.js.map +1 -0
- package/dist/endpoint/harness-endpoint/events.d.ts +12 -0
- package/dist/endpoint/harness-endpoint/events.d.ts.map +1 -0
- package/dist/endpoint/harness-endpoint/events.js +199 -0
- package/dist/endpoint/harness-endpoint/events.js.map +1 -0
- package/dist/{client-runtime.d.ts → endpoint/harness-endpoint/index.d.ts} +4 -2
- package/dist/endpoint/harness-endpoint/index.d.ts.map +1 -0
- package/dist/{client-runtime.js → endpoint/harness-endpoint/index.js} +115 -115
- package/dist/endpoint/harness-endpoint/index.js.map +1 -0
- package/dist/endpoint/implementation.d.ts +4 -0
- package/dist/endpoint/implementation.d.ts.map +1 -0
- package/dist/endpoint/implementation.js +5 -0
- package/dist/endpoint/implementation.js.map +1 -0
- package/dist/endpoint/mcp/auth.d.ts +31 -0
- package/dist/endpoint/mcp/auth.d.ts.map +1 -0
- package/dist/endpoint/mcp/auth.js +42 -0
- package/dist/endpoint/mcp/auth.js.map +1 -0
- package/dist/endpoint/mcp/event-schemas.d.ts +151 -0
- package/dist/endpoint/mcp/event-schemas.d.ts.map +1 -0
- package/dist/endpoint/mcp/event-schemas.js +72 -0
- package/dist/endpoint/mcp/event-schemas.js.map +1 -0
- package/dist/endpoint/mcp/event-signing.d.ts +62 -0
- package/dist/endpoint/mcp/event-signing.d.ts.map +1 -0
- package/dist/endpoint/mcp/event-signing.js +185 -0
- package/dist/endpoint/mcp/event-signing.js.map +1 -0
- package/dist/endpoint/mcp/events.d.ts +45 -0
- package/dist/endpoint/mcp/events.d.ts.map +1 -0
- package/dist/endpoint/mcp/events.js +296 -0
- package/dist/endpoint/mcp/events.js.map +1 -0
- package/dist/{harness-mcp-http.d.ts → endpoint/mcp/http.d.ts} +1 -1
- package/dist/endpoint/mcp/http.d.ts.map +1 -0
- package/dist/{harness-mcp-http.js → endpoint/mcp/http.js} +1 -1
- package/dist/endpoint/mcp/http.js.map +1 -0
- package/dist/endpoint/mcp/index.d.ts +10 -0
- package/dist/endpoint/mcp/index.d.ts.map +1 -0
- package/dist/endpoint/mcp/index.js +8 -0
- package/dist/endpoint/mcp/index.js.map +1 -0
- package/dist/{management-runtime.d.ts → endpoint/mcp/owner-tools.d.ts} +7 -7
- package/dist/endpoint/mcp/owner-tools.d.ts.map +1 -0
- package/dist/{management-runtime.js → endpoint/mcp/owner-tools.js} +3 -4
- package/dist/endpoint/mcp/owner-tools.js.map +1 -0
- package/dist/endpoint/mcp/schemas.d.ts +60 -0
- package/dist/endpoint/mcp/schemas.d.ts.map +1 -0
- package/dist/endpoint/mcp/schemas.js +116 -0
- package/dist/endpoint/mcp/schemas.js.map +1 -0
- package/dist/{harness-mcp-wire.d.ts → endpoint/mcp/tools.d.ts} +17 -14
- package/dist/endpoint/mcp/tools.d.ts.map +1 -0
- package/dist/{harness-mcp-wire.js → endpoint/mcp/tools.js} +229 -110
- package/dist/endpoint/mcp/tools.js.map +1 -0
- package/dist/endpoint/mcp/webhook.d.ts +15 -0
- package/dist/endpoint/mcp/webhook.d.ts.map +1 -0
- package/dist/endpoint/mcp/webhook.js +359 -0
- package/dist/endpoint/mcp/webhook.js.map +1 -0
- package/dist/identity/credentials.d.ts +46 -0
- package/dist/identity/credentials.d.ts.map +1 -0
- package/dist/identity/credentials.js +55 -0
- package/dist/identity/credentials.js.map +1 -0
- package/dist/identity/index.d.ts +4 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +4 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +19 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/{contract.types-check.d.ts → index.types-check.d.ts} +21 -18
- package/dist/index.types-check.d.ts.map +1 -0
- package/dist/{contract.types-check.js → index.types-check.js} +6 -3
- package/dist/index.types-check.js.map +1 -0
- package/dist/{daemon/runtime → service}/activation.d.ts +9 -12
- package/dist/service/activation.d.ts.map +1 -0
- package/dist/{daemon/runtime → service}/activation.js +3 -3
- package/dist/service/activation.js.map +1 -0
- package/dist/{daemon → service}/configuration.d.ts +8 -7
- package/dist/service/configuration.d.ts.map +1 -0
- package/dist/{daemon → service}/configuration.js +30 -28
- package/dist/service/configuration.js.map +1 -0
- package/dist/{daemon/runtime → service}/controller.d.ts +8 -6
- package/dist/service/controller.d.ts.map +1 -0
- package/dist/service/controller.js +106 -0
- package/dist/service/controller.js.map +1 -0
- package/dist/{server.d.ts → service/index.d.ts} +7 -4
- package/dist/service/index.d.ts.map +1 -0
- package/dist/{server.js → service/index.js} +17 -15
- package/dist/service/index.js.map +1 -0
- package/dist/{server.types-check.d.ts → service/index.types-check.d.ts} +7 -7
- package/dist/service/index.types-check.d.ts.map +1 -0
- package/dist/{server.types-check.js → service/index.types-check.js} +1 -1
- package/dist/service/index.types-check.js.map +1 -0
- package/dist/{daemon/runtime/index.d.ts → service/lifecycle.d.ts} +3 -3
- package/dist/service/lifecycle.d.ts.map +1 -0
- package/dist/{daemon/runtime/index.js → service/lifecycle.js} +28 -25
- package/dist/service/lifecycle.js.map +1 -0
- package/dist/{daemon → service}/management.d.ts +2 -2
- package/dist/service/management.d.ts.map +1 -0
- package/dist/{daemon → service}/management.js +2 -13
- package/dist/service/management.js.map +1 -0
- package/dist/{daemon → service}/registration.d.ts +1 -1
- package/dist/service/registration.d.ts.map +1 -0
- package/dist/{daemon → service}/registration.js +1 -2
- package/dist/service/registration.js.map +1 -0
- package/dist/{daemon/runtime/protocol.d.ts → service/supervision.d.ts} +16 -24
- package/dist/service/supervision.d.ts.map +1 -0
- package/dist/{daemon/runtime/protocol.js → service/supervision.js} +33 -36
- package/dist/service/supervision.js.map +1 -0
- package/dist/store/anchors.d.ts.map +1 -0
- package/dist/store/anchors.js.map +1 -0
- package/dist/store/database/index.d.ts.map +1 -0
- package/dist/store/database/index.js.map +1 -0
- package/dist/store/database/schema.d.ts.map +1 -0
- package/dist/{endpoint/store → store}/database/schema.js +42 -6
- package/dist/store/database/schema.js.map +1 -0
- package/dist/store/database/values.d.ts.map +1 -0
- package/dist/store/database/values.js.map +1 -0
- package/dist/{endpoint/store → store}/deliveries.d.ts +8 -0
- package/dist/store/deliveries.d.ts.map +1 -0
- package/dist/{endpoint/store → store}/deliveries.js +16 -0
- package/dist/store/deliveries.js.map +1 -0
- package/dist/store/dissemination.d.ts.map +1 -0
- package/dist/store/dissemination.js.map +1 -0
- package/dist/store/inbox.d.ts +86 -0
- package/dist/store/inbox.d.ts.map +1 -0
- package/dist/store/inbox.js +269 -0
- package/dist/store/inbox.js.map +1 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +8 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/outbound.d.ts.map +1 -0
- package/dist/store/outbound.js.map +1 -0
- package/dist/{endpoint/store/management.d.ts → store/reads.d.ts} +1 -1
- package/dist/store/reads.d.ts.map +1 -0
- package/dist/{endpoint/store/management.js → store/reads.js} +1 -1
- package/dist/store/reads.js.map +1 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js.map +1 -0
- package/dist/store/rows/index.d.ts.map +1 -0
- package/dist/store/rows/index.js.map +1 -0
- package/dist/store/runtime-codec.d.ts +17 -0
- package/dist/store/runtime-codec.d.ts.map +1 -0
- package/dist/store/runtime-codec.js +32 -0
- package/dist/store/runtime-codec.js.map +1 -0
- package/dist/{endpoint/store/index.d.ts → store/store.d.ts} +2 -2
- package/dist/store/store.d.ts.map +1 -0
- package/dist/{endpoint/store/index.js → store/store.js} +33 -4
- package/dist/store/store.js.map +1 -0
- package/dist/{endpoint/store → store}/types.d.ts +41 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js.map +1 -0
- package/dist/transport/collectives/answer-check.d.ts +22 -0
- package/dist/transport/collectives/answer-check.d.ts.map +1 -0
- package/dist/transport/collectives/answer-check.js +166 -0
- package/dist/transport/collectives/answer-check.js.map +1 -0
- package/dist/transport/collectives/answer-formats.d.ts +21 -0
- package/dist/transport/collectives/answer-formats.d.ts.map +1 -0
- package/dist/transport/collectives/answer-formats.js +127 -0
- package/dist/transport/collectives/answer-formats.js.map +1 -0
- package/dist/transport/collectives/failures.d.ts +34 -0
- package/dist/transport/collectives/failures.d.ts.map +1 -0
- package/dist/transport/collectives/failures.js +40 -0
- package/dist/transport/collectives/failures.js.map +1 -0
- package/dist/transport/collectives/form-grammar.d.ts +175 -0
- package/dist/transport/collectives/form-grammar.d.ts.map +1 -0
- package/dist/transport/collectives/form-grammar.js +226 -0
- package/dist/transport/collectives/form-grammar.js.map +1 -0
- package/dist/transport/collectives/forms.d.ts +224 -0
- package/dist/transport/collectives/forms.d.ts.map +1 -0
- package/dist/transport/collectives/forms.js +183 -0
- package/dist/transport/collectives/forms.js.map +1 -0
- package/dist/transport/collectives/inbound.d.ts +130 -0
- package/dist/transport/collectives/inbound.d.ts.map +1 -0
- package/dist/transport/collectives/inbound.js +80 -0
- package/dist/transport/collectives/inbound.js.map +1 -0
- package/dist/transport/collectives/index.d.ts +10 -0
- package/dist/transport/collectives/index.d.ts.map +1 -0
- package/dist/transport/collectives/index.js +8 -0
- package/dist/transport/collectives/index.js.map +1 -0
- package/dist/transport/collectives/message-text.d.ts +52 -0
- package/dist/transport/collectives/message-text.d.ts.map +1 -0
- package/dist/transport/collectives/message-text.js +118 -0
- package/dist/transport/collectives/message-text.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/operation.d.ts +30 -21
- package/dist/transport/collectives/operation.d.ts.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/operation.js +135 -143
- package/dist/transport/collectives/operation.js.map +1 -0
- package/dist/transport/collectives/received-request.d.ts +41 -0
- package/dist/transport/collectives/received-request.d.ts.map +1 -0
- package/dist/transport/collectives/received-request.js +56 -0
- package/dist/transport/collectives/received-request.js.map +1 -0
- package/dist/transport/collectives/request-sends.d.ts +42 -0
- package/dist/transport/collectives/request-sends.d.ts.map +1 -0
- package/dist/transport/collectives/request-sends.js +46 -0
- package/dist/transport/collectives/request-sends.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/shared-answers.d.ts +3 -2
- package/dist/transport/collectives/shared-answers.d.ts.map +1 -0
- package/dist/transport/collectives/shared-answers.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/validation.d.ts +8 -10
- package/dist/transport/collectives/validation.d.ts.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/validation.js +10 -21
- package/dist/transport/collectives/validation.js.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/wire.d.ts +18 -13
- package/dist/transport/collectives/wire.d.ts.map +1 -0
- package/dist/{endpoint/collective → transport/collectives}/wire.js +19 -38
- package/dist/transport/collectives/wire.js.map +1 -0
- package/dist/{endpoint/addressing/index.d.ts → transport/messaging/address.d.ts} +38 -5
- package/dist/transport/messaging/address.d.ts.map +1 -0
- package/dist/{endpoint/addressing/index.js → transport/messaging/address.js} +100 -21
- package/dist/transport/messaging/address.js.map +1 -0
- package/dist/{endpoint/protocol/index.d.ts → transport/messaging/certification.d.ts} +4 -4
- package/dist/transport/messaging/certification.d.ts.map +1 -0
- package/dist/{endpoint/protocol/index.js → transport/messaging/certification.js} +7 -5
- package/dist/transport/messaging/certification.js.map +1 -0
- package/dist/{endpoint/engine-dissemination.d.ts → transport/messaging/dissemination.d.ts} +3 -3
- package/dist/transport/messaging/dissemination.d.ts.map +1 -0
- package/dist/{endpoint/engine-dissemination.js → transport/messaging/dissemination.js} +5 -5
- package/dist/transport/messaging/dissemination.js.map +1 -0
- package/dist/{endpoint/engine-durability.d.ts → transport/messaging/durability.d.ts} +4 -4
- package/dist/{endpoint/engine-durability.d.ts.map → transport/messaging/durability.d.ts.map} +1 -1
- package/dist/{endpoint/engine-durability.js → transport/messaging/durability.js} +4 -13
- package/dist/transport/messaging/durability.js.map +1 -0
- package/dist/transport/messaging/errors.d.ts +50 -0
- package/dist/transport/messaging/errors.d.ts.map +1 -0
- package/dist/transport/messaging/errors.js +64 -0
- package/dist/transport/messaging/errors.js.map +1 -0
- package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts +3 -3
- package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts.map +1 -1
- package/dist/{endpoint/protocol → transport/messaging}/evidence.js +1 -1
- package/dist/transport/messaging/evidence.js.map +1 -0
- package/dist/{endpoint/engine.d.ts → transport/messaging/index.d.ts} +4 -4
- package/dist/transport/messaging/index.d.ts.map +1 -0
- package/dist/{endpoint/engine.js → transport/messaging/index.js} +14 -9
- package/dist/transport/messaging/index.js.map +1 -0
- package/dist/transport/messaging/message.d.ts +112 -0
- package/dist/transport/messaging/message.d.ts.map +1 -0
- package/dist/transport/messaging/message.js +39 -0
- package/dist/transport/messaging/message.js.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/barrier.d.ts +1 -1
- package/dist/transport/messaging/recovery/barrier.d.ts.map +1 -0
- package/dist/transport/messaging/recovery/barrier.js.map +1 -0
- package/dist/{endpoint/recovery/store-evidence.d.ts → transport/messaging/recovery/evidence.d.ts} +5 -5
- package/dist/transport/messaging/recovery/evidence.d.ts.map +1 -0
- package/dist/{endpoint/recovery/store-evidence.js → transport/messaging/recovery/evidence.js} +3 -3
- package/dist/transport/messaging/recovery/evidence.js.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/index.d.ts +4 -4
- package/dist/transport/messaging/recovery/index.d.ts.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/index.js +29 -25
- package/dist/transport/messaging/recovery/index.js.map +1 -0
- package/dist/{endpoint/recovery/store.d.ts → transport/messaging/recovery/persistence.d.ts} +5 -5
- package/dist/transport/messaging/recovery/persistence.d.ts.map +1 -0
- package/dist/{endpoint/recovery/store.js → transport/messaging/recovery/persistence.js} +4 -4
- package/dist/transport/messaging/recovery/persistence.js.map +1 -0
- package/dist/{endpoint/recovery/reanchor/empty.d.ts → transport/messaging/recovery/reanchor-empty.d.ts} +6 -6
- package/dist/transport/messaging/recovery/reanchor-empty.d.ts.map +1 -0
- package/dist/{endpoint/recovery/reanchor/empty.js → transport/messaging/recovery/reanchor-empty.js} +4 -4
- package/dist/transport/messaging/recovery/reanchor-empty.js.map +1 -0
- package/dist/{endpoint/recovery/reanchor/index.d.ts → transport/messaging/recovery/reanchor.d.ts} +4 -4
- package/dist/transport/messaging/recovery/reanchor.d.ts.map +1 -0
- package/dist/{endpoint/recovery/reanchor/index.js → transport/messaging/recovery/reanchor.js} +29 -14
- package/dist/transport/messaging/recovery/reanchor.js.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/state.d.ts +5 -5
- package/dist/transport/messaging/recovery/state.d.ts.map +1 -0
- package/dist/{endpoint → transport/messaging}/recovery/state.js +2 -2
- package/dist/transport/messaging/recovery/state.js.map +1 -0
- package/dist/{endpoint/engine-send.d.ts → transport/messaging/send.d.ts} +5 -4
- package/dist/transport/messaging/send.d.ts.map +1 -0
- package/dist/{endpoint/engine-send.js → transport/messaging/send.js} +4 -4
- package/dist/transport/messaging/send.js.map +1 -0
- package/dist/{endpoint/engine-types.d.ts → transport/messaging/types.d.ts} +7 -5
- package/dist/transport/messaging/types.d.ts.map +1 -0
- package/dist/{endpoint/engine-types.js → transport/messaging/types.js} +1 -1
- package/dist/{endpoint/engine-types.js.map → transport/messaging/types.js.map} +1 -1
- package/dist/transport/router/index.d.ts.map +1 -0
- package/dist/{endpoint/router-worker → transport/router}/index.js +1 -1
- package/dist/transport/router/index.js.map +1 -0
- package/dist/transport/router/outage.d.ts.map +1 -0
- package/dist/transport/router/outage.js.map +1 -0
- package/dist/{endpoint/router-worker → transport/router}/types.d.ts +2 -2
- package/dist/transport/router/types.d.ts.map +1 -0
- package/dist/transport/router/types.js.map +1 -0
- package/dist/{endpoint/representation-canonical.d.ts → transport/wire/canonical.d.ts} +1 -1
- package/dist/transport/wire/canonical.d.ts.map +1 -0
- package/dist/{endpoint/representation-canonical.js → transport/wire/canonical.js} +1 -1
- package/dist/transport/wire/canonical.js.map +1 -0
- package/dist/{endpoint/representation-codec.d.ts → transport/wire/codec.d.ts} +5 -6
- package/dist/transport/wire/codec.d.ts.map +1 -0
- package/dist/{endpoint/representation-codec.js → transport/wire/codec.js} +5 -24
- package/dist/transport/wire/codec.js.map +1 -0
- package/dist/transport/wire/index.d.ts +7 -0
- package/dist/transport/wire/index.d.ts.map +1 -0
- package/dist/transport/wire/index.js +10 -0
- package/dist/transport/wire/index.js.map +1 -0
- package/dist/{endpoint/representation-schemas.d.ts → transport/wire/schemas.d.ts} +76 -98
- package/dist/transport/wire/schemas.d.ts.map +1 -0
- package/dist/{endpoint/representation-schemas.js → transport/wire/schemas.js} +7 -19
- package/dist/transport/wire/schemas.js.map +1 -0
- package/dist/transport/wire/values.d.ts +79 -0
- package/dist/transport/wire/values.d.ts.map +1 -0
- package/dist/transport/wire/values.js +115 -0
- package/dist/transport/wire/values.js.map +1 -0
- package/dist/{endpoint/representation-verification.d.ts → transport/wire/verification.d.ts} +4 -4
- package/dist/transport/wire/verification.d.ts.map +1 -0
- package/dist/{endpoint/representation-verification.js → transport/wire/verification.js} +5 -4
- package/dist/transport/wire/verification.js.map +1 -0
- package/package.json +6 -6
- package/dist/client-runtime.d.ts.map +0 -1
- package/dist/client-runtime.js.map +0 -1
- package/dist/contract.d.ts +0 -721
- package/dist/contract.d.ts.map +0 -1
- package/dist/contract.js +0 -451
- package/dist/contract.js.map +0 -1
- package/dist/contract.types-check.d.ts.map +0 -1
- package/dist/contract.types-check.js.map +0 -1
- package/dist/daemon/configuration.d.ts.map +0 -1
- package/dist/daemon/configuration.js.map +0 -1
- package/dist/daemon/management.d.ts.map +0 -1
- package/dist/daemon/management.js.map +0 -1
- package/dist/daemon/registration.d.ts.map +0 -1
- package/dist/daemon/registration.js.map +0 -1
- package/dist/daemon/runtime/activation.d.ts.map +0 -1
- package/dist/daemon/runtime/activation.js.map +0 -1
- package/dist/daemon/runtime/controller.d.ts.map +0 -1
- package/dist/daemon/runtime/controller.js +0 -140
- package/dist/daemon/runtime/controller.js.map +0 -1
- package/dist/daemon/runtime/history-export.d.ts +0 -33
- package/dist/daemon/runtime/history-export.d.ts.map +0 -1
- package/dist/daemon/runtime/history-export.js.map +0 -1
- package/dist/daemon/runtime/index.d.ts.map +0 -1
- package/dist/daemon/runtime/index.js.map +0 -1
- package/dist/daemon/runtime/pending-delivery.d.ts +0 -49
- package/dist/daemon/runtime/pending-delivery.d.ts.map +0 -1
- package/dist/daemon/runtime/pending-delivery.js.map +0 -1
- package/dist/daemon/runtime/protocol.d.ts.map +0 -1
- package/dist/daemon/runtime/protocol.js.map +0 -1
- package/dist/endpoint/addressing/index.d.ts.map +0 -1
- package/dist/endpoint/addressing/index.js.map +0 -1
- package/dist/endpoint/collective/operation.d.ts.map +0 -1
- package/dist/endpoint/collective/operation.js.map +0 -1
- package/dist/endpoint/collective/shared-answers.d.ts.map +0 -1
- package/dist/endpoint/collective/shared-answers.js.map +0 -1
- package/dist/endpoint/collective/validation.d.ts.map +0 -1
- package/dist/endpoint/collective/validation.js.map +0 -1
- package/dist/endpoint/collective/wire.d.ts.map +0 -1
- package/dist/endpoint/collective/wire.js.map +0 -1
- package/dist/endpoint/engine-dissemination.d.ts.map +0 -1
- package/dist/endpoint/engine-dissemination.js.map +0 -1
- package/dist/endpoint/engine-durability.js.map +0 -1
- package/dist/endpoint/engine-send.d.ts.map +0 -1
- package/dist/endpoint/engine-send.js.map +0 -1
- package/dist/endpoint/engine-types.d.ts.map +0 -1
- package/dist/endpoint/engine.d.ts.map +0 -1
- package/dist/endpoint/engine.js.map +0 -1
- package/dist/endpoint/protocol/evidence.js.map +0 -1
- package/dist/endpoint/protocol/index.d.ts.map +0 -1
- package/dist/endpoint/protocol/index.js.map +0 -1
- package/dist/endpoint/recovery/barrier.d.ts.map +0 -1
- package/dist/endpoint/recovery/barrier.js.map +0 -1
- package/dist/endpoint/recovery/index.d.ts.map +0 -1
- package/dist/endpoint/recovery/index.js.map +0 -1
- package/dist/endpoint/recovery/reanchor/empty.d.ts.map +0 -1
- package/dist/endpoint/recovery/reanchor/empty.js.map +0 -1
- package/dist/endpoint/recovery/reanchor/index.d.ts.map +0 -1
- package/dist/endpoint/recovery/reanchor/index.js.map +0 -1
- package/dist/endpoint/recovery/state.d.ts.map +0 -1
- package/dist/endpoint/recovery/state.js.map +0 -1
- package/dist/endpoint/recovery/store-evidence.d.ts.map +0 -1
- package/dist/endpoint/recovery/store-evidence.js.map +0 -1
- package/dist/endpoint/recovery/store.d.ts.map +0 -1
- package/dist/endpoint/recovery/store.js.map +0 -1
- package/dist/endpoint/representation-canonical.d.ts.map +0 -1
- package/dist/endpoint/representation-canonical.js.map +0 -1
- package/dist/endpoint/representation-codec.d.ts.map +0 -1
- package/dist/endpoint/representation-codec.js.map +0 -1
- package/dist/endpoint/representation-schemas.d.ts.map +0 -1
- package/dist/endpoint/representation-schemas.js.map +0 -1
- package/dist/endpoint/representation-verification.d.ts.map +0 -1
- package/dist/endpoint/representation-verification.js.map +0 -1
- package/dist/endpoint/representation.d.ts +0 -6
- package/dist/endpoint/representation.d.ts.map +0 -1
- package/dist/endpoint/representation.js +0 -8
- package/dist/endpoint/representation.js.map +0 -1
- package/dist/endpoint/router-worker/index.d.ts.map +0 -1
- package/dist/endpoint/router-worker/index.js.map +0 -1
- package/dist/endpoint/router-worker/outage.d.ts.map +0 -1
- package/dist/endpoint/router-worker/outage.js.map +0 -1
- package/dist/endpoint/router-worker/types.d.ts.map +0 -1
- package/dist/endpoint/router-worker/types.js.map +0 -1
- package/dist/endpoint/store/anchors.d.ts.map +0 -1
- package/dist/endpoint/store/anchors.js.map +0 -1
- package/dist/endpoint/store/database/index.d.ts.map +0 -1
- package/dist/endpoint/store/database/index.js.map +0 -1
- package/dist/endpoint/store/database/schema.d.ts.map +0 -1
- package/dist/endpoint/store/database/schema.js.map +0 -1
- package/dist/endpoint/store/database/values.d.ts.map +0 -1
- package/dist/endpoint/store/database/values.js.map +0 -1
- package/dist/endpoint/store/deliveries.d.ts.map +0 -1
- package/dist/endpoint/store/deliveries.js.map +0 -1
- package/dist/endpoint/store/dissemination.d.ts.map +0 -1
- package/dist/endpoint/store/dissemination.js.map +0 -1
- package/dist/endpoint/store/index.d.ts.map +0 -1
- package/dist/endpoint/store/index.js.map +0 -1
- package/dist/endpoint/store/management.d.ts.map +0 -1
- package/dist/endpoint/store/management.js.map +0 -1
- package/dist/endpoint/store/outbound.d.ts.map +0 -1
- package/dist/endpoint/store/outbound.js.map +0 -1
- package/dist/endpoint/store/records.d.ts.map +0 -1
- package/dist/endpoint/store/records.js.map +0 -1
- package/dist/endpoint/store/rows/index.d.ts.map +0 -1
- package/dist/endpoint/store/rows/index.js.map +0 -1
- package/dist/endpoint/store/types.d.ts.map +0 -1
- package/dist/endpoint/store/types.js.map +0 -1
- package/dist/endpoint/store.d.ts +0 -10
- package/dist/endpoint/store.d.ts.map +0 -1
- package/dist/endpoint/store.js +0 -6
- package/dist/endpoint/store.js.map +0 -1
- package/dist/harness-mcp-contract.d.ts.map +0 -1
- package/dist/harness-mcp-contract.js +0 -113
- package/dist/harness-mcp-contract.js.map +0 -1
- package/dist/harness-mcp-http.d.ts.map +0 -1
- package/dist/harness-mcp-http.js.map +0 -1
- package/dist/harness-mcp-subscription.d.ts +0 -30
- package/dist/harness-mcp-subscription.d.ts.map +0 -1
- package/dist/harness-mcp-subscription.js +0 -361
- package/dist/harness-mcp-subscription.js.map +0 -1
- package/dist/harness-mcp-wire.d.ts.map +0 -1
- package/dist/harness-mcp-wire.js.map +0 -1
- package/dist/management-runtime.d.ts.map +0 -1
- package/dist/management-runtime.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/server.types-check.d.ts.map +0 -1
- package/dist/server.types-check.js.map +0 -1
- /package/dist/{endpoint/store → store}/anchors.d.ts +0 -0
- /package/dist/{endpoint/store → store}/anchors.js +0 -0
- /package/dist/{endpoint/store → store}/database/index.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/index.js +0 -0
- /package/dist/{endpoint/store → store}/database/schema.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/values.d.ts +0 -0
- /package/dist/{endpoint/store → store}/database/values.js +0 -0
- /package/dist/{endpoint/store → store}/dissemination.d.ts +0 -0
- /package/dist/{endpoint/store → store}/dissemination.js +0 -0
- /package/dist/{endpoint/store → store}/outbound.d.ts +0 -0
- /package/dist/{endpoint/store → store}/outbound.js +0 -0
- /package/dist/{endpoint/store → store}/records.d.ts +0 -0
- /package/dist/{endpoint/store → store}/records.js +0 -0
- /package/dist/{endpoint/store → store}/rows/index.d.ts +0 -0
- /package/dist/{endpoint/store → store}/rows/index.js +0 -0
- /package/dist/{endpoint/store → store}/types.js +0 -0
- /package/dist/{endpoint/collective → transport/collectives}/shared-answers.js +0 -0
- /package/dist/{endpoint → transport/messaging}/recovery/barrier.js +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/index.d.ts +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/outage.d.ts +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/outage.js +0 -0
- /package/dist/{endpoint/router-worker → transport/router}/types.js +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** @file Shared schema and ports for the experimental MCP Events edge. */
|
|
2
|
+
import { fromJsonSchema, } from "@modelcontextprotocol/server";
|
|
3
|
+
import { JSONSchema, Schema } from "effect";
|
|
4
|
+
/** Maximum complete UTF-8 callback body accepted by the event transport. */
|
|
5
|
+
export const maximumEventBytes = 256 * 1024;
|
|
6
|
+
/** Callback failures expose no upstream response or destination details. */
|
|
7
|
+
export const callbackReasons = [
|
|
8
|
+
"connection_refused",
|
|
9
|
+
"timeout",
|
|
10
|
+
"tls_error",
|
|
11
|
+
"http_4xx",
|
|
12
|
+
"http_5xx",
|
|
13
|
+
"challenge_failed",
|
|
14
|
+
];
|
|
15
|
+
/** Owner-visible diagnostics omit callback addresses and signing authority. */
|
|
16
|
+
const webhookStatusSchema = Schema.Struct({
|
|
17
|
+
mode: Schema.Literal("none", "push", "webhook"),
|
|
18
|
+
id: Schema.optional(Schema.String),
|
|
19
|
+
refreshBefore: Schema.optional(Schema.String),
|
|
20
|
+
pendingCount: Schema.optional(Schema.NonNegativeInt),
|
|
21
|
+
stalled: Schema.optional(Schema.NullOr(Schema.Literal("callback", "terminal"))),
|
|
22
|
+
lastError: Schema.optional(Schema.NullOr(Schema.Literal(...callbackReasons))),
|
|
23
|
+
});
|
|
24
|
+
/** JSON Schema for the owner-only, secret-free event status tool. */
|
|
25
|
+
export const webhookStatusJsonSchema = JSONSchema.make(webhookStatusSchema, {
|
|
26
|
+
target: "jsonSchema2020-12",
|
|
27
|
+
});
|
|
28
|
+
const emptyArguments = Schema.Record({
|
|
29
|
+
key: Schema.String,
|
|
30
|
+
value: Schema.Never,
|
|
31
|
+
});
|
|
32
|
+
/** An absent cursor has the draft's explicit null meaning. */
|
|
33
|
+
const subscriptionSchema = Schema.Struct({
|
|
34
|
+
name: Schema.String,
|
|
35
|
+
arguments: emptyArguments,
|
|
36
|
+
cursor: Schema.optionalWith(Schema.NullOr(Schema.String), { exact: true }),
|
|
37
|
+
maxAgeMs: Schema.optionalWith(Schema.NonNegativeInt, { exact: true }),
|
|
38
|
+
});
|
|
39
|
+
/** Catalog pagination uses its own cursor rather than event replay state. */
|
|
40
|
+
const listSchema = Schema.Struct({
|
|
41
|
+
cursor: Schema.optionalWith(Schema.String, { exact: true }),
|
|
42
|
+
});
|
|
43
|
+
/** Delivery policy checks follow SDK shape validation. */
|
|
44
|
+
const subscribeSchema = Schema.Struct({
|
|
45
|
+
...subscriptionSchema.fields,
|
|
46
|
+
delivery: Schema.Struct({
|
|
47
|
+
mode: Schema.String,
|
|
48
|
+
url: Schema.String,
|
|
49
|
+
secret: Schema.String,
|
|
50
|
+
}),
|
|
51
|
+
ttlMs: Schema.optionalWith(Schema.NullOr(Schema.NonNegativeInt), {
|
|
52
|
+
exact: true,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
/** Cleanup identifies the registration without disclosing its signing secret. */
|
|
56
|
+
const unsubscribeSchema = Schema.Struct({
|
|
57
|
+
name: Schema.String,
|
|
58
|
+
arguments: emptyArguments,
|
|
59
|
+
delivery: Schema.Struct({ url: Schema.String }),
|
|
60
|
+
});
|
|
61
|
+
const standard = (schema) => fromJsonSchema(
|
|
62
|
+
// eslint-disable-next-line agent-code-guard/require-assertion-rationale -- Effect emits the JSON Schema object consumed by the pinned official SDK.
|
|
63
|
+
JSONSchema.make(schema, { target: "jsonSchema2020-12" }));
|
|
64
|
+
/** SDK boundary validation keeps schema constructors private. */
|
|
65
|
+
export const eventStreamInput = standard(subscriptionSchema);
|
|
66
|
+
/** The event catalog has its own pagination grammar. */
|
|
67
|
+
export const eventListInput = standard(listSchema);
|
|
68
|
+
/** Callback registration includes the signing authority and lease request. */
|
|
69
|
+
export const eventSubscribeInput = standard(subscribeSchema);
|
|
70
|
+
/** Cleanup uses only the subscription's public key fields. */
|
|
71
|
+
export const eventUnsubscribeInput = standard(unsubscribeSchema);
|
|
72
|
+
//# sourceMappingURL=event-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-schemas.js","sourceRoot":"","sources":["../../../src/endpoint/mcp/event-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** @file MCP Events signing and callback policy on the Effect HTTP client. */
|
|
2
|
+
import { HttpClient } from "@effect/platform";
|
|
3
|
+
import { Effect, Layer } from "effect";
|
|
4
|
+
/** Closed callback diagnostics, never an upstream body, header or network address. */
|
|
5
|
+
export type WebhookFailureReason = "connection_refused" | "timeout" | "tls_error" | "http_4xx" | "http_5xx" | "challenge_failed";
|
|
6
|
+
declare const WebhookCallbackError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
7
|
+
readonly _tag: "WebhookCallbackError";
|
|
8
|
+
} & Readonly<A>;
|
|
9
|
+
/** Expected callback failure safe to report in the Events protocol. */
|
|
10
|
+
export declare class WebhookCallbackError extends WebhookCallbackError_base<{
|
|
11
|
+
readonly reason: WebhookFailureReason;
|
|
12
|
+
readonly discardOccurrence?: boolean;
|
|
13
|
+
}> {
|
|
14
|
+
}
|
|
15
|
+
/** One immutable event or verification body, signed separately on each attempt. */
|
|
16
|
+
export interface WebhookPost {
|
|
17
|
+
readonly url: string;
|
|
18
|
+
readonly secret: string;
|
|
19
|
+
readonly messageId: string;
|
|
20
|
+
readonly subscriptionId: string;
|
|
21
|
+
readonly body: string;
|
|
22
|
+
readonly timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Exclude local, mapped, transition, reserved and documentation destinations.
|
|
26
|
+
* @param address One resolved literal address, never a hostname.
|
|
27
|
+
* @returns Whether the callback may connect directly to this address.
|
|
28
|
+
*/
|
|
29
|
+
export declare const isPublicWebhookAddress: (address: string) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Validate the URL before either verification or delivery can open a connection.
|
|
32
|
+
* @param value Callback URL supplied by the authenticated subscriber.
|
|
33
|
+
* @returns A canonical HTTPS URL without embedded authority or fragments.
|
|
34
|
+
*/
|
|
35
|
+
export declare const webhookUrl: (value: string) => URL | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Validate the Standard Webhooks secret without retaining an alternate spelling.
|
|
38
|
+
* @param secret Client-generated symmetric signing secret.
|
|
39
|
+
* @returns Whether it contains canonical base64 of 24 through 64 bytes.
|
|
40
|
+
*/
|
|
41
|
+
export declare const validWebhookSecret: (secret: string) => boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Effect owns sockets, interruption and response decoding. Connection-time DNS
|
|
44
|
+
* validation retains the original Host and TLS name without a second lookup.
|
|
45
|
+
* Keep-alive is disabled so each delivery attempts a fresh validated connection.
|
|
46
|
+
* Redirect following is not installed on this client.
|
|
47
|
+
*/
|
|
48
|
+
export declare const webhookHttpClientLayer: Layer.Layer<HttpClient.HttpClient, never, never>;
|
|
49
|
+
/**
|
|
50
|
+
* Read only the challenge response, with Effect closing the connection on exit.
|
|
51
|
+
* @param post Signed verification request with its challenge.
|
|
52
|
+
* @returns Bounded response text for challenge validation.
|
|
53
|
+
*/
|
|
54
|
+
export declare const readWebhookChallenge: (post: WebhookPost) => Effect.Effect<string, WebhookCallbackError, HttpClient.HttpClient>;
|
|
55
|
+
/**
|
|
56
|
+
* A 2xx response accepts transport delivery; its body cannot change that receipt.
|
|
57
|
+
* @param post Exact retained event bytes and current signing metadata.
|
|
58
|
+
* @returns Completion at successful headers, with Effect closing the response.
|
|
59
|
+
*/
|
|
60
|
+
export declare const sendWebhook: (post: WebhookPost) => Effect.Effect<void, WebhookCallbackError, HttpClient.HttpClient>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=event-signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-signing.d.ts","sourceRoot":"","sources":["../../../src/endpoint/mcp/event-signing.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EACL,UAAU,EAIX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAsB,MAAM,QAAQ,CAAC;AAMjE,sFAAsF;AACtF,MAAM,MAAM,oBAAoB,GAC5B,oBAAoB,GACpB,SAAS,GACT,WAAW,GACX,UAAU,GACV,UAAU,GACV,kBAAkB,CAAC;;;;AAEvB,uEAAuE;AACvE,qBAAa,oBAAqB,SAAQ,0BAExC;IACA,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC,CAAC;CAAG;AAEL,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAgCD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YAAa,MAAM,KAAG,OAOxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,UAAW,MAAM,KAAG,GAAG,GAAG,SAWhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAY,MAAM,KAAG,OAWnD,CAAC;AAkDF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,kDAIlC,CAAC;AA2EF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,SACzB,WAAW,KAChB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,CAAC,UAAU,CASnB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAChB,WAAW,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,UAAU,CAAC,UAAU,CAG/D,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/** @file MCP Events signing and callback policy on the Effect HTTP client. */
|
|
2
|
+
import { HttpClient, HttpClientRequest, HttpIncomingMessage, } from "@effect/platform";
|
|
3
|
+
import { NodeHttpClient } from "@effect/platform-node";
|
|
4
|
+
import { Data, Effect, Layer, Option } from "effect";
|
|
5
|
+
import { createHmac } from "node:crypto";
|
|
6
|
+
import { lookup } from "node:dns";
|
|
7
|
+
import { BlockList, isIP } from "node:net";
|
|
8
|
+
import { maximumEventBytes } from "./event-schemas.js";
|
|
9
|
+
/** Expected callback failure safe to report in the Events protocol. */
|
|
10
|
+
export class WebhookCallbackError extends Data.TaggedError("WebhookCallbackError") {
|
|
11
|
+
}
|
|
12
|
+
/* eslint-disable sonarjs/no-hardcoded-ip -- These are excluded address ranges for callback SSRF defense, never configured endpoints. */
|
|
13
|
+
const blockedV4 = new BlockList();
|
|
14
|
+
for (const [address, prefix] of [
|
|
15
|
+
["0.0.0.0", 8],
|
|
16
|
+
["10.0.0.0", 8],
|
|
17
|
+
["100.64.0.0", 10],
|
|
18
|
+
["127.0.0.0", 8],
|
|
19
|
+
["169.254.0.0", 16],
|
|
20
|
+
["172.16.0.0", 12],
|
|
21
|
+
["192.0.0.0", 24],
|
|
22
|
+
["192.0.2.0", 24],
|
|
23
|
+
["192.88.99.0", 24],
|
|
24
|
+
["192.168.0.0", 16],
|
|
25
|
+
["198.18.0.0", 15],
|
|
26
|
+
["198.51.100.0", 24],
|
|
27
|
+
["203.0.113.0", 24],
|
|
28
|
+
["224.0.0.0", 4],
|
|
29
|
+
["240.0.0.0", 4],
|
|
30
|
+
]) {
|
|
31
|
+
blockedV4.addSubnet(address, prefix, "ipv4");
|
|
32
|
+
}
|
|
33
|
+
const globalV6 = new BlockList();
|
|
34
|
+
globalV6.addSubnet("2000::", 3, "ipv6");
|
|
35
|
+
const blockedV6 = new BlockList();
|
|
36
|
+
blockedV6.addSubnet("2001::", 23, "ipv6");
|
|
37
|
+
blockedV6.addSubnet("2001:db8::", 32, "ipv6");
|
|
38
|
+
blockedV6.addSubnet("2002::", 16, "ipv6");
|
|
39
|
+
blockedV6.addSubnet("3fff::", 20, "ipv6");
|
|
40
|
+
/* eslint-enable sonarjs/no-hardcoded-ip -- Restore endpoint address checks outside the exclusion table. */
|
|
41
|
+
/**
|
|
42
|
+
* Exclude local, mapped, transition, reserved and documentation destinations.
|
|
43
|
+
* @param address One resolved literal address, never a hostname.
|
|
44
|
+
* @returns Whether the callback may connect directly to this address.
|
|
45
|
+
*/
|
|
46
|
+
export const isPublicWebhookAddress = (address) => {
|
|
47
|
+
const family = isIP(address);
|
|
48
|
+
return family === 4
|
|
49
|
+
? !blockedV4.check(address, "ipv4")
|
|
50
|
+
: family === 6 &&
|
|
51
|
+
globalV6.check(address, "ipv6") &&
|
|
52
|
+
!blockedV6.check(address, "ipv6");
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Validate the URL before either verification or delivery can open a connection.
|
|
56
|
+
* @param value Callback URL supplied by the authenticated subscriber.
|
|
57
|
+
* @returns A canonical HTTPS URL without embedded authority or fragments.
|
|
58
|
+
*/
|
|
59
|
+
export const webhookUrl = (value) => {
|
|
60
|
+
if (!URL.canParse(value)) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
const url = new URL(value);
|
|
64
|
+
if (url.protocol !== "https:") {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return url.username === "" && url.password === "" && url.hash === ""
|
|
68
|
+
? url
|
|
69
|
+
: undefined;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Validate the Standard Webhooks secret without retaining an alternate spelling.
|
|
73
|
+
* @param secret Client-generated symmetric signing secret.
|
|
74
|
+
* @returns Whether it contains canonical base64 of 24 through 64 bytes.
|
|
75
|
+
*/
|
|
76
|
+
export const validWebhookSecret = (secret) => {
|
|
77
|
+
if (!secret.startsWith("whsec_")) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const encoded = secret.slice("whsec_".length);
|
|
81
|
+
const bytes = Buffer.from(encoded, "base64");
|
|
82
|
+
return (bytes.length >= 24 &&
|
|
83
|
+
bytes.length <= 64 &&
|
|
84
|
+
bytes.toString("base64") === encoded);
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Sign the exact retained body with a fresh delivery timestamp.
|
|
88
|
+
* @param post Immutable message identity and body plus current signing authority.
|
|
89
|
+
* @returns Standard Webhooks headers and the MCP subscription routing identity.
|
|
90
|
+
*/
|
|
91
|
+
const webhookHeaders = (post) => {
|
|
92
|
+
const timestamp = String(Math.floor(post.timestamp / 1000));
|
|
93
|
+
const signature = createHmac("sha256", Buffer.from(post.secret.slice("whsec_".length), "base64"))
|
|
94
|
+
.update(`${post.messageId}.${timestamp}.${post.body}`)
|
|
95
|
+
.digest("base64");
|
|
96
|
+
return {
|
|
97
|
+
"content-type": "application/json",
|
|
98
|
+
"webhook-id": post.messageId,
|
|
99
|
+
"webhook-timestamp": timestamp,
|
|
100
|
+
"webhook-signature": `v1,${signature}`,
|
|
101
|
+
"x-mcp-subscription-id": post.subscriptionId,
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
const callbackFailure = (reason) => new WebhookCallbackError({ reason });
|
|
105
|
+
/** Node's connection-time resolver validates every address before selecting one. */
|
|
106
|
+
const publicLookup = (hostname, options, callback) => {
|
|
107
|
+
lookup(hostname, { all: true, verbatim: true }, (error, addresses) => {
|
|
108
|
+
if (error !== null) {
|
|
109
|
+
callback(new Error("Callback address unavailable"), "", 4);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const first = addresses[0];
|
|
113
|
+
if (first === undefined ||
|
|
114
|
+
!addresses.every(({ address }) => isPublicWebhookAddress(address))) {
|
|
115
|
+
callback(new Error("Callback address unavailable"), "", 4);
|
|
116
|
+
}
|
|
117
|
+
else if (options.all === true) {
|
|
118
|
+
callback(null, addresses);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
callback(null, first.address, first.family);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Effect owns sockets, interruption and response decoding. Connection-time DNS
|
|
127
|
+
* validation retains the original Host and TLS name without a second lookup.
|
|
128
|
+
* Keep-alive is disabled so each delivery attempts a fresh validated connection.
|
|
129
|
+
* Redirect following is not installed on this client.
|
|
130
|
+
*/
|
|
131
|
+
export const webhookHttpClientLayer = NodeHttpClient.layerWithoutAgent.pipe(Layer.provide(NodeHttpClient.makeAgentLayer({ keepAlive: false, lookup: publicLookup })));
|
|
132
|
+
const validatePost = (post) => Effect.gen(function* () {
|
|
133
|
+
const url = webhookUrl(post.url);
|
|
134
|
+
if (url === undefined ||
|
|
135
|
+
!validWebhookSecret(post.secret) ||
|
|
136
|
+
Buffer.byteLength(post.body, "utf8") > maximumEventBytes) {
|
|
137
|
+
return yield* Effect.fail(callbackFailure("connection_refused"));
|
|
138
|
+
}
|
|
139
|
+
const host = url.hostname.replace(/^\[|\]$/gu, "");
|
|
140
|
+
if (isIP(host) !== 0 && !isPublicWebhookAddress(host)) {
|
|
141
|
+
return yield* Effect.fail(callbackFailure("connection_refused"));
|
|
142
|
+
}
|
|
143
|
+
return url;
|
|
144
|
+
});
|
|
145
|
+
const transportFailure = (cause) => {
|
|
146
|
+
if (!(cause instanceof Error) ||
|
|
147
|
+
!("code" in cause) ||
|
|
148
|
+
typeof cause.code !== "string") {
|
|
149
|
+
return callbackFailure("connection_refused");
|
|
150
|
+
}
|
|
151
|
+
return callbackFailure(cause.code.includes("TLS") || cause.code.includes("CERT")
|
|
152
|
+
? "tls_error"
|
|
153
|
+
: "connection_refused");
|
|
154
|
+
};
|
|
155
|
+
const executeWebhook = (post) => Effect.gen(function* () {
|
|
156
|
+
const url = yield* validatePost(post);
|
|
157
|
+
const client = yield* HttpClient.HttpClient;
|
|
158
|
+
const response = yield* HttpClient.withScope(client)
|
|
159
|
+
.execute(HttpClientRequest.post(url).pipe(HttpClientRequest.bodyText(post.body, "application/json"), HttpClientRequest.setHeaders(webhookHeaders(post))))
|
|
160
|
+
.pipe(Effect.mapError((error) => transportFailure(error.cause)));
|
|
161
|
+
if (response.status < 200 || response.status >= 300) {
|
|
162
|
+
return yield* Effect.fail(new WebhookCallbackError({
|
|
163
|
+
reason: response.status >= 500 ? "http_5xx" : "http_4xx",
|
|
164
|
+
discardOccurrence: response.status === 410 || response.status === 413,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
return response;
|
|
168
|
+
});
|
|
169
|
+
const boundedCallback = (operation) => Effect.scoped(operation).pipe(Effect.timeoutFail({
|
|
170
|
+
duration: "5 seconds",
|
|
171
|
+
onTimeout: () => callbackFailure("timeout"),
|
|
172
|
+
}));
|
|
173
|
+
/**
|
|
174
|
+
* Read only the challenge response, with Effect closing the connection on exit.
|
|
175
|
+
* @param post Signed verification request with its challenge.
|
|
176
|
+
* @returns Bounded response text for challenge validation.
|
|
177
|
+
*/
|
|
178
|
+
export const readWebhookChallenge = (post) => boundedCallback(executeWebhook(post).pipe(Effect.flatMap((response) => response.text), HttpIncomingMessage.withMaxBodySize(Option.some(4096)), Effect.catchTag("ResponseError", () => Effect.fail(callbackFailure("challenge_failed"))))).pipe(Effect.withSpan("readWebhookChallenge"));
|
|
179
|
+
/**
|
|
180
|
+
* A 2xx response accepts transport delivery; its body cannot change that receipt.
|
|
181
|
+
* @param post Exact retained event bytes and current signing metadata.
|
|
182
|
+
* @returns Completion at successful headers, with Effect closing the response.
|
|
183
|
+
*/
|
|
184
|
+
export const sendWebhook = (post) => boundedCallback(executeWebhook(post).pipe(Effect.asVoid)).pipe(Effect.withSpan("sendWebhook"));
|
|
185
|
+
//# sourceMappingURL=event-signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-signing.js","sourceRoot":"","sources":["../../../src/endpoint/mcp/event-signing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** @file Pinned MCP Events discovery and request-scoped push delivery. */
|
|
2
|
+
import { type McpServer, ProtocolError } from "@modelcontextprotocol/server";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import type { InboxSummary } from "../../store/index.js";
|
|
5
|
+
import { type HarnessWebhookEvents, type WebhookStatus } from "./event-schemas.js";
|
|
6
|
+
/** Durable callback delivery shares this consumer boundary. */
|
|
7
|
+
export { makeWebhookEvents } from "./webhook.js";
|
|
8
|
+
/** Owner-only diagnostics use the same closed status schema. */
|
|
9
|
+
export { webhookStatusJsonSchema } from "./event-schemas.js";
|
|
10
|
+
/** Effect HTTP connection policy for callback delivery. */
|
|
11
|
+
export { webhookHttpClientLayer } from "./event-signing.js";
|
|
12
|
+
interface EventsOptions {
|
|
13
|
+
readonly summary: () => Effect.Effect<InboxSummary, {
|
|
14
|
+
readonly reason: string;
|
|
15
|
+
}>;
|
|
16
|
+
readonly registered: () => boolean;
|
|
17
|
+
readonly gate: Effect.Semaphore;
|
|
18
|
+
readonly webhook?: HarnessWebhookEvents;
|
|
19
|
+
readonly keepAliveMillis?: number;
|
|
20
|
+
readonly onActiveChange?: (active: boolean) => void;
|
|
21
|
+
}
|
|
22
|
+
/** Official SDK request handlers and the daemon's content-free wakeup edge. */
|
|
23
|
+
export interface HarnessEvents {
|
|
24
|
+
readonly install: (server: McpServer["server"], principal?: string) => void;
|
|
25
|
+
readonly hasActiveSubscription: () => boolean;
|
|
26
|
+
readonly notifyPending: () => boolean;
|
|
27
|
+
readonly close: Effect.Effect<void>;
|
|
28
|
+
readonly status: Effect.Effect<WebhookStatus, ProtocolError>;
|
|
29
|
+
readonly revoke: Effect.Effect<void, ProtocolError>;
|
|
30
|
+
readonly resume: Effect.Effect<void, ProtocolError>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Preserve the draft's protocol errors across the Effect and SDK boundary.
|
|
34
|
+
* @param operation Validated Events operation.
|
|
35
|
+
* @param signal Cancellation owned by the MCP request.
|
|
36
|
+
* @returns The SDK result or a sanitized protocol exception.
|
|
37
|
+
*/
|
|
38
|
+
export declare const runEventOperation: <A, E>(operation: Effect.Effect<A, E>, signal: AbortSignal) => Promise<A>;
|
|
39
|
+
/**
|
|
40
|
+
* Own one consumer while the official SDK handles request validation and framing.
|
|
41
|
+
* @param options Classified inbox counters, callback edge and lifecycle.
|
|
42
|
+
* @returns SDK installers and an explicit close for retained event resources.
|
|
43
|
+
*/
|
|
44
|
+
export declare const makeHarnessEvents: (options: EventsOptions) => Effect.Effect<HarnessEvents>;
|
|
45
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/endpoint/mcp/events.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EAGd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAmB,MAAM,EAA8B,MAAM,QAAQ,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAQL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAM5B,+DAA+D;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,gEAAgE;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,2DAA2D;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAU5D,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,CACnC,YAAY,EACZ;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAC5B,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;CACrD;AAwDD;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,GAAU,CAAC,EAAE,CAAC,aAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UACtB,WAAW,eAYpB,CAAC;AAyVF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,YACnB,aAAa,KACrB,MAAM,CAAC,MAAM,CAAC,aAAa,CA0BiB,CAAC"}
|