{"_id":"@cyaxios/tn-proto","_rev":"12-ad946b6d31e50f3a51e3ac89031a8f1f","name":"@cyaxios/tn-proto","dist-tags":{"alpha":"0.6.0-alpha.4","latest":"0.6.11"},"versions":{"0.6.0-alpha.3":{"name":"@cyaxios/tn-proto","version":"0.6.0-alpha.3","_id":"@cyaxios/tn-proto@0.6.0-alpha.3","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"d99d4534d71cbc86040e9f040a6b777e8ed02753","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.0-alpha.3.tgz","fileCount":454,"integrity":"sha512-ajQNBTCapqrXlcvbs2oTkptIManisAm4VUf1xRmqRYVDqt1r6oR2iX8wmvA2FTyPn2GHGh/Adrn2FA2/zSkPoQ==","signatures":[{"sig":"MEUCIAz18TmYBKWgFi/pdadUDgTIbvTIyjQxLTc6sasupSnnAiEAmvkg/oqHJNkjambGfjoZ+si+fZey12EZsuO7jmp/1vo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6115471},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"16570543f2a4374487f505ebe69990beb9f5bcd2","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test test/sdk_smoke.test.ts test/module_surface.test.ts test/node_runtime.test.ts test/handlers.test.ts test/handlers_fs_drop.test.ts test/handlers_fs_scan.test.ts test/handlers_vault_push.test.ts test/handlers_vault_pull.test.ts test/init_idempotence.test.ts test/client.test.ts test/client_ephemeral.test.ts test/config_env_vars.test.ts test/load_config_shape.test.ts test/yaml_vault_model.test.ts test/vault_normalize_contract.test.ts test/create_fresh_vault_yaml.test.ts test/multi_group_routing.test.ts test/tnpkg_export_absorb.test.ts test/tnpkg_interop.test.ts test/manifest_contract.test.ts test/tnpkg_container_contract.test.ts test/body_encryption_contract.test.ts test/recipient_seal.test.ts test/absorb_vault_adoption_contract.test.ts test/admin_cache.test.ts test/admin_cache_load.test.ts test/admin_state_apply.test.ts test/leaf_reuse_equivocation.test.ts test/awk_bek_parity.test.ts test/read_shape.test.ts test/agents_group.test.ts test/secure_read.test.ts test/admin_add_agent_runtime.test.ts test/agents_policy_published.test.ts test/secure_read_interop.test.ts test/sync_state.test.ts test/core_no_node_imports.test.ts test/errors_instanceof.test.ts test/tn_init.test.ts test/admin_namespace.test.ts test/admin_recipient_polymorphic.test.ts test/pkg_namespace.test.ts test/vault_namespace.test.ts test/agents_namespace.test.ts test/handlers_namespace.test.ts test/emk.test.ts test/watch.test.ts test/cli_watch.test.ts test/cli_rotate.test.ts test/watch_interop.test.ts test/core_browser_contract.test.ts test/decrypt_raw.test.ts test/btn_wire_contract.test.ts test/tn_multi_ceremony.test.ts test/extends_loader.test.ts test/ensure_group_stream_layout.test.ts test/log_path_event_id.test.ts test/project_stream_layout_contract.test.ts test/project_layout_create_runtime.test.ts test/ceremony_init_row_hash_parity.test.ts test/profiles.test.ts test/profile_chain_parity.test.ts test/profile_conflict.test.ts test/runtime_dedup.test.ts test/stdout_pretty.test.ts test/cli_streams_validate.test.ts test/emit_propagation.test.ts test/identity_project_seed.test.ts test/dirt_easy_flow.test.ts test/scenarios/alice/s01_hello.test.ts test/scenarios/alice/s02_rotate.test.ts test/scenarios/alice/s03_ceremony_matrix.test.ts test/scenarios/alice/s04_context_scopes.test.ts test/scenarios/alice/s06_rollover.test.ts test/scenarios/alice/s07_field_routing.test.ts test/scenarios/alice/s08_resume.test.ts test/scenarios/alice/s09_multi_recipient.test.ts test/scenarios/examples/ex02_reading.test.ts test/scenarios/examples/ex03_groups.test.ts test/scenarios/examples/ex06_multi_handler.test.ts test/vault_client_auth.test.ts test/wallet_link.test.ts test/account_connect.test.ts test/account_connect_cascade.test.ts test/cli_init_vault_show.test.ts test/cli_wallet_account.test.ts test/wallet_restore.test.ts test/init_upload.test.ts test/identity.test.ts test/filter_grammar.test.ts test/firehose_handler.test.ts test/restore_loopback.test.ts test/absorb_sealed_bootstrap.test.ts test/outbox.test.ts test/Entry.test.ts test/absorb_replaced_kit_paths.test.ts test/cross_publisher_read.test.ts test/log_fields.test.ts test/yaml_stdout_authoritative.test.ts test/log_level_filter.test.ts test/context_verbs.test.ts test/stdout_handler.test.ts test/run_set_guard.test.ts test/yaml_path_portability.test.ts test/using_rust.test.ts test/module_surface_parity.test.ts test/vault_emit_parity.test.ts test/e2e_docker.test.ts test/local_ndjson.test.ts test/local_keystore.test.ts test/local_envelope.test.ts test/local_read.test.ts test/local_watch.test.ts test/local_surface.test.ts test/wallet_status.test.ts test/wallet_namespace.test.ts test/cli_bundle.test.ts test/cli_add_recipient.test.ts test/cli_group_add.test.ts test/cli_absorb.test.ts test/cli_show_profiles.test.ts test/cli_wallet_pull_prefs.test.ts test/cli_wallet_export_mnemonic.test.ts test/cli_firehose.test.ts test/cli_wallet_sync.test.ts test/cli_inbox_accept.test.ts test/cli_inbox_list_local.test.ts test/verify_roundtrip.test.ts test/secure_read_tamper.test.ts test/wallet_sync_live.test.ts test/wallet_restore_live.test.ts test/account_connect_live.test.ts test/wallet_lifecycle_live.test.ts test/wallet_sync_negatives_live.test.ts test/wallet_two_device_sync_live.test.ts test/wallet_two_device_group_sync_live.test.ts test/account_sync_full_live.test.ts test/account_sync_cross_impl_live.test.ts test/cross_impl_body_roundtrip_live.test.ts test/awk_cache_live.test.ts test/btn_rotation_read.test.ts test/btn_genesis_anchor.test.ts test/btn_promote_crash.test.ts test/version_parity.test.ts","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","pretest":"npm run build","lint:fix":"eslint --fix src test bin","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"_npmVersion":"11.9.0","description":"TN protocol SDK for TypeScript â€” attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.0-alpha.3_1781290063776_0.1943115001904243","host":"s3://npm-registry-packages-npm-production"}},"0.6.0-alpha.4":{"name":"@cyaxios/tn-proto","version":"0.6.0-alpha.4","_id":"@cyaxios/tn-proto@0.6.0-alpha.4","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"85627ffbbe7bfd86476441cd9446b114db838639","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.0-alpha.4.tgz","fileCount":454,"integrity":"sha512-tBvlbbOiNCN+kkdu23ky/DesHYerbD+LduJU+8xD0zuJjHVa25UfOf4Zn3EKg1F5vVpGOcHrOxTA7Y65+uCmRQ==","signatures":[{"sig":"MEUCIAOJGwEA7KdoVQ5XMHP96sz6Chakksct7fj501u+cQRBAiEA6pFtfYH3beldMd4Sy9M2yn24Zzhln8N95sTKHe+UP6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6107391},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"714d7da9d0e7a1267a8271c104402e4865cdc79c","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test test/sdk_smoke.test.ts test/module_surface.test.ts test/node_runtime.test.ts test/handlers.test.ts test/handlers_fs_drop.test.ts test/handlers_fs_scan.test.ts test/handlers_vault_push.test.ts test/handlers_vault_pull.test.ts test/init_idempotence.test.ts test/client.test.ts test/client_ephemeral.test.ts test/config_env_vars.test.ts test/load_config_shape.test.ts test/yaml_vault_model.test.ts test/vault_normalize_contract.test.ts test/create_fresh_vault_yaml.test.ts test/multi_group_routing.test.ts test/tnpkg_export_absorb.test.ts test/tnpkg_interop.test.ts test/manifest_contract.test.ts test/tnpkg_container_contract.test.ts test/body_encryption_contract.test.ts test/recipient_seal.test.ts test/absorb_vault_adoption_contract.test.ts test/admin_cache.test.ts test/admin_cache_load.test.ts test/admin_state_apply.test.ts test/leaf_reuse_equivocation.test.ts test/awk_bek_parity.test.ts test/read_shape.test.ts test/agents_group.test.ts test/secure_read.test.ts test/admin_add_agent_runtime.test.ts test/agents_policy_published.test.ts test/secure_read_interop.test.ts test/sync_state.test.ts test/core_no_node_imports.test.ts test/errors_instanceof.test.ts test/tn_init.test.ts test/admin_namespace.test.ts test/admin_recipient_polymorphic.test.ts test/pkg_namespace.test.ts test/vault_namespace.test.ts test/agents_namespace.test.ts test/handlers_namespace.test.ts test/emk.test.ts test/watch.test.ts test/cli_watch.test.ts test/cli_rotate.test.ts test/watch_interop.test.ts test/core_browser_contract.test.ts test/decrypt_raw.test.ts test/btn_wire_contract.test.ts test/tn_multi_ceremony.test.ts test/extends_loader.test.ts test/ensure_group_stream_layout.test.ts test/log_path_event_id.test.ts test/project_stream_layout_contract.test.ts test/project_layout_create_runtime.test.ts test/ceremony_init_row_hash_parity.test.ts test/profiles.test.ts test/profile_chain_parity.test.ts test/profile_conflict.test.ts test/runtime_dedup.test.ts test/stdout_pretty.test.ts test/cli_streams_validate.test.ts test/emit_propagation.test.ts test/identity_project_seed.test.ts test/dirt_easy_flow.test.ts test/scenarios/alice/s01_hello.test.ts test/scenarios/alice/s02_rotate.test.ts test/scenarios/alice/s03_ceremony_matrix.test.ts test/scenarios/alice/s04_context_scopes.test.ts test/scenarios/alice/s06_rollover.test.ts test/scenarios/alice/s07_field_routing.test.ts test/scenarios/alice/s08_resume.test.ts test/scenarios/alice/s09_multi_recipient.test.ts test/scenarios/examples/ex02_reading.test.ts test/scenarios/examples/ex03_groups.test.ts test/scenarios/examples/ex06_multi_handler.test.ts test/vault_client_auth.test.ts test/wallet_link.test.ts test/account_connect.test.ts test/account_connect_cascade.test.ts test/cli_init_vault_show.test.ts test/cli_wallet_account.test.ts test/wallet_restore.test.ts test/init_upload.test.ts test/identity.test.ts test/filter_grammar.test.ts test/firehose_handler.test.ts test/restore_loopback.test.ts test/absorb_sealed_bootstrap.test.ts test/outbox.test.ts test/Entry.test.ts test/absorb_replaced_kit_paths.test.ts test/cross_publisher_read.test.ts test/log_fields.test.ts test/yaml_stdout_authoritative.test.ts test/log_level_filter.test.ts test/context_verbs.test.ts test/stdout_handler.test.ts test/run_set_guard.test.ts test/yaml_path_portability.test.ts test/using_rust.test.ts test/module_surface_parity.test.ts test/vault_emit_parity.test.ts test/e2e_docker.test.ts test/local_ndjson.test.ts test/local_keystore.test.ts test/local_envelope.test.ts test/local_read.test.ts test/local_watch.test.ts test/local_surface.test.ts test/wallet_status.test.ts test/wallet_namespace.test.ts test/cli_bundle.test.ts test/cli_add_recipient.test.ts test/cli_group_add.test.ts test/cli_absorb.test.ts test/cli_show_profiles.test.ts test/cli_wallet_pull_prefs.test.ts test/cli_wallet_export_mnemonic.test.ts test/cli_firehose.test.ts test/cli_wallet_sync.test.ts test/cli_inbox_accept.test.ts test/cli_inbox_list_local.test.ts test/verify_roundtrip.test.ts test/secure_read_tamper.test.ts test/wallet_sync_live.test.ts test/wallet_restore_live.test.ts test/account_connect_live.test.ts test/wallet_lifecycle_live.test.ts test/wallet_sync_negatives_live.test.ts test/wallet_two_device_sync_live.test.ts test/wallet_two_device_group_sync_live.test.ts test/account_sync_full_live.test.ts test/account_sync_cross_impl_live.test.ts test/cross_impl_body_roundtrip_live.test.ts test/awk_cache_live.test.ts test/btn_rotation_read.test.ts test/btn_genesis_anchor.test.ts test/btn_promote_crash.test.ts test/version_parity.test.ts","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","pretest":"npm run build","lint:fix":"eslint --fix src test bin","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"_npmVersion":"11.9.0","description":"TN protocol SDK for TypeScript â€” attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.0-alpha.4_1781291256091_0.13945221156032783","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@cyaxios/tn-proto","version":"0.6.1","_id":"@cyaxios/tn-proto@0.6.1","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"aeeae389794d289860175abbf6ff0bb2f3b8ddbc","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.1.tgz","fileCount":440,"integrity":"sha512-3YzOE5ixGu1GtiLpk4giaRD+b8/FST+xCvC2KOTLfSqVOD52cW8qx5ukHJ+OvCH0y3S1NHMCvpSmKA5MVo8qUg==","signatures":[{"sig":"MEQCIEbq4ruPHvu/e9XSLFo8VPxwQ3DKGjWf6oksHj4kis2EAiBCxfrgGPhvZ+dsIxruU0DKX0t+Tz2gVoBmbPLsWD9SEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3915216},"main":"./dist/index.js","type":"module","_from":"file:/mnt/c/codex/tn/_tnpub/tn-proto-tarball/cyaxios-tn-proto-0.6.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test test/sdk_smoke.test.ts test/module_surface.test.ts test/node_runtime.test.ts test/handlers.test.ts test/handlers_fs_drop.test.ts test/handlers_fs_scan.test.ts test/handlers_vault_push.test.ts test/handlers_vault_pull.test.ts test/init_idempotence.test.ts test/client.test.ts test/client_ephemeral.test.ts test/config_env_vars.test.ts test/load_config_shape.test.ts test/yaml_vault_model.test.ts test/vault_normalize_contract.test.ts test/create_fresh_vault_yaml.test.ts test/multi_group_routing.test.ts test/tnpkg_export_absorb.test.ts test/tnpkg_interop.test.ts test/manifest_contract.test.ts test/tnpkg_container_contract.test.ts test/body_encryption_contract.test.ts test/recipient_seal.test.ts test/absorb_vault_adoption_contract.test.ts test/admin_cache.test.ts test/admin_cache_load.test.ts test/admin_state_apply.test.ts test/leaf_reuse_equivocation.test.ts test/awk_bek_parity.test.ts test/read_shape.test.ts test/agents_group.test.ts test/secure_read.test.ts test/admin_add_agent_runtime.test.ts test/agents_policy_published.test.ts test/secure_read_interop.test.ts test/sync_state.test.ts test/core_no_node_imports.test.ts test/errors_instanceof.test.ts test/tn_init.test.ts test/admin_namespace.test.ts test/admin_recipient_polymorphic.test.ts test/pkg_namespace.test.ts test/vault_namespace.test.ts test/agents_namespace.test.ts test/handlers_namespace.test.ts test/emk.test.ts test/watch.test.ts test/cli_watch.test.ts test/cli_rotate.test.ts test/watch_interop.test.ts test/core_browser_contract.test.ts test/decrypt_raw.test.ts test/btn_wire_contract.test.ts test/tn_multi_ceremony.test.ts test/extends_loader.test.ts test/ensure_group_stream_layout.test.ts test/log_path_event_id.test.ts test/project_stream_layout_contract.test.ts test/project_layout_create_runtime.test.ts test/ceremony_init_row_hash_parity.test.ts test/profiles.test.ts test/profile_chain_parity.test.ts test/profile_conflict.test.ts test/runtime_dedup.test.ts test/stdout_pretty.test.ts test/cli_streams_validate.test.ts test/emit_propagation.test.ts test/identity_project_seed.test.ts test/dirt_easy_flow.test.ts test/scenarios/alice/s01_hello.test.ts test/scenarios/alice/s02_rotate.test.ts test/scenarios/alice/s03_ceremony_matrix.test.ts test/scenarios/alice/s04_context_scopes.test.ts test/scenarios/alice/s06_rollover.test.ts test/scenarios/alice/s07_field_routing.test.ts test/scenarios/alice/s08_resume.test.ts test/scenarios/alice/s09_multi_recipient.test.ts test/scenarios/examples/ex02_reading.test.ts test/scenarios/examples/ex03_groups.test.ts test/scenarios/examples/ex06_multi_handler.test.ts test/vault_client_auth.test.ts test/wallet_link.test.ts test/account_connect.test.ts test/account_connect_cascade.test.ts test/cli_init_vault_show.test.ts test/cli_wallet_account.test.ts test/wallet_restore.test.ts test/wallet_sealing.test.ts test/init_upload.test.ts test/identity.test.ts test/filter_grammar.test.ts test/firehose_handler.test.ts test/restore_loopback.test.ts test/absorb_sealed_bootstrap.test.ts test/outbox.test.ts test/Entry.test.ts test/absorb_replaced_kit_paths.test.ts test/cross_publisher_read.test.ts test/log_fields.test.ts test/yaml_stdout_authoritative.test.ts test/log_level_filter.test.ts test/context_verbs.test.ts test/stdout_handler.test.ts test/run_set_guard.test.ts test/yaml_path_portability.test.ts test/using_rust.test.ts test/module_surface_parity.test.ts test/vault_emit_parity.test.ts test/e2e_docker.test.ts test/local_ndjson.test.ts test/local_keystore.test.ts test/local_envelope.test.ts test/local_read.test.ts test/local_watch.test.ts test/local_surface.test.ts test/wallet_status.test.ts test/wallet_namespace.test.ts test/cli_bundle.test.ts test/cli_add_recipient.test.ts test/cli_group_add.test.ts test/cli_absorb.test.ts test/cli_show_profiles.test.ts test/cli_wallet_pull_prefs.test.ts test/cli_wallet_export_mnemonic.test.ts test/cli_firehose.test.ts test/cli_wallet_sync.test.ts test/cli_inbox_accept.test.ts test/cli_inbox_list_local.test.ts test/verify_roundtrip.test.ts test/secure_read_tamper.test.ts test/wallet_sync_live.test.ts test/wallet_restore_live.test.ts test/account_connect_live.test.ts test/wallet_lifecycle_live.test.ts test/wallet_sync_negatives_live.test.ts test/wallet_two_device_sync_live.test.ts test/wallet_two_device_group_sync_live.test.ts test/account_sync_full_live.test.ts test/account_sync_cross_impl_live.test.ts test/cross_impl_body_roundtrip_live.test.ts test/awk_cache_live.test.ts test/btn_rotation_read.test.ts test/btn_genesis_anchor.test.ts test/btn_promote_crash.test.ts test/version_parity.test.ts","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","pretest":"npm run build","lint:fix":"eslint --fix src test bin","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"_resolved":"/mnt/c/codex/tn/_tnpub/tn-proto-tarball/cyaxios-tn-proto-0.6.1.tgz","_integrity":"sha512-3YzOE5ixGu1GtiLpk4giaRD+b8/FST+xCvC2KOTLfSqVOD52cW8qx5ukHJ+OvCH0y3S1NHMCvpSmKA5MVo8qUg==","_npmVersion":"10.9.2","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.1_1781545013602_0.1361894994250734","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@cyaxios/tn-proto","version":"0.6.2","_id":"@cyaxios/tn-proto@0.6.2","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"4168913de966a3cbbd1aba0222dd6fb4604c3598","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.2.tgz","fileCount":440,"integrity":"sha512-npp6KWPkg3MJnkPg7ocMmXqh0BRAW3UyMSzLI1UzGgFRgV9h/gQRvtLKxB09j+dhPfDdwnO1T2fJB2ninQwwsw==","signatures":[{"sig":"MEYCIQDEF8unNOIsSKW1mtkk7imI0d7DQY6OwFnj/5Olu+3/4AIhAMZ9Dhd+IYxBYNSmiCFLDx+nIYXFZbpNkDpvofvp6sv0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3915431},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"009d0f4c352c954ee235fd0dd4061aef3e5fe8ed","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test test/sdk_smoke.test.ts test/module_surface.test.ts test/node_runtime.test.ts test/handlers.test.ts test/handlers_fs_drop.test.ts test/handlers_fs_scan.test.ts test/handlers_vault_push.test.ts test/handlers_vault_pull.test.ts test/init_idempotence.test.ts test/client.test.ts test/client_ephemeral.test.ts test/config_env_vars.test.ts test/load_config_shape.test.ts test/yaml_vault_model.test.ts test/vault_normalize_contract.test.ts test/create_fresh_vault_yaml.test.ts test/multi_group_routing.test.ts test/tnpkg_export_absorb.test.ts test/tnpkg_interop.test.ts test/manifest_contract.test.ts test/tnpkg_container_contract.test.ts test/body_encryption_contract.test.ts test/recipient_seal.test.ts test/absorb_vault_adoption_contract.test.ts test/admin_cache.test.ts test/admin_cache_load.test.ts test/admin_state_apply.test.ts test/leaf_reuse_equivocation.test.ts test/awk_bek_parity.test.ts test/read_shape.test.ts test/agents_group.test.ts test/secure_read.test.ts test/admin_add_agent_runtime.test.ts test/agents_policy_published.test.ts test/secure_read_interop.test.ts test/sync_state.test.ts test/core_no_node_imports.test.ts test/errors_instanceof.test.ts test/tn_init.test.ts test/admin_namespace.test.ts test/admin_recipient_polymorphic.test.ts test/pkg_namespace.test.ts test/vault_namespace.test.ts test/agents_namespace.test.ts test/handlers_namespace.test.ts test/emk.test.ts test/watch.test.ts test/cli_watch.test.ts test/cli_rotate.test.ts test/watch_interop.test.ts test/core_browser_contract.test.ts test/decrypt_raw.test.ts test/btn_wire_contract.test.ts test/tn_multi_ceremony.test.ts test/extends_loader.test.ts test/ensure_group_stream_layout.test.ts test/log_path_event_id.test.ts test/project_stream_layout_contract.test.ts test/project_layout_create_runtime.test.ts test/ceremony_init_row_hash_parity.test.ts test/profiles.test.ts test/profile_chain_parity.test.ts test/profile_conflict.test.ts test/runtime_dedup.test.ts test/stdout_pretty.test.ts test/cli_streams_validate.test.ts test/emit_propagation.test.ts test/identity_project_seed.test.ts test/dirt_easy_flow.test.ts test/scenarios/alice/s01_hello.test.ts test/scenarios/alice/s02_rotate.test.ts test/scenarios/alice/s03_ceremony_matrix.test.ts test/scenarios/alice/s04_context_scopes.test.ts test/scenarios/alice/s06_rollover.test.ts test/scenarios/alice/s07_field_routing.test.ts test/scenarios/alice/s08_resume.test.ts test/scenarios/alice/s09_multi_recipient.test.ts test/scenarios/examples/ex02_reading.test.ts test/scenarios/examples/ex03_groups.test.ts test/scenarios/examples/ex06_multi_handler.test.ts test/vault_client_auth.test.ts test/wallet_link.test.ts test/account_connect.test.ts test/account_connect_cascade.test.ts test/cli_init_vault_show.test.ts test/cli_wallet_account.test.ts test/wallet_restore.test.ts test/wallet_sealing.test.ts test/init_upload.test.ts test/identity.test.ts test/filter_grammar.test.ts test/firehose_handler.test.ts test/restore_loopback.test.ts test/absorb_sealed_bootstrap.test.ts test/outbox.test.ts test/Entry.test.ts test/absorb_replaced_kit_paths.test.ts test/cross_publisher_read.test.ts test/log_fields.test.ts test/yaml_stdout_authoritative.test.ts test/log_level_filter.test.ts test/context_verbs.test.ts test/stdout_handler.test.ts test/run_set_guard.test.ts test/yaml_path_portability.test.ts test/using_rust.test.ts test/module_surface_parity.test.ts test/vault_emit_parity.test.ts test/e2e_docker.test.ts test/local_ndjson.test.ts test/local_keystore.test.ts test/local_envelope.test.ts test/local_read.test.ts test/local_watch.test.ts test/local_surface.test.ts test/wallet_status.test.ts test/wallet_namespace.test.ts test/cli_bundle.test.ts test/cli_add_recipient.test.ts test/cli_group_add.test.ts test/cli_absorb.test.ts test/cli_show_profiles.test.ts test/cli_wallet_pull_prefs.test.ts test/cli_wallet_export_mnemonic.test.ts test/cli_firehose.test.ts test/cli_wallet_sync.test.ts test/cli_inbox_accept.test.ts test/cli_inbox_list_local.test.ts test/verify_roundtrip.test.ts test/secure_read_tamper.test.ts test/wallet_sync_live.test.ts test/wallet_restore_live.test.ts test/account_connect_live.test.ts test/wallet_lifecycle_live.test.ts test/wallet_sync_negatives_live.test.ts test/wallet_two_device_sync_live.test.ts test/wallet_two_device_group_sync_live.test.ts test/account_sync_full_live.test.ts test/account_sync_cross_impl_live.test.ts test/cross_impl_body_roundtrip_live.test.ts test/awk_cache_live.test.ts test/btn_rotation_read.test.ts test/btn_genesis_anchor.test.ts test/btn_promote_crash.test.ts test/version_parity.test.ts","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","pretest":"npm run build","lint:fix":"eslint --fix src test bin","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.2_1781556426022_0.9017779193095363","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@cyaxios/tn-proto","version":"0.6.4","_id":"@cyaxios/tn-proto@0.6.4","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"0aa569a0976cef13eff04b72dd676c1eba376b4a","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.4.tgz","fileCount":544,"integrity":"sha512-Bb9EvdxUS9NRACckkMAxC8MRLp+PyUs53nNiGu3e6vTDhCAYEfLyylk6SMyVdzw4R/YSIT2vKqZQ6uIXCFVZNQ==","signatures":[{"sig":"MEQCIBAP1AUYX7j+fNDqpmrSwbAzICiHttUcly/k8HABGH1PAiAnkDyOSEsqkRFQtR4tY8Wtq9UbE6uhGqgFJtAXhCmK6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4201851},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"30e7edcbb39b975b7565716aef1dafc7f917d0f1","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.4_1781657293509_0.24173486247950637","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@cyaxios/tn-proto","version":"0.6.5","_id":"@cyaxios/tn-proto@0.6.5","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"dc2c8fd3f3c805ac291f53918d7b5cc54789c867","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.5.tgz","fileCount":544,"integrity":"sha512-Q3zKX/WDhr9S72CVePAId2dAMaKc2sKO7f+k5+CZQZYTN/UScSwggfsqzjbNg9d5mfu3sRyRzKiumBMeWbTG/Q==","signatures":[{"sig":"MEYCIQDzG6WmxEDVSvb9PUak6xc+kStuekwmgtnrTnSShN2lSQIhAOOAJuheu3OHqC3OKL2+fS/AKBjzr72Utw+Yr7gX9tws","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4202603},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"a9fab8f6e93ca9086c23b30ac2dde04c62a4a3dc","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.5_1781660718097_0.37339346401430706","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@cyaxios/tn-proto","version":"0.6.6","_id":"@cyaxios/tn-proto@0.6.6","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"603d69cf573bffd8755c457feb638b9926671ea5","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.6.tgz","fileCount":548,"integrity":"sha512-5rIFFfOsLZcR1Ym0uQgt+9QFmSTZUty2NQokFlYYL1fX8Q+OInzdCUpv2AjCusoueUmKwMsAD1H98/+Vq3sJ2g==","signatures":[{"sig":"MEUCIBaJyM8rjyzAPBi+6MyIdRmgq6uPZN3Bgk465U5mUtCsAiEAn3fIcqmOU3nqk+8Kbjirw+lhskOsLknyGykyuAyutrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4223253},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"feaf69ca6a286ac28dd4b824420a263300efc10a","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","build:cdn":"npm run build:browser && node scripts/build-cdn.mjs","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.6_1781735609809_0.6907534706939031","host":"s3://npm-registry-packages-npm-production"}},"0.6.8":{"name":"@cyaxios/tn-proto","version":"0.6.8","_id":"@cyaxios/tn-proto@0.6.8","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"6496f3325ae9cba887827505fb963029d802480b","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.8.tgz","fileCount":548,"integrity":"sha512-Yys4zyQA3pmWSjiO0c6TamwuJT/ROzvZ7nJHpsJiw8jANFNVpJOlPiurXrRteNE9Rs+l7GxCoL3QOTz1I+mIsw==","signatures":[{"sig":"MEUCIDctPiCsi1ydrlO6VsqnzCyFElsgbwyAQgWNuP5loFttAiEAqeScFbA2XQYwhDH3fOZzxOtYCPtmTzrDMVKkxzKbLsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4221518},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"dbfe5ad560b51bed38a22357c13f4767a2dda66b","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","build:cdn":"npm run build:browser && node scripts/build-cdn.mjs","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.19.0","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.8_1781817957291_0.4012836770948287","host":"s3://npm-registry-packages-npm-production"}},"0.6.9":{"name":"@cyaxios/tn-proto","version":"0.6.9","license":"Apache-2.0","_id":"@cyaxios/tn-proto@0.6.9","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"4f203f70acd74d5a4e24b7220a0e2c8f7ddc1b0e","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.9.tgz","fileCount":564,"integrity":"sha512-Qvzc4big48NtpFh4gMeYjOnoP1lhR7YF4AadzjQ7wUO71VIHDtVQskgm3DkYJzfQ9i/AXXnnr1/7ifwYJds1zA==","signatures":[{"sig":"MEUCIGvZzWdJUedqZkofliOPXg0cPWR8uG4P6Q/M2umkqZFsAiEA7VnPod8p1qHj38BjavEus5ovaOrqFM77Mq22tutgkeM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4904430},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"09bae03dbedbbdbfab09b4cd898c27f884e841f7","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","build:cdn":"npm run build:browser && node scripts/build-cdn.mjs","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.2.3","yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.22.4","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.9_1783627715647_0.6100665494291182","host":"s3://npm-registry-packages-npm-production"}},"0.6.10":{"name":"@cyaxios/tn-proto","version":"0.6.10","license":"Apache-2.0","_id":"@cyaxios/tn-proto@0.6.10","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"bin":{"tn-js":"bin/tn-js.mjs"},"dist":{"shasum":"8201fde9a8efd67b1a8811fa6aa68553ef12242f","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.10.tgz","fileCount":568,"integrity":"sha512-r86btKFaQW7ydc6vADPds4nTrASATKi87aVJp5wZvqntHFELAF/EM0rIXRUSW5VCMIzIdr5Jfgv8AucW9hBMRA==","signatures":[{"sig":"MEUCIQDfzkSQcxnd3RJYCrbjSEjgyWUYUlNdIXivYXlar/wihQIgTkDKd4Yk9muhdewbMOWAMr1ZQwAvpXCi46oH1LmTvZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4981672},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"}},"gitHead":"fb89be2aab32da542e98441e43b0ebd3e69f907c","scripts":{"lint":"eslint --max-warnings=0 src test bin","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","build":"tsc -p tsconfig.json","format":"prettier --write src test bin","prepack":"npm run build","pretest":"npm run build","lint:fix":"eslint --fix src test bin","prebuild":"node scripts/gen-version.mjs","test:all":"bash test/interop_driver.sh","build:cdn":"npm run build:browser && node scripts/build-cdn.mjs","typecheck":"tsc --noEmit -p tsconfig.json","gen:version":"node scripts/gen-version.mjs","format:check":"prettier --check src test bin","test:interop":"node test/interop_driver.mjs","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test"},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"repository":{"url":"git+https://github.com/cyaxios/tn-proto.git","type":"git"},"_npmVersion":"10.9.8","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"jose":"^6.2.3","yaml":"^2.6.0","fflate":"^0.8.2","tn-wasm":"file:../crypto/tn-wasm/pkg","chokidar":"^4.0.3","@scure/bip39":"^1.6.0","@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","tsx":"^4.22.4","eslint":"^10.2.1","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.6.0","@types/node":"^22.7.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_npmOperationalInternal":{"tmp":"tmp/tn-proto_0.6.10_1783644264524_0.7597641966888411","host":"s3://npm-registry-packages-npm-production"}},"0.6.11":{"name":"@cyaxios/tn-proto","version":"0.6.11","description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","repository":{"type":"git","url":"git+https://github.com/cyaxios/tn-proto.git"},"homepage":"https://github.com/cyaxios/tn-proto#readme","bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"license":"Apache-2.0","type":"module","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./raw":{"types":"./dist/raw.d.ts","import":"./dist/raw.js"},"./core":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./browser":{"types":"./dist/index.browser.d.ts","import":"./dist/index.browser.js"},"./local":{"types":"./dist/local/index.d.ts","import":"./dist/local/index.js"}},"scripts":{"gen:version":"node scripts/gen-version.mjs","prebuild":"node scripts/gen-version.mjs","prepack":"npm run build","build":"tsc -p tsconfig.json","build:browser":"npm run build && node scripts/build-browser-bundle.mjs","build:cdn":"npm run build:browser && node scripts/build-cdn.mjs","typecheck":"tsc --noEmit -p tsconfig.json","lint":"eslint --max-warnings=0 src test bin","lint:fix":"eslint --fix src test bin","format":"prettier --write src test bin","format:check":"prettier --check src test bin","pretest":"npm run build","test":"node --import tsx --import ./test/_setup_wasm.mjs --test \"test/**/*.test.ts\"","test:coverage":"c8 --reporter=text --reporter=lcov --include=src/**/*.ts --exclude=src/**/*.d.ts --all npm test","test:interop":"node test/interop_driver.mjs","test:all":"bash test/interop_driver.sh"},"bin":{"tn-js":"bin/tn-js.mjs"},"dependencies":{"@noble/curves":"^1.9.7","@noble/hashes":"^1.8.0","@scure/bip39":"^1.6.0","chokidar":"^4.0.3","fflate":"^0.8.2","jose":"^6.2.3","tn-wasm":"file:../crypto/tn-wasm/pkg","yaml":"^2.6.0"},"devDependencies":{"@eslint/js":"^10.0.1","@types/node":"^22.7.0","c8":"^10.1.3","eslint":"^10.2.1","prettier":"^3.8.3","tsx":"^4.22.4","typescript":"^5.6.0","typescript-eslint":"^8.59.0"},"bundleDependencies":["tn-wasm"],"_id":"@cyaxios/tn-proto@0.6.11","gitHead":"6b1b212df6f205b9b14cb0824bd9936413bb5d19","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-X3nOsYqDElTTb3y1KaW4fb9XaR1OXeV/fZFoF9QHSlVvA24P/aJDLEJRwCN0tzi1zo/XiNPunoK0jATRYoq8gQ==","shasum":"ff8dd2fbbc070a272aa4ebc46958fb9a761574f2","tarball":"https://registry.npmjs.org/@cyaxios/tn-proto/-/tn-proto-0.6.11.tgz","fileCount":568,"unpackedSize":4981672,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyaxios%2ftn-proto@0.6.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEOGi3jGoNfhZbkTeupaipwaoKPkqwKLgzpA7OrEKx7kAiB84PQoOG/3kyigaepZLyGSGuzL0Y5bZyCS5ku1D4piVA=="}]},"_npmUser":{"name":"cygms","email":"gil@cyaxios.com"},"directories":{},"maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tn-proto_0.6.11_1783689133530_0.5718628427147736"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-12T18:47:43.638Z","modified":"2026-07-10T13:12:14.042Z","0.6.0-alpha.3":"2026-06-12T18:47:43.990Z","0.6.0-alpha.4":"2026-06-12T19:07:36.318Z","0.6.1":"2026-06-15T17:36:53.819Z","0.6.2":"2026-06-15T20:47:06.201Z","0.6.4":"2026-06-17T00:48:13.709Z","0.6.5":"2026-06-17T01:45:18.305Z","0.6.6":"2026-06-17T22:33:30.026Z","0.6.8":"2026-06-18T21:25:57.509Z","0.6.9":"2026-07-09T20:08:35.868Z","0.6.10":"2026-07-10T00:44:24.739Z","0.6.11":"2026-07-10T13:12:13.755Z"},"bugs":{"url":"https://github.com/cyaxios/tn-proto/issues"},"license":"Apache-2.0","homepage":"https://github.com/cyaxios/tn-proto#readme","repository":{"type":"git","url":"git+https://github.com/cyaxios/tn-proto.git"},"description":"TN protocol SDK for TypeScript - attested logging with broadcast encryption. Wraps tn-wasm (Rust) with idiomatic types.","maintainers":[{"name":"cygms","email":"gil@cyaxios.com"}],"readme":"<!--\n[DOCUMENTATION-SPEC: LOCKED]\nThis README follows the tn-proto documentation guidelines.\nDO NOT simplify this document into generic summaries.\nDO NOT remove:\n  - The Shields.io badges or the ASCII architecture diagrams.\n  - The side-by-side TypeScript + Python quickstart examples (with output).\n  - The full CLI reference, the \"How log sharing works\" section, or the\n    \"AI coding agents - tn-skills\" section.\n  - The non-custodial vault section, including key recovery and how to disable it.\nMaintain a straightforward, developer-friendly voice. Avoid parameter-heavy explanations.\n-->\n\n# @cyaxios/tn-proto\n\n---\n\n[![npm](https://img.shields.io/npm/v/@cyaxios/tn-proto?style=flat-square&color=cb3837&label=npm)](https://www.npmjs.com/package/@cyaxios/tn-proto)\n[![Runtimes](https://img.shields.io/badge/runtimes-Node%20%7C%20Browser%20%7C%20WASM-3178c6.svg?style=flat-square)](#one-core-every-language)\n[![Also](https://img.shields.io/badge/also-Python-blue.svg?style=flat-square)](https://pypi.org/project/tn-proto/)\n[![Keys](https://img.shields.io/badge/keys-non--custodial%20vault-brightgreen.svg?style=flat-square)](#non-custodial-vault-backup)\n[![License](https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-green.svg?style=flat-square)](#license)\n\n**`@cyaxios/tn-proto` keeps every record readable only by the people you've authorized - and leaves cryptographic proof that it did.** Fields are encrypted per reader, so the wrong people simply can't decrypt them; each entry is signed by your device and hash-chained, so anyone can verify offline - from the log file alone - who was allowed to read what, and that nothing was altered after the fact.\n\n## Installation\n\n```bash\nnpm install @cyaxios/tn-proto\n```\n\nThe Rust core ships bundled in as WebAssembly: one install, no native toolchain, no separate package.\n\n## Quickstart\n\nThe first run mints a ceremony under `./.tn/` - nothing to configure.\n\n**TypeScript / Node**\n```ts\nimport { tn } from \"@cyaxios/tn-proto\";\n\nawait tn.init();\ntn.info(\"order.created\", { order_id: \"A100\", amount: 4999 });\ntn.warning(\"order.flagged\", { order_id: \"A100\", reason: \"hold\" });\n\nfor (const entry of tn.read()) console.log(entry.level, entry.event_type, entry.fields);\nawait tn.close();\n```\n```text\ninfo order.created { amount: 4999, order_id: 'A100' }\nwarning order.flagged { order_id: 'A100', reason: 'hold' }\n```\n\n`tn.read()` hands you back decrypted fields. The same entry **as written to disk** is sealed: your values are encrypted into the group, the row is signed and hash-chained.\n\n```json\n{\n  \"device_identity\": \"did:key:z6MkeWpUKjEJ8PNmJWT4X4kXudbcaJ3kWVkKZ21vBdksX3x5\",\n  \"event_type\": \"order.created\",\n  \"level\": \"info\",\n  \"sequence\": 1,\n  \"prev_hash\": \"sha256:0000000000000000000000000000000000000000000000000000000000000000\",\n  \"row_hash\": \"sha256:9ab903c5772710619b2b5a43b41b7ff0b13dd2651fafcb64b054232cd8022c3e\",\n  \"signature\": \"jvOHz3BfZwPx57eHwzXgUhhe8xlwkAZfFH5J7swZcrg1edWuBo0iyIdKNrMw7ggZ…\",\n  \"default\": {\n    \"ciphertext\": \"twEB/kT5M/D6sO4HPyjtmpkX6oCxc5SPm41fpXf/Ukbr9GMAAAAAAAEAFJ+sOaP…\",\n    \"field_hashes\": { \"amount\": \"hmac-sha256:v1:35e986d4e9152723…\" }\n  }\n}\n```\n\n`order_id` and `amount` appear nowhere in the clear: only the `ciphertext` sealed to the `default` group, plus equality-search hashes. Anyone without a reader key sees exactly this.\n\n**Python** - byte-identical records:\n```python\nimport tn\n\ntn.init()                                       # or tn.init(\"billing\") for a named project\ntn.info(\"order.created\", order_id=\"A100\", amount=4999)\nfor entry in tn.read():\n    print(entry.level, entry.event_type, entry.fields)\n```\n\nAlways `await tn.close()` on shutdown to flush handlers. Set `TN_NO_STDOUT=1` to silence the stdout echo of each entry.\n\n## What you get\n\nTN does two jobs at once: it keeps each record from reaching the wrong eyes, and it leaves a verifiable receipt that you kept it that way.\n\n**Control who can read what**\n- **Private by default** - field values are encrypted on disk. The wrong people don't get a redacted view; they get ciphertext they can't open.\n- **Per-reader** - one entry can be sealed for several named parties, each with their own key, so each sees only what they're authorized to.\n- **Revocable** - cut a reader off and the next entry is already beyond their reach; everyone else keeps reading, no rekeying.\n\n**Prove you did**\n- **Signed** - each entry carries an Ed25519 signature from the device that wrote it: who wrote it, provably.\n- **Tamper-evident** - entries are hash-chained, so altering, reordering, or deleting one fails verification.\n\nYou confirm all of it offline, from the log file and a public key alone - no server to trust, no vendor's word to take.\n\n## The verbs\n\n| Verb | What it does |\n|---|---|\n| `await tn.init()` | resolve or create a ceremony and bind the module runtime |\n| `await tn.use(\"name\")` | open or create a named ceremony and get its handle (`const t = await tn.use(\"billing\"); t.info(...)`); this is how you address a named project, and how you hold several at once |\n| `tn.info` / `.warning` / `.error` / `.debug` | one signed, encrypted entry at that level |\n| `tn.log(\"evt\", {...})` | emits regardless of the level threshold, so it always writes; reach for it when you need a level outside debug/info/warning/error |\n| `tn.read(opts?)` | iterate decoded `Entry` objects |\n| `tn.watch(opts?)` | async-iterate the log live |\n| `tn.export(opts, outPath)` / `tn.absorb(src)` | produce or install a `.tnpkg` bundle |\n| `tn.scope({...}, () => {…})` | layer request-context fields onto every entry inside the callback (metadata that rides along; this is not a group) |\n| `await tn.close()` | flush handlers and release the ceremony |\n\nEvery emit returns an `EmitReceipt` (`{ eventId, rowHash, sequence }`) acknowledging the write. The full signed, encrypted envelope is what lands in the log on disk (shown above); the receipt is the in-process acknowledgement, handy for correlating a write with a downstream action.\n\n### Reading: all entries, this run, admin\n\n```ts\nfor (const e of tn.read()) { /* default: every entry on disk (allRuns: true) */ }\nfor (const e of tn.read({ allRuns: false })) { /* only what THIS process emitted */ }\nfor (const e of tn.read({ log: \"admin\" })) {   // the admin log (ceremony lifecycle: tn.* events)\n  console.log(e.level, e.event_type);\n}\n```\n```text\ninfo tn.ceremony.init\ninfo tn.group.added\n```\n\n`tn.read({ verify: true })` re-checks every signature and the full hash chain as it reads, and throws the moment something doesn't add up. Pass `verify: \"skip\"` to drop invalid rows silently instead.\n\n## The CLI\n\nInstalling the package gives you a `tn-js` command. It's non-interactive by default - safe to drop straight into CI and containers.\n\n| Command | What it does |\n|---|---|\n| `tn-js init [name]` | provision identity + ceremony under `./.tn/` |\n| `tn-js read [--all-runs]` | decoded entries to stdout |\n| `tn-js info --event <type> [--field k=v]…` | emit one attested entry from the shell |\n| `tn-js add_recipient <group> <name>` | mint a reader kit for someone, wrapped as a `.tnpkg` |\n| `tn-js invite` | invite a reader (by email/label) |\n| `tn-js group` | add / inspect groups |\n| `tn-js rotate` | rotate group keys; emit one per-reader `.tnpkg` |\n| `tn-js absorb` / `tn-js import` | install a `.tnpkg` someone sent you |\n| `tn-js export` / `tn-js compile` / `tn-js bundle` | produce `.tnpkg` bundles from your keystore |\n| `tn-js wallet` | vault: `status`, `link`, `restore`, `sync` |\n| `tn-js account` / `tn-js vault` | manage the vault account / emit vault events |\n| `tn-js streams` | list ceremonies under `./.tn/` |\n| `tn-js validate` | validate the project's config tree |\n| `tn-js show env` / `tn-js show profiles` | reflective inspection (secrets redacted) |\n| `tn-js seal` / `tn-js verify` / `tn-js canonical` | attest / verify / canonicalize envelopes from stdin |\n\n```bash\ntn-js init                                   # provision in ./.tn/\ntn-js info --event order.created --field order_id=A100 --field amount=4999\ntn-js read --all-runs                        # include entries from prior runs\ntn-js watch ./tn.yaml | jq .                 # follow the log live\n```\n\n## How log sharing works\n\nYou never share a password or a private key. Access is cryptographic:\n\n- **Identity (DID).** Every device has its own identity - a public `did:key:z6Mk…` derived from its Ed25519 key. Private keys never leave the machine.\n- **Groups.** Events land in named groups (default: `default`); each group is its own encrypted domain with its own reader list. Readers of `payments` can decrypt `payments` events, and only those.\n- **Reader kits.** To let someone read a group, you mint a kit addressed to their DID and send it. They absorb it and can decrypt that group - and nothing else.\n- **Revocation.** Revoke a reader and future entries are encrypted to exclude them; every other reader keeps working, no rekeying.\n\nGrant access (TypeScript):\n```ts\nimport { tn } from \"@cyaxios/tn-proto\";\nawait tn.init();\nconst result = await tn.admin.addRecipient(\"default\", {\n  recipientDid: \"did:key:z6Mk…\",            // the reader's real Ed25519 DID\n  outPath: \"./alice.btn.mykit\",\n});\nconsole.log(result.leafIndex, result.kitPath);   // -> 1 ./alice.btn.mykit\n```\n\nOr one-shot from the CLI (mints the kit and wraps a `.tnpkg`):\n```bash\n$ tn-js add_recipient default alice\n[tn add_recipient] wrote /your/cwd/alice.tnpkg\n[tn add_recipient]   group:     default\n[tn add_recipient]   recipient: did:key:zLabel-alice\n```\n\nThe CLI synthesizes a friendly **label DID** (`did:key:zLabel-alice`) from the name so you can try sharing without copying real keys around; production readers are addressed by their own `did:key:z6Mk…`.\n\nRevoke when you need to:\n```ts\nawait tn.admin.revokeRecipient(\"default\", { leafIndex: 1 });\n```\n\n## Groups and field routing\n\nA **group** is an encrypted domain with its own reader list; **routing** a field into it means that field's value is sealed to that group's readers and to no one else. One command creates the group and routes fields in a single step:\n\n```bash\ntn-js group add payments --fields order_id,amount,card_last4    # creates the group + routes the fields\n```\n\nFrom then on, any `tn.info(...)` carrying `order_id`, `amount`, or `card_last4` seals those into `payments`; every other field stays in `default`. The same in-process, in one call:\n\n```ts\nawait tn.admin.ensureGroup(\"payments\", { fields: [\"order_id\", \"amount\", \"card_last4\"] });\n\ntn.info(\"order.created\", { order_id: \"A100\", amount: 4999, note: \"ship today\" });\n// order_id + amount  ->  sealed to 'payments'\n// note               ->  'default'\n```\n\nYou can also hand-edit the `groups:` and `fields:` blocks in `tn.yaml` (see [Configuration](#configuration-tnyaml)); the SDK picks up the change in the same process.\n\n## Bundles (`.tnpkg`)\n\nA `.tnpkg` is a signed zip with a manifest and body files - the unit everything is shared as. Produce one with `tn-js add_recipient` or `tn-js export`; absorb one programmatically:\n\n```ts\n// Reader: absorb merges it into your current ceremony (run tn.init() first).\nawait tn.init();\nconst receipt = await tn.absorb(\"./alice.tnpkg\");\nconsole.log(receipt.kind, receipt.acceptedCount, receipt.dedupedCount);   // -> kit_bundle 1 0\n```\n\nTo produce a recipient bundle in code: `await tn.export({ bundle: { recipientDid: \"did:key:z6Mk…\", outPath: \"./alice.tnpkg\" } }, \"./alice.tnpkg\")`.\n\n## Rotation\n\n`tn-js rotate` writes a new generation of group keys and emits one `.tnpkg` per surviving reader. Hand each reader their file (vault push, CI artifact, email); they run `tn-js absorb`. A revoked reader isn't in the new generation, so they keep old entries but can't read anything after the rotation.\n\n```bash\n$ tn-js rotate\n[tn rotate] rotated 1 group(s); emitted 1 .tnpkg artifact(s) into /your/cwd/rotated_20260612T194533Z\n             default: epoch=1\n             -> did_key_zLabel-alice.tnpkg\n```\n\n## Non-custodial vault backup\n\nYour keys live on your machine and nowhere else - so nobody, us included, can read your data. The optional vault at `vault.tn-proto.org` is the safety net for when that machine dies.\n\n```text\n    ┌────────────────────────────────────────────────────┐\n    │ vault.tn-proto.org                                 │\n    │ stores ciphertext it CANNOT decrypt:               │\n    │   - your encrypted group keys                      │\n    │   - your config (tn.yaml)                          │\n    └────────────────────────────────────────────────────┘\n                  ▲                       │\n    backup:       │                       │   restore:\n    keys + config │                       ▼   your mnemonic\n    ┌────────────────────────────────────────────────────┐\n    │ your machine                                       │\n    │ .tn/<project>/keys/   ->  backed up to the vault   │\n    │ .tn/<project>/logs/   ->  100% local, never sent   │\n    └────────────────────────────────────────────────────┘\n```\n\n- **Keys & config only.** Your `tn.yaml` and encrypted group keys are backed up. Your `.ndjson` log files are **100% local** and never uploaded.\n- **Zero-knowledge.** The vault holds ciphertext it cannot read; recovery is gated by a mnemonic phrase only you hold.\n\n### Your first init prints a claim link\n\nUnless you pass `--no-link`, the first `tn-js init` mints your device identity, pushes the encrypted keys + config, and prints a **claim link**:\n\n```text\n$ tn-js init demoproj\n[tn init] Ceremony local_a82b34ec created at ./.tn/demoproj/tn.yaml\n[tn init]   project: demoproj\n[tn init]   cipher: btn\n[tn init]   keystore: ./.tn/demoproj/keys\n\n[tn init] Backed up to https://vault.tn-proto.org\n[tn init]   vault_id:   01KTYX…                  # id of the pending backup\n[tn init]   expires:    2026-06-13 17:57          # the claim link is good for ~24h\n\n[tn init] CLAIM URL - open this in your browser to attach the project to your account:\n  https://vault.tn-proto.org/claim/01KTYX…#k=••••••••\n\n[tn init] Already have a vault account, or want to attach this project later?\n[tn init]   1. Sign in at https://vault.tn-proto.org/account\n[tn init]   2. On the Projects tab, mint a connect code\n[tn init]   3. Run:  tn-js account connect <code> --yaml ./.tn/demoproj/tn.yaml\n```\n\n(`tn-js init` also writes a final `{\"ok\":true,\"claim_url\":\"…\",…}` JSON line to stdout, for scripting.)\n\n**Open the claim link** and a vault page attaches this backup to your account (Google or passkey), so you can restore it on any machine later. Two parts of that URL matter:\n\n- `/claim/01KTYX…` points at the encrypted backup this `init` just pushed.\n- `#k=••••••••` is the **decryption key**, carried in the URL *fragment*. Browsers never send the fragment to the server, so the claim page decrypts in your browser and the vault still never sees your key. That is what keeps it zero-knowledge.\n\nTreat the whole link like a password: anyone holding it (fragment included) can claim that backup, and it stops working after the `expires:` time. Already have an account? Skip the link and use the sign-in + connect-code steps it prints.\n\n**Key recovery.** Sign in at <https://vault.tn-proto.org/account> (the dashboard also lets you invite readers by email and trigger rotations). To recover on a new machine:\n```bash\ntn-js wallet status          # is this machine linked, and to what\ntn-js wallet restore         # rebuild every ceremony's keystore from your recovery phrase\n```\n\n**Turn it off.** You are never tied to the vault:\n```bash\ntn-js init --no-link                       # fully offline; never contacts a vault\nexport TN_NO_LINK=1                         # same, as an environment switch\nexport TN_VAULT_URL=\"https://my-vault…\"     # or point at your own\n```\n\n## Profiles\n\nA profile is a named bundle of three independent guarantees - pick the trade-off, not the knobs:\n\n- **Encryption - always on.** Field values are encrypted into their groups in every profile. There is no plaintext mode; this is the floor.\n- **Signing** - an Ed25519 signature from the writing device on each entry, proving authorship. The evidence profiles keep it; the lightweight ones drop it for speed.\n- **Chaining (verification)** - the hash link from each entry to the one before it. This is what makes the log tamper-evident and ordered, and what `read({ verify: true })` checks. The evidence profiles keep it.\n\n```ts\nawait tn.init(undefined, { profile: \"audit\" });\n```\n\n| Profile | Encrypt | Sign | Chain | Use it for |\n|---|:---:|:---:|:---:|---|\n| `transaction` *(default)* | ✓ | ✓ | ✓ | grants, payments, agent actions, security events - full evidence |\n| `audit` | ✓ | ✓ | ✓ | normal business events; same evidence, buffered for throughput |\n| `secure_log` | ✓ | ✓ | - | signed app logs where authorship matters more than ordering |\n| `telemetry` | ✓ | - | - | high-volume traces / metrics; near-zero overhead, stdout |\n| `stdout` | ✓ | - | - | dev / notebook scratchpad, encryption still on |\n\n## Configuration (`tn.yaml`)\n\n`tn.yaml` is **generated by `tn-js init`**, and the CLI and SDK keep it in sync for you (`tn-js group add`, `tn.admin.ensureGroup`, the vault verbs all write it). **You normally never edit it by hand - reach for a verb instead.** It is plain YAML, so you *can* hand-edit it once you know the schema, but a malformed file can break loading or field routing, so treat that as an advanced path. It is shown here in full (comments are explanatory; the emitted file has none) so you can see what the tools manage:\n\n```yaml\nceremony:\n  id: local_f2bb8224             # ceremony identifier\n  mode: local                    # local | linked  (linked = backed by a vault)\n  linked_vault: ''               # vault URL; empty when offline\n  linked_project_id: ''          # vault-side project id; filled by `tn-js wallet link`\n  sync_logs: false               # also sync ndjson logs to the vault\n  cipher: btn                    # ceremony-wide cipher\n  sign: true                     # Ed25519-sign every row\n  admin_log_location: ./admin/default.ndjson   # tn.* admin events; read via tn.read({ log: \"admin\" })\n  log_level: debug               # debug | info | warning | error\n  profile: transaction           # evidence profile (see Profiles)\n  chain: true                    # maintain the per-event-type hash chain\n\n  project_name: demoproj         # human label; sent as X-Project-Name on vault push\n\nlogs:\n  path: ./logs/default.ndjson    # main user-log ndjson destination\n\nkeystore:\n  path: ./keys                   # holds local.private, *.btn.state, etc.\n\ndevice:\n  device_identity: did:key:z6Mk…   # this machine's DID\n\nhandlers:                        # output sinks; replaces the implicit default\n  - kind: file.rotating\n    name: main\n    path: ./logs/default.ndjson\n    max_bytes: 5242880\n    backup_count: 5\n  - kind: stdout\n\npublic_fields:                   # fields always written in the clear (additive to defaults)\n  - timestamp\n  - event_id\n  - event_type\n  - level\n\ndefault_policy: private          # policy for fields not routed to any group\n\ngroups:\n  default:\n    policy: private\n    cipher: btn\n    recipients:\n      - recipient_identity: did:key:z6Mk…        # you\n  payments:                                       # a group you added\n    policy: private\n    cipher: btn\n    fields: [order_id, amount, card_last4]        # route these fields into 'payments'\n    recipients:\n      - recipient_identity: did:key:z6Mk…         # who may read 'payments'\n  tn.agents:                     # reserved protocol group, auto-injected for agent policy\n    policy: private\n    cipher: btn\n    fields: [instruction, use_for, do_not_use_for, consequences, on_violation_or_error, policy]\n    recipients:\n      - recipient_identity: did:key:z6Mk…\n\nfields: {}                       # field-routing overrides; groups carry their own\n\nllm_classifier:                  # optional auto-classification of fields into groups\n  enabled: false\n  provider: ''\n  model: ''\n```\n\nA single `tn.info(...)` can fan one event into several groups, each encrypted to that group's readers only. Log and admin paths also accept **templated paths** (`{event_class}`, `{date}`, `{event_id}`, …) so events sort themselves on disk.\n\n> **Every `tn.yaml` field - groups, field routing, ciphers, handlers, profiles, ceremony/link state - is documented in the [`tn.yaml` reference](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/yaml-reference.md).**\n\n## Scoped lifecycle\n\nFor tests and short-lived processes that shouldn't leave a `./.tn/` behind, `tn.session()` mints a fresh ceremony in a private tempdir that is removed on `close()`:\n```ts\nconst s = await tn.session();\ns.info(\"order.created\", { order_id: \"A100\" });\nawait s.close();              // tempdir removed; nothing left under ./.tn/\n```\n\nLayer contextual fields onto everything logged inside a block with `tn.scope`:\n```ts\ntn.scope({ request_id: \"r-42\" }, () => {\n  tn.info(\"order.created\", { order_id: \"A100\" });   // request_id rides along\n});\n```\n\nFor long-running services, call `await tn.init()` once at startup and `await tn.close()` on shutdown.\n\n## Containers & CI\n\nNo home directory, no baking keys into an image. Set one secret - `TN_API_KEY` - and the container trades it with the vault for its keystore on first boot, then runs normally. If a keystore already exists on disk, that wins and the env var is ignored. Full guide: [running in containers and CI](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/deploy-containers.md).\n\n## Environment variables\n\nEverything has a sensible default; these override it. `tn-js show env` prints the full canonical surface (secrets redacted).\n\n| Variable | What it does |\n|---|---|\n| `TN_API_KEY` | Container/CI bootstrap: traded with the vault for this project's keystore on first boot. Ignored when a local keystore already exists. |\n| `TN_NO_LINK=1` | Never auto-link a fresh ceremony to a vault - fully offline. |\n| `TN_VAULT_URL` | Base URL of the vault to use. Default: `https://vault.tn-proto.org`. |\n| `TN_NO_STDOUT=1` | Silence the stdout echo of each entry. |\n| `TN_IDENTITY_DIR` | Directory holding your `identity.json`. Default: the OS data dir (`~/.local/share/tn`, `%APPDATA%\\tn`). |\n| `TN_YAML` | Explicit path to `tn.yaml` for init / discovery. |\n| `TN_HOME` | Root for shared TN state. Default: `~/.tn`. |\n| `TN_STRICT=1` | Disable ceremony auto-discovery; `init()` must be given an explicit project. |\n\n## AI coding agents - tn-skills\n\n[`tn-skills`](https://github.com/cyaxios/tn-skills) teaches your AI coding agent to use TN correctly. With it installed, the agent routes PII into the right encrypted group, calls `tn.init` once at startup (not inside a request handler), never logs a secret like a CVV, and cites the right regulation when a file's domain matches one of its built-in industry kits - so agent-written code doesn't quietly tell the wrong thing to the wrong people.\n\nInstall it in Claude Code:\n```text\n/plugin marketplace add cyaxios/tn-skills\n/plugin install tn-logging@tn-skills\n```\n\nFor other AI tools, drop the repo's `AGENTS.md` into your agent. The bundled skills and industry kits are documented at <https://github.com/cyaxios/tn-skills>.\n\n## One core, every language\n\nThe wire format is identical across Node, Python, and the browser, checked on every change - write in one, read in another.\n\n| Runtime | Install |\n|---|---|\n| Node / TypeScript | `npm install @cyaxios/tn-proto` |\n| Python | `pip install tn-proto` |\n| Browser | the `@cyaxios/tn-proto/core` subpath (no Node deps) |\n\n## Troubleshooting\n\n| Symptom | Likely cause |\n|---|---|\n| `tn.read()` shows entries from previous runs | the default is `allRuns: true`; pass `{ allRuns: false }` to scope to this run |\n| `tn.watch()` shows no `tn.*` events | by design - pass `{ log: \"admin\" }` for ceremony events |\n| `tn.usingRust()` is `false` | the WASM core attaches lazily on the first emit; check after emitting |\n| `no ceremony found` on `tn.absorb` | absorb merges into an existing ceremony; run `tn.init()` first |\n\n## Documentation\n\n- [Getting started](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/getting-started.md) · [TypeScript cookbook](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/cookbook-typescript.md) · [Python cookbook](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/cookbook-python.md)\n- [Groups, readers, bundles, rotation](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/groups-readers-rotation.md) · [Running in containers and CI](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/deploy-containers.md)\n- [Profiles](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/profiles.md) · [tn.yaml reference](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/yaml-reference.md) · [protocol spec](https://github.com/cyaxios/tn-proto/blob/main/docs/guide/protocol.md)\n\n## License\n\nDual-licensed under the MIT License or the Apache License, Version 2.0.\n","readmeFilename":"README.md"}