@moltzap/client 2026.1004.0 → 2026.1005.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/NOTICE +1 -6
- package/dist/delivery/history-export.d.ts +2 -3
- package/dist/delivery/history-export.d.ts.map +1 -1
- package/dist/delivery/inbox.d.ts +2 -1
- package/dist/delivery/inbox.d.ts.map +1 -1
- package/dist/delivery/inbox.js +2 -1
- package/dist/delivery/inbox.js.map +1 -1
- package/dist/delivery/operations.d.ts +8 -10
- package/dist/delivery/operations.d.ts.map +1 -1
- package/dist/endpoint/harness-endpoint/events.js +1 -1
- package/dist/endpoint/harness-endpoint/events.js.map +1 -1
- package/dist/endpoint/harness-endpoint/index.js +1 -1
- package/dist/endpoint/harness-endpoint/index.js.map +1 -1
- package/dist/endpoint/mcp/events.d.ts.map +1 -1
- package/dist/endpoint/mcp/events.js +14 -2
- package/dist/endpoint/mcp/events.js.map +1 -1
- package/dist/endpoint/mcp/names.d.ts +18 -0
- package/dist/endpoint/mcp/names.d.ts.map +1 -0
- package/dist/endpoint/mcp/names.js +18 -0
- package/dist/endpoint/mcp/names.js.map +1 -0
- package/dist/endpoint/mcp/owner-tools.d.ts.map +1 -1
- package/dist/endpoint/mcp/owner-tools.js +1 -2
- package/dist/endpoint/mcp/owner-tools.js.map +1 -1
- package/dist/endpoint/mcp/schemas.d.ts +1 -19
- package/dist/endpoint/mcp/schemas.d.ts.map +1 -1
- package/dist/endpoint/mcp/schemas.js +2 -29
- package/dist/endpoint/mcp/schemas.js.map +1 -1
- package/dist/endpoint/mcp/tools.d.ts.map +1 -1
- package/dist/endpoint/mcp/tools.js +2 -1
- package/dist/endpoint/mcp/tools.js.map +1 -1
- package/dist/endpoint/mcp/webhook.js +1 -1
- package/dist/endpoint/mcp/webhook.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/index.types-check.d.ts +4 -3
- package/dist/index.types-check.d.ts.map +1 -1
- package/dist/index.types-check.js +2 -2
- package/dist/service/{activation.d.ts → activation/index.d.ts} +11 -10
- package/dist/service/activation/index.d.ts.map +1 -0
- package/dist/service/{activation.js → activation/index.js} +4 -4
- package/dist/service/activation/index.js.map +1 -0
- package/dist/service/bootstrap.d.ts +50 -0
- package/dist/service/bootstrap.d.ts.map +1 -0
- package/dist/service/bootstrap.js +6 -0
- package/dist/service/bootstrap.js.map +1 -0
- package/dist/service/configuration.d.ts +3 -49
- package/dist/service/configuration.d.ts.map +1 -1
- package/dist/service/configuration.js +4 -6
- package/dist/service/configuration.js.map +1 -1
- package/dist/service/controller.d.ts +2 -2
- package/dist/service/controller.d.ts.map +1 -1
- package/dist/service/controller.js +1 -1
- package/dist/service/controller.js.map +1 -1
- package/dist/service/index.js +1 -1
- package/dist/service/index.js.map +1 -1
- package/dist/service/lifecycle.d.ts +2 -2
- package/dist/service/lifecycle.d.ts.map +1 -1
- package/dist/service/lifecycle.js +1 -1
- package/dist/service/lifecycle.js.map +1 -1
- package/dist/service/management.d.ts +1 -1
- package/dist/service/management.d.ts.map +1 -1
- package/dist/service/management.js +3 -2
- package/dist/service/management.js.map +1 -1
- package/dist/service/{registration.d.ts → registration/index.d.ts} +3 -3
- package/dist/service/registration/index.d.ts.map +1 -0
- package/dist/service/{registration.js → registration/index.js} +2 -2
- package/dist/service/registration/index.js.map +1 -0
- package/dist/service/supervision.d.ts +2 -2
- package/dist/service/supervision.d.ts.map +1 -1
- package/dist/service/supervision.js +3 -3
- package/dist/service/supervision.js.map +1 -1
- package/dist/store/{deliveries.d.ts → queues/deliveries.d.ts} +1 -1
- package/dist/store/queues/deliveries.d.ts.map +1 -0
- package/dist/store/{deliveries.js → queues/deliveries.js} +3 -3
- package/dist/store/queues/deliveries.js.map +1 -0
- package/dist/store/{dissemination.d.ts → queues/dissemination.d.ts} +4 -2
- package/dist/store/queues/dissemination.d.ts.map +1 -0
- package/dist/store/{dissemination.js → queues/dissemination.js} +5 -4
- package/dist/store/queues/dissemination.js.map +1 -0
- package/dist/store/queues/index.d.ts +5 -0
- package/dist/store/queues/index.d.ts.map +1 -0
- package/dist/store/queues/index.js +7 -0
- package/dist/store/queues/index.js.map +1 -0
- package/dist/store/{outbound.d.ts → queues/outbound.d.ts} +1 -1
- package/dist/store/queues/outbound.d.ts.map +1 -0
- package/dist/store/{outbound.js → queues/outbound.js} +1 -1
- package/dist/store/queues/outbound.js.map +1 -0
- package/dist/store/reads.d.ts.map +1 -1
- package/dist/store/reads.js +1 -3
- package/dist/store/reads.js.map +1 -1
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +1 -2
- package/dist/store/records.js.map +1 -1
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +2 -4
- package/dist/store/store.js.map +1 -1
- package/dist/transport/collectives/failures.d.ts +1 -1
- package/dist/transport/collectives/failures.d.ts.map +1 -1
- package/dist/transport/collectives/forms.d.ts +38 -2
- package/dist/transport/collectives/forms.d.ts.map +1 -1
- package/dist/transport/collectives/forms.js +51 -20
- package/dist/transport/collectives/forms.js.map +1 -1
- package/dist/transport/collectives/inbound.d.ts +2 -3
- package/dist/transport/collectives/inbound.d.ts.map +1 -1
- package/dist/transport/collectives/inbound.js +8 -7
- package/dist/transport/collectives/inbound.js.map +1 -1
- package/dist/transport/collectives/index.d.ts +1 -1
- package/dist/transport/collectives/index.d.ts.map +1 -1
- package/dist/transport/collectives/index.js +1 -1
- package/dist/transport/collectives/index.js.map +1 -1
- package/dist/transport/collectives/message-text.d.ts +5 -2
- package/dist/transport/collectives/message-text.d.ts.map +1 -1
- package/dist/transport/collectives/message-text.js +20 -42
- package/dist/transport/collectives/message-text.js.map +1 -1
- package/dist/transport/collectives/operation.d.ts +20 -15
- package/dist/transport/collectives/operation.d.ts.map +1 -1
- package/dist/transport/collectives/operation.js +53 -60
- package/dist/transport/collectives/operation.js.map +1 -1
- package/dist/transport/collectives/{form-grammar.d.ts → part/grammar.d.ts} +1 -1
- package/dist/transport/collectives/part/grammar.d.ts.map +1 -0
- package/dist/transport/collectives/{form-grammar.js → part/grammar.js} +6 -10
- package/dist/transport/collectives/part/grammar.js.map +1 -0
- package/dist/transport/collectives/{wire.d.ts → part/index.d.ts} +32 -50
- package/dist/transport/collectives/part/index.d.ts.map +1 -0
- package/dist/transport/collectives/{wire.js → part/index.js} +14 -28
- package/dist/transport/collectives/part/index.js.map +1 -0
- package/dist/transport/collectives/received-request.d.ts +1 -1
- package/dist/transport/collectives/received-request.d.ts.map +1 -1
- package/dist/transport/collectives/render.d.ts +40 -0
- package/dist/transport/collectives/render.d.ts.map +1 -0
- package/dist/transport/collectives/render.js +74 -0
- package/dist/transport/collectives/render.js.map +1 -0
- package/dist/transport/collectives/request-sends.d.ts +1 -1
- package/dist/transport/collectives/request-sends.d.ts.map +1 -1
- package/dist/transport/collectives/shared-answers.d.ts +2 -2
- package/dist/transport/collectives/shared-answers.d.ts.map +1 -1
- package/dist/transport/collectives/validation.d.ts +8 -24
- package/dist/transport/collectives/validation.d.ts.map +1 -1
- package/dist/transport/collectives/validation.js +167 -16
- package/dist/transport/collectives/validation.js.map +1 -1
- package/dist/transport/messaging/address.d.ts +2 -32
- package/dist/transport/messaging/address.d.ts.map +1 -1
- package/dist/transport/messaging/address.js +1 -76
- package/dist/transport/messaging/address.js.map +1 -1
- package/dist/transport/messaging/certification.d.ts +1 -1
- package/dist/transport/messaging/certification.d.ts.map +1 -1
- package/dist/transport/messaging/certification.js +10 -7
- package/dist/transport/messaging/certification.js.map +1 -1
- package/dist/transport/messaging/dissemination.d.ts +1 -1
- package/dist/transport/messaging/dissemination.d.ts.map +1 -1
- package/dist/transport/messaging/dissemination.js +4 -3
- package/dist/transport/messaging/dissemination.js.map +1 -1
- package/dist/transport/messaging/evidence.d.ts +1 -1
- package/dist/transport/messaging/evidence.d.ts.map +1 -1
- package/dist/transport/messaging/index.d.ts +3 -3
- package/dist/transport/messaging/index.d.ts.map +1 -1
- package/dist/transport/messaging/index.js +15 -4
- package/dist/transport/messaging/index.js.map +1 -1
- package/dist/transport/messaging/message.d.ts.map +1 -1
- package/dist/transport/messaging/message.js +1 -2
- package/dist/transport/messaging/message.js.map +1 -1
- package/dist/transport/messaging/{recovery/reanchor-empty.d.ts → reanchor/empty.d.ts} +3 -3
- package/dist/transport/messaging/reanchor/empty.d.ts.map +1 -0
- package/dist/transport/messaging/{recovery/reanchor-empty.js → reanchor/empty.js} +2 -2
- package/dist/transport/messaging/reanchor/empty.js.map +1 -0
- package/dist/transport/messaging/{recovery/reanchor.d.ts → reanchor/index.d.ts} +2 -2
- package/dist/transport/messaging/reanchor/index.d.ts.map +1 -0
- package/dist/transport/messaging/{recovery/reanchor.js → reanchor/index.js} +4 -4
- package/dist/transport/messaging/reanchor/index.js.map +1 -0
- package/dist/transport/messaging/{durability.d.ts → records/index.d.ts} +9 -6
- package/dist/transport/messaging/records/index.d.ts.map +1 -0
- package/dist/transport/messaging/{durability.js → records/index.js} +9 -6
- package/dist/transport/messaging/records/index.js.map +1 -0
- package/dist/transport/messaging/recovery/barrier.d.ts +1 -1
- package/dist/transport/messaging/recovery/barrier.d.ts.map +1 -1
- package/dist/transport/messaging/recovery/evidence.d.ts +1 -1
- package/dist/transport/messaging/recovery/evidence.d.ts.map +1 -1
- package/dist/transport/messaging/recovery/index.d.ts +1 -1
- package/dist/transport/messaging/recovery/index.d.ts.map +1 -1
- package/dist/transport/messaging/recovery/index.js +16 -11
- package/dist/transport/messaging/recovery/index.js.map +1 -1
- package/dist/transport/messaging/recovery/persistence.d.ts +1 -1
- package/dist/transport/messaging/recovery/persistence.d.ts.map +1 -1
- package/dist/transport/messaging/{recovery/state.d.ts → recovery-session/index.d.ts} +2 -2
- package/dist/transport/messaging/recovery-session/index.d.ts.map +1 -0
- package/dist/transport/messaging/{recovery/state.js → recovery-session/index.js} +1 -1
- package/dist/transport/messaging/recovery-session/index.js.map +1 -0
- package/dist/transport/messaging/{types.d.ts → runtime/index.d.ts} +22 -7
- package/dist/transport/messaging/runtime/index.d.ts.map +1 -0
- package/dist/transport/messaging/{types.js → runtime/index.js} +1 -1
- package/dist/transport/messaging/runtime/index.js.map +1 -0
- package/dist/transport/messaging/send.d.ts +2 -2
- package/dist/transport/messaging/send.d.ts.map +1 -1
- package/dist/transport/messaging/send.js.map +1 -1
- package/dist/transport/router/types.d.ts +2 -3
- package/dist/transport/router/types.d.ts.map +1 -1
- package/dist/transport/router/types.js.map +1 -1
- package/dist/transport/wire/{canonical.d.ts → encoding/canonical.d.ts} +0 -1
- package/dist/transport/wire/encoding/canonical.d.ts.map +1 -0
- package/dist/transport/wire/{canonical.js → encoding/canonical.js} +1 -1
- package/dist/transport/wire/encoding/canonical.js.map +1 -0
- package/dist/transport/wire/{codec.d.ts → encoding/codec.d.ts} +2 -5
- package/dist/transport/wire/encoding/codec.d.ts.map +1 -0
- package/dist/transport/wire/{codec.js → encoding/codec.js} +4 -5
- package/dist/transport/wire/encoding/codec.js.map +1 -0
- package/dist/transport/wire/encoding/index.d.ts +4 -0
- package/dist/transport/wire/encoding/index.d.ts.map +1 -0
- package/dist/transport/wire/encoding/index.js +6 -0
- package/dist/transport/wire/encoding/index.js.map +1 -0
- package/dist/transport/wire/index.d.ts +2 -3
- package/dist/transport/wire/index.d.ts.map +1 -1
- package/dist/transport/wire/index.js +2 -3
- package/dist/transport/wire/index.js.map +1 -1
- package/dist/transport/wire/values.d.ts +37 -2
- package/dist/transport/wire/values.d.ts.map +1 -1
- package/dist/transport/wire/values.js +78 -1
- package/dist/transport/wire/values.js.map +1 -1
- package/dist/transport/wire/verification.d.ts +1 -2
- package/dist/transport/wire/verification.d.ts.map +1 -1
- package/dist/transport/wire/verification.js +1 -2
- package/dist/transport/wire/verification.js.map +1 -1
- package/package.json +3 -3
- package/dist/service/activation.d.ts.map +0 -1
- package/dist/service/activation.js.map +0 -1
- package/dist/service/registration.d.ts.map +0 -1
- package/dist/service/registration.js.map +0 -1
- package/dist/store/deliveries.d.ts.map +0 -1
- package/dist/store/deliveries.js.map +0 -1
- package/dist/store/dissemination.d.ts.map +0 -1
- package/dist/store/dissemination.js.map +0 -1
- package/dist/store/outbound.d.ts.map +0 -1
- package/dist/store/outbound.js.map +0 -1
- package/dist/transport/collectives/answer-check.d.ts +0 -22
- package/dist/transport/collectives/answer-check.d.ts.map +0 -1
- package/dist/transport/collectives/answer-check.js +0 -166
- package/dist/transport/collectives/answer-check.js.map +0 -1
- package/dist/transport/collectives/form-grammar.d.ts.map +0 -1
- package/dist/transport/collectives/form-grammar.js.map +0 -1
- package/dist/transport/collectives/wire.d.ts.map +0 -1
- package/dist/transport/collectives/wire.js.map +0 -1
- package/dist/transport/messaging/durability.d.ts.map +0 -1
- package/dist/transport/messaging/durability.js.map +0 -1
- package/dist/transport/messaging/recovery/reanchor-empty.d.ts.map +0 -1
- package/dist/transport/messaging/recovery/reanchor-empty.js.map +0 -1
- package/dist/transport/messaging/recovery/reanchor.d.ts.map +0 -1
- package/dist/transport/messaging/recovery/reanchor.js.map +0 -1
- package/dist/transport/messaging/recovery/state.d.ts.map +0 -1
- package/dist/transport/messaging/recovery/state.js.map +0 -1
- package/dist/transport/messaging/types.d.ts.map +0 -1
- package/dist/transport/messaging/types.js.map +0 -1
- package/dist/transport/wire/canonical.d.ts.map +0 -1
- package/dist/transport/wire/canonical.js.map +0 -1
- package/dist/transport/wire/codec.d.ts.map +0 -1
- package/dist/transport/wire/codec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-sends.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/request-sends.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,MAAM,EAEN,MAAM,EAEN,KAAK,EAEN,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"request-sends.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/request-sends.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,MAAM,EAEN,MAAM,EAEN,KAAK,EAEN,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;CAC7B,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAC1C,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAC9C,CAAC;AAeF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAAa,cAAc,KAAG,OACrB,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,YAChB,SAAS,YAAY,EAAE,UACxB,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KAC/D,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAc9B,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,YACf,SAAS,YAAY,EAAE,SACzB,SAAS,WAAW,EAAE,KAC5B,MAAM,CAAC,MAAM,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;CACpC,CAsBE,CAAC"}
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* its result from exactly the answers it holds under the listed hashes. The
|
|
9
9
|
* requester's result uses the same member ordering.
|
|
10
10
|
*/
|
|
11
|
-
import type { AgentAddress } from "../messaging/address.js";
|
|
12
11
|
import type { PostId, RecordHash } from "../wire/index.js";
|
|
12
|
+
import type { AgentAddress } from "../wire/values.js";
|
|
13
13
|
import type { CollectiveMemberOutcome, InboundItem } from "./inbound.js";
|
|
14
|
-
import type { CollectiveValue } from "./
|
|
14
|
+
import type { CollectiveValue } from "./part/index.js";
|
|
15
15
|
/** The members a collecting operation asks, in member order. */
|
|
16
16
|
export type Members = readonly [AgentAddress, ...AgentAddress[]];
|
|
17
17
|
/** A member's response value, as its post carries it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-answers.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/shared-answers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"shared-answers.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/shared-answers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,gEAAgE;AAChE,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;AAEjE,yDAAyD;AACzD,MAAM,MAAM,aAAa,GAAG,OAAO,CACjC,eAAe,EACf;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAC9B,CAAC;AAEF,2DAA2D;AAC3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,WAAW,EACX;IAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,CACtC,CAAC;AAEF,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,eAAe,GACtB,IAAI,CAIN;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,SAAS,UAAU,EAAE;;;;;;;EAkBhC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,WAAW,CAAC,YAAY,EAAE,uBAAuB,CAAC,GAC3D,oBAAoB,CAAC,UAAU,CAAC,CAOlC"}
|
|
@@ -4,37 +4,22 @@
|
|
|
4
4
|
* Validation runs field by field so a failure names each failing field rather
|
|
5
5
|
* than one combined message. The form-mode grammar is flat, so a field's
|
|
6
6
|
* property schema is the whole rule for that field.
|
|
7
|
+
*
|
|
8
|
+
* Each keyword has its JSON Schema 2020-12 meaning, and every failing keyword
|
|
9
|
+
* is reported: a keyword that constrains one JSON type applies only to a
|
|
10
|
+
* value of that type, while `type`, `enum` and `oneOf` apply to any value.
|
|
7
11
|
*/
|
|
8
12
|
import { Effect } from "effect";
|
|
9
|
-
import type { AnswerContent, CollectiveFailure } from "./forms.js";
|
|
10
13
|
import type { CollectiveMemberOutcome } from "./inbound.js";
|
|
11
|
-
import type {
|
|
12
|
-
|
|
13
|
-
* Why one answer field failed its request's schema; `detail` names each
|
|
14
|
-
* keyword an `invalid` field fails.
|
|
15
|
-
*/
|
|
16
|
-
export type CollectiveFieldFailure = Extract<CollectiveFailure, {
|
|
17
|
-
readonly kind: "answer-invalid";
|
|
18
|
-
}>["fields"][number];
|
|
19
|
-
declare const CollectiveAnswerInvalidError_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 & {
|
|
20
|
-
readonly _tag: "CollectiveAnswerInvalidError";
|
|
21
|
-
} & Readonly<A>;
|
|
22
|
-
/** An answer does not satisfy its request's `requestedSchema`. */
|
|
23
|
-
export declare class CollectiveAnswerInvalidError extends CollectiveAnswerInvalidError_base<{
|
|
24
|
-
readonly failures: readonly [
|
|
25
|
-
CollectiveFieldFailure,
|
|
26
|
-
...CollectiveFieldFailure[]
|
|
27
|
-
];
|
|
28
|
-
}> {
|
|
29
|
-
get message(): string;
|
|
30
|
-
}
|
|
14
|
+
import type { FormModeSchema } from "./part/index.js";
|
|
15
|
+
import { type AnswerContent, type AnswerFieldFailures, type CollectiveResponse } from "./forms.js";
|
|
31
16
|
/**
|
|
32
17
|
* Check an answer against the schema its request carried.
|
|
33
18
|
* @param requestedSchema The request's form-mode schema.
|
|
34
19
|
* @param content The member's answer.
|
|
35
|
-
* @returns The answer unchanged, or
|
|
20
|
+
* @returns The answer unchanged, or every failing field.
|
|
36
21
|
*/
|
|
37
|
-
export declare const validateAnswer: (requestedSchema: FormModeSchema, content: AnswerContent) => Effect.Effect<AnswerContent,
|
|
22
|
+
export declare const validateAnswer: (requestedSchema: FormModeSchema, content: AnswerContent) => Effect.Effect<AnswerContent, AnswerFieldFailures>;
|
|
38
23
|
/**
|
|
39
24
|
* Record a received response as the member's outcome. An `accept` whose content
|
|
40
25
|
* fails the request's schema is recorded as invalid rather than rejected.
|
|
@@ -43,5 +28,4 @@ export declare const validateAnswer: (requestedSchema: FormModeSchema, content:
|
|
|
43
28
|
* @returns The member's outcome.
|
|
44
29
|
*/
|
|
45
30
|
export declare const outcomeOfResponse: (requestedSchema: FormModeSchema, response: CollectiveResponse) => Effect.Effect<CollectiveMemberOutcome>;
|
|
46
|
-
export {};
|
|
47
31
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/validation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/transport/collectives/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAuHpB;;;;;GAKG;AACH,eAAO,MAAM,cAAc,oBACR,cAAc,WACtB,aAAa,KACrB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAYlD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,oBACX,cAAc,YACrB,kBAAkB,KAC3B,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAsBvC,CAAC"}
|
|
@@ -4,19 +4,63 @@
|
|
|
4
4
|
* Validation runs field by field so a failure names each failing field rather
|
|
5
5
|
* than one combined message. The form-mode grammar is flat, so a field's
|
|
6
6
|
* property schema is the whole rule for that field.
|
|
7
|
+
*
|
|
8
|
+
* Each keyword has its JSON Schema 2020-12 meaning, and every failing keyword
|
|
9
|
+
* is reported: a keyword that constrains one JSON type applies only to a
|
|
10
|
+
* value of that type, while `type`, `enum` and `oneOf` apply to any value.
|
|
7
11
|
*/
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
import { Effect, Predicate } from "effect";
|
|
13
|
+
import { matchesFormat } from "./answer-formats.js";
|
|
14
|
+
import { answerFieldsText, } from "./forms.js";
|
|
15
|
+
const ALLOWED_VALUES = "must be one of the allowed values";
|
|
16
|
+
/** Every JSON Schema check a form field's keywords make of an answer. */
|
|
17
|
+
const keywordChecks = [
|
|
18
|
+
typeIssues,
|
|
19
|
+
limitIssues,
|
|
20
|
+
formatIssues,
|
|
21
|
+
enumIssues,
|
|
22
|
+
oneOfIssues,
|
|
23
|
+
itemIssues,
|
|
24
|
+
];
|
|
25
|
+
/** The limit keywords, each applying to one JSON type. */
|
|
26
|
+
const limitKeywords = [
|
|
27
|
+
{
|
|
28
|
+
keyword: "minLength",
|
|
29
|
+
measure: codePointLength,
|
|
30
|
+
fails: below,
|
|
31
|
+
requires: (limit) => `must have at least ${limit} characters`,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
keyword: "maxLength",
|
|
35
|
+
measure: codePointLength,
|
|
36
|
+
fails: above,
|
|
37
|
+
requires: (limit) => `must have at most ${limit} characters`,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
keyword: "minimum",
|
|
41
|
+
measure: numericValue,
|
|
42
|
+
fails: below,
|
|
43
|
+
requires: (limit) => `must be >= ${limit}`,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
keyword: "maximum",
|
|
47
|
+
measure: numericValue,
|
|
48
|
+
fails: above,
|
|
49
|
+
requires: (limit) => `must be <= ${limit}`,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
keyword: "minItems",
|
|
53
|
+
measure: itemCount,
|
|
54
|
+
fails: below,
|
|
55
|
+
requires: (limit) => `must have at least ${limit} items`,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
keyword: "maxItems",
|
|
59
|
+
measure: itemCount,
|
|
60
|
+
fails: above,
|
|
61
|
+
requires: (limit) => `must have at most ${limit} items`,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
20
64
|
/**
|
|
21
65
|
* Field names come from peers, so a lookup ignores the prototype chain: an
|
|
22
66
|
* answer field named `constructor` must not find `Object.prototype.constructor`.
|
|
@@ -42,7 +86,7 @@ function fieldFailure(requestedSchema, content, field) {
|
|
|
42
86
|
* Check an answer against the schema its request carried.
|
|
43
87
|
* @param requestedSchema The request's form-mode schema.
|
|
44
88
|
* @param content The member's answer.
|
|
45
|
-
* @returns The answer unchanged, or
|
|
89
|
+
* @returns The answer unchanged, or every failing field.
|
|
46
90
|
*/
|
|
47
91
|
export const validateAnswer = (requestedSchema, content) => {
|
|
48
92
|
const fields = new Set([
|
|
@@ -55,7 +99,7 @@ export const validateAnswer = (requestedSchema, content) => {
|
|
|
55
99
|
});
|
|
56
100
|
return first === undefined
|
|
57
101
|
? Effect.succeed(content)
|
|
58
|
-
: Effect.fail(
|
|
102
|
+
: Effect.fail([first, ...rest]);
|
|
59
103
|
};
|
|
60
104
|
/**
|
|
61
105
|
* Record a received response as the member's outcome. An `accept` whose content
|
|
@@ -68,9 +112,9 @@ export const outcomeOfResponse = (requestedSchema, response) => {
|
|
|
68
112
|
switch (response.action) {
|
|
69
113
|
case "accept":
|
|
70
114
|
return validateAnswer(requestedSchema, response.content).pipe(Effect.match({
|
|
71
|
-
onFailure: (
|
|
115
|
+
onFailure: (fields) => ({
|
|
72
116
|
kind: "invalid",
|
|
73
|
-
reason:
|
|
117
|
+
reason: answerFieldsText(fields),
|
|
74
118
|
}),
|
|
75
119
|
onSuccess: (content) => ({
|
|
76
120
|
kind: "answered",
|
|
@@ -85,4 +129,111 @@ export const outcomeOfResponse = (requestedSchema, response) => {
|
|
|
85
129
|
}
|
|
86
130
|
}
|
|
87
131
|
};
|
|
132
|
+
/**
|
|
133
|
+
* Every failing keyword of one answer value. A titled single-select's value
|
|
134
|
+
* must equal exactly one option, so options repeating a `const` admit
|
|
135
|
+
* neither.
|
|
136
|
+
* @param field The field's admitted property schema.
|
|
137
|
+
* @param value The answer's value for the field.
|
|
138
|
+
* @returns Each failing keyword with what it requires; empty when the value
|
|
139
|
+
* satisfies the field.
|
|
140
|
+
*/
|
|
141
|
+
function answerIssues(field, value) {
|
|
142
|
+
return keywordChecks.flatMap((check) => check(field, value));
|
|
143
|
+
}
|
|
144
|
+
function typeIssues(field, value) {
|
|
145
|
+
return hasType(field, value) ? [] : [`type: must be ${field.type}`];
|
|
146
|
+
}
|
|
147
|
+
function hasType(field, value) {
|
|
148
|
+
switch (field.type) {
|
|
149
|
+
case "string":
|
|
150
|
+
return typeof value === "string";
|
|
151
|
+
case "number":
|
|
152
|
+
return typeof value === "number";
|
|
153
|
+
case "integer":
|
|
154
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
155
|
+
case "boolean":
|
|
156
|
+
return typeof value === "boolean";
|
|
157
|
+
case "array":
|
|
158
|
+
return Array.isArray(value);
|
|
159
|
+
default: {
|
|
160
|
+
const exhaustive = field;
|
|
161
|
+
return exhaustive;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function limitIssues(field, value) {
|
|
166
|
+
return limitKeywords.flatMap(({ keyword, measure, fails, requires }) => {
|
|
167
|
+
const limit = limitOf(field, keyword);
|
|
168
|
+
const measured = measure(value);
|
|
169
|
+
return limit === undefined ||
|
|
170
|
+
measured === undefined ||
|
|
171
|
+
!fails(measured, limit)
|
|
172
|
+
? []
|
|
173
|
+
: [`${keyword}: ${requires(limit)}`];
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
function limitOf(field, keyword) {
|
|
177
|
+
const limit = Predicate.hasProperty(field, keyword)
|
|
178
|
+
? field[keyword]
|
|
179
|
+
: undefined;
|
|
180
|
+
return typeof limit === "number" ? limit : undefined;
|
|
181
|
+
}
|
|
182
|
+
function formatIssues(field, value) {
|
|
183
|
+
if (typeof value !== "string" ||
|
|
184
|
+
!("format" in field) ||
|
|
185
|
+
field.format === undefined) {
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
return matchesFormat(field.format, value)
|
|
189
|
+
? []
|
|
190
|
+
: [`format: must match format "${field.format}"`];
|
|
191
|
+
}
|
|
192
|
+
function enumIssues(field, value) {
|
|
193
|
+
return "enum" in field && !field.enum.some((allowed) => allowed === value)
|
|
194
|
+
? [`enum: ${ALLOWED_VALUES}`]
|
|
195
|
+
: [];
|
|
196
|
+
}
|
|
197
|
+
function oneOfIssues(field, value) {
|
|
198
|
+
return "oneOf" in field &&
|
|
199
|
+
field.oneOf.filter((option) => option.const === value).length !== 1
|
|
200
|
+
? ["oneOf: must equal exactly one option's const"]
|
|
201
|
+
: [];
|
|
202
|
+
}
|
|
203
|
+
function itemIssues(field, value) {
|
|
204
|
+
if (typeof value !== "object" || !("items" in field)) {
|
|
205
|
+
return [];
|
|
206
|
+
}
|
|
207
|
+
const { items } = field;
|
|
208
|
+
return value.flatMap((item, index) => selectedItemIssues(items, item, index));
|
|
209
|
+
}
|
|
210
|
+
function selectedItemIssues(items, item, index) {
|
|
211
|
+
if ("enum" in items) {
|
|
212
|
+
return items.enum.includes(item)
|
|
213
|
+
? []
|
|
214
|
+
: [`items[${index}].enum: ${ALLOWED_VALUES}`];
|
|
215
|
+
}
|
|
216
|
+
return items.anyOf.some((option) => option.const === item)
|
|
217
|
+
? []
|
|
218
|
+
: [`items[${index}].anyOf: must equal some option's const`];
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* A string's length in Unicode code points, as JSON Schema counts it, so an
|
|
222
|
+
* astral character such as an emoji counts once.
|
|
223
|
+
*/
|
|
224
|
+
function codePointLength(value) {
|
|
225
|
+
return typeof value === "string" ? Array.from(value).length : undefined;
|
|
226
|
+
}
|
|
227
|
+
function numericValue(value) {
|
|
228
|
+
return typeof value === "number" ? value : undefined;
|
|
229
|
+
}
|
|
230
|
+
function itemCount(value) {
|
|
231
|
+
return Array.isArray(value) ? value.length : undefined;
|
|
232
|
+
}
|
|
233
|
+
function below(measured, limit) {
|
|
234
|
+
return measured < limit;
|
|
235
|
+
}
|
|
236
|
+
function above(measured, limit) {
|
|
237
|
+
return measured > limit;
|
|
238
|
+
}
|
|
88
239
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/transport/collectives/validation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/transport/collectives/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAGL,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AA+BpB,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D,yEAAyE;AACzE,MAAM,aAAa,GAA4B;IAC7C,UAAU;IACV,WAAW;IACX,YAAY;IACZ,UAAU;IACV,WAAW;IACX,UAAU;CACX,CAAC;AAEF,0DAA0D;AAC1D,MAAM,aAAa,GAA4B;IAC7C;QACE,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,KAAK,aAAa;KAC9D;IACD;QACE,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,KAAK,aAAa;KAC7D;IACD;QACE,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,KAAK,EAAE;KAC3C;IACD;QACE,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,KAAK,EAAE;KAC3C;IACD;QACE,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,KAAK,QAAQ;KACzD;IACD;QACE,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,KAAK,QAAQ;KACxD;CACF,CAAC;AAQF;;;GAGG;AACH,MAAM,QAAQ,GAAG,CACf,MAAuC,EACvC,GAAW,EACQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAE/E,SAAS,YAAY,CACnB,eAA+B,EAC/B,OAAsB,EACtB,KAAa;IAEb,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI;YACvD,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;YAC9B,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,eAA+B,EAC/B,OAAsB,EAC6B,EAAE;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;QACrB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QAC1C,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;KACxB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,eAA+B,EAC/B,QAA4B,EACY,EAAE;IAC1C,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,KAAK,CAAC;gBACX,SAAS,EAAE,CAAC,MAAM,EAA2B,EAAE,CAAC,CAAC;oBAC/C,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;iBACjC,CAAC;gBACF,SAAS,EAAE,CAAC,OAAO,EAA2B,EAAE,CAAC,CAAC;oBAChD,IAAI,EAAE,UAAU;oBAChB,OAAO;iBACR,CAAC;aACH,CAAC,CACH,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9C,SAAS,CAAC;YACR,MAAM,UAAU,GAAU,QAAQ,CAAC;YACnC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAgB,EAAE,KAAkB;IACxD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB,EAAE,KAAkB;IACtD,OAAO,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,KAAgB,EAAE,KAAkB;IACnD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,SAAS,CAAC;YACR,MAAM,UAAU,GAAU,KAAK,CAAC;YAChC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB,EAAE,KAAkB;IACvD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,KAAK,SAAS;YACxB,QAAQ,KAAK,SAAS;YACtB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CACd,KAAgB,EAChB,OAAyB;IAEzB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAChB,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB,EAAE,KAAkB;IACxD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QACpB,KAAK,CAAC,MAAM,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;QACvC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,8BAA8B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB,EAAE,KAAkB;IACtD,OAAO,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC;QACxE,CAAC,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB,EAAE,KAAkB;IACvD,OAAO,OAAO,IAAI,KAAK;QACrB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;QACnE,CAAC,CAAC,CAAC,8CAA8C,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB,EAAE,KAAkB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAuB,EACvB,IAAY,EACZ,KAAa;IAEb,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,cAAc,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;QACxD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,SAAS,KAAK,yCAAyC,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,KAAkB;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,SAAS,KAAK,CAAC,QAAgB,EAAE,KAAa;IAC5C,OAAO,QAAQ,GAAG,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,KAAK,CAAC,QAAgB,EAAE,KAAa;IAC5C,OAAO,QAAQ,GAAG,KAAK,CAAC;AAC1B,CAAC"}
|
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
/** @file Private address resolution from runtime names to immutable cards. */
|
|
2
2
|
import type { Registry } from "@moltzap/identity/registry";
|
|
3
3
|
import { AgentName, type VerifiedAgentCard } from "@moltzap/identity";
|
|
4
|
-
import { type Context, Effect
|
|
4
|
+
import { type Context, Effect } from "effect";
|
|
5
|
+
import { AgentAddress, GroupAddress, type MessageAddressInput } from "../wire/values.js";
|
|
5
6
|
import { SendError } from "./errors.js";
|
|
6
|
-
/**
|
|
7
|
-
* The registry name an `agent:` address names.
|
|
8
|
-
* @param value A candidate address.
|
|
9
|
-
* @returns The name, or undefined when the value is not an agent address.
|
|
10
|
-
*/
|
|
11
|
-
export declare function parseAgentAddress(value: string): string | undefined;
|
|
12
|
-
/**
|
|
13
|
-
* The names a `group:` address lists, in the order given.
|
|
14
|
-
* @param value A candidate address.
|
|
15
|
-
* @returns The names, or undefined when the value is not a group address.
|
|
16
|
-
*/
|
|
17
|
-
export declare function parseGroupAddress(value: string): readonly string[] | undefined;
|
|
18
|
-
/** An explicit direct destination using one canonical Registry name. */
|
|
19
|
-
export declare const AgentAddress: Schema.brand<Schema.filter<Schema.brand<Schema.filter<typeof Schema.String>, "MessageAddressInput">>, "AgentAddress">;
|
|
20
|
-
/** A validated direct destination. */
|
|
21
|
-
export type AgentAddress = typeof AgentAddress.Type;
|
|
22
|
-
/** A complete fixed-member group address in unsigned ASCII name order. */
|
|
23
|
-
export declare const GroupAddress: Schema.brand<Schema.filter<Schema.brand<Schema.filter<typeof Schema.String>, "MessageAddressInput">>, "GroupAddress">;
|
|
24
|
-
/** A validated canonical complete group destination. */
|
|
25
|
-
export type GroupAddress = typeof GroupAddress.Type;
|
|
26
|
-
/** Either accepted destination input, including noncanonical group order. */
|
|
27
|
-
export declare const MessageAddressInput: Schema.brand<Schema.filter<typeof Schema.String>, "MessageAddressInput">;
|
|
28
|
-
/** A validated explicit destination input. */
|
|
29
|
-
export type MessageAddressInput = typeof MessageAddressInput.Type;
|
|
30
7
|
/** Minimal Registry capability required by address resolution. */
|
|
31
8
|
export type AddressRegistryPort = Pick<Context.Tag.Service<typeof Registry>, "lookup">;
|
|
32
9
|
/** Resolved deterministic membership for a direct destination. */
|
|
@@ -82,12 +59,5 @@ export type CanonicalMessageAddress = {
|
|
|
82
59
|
* group, or `invalid-address` or `membership-invalid`.
|
|
83
60
|
*/
|
|
84
61
|
export declare function canonicalMessageAddress(to: MessageAddressInput, localAgentName: string): Effect.Effect<CanonicalMessageAddress, SendError>;
|
|
85
|
-
/**
|
|
86
|
-
* Unsigned ASCII order, the order a canonical group address lists its names in.
|
|
87
|
-
* @param left One name.
|
|
88
|
-
* @param right The other name.
|
|
89
|
-
* @returns Negative, zero, or positive as `left` sorts before, with, or after `right`.
|
|
90
|
-
*/
|
|
91
|
-
export declare function compareAscii(left: string, right: string): number;
|
|
92
62
|
export {};
|
|
93
63
|
//# sourceMappingURL=address.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/transport/messaging/address.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/transport/messaging/address.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACtD,OAAO,EAEL,YAAY,EAIZ,YAAY,EAEZ,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,kEAAkE;AAClE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,QAAQ,CAAC,EACpC,QAAQ,CACT,CAAC;AAEF,kEAAkE;AAClE,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;CACvE;AAED,uEAAuE;AACvE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,SAAS;QAC7B,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,GAAG,iBAAiB,EAAE;KACvB,CAAC;CACH;AAED,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAC9B,qBAAqB,GACrB,oBAAoB,CAAC;AAEzB,UAAU,0BAA0B;IAClC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,mBAAmB,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CASlD;AAED,mEAAmE;AACnE,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;CAChC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;CAC5C,CAAC;AAEN;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,mBAAmB,EACvB,cAAc,EAAE,MAAM,GACrB,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAInD"}
|
|
@@ -1,49 +1,8 @@
|
|
|
1
1
|
/** @file Private address resolution from runtime names to immutable cards. */
|
|
2
2
|
import { AgentName } from "@moltzap/identity";
|
|
3
3
|
import { Effect, Schema } from "effect";
|
|
4
|
-
import { compareAgentIds, maximumMembers } from "../wire/values.js";
|
|
4
|
+
import { AGENT_ADDRESS_PREFIX, AgentAddress, compareAgentIds, compareAscii, GROUP_ADDRESS_PREFIX, GroupAddress, maximumMembers, } from "../wire/values.js";
|
|
5
5
|
import { SendError } from "./errors.js";
|
|
6
|
-
const AGENT_ADDRESS_PREFIX = "agent:";
|
|
7
|
-
const GROUP_ADDRESS_PREFIX = "group:";
|
|
8
|
-
const isAgentName = Schema.is(AgentName);
|
|
9
|
-
/* eslint-disable @typescript-eslint/naming-convention, @typescript-eslint/no-redeclare -- Effect Schemas share their domain names with the nominal values they decode. */
|
|
10
|
-
/**
|
|
11
|
-
* The registry name an `agent:` address names.
|
|
12
|
-
* @param value A candidate address.
|
|
13
|
-
* @returns The name, or undefined when the value is not an agent address.
|
|
14
|
-
*/
|
|
15
|
-
export function parseAgentAddress(value) {
|
|
16
|
-
if (!value.startsWith(AGENT_ADDRESS_PREFIX)) {
|
|
17
|
-
return undefined;
|
|
18
|
-
}
|
|
19
|
-
const name = value.slice(AGENT_ADDRESS_PREFIX.length);
|
|
20
|
-
return isAgentName(name) ? name : undefined;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* The names a `group:` address lists, in the order given.
|
|
24
|
-
* @param value A candidate address.
|
|
25
|
-
* @returns The names, or undefined when the value is not a group address.
|
|
26
|
-
*/
|
|
27
|
-
export function parseGroupAddress(value) {
|
|
28
|
-
if (!value.startsWith(GROUP_ADDRESS_PREFIX)) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
const names = value.slice(GROUP_ADDRESS_PREFIX.length).split(",");
|
|
32
|
-
return names.length > 0 && names.every((name) => isAgentName(name))
|
|
33
|
-
? names
|
|
34
|
-
: undefined;
|
|
35
|
-
}
|
|
36
|
-
const addressInput = Schema.String.pipe(Schema.filter((value) => parseAgentAddress(value) !== undefined ||
|
|
37
|
-
parseGroupAddress(value) !== undefined, {
|
|
38
|
-
identifier: "MessageAddressInput",
|
|
39
|
-
description: "An agent address or syntactically valid group input",
|
|
40
|
-
}), Schema.brand("MessageAddressInput"));
|
|
41
|
-
/** An explicit direct destination using one canonical Registry name. */
|
|
42
|
-
export const AgentAddress = addressInput.pipe(Schema.filter((value) => parseAgentAddress(value) !== undefined), Schema.brand("AgentAddress"), Schema.annotations({ identifier: "AgentAddress" }));
|
|
43
|
-
/** A complete fixed-member group address in unsigned ASCII name order. */
|
|
44
|
-
export const GroupAddress = addressInput.pipe(Schema.filter(isCanonicalGroupAddress), Schema.brand("GroupAddress"), Schema.annotations({ identifier: "GroupAddress" }));
|
|
45
|
-
/** Either accepted destination input, including noncanonical group order. */
|
|
46
|
-
export const MessageAddressInput = addressInput;
|
|
47
6
|
/**
|
|
48
7
|
* Resolve one explicit runtime destination to canonical immutable membership.
|
|
49
8
|
* @param input Local verified identity, Registry lookup, and validated input.
|
|
@@ -71,22 +30,6 @@ export function canonicalMessageAddress(to, localAgentName) {
|
|
|
71
30
|
? canonicalDirect(to, localAgentName)
|
|
72
31
|
: canonicalGroup(to, localAgentName);
|
|
73
32
|
}
|
|
74
|
-
/**
|
|
75
|
-
* Unsigned ASCII order, the order a canonical group address lists its names in.
|
|
76
|
-
* @param left One name.
|
|
77
|
-
* @param right The other name.
|
|
78
|
-
* @returns Negative, zero, or positive as `left` sorts before, with, or after `right`.
|
|
79
|
-
*/
|
|
80
|
-
export function compareAscii(left, right) {
|
|
81
|
-
const sharedLength = Math.min(left.length, right.length);
|
|
82
|
-
for (let index = 0; index < sharedLength; index += 1) {
|
|
83
|
-
const difference = left.charCodeAt(index) - right.charCodeAt(index);
|
|
84
|
-
if (difference !== 0) {
|
|
85
|
-
return difference;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return left.length - right.length;
|
|
89
|
-
}
|
|
90
33
|
function invalidAddress() {
|
|
91
34
|
return new SendError({ reason: "invalid-address" });
|
|
92
35
|
}
|
|
@@ -106,24 +49,6 @@ function mapRegistryFailure(error) {
|
|
|
106
49
|
: "network-unavailable",
|
|
107
50
|
});
|
|
108
51
|
}
|
|
109
|
-
function isCanonicalGroupAddress(value) {
|
|
110
|
-
const names = parseGroupAddress(value);
|
|
111
|
-
if (names === undefined ||
|
|
112
|
-
names.length < 3 ||
|
|
113
|
-
names.length > maximumMembers) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
for (let index = 1; index < names.length; index += 1) {
|
|
117
|
-
const previous = names[index - 1];
|
|
118
|
-
const current = names[index];
|
|
119
|
-
if (previous === undefined ||
|
|
120
|
-
current === undefined ||
|
|
121
|
-
compareAscii(previous, current) >= 0) {
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
52
|
function orderMemberCards(cards) {
|
|
128
53
|
const ordered = cards.slice();
|
|
129
54
|
ordered.sort((left, right) => compareAgentIds(left.agentId, right.agentId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/transport/messaging/address.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAgB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/transport/messaging/address.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAG9E,OAAO,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAgB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAsCxC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,OAAO,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAC3E,MAAM,CAAC,OAAO,CACZ,CAAC,SAAS,EAAoD,EAAE,CAC9D,SAAS,CAAC,IAAI,KAAK,QAAQ;QACzB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;QACjC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CACrC,CACF,CAAC;AACJ,CAAC;AAeD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,uBAAuB,CACrC,EAAuB,EACvB,cAAsB;IAEtB,OAAO,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC;QACrC,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,SAAoB;IACxC,OAAO,IAAI,SAAS,CAAC;QACnB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,GAAG,oBAAoB,GAAG,SAAS,uBAAuB;KACnE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgC;IAC1D,OAAO,IAAI,SAAS,CAAC;QACnB,MAAM,EACJ,KAAK,CAAC,IAAI,KAAK,sBAAsB;YACnC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,qBAAqB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAmC;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAChD,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,QAA6B,EAC7B,SAAoB;IAEpB,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACnC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACxB,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;YAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,EAAuB,EACvB,cAAsB;IAEtB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAe,CACvC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CACtC,CAAC;QACF,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAChE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,EAAuB,EACvB,cAAsB;IAEtB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACzC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAChD,eAAe,EACf,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;QACF,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAC7B,2CAA2C,CAC5C,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;YACnD,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE;YACvB,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CACvD,GAAG,oBAAoB,GAAG,SAAS,EAAE,CACtC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAC5D,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAC7B,uBAAuB,MAAM,CAAC,cAAc,CAAC,UAAU,CACxD,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CACvD,GAAG,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAClD,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CACpB,KAAiC,EACjC,SAAwE;IAExE,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;SAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CACnB,KAAiC,EACjC,SAAuE;IAEvE,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACpC,SAAS,CAAC,WAAW,EACrB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,KAAK,KAAK,CAAC,cAAc,CAAC,SAAS;YAC1C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC3C,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;QACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @file Router-ordered proposal selection and addressed record certification. */
|
|
2
2
|
import { Effect } from "effect";
|
|
3
|
-
import type { EngineRuntime } from "./
|
|
3
|
+
import type { EngineRuntime } from "./runtime/index.js";
|
|
4
4
|
import { type RouterIngressDisposition, type RouterWorkerIngress, RouterWorkerPersistenceError } from "../router/index.js";
|
|
5
5
|
import { type DecodedOuterBody } from "../wire/index.js";
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"certification.d.ts","sourceRoot":"","sources":["../../../src/transport/messaging/certification.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAGlF,OAAO,EAAY,MAAM,EAAgC,MAAM,QAAQ,CAAC;AAOxE,OAAO,KAAK,EAIV,aAAa,EACd,MAAM,
|
|
1
|
+
{"version":3,"file":"certification.d.ts","sourceRoot":"","sources":["../../../src/transport/messaging/certification.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAGlF,OAAO,EAAY,MAAM,EAAgC,MAAM,QAAQ,CAAC;AAOxE,OAAO,KAAK,EAIV,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,4BAA4B,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EASL,KAAK,gBAAgB,EAetB,MAAM,kBAAkB,CAAC;AA85B1B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,YACrB,aAAa,WACb,mBAAmB,CAAC,gBAAgB,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,4BAA4B,CAalE,CAAC;AAEN;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,YAC7B,aAAa,WACb,mBAAmB,CAAC,gBAAgB,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,4BAA4B,CAkBlE,CAAC;AAEN;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,YACnB,aAAa,KACrB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,4BAA4B,CA0B9C,CAAC"}
|
|
@@ -3,9 +3,8 @@ import { MOLTZAP_VERSION } from "@moltzap/identity";
|
|
|
3
3
|
import { Deferred, Effect, SubscriptionRef } from "effect";
|
|
4
4
|
import { RouterWorkerPersistenceError, } from "../router/index.js";
|
|
5
5
|
import { ActionCore as ActionCoreSchema, ClientRepresentationError, encodeCanonical, GenesisAnchorBody, hashAnchor, MembershipDescriptor, quorumThreshold, signEvidenceMessage, verifyActionCertifiedRecord, verifyActionProposal, verifyCertifiedRecord, verifyMembershipDescriptor, verifyOuterMessage, verifyStableEvidence, } from "../wire/index.js";
|
|
6
|
-
import { inboundDelivery, makeActionCertifiedRecord, makeCertifiedRecord, protocolEvidence, recordAnchorHash, stagedRecord, storedCertifiedRecord, } from "./durability.js";
|
|
7
6
|
import { evidenceMatchesFold, evidenceRoute, verifiedEvidenceForRoute, } from "./evidence.js";
|
|
8
|
-
import {
|
|
7
|
+
import { inboundDelivery, makeActionCertifiedRecord, makeCertifiedRecord, protocolEvidence, recordAnchorHash, stagedRecord, storedCertifiedRecord, } from "./records/index.js";
|
|
9
8
|
const persistenceFailure = () => new RouterWorkerPersistenceError();
|
|
10
9
|
const isSemanticStoreRejection = (error) => error.reason === "conflict" || error.reason === "invalid-input";
|
|
11
10
|
const localRepresentationFailure = () => persistenceFailure();
|
|
@@ -120,7 +119,7 @@ const localActionEvidence = (runtime, fold) => Effect.gen(function* () {
|
|
|
120
119
|
if (!retained) {
|
|
121
120
|
yield* mergeEvidence(runtime, fold, "action", evidence);
|
|
122
121
|
}
|
|
123
|
-
yield* Effect.uninterruptible(queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
122
|
+
yield* Effect.uninterruptible(runtime.phases.queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
124
123
|
fold.localActionEvidenceQueued = true;
|
|
125
124
|
}))));
|
|
126
125
|
});
|
|
@@ -194,7 +193,7 @@ const localDurabilityEvidence = (runtime, fold) => Effect.gen(function* () {
|
|
|
194
193
|
if (retained === undefined) {
|
|
195
194
|
yield* mergeEvidence(runtime, fold, "durability", evidence);
|
|
196
195
|
}
|
|
197
|
-
yield* Effect.uninterruptible(queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
196
|
+
yield* Effect.uninterruptible(runtime.phases.queueEvidence(runtime, fold.conversation, evidence).pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
198
197
|
fold.localDurabilityEvidenceQueued = true;
|
|
199
198
|
}))));
|
|
200
199
|
});
|
|
@@ -228,7 +227,7 @@ const reproposalDispositionByReason = {
|
|
|
228
227
|
"unknown-agent": "fail",
|
|
229
228
|
"version-mismatch": "fail",
|
|
230
229
|
};
|
|
231
|
-
const reproposePendingIntent = (runtime, pending) => proposeIntent(runtime, pending).pipe(Effect.asVoid, Effect.catchTag("SendError", (error) => reproposalDispositionByReason[error.reason] === "ignore"
|
|
230
|
+
const reproposePendingIntent = (runtime, pending) => runtime.phases.proposeIntent(runtime, pending).pipe(Effect.asVoid, Effect.catchTag("SendError", (error) => reproposalDispositionByReason[error.reason] === "ignore"
|
|
232
231
|
? Effect.void
|
|
233
232
|
: Effect.fail(persistenceFailure())));
|
|
234
233
|
const rebasePendingIntents = (runtime, conversationId) => Effect.forEach(runtime.intents.values(), (pending) => pending.intent.conversationId === conversationId &&
|
|
@@ -279,7 +278,9 @@ const promote = (runtime, fold, record, source) => Effect.gen(function* () {
|
|
|
279
278
|
? persistPromotionWithoutDelivery(runtime, stored, source)
|
|
280
279
|
: persistPromotionWithDelivery(runtime, stored, source, delivery);
|
|
281
280
|
const queuePromotion = source === "assembled"
|
|
282
|
-
?
|
|
281
|
+
? runtime.phases
|
|
282
|
+
.queueCertifiedPacket(runtime, fold.conversation, record)
|
|
283
|
+
.pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(markCertifiedPacketQueued(fold)))
|
|
283
284
|
: Effect.sync(() => {
|
|
284
285
|
fold.actionCertifiedRecordQueued = true;
|
|
285
286
|
fold.certifiedRecordQueued = true;
|
|
@@ -319,7 +320,9 @@ const stageActionCertificate = (runtime, fold, record, source) => Effect.gen(fun
|
|
|
319
320
|
runtime.recordFolds.set(record.recordHash, fold);
|
|
320
321
|
});
|
|
321
322
|
if (source === "assembled") {
|
|
322
|
-
yield* Effect.uninterruptible(
|
|
323
|
+
yield* Effect.uninterruptible(runtime.phases
|
|
324
|
+
.queueCertifiedPacket(runtime, fold.conversation, record)
|
|
325
|
+
.pipe(Effect.mapError(() => persistenceFailure()), Effect.zipRight(Effect.sync(() => {
|
|
323
326
|
fold.actionCertifiedRecordQueued = true;
|
|
324
327
|
})), Effect.zipRight(updateFold)));
|
|
325
328
|
}
|