agent-comms 8.4.1 → 8.6.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +33 -3
- package/dist/bridges/cc-peer/front-runtime.d.ts.map +1 -1
- package/dist/bridges/cc-peer/front-runtime.js +4 -2
- package/dist/bridges/cc-peer/front-runtime.js.map +1 -1
- package/dist/bridges/user/controller.d.ts.map +1 -1
- package/dist/bridges/user/controller.js +4 -1
- package/dist/bridges/user/controller.js.map +1 -1
- package/dist/bridges/user/web/contract.d.ts +12 -0
- package/dist/bridges/user/web/contract.d.ts.map +1 -1
- package/dist/bridges/user/web/contract.js +9 -0
- package/dist/bridges/user/web/contract.js.map +1 -1
- package/dist/bridges/user/web/dist/bundle.js +1 -1
- package/dist/bridges/user/web/dist/mesh-worker.js +1 -1
- package/dist/bridges/user/web/dist/sw.js +1 -1
- package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts +3 -1
- package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshGraphView.js +2 -4
- package/dist/bridges/user/web/frontend/components/MeshGraphView.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts +1 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.js +6 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts +3 -1
- package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshTraceView.js +2 -4
- package/dist/bridges/user/web/frontend/components/MeshTraceView.js.map +1 -1
- package/dist/bridges/user/web/frontend/main.js +6 -13
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.d.ts +2 -0
- package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.js +1 -0
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts +11 -0
- package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-invalidation.js +26 -0
- package/dist/bridges/user/web/frontend/mesh-invalidation.js.map +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-worker.js +1 -0
- package/dist/bridges/user/web/frontend/mesh-worker.js.map +1 -1
- package/dist/bridges/user/web/frontend/tab-contract.d.ts +5 -0
- package/dist/bridges/user/web/frontend/tab-contract.d.ts.map +1 -1
- package/dist/bridges/user/web/reads.d.ts +3 -0
- package/dist/bridges/user/web/reads.d.ts.map +1 -1
- package/dist/bridges/user/web/reads.js +4 -0
- package/dist/bridges/user/web/reads.js.map +1 -1
- package/dist/bridges/user/web/router.d.ts +5 -0
- package/dist/bridges/user/web/router.d.ts.map +1 -1
- package/dist/bridges/user/web/router.js +2 -1
- package/dist/bridges/user/web/router.js.map +1 -1
- package/dist/core/agent-registry.d.ts.map +1 -1
- package/dist/core/agent-registry.js +20 -6
- package/dist/core/agent-registry.js.map +1 -1
- package/dist/core/agent-table.d.ts +18 -0
- package/dist/core/agent-table.d.ts.map +1 -0
- package/dist/core/agent-table.js +38 -0
- package/dist/core/agent-table.js.map +1 -0
- package/dist/core/atomic-file.d.ts +12 -0
- package/dist/core/atomic-file.d.ts.map +1 -0
- package/dist/core/atomic-file.js +37 -0
- package/dist/core/atomic-file.js.map +1 -0
- package/dist/core/bridge-mesh.d.ts.map +1 -1
- package/dist/core/bridge-mesh.js +7 -0
- package/dist/core/bridge-mesh.js.map +1 -1
- package/dist/core/bridge.d.ts +5 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +26 -1
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/delivery-engine.d.ts.map +1 -1
- package/dist/core/delivery-engine.js +4 -0
- package/dist/core/delivery-engine.js.map +1 -1
- package/dist/core/device-membership-verification.d.ts +23 -9
- package/dist/core/device-membership-verification.d.ts.map +1 -1
- package/dist/core/device-membership-verification.js +38 -11
- package/dist/core/device-membership-verification.js.map +1 -1
- package/dist/core/device-membership.d.ts +12 -3
- package/dist/core/device-membership.d.ts.map +1 -1
- package/dist/core/device-membership.js +10 -7
- package/dist/core/device-membership.js.map +1 -1
- package/dist/core/directory-admission.d.ts +5 -3
- package/dist/core/directory-admission.d.ts.map +1 -1
- package/dist/core/directory-admission.js +55 -32
- package/dist/core/directory-admission.js.map +1 -1
- package/dist/core/display-name.d.ts +29 -0
- package/dist/core/display-name.d.ts.map +1 -0
- package/dist/core/display-name.js +57 -0
- package/dist/core/display-name.js.map +1 -0
- package/dist/core/gateway-trust-actions.d.ts +7 -9
- package/dist/core/gateway-trust-actions.d.ts.map +1 -1
- package/dist/core/gateway-trust-actions.js +82 -16
- package/dist/core/gateway-trust-actions.js.map +1 -1
- package/dist/core/gateway-trust.d.ts +38 -17
- package/dist/core/gateway-trust.d.ts.map +1 -1
- package/dist/core/gateway-trust.js +86 -37
- package/dist/core/gateway-trust.js.map +1 -1
- package/dist/core/gossip-directory.d.ts +25 -3
- package/dist/core/gossip-directory.d.ts.map +1 -1
- package/dist/core/gossip-directory.js +53 -5
- package/dist/core/gossip-directory.js.map +1 -1
- package/dist/core/gossip-extensions.d.ts +4 -0
- package/dist/core/gossip-extensions.d.ts.map +1 -1
- package/dist/core/gossip-extensions.js +4 -0
- package/dist/core/gossip-extensions.js.map +1 -1
- package/dist/core/group-proofs.d.ts +49 -0
- package/dist/core/group-proofs.d.ts.map +1 -0
- package/dist/core/group-proofs.js +102 -0
- package/dist/core/group-proofs.js.map +1 -0
- package/dist/core/identity-store.d.ts +5 -4
- package/dist/core/identity-store.d.ts.map +1 -1
- package/dist/core/identity-store.js +13 -16
- package/dist/core/identity-store.js.map +1 -1
- package/dist/core/issuer-identity-file.d.ts +25 -0
- package/dist/core/issuer-identity-file.d.ts.map +1 -0
- package/dist/core/issuer-identity-file.js +124 -0
- package/dist/core/issuer-identity-file.js.map +1 -0
- package/dist/core/machine-grouping.d.ts +47 -0
- package/dist/core/machine-grouping.d.ts.map +1 -0
- package/dist/core/machine-grouping.js +102 -0
- package/dist/core/machine-grouping.js.map +1 -0
- package/dist/core/machine-identity.d.ts +19 -0
- package/dist/core/machine-identity.d.ts.map +1 -0
- package/dist/core/machine-identity.js +42 -0
- package/dist/core/machine-identity.js.map +1 -0
- package/dist/core/machine-list-groups.d.ts +13 -0
- package/dist/core/machine-list-groups.d.ts.map +1 -0
- package/dist/core/machine-list-groups.js +41 -0
- package/dist/core/machine-list-groups.js.map +1 -0
- package/dist/core/machine-name-claim.d.ts +22 -0
- package/dist/core/machine-name-claim.d.ts.map +1 -0
- package/dist/core/machine-name-claim.js +52 -0
- package/dist/core/machine-name-claim.js.map +1 -0
- package/dist/core/membership-proof.d.ts +20 -9
- package/dist/core/membership-proof.d.ts.map +1 -1
- package/dist/core/membership-proof.js +41 -15
- package/dist/core/membership-proof.js.map +1 -1
- package/dist/core/membership-proofs.d.ts +16 -8
- package/dist/core/membership-proofs.d.ts.map +1 -1
- package/dist/core/membership-proofs.js +24 -12
- package/dist/core/membership-proofs.js.map +1 -1
- package/dist/core/mesh-graph-trace-tool.d.ts +3 -2
- package/dist/core/mesh-graph-trace-tool.d.ts.map +1 -1
- package/dist/core/mesh-graph-trace-tool.js +8 -5
- package/dist/core/mesh-graph-trace-tool.js.map +1 -1
- package/dist/core/mesh-store-shared.d.ts +4 -1
- package/dist/core/mesh-store-shared.d.ts.map +1 -1
- package/dist/core/mesh-store-shared.js.map +1 -1
- package/dist/core/mesh-store.d.ts +20 -10
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +45 -38
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/name-claim.d.ts +38 -0
- package/dist/core/name-claim.d.ts.map +1 -0
- package/dist/core/name-claim.js +93 -0
- package/dist/core/name-claim.js.map +1 -0
- package/dist/core/naming-actions.d.ts +21 -0
- package/dist/core/naming-actions.d.ts.map +1 -0
- package/dist/core/naming-actions.js +58 -0
- package/dist/core/naming-actions.js.map +1 -0
- package/dist/core/naming.d.ts +50 -0
- package/dist/core/naming.d.ts.map +1 -0
- package/dist/core/naming.js +81 -0
- package/dist/core/naming.js.map +1 -0
- package/dist/core/network-interfaces.d.ts +7 -0
- package/dist/core/network-interfaces.d.ts.map +1 -0
- package/dist/core/network-interfaces.js +23 -0
- package/dist/core/network-interfaces.js.map +1 -0
- package/dist/core/peer-versions.d.ts +6 -0
- package/dist/core/peer-versions.d.ts.map +1 -1
- package/dist/core/peer-versions.js +17 -0
- package/dist/core/peer-versions.js.map +1 -1
- package/dist/core/petnames.d.ts +22 -0
- package/dist/core/petnames.d.ts.map +1 -0
- package/dist/core/petnames.js +102 -0
- package/dist/core/petnames.js.map +1 -0
- package/dist/core/room-path.d.ts +2 -0
- package/dist/core/room-path.d.ts.map +1 -1
- package/dist/core/room-path.js +5 -1
- package/dist/core/room-path.js.map +1 -1
- package/dist/core/store.d.ts +4 -0
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +19 -2
- package/dist/core/store.js.map +1 -1
- package/dist/core/tool.d.ts +16 -5
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +59 -13
- package/dist/core/tool.js.map +1 -1
- package/dist/core/types.d.ts +28 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +18 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-identity.d.ts +4 -6
- package/dist/core/user-identity.d.ts.map +1 -1
- package/dist/core/user-identity.js +9 -113
- package/dist/core/user-identity.js.map +1 -1
- package/dist/core/wire-mesh-transport-options.d.ts +2 -2
- package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +7 -7
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/test/agent-table.unit.test.d.ts +5 -0
- package/dist/test/agent-table.unit.test.d.ts.map +1 -0
- package/dist/test/agent-table.unit.test.js +53 -0
- package/dist/test/agent-table.unit.test.js.map +1 -0
- package/dist/test/delivery-engine-delivery.unit.test.js +2 -0
- package/dist/test/delivery-engine-delivery.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-directed-notify.unit.test.js +2 -0
- package/dist/test/delivery-engine-directed-notify.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-own-agent.unit.test.js +2 -0
- package/dist/test/delivery-engine-own-agent.unit.test.js.map +1 -1
- package/dist/test/delivery-engine.unit.test.js +2 -0
- package/dist/test/delivery-engine.unit.test.js.map +1 -1
- package/dist/test/device-membership-verification.unit.test.js +25 -25
- package/dist/test/device-membership-verification.unit.test.js.map +1 -1
- package/dist/test/device-membership.unit.test.js +6 -6
- package/dist/test/device-membership.unit.test.js.map +1 -1
- package/dist/test/directory-admission.unit.test.js +103 -7
- package/dist/test/directory-admission.unit.test.js.map +1 -1
- package/dist/test/display-name.unit.test.d.ts +5 -0
- package/dist/test/display-name.unit.test.d.ts.map +1 -0
- package/dist/test/display-name.unit.test.js +65 -0
- package/dist/test/display-name.unit.test.js.map +1 -0
- package/dist/test/gateway-trust-tool.integration.test.js +117 -4
- package/dist/test/gateway-trust-tool.integration.test.js.map +1 -1
- package/dist/test/gateway-trust.unit.test.js +62 -13
- package/dist/test/gateway-trust.unit.test.js.map +1 -1
- package/dist/test/gossip-directory.unit.test.js +14 -1
- package/dist/test/gossip-directory.unit.test.js.map +1 -1
- package/dist/test/hub-exposure.integration.test.js +1 -1
- package/dist/test/hub-exposure.integration.test.js.map +1 -1
- package/dist/test/identity-restart.integration.test.js +3 -0
- package/dist/test/identity-restart.integration.test.js.map +1 -1
- package/dist/test/identity-store.integration.test.js +64 -14
- package/dist/test/identity-store.integration.test.js.map +1 -1
- package/dist/test/machine-grouping.unit.test.d.ts +2 -0
- package/dist/test/machine-grouping.unit.test.d.ts.map +1 -0
- package/dist/test/machine-grouping.unit.test.js +68 -0
- package/dist/test/machine-grouping.unit.test.js.map +1 -0
- package/dist/test/machine-identity.unit.test.d.ts +5 -0
- package/dist/test/machine-identity.unit.test.d.ts.map +1 -0
- package/dist/test/machine-identity.unit.test.js +80 -0
- package/dist/test/machine-identity.unit.test.js.map +1 -0
- package/dist/test/machine-list-groups.unit.test.d.ts +5 -0
- package/dist/test/machine-list-groups.unit.test.d.ts.map +1 -0
- package/dist/test/machine-list-groups.unit.test.js +61 -0
- package/dist/test/machine-list-groups.unit.test.js.map +1 -0
- package/dist/test/machine-membership-trust.integration.test.d.ts +5 -0
- package/dist/test/machine-membership-trust.integration.test.d.ts.map +1 -0
- package/dist/test/machine-membership-trust.integration.test.js +152 -0
- package/dist/test/machine-membership-trust.integration.test.js.map +1 -0
- package/dist/test/membership-proof.unit.test.js +105 -13
- package/dist/test/membership-proof.unit.test.js.map +1 -1
- package/dist/test/name-claim.unit.test.d.ts +5 -0
- package/dist/test/name-claim.unit.test.d.ts.map +1 -0
- package/dist/test/name-claim.unit.test.js +135 -0
- package/dist/test/name-claim.unit.test.js.map +1 -0
- package/dist/test/naming.integration.test.d.ts +5 -0
- package/dist/test/naming.integration.test.d.ts.map +1 -0
- package/dist/test/naming.integration.test.js +188 -0
- package/dist/test/naming.integration.test.js.map +1 -0
- package/dist/test/petnames.unit.test.d.ts +5 -0
- package/dist/test/petnames.unit.test.d.ts.map +1 -0
- package/dist/test/petnames.unit.test.js +94 -0
- package/dist/test/petnames.unit.test.js.map +1 -0
- package/dist/test/principal-membership-trust.integration.test.js +2 -1
- package/dist/test/principal-membership-trust.integration.test.js.map +1 -1
- package/dist/test/room-join-admission.integration.test.js +3 -0
- package/dist/test/room-join-admission.integration.test.js.map +1 -1
- package/dist/test/room-lifecycle-bare-name.unit.test.js +2 -0
- package/dist/test/room-lifecycle-bare-name.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle-membership.unit.test.js +2 -0
- package/dist/test/room-lifecycle-membership.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle-remote.unit.test.js +2 -0
- package/dist/test/room-lifecycle-remote.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle.unit.test.js +2 -0
- package/dist/test/room-lifecycle.unit.test.js.map +1 -1
- package/dist/test/room-messaging-durable-send.unit.test.js +2 -0
- package/dist/test/room-messaging-durable-send.unit.test.js.map +1 -1
- package/dist/test/room-messaging.unit.test.js +2 -0
- package/dist/test/room-messaging.unit.test.js.map +1 -1
- package/dist/test/room-protocol-notify.unit.test.js +2 -0
- package/dist/test/room-protocol-notify.unit.test.js.map +1 -1
- package/dist/test/room-protocol.helper.d.ts.map +1 -1
- package/dist/test/room-protocol.helper.js +2 -0
- package/dist/test/room-protocol.helper.js.map +1 -1
- package/dist/test/room-send-retry.integration.test.js +3 -0
- package/dist/test/room-send-retry.integration.test.js.map +1 -1
- package/dist/test/test-transport.d.ts +3 -0
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +8 -1
- package/dist/test/test-transport.js.map +1 -1
- package/dist/test/user-identity.unit.test.js +40 -14
- package/dist/test/user-identity.unit.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-list-groups.unit.test.js","sourceRoot":"","sources":["../../src/test/machine-list-groups.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,2EAA2E;AAC3E,MAAM,OAAO,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,EAAE,CAAC;AAE3C,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO;QACL,EAAE;QACF,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,EAAE;QACR,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;YACvB,CAAC,UAAU,EAAE,MAAM,CAAC;YACpB,CAAC,OAAO,EAAE,MAAM,CAAC;YACjB,CAAC,UAAU,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CACJ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtE,CAAC,OAAO,CAAC;YACR,CAAC,8BAA8B,EAAE,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC;YAC/B,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC;YAC/B,CAAC,qBAAqB,EAAE,CAAC,UAAU,CAAC,CAAC;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;YACvB,CAAC,KAAK,EAAE,MAAM,CAAC;YACf,CAAC,OAAO,EAAE,QAAQ,CAAC;YACnB,CAAC,KAAK,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kHAAkH,EAAE,GAAG,EAAE;QAC1H,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACvE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CACzE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CACjC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,oBAAoB,CACjC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAChB,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5B,MAAM,EACN,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,GAAG,CACzB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for machine identity (agent-comms#343): every bridge on a host is vouched for by that host's machine key, so list_agents groups devices by machine, whoami names the machine, and another machine that trusts this one reaches all of its devices until it untrusts the machine, which revokes the whole host in one act. Two hosts meet through a real hub; the stores of one host share its machine and user identity directories.
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=machine-membership-trust.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-membership-trust.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/machine-membership-trust.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for machine identity (agent-comms#343): every bridge on a host is vouched for by that host's machine key, so list_agents groups devices by machine, whoami names the machine, and another machine that trusts this one reaches all of its devices until it untrusts the machine, which revokes the whole host in one act. Two hosts meet through a real hub; the stores of one host share its machine and user identity directories.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
8
|
+
import { MeshStore } from "../core/mesh-store.js";
|
|
9
|
+
import { CommsTool } from "../core/tool.js";
|
|
10
|
+
import { shortId } from "../core/display-name.js";
|
|
11
|
+
import { freeLocalPort, realHubOverWs, TeardownStack } from "./hub-helpers.js";
|
|
12
|
+
import { wireTestTransport } from "./test-transport.js";
|
|
13
|
+
/** Short enough that a gossip re-advertisement fires within a test's own poll budget. */
|
|
14
|
+
const FAST_GOSSIP_INTERVAL_MS = 50;
|
|
15
|
+
const POLL_ATTEMPTS = 100;
|
|
16
|
+
const POLL_INTERVAL_MS = 50;
|
|
17
|
+
const sleep = async (ms) => new Promise((resolve) => {
|
|
18
|
+
setTimeout(resolve, ms);
|
|
19
|
+
});
|
|
20
|
+
async function waitFor(what, check) {
|
|
21
|
+
for (let i = 0; i < POLL_ATTEMPTS; i++) {
|
|
22
|
+
if (await check())
|
|
23
|
+
return;
|
|
24
|
+
await sleep(POLL_INTERVAL_MS);
|
|
25
|
+
}
|
|
26
|
+
expect(false, `timed out waiting for ${what}`).toBeTruthy();
|
|
27
|
+
}
|
|
28
|
+
const cleanups = new TeardownStack();
|
|
29
|
+
const dirs = [];
|
|
30
|
+
afterEach(async () => {
|
|
31
|
+
await cleanups.run();
|
|
32
|
+
for (const dir of dirs.splice(0)) {
|
|
33
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
/** One host's identity directory: its machine key and its account's user key live here, as they do in ~/.agent-comms. */
|
|
37
|
+
function hostDir() {
|
|
38
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "machine-trust-host-"));
|
|
39
|
+
dirs.push(dir);
|
|
40
|
+
return dir;
|
|
41
|
+
}
|
|
42
|
+
async function hostStore(hubUrl, coordinatorPort, dir) {
|
|
43
|
+
const store = new MeshStore({ coordinatorPort, hubUrl });
|
|
44
|
+
await wireTestTransport(store, {
|
|
45
|
+
presenceReadvertiseIntervalMs: FAST_GOSSIP_INTERVAL_MS,
|
|
46
|
+
userIdentityOptions: { dir },
|
|
47
|
+
machineIdentityOptions: { dir },
|
|
48
|
+
});
|
|
49
|
+
await store.init();
|
|
50
|
+
cleanups.push(async () => store.shutdown());
|
|
51
|
+
return store;
|
|
52
|
+
}
|
|
53
|
+
function machineOf(store) {
|
|
54
|
+
const machine = store.getMachineId();
|
|
55
|
+
if (machine === undefined)
|
|
56
|
+
throw new Error("store has no identity yet");
|
|
57
|
+
return machine;
|
|
58
|
+
}
|
|
59
|
+
async function register(store, name) {
|
|
60
|
+
const agent = await store.registerAgent({
|
|
61
|
+
name,
|
|
62
|
+
harness: "test",
|
|
63
|
+
cwd: `/test/${name}`,
|
|
64
|
+
pid: process.pid,
|
|
65
|
+
visibility: "visible",
|
|
66
|
+
tags: [],
|
|
67
|
+
});
|
|
68
|
+
return agent.id;
|
|
69
|
+
}
|
|
70
|
+
async function listAgentsText(store) {
|
|
71
|
+
const result = await new CommsTool(store).handle({ agentId: store.peerId, harness: "test", cwd: "/test", pid: process.pid }, { action: "list_agents" });
|
|
72
|
+
expect(result.isError, result.content).toBe(false);
|
|
73
|
+
return result.content;
|
|
74
|
+
}
|
|
75
|
+
/** The rows list_agents prints under the given machine heading, up to the next heading. */
|
|
76
|
+
function rowsUnder(listing, heading) {
|
|
77
|
+
const start = listing.indexOf(heading);
|
|
78
|
+
if (start === -1)
|
|
79
|
+
return "";
|
|
80
|
+
const rest = listing.slice(start + heading.length);
|
|
81
|
+
const next = rest.search(/\n {2}Machine /);
|
|
82
|
+
return next === -1 ? rest : rest.slice(0, next);
|
|
83
|
+
}
|
|
84
|
+
describe("machine identity", () => {
|
|
85
|
+
it("gives every store on a host the same machine, named by whoami, and groups local agents under this machine", async () => {
|
|
86
|
+
const hub = await realHubOverWs();
|
|
87
|
+
cleanups.push(hub.close);
|
|
88
|
+
const dir = hostDir();
|
|
89
|
+
const a1 = await hostStore(hub.url, await freeLocalPort(), dir);
|
|
90
|
+
const a2 = await hostStore(hub.url, a1.coordinatorPort, dir);
|
|
91
|
+
await register(a1, "a1-agent");
|
|
92
|
+
await register(a2, "a2-agent");
|
|
93
|
+
expect(machineOf(a1)).toBe(machineOf(a2));
|
|
94
|
+
expect(machineOf(a1)).not.toBe(a1.getUserPrincipalId());
|
|
95
|
+
const whoami = await new CommsTool(a1).handle({ agentId: a1.peerId, harness: "test", cwd: "/test", pid: process.pid }, { action: "whoami" });
|
|
96
|
+
expect(whoami.content).toContain(`Machine: ${machineOf(a1)}`);
|
|
97
|
+
const heading = `Machine ${shortId(machineOf(a1))} (this machine):`;
|
|
98
|
+
await waitFor("a1 to place a2 on this machine", async () => rowsUnder(await listAgentsText(a1), heading).includes(a2.peerId));
|
|
99
|
+
expect(rowsUnder(await listAgentsText(a1), heading)).toContain(a1.peerId);
|
|
100
|
+
});
|
|
101
|
+
it("reaches every device of a trusted remote machine, grouped under it, and revokes the whole host when the machine is untrusted", async () => {
|
|
102
|
+
const hub = await realHubOverWs();
|
|
103
|
+
cleanups.push(hub.close);
|
|
104
|
+
const dirA = hostDir();
|
|
105
|
+
const dirB = hostDir();
|
|
106
|
+
const a1 = await hostStore(hub.url, await freeLocalPort(), dirA);
|
|
107
|
+
const a2 = await hostStore(hub.url, a1.coordinatorPort, dirA);
|
|
108
|
+
const b1 = await hostStore(hub.url, await freeLocalPort(), dirB);
|
|
109
|
+
await register(a1, "a1-agent");
|
|
110
|
+
await register(a2, "a2-agent");
|
|
111
|
+
await register(b1, "b1-agent");
|
|
112
|
+
// Each host trusts only the other's machine: no device id and no principal is trusted anywhere.
|
|
113
|
+
a1.addTrustedGatewayMachine(machineOf(b1));
|
|
114
|
+
a2.addTrustedGatewayMachine(machineOf(b1));
|
|
115
|
+
b1.addTrustedGatewayMachine(machineOf(a1));
|
|
116
|
+
expect(b1.listTrustedGateways()).toEqual([]);
|
|
117
|
+
expect(b1.listTrustedGatewayPrincipals()).toEqual([]);
|
|
118
|
+
const remoteHeading = `Machine ${shortId(machineOf(a1))}:`;
|
|
119
|
+
await waitFor("b1 to list both of A's devices under A's machine", async () => {
|
|
120
|
+
const rows = rowsUnder(await listAgentsText(b1), remoteHeading);
|
|
121
|
+
return rows.includes(a1.peerId) && rows.includes(a2.peerId);
|
|
122
|
+
});
|
|
123
|
+
expect(b1.listVerifiedMembers()).toEqual(expect.arrayContaining([
|
|
124
|
+
{ device: a1.peerId, kind: "machine", issuer: machineOf(a1) },
|
|
125
|
+
{ device: a2.peerId, kind: "machine", issuer: machineOf(a1) },
|
|
126
|
+
]));
|
|
127
|
+
expect(b1.gatewayTrust.isReachable(a2.peerId)).toBe(true);
|
|
128
|
+
b1.removeTrustedGatewayMachine(machineOf(a1));
|
|
129
|
+
expect(b1.gatewayTrust.isReachable(a1.peerId)).toBe(false);
|
|
130
|
+
expect(b1.gatewayTrust.isReachable(a2.peerId)).toBe(false);
|
|
131
|
+
expect(b1.listVerifiedMembers()).toEqual([]);
|
|
132
|
+
const afterRevoke = await listAgentsText(b1);
|
|
133
|
+
expect(afterRevoke).toContain(b1.peerId);
|
|
134
|
+
expect(afterRevoke).not.toContain(a1.peerId);
|
|
135
|
+
expect(afterRevoke).not.toContain(a2.peerId);
|
|
136
|
+
expect(afterRevoke).not.toContain(remoteHeading);
|
|
137
|
+
});
|
|
138
|
+
it("carries the machine proof only in a visible agent's advert", async () => {
|
|
139
|
+
const store = new MeshStore({ coordinatorPort: await freeLocalPort() });
|
|
140
|
+
await wireTestTransport(store);
|
|
141
|
+
await store.init();
|
|
142
|
+
cleanups.push(async () => store.shutdown());
|
|
143
|
+
const id = await register(store, "visible-then-hidden");
|
|
144
|
+
await waitFor("the machine proof to be minted", async () => {
|
|
145
|
+
await Promise.resolve();
|
|
146
|
+
return store.selfAgentAdvert?.machine !== undefined;
|
|
147
|
+
});
|
|
148
|
+
await store.updateAgent(id, { visibility: "hidden" });
|
|
149
|
+
expect(store.selfAgentAdvert).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=machine-membership-trust.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-membership-trust.integration.test.js","sourceRoot":"","sources":["../../src/test/machine-membership-trust.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,13 @@ import { createRevocationView } from "wire-mesh-core/domain/revocation-view";
|
|
|
10
10
|
import { generateIdentity } from "../core/identity.js";
|
|
11
11
|
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
12
12
|
import { loadOrCreateUserIdentity } from "../core/user-identity.js";
|
|
13
|
-
import { MAX_MEMBERSHIP_PROOF_LENGTH, MEMBERSHIP_PROOF_LIFETIME_MS, mintMembershipProof, verifyMembershipProof, } from "../core/membership-proof.js";
|
|
13
|
+
import { MAX_MEMBERSHIP_PROOF_LENGTH, MEMBERSHIP_PROOF_LIFETIME_MS, identifyMembershipProofIssuer, mintMembershipProof, verifyMembershipProof, } from "../core/membership-proof.js";
|
|
14
|
+
import { loadOrCreateMachineIdentity } from "../core/machine-identity.js";
|
|
15
|
+
import { mintCapabilityToken } from "wire-mesh-core/domain/tokens";
|
|
16
|
+
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
17
|
+
import { DEVICE_MEMBER_CAPABILITY } from "../core/device-membership-verification.js";
|
|
18
|
+
import { encodeTokenText } from "../core/token-text.js";
|
|
19
|
+
import { randomId } from "../core/random-id.js";
|
|
14
20
|
async function makeUser() {
|
|
15
21
|
const dir = fs.mkdtempSync(path.join(tmpdir(), "membership-proof-user-"));
|
|
16
22
|
return toIdentityPort(loadOrCreateUserIdentity({ dir }));
|
|
@@ -30,14 +36,14 @@ describe("membership proof", () => {
|
|
|
30
36
|
const clock = createSystemClock();
|
|
31
37
|
const before = clock.now();
|
|
32
38
|
const proof = await mintMembershipProof({
|
|
33
|
-
|
|
39
|
+
issuer: user,
|
|
34
40
|
clock,
|
|
35
41
|
deviceId: device.deviceId,
|
|
36
42
|
});
|
|
37
43
|
const verdict = await verifyMembershipProof({
|
|
38
44
|
proof,
|
|
39
45
|
deviceId: device.deviceId,
|
|
40
|
-
|
|
46
|
+
issuerId: user.deviceId,
|
|
41
47
|
...(await makeVerifier()),
|
|
42
48
|
});
|
|
43
49
|
expect(verdict.ok).toBe(true);
|
|
@@ -50,7 +56,7 @@ describe("membership proof", () => {
|
|
|
50
56
|
const user = await makeUser();
|
|
51
57
|
const device = await toIdentityPort(generateIdentity());
|
|
52
58
|
const proof = await mintMembershipProof({
|
|
53
|
-
|
|
59
|
+
issuer: user,
|
|
54
60
|
clock: createSystemClock(),
|
|
55
61
|
deviceId: device.deviceId,
|
|
56
62
|
});
|
|
@@ -61,14 +67,14 @@ describe("membership proof", () => {
|
|
|
61
67
|
const device = await toIdentityPort(generateIdentity());
|
|
62
68
|
const other = await toIdentityPort(generateIdentity());
|
|
63
69
|
const proof = await mintMembershipProof({
|
|
64
|
-
|
|
70
|
+
issuer: user,
|
|
65
71
|
clock: createSystemClock(),
|
|
66
72
|
deviceId: device.deviceId,
|
|
67
73
|
});
|
|
68
74
|
const verdict = await verifyMembershipProof({
|
|
69
75
|
proof,
|
|
70
76
|
deviceId: other.deviceId,
|
|
71
|
-
|
|
77
|
+
issuerId: user.deviceId,
|
|
72
78
|
...(await makeVerifier()),
|
|
73
79
|
});
|
|
74
80
|
expect(verdict.ok).toBe(false);
|
|
@@ -78,14 +84,14 @@ describe("membership proof", () => {
|
|
|
78
84
|
const stranger = await makeUser();
|
|
79
85
|
const device = await toIdentityPort(generateIdentity());
|
|
80
86
|
const proof = await mintMembershipProof({
|
|
81
|
-
|
|
87
|
+
issuer: user,
|
|
82
88
|
clock: createSystemClock(),
|
|
83
89
|
deviceId: device.deviceId,
|
|
84
90
|
});
|
|
85
91
|
const verdict = await verifyMembershipProof({
|
|
86
92
|
proof,
|
|
87
93
|
deviceId: device.deviceId,
|
|
88
|
-
|
|
94
|
+
issuerId: stranger.deviceId,
|
|
89
95
|
...(await makeVerifier()),
|
|
90
96
|
});
|
|
91
97
|
expect(verdict.ok).toBe(false);
|
|
@@ -95,7 +101,7 @@ describe("membership proof", () => {
|
|
|
95
101
|
const device = await toIdentityPort(generateIdentity());
|
|
96
102
|
const clock = createSystemClock();
|
|
97
103
|
const proof = await mintMembershipProof({
|
|
98
|
-
|
|
104
|
+
issuer: user,
|
|
99
105
|
clock,
|
|
100
106
|
deviceId: device.deviceId,
|
|
101
107
|
});
|
|
@@ -106,7 +112,7 @@ describe("membership proof", () => {
|
|
|
106
112
|
const verdict = await verifyMembershipProof({
|
|
107
113
|
proof,
|
|
108
114
|
deviceId: device.deviceId,
|
|
109
|
-
|
|
115
|
+
issuerId: user.deviceId,
|
|
110
116
|
...verifier,
|
|
111
117
|
clock: later,
|
|
112
118
|
});
|
|
@@ -118,7 +124,7 @@ describe("membership proof", () => {
|
|
|
118
124
|
const verdict = await verifyMembershipProof({
|
|
119
125
|
proof: "a".repeat(MAX_MEMBERSHIP_PROOF_LENGTH + 1),
|
|
120
126
|
deviceId: device.deviceId,
|
|
121
|
-
|
|
127
|
+
issuerId: user.deviceId,
|
|
122
128
|
...(await makeVerifier()),
|
|
123
129
|
});
|
|
124
130
|
expect(verdict).toEqual({ ok: false, reason: "too_long" });
|
|
@@ -127,7 +133,7 @@ describe("membership proof", () => {
|
|
|
127
133
|
const user = await makeUser();
|
|
128
134
|
const device = await toIdentityPort(generateIdentity());
|
|
129
135
|
const proof = await mintMembershipProof({
|
|
130
|
-
|
|
136
|
+
issuer: user,
|
|
131
137
|
clock: createSystemClock(),
|
|
132
138
|
deviceId: device.deviceId,
|
|
133
139
|
});
|
|
@@ -139,10 +145,96 @@ describe("membership proof", () => {
|
|
|
139
145
|
const verdict = await verifyMembershipProof({
|
|
140
146
|
proof: "not a proof",
|
|
141
147
|
deviceId: device.deviceId,
|
|
142
|
-
|
|
148
|
+
issuerId: user.deviceId,
|
|
143
149
|
...(await makeVerifier()),
|
|
144
150
|
});
|
|
145
151
|
expect(verdict.ok).toBe(false);
|
|
146
152
|
});
|
|
153
|
+
it("verifies a machine's proof exactly as it verifies a principal's, and not against the principal", async () => {
|
|
154
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "membership-proof-host-"));
|
|
155
|
+
const machine = await toIdentityPort(loadOrCreateMachineIdentity({ dir }));
|
|
156
|
+
const user = await toIdentityPort(loadOrCreateUserIdentity({ dir }));
|
|
157
|
+
const device = await toIdentityPort(generateIdentity());
|
|
158
|
+
const proof = await mintMembershipProof({
|
|
159
|
+
issuer: machine,
|
|
160
|
+
clock: createSystemClock(),
|
|
161
|
+
deviceId: device.deviceId,
|
|
162
|
+
});
|
|
163
|
+
const verifier = await makeVerifier();
|
|
164
|
+
const asMachine = await verifyMembershipProof({
|
|
165
|
+
proof,
|
|
166
|
+
deviceId: device.deviceId,
|
|
167
|
+
issuerId: machine.deviceId,
|
|
168
|
+
...verifier,
|
|
169
|
+
});
|
|
170
|
+
const asPrincipal = await verifyMembershipProof({
|
|
171
|
+
proof,
|
|
172
|
+
deviceId: device.deviceId,
|
|
173
|
+
issuerId: user.deviceId,
|
|
174
|
+
...verifier,
|
|
175
|
+
});
|
|
176
|
+
expect(asMachine.ok).toBe(true);
|
|
177
|
+
expect(asPrincipal).toEqual({ ok: false, reason: "wrong_scope_path" });
|
|
178
|
+
});
|
|
179
|
+
it("identifies the issuer a proof names without being told it beforehand", async () => {
|
|
180
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "membership-proof-host-"));
|
|
181
|
+
const machine = await toIdentityPort(loadOrCreateMachineIdentity({ dir }));
|
|
182
|
+
const device = await toIdentityPort(generateIdentity());
|
|
183
|
+
const proof = await mintMembershipProof({
|
|
184
|
+
issuer: machine,
|
|
185
|
+
clock: createSystemClock(),
|
|
186
|
+
deviceId: device.deviceId,
|
|
187
|
+
});
|
|
188
|
+
const verdict = await identifyMembershipProofIssuer({
|
|
189
|
+
proof,
|
|
190
|
+
deviceId: device.deviceId,
|
|
191
|
+
...(await makeVerifier()),
|
|
192
|
+
});
|
|
193
|
+
expect(verdict.ok).toBe(true);
|
|
194
|
+
if (!verdict.ok)
|
|
195
|
+
return;
|
|
196
|
+
expect(verdict.issuerHex).toBe(deviceIdToHex(machine.deviceId));
|
|
197
|
+
});
|
|
198
|
+
it("does not identify a proof for a different device", async () => {
|
|
199
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), "membership-proof-host-"));
|
|
200
|
+
const machine = await toIdentityPort(loadOrCreateMachineIdentity({ dir }));
|
|
201
|
+
const device = await toIdentityPort(generateIdentity());
|
|
202
|
+
const other = await toIdentityPort(generateIdentity());
|
|
203
|
+
const proof = await mintMembershipProof({
|
|
204
|
+
issuer: machine,
|
|
205
|
+
clock: createSystemClock(),
|
|
206
|
+
deviceId: device.deviceId,
|
|
207
|
+
});
|
|
208
|
+
const verdict = await identifyMembershipProofIssuer({
|
|
209
|
+
proof,
|
|
210
|
+
deviceId: other.deviceId,
|
|
211
|
+
...(await makeVerifier()),
|
|
212
|
+
});
|
|
213
|
+
expect(verdict.ok).toBe(false);
|
|
214
|
+
});
|
|
215
|
+
it("does not identify a proof whose named group is not the key that signed it", async () => {
|
|
216
|
+
const impostor = await toIdentityPort(generateIdentity());
|
|
217
|
+
const victim = await toIdentityPort(generateIdentity());
|
|
218
|
+
const device = await toIdentityPort(generateIdentity());
|
|
219
|
+
const clock = createSystemClock();
|
|
220
|
+
const minted = await mintCapabilityToken({
|
|
221
|
+
identity: impostor,
|
|
222
|
+
clock,
|
|
223
|
+
tokenId: randomId(),
|
|
224
|
+
bearer: device.deviceId,
|
|
225
|
+
capability: DEVICE_MEMBER_CAPABILITY,
|
|
226
|
+
scope: { kind: "group", path: deviceIdToHex(victim.deviceId) },
|
|
227
|
+
expires: clock.now() + MEMBERSHIP_PROOF_LIFETIME_MS,
|
|
228
|
+
delegationsRemaining: 0,
|
|
229
|
+
});
|
|
230
|
+
if (!minted.ok)
|
|
231
|
+
throw new Error(`mint failed: ${minted.reason}`);
|
|
232
|
+
const verdict = await identifyMembershipProofIssuer({
|
|
233
|
+
proof: encodeTokenText(minted.token),
|
|
234
|
+
deviceId: device.deviceId,
|
|
235
|
+
...(await makeVerifier()),
|
|
236
|
+
});
|
|
237
|
+
expect(verdict).toEqual({ ok: false, reason: "wrong_chain_root" });
|
|
238
|
+
});
|
|
147
239
|
});
|
|
148
240
|
//# sourceMappingURL=membership-proof.unit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"membership-proof.unit.test.js","sourceRoot":"","sources":["../../src/test/membership-proof.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"membership-proof.unit.test.js","sourceRoot":"","sources":["../../src/test/membership-proof.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-claim.unit.test.d.ts","sourceRoot":"","sources":["../../src/test/name-claim.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for self display name claims (core/name-claim, agent-comms#345): the issuer is authentic, the content is the issuer's own, and nothing else verifies.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
6
|
+
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
7
|
+
import { generateIdentity } from "../core/identity.js";
|
|
8
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
9
|
+
import { mintNameClaim, verifyNameClaim } from "../core/name-claim.js";
|
|
10
|
+
const LIFETIME_MS = 60_000;
|
|
11
|
+
async function port() {
|
|
12
|
+
return toIdentityPort(generateIdentity());
|
|
13
|
+
}
|
|
14
|
+
/** Decodes a claim's text to its wire object, for tests that tamper with one field. */
|
|
15
|
+
function decode(claim) {
|
|
16
|
+
const parsed = JSON.parse(Buffer.from(claim, "base64url").toString("utf-8"));
|
|
17
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
18
|
+
throw new Error("claim is not an object");
|
|
19
|
+
}
|
|
20
|
+
return Object.fromEntries(Object.entries(parsed));
|
|
21
|
+
}
|
|
22
|
+
function encode(wire) {
|
|
23
|
+
return Buffer.from(JSON.stringify(wire), "utf-8").toString("base64url");
|
|
24
|
+
}
|
|
25
|
+
describe("name claim", () => {
|
|
26
|
+
it("verifies for its own subject and yields the name the subject chose", async () => {
|
|
27
|
+
const machine = await port();
|
|
28
|
+
const verifier = await port();
|
|
29
|
+
const clock = createSystemClock();
|
|
30
|
+
const claim = await mintNameClaim({
|
|
31
|
+
issuer: machine,
|
|
32
|
+
clock,
|
|
33
|
+
name: "joe-mbp",
|
|
34
|
+
lifetimeMs: LIFETIME_MS,
|
|
35
|
+
});
|
|
36
|
+
const verdict = await verifyNameClaim({
|
|
37
|
+
claim,
|
|
38
|
+
subject: deviceIdToHex(machine.deviceId),
|
|
39
|
+
identity: verifier,
|
|
40
|
+
clock,
|
|
41
|
+
});
|
|
42
|
+
expect(verdict).toMatchObject({ ok: true, name: "joe-mbp" });
|
|
43
|
+
});
|
|
44
|
+
it("does not verify for any other subject", async () => {
|
|
45
|
+
const machine = await port();
|
|
46
|
+
const other = await port();
|
|
47
|
+
const clock = createSystemClock();
|
|
48
|
+
const claim = await mintNameClaim({
|
|
49
|
+
issuer: machine,
|
|
50
|
+
clock,
|
|
51
|
+
name: "joe-mbp",
|
|
52
|
+
lifetimeMs: LIFETIME_MS,
|
|
53
|
+
});
|
|
54
|
+
const verdict = await verifyNameClaim({
|
|
55
|
+
claim,
|
|
56
|
+
subject: deviceIdToHex(other.deviceId),
|
|
57
|
+
identity: other,
|
|
58
|
+
clock,
|
|
59
|
+
});
|
|
60
|
+
expect(verdict).toEqual({ ok: false, reason: "wrong_subject" });
|
|
61
|
+
});
|
|
62
|
+
it("refuses a claim relabelled to name another subject, since its key is not that subject's", async () => {
|
|
63
|
+
const impostor = await port();
|
|
64
|
+
const victim = await port();
|
|
65
|
+
const clock = createSystemClock();
|
|
66
|
+
const claim = await mintNameClaim({
|
|
67
|
+
issuer: impostor,
|
|
68
|
+
clock,
|
|
69
|
+
name: "victim's name",
|
|
70
|
+
lifetimeMs: LIFETIME_MS,
|
|
71
|
+
});
|
|
72
|
+
const victimHex = deviceIdToHex(victim.deviceId);
|
|
73
|
+
const verdict = await verifyNameClaim({
|
|
74
|
+
claim: encode({ ...decode(claim), subject: victimHex }),
|
|
75
|
+
subject: victimHex,
|
|
76
|
+
identity: victim,
|
|
77
|
+
clock,
|
|
78
|
+
});
|
|
79
|
+
expect(verdict).toEqual({ ok: false, reason: "wrong_key" });
|
|
80
|
+
});
|
|
81
|
+
it("refuses a claim whose name was changed after signing", async () => {
|
|
82
|
+
const machine = await port();
|
|
83
|
+
const clock = createSystemClock();
|
|
84
|
+
const claim = await mintNameClaim({
|
|
85
|
+
issuer: machine,
|
|
86
|
+
clock,
|
|
87
|
+
name: "joe-mbp",
|
|
88
|
+
lifetimeMs: LIFETIME_MS,
|
|
89
|
+
});
|
|
90
|
+
const verdict = await verifyNameClaim({
|
|
91
|
+
claim: encode({ ...decode(claim), name: "someone-else" }),
|
|
92
|
+
subject: deviceIdToHex(machine.deviceId),
|
|
93
|
+
identity: machine,
|
|
94
|
+
clock,
|
|
95
|
+
});
|
|
96
|
+
expect(verdict).toEqual({ ok: false, reason: "bad_signature" });
|
|
97
|
+
});
|
|
98
|
+
it("refuses an expired claim", async () => {
|
|
99
|
+
const machine = await port();
|
|
100
|
+
const minted = createSystemClock();
|
|
101
|
+
const claim = await mintNameClaim({
|
|
102
|
+
issuer: machine,
|
|
103
|
+
clock: minted,
|
|
104
|
+
name: "joe-mbp",
|
|
105
|
+
lifetimeMs: LIFETIME_MS,
|
|
106
|
+
});
|
|
107
|
+
const later = { now: () => minted.now() + LIFETIME_MS + 1 };
|
|
108
|
+
const verdict = await verifyNameClaim({
|
|
109
|
+
claim,
|
|
110
|
+
subject: deviceIdToHex(machine.deviceId),
|
|
111
|
+
identity: machine,
|
|
112
|
+
clock: later,
|
|
113
|
+
});
|
|
114
|
+
expect(verdict).toEqual({ ok: false, reason: "expired" });
|
|
115
|
+
});
|
|
116
|
+
it("refuses a signed name that carries a control sequence, and text that is not a claim", async () => {
|
|
117
|
+
const machine = await port();
|
|
118
|
+
const clock = createSystemClock();
|
|
119
|
+
const subject = deviceIdToHex(machine.deviceId);
|
|
120
|
+
const claim = await mintNameClaim({
|
|
121
|
+
issuer: machine,
|
|
122
|
+
clock,
|
|
123
|
+
name: "evil\u001b[2J",
|
|
124
|
+
lifetimeMs: LIFETIME_MS,
|
|
125
|
+
});
|
|
126
|
+
expect(await verifyNameClaim({ claim, subject, identity: machine, clock })).toEqual({ ok: false, reason: "unusable_name" });
|
|
127
|
+
expect(await verifyNameClaim({
|
|
128
|
+
claim: "not a claim",
|
|
129
|
+
subject,
|
|
130
|
+
identity: machine,
|
|
131
|
+
clock,
|
|
132
|
+
})).toEqual({ ok: false, reason: "not_a_claim" });
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=name-claim.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-claim.unit.test.js","sourceRoot":"","sources":["../../src/test/name-claim.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for naming (agent-comms#345): a machine's self display name, signed by its machine key, reaches a peer that trusts it and is shown as that machine's own claim; the viewer's petnames come first wherever an id is shown; and a petname never leaves the viewer's own storage, over the hub or over a direct peer session. Two hosts meet through a real hub; the stores of one host share its identity directory.
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=naming.integration.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/naming.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|