@fased/fased 0.1.62 → 0.1.65
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/CHANGELOG.md +48 -0
- package/README.md +44 -29
- package/config/dependency-ownership.json +1 -1
- package/config/signer-policies/README.md +58 -0
- package/config/signer-policies/agent.json.template +32 -0
- package/config/signer-policies/mining.json.template +69 -0
- package/config/signer-policies/network.json.template +5 -0
- package/config/signer-policies/vault.json.template +70 -0
- package/config/signer-protocol-v2.json +78 -0
- package/config/typescript-noemit-baseline.json +680 -0
- package/dist/agents/auth-profiles/store.js +267 -31
- package/dist/agents/bash-tools.exec.js +10 -4
- package/dist/agents/current-model-catalog.js +3 -3
- package/dist/agents/memory-search.js +7 -1
- package/dist/agents/model-catalog-access.js +1 -2
- package/dist/agents/model-catalog-snapshot.js +1 -1
- package/dist/agents/model-catalog-source.js +1 -1
- package/dist/agents/model-metadata.js +1 -1
- package/dist/agents/model-selection.js +2 -28
- package/dist/agents/models-config.providers.js +6 -6
- package/dist/agents/pi-embedded-runner/compact.js +15 -7
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/pi-embedded-runner/run/attempt.js +24 -13
- package/dist/agents/pi-embedded-runner/run.js +2 -0
- package/dist/agents/pi-embedded-runner/tool-split.js +40 -2
- package/dist/agents/pi-tool-definition-adapter.js +16 -1
- package/dist/agents/pi-tools.js +2 -1
- package/dist/agents/sandbox/config.js +1 -1
- package/dist/agents/sandbox/context.js +27 -2
- package/dist/agents/skills/env-overrides.js +38 -28
- package/dist/agents/skills/trust.js +93 -0
- package/dist/agents/skills/workspace.js +128 -0
- package/dist/agents/skills-clawhub.js +36 -11
- package/dist/agents/skills-marketplace-scan.js +49 -0
- package/dist/agents/tools/marketplace-offer-draft-tool.js +1 -1
- package/dist/agents/tools/mining-tool.js +1 -1
- package/dist/agents/tools/session-status-tool.js +1 -1
- package/dist/agents/tools/wallet-action-tool.js +172 -36
- package/dist/agents/tools/wallet-skill-policy.js +65 -23
- package/dist/agents/tools/wallet-tool.js +7 -11
- package/dist/auto-reply/reply/directive-handling.fast-lane.js +2 -1
- package/dist/auto-reply/reply/directive-handling.impl.js +2 -1
- package/dist/auto-reply/reply/directive-handling.model.js +2 -1
- package/dist/auto-reply/reply/directive-handling.persist.js +2 -2
- package/dist/auto-reply/reply/get-reply-directives-apply.js +2 -0
- package/dist/auto-reply/reply/get-reply-inline-actions.js +25 -1
- package/dist/auto-reply/reply/model-selection.js +7 -4
- package/dist/auto-reply/reply/session-reset-model.js +4 -4
- package/dist/brand.js +1 -1
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/channel-web.js +2 -2
- package/dist/cli/gateway-cli/run.js +8 -0
- package/dist/cli/program/command-registry.js +1 -1
- package/dist/cli/program/register.onboard.js +2 -3
- package/dist/cli/program/register.wallet.js +16 -123
- package/dist/cli/providers-cli.js +1 -1
- package/dist/cli/sat-cli.js +129 -2
- package/dist/cli/update-cli/update-command.js +260 -11
- package/dist/commands/auth-choice.apply.api-providers.js +3 -3
- package/dist/commands/doctor-config-flow.js +1 -1
- package/dist/commands/doctor-legacy-config.js +2 -13
- package/dist/commands/model-picker.js +6 -6
- package/dist/commands/models/auth.js +1 -1
- package/dist/commands/onboard-auth.config-gateways.js +1 -1
- package/dist/commands/onboard-auth.credentials.js +32 -8
- package/dist/commands/onboard-non-interactive/local/wallet-config.js +28 -27
- package/dist/commands/onboard-non-interactive/local.js +5 -1
- package/dist/commands/wallet.js +568 -1911
- package/dist/config/config.js +2 -2
- package/dist/config/io.js +64 -2
- package/dist/config/schema.help.js +8 -7
- package/dist/config/schema.labels.js +5 -4
- package/dist/config/zod-schema.agent-runtime.js +1 -0
- package/dist/config/zod-schema.js +5 -0
- package/dist/control-ui/assets/{app-DLil9VO1.js → app-MaQnPa5G.js} +1511 -1555
- package/dist/control-ui/assets/{config-CU5Zi8Dh.js → config-LeImukCW.js} +10 -10
- package/dist/control-ui/assets/{federation-D10Q4eP_.js → federation-DgA9e-Pn.js} +364 -422
- package/dist/control-ui/assets/{index-DdE_NIXo.js → index-D4YMr1fA.js} +3 -3
- package/dist/control-ui/assets/mining-commit-DFpB_4JN.js +2 -0
- package/dist/control-ui/assets/{mining-BdhMn18r.js → mining-qMYs4aD-.js} +70 -50
- package/dist/control-ui/assets/{open-external-url-DwSiwMPl.js → open-external-url-ulF1B-sA.js} +3 -3
- package/dist/control-ui/assets/{providers-QMn4w2_f.js → providers-CIx9fxc6.js} +2 -2
- package/dist/control-ui/assets/{wallet-C2g294QT.js → wallet-DvStR_AT.js} +259 -377
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- package/dist/daemon/systemd-system.js +56 -50
- package/dist/extensions/sat-mining/src/protocol-contract.js +43 -3
- package/dist/extensions/sat-mining/src/rpc-read.js +291 -84
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +5 -2
- package/dist/extensions/sat-mining/src/signer-codec-manifest.js +406 -0
- package/dist/extensions/sat-mining/src/solana-submit.js +1274 -390
- package/dist/extensions/sat-mining/src/submission-ledger.js +349 -0
- package/dist/federation/auto-connect.js +98 -8
- package/dist/federation/marketplace-capability-adapter.js +33 -7
- package/dist/federation/marketplace-delivery-outbox.js +196 -0
- package/dist/federation/marketplace-delivery.js +351 -215
- package/dist/federation/marketplace-direct-payment.js +272 -141
- package/dist/federation/marketplace-escrow.js +607 -249
- package/dist/federation/marketplace-settlement-ledger.js +352 -0
- package/dist/federation/offers.js +9 -7
- package/dist/federation/peer-auth-v2.js +529 -0
- package/dist/gateway/a2a-http.js +425 -96
- package/dist/gateway/a2a-settlement.js +259 -153
- package/dist/gateway/a2a-task-store.js +524 -0
- package/dist/gateway/auth.js +38 -2
- package/dist/gateway/config-reload.js +46 -33
- package/dist/gateway/durable-capacity.js +31 -0
- package/dist/gateway/federation-http.js +540 -135
- package/dist/gateway/federation-marketplace-run-store.js +397 -0
- package/dist/gateway/federation-marketplace.js +535 -230
- package/dist/gateway/mutating-admin-rpc-rate-limit.js +5 -0
- package/dist/gateway/security-path.js +1 -1
- package/dist/gateway/server-http.js +1084 -1205
- package/dist/gateway/server-methods/models.js +1 -1
- package/dist/gateway/server-methods/secrets.js +40 -0
- package/dist/gateway/server-methods.js +1 -2
- package/dist/gateway/server-reload-handlers.js +196 -66
- package/dist/gateway/server-runtime-config.js +1 -1
- package/dist/gateway/server-secrets-runtime.js +288 -0
- package/dist/gateway/server.impl.js +73 -42
- package/dist/gateway/sessions-patch.js +3 -5
- package/dist/index.js +4 -2
- package/dist/infra/fasedhub.js +64 -1
- package/dist/infra/local-source-paired-update.js +538 -0
- package/dist/infra/restart.js +41 -10
- package/dist/infra/update-runner.js +96 -0
- package/dist/light-update-status.js +11 -11
- package/dist/memory/backend-config.js +2 -1
- package/dist/memory/session-files.js +16 -2
- package/dist/plugin-sdk/{accounts-DxblobYM.js → accounts-Brn3-uWN.js} +1 -1
- package/dist/plugin-sdk/{actions-D4UNimWa.js → actions-DRu135h0.js} +2 -2
- package/dist/plugin-sdk/{active-listener-CFuy106s.js → active-listener-B_NMtgPL.js} +1 -1
- package/dist/plugin-sdk/{audio-preflight-Bwi2Oq03.js → audio-preflight-I4IngVlJ.js} +27 -27
- package/dist/plugin-sdk/{audit-Cs0K7LBp.js → audit-C5d2z5U1.js} +1 -1
- package/dist/plugin-sdk/{channel-access-D5aHoTY8.js → channel-access-CcFRdRPO.js} +1 -1
- package/dist/plugin-sdk/{channel-access-configure-Dvch9mMQ.js → channel-access-configure-DaI5wevh.js} +1 -1
- package/dist/plugin-sdk/channel-plugin-common.d.ts +3 -3
- package/dist/plugin-sdk/channel-plugin-common.js +4 -4
- package/dist/plugin-sdk/{chunk-B0FUGc5A.js → chunk-CyoyqpbG.js} +1 -1
- package/dist/plugin-sdk/{chunk-items-DzT4L4Ty.js → chunk-items-DLQ6_lLK.js} +1 -1
- package/dist/plugin-sdk/command-status.d.ts +2 -2
- package/dist/plugin-sdk/command-status.js +27 -27
- package/dist/plugin-sdk/{commands-registry-DmDRhRAU.js → commands-registry-BfqdEWdF.js} +2 -2
- package/dist/plugin-sdk/{common-CfUOowOp.js → common-HCcXU-NR.js} +1 -1
- package/dist/plugin-sdk/{config-mxULv0fQ.js → config-DlWVeLFB.js} +7113 -6877
- package/dist/plugin-sdk/{config-schema-BrkmtFxB.js → config-schema-D_8FVI1C.js} +6798 -3695
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +6 -6
- package/dist/plugin-sdk/discord.js +19 -19
- package/dist/plugin-sdk/file-lock.js +35 -4
- package/dist/plugin-sdk/{filesystem-manager-ZoHU8oA7.js → filesystem-manager-DoI8IBNF.js} +1 -1
- package/dist/plugin-sdk/{group-mentions-BHRff6j8.d.ts → group-mentions-q3hUTCt7.d.ts} +1 -1
- package/dist/plugin-sdk/{handle-action-DbVCF9HZ.js → handle-action-hvwapMKg.js} +13 -13
- package/dist/plugin-sdk/{helpers-BXbdgs5H.js → helpers-DMBU4oTo.js} +1 -1
- package/dist/plugin-sdk/{image-ops-D7jPxaph.js → image-ops-DQi0n_Tt.js} +1 -1
- package/dist/plugin-sdk/index.d.ts +21 -39
- package/dist/plugin-sdk/index.js +29 -29
- package/dist/plugin-sdk/{login-BRxww6nv.js → login-Ca583Okc.js} +3 -3
- package/dist/plugin-sdk/{login-qr-DJXsk9XH.js → login-qr-CGciBSNP.js} +3 -3
- package/dist/plugin-sdk/{manager-Y2S_5IlI.js → manager-BegWxNYX.js} +4 -4
- package/dist/plugin-sdk/{markdown-tables-DHLFQqaF.js → markdown-tables-DCOXEUfZ.js} +1 -1
- package/dist/plugin-sdk/{media-Czo4carg.js → media-CAdQF5TG.js} +47 -47
- package/dist/plugin-sdk/{memory-search-DTjIMw8J.js → memory-search-CrFPOeTH.js} +4 -1
- package/dist/plugin-sdk/{monitor-M_ta2lMc.js → monitor-B4KF4Kpo.js} +31 -31
- package/dist/plugin-sdk/{monitor-wYVncM9w.js → monitor-Bb6x1KAG.js} +32 -32
- package/dist/plugin-sdk/{openresponses-http-B2GmeSt4.js → openresponses-http-DCTO8JkL.js} +27 -27
- package/dist/plugin-sdk/{optional-runtime-dependency-DdMbxS24.js → optional-runtime-dependency-0dznm3ZO.js} +1 -1
- package/dist/plugin-sdk/{outbound-Db8mRN6P.js → outbound-BgVDdHxx.js} +6 -6
- package/dist/plugin-sdk/{outbound-attachment-BqFjcypb.js → outbound-attachment-QqTnIhZL.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-B3GC_7CD.js → pairing-message-D0CoLHRJ.js} +1 -1
- package/dist/plugin-sdk/{pairing-message-B3bHYGaw.d.ts → pairing-message-DHPDFZbC.d.ts} +2 -2
- package/dist/plugin-sdk/{pairing-store-CQikgIbw.js → pairing-store-BChahgI2.js} +2 -2
- package/dist/plugin-sdk/{pi-model-discovery-CY3m5zJP.js → pi-model-discovery-BX_JLcEJ.js} +1 -1
- package/dist/plugin-sdk/{pi-model-discovery-runtime-DSh1T2pn.js → pi-model-discovery-runtime-DxTMz_XF.js} +2 -2
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +2 -2
- package/dist/plugin-sdk/{pw-ai-AFUqn-tQ.js → pw-ai-natjh3rm.js} +3 -3
- package/dist/plugin-sdk/{qmd-manager-DSyx77KY.js → qmd-manager-CgRaTxUq.js} +1 -1
- package/dist/plugin-sdk/{query-expansion-CAI2kKLQ.js → query-expansion-BG3FgzF7.js} +14 -3
- package/dist/plugin-sdk/{replies-Fzh9PhXl.js → replies-ChYo5ZQM.js} +2 -2
- package/dist/plugin-sdk/{resolve-outbound-target-KpF3co6T.js → resolve-outbound-target-D-KGgHJZ.js} +1 -1
- package/dist/plugin-sdk/{resolve-route-CDl74O19.js → resolve-route-C8tvQm8Z.js} +1 -1
- package/dist/plugin-sdk/{retry-policy-D4uiqUOG.js → retry-policy-C6SjKjQA.js} +1 -1
- package/dist/plugin-sdk/{runtime-Bb6KRnCC.js → runtime-2B9_WKoI.js} +8 -3
- package/dist/plugin-sdk/{runtime-dependency-DLDmB94f.js → runtime-dependency-DczkvPxn.js} +2 -2
- package/dist/plugin-sdk/sat-runtime.d.ts +565 -309
- package/dist/plugin-sdk/sat-runtime.js +29 -29
- package/dist/plugin-sdk/{send-C4k4JuJN.js → send-B6KkGKZD.js} +6 -6
- package/dist/plugin-sdk/{send-D-uDKGIq.js → send-CFzGKJXo.js} +6 -6
- package/dist/plugin-sdk/{send-Du8ykP1k.js → send-DCO441U7.js} +8 -8
- package/dist/plugin-sdk/{send-5nFktR1n.js → send-gDoGA-7e.js} +5 -5
- package/dist/plugin-sdk/{send-Bfzf11VY.js → send-q9HXrSwK.js} +7 -7
- package/dist/plugin-sdk/{session-CS-Td9EM.js → session-DHD4ZKyG.js} +2 -2
- package/dist/plugin-sdk/{skill-commands-CFAlXWHk.js → skill-commands-FKEPLS7T.js} +201 -26
- package/dist/plugin-sdk/{slack-CxE1mfzj.js → slack-BHmvqgjH.js} +39 -39
- package/dist/plugin-sdk/{slack-actions-BcMkNv1Z.js → slack-actions-DhbMcp8M.js} +11 -11
- package/dist/plugin-sdk/slack.d.ts +6 -6
- package/dist/plugin-sdk/slack.js +9 -9
- package/dist/plugin-sdk/{sticker-cache-CGzGWu00.js → sticker-cache-By5AcorL.js} +3 -3
- package/dist/plugin-sdk/{tables-bFXyRpkx.js → tables-B3jr0Pvq.js} +1 -1
- package/dist/plugin-sdk/{targets-DH7a9lKB.js → targets-CtSbTxYX.js} +1 -1
- package/dist/plugin-sdk/{telegram-actions-DaEcYQ8r.js → telegram-actions-DGnBz1YT.js} +30 -30
- package/dist/plugin-sdk/telegram.d.ts +6 -6
- package/dist/plugin-sdk/telegram.js +8 -8
- package/dist/plugin-sdk/{thread-bindings.lifecycle-CgOvvdw8.js → thread-bindings.lifecycle-QbkNl-m6.js} +3 -3
- package/dist/plugin-sdk/{thread-bindings.state-CQpk44Hq.js → thread-bindings.state-D9hg_M1c.js} +2 -2
- package/dist/plugin-sdk/tmp-fased-dir-EJGTmL1Q.d.ts +486 -0
- package/dist/plugin-sdk/{types-vcJrC_uv.d.ts → types-BdwdFCD6.d.ts} +2 -3
- package/dist/plugin-sdk/{types-DFAW-n1J.d.ts → types-BrCpYMxn.d.ts} +2 -2
- package/dist/plugin-sdk/{types-DyhXnYUr.d.ts → types-D0kDG8l0.d.ts} +3 -2
- package/dist/plugin-sdk/{types.plugin-_fbu40Re.d.ts → types.plugin-BcSBq42x.d.ts} +8 -3
- package/dist/plugin-sdk/{web-CInY-lCv.js → web-DUJwrTYs.js} +32 -32
- package/dist/plugin-sdk/{whatsapp-actions-BtSc2CBv.js → whatsapp-actions-Bj_rOncr.js} +13 -13
- package/dist/plugin-sdk/{whatsapp-heartbeat-Bg9TuYzl.js → whatsapp-heartbeat-B1WHkJIg.js} +2 -2
- package/dist/plugin-sdk/whatsapp.d.ts +13 -13
- package/dist/plugin-sdk/whatsapp.js +12 -12
- package/dist/plugin-sdk/{wsl-C4DGFkOd.js → wsl-J-HscWxS.js} +3 -3
- package/dist/plugin-sdk/{zod-schema.providers-core-BEbNizPe.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +61 -61
- package/dist/providers/refresh.js +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/secrets/apply.js +1 -1
- package/dist/secrets/runtime.js +1 -1
- package/dist/wallet/external-submission-ledger.js +376 -0
- package/dist/wallet/legacy-embedded-keystore.js +40 -0
- package/dist/wallet/local-socket-signer-archive.js +30 -0
- package/dist/wallet/local-socket-signer-lifecycle.js +97 -0
- package/dist/wallet/local-socket-signer-policy.js +166 -0
- package/dist/wallet/local-socket-signer-protocol.js +578 -117
- package/dist/wallet/native-signer-wallet-id.js +25 -0
- package/dist/wallet/providers/alchemy-adapter.js +3 -0
- package/dist/wallet/providers/local-socket-signer-adapter.js +380 -105
- package/dist/wallet/providers/turnkey-adapter.js +292 -34
- package/dist/wallet/providers/wallet-standard-adapter.js +100 -0
- package/dist/wallet/signer-network-admin.js +184 -0
- package/dist/wallet/signer-protocol-v2.generated.js +92 -0
- package/dist/wallet/solana-bond-signing.js +157 -69
- package/dist/wallet/solana-reviewed-transaction.js +375 -0
- package/dist/wallet/solana-swap.js +520 -64
- package/dist/wallet/solana-transaction-inspection.js +106 -4
- package/dist/wallet/solana-trigger.js +658 -320
- package/dist/wallet/turnkey-reviewed-state.js +370 -0
- package/dist/wallet/wallet-approval-auth.js +17 -28
- package/dist/wallet/wallet-atomic-state.js +53 -0
- package/dist/wallet/wallet-canary.js +0 -1
- package/dist/wallet/wallet-inbound-events.js +16 -11
- package/dist/wallet/wallet-policy-simulation.js +1 -1
- package/dist/wallet/wallet-policy.js +93 -37
- package/dist/wallet/wallet-provider-capabilities.js +28 -4
- package/dist/wallet/wallet-provider-registry.js +57 -44
- package/dist/wallet/wallet-provider-resolver.js +62 -63
- package/dist/wallet/wallet-runtime-config.js +28 -41
- package/dist/wallet/wallet-secrets-store.js +22 -0
- package/dist/wallet/wallet-send-approvals.js +1891 -589
- package/dist/wallet/wallet-send-execution-ledger.js +292 -0
- package/dist/wallet/wallet-settlement-links.js +14 -13
- package/dist/wallet/wallet-standard-review.js +353 -0
- package/dist/wallet/wallet-status.js +0 -9
- package/dist/wallet/wallet-task-ledger.js +16 -2
- package/dist/web/auto-reply/heartbeat-runner.js +1 -1
- package/dist/web/auto-reply/monitor.js +2 -2
- package/dist/wizard/host-security-capability.js +14 -23
- package/dist/wizard/onboarding.finalize.js +63 -184
- package/dist/wizard/onboarding.host-security.js +117 -1367
- package/dist/wizard/onboarding.js +172 -217
- package/dist/wizard/onboarding.wallet.js +232 -785
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +18 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +18 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +18 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/index.ts +587 -154
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/sat-mining/signer-codec-schema.v1.json +374 -0
- package/extensions/sat-mining/src/audit-store.ts +91 -5
- package/extensions/sat-mining/src/claim-service.ts +85 -14
- package/extensions/sat-mining/src/client.ts +13 -0
- package/extensions/sat-mining/src/config.ts +9 -0
- package/extensions/sat-mining/src/cycle-progress.ts +16 -8
- package/extensions/sat-mining/src/epoch-service.ts +9 -5
- package/extensions/sat-mining/src/gateway-runner.ts +21 -1
- package/extensions/sat-mining/src/protocol-contract.ts +45 -1
- package/extensions/sat-mining/src/recovery-service.ts +312 -0
- package/extensions/sat-mining/src/round-watcher.ts +391 -81
- package/extensions/sat-mining/src/rpc-read.ts +431 -106
- package/extensions/sat-mining/src/runtime.ts +16 -0
- package/extensions/sat-mining/src/sat-bond-layout.ts +6 -0
- package/extensions/sat-mining/src/signer-codec-manifest.ts +429 -0
- package/extensions/sat-mining/src/solana-submit.ts +1544 -436
- package/extensions/sat-mining/src/submission-ledger.ts +434 -0
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +18 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +18 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +18 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +18 -0
- package/extensions/zalouser/package.json +1 -1
- package/install.sh +4951 -0
- package/package.json +23 -5
- package/scripts/fased-host-updater.mjs +1421 -0
- package/scripts/fased-host-updaterctl.mjs +186 -0
- package/scripts/fased-managed-service.sh +36 -0
- package/scripts/fased-managed-updater.mjs +3065 -156
- package/scripts/fased-signer-enroll-hosting.sh +275 -0
- package/scripts/fased-signer-network-hosting.sh +143 -0
- package/scripts/fased-signer-owner-policy.mjs +1442 -0
- package/scripts/fased-signer-policy-hosting.sh +50 -0
- package/scripts/fased-signer-policy-local.sh +26 -0
- package/scripts/hosted-release-manifest.mjs +185 -0
- package/scripts/install-fased-signerd.sh +183 -108
- package/scripts/install-managed-runtime.mjs +212 -10
- package/scripts/managed-runtime-layout.mjs +75 -3
- package/scripts/migrate-hosted-signer-v2.mjs +58 -0
- package/scripts/start-managed.sh +173 -360
- package/dist/control-ui/assets/mining-commit-R-6nu87p.js +0 -2
- package/dist/plugin-sdk/tmp-fased-dir-CS6zsYEE.d.ts +0 -77
- package/dist/wallet/local-socket-signer-broker.js +0 -224
- package/dist/wallet/local-socket-signer-custody.js +0 -42
- package/dist/wallet/providers/embedded-keystore-adapter.js +0 -402
- package/dist/wallet/providers/privy-adapter.js +0 -80
- package/dist/wallet/wallet-custody.js +0 -1836
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveStateDir, withFileLock, type FileLockOptions } from "fased/plugin-sdk/sat-runtime";
|
|
5
|
+
|
|
6
|
+
export type SatSubmissionSignerState =
|
|
7
|
+
| "prepared"
|
|
8
|
+
| "reserved"
|
|
9
|
+
| "broadcast"
|
|
10
|
+
| "confirmed"
|
|
11
|
+
| "failed"
|
|
12
|
+
| "unknown";
|
|
13
|
+
|
|
14
|
+
export type SatSubmissionLease = {
|
|
15
|
+
owner: string;
|
|
16
|
+
pid: number;
|
|
17
|
+
acquiredAt: string;
|
|
18
|
+
expiresAt: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type SatSubmissionRecord = {
|
|
22
|
+
requestId: string;
|
|
23
|
+
workflowId: string;
|
|
24
|
+
operationKey: string;
|
|
25
|
+
intentDigest: string;
|
|
26
|
+
walletId: string;
|
|
27
|
+
action: string;
|
|
28
|
+
state: SatSubmissionSignerState;
|
|
29
|
+
signature?: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
attempts: number;
|
|
32
|
+
createdAt: string;
|
|
33
|
+
updatedAt: string;
|
|
34
|
+
lease?: SatSubmissionLease;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type SatSubmissionLedgerFile = {
|
|
38
|
+
version: 1;
|
|
39
|
+
records: Record<string, SatSubmissionRecord>;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type SatSubmissionClaim = {
|
|
43
|
+
record: SatSubmissionRecord;
|
|
44
|
+
created: boolean;
|
|
45
|
+
claimed: boolean;
|
|
46
|
+
owner: string;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const DEFAULT_LOCK_OPTIONS: FileLockOptions = {
|
|
50
|
+
retries: {
|
|
51
|
+
retries: 120,
|
|
52
|
+
factor: 1.15,
|
|
53
|
+
minTimeout: 10,
|
|
54
|
+
maxTimeout: 100,
|
|
55
|
+
randomize: true,
|
|
56
|
+
},
|
|
57
|
+
stale: 120_000,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const localLedgerWriteChains = new Map<string, Promise<void>>();
|
|
61
|
+
|
|
62
|
+
async function withSatSubmissionLedgerLock<T>(
|
|
63
|
+
filePath: string,
|
|
64
|
+
task: () => Promise<T>,
|
|
65
|
+
): Promise<T> {
|
|
66
|
+
const previous = localLedgerWriteChains.get(filePath) ?? Promise.resolve();
|
|
67
|
+
let releaseLocal!: () => void;
|
|
68
|
+
const localGate = new Promise<void>((resolve) => {
|
|
69
|
+
releaseLocal = resolve;
|
|
70
|
+
});
|
|
71
|
+
const current = previous.catch(() => undefined).then(async () => await localGate);
|
|
72
|
+
localLedgerWriteChains.set(filePath, current);
|
|
73
|
+
await previous.catch(() => undefined);
|
|
74
|
+
try {
|
|
75
|
+
return await withFileLock(filePath, DEFAULT_LOCK_OPTIONS, task);
|
|
76
|
+
} finally {
|
|
77
|
+
releaseLocal();
|
|
78
|
+
void current.finally(() => {
|
|
79
|
+
if (localLedgerWriteChains.get(filePath) === current) {
|
|
80
|
+
localLedgerWriteChains.delete(filePath);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function sha256(value: string): string {
|
|
87
|
+
return createHash("sha256").update(value).digest("hex");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function canonicalize(value: unknown): unknown {
|
|
91
|
+
if (Array.isArray(value)) {
|
|
92
|
+
return value.map((entry) => canonicalize(entry));
|
|
93
|
+
}
|
|
94
|
+
if (value && typeof value === "object") {
|
|
95
|
+
return Object.fromEntries(
|
|
96
|
+
Object.entries(value as Record<string, unknown>)
|
|
97
|
+
.filter(([, entry]) => entry !== undefined)
|
|
98
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
99
|
+
.map(([key, entry]) => [key, canonicalize(entry)]),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
if (typeof value === "bigint") {
|
|
103
|
+
return value.toString();
|
|
104
|
+
}
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function digestSatSubmissionIntent(value: unknown): string {
|
|
109
|
+
return `sha256:${sha256(JSON.stringify(canonicalize(value)))}`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function buildSatSubmissionOperationKey(intent: {
|
|
113
|
+
action?: unknown;
|
|
114
|
+
keys?: unknown;
|
|
115
|
+
instructions?: unknown;
|
|
116
|
+
lookupTable?: unknown;
|
|
117
|
+
}): string {
|
|
118
|
+
const action =
|
|
119
|
+
typeof intent.action === "string" && intent.action.trim() ? intent.action.trim() : "sat";
|
|
120
|
+
const accountShape = Array.isArray(intent.instructions)
|
|
121
|
+
? intent.instructions.map((instruction) => {
|
|
122
|
+
const candidate = instruction as { action?: unknown; keys?: unknown };
|
|
123
|
+
return { action: candidate.action, keys: candidate.keys };
|
|
124
|
+
})
|
|
125
|
+
: (intent.keys ?? intent.lookupTable);
|
|
126
|
+
return `${action}:${sha256(JSON.stringify(canonicalize(accountShape))).slice(0, 24)}`;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function normalizeStateKey(value: string): string {
|
|
130
|
+
const normalized = value.trim().replace(/[^a-zA-Z0-9._-]+/g, "_");
|
|
131
|
+
return normalized || "unattached";
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function resolveSatSubmissionLedgerPath(params: {
|
|
135
|
+
walletId: string;
|
|
136
|
+
env?: NodeJS.ProcessEnv;
|
|
137
|
+
}): string {
|
|
138
|
+
const env = params.env ?? process.env;
|
|
139
|
+
return path.join(
|
|
140
|
+
resolveStateDir(env),
|
|
141
|
+
"sat-mining",
|
|
142
|
+
"wallets",
|
|
143
|
+
normalizeStateKey(params.walletId),
|
|
144
|
+
"submission-ledger.json",
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function emptyLedger(): SatSubmissionLedgerFile {
|
|
149
|
+
return { version: 1, records: {} };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function normalizeRecord(value: unknown): SatSubmissionRecord | null {
|
|
153
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const record = value as Partial<SatSubmissionRecord>;
|
|
157
|
+
if (
|
|
158
|
+
typeof record.requestId !== "string" ||
|
|
159
|
+
typeof record.workflowId !== "string" ||
|
|
160
|
+
typeof record.operationKey !== "string" ||
|
|
161
|
+
!/^sha256:[0-9a-f]{64}$/u.test(String(record.intentDigest ?? "")) ||
|
|
162
|
+
typeof record.walletId !== "string" ||
|
|
163
|
+
typeof record.action !== "string" ||
|
|
164
|
+
!["prepared", "reserved", "broadcast", "confirmed", "failed", "unknown"].includes(
|
|
165
|
+
String(record.state ?? ""),
|
|
166
|
+
)
|
|
167
|
+
) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return record as SatSubmissionRecord;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async function readLedger(filePath: string): Promise<SatSubmissionLedgerFile> {
|
|
174
|
+
try {
|
|
175
|
+
const parsed = JSON.parse(
|
|
176
|
+
await fs.readFile(filePath, "utf8"),
|
|
177
|
+
) as Partial<SatSubmissionLedgerFile>;
|
|
178
|
+
if (parsed.version !== 1 || !parsed.records || typeof parsed.records !== "object") {
|
|
179
|
+
throw new Error(`invalid SAT submission ledger format at ${filePath}`);
|
|
180
|
+
}
|
|
181
|
+
const records: Record<string, SatSubmissionRecord> = {};
|
|
182
|
+
for (const [requestId, raw] of Object.entries(parsed.records)) {
|
|
183
|
+
const record = normalizeRecord(raw);
|
|
184
|
+
if (!record || record.requestId !== requestId) {
|
|
185
|
+
throw new Error(`invalid SAT submission ledger record ${requestId}`);
|
|
186
|
+
}
|
|
187
|
+
records[requestId] = record;
|
|
188
|
+
}
|
|
189
|
+
return { version: 1, records };
|
|
190
|
+
} catch (error) {
|
|
191
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") {
|
|
192
|
+
return emptyLedger();
|
|
193
|
+
}
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async function writeLedger(filePath: string, ledger: SatSubmissionLedgerFile): Promise<void> {
|
|
199
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true, mode: 0o700 });
|
|
200
|
+
const tempPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
|
|
201
|
+
const handle = await fs.open(tempPath, "wx", 0o600);
|
|
202
|
+
try {
|
|
203
|
+
await handle.writeFile(`${JSON.stringify(ledger, null, 2)}\n`, "utf8");
|
|
204
|
+
await handle.sync();
|
|
205
|
+
} finally {
|
|
206
|
+
await handle.close();
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
await fs.rename(tempPath, filePath);
|
|
210
|
+
const directory = await fs.open(path.dirname(filePath), "r");
|
|
211
|
+
try {
|
|
212
|
+
await directory.sync();
|
|
213
|
+
} finally {
|
|
214
|
+
await directory.close();
|
|
215
|
+
}
|
|
216
|
+
} catch (error) {
|
|
217
|
+
await fs.rm(tempPath, { force: true }).catch(() => undefined);
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function leaseDurationMs(env: NodeJS.ProcessEnv): number {
|
|
223
|
+
const configured = Number(env.FASED_SAT_SUBMISSION_LEASE_MS ?? "");
|
|
224
|
+
if (Number.isFinite(configured) && configured >= 50 && configured <= 300_000) {
|
|
225
|
+
return Math.floor(configured);
|
|
226
|
+
}
|
|
227
|
+
return 60_000;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function isPidAlive(pid: number): boolean {
|
|
231
|
+
if (!Number.isSafeInteger(pid) || pid <= 0) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
process.kill(pid, 0);
|
|
236
|
+
return true;
|
|
237
|
+
} catch (error) {
|
|
238
|
+
return (error as NodeJS.ErrnoException).code === "EPERM";
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function leaseIsLive(lease: SatSubmissionLease | undefined, now = Date.now()): boolean {
|
|
243
|
+
if (!lease || Date.parse(lease.expiresAt) <= now) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
return lease.pid === process.pid || isPidAlive(lease.pid);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function assertStateTransition(
|
|
250
|
+
requestId: string,
|
|
251
|
+
current: SatSubmissionSignerState,
|
|
252
|
+
next: SatSubmissionSignerState,
|
|
253
|
+
): void {
|
|
254
|
+
const allowed: Record<SatSubmissionSignerState, ReadonlySet<SatSubmissionSignerState>> = {
|
|
255
|
+
prepared: new Set(["prepared", "reserved", "broadcast", "confirmed", "failed", "unknown"]),
|
|
256
|
+
reserved: new Set(["reserved", "broadcast", "confirmed", "failed", "unknown"]),
|
|
257
|
+
broadcast: new Set(["broadcast", "confirmed", "failed", "unknown"]),
|
|
258
|
+
unknown: new Set(["broadcast", "confirmed", "failed", "unknown"]),
|
|
259
|
+
confirmed: new Set(["confirmed"]),
|
|
260
|
+
failed: new Set(["failed"]),
|
|
261
|
+
};
|
|
262
|
+
if (!allowed[current].has(next)) {
|
|
263
|
+
throw new Error(`SAT submission ${requestId} cannot move from ${current} back to ${next}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export function buildSatSubmissionRequestId(params: {
|
|
268
|
+
walletId: string;
|
|
269
|
+
workflowId: string;
|
|
270
|
+
operationKey: string;
|
|
271
|
+
}): string {
|
|
272
|
+
const digest = sha256(
|
|
273
|
+
JSON.stringify([
|
|
274
|
+
"fased-sat-submission-v1",
|
|
275
|
+
params.walletId,
|
|
276
|
+
params.workflowId,
|
|
277
|
+
params.operationKey,
|
|
278
|
+
]),
|
|
279
|
+
);
|
|
280
|
+
return `sat-v2-${digest.slice(0, 48)}`;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export async function claimSatSubmission(params: {
|
|
284
|
+
walletId: string;
|
|
285
|
+
workflowId: string;
|
|
286
|
+
operationKey: string;
|
|
287
|
+
intentDigest: string;
|
|
288
|
+
action: string;
|
|
289
|
+
env?: NodeJS.ProcessEnv;
|
|
290
|
+
owner?: string;
|
|
291
|
+
}): Promise<SatSubmissionClaim> {
|
|
292
|
+
const env = params.env ?? process.env;
|
|
293
|
+
const filePath = resolveSatSubmissionLedgerPath({ walletId: params.walletId, env });
|
|
294
|
+
const requestId = buildSatSubmissionRequestId(params);
|
|
295
|
+
const owner = params.owner ?? `${process.pid}:${randomUUID()}`;
|
|
296
|
+
return await withSatSubmissionLedgerLock(filePath, async () => {
|
|
297
|
+
const ledger = await readLedger(filePath);
|
|
298
|
+
const existing = ledger.records[requestId];
|
|
299
|
+
if (existing) {
|
|
300
|
+
if (
|
|
301
|
+
existing.intentDigest !== params.intentDigest ||
|
|
302
|
+
existing.walletId !== params.walletId ||
|
|
303
|
+
existing.workflowId !== params.workflowId ||
|
|
304
|
+
existing.operationKey !== params.operationKey
|
|
305
|
+
) {
|
|
306
|
+
throw new Error(
|
|
307
|
+
`SAT idempotency collision for ${requestId}: the workflow key is already bound to a different immutable intent digest`,
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
if (leaseIsLive(existing.lease) && existing.lease?.owner !== owner) {
|
|
311
|
+
return { record: existing, created: false, claimed: false, owner };
|
|
312
|
+
}
|
|
313
|
+
const now = new Date().toISOString();
|
|
314
|
+
existing.lease = {
|
|
315
|
+
owner,
|
|
316
|
+
pid: process.pid,
|
|
317
|
+
acquiredAt: now,
|
|
318
|
+
expiresAt: new Date(Date.now() + leaseDurationMs(env)).toISOString(),
|
|
319
|
+
};
|
|
320
|
+
existing.attempts += 1;
|
|
321
|
+
existing.updatedAt = now;
|
|
322
|
+
await writeLedger(filePath, ledger);
|
|
323
|
+
return { record: existing, created: false, claimed: true, owner };
|
|
324
|
+
}
|
|
325
|
+
const now = new Date().toISOString();
|
|
326
|
+
const record: SatSubmissionRecord = {
|
|
327
|
+
requestId,
|
|
328
|
+
workflowId: params.workflowId,
|
|
329
|
+
operationKey: params.operationKey,
|
|
330
|
+
intentDigest: params.intentDigest,
|
|
331
|
+
walletId: params.walletId,
|
|
332
|
+
action: params.action,
|
|
333
|
+
state: "prepared",
|
|
334
|
+
attempts: 1,
|
|
335
|
+
createdAt: now,
|
|
336
|
+
updatedAt: now,
|
|
337
|
+
lease: {
|
|
338
|
+
owner,
|
|
339
|
+
pid: process.pid,
|
|
340
|
+
acquiredAt: now,
|
|
341
|
+
expiresAt: new Date(Date.now() + leaseDurationMs(env)).toISOString(),
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
ledger.records[requestId] = record;
|
|
345
|
+
await writeLedger(filePath, ledger);
|
|
346
|
+
return { record, created: true, claimed: true, owner };
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export async function readSatSubmission(params: {
|
|
351
|
+
walletId: string;
|
|
352
|
+
requestId: string;
|
|
353
|
+
env?: NodeJS.ProcessEnv;
|
|
354
|
+
}): Promise<SatSubmissionRecord | null> {
|
|
355
|
+
const filePath = resolveSatSubmissionLedgerPath(params);
|
|
356
|
+
return await withSatSubmissionLedgerLock(filePath, async () => {
|
|
357
|
+
const ledger = await readLedger(filePath);
|
|
358
|
+
return ledger.records[params.requestId] ?? null;
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export async function updateSatSubmission(params: {
|
|
363
|
+
walletId: string;
|
|
364
|
+
requestId: string;
|
|
365
|
+
intentDigest: string;
|
|
366
|
+
state: SatSubmissionSignerState;
|
|
367
|
+
signature?: string;
|
|
368
|
+
error?: string;
|
|
369
|
+
owner?: string;
|
|
370
|
+
releaseLease?: boolean;
|
|
371
|
+
env?: NodeJS.ProcessEnv;
|
|
372
|
+
}): Promise<SatSubmissionRecord> {
|
|
373
|
+
const filePath = resolveSatSubmissionLedgerPath(params);
|
|
374
|
+
return await withSatSubmissionLedgerLock(filePath, async () => {
|
|
375
|
+
const ledger = await readLedger(filePath);
|
|
376
|
+
const record = ledger.records[params.requestId];
|
|
377
|
+
if (!record) {
|
|
378
|
+
throw new Error(`SAT submission ${params.requestId} is missing from its durable ledger`);
|
|
379
|
+
}
|
|
380
|
+
if (record.intentDigest !== params.intentDigest) {
|
|
381
|
+
throw new Error(`SAT submission ${params.requestId} intent digest changed during execution`);
|
|
382
|
+
}
|
|
383
|
+
if (params.owner && record.lease?.owner !== params.owner) {
|
|
384
|
+
throw new Error(
|
|
385
|
+
`SAT submission ${params.requestId} lease ownership changed during execution`,
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
if (record.signature && params.signature && record.signature !== params.signature) {
|
|
389
|
+
throw new Error(
|
|
390
|
+
`SAT submission ${params.requestId} returned a different transaction signature`,
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
assertStateTransition(params.requestId, record.state, params.state);
|
|
394
|
+
record.state = params.state;
|
|
395
|
+
if (params.signature !== undefined) {
|
|
396
|
+
record.signature = params.signature;
|
|
397
|
+
}
|
|
398
|
+
if (params.error !== undefined) {
|
|
399
|
+
record.error = params.error;
|
|
400
|
+
} else if (params.state === "confirmed") {
|
|
401
|
+
delete record.error;
|
|
402
|
+
}
|
|
403
|
+
if (params.releaseLease) {
|
|
404
|
+
delete record.lease;
|
|
405
|
+
}
|
|
406
|
+
record.updatedAt = new Date().toISOString();
|
|
407
|
+
await writeLedger(filePath, ledger);
|
|
408
|
+
return record;
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
export async function waitForSatSubmissionLease(params: {
|
|
413
|
+
walletId: string;
|
|
414
|
+
requestId: string;
|
|
415
|
+
env?: NodeJS.ProcessEnv;
|
|
416
|
+
timeoutMs?: number;
|
|
417
|
+
}): Promise<SatSubmissionRecord> {
|
|
418
|
+
const timeoutAt = Date.now() + Math.max(100, params.timeoutMs ?? 65_000);
|
|
419
|
+
for (;;) {
|
|
420
|
+
const record = await readSatSubmission(params);
|
|
421
|
+
if (!record) {
|
|
422
|
+
throw new Error(`SAT submission ${params.requestId} disappeared while waiting for its lease`);
|
|
423
|
+
}
|
|
424
|
+
if (!leaseIsLive(record.lease)) {
|
|
425
|
+
return record;
|
|
426
|
+
}
|
|
427
|
+
if (Date.now() >= timeoutAt) {
|
|
428
|
+
throw new Error(
|
|
429
|
+
`SAT submission ${params.requestId} is already executing in another process; retry the same idempotency key`,
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.65
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
- Version alignment with core FasedAgent release numbers.
|
|
8
|
+
|
|
9
|
+
## 0.1.64
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
|
|
13
|
+
- Version alignment with core FasedAgent release numbers.
|
|
14
|
+
|
|
15
|
+
## 0.1.63
|
|
16
|
+
|
|
17
|
+
### Changes
|
|
18
|
+
|
|
19
|
+
- Version alignment with core FasedAgent release numbers.
|
|
20
|
+
|
|
3
21
|
## 0.1.62
|
|
4
22
|
|
|
5
23
|
### Changes
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.65
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
- Version alignment with core FasedAgent release numbers.
|
|
8
|
+
|
|
9
|
+
## 0.1.64
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
|
|
13
|
+
- Version alignment with core FasedAgent release numbers.
|
|
14
|
+
|
|
15
|
+
## 0.1.63
|
|
16
|
+
|
|
17
|
+
### Changes
|
|
18
|
+
|
|
19
|
+
- Version alignment with core FasedAgent release numbers.
|
|
20
|
+
|
|
3
21
|
## 0.1.62
|
|
4
22
|
|
|
5
23
|
### Changes
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.65
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
- Version alignment with core FasedAgent release numbers.
|
|
8
|
+
|
|
9
|
+
## 0.1.64
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
|
|
13
|
+
- Version alignment with core FasedAgent release numbers.
|
|
14
|
+
|
|
15
|
+
## 0.1.63
|
|
16
|
+
|
|
17
|
+
### Changes
|
|
18
|
+
|
|
19
|
+
- Version alignment with core FasedAgent release numbers.
|
|
20
|
+
|
|
3
21
|
## 0.1.62
|
|
4
22
|
|
|
5
23
|
### Changes
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.65
|
|
4
|
+
|
|
5
|
+
### Changes
|
|
6
|
+
|
|
7
|
+
- Version alignment with core FasedAgent release numbers.
|
|
8
|
+
|
|
9
|
+
## 0.1.64
|
|
10
|
+
|
|
11
|
+
### Changes
|
|
12
|
+
|
|
13
|
+
- Version alignment with core FasedAgent release numbers.
|
|
14
|
+
|
|
15
|
+
## 0.1.63
|
|
16
|
+
|
|
17
|
+
### Changes
|
|
18
|
+
|
|
19
|
+
- Version alignment with core FasedAgent release numbers.
|
|
20
|
+
|
|
3
21
|
## 0.1.62
|
|
4
22
|
|
|
5
23
|
### Changes
|