@homeflare/alchemy 0.46.1 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/argocd/cluster.d.ts +5 -5
- package/dist/argocd/cluster.d.ts.map +1 -1
- package/dist/argocd/fake-argocd.d.ts +1 -1
- package/dist/argocd/fake-argocd.d.ts.map +1 -1
- package/dist/argocd/index.js.map +1 -1
- package/dist/argocd/providers.d.ts +1 -1
- package/dist/argocd/providers.d.ts.map +1 -1
- package/dist/argocd/repo-creds.d.ts +5 -5
- package/dist/argocd/repo-creds.d.ts.map +1 -1
- package/dist/argocd/repository.d.ts +5 -5
- package/dist/argocd/repository.d.ts.map +1 -1
- package/dist/argocd/resource.d.ts +1 -1
- package/dist/argocd/resource.d.ts.map +1 -1
- package/dist/caddy/admin.d.ts +1 -1
- package/dist/caddy/admin.d.ts.map +1 -1
- package/dist/caddy/caddy-http-client.d.ts +2 -2
- package/dist/caddy/caddy-http-client.d.ts.map +1 -1
- package/dist/caddy/format.d.ts +1 -1
- package/dist/caddy/format.d.ts.map +1 -1
- package/dist/caddy/index.js +6 -6
- package/dist/caddy/index.js.map +4 -4
- package/dist/ceph/auth-entity.d.ts +1 -1
- package/dist/ceph/auth-entity.d.ts.map +1 -1
- package/dist/ceph/ceph-auth-reconcile.d.ts +1 -1
- package/dist/ceph/ceph-auth-reconcile.d.ts.map +1 -1
- package/dist/ceph/index.js +5 -5
- package/dist/ceph/index.js.map +4 -4
- package/dist/cloudflare/fake-mesh.d.ts +2 -2
- package/dist/cloudflare/fake-mesh.d.ts.map +1 -1
- package/dist/cloudflare/fake-r2-lock.d.ts +1 -1
- package/dist/cloudflare/fake-r2-lock.d.ts.map +1 -1
- package/dist/cloudflare/index.js +3 -3
- package/dist/cloudflare/index.js.map +3 -3
- package/dist/cloudflare/mesh-node-token.d.ts +1 -1
- package/dist/cloudflare/mesh-node-token.d.ts.map +1 -1
- package/dist/cloudflare/mesh-node.d.ts +1 -1
- package/dist/cloudflare/mesh-node.d.ts.map +1 -1
- package/dist/cloudflare/providers.d.ts +1 -1
- package/dist/cloudflare/providers.d.ts.map +1 -1
- package/dist/cloudflare/r2-bucket-lock.d.ts +1 -1
- package/dist/cloudflare/r2-bucket-lock.d.ts.map +1 -1
- package/dist/discord/application-command.d.ts +6 -6
- package/dist/discord/application-command.d.ts.map +1 -1
- package/dist/discord/fake-discord.d.ts +1 -1
- package/dist/discord/fake-discord.d.ts.map +1 -1
- package/dist/discord/guild-application-command.d.ts +6 -6
- package/dist/discord/guild-application-command.d.ts.map +1 -1
- package/dist/discord/index.js.map +1 -1
- package/dist/discord/providers.d.ts +1 -1
- package/dist/discord/providers.d.ts.map +1 -1
- package/dist/discord/resource.d.ts +1 -1
- package/dist/discord/resource.d.ts.map +1 -1
- package/dist/forgejo/branch-protection.d.ts +5 -5
- package/dist/forgejo/branch-protection.d.ts.map +1 -1
- package/dist/forgejo/fake-forgejo.d.ts +1 -1
- package/dist/forgejo/fake-forgejo.d.ts.map +1 -1
- package/dist/forgejo/index.js.map +1 -1
- package/dist/forgejo/org-actions-secrets.d.ts +5 -5
- package/dist/forgejo/org-actions-secrets.d.ts.map +1 -1
- package/dist/forgejo/org-label.d.ts +5 -5
- package/dist/forgejo/org-label.d.ts.map +1 -1
- package/dist/forgejo/org-team.d.ts +5 -5
- package/dist/forgejo/org-team.d.ts.map +1 -1
- package/dist/forgejo/repo-webhook.d.ts +5 -5
- package/dist/forgejo/repo-webhook.d.ts.map +1 -1
- package/dist/forgejo/repository.d.ts +5 -5
- package/dist/forgejo/repository.d.ts.map +1 -1
- package/dist/forgejo/resource.d.ts +1 -1
- package/dist/forgejo/resource.d.ts.map +1 -1
- package/dist/forgejo/team-member.d.ts +5 -5
- package/dist/forgejo/team-member.d.ts.map +1 -1
- package/dist/github/repository-ruleset-providers.d.ts +1 -1
- package/dist/github/repository-ruleset-providers.d.ts.map +1 -1
- package/dist/google-workspace/domain-alias.d.ts +5 -5
- package/dist/google-workspace/domain-alias.d.ts.map +1 -1
- package/dist/google-workspace/fake-google-workspace.d.ts +1 -1
- package/dist/google-workspace/fake-google-workspace.d.ts.map +1 -1
- package/dist/google-workspace/group-member.d.ts +5 -5
- package/dist/google-workspace/group-member.d.ts.map +1 -1
- package/dist/google-workspace/group.d.ts +5 -5
- package/dist/google-workspace/group.d.ts.map +1 -1
- package/dist/google-workspace/index.js.map +1 -1
- package/dist/google-workspace/org-unit.d.ts +5 -5
- package/dist/google-workspace/org-unit.d.ts.map +1 -1
- package/dist/google-workspace/providers.d.ts +1 -1
- package/dist/google-workspace/providers.d.ts.map +1 -1
- package/dist/google-workspace/resource.d.ts +1 -1
- package/dist/google-workspace/resource.d.ts.map +1 -1
- package/dist/grafana/alert-rule-group.d.ts +4 -4
- package/dist/grafana/alert-rule-group.d.ts.map +1 -1
- package/dist/grafana/contact-point.d.ts +4 -4
- package/dist/grafana/dashboard.d.ts +4 -4
- package/dist/grafana/datasource.d.ts +4 -4
- package/dist/grafana/fake-grafana.d.ts +1 -1
- package/dist/grafana/fake-grafana.d.ts.map +1 -1
- package/dist/grafana/folder.d.ts +4 -4
- package/dist/grafana/message-template.d.ts +4 -4
- package/dist/grafana/mute-timing.d.ts +4 -4
- package/dist/grafana/notification-policy.d.ts +4 -4
- package/dist/grafana/notification-policy.d.ts.map +1 -1
- package/dist/grafana/providers.d.ts +1 -1
- package/dist/grafana/providers.d.ts.map +1 -1
- package/dist/litellm/access-group.d.ts +1 -1
- package/dist/litellm/budget-operations.d.ts +1 -1
- package/dist/litellm/budget-operations.d.ts.map +1 -1
- package/dist/litellm/budget.d.ts +2 -2
- package/dist/litellm/credential-errors.d.ts +1 -1
- package/dist/litellm/credential-errors.d.ts.map +1 -1
- package/dist/litellm/credential.d.ts +1 -1
- package/dist/litellm/index.js +26 -5
- package/dist/litellm/index.js.map +8 -8
- package/dist/litellm/key-errors.d.ts +1 -1
- package/dist/litellm/key-errors.d.ts.map +1 -1
- package/dist/litellm/key.d.ts +2 -2
- package/dist/litellm/mcp-server-locate.d.ts +1 -1
- package/dist/litellm/mcp-server-locate.d.ts.map +1 -1
- package/dist/litellm/mcp-server.d.ts +2 -2
- package/dist/litellm/model-operations.d.ts +1 -1
- package/dist/litellm/model-operations.d.ts.map +1 -1
- package/dist/litellm/model.d.ts +2 -2
- package/dist/litellm/operations.d.ts +1 -1
- package/dist/litellm/operations.d.ts.map +1 -1
- package/dist/litellm/policy-attachment.d.ts +1 -1
- package/dist/litellm/policy.d.ts +1 -1
- package/dist/litellm/providers.d.ts +1 -1
- package/dist/litellm/providers.d.ts.map +1 -1
- package/dist/litellm/team-operations.d.ts +1 -1
- package/dist/litellm/team-operations.d.ts.map +1 -1
- package/dist/litellm/team.d.ts +1 -1
- package/dist/litellm/tool-policy-operations.d.ts +1 -1
- package/dist/litellm/tool-policy-operations.d.ts.map +1 -1
- package/dist/litellm/tool-policy.d.ts +1 -1
- package/dist/litellm/toolset.d.ts +1 -1
- package/dist/netbox/fake-netbox.d.ts +1 -1
- package/dist/netbox/fake-netbox.d.ts.map +1 -1
- package/dist/netbox/index.js.map +1 -1
- package/dist/netbox/prefix.d.ts +5 -5
- package/dist/netbox/prefix.d.ts.map +1 -1
- package/dist/netbox/resource.d.ts +1 -1
- package/dist/netbox/resource.d.ts.map +1 -1
- package/dist/openbao/approle-login.d.ts +1 -1
- package/dist/openbao/approle-login.d.ts.map +1 -1
- package/dist/openbao/auth-method-reconcile.d.ts +1 -1
- package/dist/openbao/auth-method-reconcile.d.ts.map +1 -1
- package/dist/openbao/auth-method-wire.d.ts +4 -4
- package/dist/openbao/auth-method-wire.d.ts.map +1 -1
- package/dist/openbao/auth-method.d.ts +1 -1
- package/dist/openbao/auth-method.d.ts.map +1 -1
- package/dist/openbao/auth-role-identity.d.ts +1 -1
- package/dist/openbao/auth-role-identity.d.ts.map +1 -1
- package/dist/openbao/auth-role-wire.d.ts +4 -4
- package/dist/openbao/auth-role-wire.d.ts.map +1 -1
- package/dist/openbao/auth-role.d.ts +1 -1
- package/dist/openbao/auth-role.d.ts.map +1 -1
- package/dist/openbao/bao-http.d.ts +1 -1
- package/dist/openbao/bao-http.d.ts.map +1 -1
- package/dist/openbao/bao-identity.d.ts +1 -1
- package/dist/openbao/bao-identity.d.ts.map +1 -1
- package/dist/openbao/cloudflare-permission-groups.d.ts +1 -1
- package/dist/openbao/cloudflare-permission-groups.d.ts.map +1 -1
- package/dist/openbao/cloudflare-role-wire.d.ts +1 -1
- package/dist/openbao/cloudflare-role-wire.d.ts.map +1 -1
- package/dist/openbao/cloudflare-role.d.ts +1 -1
- package/dist/openbao/cloudflare-role.d.ts.map +1 -1
- package/dist/openbao/distilled.d.ts +1 -1
- package/dist/openbao/distilled.d.ts.map +1 -1
- package/dist/openbao/fake-bao.d.ts +1 -1
- package/dist/openbao/fake-bao.d.ts.map +1 -1
- package/dist/openbao/fake-core.d.ts +1 -1
- package/dist/openbao/fake-core.d.ts.map +1 -1
- package/dist/openbao/fake-engines.d.ts +1 -1
- package/dist/openbao/fake-engines.d.ts.map +1 -1
- package/dist/openbao/fake-families.d.ts +2 -2
- package/dist/openbao/fake-families.d.ts.map +1 -1
- package/dist/openbao/fake-stack.d.ts +5 -0
- package/dist/openbao/fake-stack.d.ts.map +1 -1
- package/dist/openbao/forgejo-bootstrap.d.ts +1 -1
- package/dist/openbao/forgejo-bootstrap.d.ts.map +1 -1
- package/dist/openbao/index.js +31 -10
- package/dist/openbao/index.js.map +31 -31
- package/dist/openbao/jwt-config.d.ts +1 -1
- package/dist/openbao/jwt-config.d.ts.map +1 -1
- package/dist/openbao/jwt-role.d.ts +1 -1
- package/dist/openbao/jwt-role.d.ts.map +1 -1
- package/dist/openbao/kubernetes-role.d.ts +1 -1
- package/dist/openbao/kubernetes-role.d.ts.map +1 -1
- package/dist/openbao/mfa-enforcement.d.ts +1 -1
- package/dist/openbao/mfa-enforcement.d.ts.map +1 -1
- package/dist/openbao/mfa-totp.d.ts +1 -1
- package/dist/openbao/mfa-totp.d.ts.map +1 -1
- package/dist/openbao/mfa-wire.d.ts +1 -1
- package/dist/openbao/mfa-wire.d.ts.map +1 -1
- package/dist/openbao/mount-move.d.ts +1 -1
- package/dist/openbao/mount-move.d.ts.map +1 -1
- package/dist/openbao/mount-reconcile.d.ts +1 -1
- package/dist/openbao/mount-reconcile.d.ts.map +1 -1
- package/dist/openbao/mount-wire.d.ts +4 -4
- package/dist/openbao/mount-wire.d.ts.map +1 -1
- package/dist/openbao/mount.d.ts +1 -1
- package/dist/openbao/mount.d.ts.map +1 -1
- package/dist/openbao/pki-role.d.ts +1 -1
- package/dist/openbao/pki-role.d.ts.map +1 -1
- package/dist/openbao/plugin-reconcile.d.ts +1 -1
- package/dist/openbao/plugin-reconcile.d.ts.map +1 -1
- package/dist/openbao/plugin-wire.d.ts +1 -1
- package/dist/openbao/plugin-wire.d.ts.map +1 -1
- package/dist/openbao/plugin.d.ts +1 -1
- package/dist/openbao/plugin.d.ts.map +1 -1
- package/dist/openbao/policy-identity.d.ts +1 -1
- package/dist/openbao/policy-identity.d.ts.map +1 -1
- package/dist/openbao/policy-wire.d.ts +4 -4
- package/dist/openbao/policy-wire.d.ts.map +1 -1
- package/dist/openbao/policy.d.ts +1 -1
- package/dist/openbao/policy.d.ts.map +1 -1
- package/dist/openbao/proxmox-role-wire.d.ts +1 -1
- package/dist/openbao/proxmox-role-wire.d.ts.map +1 -1
- package/dist/openbao/proxmox-role.d.ts +1 -1
- package/dist/openbao/proxmox-role.d.ts.map +1 -1
- package/dist/openbao/remount-wire.d.ts +1 -1
- package/dist/openbao/remount-wire.d.ts.map +1 -1
- package/dist/openbao/rename-identity.d.ts +1 -1
- package/dist/openbao/rename-identity.d.ts.map +1 -1
- package/dist/openbao/rename.d.ts +1 -1
- package/dist/openbao/rename.d.ts.map +1 -1
- package/dist/openbao/role-reconcile.d.ts +1 -1
- package/dist/openbao/role-reconcile.d.ts.map +1 -1
- package/dist/openbao/ssh-role.d.ts +1 -1
- package/dist/openbao/ssh-role.d.ts.map +1 -1
- package/dist/opnsense/alias.d.ts +5 -5
- package/dist/opnsense/alias.d.ts.map +1 -1
- package/dist/opnsense/category.d.ts +5 -5
- package/dist/opnsense/category.d.ts.map +1 -1
- package/dist/opnsense/fake-opnsense.d.ts +1 -1
- package/dist/opnsense/fake-opnsense.d.ts.map +1 -1
- package/dist/opnsense/group.d.ts +5 -5
- package/dist/opnsense/group.d.ts.map +1 -1
- package/dist/opnsense/index.js.map +1 -1
- package/dist/opnsense/providers.d.ts +1 -1
- package/dist/opnsense/providers.d.ts.map +1 -1
- package/dist/opnsense/resource.d.ts +1 -1
- package/dist/opnsense/resource.d.ts.map +1 -1
- package/dist/ownership/probe.d.ts.map +1 -1
- package/dist/paperless/custom-field.d.ts +5 -5
- package/dist/paperless/custom-field.d.ts.map +1 -1
- package/dist/paperless/document-type.d.ts +5 -5
- package/dist/paperless/document-type.d.ts.map +1 -1
- package/dist/paperless/fake-paperless.d.ts +1 -1
- package/dist/paperless/fake-paperless.d.ts.map +1 -1
- package/dist/paperless/matching-types.d.ts +1 -1
- package/dist/paperless/matching-types.d.ts.map +1 -1
- package/dist/paperless/matching.d.ts +4 -4
- package/dist/paperless/providers.d.ts +1 -1
- package/dist/paperless/providers.d.ts.map +1 -1
- package/dist/paperless/storage-path.d.ts +5 -5
- package/dist/paperless/storage-path.d.ts.map +1 -1
- package/dist/paperless/tag.d.ts +5 -5
- package/dist/paperless/tag.d.ts.map +1 -1
- package/dist/postgres/connection.d.ts +2 -2
- package/dist/postgres/connection.d.ts.map +1 -1
- package/dist/postgres/database-sql.d.ts +1 -1
- package/dist/postgres/database-sql.d.ts.map +1 -1
- package/dist/postgres/database.d.ts +1 -1
- package/dist/postgres/database.d.ts.map +1 -1
- package/dist/postgres/fake-grants-read.d.ts +1 -1
- package/dist/postgres/fake-grants-read.d.ts.map +1 -1
- package/dist/postgres/fake-grants-write.d.ts +1 -1
- package/dist/postgres/fake-grants-write.d.ts.map +1 -1
- package/dist/postgres/fake-role-sql.d.ts +1 -1
- package/dist/postgres/fake-role-sql.d.ts.map +1 -1
- package/dist/postgres/fake-schema-drop.d.ts +1 -1
- package/dist/postgres/fake-schema-drop.d.ts.map +1 -1
- package/dist/postgres/fake-schema-sql.d.ts +1 -1
- package/dist/postgres/fake-schema-sql.d.ts.map +1 -1
- package/dist/postgres/grants-existence.d.ts +1 -1
- package/dist/postgres/grants-existence.d.ts.map +1 -1
- package/dist/postgres/grants-ops.d.ts +1 -1
- package/dist/postgres/grants-ops.d.ts.map +1 -1
- package/dist/postgres/grants-ownership.d.ts +1 -1
- package/dist/postgres/grants-ownership.d.ts.map +1 -1
- package/dist/postgres/grants-read-defaults.d.ts +1 -1
- package/dist/postgres/grants-read-defaults.d.ts.map +1 -1
- package/dist/postgres/grants-read.d.ts +1 -1
- package/dist/postgres/grants-read.d.ts.map +1 -1
- package/dist/postgres/index.js +93 -77
- package/dist/postgres/index.js.map +23 -23
- package/dist/postgres/installed-classifier.d.ts +1 -1
- package/dist/postgres/installed-classifier.d.ts.map +1 -1
- package/dist/postgres/psql-executor.d.ts.map +1 -1
- package/dist/postgres/role-membership-sql.d.ts +1 -1
- package/dist/postgres/role-membership-sql.d.ts.map +1 -1
- package/dist/postgres/role-sql.d.ts +1 -1
- package/dist/postgres/role-sql.d.ts.map +1 -1
- package/dist/postgres/role.d.ts +1 -1
- package/dist/postgres/role.d.ts.map +1 -1
- package/dist/postgres/schema-assert.d.ts +1 -1
- package/dist/postgres/schema-assert.d.ts.map +1 -1
- package/dist/postgres/schema-delete.d.ts +1 -1
- package/dist/postgres/schema-delete.d.ts.map +1 -1
- package/dist/postgres/schema-drop-sql.d.ts +1 -1
- package/dist/postgres/schema-drop-sql.d.ts.map +1 -1
- package/dist/postgres/schema-reconcile.d.ts +1 -1
- package/dist/postgres/schema-reconcile.d.ts.map +1 -1
- package/dist/postgres/schema-sql.d.ts +1 -1
- package/dist/postgres/schema-sql.d.ts.map +1 -1
- package/dist/postgres/schema.d.ts +1 -1
- package/dist/postgres/schema.d.ts.map +1 -1
- package/dist/postgres/search-path.d.ts +1 -1
- package/dist/postgres/search-path.d.ts.map +1 -1
- package/dist/proxmox/acl.d.ts +1 -1
- package/dist/proxmox/acl.d.ts.map +1 -1
- package/dist/proxmox/api-token.d.ts +1 -1
- package/dist/proxmox/api-token.d.ts.map +1 -1
- package/dist/proxmox/backup-job-distilled.d.ts +2 -2
- package/dist/proxmox/backup-job-distilled.d.ts.map +1 -1
- package/dist/proxmox/backup-job.d.ts +1 -1
- package/dist/proxmox/backup-job.d.ts.map +1 -1
- package/dist/proxmox/ceph-daemon-wire.d.ts +3 -3
- package/dist/proxmox/ceph-daemon-wire.d.ts.map +1 -1
- package/dist/proxmox/ceph-daemon.d.ts +2 -2
- package/dist/proxmox/ceph-daemon.d.ts.map +1 -1
- package/dist/proxmox/ceph-flag-wire.d.ts +3 -3
- package/dist/proxmox/ceph-flag-wire.d.ts.map +1 -1
- package/dist/proxmox/ceph-flag.d.ts +1 -1
- package/dist/proxmox/ceph-flag.d.ts.map +1 -1
- package/dist/proxmox/ceph-fs-distilled.d.ts +3 -3
- package/dist/proxmox/ceph-fs-distilled.d.ts.map +1 -1
- package/dist/proxmox/ceph-fs.d.ts +1 -1
- package/dist/proxmox/ceph-fs.d.ts.map +1 -1
- package/dist/proxmox/ceph-osd-tree.d.ts +1 -1
- package/dist/proxmox/ceph-osd-tree.d.ts.map +1 -1
- package/dist/proxmox/ceph-osd-write.d.ts +2 -2
- package/dist/proxmox/ceph-osd-write.d.ts.map +1 -1
- package/dist/proxmox/ceph-osd.d.ts +1 -1
- package/dist/proxmox/ceph-osd.d.ts.map +1 -1
- package/dist/proxmox/ceph-pool-settle.d.ts +2 -2
- package/dist/proxmox/ceph-pool-settle.d.ts.map +1 -1
- package/dist/proxmox/ceph-pool-wire.d.ts +1 -1
- package/dist/proxmox/ceph-pool-wire.d.ts.map +1 -1
- package/dist/proxmox/ceph-pool.d.ts +1 -1
- package/dist/proxmox/ceph-pool.d.ts.map +1 -1
- package/dist/proxmox/client.d.ts +1 -1
- package/dist/proxmox/client.d.ts.map +1 -1
- package/dist/proxmox/distilled-pbs.d.ts +1 -1
- package/dist/proxmox/distilled-pbs.d.ts.map +1 -1
- package/dist/proxmox/distilled-pve.d.ts +1 -1
- package/dist/proxmox/distilled-pve.d.ts.map +1 -1
- package/dist/proxmox/fake-pbs-jobs.d.ts +1 -1
- package/dist/proxmox/fake-pve.d.ts +1 -1
- package/dist/proxmox/fake-pve.d.ts.map +1 -1
- package/dist/proxmox/firewall-alias-lifecycle.d.ts +6 -6
- package/dist/proxmox/firewall-alias-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/firewall-alias.d.ts +1 -1
- package/dist/proxmox/firewall-alias.d.ts.map +1 -1
- package/dist/proxmox/group-wire.d.ts +2 -2
- package/dist/proxmox/group-wire.d.ts.map +1 -1
- package/dist/proxmox/group.d.ts +1 -1
- package/dist/proxmox/group.d.ts.map +1 -1
- package/dist/proxmox/ha-resource.d.ts +1 -1
- package/dist/proxmox/ha-resource.d.ts.map +1 -1
- package/dist/proxmox/ha-rule.d.ts +1 -1
- package/dist/proxmox/ha-rule.d.ts.map +1 -1
- package/dist/proxmox/index.js +38 -17
- package/dist/proxmox/index.js.map +9 -9
- package/dist/proxmox/lease-cache.d.ts +2 -2
- package/dist/proxmox/lease-cache.d.ts.map +1 -1
- package/dist/proxmox/live-core-fixtures.d.ts +1 -1
- package/dist/proxmox/live-core-fixtures.d.ts.map +1 -1
- package/dist/proxmox/lxc-lifecycle.d.ts +3 -3
- package/dist/proxmox/lxc-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/lxc-read.d.ts +1 -1
- package/dist/proxmox/lxc-read.d.ts.map +1 -1
- package/dist/proxmox/lxc-task.d.ts +1 -1
- package/dist/proxmox/lxc-task.d.ts.map +1 -1
- package/dist/proxmox/lxc.d.ts +1 -1
- package/dist/proxmox/lxc.d.ts.map +1 -1
- package/dist/proxmox/members.d.ts +3 -3
- package/dist/proxmox/members.d.ts.map +1 -1
- package/dist/proxmox/metric-server-distilled.d.ts +3 -3
- package/dist/proxmox/metric-server-distilled.d.ts.map +1 -1
- package/dist/proxmox/metric-server.d.ts +1 -1
- package/dist/proxmox/metric-server.d.ts.map +1 -1
- package/dist/proxmox/mint.d.ts +1 -1
- package/dist/proxmox/mint.d.ts.map +1 -1
- package/dist/proxmox/network-apply-read.d.ts +3 -3
- package/dist/proxmox/network-apply-read.d.ts.map +1 -1
- package/dist/proxmox/network-apply-run.d.ts +1 -1
- package/dist/proxmox/network-apply-run.d.ts.map +1 -1
- package/dist/proxmox/network-apply.d.ts +1 -1
- package/dist/proxmox/network-apply.d.ts.map +1 -1
- package/dist/proxmox/node-network-wire.d.ts +2 -2
- package/dist/proxmox/node-network-wire.d.ts.map +1 -1
- package/dist/proxmox/node-network.d.ts +1 -1
- package/dist/proxmox/node-network.d.ts.map +1 -1
- package/dist/proxmox/notification-matcher-distilled.d.ts +4 -4
- package/dist/proxmox/notification-matcher-distilled.d.ts.map +1 -1
- package/dist/proxmox/notification-matcher-lifecycle.d.ts +4 -4
- package/dist/proxmox/notification-matcher.d.ts +1 -1
- package/dist/proxmox/notification-matcher.d.ts.map +1 -1
- package/dist/proxmox/notification-target-distilled.d.ts +4 -4
- package/dist/proxmox/notification-target-distilled.d.ts.map +1 -1
- package/dist/proxmox/notification-target-lifecycle.d.ts +4 -4
- package/dist/proxmox/notification-target.d.ts +1 -1
- package/dist/proxmox/notification-target.d.ts.map +1 -1
- package/dist/proxmox/pbs-datastore-lifecycle.d.ts +4 -4
- package/dist/proxmox/pbs-datastore-wire.d.ts +4 -4
- package/dist/proxmox/pbs-datastore-wire.d.ts.map +1 -1
- package/dist/proxmox/pbs-datastore.d.ts +1 -1
- package/dist/proxmox/pbs-datastore.d.ts.map +1 -1
- package/dist/proxmox/pbs-notification-matcher-distilled.d.ts +4 -4
- package/dist/proxmox/pbs-notification-matcher-distilled.d.ts.map +1 -1
- package/dist/proxmox/pbs-notification-matcher.d.ts +1 -1
- package/dist/proxmox/pbs-notification-matcher.d.ts.map +1 -1
- package/dist/proxmox/pbs-notification-target-distilled.d.ts +4 -4
- package/dist/proxmox/pbs-notification-target-distilled.d.ts.map +1 -1
- package/dist/proxmox/pbs-notification-target-lifecycle.d.ts +4 -4
- package/dist/proxmox/pbs-notification-target.d.ts +1 -1
- package/dist/proxmox/pbs-notification-target.d.ts.map +1 -1
- package/dist/proxmox/pbs-prune-job-lifecycle.d.ts +4 -4
- package/dist/proxmox/pbs-prune-job-wire.d.ts +4 -4
- package/dist/proxmox/pbs-prune-job-wire.d.ts.map +1 -1
- package/dist/proxmox/pbs-prune-job.d.ts +1 -1
- package/dist/proxmox/pbs-prune-job.d.ts.map +1 -1
- package/dist/proxmox/pbs-sync-job-lifecycle.d.ts +4 -4
- package/dist/proxmox/pbs-sync-job-wire.d.ts +4 -4
- package/dist/proxmox/pbs-sync-job-wire.d.ts.map +1 -1
- package/dist/proxmox/pbs-sync-job.d.ts +1 -1
- package/dist/proxmox/pbs-sync-job.d.ts.map +1 -1
- package/dist/proxmox/pbs-verify-job-lifecycle.d.ts +4 -4
- package/dist/proxmox/pbs-verify-job-wire.d.ts +4 -4
- package/dist/proxmox/pbs-verify-job-wire.d.ts.map +1 -1
- package/dist/proxmox/pbs-verify-job.d.ts +1 -1
- package/dist/proxmox/pbs-verify-job.d.ts.map +1 -1
- package/dist/proxmox/pool.d.ts +3 -3
- package/dist/proxmox/pool.d.ts.map +1 -1
- package/dist/proxmox/provision-declare.d.ts +1 -1
- package/dist/proxmox/provision-declare.d.ts.map +1 -1
- package/dist/proxmox/qemu-lifecycle.d.ts +3 -3
- package/dist/proxmox/qemu-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/qemu-read.d.ts +1 -1
- package/dist/proxmox/qemu-read.d.ts.map +1 -1
- package/dist/proxmox/qemu-resize.d.ts +1 -1
- package/dist/proxmox/qemu-resize.d.ts.map +1 -1
- package/dist/proxmox/qemu-task.d.ts +1 -1
- package/dist/proxmox/qemu-task.d.ts.map +1 -1
- package/dist/proxmox/qemu.d.ts +1 -1
- package/dist/proxmox/qemu.d.ts.map +1 -1
- package/dist/proxmox/replication-job-lifecycle.d.ts +6 -6
- package/dist/proxmox/replication-job-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/replication-job.d.ts +1 -1
- package/dist/proxmox/replication-job.d.ts.map +1 -1
- package/dist/proxmox/resource-spec.d.ts +1 -1
- package/dist/proxmox/resource-spec.d.ts.map +1 -1
- package/dist/proxmox/resource.d.ts +8 -8
- package/dist/proxmox/role.d.ts +1 -1
- package/dist/proxmox/role.d.ts.map +1 -1
- package/dist/proxmox/sdn-apply-read.d.ts +1 -1
- package/dist/proxmox/sdn-apply-read.d.ts.map +1 -1
- package/dist/proxmox/sdn-apply.d.ts +1 -1
- package/dist/proxmox/sdn-apply.d.ts.map +1 -1
- package/dist/proxmox/sdn-subnet.d.ts +1 -1
- package/dist/proxmox/sdn-subnet.d.ts.map +1 -1
- package/dist/proxmox/sdn-vnet.d.ts +1 -1
- package/dist/proxmox/sdn-vnet.d.ts.map +1 -1
- package/dist/proxmox/sdn-zone.d.ts +1 -1
- package/dist/proxmox/sdn-zone.d.ts.map +1 -1
- package/dist/proxmox/storage-download-lifecycle.d.ts +6 -6
- package/dist/proxmox/storage-download-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/storage-download-task.d.ts +1 -1
- package/dist/proxmox/storage-download-task.d.ts.map +1 -1
- package/dist/proxmox/storage-download.d.ts +1 -1
- package/dist/proxmox/storage-download.d.ts.map +1 -1
- package/dist/proxmox/storage-wire.d.ts +2 -2
- package/dist/proxmox/storage-wire.d.ts.map +1 -1
- package/dist/proxmox/storage.d.ts +1 -1
- package/dist/proxmox/storage.d.ts.map +1 -1
- package/dist/proxmox/user-wire.d.ts +2 -2
- package/dist/proxmox/user-wire.d.ts.map +1 -1
- package/dist/proxmox/user.d.ts +1 -1
- package/dist/proxmox/user.d.ts.map +1 -1
- package/dist/proxmox/zfs-pool-form.d.ts +2 -2
- package/dist/proxmox/zfs-pool-form.d.ts.map +1 -1
- package/dist/proxmox/zfs-pool-wire.d.ts +2 -2
- package/dist/proxmox/zfs-pool-wire.d.ts.map +1 -1
- package/dist/proxmox/zfs-pool.d.ts +1 -1
- package/dist/proxmox/zfs-pool.d.ts.map +1 -1
- package/dist/release/binary.d.ts +1 -1
- package/dist/release/binary.d.ts.map +1 -1
- package/dist/release/download.d.ts +1 -1
- package/dist/release/download.d.ts.map +1 -1
- package/dist/release/index.js +6 -5
- package/dist/release/index.js.map +5 -5
- package/dist/talos/credentials-write.d.ts +1 -1
- package/dist/talos/credentials-write.d.ts.map +1 -1
- package/dist/talos/credentials.d.ts +1 -1
- package/dist/talos/credentials.d.ts.map +1 -1
- package/dist/talos/fake-process.d.ts +2 -2
- package/dist/talos/fake-process.d.ts.map +1 -1
- package/dist/talos/index.js +7 -7
- package/dist/talos/index.js.map +4 -4
- package/dist/talos/kubeconfig.d.ts +4 -4
- package/dist/talos/kubeconfig.d.ts.map +1 -1
- package/dist/talos/machine-config-fixtures.d.ts +1 -1
- package/dist/talos/machine-config-fixtures.d.ts.map +1 -1
- package/dist/talos/machine-config-read.d.ts +3 -3
- package/dist/talos/machine-config-read.d.ts.map +1 -1
- package/dist/talos/resource.d.ts +1 -1
- package/dist/talos/resource.d.ts.map +1 -1
- package/dist/talos/talos-bootstrap-etcd.d.ts +2 -2
- package/dist/talos/talos-bootstrap-etcd.d.ts.map +1 -1
- package/dist/talos/talos-bootstrap.d.ts +4 -4
- package/dist/talos/talos-bootstrap.d.ts.map +1 -1
- package/dist/talos/talos-cluster-health.d.ts +4 -4
- package/dist/talos/talos-cluster-health.d.ts.map +1 -1
- package/dist/talos/talos-machine-config.d.ts +2 -2
- package/dist/talos/talos-machine-config.d.ts.map +1 -1
- package/dist/talos/talosctl.d.ts +1 -1
- package/dist/talos/talosctl.d.ts.map +1 -1
- package/dist/telemetry/index.js +4 -4
- package/dist/telemetry/index.js.map +3 -3
- package/dist/telemetry/redact-serialization.d.ts +2 -2
- package/dist/telemetry/redact-serialization.d.ts.map +1 -1
- package/dist/unifi/acl-rule-ordering.d.ts +6 -6
- package/dist/unifi/acl-rule-ordering.d.ts.map +1 -1
- package/dist/unifi/acl-rule.d.ts +6 -6
- package/dist/unifi/acl-rule.d.ts.map +1 -1
- package/dist/unifi/dns-policy.d.ts +6 -6
- package/dist/unifi/dns-policy.d.ts.map +1 -1
- package/dist/unifi/fake-unifi.d.ts +1 -1
- package/dist/unifi/fake-unifi.d.ts.map +1 -1
- package/dist/unifi/firewall-policy-ordering.d.ts +6 -6
- package/dist/unifi/firewall-policy-ordering.d.ts.map +1 -1
- package/dist/unifi/firewall-policy.d.ts +6 -6
- package/dist/unifi/firewall-policy.d.ts.map +1 -1
- package/dist/unifi/firewall-zone.d.ts +6 -6
- package/dist/unifi/firewall-zone.d.ts.map +1 -1
- package/dist/unifi/index.js +2 -2
- package/dist/unifi/index.js.map +2 -2
- package/dist/unifi/network.d.ts +6 -6
- package/dist/unifi/network.d.ts.map +1 -1
- package/dist/unifi/providers.d.ts +1 -1
- package/dist/unifi/providers.d.ts.map +1 -1
- package/dist/unifi/resource.d.ts +1 -1
- package/dist/unifi/resource.d.ts.map +1 -1
- package/dist/unifi/traffic-matching-list.d.ts +6 -6
- package/dist/unifi/traffic-matching-list.d.ts.map +1 -1
- package/dist/unifi/wifi-broadcast.d.ts +6 -6
- package/dist/unifi/wifi-broadcast.d.ts.map +1 -1
- package/dist/verify/cli.js.map +1 -1
- package/dist/verify/index.js.map +1 -1
- package/docs/distilled-interim.md +1 -1
- package/docs/mesh-node.md +1 -1
- package/docs/paperless.md +1 -1
- package/docs/peers.md +8 -8
- package/docs/telemetry.md +1 -1
- package/package.json +20 -20
- package/src/argocd/fake-argocd.ts +1 -1
- package/src/argocd/resource.ts +1 -1
- package/src/caddy/admin-transport-scope.test.ts +2 -2
- package/src/caddy/admin.ts +1 -1
- package/src/caddy/caddy-http-client.ts +5 -5
- package/src/caddy/config-adopt.test.ts +2 -2
- package/src/caddy/format.ts +2 -2
- package/src/caddy/local-admin.test.ts +1 -1
- package/src/ceph/auth-entity.ts +1 -1
- package/src/ceph/ceph-auth-reconcile.ts +1 -1
- package/src/cloudflare/fake-mesh.ts +1 -1
- package/src/cloudflare/fake-r2-lock.ts +1 -1
- package/src/cloudflare/mesh-node-harness.ts +1 -1
- package/src/cloudflare/mesh-node.ts +1 -1
- package/src/cloudflare/r2-bucket-lock.ts +1 -1
- package/src/discord/fake-discord.ts +1 -1
- package/src/discord/resource.ts +1 -1
- package/src/forgejo/fake-forgejo.ts +1 -1
- package/src/forgejo/resource.ts +1 -1
- package/src/google-workspace/fake-google-workspace.ts +1 -1
- package/src/google-workspace/resource.ts +1 -1
- package/src/grafana/fake-grafana.ts +1 -1
- package/src/litellm/access-group.test.ts +1 -1
- package/src/litellm/credential-errors.ts +1 -1
- package/src/litellm/credential-guards.test.ts +1 -1
- package/src/litellm/credential-operations.ts +1 -1
- package/src/litellm/credential-rewrite.test.ts +1 -1
- package/src/litellm/fake-stack.ts +1 -1
- package/src/litellm/key-errors.ts +1 -1
- package/src/litellm/key-harness.ts +1 -1
- package/src/litellm/key-operations.ts +1 -1
- package/src/litellm/key.test.ts +2 -1
- package/src/litellm/mcp-server-handlers.test.ts +1 -1
- package/src/litellm/mcp-server-registry.test.ts +1 -1
- package/src/litellm/model-operations.test.ts +1 -1
- package/src/litellm/operations.ts +1 -1
- package/src/litellm/pass-through-endpoint-delete-swallow.test.ts +1 -1
- package/src/litellm/pass-through-endpoint.test.ts +1 -1
- package/src/litellm/pass-through-fetch-client.test.ts +2 -2
- package/src/litellm/policy-attachment.test.ts +1 -1
- package/src/litellm/policy.test.ts +1 -1
- package/src/litellm/team-members.test.ts +1 -1
- package/src/litellm/team-read.test.ts +1 -1
- package/src/litellm/tool-policy.test.ts +1 -1
- package/src/litellm/toolset.test.ts +1 -1
- package/src/netbox/fake-netbox.ts +1 -1
- package/src/netbox/resource.ts +1 -1
- package/src/openbao/adopt-core.test.ts +4 -1
- package/src/openbao/adopt-families.test.ts +4 -1
- package/src/openbao/adopt-holes.test.ts +1 -1
- package/src/openbao/adopt-recovery.test.ts +24 -0
- package/src/openbao/approle-login.ts +2 -2
- package/src/openbao/auth-method-reconcile.ts +1 -1
- package/src/openbao/auth-method.ts +1 -1
- package/src/openbao/auth-role-sdk.test.ts +1 -1
- package/src/openbao/auth-role.ts +1 -1
- package/src/openbao/bao-http.test.ts +3 -3
- package/src/openbao/bao-http.ts +4 -4
- package/src/openbao/bao-identity.ts +2 -2
- package/src/openbao/cloudflare-permission-groups.ts +1 -1
- package/src/openbao/cloudflare-role-wire.ts +1 -1
- package/src/openbao/cloudflare-role.ts +1 -1
- package/src/openbao/distilled-retry.test.ts +3 -3
- package/src/openbao/distilled.test.ts +3 -3
- package/src/openbao/distilled.ts +2 -2
- package/src/openbao/fake-bao.ts +2 -2
- package/src/openbao/fake-core.ts +1 -1
- package/src/openbao/fake-engines.ts +1 -1
- package/src/openbao/fake-families.ts +1 -1
- package/src/openbao/fake-stack.ts +13 -3
- package/src/openbao/jwt-config.ts +1 -1
- package/src/openbao/jwt-role.ts +1 -1
- package/src/openbao/kubernetes-role.ts +1 -1
- package/src/openbao/mfa-enforcement.ts +1 -1
- package/src/openbao/mfa-totp.ts +1 -1
- package/src/openbao/mfa-wire.ts +1 -1
- package/src/openbao/mount-move.ts +1 -1
- package/src/openbao/mount-reconcile.ts +1 -1
- package/src/openbao/mount.ts +1 -1
- package/src/openbao/pki-role.ts +1 -1
- package/src/openbao/plugin-reconcile.ts +1 -1
- package/src/openbao/plugin-wire.ts +1 -1
- package/src/openbao/plugin.ts +1 -1
- package/src/openbao/policy.ts +1 -1
- package/src/openbao/proxmox-role.ts +1 -1
- package/src/openbao/remount-wire.ts +1 -1
- package/src/openbao/rename-occupied.test.ts +1 -1
- package/src/openbao/role-reconcile.ts +1 -1
- package/src/openbao/role-rename.test.ts +1 -1
- package/src/openbao/ssh-role.ts +1 -1
- package/src/opnsense/fake-opnsense.ts +1 -1
- package/src/opnsense/resource.ts +1 -1
- package/src/ownership/probe.ts +51 -2
- package/src/paperless/fake-paperless.ts +1 -1
- package/src/paperless/matching-types.ts +1 -1
- package/src/postgres/connection.ts +1 -1
- package/src/postgres/database-bigint-serialization.test.ts +1 -1
- package/src/postgres/database-sql.ts +1 -1
- package/src/postgres/database.ts +1 -1
- package/src/postgres/fake-grants-read.ts +1 -1
- package/src/postgres/fake-grants-sql.ts +1 -1
- package/src/postgres/fake-grants-write.ts +1 -1
- package/src/postgres/fake-role-sql.ts +1 -1
- package/src/postgres/fake-schema-drop.ts +1 -1
- package/src/postgres/fake-schema-sql.ts +1 -1
- package/src/postgres/fake-sql.ts +1 -1
- package/src/postgres/grants-existence.ts +1 -1
- package/src/postgres/grants-ops.ts +1 -1
- package/src/postgres/grants-ownership.ts +1 -1
- package/src/postgres/grants-read-defaults.ts +1 -1
- package/src/postgres/grants-read.ts +1 -1
- package/src/postgres/grants-relkind-wire.test.ts +6 -4
- package/src/postgres/installed-classifier.ts +1 -1
- package/src/postgres/psql-executor.ts +1 -6
- package/src/postgres/role-membership-sql.ts +1 -1
- package/src/postgres/role-password-transports.test.ts +2 -2
- package/src/postgres/role-sql.ts +1 -1
- package/src/postgres/role.ts +1 -1
- package/src/postgres/schema-assert.ts +1 -1
- package/src/postgres/schema-delete.ts +1 -1
- package/src/postgres/schema-drop-2bp01.test.ts +1 -1
- package/src/postgres/schema-drop-sql.ts +1 -1
- package/src/postgres/schema-drop.test.ts +1 -1
- package/src/postgres/schema-reconcile.ts +1 -1
- package/src/postgres/schema-socket.test.ts +1 -1
- package/src/postgres/schema-sql.ts +1 -1
- package/src/postgres/search-path.ts +1 -1
- package/src/proxmox/ceph-flag-wire.test.ts +1 -1
- package/src/proxmox/ceph-fs-destroy-sdk.test.ts +1 -1
- package/src/proxmox/ceph-pool-write.test.ts +1 -1
- package/src/proxmox/client.test.ts +2 -2
- package/src/proxmox/client.ts +2 -2
- package/src/proxmox/credentials.test.ts +1 -1
- package/src/proxmox/distilled-pbs.test.ts +1 -1
- package/src/proxmox/distilled-pbs.ts +1 -1
- package/src/proxmox/distilled-pve.test.ts +2 -2
- package/src/proxmox/distilled-pve.ts +1 -1
- package/src/proxmox/fake-pbs-jobs.ts +1 -1
- package/src/proxmox/fake-pve.ts +1 -1
- package/src/proxmox/lease-cache-mint.test.ts +1 -1
- package/src/proxmox/live-core-fixtures.ts +1 -1
- package/src/proxmox/lxc-distilled.test.ts +1 -1
- package/src/proxmox/lxc-harness.ts +1 -1
- package/src/proxmox/members-timeout.test.ts +3 -3
- package/src/proxmox/members.test.ts +1 -1
- package/src/proxmox/members.ts +4 -4
- package/src/proxmox/mint.ts +4 -4
- package/src/proxmox/node-network-read-failure.test.ts +1 -1
- package/src/proxmox/qemu-lifecycle.ts +1 -1
- package/src/proxmox/read-failure-propagation.test.ts +1 -1
- package/src/proxmox/resource-spec.ts +1 -1
- package/src/proxmox/storage-read-failure.test.ts +1 -1
- package/src/proxmox/typed-absence.test.ts +2 -2
- package/src/proxmox/unreadable-read.test.ts +1 -1
- package/src/proxmox/user.test.ts +1 -1
- package/src/proxmox/zfs-pool-read-failure.test.ts +1 -1
- package/src/release/adopt-parity.test.ts +3 -1
- package/src/release/apply-pins.test.ts +2 -2
- package/src/release/binary-root.test.ts +2 -2
- package/src/release/binary.ts +9 -2
- package/src/release/download.test.ts +3 -3
- package/src/release/download.ts +1 -1
- package/src/release/fake-deploy.ts +2 -2
- package/src/release/fake-engine.ts +2 -2
- package/src/release/fake-provider.ts +2 -2
- package/src/release/plan.test.ts +2 -2
- package/src/release/providers.ts +1 -1
- package/src/talos/credentials-write.test.ts +1 -1
- package/src/talos/credentials-write.ts +2 -2
- package/src/talos/credentials.test.ts +1 -1
- package/src/talos/credentials.ts +2 -2
- package/src/talos/fake-process.ts +2 -2
- package/src/talos/kubeconfig.test.ts +1 -1
- package/src/talos/machine-config-fixtures.ts +1 -1
- package/src/talos/resource.ts +1 -1
- package/src/talos/talos-bootstrap.test.ts +1 -1
- package/src/talos/talos-cluster-health.test.ts +1 -1
- package/src/talos/talosctl.ts +2 -2
- package/src/telemetry/http-client-sealing.test.ts +2 -2
- package/src/telemetry/layer.test.ts +3 -3
- package/src/telemetry/layer.ts +2 -2
- package/src/telemetry/redact-serialization.ts +2 -2
- package/src/unifi/fake-unifi.ts +1 -1
- package/src/unifi/get-only-guard.test.ts +3 -3
- package/src/unifi/resource.ts +1 -1
- package/src/verify/args.ts +1 -1
|
@@ -69,3 +69,27 @@ for (const row of FAMILIES.filter((each) => each.family !== 'Bao.MfaTotpMethod')
|
|
|
69
69
|
});
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 🔴 A DESTROY AFTER A CRASHED CREATE MUST STILL DELETE (red team, kit PR 359, 2026-10-06). The
|
|
75
|
+
* engine's deletion-recovery read (Apply.ts, a row with no attributes) shares alchemy beta.81's
|
|
76
|
+
* `provider.read` span with the create-time deferred-adoption read. Answering `Unowned` to both
|
|
77
|
+
* made the engine skip `provider.delete` and erase the row: a live object nothing tracked.
|
|
78
|
+
*/
|
|
79
|
+
/** Bao.JwtAuthConfig's delete writes nothing and Bao.MfaLoginEnforcement's refuses: no object goes. */
|
|
80
|
+
const DELETES_NOTHING = ['Bao.JwtAuthConfig', 'Bao.MfaLoginEnforcement'];
|
|
81
|
+
for (const row of FAMILIES.filter((each) => !DELETES_NOTHING.includes(each.family))) {
|
|
82
|
+
describe(`${row.family}: a destroy after an interrupted create`, () => {
|
|
83
|
+
it('deletes the object the crashed create wrote', async () => {
|
|
84
|
+
await withCrashes((crashNext) => async (stack, estate) => {
|
|
85
|
+
crashNext();
|
|
86
|
+
const destroy = RemovalPolicy.destroy;
|
|
87
|
+
await assert.rejects(stack.deploy(row.declare('X', 'a', '15m', destroy)), /injected/);
|
|
88
|
+
assert.ok(row.has(estate, 'a'));
|
|
89
|
+
const declared = row.declare('X', 'a', '15m', destroy);
|
|
90
|
+
assert.deepEqual(await stack.destroy(declared), { X: 'delete' });
|
|
91
|
+
assert.ok(!row.has(estate, 'a'), 'the destroy left the object it was asked to delete');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
* consolidation plan; not re-measured here). Give each host its own secret_id.
|
|
19
19
|
*/
|
|
20
20
|
import * as Effect from 'effect/Effect';
|
|
21
|
-
import * as FetchHttpClient from 'effect/
|
|
22
|
-
import type * as HttpClient from 'effect/
|
|
21
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
22
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
23
23
|
import type { BaoEnvironment } from './bao-address.ts';
|
|
24
24
|
import { BaoEnv, baoCall } from './bao-http.ts';
|
|
25
25
|
import type { BaoError } from './bao-status.ts';
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* to a non-auth path, and `token/` cannot move at all).
|
|
6
6
|
*/
|
|
7
7
|
import * as Effect from 'effect/Effect';
|
|
8
|
-
import type * as HttpClient from 'effect/
|
|
8
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
9
9
|
import type { Claim } from '../ownership/adopt.ts';
|
|
10
10
|
import {
|
|
11
11
|
type BaoAuthMethodAttributes,
|
|
@@ -18,7 +18,7 @@ import { Resource } from 'alchemy';
|
|
|
18
18
|
import { isResolved } from 'alchemy/Diff';
|
|
19
19
|
import * as Provider from 'alchemy/Provider';
|
|
20
20
|
import * as Effect from 'effect/Effect';
|
|
21
|
-
import type * as HttpClient from 'effect/
|
|
21
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
22
22
|
import { claimFor } from '../ownership/adopt.ts';
|
|
23
23
|
import { ownedRead } from '../ownership/probe.ts';
|
|
24
24
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -5,7 +5,7 @@ import * as RemovalPolicy from 'alchemy/RemovalPolicy';
|
|
|
5
5
|
import * as Test from 'alchemy/Test/Bun';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
import * as Layer from 'effect/Layer';
|
|
8
|
-
import * as FetchHttpClient from 'effect/
|
|
8
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
9
9
|
import { BaoAuthRole, BaoAuthRoleProvider } from './auth-role.ts';
|
|
10
10
|
import { BaoEnv } from './bao-http.ts';
|
|
11
11
|
import { type Reply, fakeBao } from './fake-bao.ts';
|
package/src/openbao/auth-role.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { Resource } from 'alchemy';
|
|
|
13
13
|
import { isResolved } from 'alchemy/Diff';
|
|
14
14
|
import * as Provider from 'alchemy/Provider';
|
|
15
15
|
import * as Effect from 'effect/Effect';
|
|
16
|
-
import type * as HttpClient from 'effect/
|
|
16
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
17
17
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
18
18
|
import { ownedRead } from '../ownership/probe.ts';
|
|
19
19
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
import assert from 'node:assert/strict';
|
|
7
7
|
import { describe, it } from 'node:test';
|
|
8
8
|
import * as Effect from 'effect/Effect';
|
|
9
|
-
import * as Headers from 'effect/
|
|
10
|
-
import * as HttpClient from 'effect/
|
|
11
|
-
import * as HttpClientResponse from 'effect/
|
|
9
|
+
import * as Headers from 'effect/http/Headers';
|
|
10
|
+
import * as HttpClient from 'effect/http/HttpClient';
|
|
11
|
+
import * as HttpClientResponse from 'effect/http/HttpClientResponse';
|
|
12
12
|
import { BaoEnv, baoDelete, baoRead, baoWrite } from './bao-http.ts';
|
|
13
13
|
import { BaoError } from './bao-status.ts';
|
|
14
14
|
import { fakeBao, run, runFailure, withFake } from './fake-bao.ts';
|
package/src/openbao/bao-http.ts
CHANGED
|
@@ -17,10 +17,10 @@ import * as Effect from 'effect/Effect';
|
|
|
17
17
|
import * as Option from 'effect/Option';
|
|
18
18
|
import * as Schedule from 'effect/Schedule';
|
|
19
19
|
import * as Semaphore from 'effect/Semaphore';
|
|
20
|
-
import * as FetchHttpClient from 'effect/
|
|
21
|
-
import * as Headers from 'effect/
|
|
22
|
-
import * as HttpClient from 'effect/
|
|
23
|
-
import * as HttpClientRequest from 'effect/
|
|
20
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
21
|
+
import * as Headers from 'effect/http/Headers';
|
|
22
|
+
import * as HttpClient from 'effect/http/HttpClient';
|
|
23
|
+
import * as HttpClientRequest from 'effect/http/HttpClientRequest';
|
|
24
24
|
import { type BaoEnvironment, headersFor, resolveAddress } from './bao-address.ts';
|
|
25
25
|
import { BaoError, type BaoIntent, settle } from './bao-status.ts';
|
|
26
26
|
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
* point: a standby forwards to the same vault.
|
|
33
33
|
*/
|
|
34
34
|
import * as Effect from 'effect/Effect';
|
|
35
|
-
import * as FetchHttpClient from 'effect/
|
|
36
|
-
import type * as HttpClient from 'effect/
|
|
35
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
36
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
37
37
|
import { type BaoEnvironment, resolveAddress } from './bao-address.ts';
|
|
38
38
|
import { BaoEnv, baoCall } from './bao-http.ts';
|
|
39
39
|
import { canonicalNamespace, envNamespace, namespaceLabel } from './bao-namespace.ts';
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import * as Context from 'effect/Context';
|
|
34
34
|
import * as Effect from 'effect/Effect';
|
|
35
|
-
import type * as HttpClient from 'effect/
|
|
35
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
36
36
|
import { baoRead } from './bao-http.ts';
|
|
37
37
|
import type { BaoError } from './bao-status.ts';
|
|
38
38
|
import { groupKey } from './cloudflare-group-scope.ts';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* of `<mount>/roles/<name>`. Split out so each can be tested against fake-bao.
|
|
4
4
|
*/
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
-
import type * as HttpClient from 'effect/
|
|
6
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
7
7
|
import { baoDelete, baoRead, baoWrite } from './bao-http.ts';
|
|
8
8
|
import type { BaoError } from './bao-status.ts';
|
|
9
9
|
import { type LiveCloudflareRole, liveRoleOf, rolePath } from './cloudflare-role-form.ts';
|
|
@@ -20,7 +20,7 @@ import { Resource } from 'alchemy';
|
|
|
20
20
|
import { isResolved } from 'alchemy/Diff';
|
|
21
21
|
import * as Provider from 'alchemy/Provider';
|
|
22
22
|
import * as Effect from 'effect/Effect';
|
|
23
|
-
import type * as HttpClient from 'effect/
|
|
23
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
24
24
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
25
25
|
import { ownedRead } from '../ownership/probe.ts';
|
|
26
26
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { expect, test } from 'bun:test';
|
|
2
2
|
import { policiesReadAclPolicy } from '@distilled.cloud/openbao/policies';
|
|
3
3
|
import * as Effect from 'effect/Effect';
|
|
4
|
-
import * as HttpClient from 'effect/
|
|
5
|
-
import { HttpClientError, TransportError } from 'effect/
|
|
6
|
-
import * as HttpClientResponse from 'effect/
|
|
4
|
+
import * as HttpClient from 'effect/http/HttpClient';
|
|
5
|
+
import { HttpClientError, TransportError } from 'effect/http/HttpClientError';
|
|
6
|
+
import * as HttpClientResponse from 'effect/http/HttpClientResponse';
|
|
7
7
|
import { readAuthRole, writeAuthRole } from './auth-role-wire.ts';
|
|
8
8
|
import { BaoEnv } from './bao-http.ts';
|
|
9
9
|
import { BaoError } from './bao-status.ts';
|
|
@@ -5,9 +5,9 @@ import { join } from 'node:path';
|
|
|
5
5
|
import { policiesReadAclPolicy, policiesWriteAclPolicy } from '@distilled.cloud/openbao/policies';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
import * as Semaphore from 'effect/Semaphore';
|
|
8
|
-
import * as Headers from 'effect/
|
|
9
|
-
import * as HttpClient from 'effect/
|
|
10
|
-
import * as HttpClientResponse from 'effect/
|
|
8
|
+
import * as Headers from 'effect/http/Headers';
|
|
9
|
+
import * as HttpClient from 'effect/http/HttpClient';
|
|
10
|
+
import * as HttpClientResponse from 'effect/http/HttpClientResponse';
|
|
11
11
|
import { BaoEnv, BaoGate, MAX_IN_FLIGHT, baoRead } from './bao-http.ts';
|
|
12
12
|
import { runBao } from './distilled.ts';
|
|
13
13
|
import { fakeBao, run, runFailure, withFake } from './fake-bao.ts';
|
package/src/openbao/distilled.ts
CHANGED
|
@@ -14,8 +14,8 @@ import type * as Duration from 'effect/Duration';
|
|
|
14
14
|
import * as Effect from 'effect/Effect';
|
|
15
15
|
import * as Redacted from 'effect/Redacted';
|
|
16
16
|
import * as Semaphore from 'effect/Semaphore';
|
|
17
|
-
import type * as HttpClient from 'effect/
|
|
18
|
-
import { isHttpClientError } from 'effect/
|
|
17
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
18
|
+
import { isHttpClientError } from 'effect/http/HttpClientError';
|
|
19
19
|
import { readBaoVariable, resolveAddress } from './bao-address.ts';
|
|
20
20
|
import {
|
|
21
21
|
BAO_TIMEOUT,
|
package/src/openbao/fake-bao.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* BAO_TOKEN in the shell running the tests can never be read or contacted.
|
|
8
8
|
*/
|
|
9
9
|
import * as Effect from 'effect/Effect';
|
|
10
|
-
import * as FetchHttpClient from 'effect/
|
|
11
|
-
import type * as HttpClient from 'effect/
|
|
10
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
11
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
12
12
|
import type { BaoEnvironment } from './bao-address.ts';
|
|
13
13
|
import { BaoEnv } from './bao-http.ts';
|
|
14
14
|
|
package/src/openbao/fake-core.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import * as Effect from 'effect/Effect';
|
|
11
11
|
import * as Layer from 'effect/Layer';
|
|
12
|
-
import * as FetchHttpClient from 'effect/
|
|
12
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
13
13
|
import type * as Output from 'alchemy/Output';
|
|
14
14
|
import { BaoAuthMethod, BaoAuthMethodProvider } from './auth-method.ts';
|
|
15
15
|
import { BaoAuthRoleProvider } from './auth-role.ts';
|
|
@@ -10,7 +10,7 @@ import * as Effect from 'effect/Effect';
|
|
|
10
10
|
import * as FileSystem from 'effect/FileSystem';
|
|
11
11
|
import * as Layer from 'effect/Layer';
|
|
12
12
|
import * as Path from 'effect/Path';
|
|
13
|
-
import * as FetchHttpClient from 'effect/
|
|
13
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
14
14
|
import type { Reply, Seen } from './fake-bao.ts';
|
|
15
15
|
import { parseDuration } from './mount-form.ts';
|
|
16
16
|
import { trimTrailing } from './mount-path.ts';
|
|
@@ -11,7 +11,7 @@ import * as RemovalPolicy from 'alchemy/RemovalPolicy';
|
|
|
11
11
|
import type * as Output from 'alchemy/Output';
|
|
12
12
|
import * as Effect from 'effect/Effect';
|
|
13
13
|
import * as Layer from 'effect/Layer';
|
|
14
|
-
import * as FetchHttpClient from 'effect/
|
|
14
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
15
15
|
import { BaoAuthRole, BaoAuthRoleProvider } from './auth-role.ts';
|
|
16
16
|
import type { Reply, Seen } from './fake-bao.ts';
|
|
17
17
|
import { type Estate, fakeEstate } from './fake-engines-roles.ts';
|
|
@@ -36,6 +36,11 @@ export type DeployOptions = { readonly adopt?: boolean };
|
|
|
36
36
|
export interface FakeStack {
|
|
37
37
|
/** Plan, then apply, `body`. Resolves to the plan; rejects with the apply's failure. */
|
|
38
38
|
readonly deploy: (body: StackBody, options?: DeployOptions) => Promise<Planned>;
|
|
39
|
+
/**
|
|
40
|
+
* `alchemy destroy` of `body`: the body is still evaluated (its declarations stay in the Stack
|
|
41
|
+
* service), and the plan is Alchemy's own `Plan.destroy`. Resolves to the plan's actions.
|
|
42
|
+
*/
|
|
43
|
+
readonly destroy: (body: StackBody) => Promise<Planned>;
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
type Node = { readonly action: string };
|
|
@@ -82,11 +87,14 @@ export const fakeStack = <ROut, E, RIn>(
|
|
|
82
87
|
* diff uses to tell reconcile it resumes an interrupted create (ownership/resume.ts).
|
|
83
88
|
* ★ `--adopt` reaches registration, plan and apply alike, as the Alchemist session provides it.
|
|
84
89
|
*/
|
|
85
|
-
const
|
|
90
|
+
const destroying = Alchemy.Plan.destroy as unknown as (
|
|
91
|
+
compiled: unknown,
|
|
92
|
+
) => Effect.Effect<PlanView, unknown, never>;
|
|
93
|
+
const run = (body: StackBody, options: DeployOptions, planner: typeof plan) =>
|
|
86
94
|
Effect.gen(function* () {
|
|
87
95
|
const compiled = yield* stack(name, { providers, state }, body);
|
|
88
96
|
return yield* Effect.gen(function* () {
|
|
89
|
-
const planned = yield*
|
|
97
|
+
const planned = yield* planner(compiled);
|
|
90
98
|
yield* apply(planned);
|
|
91
99
|
return actionsOf(planned);
|
|
92
100
|
}).pipe(provideFreshArtifactStore, Effect.provide(Layer.succeedContext(compiled.services)));
|
|
@@ -99,7 +107,9 @@ export const fakeStack = <ROut, E, RIn>(
|
|
|
99
107
|
);
|
|
100
108
|
|
|
101
109
|
return {
|
|
102
|
-
deploy: (body, options) =>
|
|
110
|
+
deploy: (body, options) =>
|
|
111
|
+
Effect.runPromise(run(body, options ?? {}, plan) as Effect.Effect<Planned>),
|
|
112
|
+
destroy: (body) => Effect.runPromise(run(body, {}, destroying) as Effect.Effect<Planned>),
|
|
103
113
|
};
|
|
104
114
|
};
|
|
105
115
|
|
|
@@ -20,7 +20,7 @@ import { Resource } from 'alchemy';
|
|
|
20
20
|
import { isResolved } from 'alchemy/Diff';
|
|
21
21
|
import * as Provider from 'alchemy/Provider';
|
|
22
22
|
import * as Effect from 'effect/Effect';
|
|
23
|
-
import type * as HttpClient from 'effect/
|
|
23
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
24
24
|
import { claimFor } from '../ownership/adopt.ts';
|
|
25
25
|
import { provingResumes } from '../ownership/resume.ts';
|
|
26
26
|
import {
|
package/src/openbao/jwt-role.ts
CHANGED
|
@@ -22,7 +22,7 @@ import { Resource } from 'alchemy';
|
|
|
22
22
|
import { isResolved } from 'alchemy/Diff';
|
|
23
23
|
import * as Provider from 'alchemy/Provider';
|
|
24
24
|
import * as Effect from 'effect/Effect';
|
|
25
|
-
import type * as HttpClient from 'effect/
|
|
25
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
26
26
|
import { claimFor } from '../ownership/adopt.ts';
|
|
27
27
|
import { provingResumes } from '../ownership/resume.ts';
|
|
28
28
|
import { baoDelete } from './bao-http.ts';
|
|
@@ -16,7 +16,7 @@ import { Resource } from 'alchemy';
|
|
|
16
16
|
import { isResolved } from 'alchemy/Diff';
|
|
17
17
|
import * as Provider from 'alchemy/Provider';
|
|
18
18
|
import * as Effect from 'effect/Effect';
|
|
19
|
-
import type * as HttpClient from 'effect/
|
|
19
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
20
20
|
import { claimFor } from '../ownership/adopt.ts';
|
|
21
21
|
import { provingResumes } from '../ownership/resume.ts';
|
|
22
22
|
import { baoDelete } from './bao-http.ts';
|
|
@@ -30,7 +30,7 @@ import { Resource } from 'alchemy';
|
|
|
30
30
|
import { isResolved } from 'alchemy/Diff';
|
|
31
31
|
import * as Provider from 'alchemy/Provider';
|
|
32
32
|
import * as Effect from 'effect/Effect';
|
|
33
|
-
import type * as HttpClient from 'effect/
|
|
33
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
34
34
|
import { type Claim, claimFor } from '../ownership/adopt.ts';
|
|
35
35
|
import { ownedRead } from '../ownership/probe.ts';
|
|
36
36
|
import { provingResumes } from '../ownership/resume.ts';
|
package/src/openbao/mfa-totp.ts
CHANGED
|
@@ -19,7 +19,7 @@ import { Resource } from 'alchemy';
|
|
|
19
19
|
import { isResolved } from 'alchemy/Diff';
|
|
20
20
|
import * as Provider from 'alchemy/Provider';
|
|
21
21
|
import * as Effect from 'effect/Effect';
|
|
22
|
-
import type * as HttpClient from 'effect/
|
|
22
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
23
23
|
import { type Claim, claimFor } from '../ownership/adopt.ts';
|
|
24
24
|
import { ownedRead } from '../ownership/probe.ts';
|
|
25
25
|
import { provingResumes } from '../ownership/resume.ts';
|
package/src/openbao/mfa-wire.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* (identity/mfa.go:172-183), which HTTP answers 204. So this never writes by id.
|
|
26
26
|
*/
|
|
27
27
|
import * as Effect from 'effect/Effect';
|
|
28
|
-
import type * as HttpClient from 'effect/
|
|
28
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
29
29
|
import { BaoEnv, baoCall, baoDelete, baoRead } from './bao-http.ts';
|
|
30
30
|
import { envNamespace, namespacePath } from './bao-namespace.ts';
|
|
31
31
|
import type { BaoError } from './bao-status.ts';
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* neither, is a refusal — "neither" in particular is exactly the empty-mount failure above.
|
|
14
14
|
*/
|
|
15
15
|
import * as Effect from 'effect/Effect';
|
|
16
|
-
import type * as HttpClient from 'effect/
|
|
16
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
17
17
|
import type { BaoError } from './bao-status.ts';
|
|
18
18
|
import { mountPath } from './mount-form.ts';
|
|
19
19
|
import { type RemountError, type RemountOptions, remountAndWait } from './remount-wire.ts';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* refusals) run against a fake server, not only in a reviewer's head.
|
|
4
4
|
*/
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
-
import type * as HttpClient from 'effect/
|
|
6
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
7
7
|
import type { Claim } from '../ownership/adopt.ts';
|
|
8
8
|
import type { BaoError } from './bao-status.ts';
|
|
9
9
|
import {
|
package/src/openbao/mount.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { Resource } from 'alchemy';
|
|
|
21
21
|
import { isResolved } from 'alchemy/Diff';
|
|
22
22
|
import * as Provider from 'alchemy/Provider';
|
|
23
23
|
import * as Effect from 'effect/Effect';
|
|
24
|
-
import type * as HttpClient from 'effect/
|
|
24
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
25
25
|
import { claimFor } from '../ownership/adopt.ts';
|
|
26
26
|
import { ownedRead } from '../ownership/probe.ts';
|
|
27
27
|
import { provingResumes } from '../ownership/resume.ts';
|
package/src/openbao/pki-role.ts
CHANGED
|
@@ -42,7 +42,7 @@ import { Resource } from 'alchemy';
|
|
|
42
42
|
import { isResolved } from 'alchemy/Diff';
|
|
43
43
|
import * as Provider from 'alchemy/Provider';
|
|
44
44
|
import * as Effect from 'effect/Effect';
|
|
45
|
-
import type * as HttpClient from 'effect/
|
|
45
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
46
46
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
47
47
|
import { ownedRead } from '../ownership/probe.ts';
|
|
48
48
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* be run against a fake server rather than only reasoned about.
|
|
4
4
|
*/
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
-
import type * as HttpClient from 'effect/
|
|
6
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
7
7
|
import type { Claim } from '../ownership/adopt.ts';
|
|
8
8
|
import type { BaoError } from './bao-status.ts';
|
|
9
9
|
import {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* token without it reads as 403, which is an error here, never "absent".
|
|
13
13
|
*/
|
|
14
14
|
import type * as Effect from 'effect/Effect';
|
|
15
|
-
import type * as HttpClient from 'effect/
|
|
15
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
16
16
|
import { baoDelete, baoRead, baoWrite } from './bao-http.ts';
|
|
17
17
|
import type { BaoError } from './bao-status.ts';
|
|
18
18
|
import {
|
package/src/openbao/plugin.ts
CHANGED
|
@@ -23,7 +23,7 @@ import { Resource } from 'alchemy';
|
|
|
23
23
|
import { isResolved } from 'alchemy/Diff';
|
|
24
24
|
import * as Provider from 'alchemy/Provider';
|
|
25
25
|
import * as Effect from 'effect/Effect';
|
|
26
|
-
import type * as HttpClient from 'effect/
|
|
26
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
27
27
|
import { claimFor } from '../ownership/adopt.ts';
|
|
28
28
|
import { ownedRead } from '../ownership/probe.ts';
|
|
29
29
|
import { provingResumes } from '../ownership/resume.ts';
|
package/src/openbao/policy.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as Provider from 'alchemy/Provider';
|
|
|
4
4
|
import * as Effect from 'effect/Effect';
|
|
5
5
|
import * as FileSystem from 'effect/FileSystem';
|
|
6
6
|
import * as Path from 'effect/Path';
|
|
7
|
-
import type * as HttpClient from 'effect/
|
|
7
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
8
8
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
9
9
|
import { ownedRead } from '../ownership/probe.ts';
|
|
10
10
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -39,7 +39,7 @@ import { Resource } from 'alchemy';
|
|
|
39
39
|
import { isResolved } from 'alchemy/Diff';
|
|
40
40
|
import * as Provider from 'alchemy/Provider';
|
|
41
41
|
import * as Effect from 'effect/Effect';
|
|
42
|
-
import type * as HttpClient from 'effect/
|
|
42
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
43
43
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
44
44
|
import { ownedRead } from '../ownership/probe.ts';
|
|
45
45
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* ⛔ POLICIES ARE NOT REWRITTEN. Every ACL path naming the old mount keeps naming it.
|
|
19
19
|
*/
|
|
20
20
|
import * as Effect from 'effect/Effect';
|
|
21
|
-
import type * as HttpClient from 'effect/
|
|
21
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
22
22
|
import { baoCall, baoRead } from './bao-http.ts';
|
|
23
23
|
import type { BaoError } from './bao-status.ts';
|
|
24
24
|
|
|
@@ -10,7 +10,7 @@ import * as Output from 'alchemy/Output';
|
|
|
10
10
|
import * as RemovalPolicy from 'alchemy/RemovalPolicy';
|
|
11
11
|
import * as Effect from 'effect/Effect';
|
|
12
12
|
import * as Layer from 'effect/Layer';
|
|
13
|
-
import * as FetchHttpClient from 'effect/
|
|
13
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
14
14
|
import { groupKey } from './cloudflare-group-scope.ts';
|
|
15
15
|
import { CloudflarePermissionGroups } from './cloudflare-permission-groups.ts';
|
|
16
16
|
import { BaoCloudflareRole, BaoCloudflareRoleProvider } from './cloudflare-role.ts';
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* so the refusal is seen at the next deploy instead of hiding behind a clean plan.
|
|
15
15
|
*/
|
|
16
16
|
import * as Effect from 'effect/Effect';
|
|
17
|
-
import type * as HttpClient from 'effect/
|
|
17
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
18
18
|
import type { Claim, Owner } from '../ownership/adopt.ts';
|
|
19
19
|
import { ownedRead } from '../ownership/probe.ts';
|
|
20
20
|
import { baoRead, baoWrite } from './bao-http.ts';
|
|
@@ -9,7 +9,7 @@ import * as Output from 'alchemy/Output';
|
|
|
9
9
|
import * as RemovalPolicy from 'alchemy/RemovalPolicy';
|
|
10
10
|
import * as Effect from 'effect/Effect';
|
|
11
11
|
import * as Layer from 'effect/Layer';
|
|
12
|
-
import * as FetchHttpClient from 'effect/
|
|
12
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
13
13
|
import { groupKey } from './cloudflare-group-scope.ts';
|
|
14
14
|
import { CloudflarePermissionGroups } from './cloudflare-permission-groups.ts';
|
|
15
15
|
import { BaoCloudflareRole, BaoCloudflareRoleProvider } from './cloudflare-role.ts';
|
package/src/openbao/ssh-role.ts
CHANGED
|
@@ -35,7 +35,7 @@ import { Resource } from 'alchemy';
|
|
|
35
35
|
import { isResolved } from 'alchemy/Diff';
|
|
36
36
|
import * as Provider from 'alchemy/Provider';
|
|
37
37
|
import * as Effect from 'effect/Effect';
|
|
38
|
-
import type * as HttpClient from 'effect/
|
|
38
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
39
39
|
import { refuseTakeover } from '../ownership/adopt.ts';
|
|
40
40
|
import { ownedRead } from '../ownership/probe.ts';
|
|
41
41
|
import { provingResumes } from '../ownership/resume.ts';
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { type Credentials, credentials } from '@distilled.cloud/opnsense/Credentials';
|
|
13
13
|
import * as Layer from 'effect/Layer';
|
|
14
|
-
import * as FetchHttpClient from 'effect/
|
|
14
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
15
15
|
|
|
16
16
|
export const FAKE_BASE = 'https://opnsense.example.com';
|
|
17
17
|
export const FAKE_KEY = 'placeholder-opnsense-key';
|
package/src/opnsense/resource.ts
CHANGED
|
@@ -28,7 +28,7 @@ import { isResolved } from 'alchemy/Diff';
|
|
|
28
28
|
import type { Input } from 'alchemy/Input';
|
|
29
29
|
import type { OpnsenseOpContext } from '@distilled.cloud/opnsense/Protocol';
|
|
30
30
|
import * as Effect from 'effect/Effect';
|
|
31
|
-
import type * as HttpClient from 'effect/
|
|
31
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
32
32
|
import { CredentialsFromEnv } from './credentials.ts';
|
|
33
33
|
import { refuseWrite } from './policy.ts';
|
|
34
34
|
|
package/src/ownership/probe.ts
CHANGED
|
@@ -24,8 +24,50 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { Unowned } from 'alchemy/AdoptPolicy';
|
|
26
26
|
import * as Effect from 'effect/Effect';
|
|
27
|
+
import * as Option from 'effect/Option';
|
|
28
|
+
import type * as Tracer from 'effect/Tracer';
|
|
27
29
|
import type { Owner } from './adopt.ts';
|
|
28
|
-
import {
|
|
30
|
+
import { resumes } from './resume.ts';
|
|
31
|
+
import { forgetRefusedCreate, recordedInstance } from './rows.ts';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Whether this read is APPLY's own (Apply.ts `instrumentLifecycle` wraps every apply-time lifecycle
|
|
35
|
+
* call in a `provider.read` span; the plan's reads run outside one).
|
|
36
|
+
* ⛔ AN APPLY-TIME READ WITH NO ATTRIBUTES PROVES NOTHING. 🔴 MEASURED 2026-10-06 (alchemy
|
|
37
|
+
* 2.0.0-beta.81, openbao/adopt-core.test.ts and nine more suites): beta.81 asks the provider to
|
|
38
|
+
* read at APPLY for a create whose props were still Outputs at plan (Plan.ts `deferredAdoption`),
|
|
39
|
+
* and first overwrites the `creating` row with the NOW-RESOLVED props (Apply.ts `checkpoint`). That
|
|
40
|
+
* row is whole, so `provenOurs` read the live object as matching it, and another owner's object
|
|
41
|
+
* was taken over with no `--adopt`. Answering `Unowned` here hands the decision back to the engine,
|
|
42
|
+
* which refuses it ("Cannot adopt resource … Re-run with `--adopt`") unless adoption is on.
|
|
43
|
+
* ★ THE ONE PROOF AN APPLY-TIME READ MAY USE IS THE PLAN'S: the diff's own recovery read noted this
|
|
44
|
+
* instance as a proven resume (resume.ts), and that note is what `resumes` answers.
|
|
45
|
+
* ⛔ ONLY THE CREATE'S OWN READ, NOT THE DELETE PATH'S. beta.81 wraps BOTH in a `provider.read`
|
|
46
|
+
* span: the deferred-adoption read runs inside `apply.resource` (the create's span), while the
|
|
47
|
+
* deletion recovery read (Apply.ts, a row to delete that never recorded attributes) runs in
|
|
48
|
+
* collectGarbage, under no such span. 🔴 Treating the second as the first answered `Unowned` for
|
|
49
|
+
* our own interrupted create: the engine skipped `provider.delete` and erased the row, leaving a
|
|
50
|
+
* live object nothing tracked (red team, kit PR 359, 2026-10-06; adopt-recovery.test.ts). The
|
|
51
|
+
* delete's recovery read keeps the state-row proof (`recordedInstance` + `settled`), as before.
|
|
52
|
+
*/
|
|
53
|
+
const inApplyResource = (span: Tracer.AnySpan | undefined): boolean => {
|
|
54
|
+
let at = span;
|
|
55
|
+
while (at !== undefined && at._tag === 'Span') {
|
|
56
|
+
if (at.name === 'apply.resource') return true;
|
|
57
|
+
at = Option.getOrUndefined(at.parent);
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const isCreatesRead = (span: Option.Option<Tracer.Span>): boolean => {
|
|
63
|
+
const current = Option.getOrUndefined(span);
|
|
64
|
+
return current?.name === 'provider.read' && inApplyResource(current);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const readsAtApply: Effect.Effect<boolean> = Effect.map(
|
|
68
|
+
Effect.option(Effect.currentSpan),
|
|
69
|
+
isCreatesRead,
|
|
70
|
+
);
|
|
29
71
|
|
|
30
72
|
/**
|
|
31
73
|
* Whether the state store proves the live object this instance's own: a row records `ask.instanceId`
|
|
@@ -42,6 +84,7 @@ export const provenOurs = <E, R>(
|
|
|
42
84
|
settled: Effect.Effect<boolean, E, R>,
|
|
43
85
|
): Effect.Effect<boolean, never, R> =>
|
|
44
86
|
Effect.gen(function* () {
|
|
87
|
+
if (yield* readsAtApply) return yield* resumes(ask.instanceId);
|
|
45
88
|
const recorded = yield* recordedInstance(ask.fqn, ask.instanceId);
|
|
46
89
|
if (recorded === 'absent') return false;
|
|
47
90
|
if (recorded === 'partial') {
|
|
@@ -74,5 +117,11 @@ export const ownedRead = <A extends object, E, R>(
|
|
|
74
117
|
): Effect.Effect<A | undefined, never, R> =>
|
|
75
118
|
Effect.gen(function* () {
|
|
76
119
|
if (found === undefined || ask.output !== undefined) return found;
|
|
77
|
-
|
|
120
|
+
if (yield* provenOurs(ask, settled)) return found;
|
|
121
|
+
// ⛔ THE ENGINE'S OWN REFUSAL LEAVES ITS `creating` CHECKPOINT BEHIND (Apply.ts), now holding the
|
|
122
|
+
// RESOLVED props: a whole row, which the next plan's recovery read would take as proof and
|
|
123
|
+
// adopt exactly what was refused. Forgotten here, as adopt.ts refuseTakeover does for its own
|
|
124
|
+
// refusal; under --adopt the engine's later `created` commit writes the row again.
|
|
125
|
+
if (yield* readsAtApply) yield* forgetRefusedCreate(ask.fqn, ask.instanceId);
|
|
126
|
+
return Unowned(found);
|
|
78
127
|
});
|
|
@@ -18,7 +18,7 @@ import { type Credentials, credentials } from '@distilled.cloud/paperless-ngx/Cr
|
|
|
18
18
|
import type { PaperlessNgxOpContext } from '@distilled.cloud/paperless-ngx/Protocol';
|
|
19
19
|
import * as Effect from 'effect/Effect';
|
|
20
20
|
import * as Layer from 'effect/Layer';
|
|
21
|
-
import * as FetchHttpClient from 'effect/
|
|
21
|
+
import * as FetchHttpClient from 'effect/http/FetchHttpClient';
|
|
22
22
|
|
|
23
23
|
export const FAKE_BASE = 'https://paperless.example.com';
|
|
24
24
|
export const FAKE_TOKEN = 'placeholder-paperless-token';
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { PaperlessNgxOpContext } from '@distilled.cloud/paperless-ngx/Protocol';
|
|
16
16
|
import type * as Effect from 'effect/Effect';
|
|
17
|
-
import type * as HttpClient from 'effect/
|
|
17
|
+
import type * as HttpClient from 'effect/http/HttpClient';
|
|
18
18
|
import type { EndpointKey, PaperlessBody } from './constraints.ts';
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -17,7 +17,7 @@ import * as PgClient from '@effect/sql-pg/PgClient';
|
|
|
17
17
|
import * as Context from 'effect/Context';
|
|
18
18
|
import * as Effect from 'effect/Effect';
|
|
19
19
|
import * as Layer from 'effect/Layer';
|
|
20
|
-
import type { SqlError } from 'effect/
|
|
20
|
+
import type { SqlError } from 'effect/sql/SqlError';
|
|
21
21
|
import type { PgExecutor } from './database-sql.ts';
|
|
22
22
|
import { type PsqlRunner, makePsqlExecutor } from './psql-executor.ts';
|
|
23
23
|
import { pinnedSocketExecutor } from './search-path.ts';
|