@aithos/sdk 0.1.0-alpha.6 → 0.1.0-alpha.60

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.
Files changed (105) hide show
  1. package/README.md +202 -7
  2. package/dist/src/agent-dispatch.d.ts +18 -0
  3. package/dist/src/agent-dispatch.js +178 -0
  4. package/dist/src/agent-loop.d.ts +94 -0
  5. package/dist/src/agent-loop.js +95 -0
  6. package/dist/src/agent-tools.d.ts +24 -0
  7. package/dist/src/agent-tools.js +147 -0
  8. package/dist/src/apps.d.ts +224 -0
  9. package/dist/src/apps.js +432 -0
  10. package/dist/src/assets.d.ts +225 -0
  11. package/dist/src/assets.js +534 -0
  12. package/dist/src/auth-api.d.ts +219 -0
  13. package/dist/src/auth-api.js +248 -0
  14. package/dist/src/auth.d.ts +591 -0
  15. package/dist/src/auth.js +947 -31
  16. package/dist/src/compute.d.ts +674 -6
  17. package/dist/src/compute.js +968 -20
  18. package/dist/src/data-schema-contacts-v1.d.ts +14 -0
  19. package/dist/src/data-schema-contacts-v1.js +28 -0
  20. package/dist/src/data.d.ts +368 -0
  21. package/dist/src/data.js +1124 -0
  22. package/dist/src/endpoints.d.ts +43 -0
  23. package/dist/src/endpoints.js +23 -0
  24. package/dist/src/ethos.d.ts +85 -0
  25. package/dist/src/ethos.js +463 -7
  26. package/dist/src/index.d.ts +22 -4
  27. package/dist/src/index.js +47 -2
  28. package/dist/src/internal/cmk-wrap.d.ts +41 -0
  29. package/dist/src/internal/cmk-wrap.js +132 -0
  30. package/dist/src/internal/delegate-bundle.js +7 -2
  31. package/dist/src/internal/envelope.d.ts +93 -0
  32. package/dist/src/internal/envelope.js +59 -0
  33. package/dist/src/internal/owner-signers.d.ts +5 -2
  34. package/dist/src/internal/owner-signers.js +22 -1
  35. package/dist/src/internal/recovery-file.d.ts +2 -0
  36. package/dist/src/internal/recovery-file.js +7 -0
  37. package/dist/src/key-store.d.ts +10 -0
  38. package/dist/src/key-store.js +6 -0
  39. package/dist/src/mandates.d.ts +58 -1
  40. package/dist/src/mandates.js +46 -3
  41. package/dist/src/migrate.d.ts +105 -0
  42. package/dist/src/migrate.js +367 -0
  43. package/dist/src/react/AithosAsset.d.ts +66 -0
  44. package/dist/src/react/AithosAsset.js +67 -0
  45. package/dist/src/react/context.d.ts +29 -0
  46. package/dist/src/react/context.js +31 -0
  47. package/dist/src/react/index.d.ts +29 -0
  48. package/dist/src/react/index.js +31 -0
  49. package/dist/src/react/use-aithos-asset.d.ts +39 -0
  50. package/dist/src/react/use-aithos-asset.js +118 -0
  51. package/dist/src/react/use-transcribe-pending.d.ts +21 -0
  52. package/dist/src/react/use-transcribe-pending.js +47 -0
  53. package/dist/src/rotate.d.ts +94 -0
  54. package/dist/src/rotate.js +298 -0
  55. package/dist/src/sdk.d.ts +36 -2
  56. package/dist/src/sdk.js +72 -1
  57. package/dist/src/transcribe-resilience.d.ts +57 -0
  58. package/dist/src/transcribe-resilience.js +203 -0
  59. package/dist/src/web.d.ts +279 -0
  60. package/dist/src/web.js +186 -0
  61. package/dist/test/agent-dispatch.test.d.ts +2 -0
  62. package/dist/test/agent-dispatch.test.js +222 -0
  63. package/dist/test/agent-loop.test.d.ts +2 -0
  64. package/dist/test/agent-loop.test.js +117 -0
  65. package/dist/test/agent-tools.test.d.ts +2 -0
  66. package/dist/test/agent-tools.test.js +50 -0
  67. package/dist/test/auth-j3.test.js +32 -1
  68. package/dist/test/canonical-conformance.test.d.ts +2 -0
  69. package/dist/test/canonical-conformance.test.js +86 -0
  70. package/dist/test/compute-delegate-path.test.d.ts +2 -0
  71. package/dist/test/compute-delegate-path.test.js +183 -0
  72. package/dist/test/compute.test.js +4 -0
  73. package/dist/test/converse.test.d.ts +2 -0
  74. package/dist/test/converse.test.js +162 -0
  75. package/dist/test/data-sphere.test.d.ts +2 -0
  76. package/dist/test/data-sphere.test.js +57 -0
  77. package/dist/test/endpoints.test.js +40 -1
  78. package/dist/test/envelope-core-conformance.test.d.ts +2 -0
  79. package/dist/test/envelope-core-conformance.test.js +75 -0
  80. package/dist/test/envelope.test.d.ts +2 -0
  81. package/dist/test/envelope.test.js +318 -0
  82. package/dist/test/ethos-first-edition.test.d.ts +2 -0
  83. package/dist/test/ethos-first-edition.test.js +371 -0
  84. package/dist/test/invoke-turn-sdk.test.d.ts +2 -0
  85. package/dist/test/invoke-turn-sdk.test.js +177 -0
  86. package/dist/test/migrate.test.d.ts +2 -0
  87. package/dist/test/migrate.test.js +340 -0
  88. package/dist/test/owner-data-client.test.d.ts +2 -0
  89. package/dist/test/owner-data-client.test.js +88 -0
  90. package/dist/test/rotate-ethos.test.d.ts +2 -0
  91. package/dist/test/rotate-ethos.test.js +151 -0
  92. package/dist/test/rotate.test.d.ts +2 -0
  93. package/dist/test/rotate.test.js +63 -0
  94. package/dist/test/schema-autoresolve.test.d.ts +2 -0
  95. package/dist/test/schema-autoresolve.test.js +146 -0
  96. package/dist/test/sdk.test.js +11 -2
  97. package/dist/test/signup-bootstrap.test.d.ts +2 -0
  98. package/dist/test/signup-bootstrap.test.js +311 -0
  99. package/dist/test/transcribe-invoke.test.d.ts +2 -0
  100. package/dist/test/transcribe-invoke.test.js +204 -0
  101. package/dist/test/transcribe.test.d.ts +2 -0
  102. package/dist/test/transcribe.test.js +186 -0
  103. package/dist/test/web.test.d.ts +2 -0
  104. package/dist/test/web.test.js +270 -0
  105. package/package.json +20 -3
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `@aithos/sdk/react` — React bindings for the Aithos SDK.
3
+ *
4
+ * Drop-in components and hooks for displaying Aithos-hosted assets in
5
+ * React applications. The package's only peer dependency beyond
6
+ * `@aithos/sdk` itself is `react` (^18 || ^19).
7
+ *
8
+ * Quick start:
9
+ *
10
+ * // 1. Wrap your tree once
11
+ * <AssetsClientProvider client={sdk.assets}>
12
+ * <App />
13
+ * </AssetsClientProvider>
14
+ *
15
+ * // 2. Use anywhere
16
+ * <AithosAsset urn={cv.urn} alt="CV" className="w-full" />
17
+ * <AithosAsset urn={video.urn} as="video" controls />
18
+ * <AithosAsset urn={pdf.urn} as="download" filename="cv.pdf">
19
+ * Download my CV
20
+ * </AithosAsset>
21
+ *
22
+ * // 3. Or use the hook directly for custom rendering
23
+ * const { url, bytes, loading, error } = useAithosAsset(urn);
24
+ */
25
+ export { AssetsClientProvider, useAssetsClient, type AssetsClientProviderProps, } from "./context.js";
26
+ export { useAithosAsset, type UseAithosAssetState, type UseAithosAssetOptions, } from "./use-aithos-asset.js";
27
+ export { AithosAsset, type AithosAssetProps, type AithosImageProps, type AithosVideoProps, type AithosAudioProps, type AithosDownloadProps, } from "./AithosAsset.js";
28
+ export { useAithosTranscribePendingJobs, type UseAithosTranscribePendingJobs, } from "./use-transcribe-pending.js";
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright 2026 Mathieu Colla
3
+ /**
4
+ * `@aithos/sdk/react` — React bindings for the Aithos SDK.
5
+ *
6
+ * Drop-in components and hooks for displaying Aithos-hosted assets in
7
+ * React applications. The package's only peer dependency beyond
8
+ * `@aithos/sdk` itself is `react` (^18 || ^19).
9
+ *
10
+ * Quick start:
11
+ *
12
+ * // 1. Wrap your tree once
13
+ * <AssetsClientProvider client={sdk.assets}>
14
+ * <App />
15
+ * </AssetsClientProvider>
16
+ *
17
+ * // 2. Use anywhere
18
+ * <AithosAsset urn={cv.urn} alt="CV" className="w-full" />
19
+ * <AithosAsset urn={video.urn} as="video" controls />
20
+ * <AithosAsset urn={pdf.urn} as="download" filename="cv.pdf">
21
+ * Download my CV
22
+ * </AithosAsset>
23
+ *
24
+ * // 3. Or use the hook directly for custom rendering
25
+ * const { url, bytes, loading, error } = useAithosAsset(urn);
26
+ */
27
+ export { AssetsClientProvider, useAssetsClient, } from "./context.js";
28
+ export { useAithosAsset, } from "./use-aithos-asset.js";
29
+ export { AithosAsset, } from "./AithosAsset.js";
30
+ export { useAithosTranscribePendingJobs, } from "./use-transcribe-pending.js";
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,39 @@
1
+ import type { AssetsClient } from "../assets.js";
2
+ export interface UseAithosAssetState {
3
+ /** A `blob:` URL pointing at the decrypted plaintext. Use in <img src=…> etc. */
4
+ readonly url: string | null;
5
+ /** Raw decrypted bytes. Use when you need the binary itself (e.g. PDF viewer). */
6
+ readonly bytes: Uint8Array | null;
7
+ /** IANA media type — useful for routing rendering. */
8
+ readonly mediaType: string | null;
9
+ /** Plaintext size in bytes. */
10
+ readonly sizeBytes: number | null;
11
+ /** True while the fetch+decrypt is in flight. */
12
+ readonly loading: boolean;
13
+ /** Non-null when the fetch/decrypt failed. */
14
+ readonly error: Error | null;
15
+ }
16
+ export interface UseAithosAssetOptions {
17
+ /** Override the client from context. Useful for tests. */
18
+ readonly client?: AssetsClient | null;
19
+ /**
20
+ * If `true`, the hook keeps the previous blob URL visible while a
21
+ * new URN is being fetched, instead of flashing `null`. Default
22
+ * `false` (more predictable, less visual stutter avoidance).
23
+ */
24
+ readonly keepPreviousOnUrnChange?: boolean;
25
+ }
26
+ /**
27
+ * Fetch + decrypt an Aithos asset and return a stable `blob:` URL.
28
+ *
29
+ * Lifecycle:
30
+ * - On mount or when `urn` changes, runs `client.fetch(urn)`.
31
+ * - On success, creates an object URL from the plaintext bytes.
32
+ * - On unmount or before refetching, revokes the URL to free memory.
33
+ * - Cancels in-flight fetches if the URN changes mid-flight.
34
+ *
35
+ * Throws (via `error`) when no client is available — supply one via
36
+ * `<AssetsClientProvider>` or the `client` option.
37
+ */
38
+ export declare function useAithosAsset(urn: string | null | undefined, options?: UseAithosAssetOptions): UseAithosAssetState;
39
+ //# sourceMappingURL=use-aithos-asset.d.ts.map
@@ -0,0 +1,118 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright 2026 Mathieu Colla
3
+ /**
4
+ * `useAithosAsset(urn)` — React hook that fetches an asset and exposes
5
+ * it as a browser-consumable `blob:` URL, with full lifecycle
6
+ * management (revoke on unmount, race-cancel on URN change, error
7
+ * surfacing).
8
+ *
9
+ * For most UIs the higher-level `<AithosAsset>` component is enough.
10
+ * Reach for this hook directly when you want to feed the bytes or the
11
+ * blob URL to a non-`<img>`/`<video>`/`<audio>` consumer — e.g. an
12
+ * inline CSS `background-image`, a Canvas, a custom PDF viewer.
13
+ */
14
+ import { useEffect, useState } from "react";
15
+ import { useAssetsClient } from "./context.js";
16
+ /**
17
+ * Fetch + decrypt an Aithos asset and return a stable `blob:` URL.
18
+ *
19
+ * Lifecycle:
20
+ * - On mount or when `urn` changes, runs `client.fetch(urn)`.
21
+ * - On success, creates an object URL from the plaintext bytes.
22
+ * - On unmount or before refetching, revokes the URL to free memory.
23
+ * - Cancels in-flight fetches if the URN changes mid-flight.
24
+ *
25
+ * Throws (via `error`) when no client is available — supply one via
26
+ * `<AssetsClientProvider>` or the `client` option.
27
+ */
28
+ export function useAithosAsset(urn, options = {}) {
29
+ const contextClient = useAssetsClient();
30
+ const client = options.client ?? contextClient;
31
+ const [state, setState] = useState({
32
+ url: null,
33
+ bytes: null,
34
+ mediaType: null,
35
+ sizeBytes: null,
36
+ loading: !!urn,
37
+ error: null,
38
+ });
39
+ useEffect(() => {
40
+ if (!urn) {
41
+ setState({
42
+ url: null,
43
+ bytes: null,
44
+ mediaType: null,
45
+ sizeBytes: null,
46
+ loading: false,
47
+ error: null,
48
+ });
49
+ return;
50
+ }
51
+ if (!client) {
52
+ setState({
53
+ url: null,
54
+ bytes: null,
55
+ mediaType: null,
56
+ sizeBytes: null,
57
+ loading: false,
58
+ error: new Error("useAithosAsset: no AssetsClient available — wrap your tree with <AssetsClientProvider> or pass the `client` option"),
59
+ });
60
+ return;
61
+ }
62
+ let cancelled = false;
63
+ let createdUrl = null;
64
+ setState((prev) => options.keepPreviousOnUrnChange
65
+ ? { ...prev, loading: true, error: null }
66
+ : {
67
+ url: null,
68
+ bytes: null,
69
+ mediaType: null,
70
+ sizeBytes: null,
71
+ loading: true,
72
+ error: null,
73
+ });
74
+ (async () => {
75
+ try {
76
+ const result = await client.fetch(urn);
77
+ if (cancelled)
78
+ return;
79
+ // Construct the blob: URL the DOM can consume.
80
+ // The `as BlobPart` cast is needed because @types/node and
81
+ // lib.dom disagree on whether Uint8Array's backing buffer is
82
+ // always ArrayBuffer (vs SharedArrayBuffer). The runtime
83
+ // accepts our Uint8Array unconditionally.
84
+ const blob = new Blob([result.bytes], {
85
+ type: result.mediaType,
86
+ });
87
+ createdUrl = URL.createObjectURL(blob);
88
+ setState({
89
+ url: createdUrl,
90
+ bytes: result.bytes,
91
+ mediaType: result.mediaType,
92
+ sizeBytes: result.sizeBytes,
93
+ loading: false,
94
+ error: null,
95
+ });
96
+ }
97
+ catch (e) {
98
+ if (cancelled)
99
+ return;
100
+ setState({
101
+ url: null,
102
+ bytes: null,
103
+ mediaType: null,
104
+ sizeBytes: null,
105
+ loading: false,
106
+ error: e instanceof Error ? e : new Error(String(e)),
107
+ });
108
+ }
109
+ })();
110
+ return () => {
111
+ cancelled = true;
112
+ if (createdUrl)
113
+ URL.revokeObjectURL(createdUrl);
114
+ };
115
+ }, [urn, client, options.keepPreviousOnUrnChange]);
116
+ return state;
117
+ }
118
+ //# sourceMappingURL=use-aithos-asset.js.map
@@ -0,0 +1,21 @@
1
+ import type { ComputeNamespace, InvokeTranscribeResult, TranscribeProgressState } from "../compute.js";
2
+ import type { LocalPendingEntry } from "../transcribe-resilience.js";
3
+ export interface UseAithosTranscribePendingJobs {
4
+ /** Locally-tracked in-flight jobs (survives reloads via localStorage). */
5
+ readonly pending: readonly LocalPendingEntry[];
6
+ /** Resume polling a job by id; resolves with the final transcript. */
7
+ readonly resume: (jobId: string, opts?: {
8
+ readonly mandateId?: string;
9
+ readonly onProgress?: (state: TranscribeProgressState) => void;
10
+ readonly signal?: AbortSignal;
11
+ readonly pollIntervalMs?: number;
12
+ }) => Promise<InvokeTranscribeResult>;
13
+ }
14
+ /**
15
+ * Subscribe a React component to the SDK's local pending-transcription
16
+ * registry. Re-renders whenever a job is added, advances, or clears.
17
+ *
18
+ * @param compute the SDK compute namespace (`sdk.compute`).
19
+ */
20
+ export declare function useAithosTranscribePendingJobs(compute: ComputeNamespace): UseAithosTranscribePendingJobs;
21
+ //# sourceMappingURL=use-transcribe-pending.d.ts.map
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ // Copyright 2026 Mathieu Colla
3
+ /**
4
+ * `useAithosTranscribePendingJobs(sdk.compute)` — a thin React adapter over
5
+ * the framework-agnostic local pending-jobs tracker exposed by the compute
6
+ * namespace. The tracker itself (subscribe/getSnapshot) is plain vanilla JS
7
+ * and works with any framework; this hook just wires it into React's
8
+ * `useSyncExternalStore`. Vue/Svelte/vanilla users can call
9
+ * `sdk.compute.subscribeLocalPendingTranscribes` directly.
10
+ *
11
+ * function PendingBanner({ sdk }) {
12
+ * const { pending, resume } = useAithosTranscribePendingJobs(sdk.compute);
13
+ * if (pending.length === 0) return null;
14
+ * return (
15
+ * <div>
16
+ * {pending.map((p) => (
17
+ * <button key={p.jobId} onClick={() => resume(p.jobId)}>
18
+ * Resume {p.jobId} ({p.status})
19
+ * </button>
20
+ * ))}
21
+ * </div>
22
+ * );
23
+ * }
24
+ */
25
+ import { useCallback, useEffect, useState } from "react";
26
+ /**
27
+ * Subscribe a React component to the SDK's local pending-transcription
28
+ * registry. Re-renders whenever a job is added, advances, or clears.
29
+ *
30
+ * @param compute the SDK compute namespace (`sdk.compute`).
31
+ */
32
+ export function useAithosTranscribePendingJobs(compute) {
33
+ const [pending, setPending] = useState(() => compute.getLocalPendingTranscribesSnapshot());
34
+ useEffect(() => {
35
+ // Sync immediately (the snapshot may have changed before mount) then
36
+ // subscribe. getSnapshot returns a stable reference between mutations,
37
+ // so identical states bail out of a re-render.
38
+ setPending(compute.getLocalPendingTranscribesSnapshot());
39
+ const unsubscribe = compute.subscribeLocalPendingTranscribes(() => {
40
+ setPending(compute.getLocalPendingTranscribesSnapshot());
41
+ });
42
+ return unsubscribe;
43
+ }, [compute]);
44
+ const resume = useCallback((jobId, opts) => compute.resumeTranscribe(jobId, opts), [compute]);
45
+ return { pending, resume };
46
+ }
47
+ //# sourceMappingURL=use-transcribe-pending.js.map
@@ -0,0 +1,94 @@
1
+ /** Raw 32-byte seeds for a rotation. `root` is unchanged; the rest are new. */
2
+ export interface RotationSeeds {
3
+ readonly root: Uint8Array;
4
+ readonly public: Uint8Array;
5
+ readonly circle: Uint8Array;
6
+ readonly self: Uint8Array;
7
+ /** Optional dedicated #data sphere (added if present). */
8
+ readonly data?: Uint8Array;
9
+ }
10
+ interface VerificationMethodLike {
11
+ id: string;
12
+ type: "Ed25519VerificationKey2020" | "X25519KeyAgreementKey2020";
13
+ controller: string;
14
+ publicKeyMultibase: string;
15
+ }
16
+ /** Minimal structural view of a did.json (browser-safe; no node import). */
17
+ export interface DidDocumentLike {
18
+ "@context": readonly string[];
19
+ id: string;
20
+ verificationMethod: readonly VerificationMethodLike[];
21
+ keyAgreement?: readonly VerificationMethodLike[];
22
+ aithos: {
23
+ version: "0.1.0";
24
+ display_name?: string;
25
+ created_at: string;
26
+ rotated: readonly unknown[];
27
+ };
28
+ proof?: unknown;
29
+ }
30
+ /**
31
+ * Build + sign a rotated did.json. The result rotates every Ethos sphere whose
32
+ * seed differs from the previously-published key, appends one `rotated[]` entry
33
+ * per changed sphere (preserving prior history), carries / adds `#data`, and is
34
+ * signed by `#root`. Ready to POST via `aithos.rotate_sphere_key`.
35
+ *
36
+ * @param seeds the post-rotation seeds (same root, new sphere seeds).
37
+ * @param previousDoc the currently-published did.json (old pubkeys + history).
38
+ * @param displayName display name to carry on the doc.
39
+ * @param reason audit reason recorded on each new rotated entry.
40
+ */
41
+ export declare function buildSignedRotatedDidDocument(seeds: RotationSeeds, previousDoc: DidDocumentLike, displayName: string, reason?: string): DidDocumentLike;
42
+ import { type RekeyReport } from "./migrate.js";
43
+ import { type ParsedRecoveryFile } from "./internal/recovery-file.js";
44
+ export interface RotateEthosOptions {
45
+ /** api.aithos.be base URL. Default {@link DEFAULT_API_BASE_URL}. NOTE: the
46
+ * Ethos-zone recopy uses @aithos/protocol-client's ambient endpoint
47
+ * (api.aithos.be); a non-default apiBaseUrl only redirects the did.json
48
+ * rotation, not the zone publish — keep them aligned (prod) for now. */
49
+ readonly apiBaseUrl?: string;
50
+ /** PDS base URL for the collection re-key. Default `https://pds.aithos.be`. */
51
+ readonly pdsUrl?: string;
52
+ readonly fetch?: typeof fetch;
53
+ /** Audit reason recorded in rotated[]. */
54
+ readonly reason?: string;
55
+ /**
56
+ * Skip the Ethos circle/self zone recopy (the live, protocol-client-RPC part).
57
+ * Used by hermetic tests and by data-only accounts. WARNING: with real
58
+ * circle/self content, skipping while rotating the sphere keys would orphan
59
+ * that content — rotateEthos refuses to rotate the Ethos spheres when an
60
+ * edition exists and zones are skipped (unless `force`).
61
+ */
62
+ readonly skipZones?: boolean;
63
+ /** Override the safety refusal above. */
64
+ readonly force?: boolean;
65
+ readonly onProgress?: (msg: string) => void;
66
+ }
67
+ export interface RotateEthosResult {
68
+ readonly did: string;
69
+ /** Ethos spheres whose key changed (always public/circle/self here). */
70
+ readonly rotatedSpheres: readonly string[];
71
+ /** Whether a fresh edition was republished (zones re-sealed under new keys). */
72
+ readonly editionRepublished: boolean;
73
+ /** Whether the account had an Ethos edition at all. */
74
+ readonly hadEdition: boolean;
75
+ /** Collection re-key report (dual #data wraps toward the NEW #data). */
76
+ readonly collections: RekeyReport;
77
+ /** New recovery file (ALL new sphere seeds + new #data). PERSIST THIS. */
78
+ readonly updatedRecoveryFile: string;
79
+ }
80
+ /**
81
+ * Fully rotate an Ethos: new public/circle/self/#data keys (root unchanged),
82
+ * re-encrypt the Ethos zones under the new keys (fresh edition), and dual-wrap
83
+ * every data collection toward the new #data. Entirely client-side; uses only
84
+ * existing API primitives (rotate_sphere_key, publish_ethos_edition via the
85
+ * protocol-client editor, rotate_cmk). Returns a new recovery file — persist it.
86
+ *
87
+ * Option (a) semantics: the new head edition (carrying all current content) is
88
+ * fully verifiable under the new keys; pre-rotation edition snapshots are not
89
+ * re-verifiable against the rotated did.json (rotated[] retains the old keys so
90
+ * a rotated[]-aware verifier can be added later without re-rotating).
91
+ */
92
+ export declare function rotateEthos(recovery: ParsedRecoveryFile | string, opts?: RotateEthosOptions): Promise<RotateEthosResult>;
93
+ export {};
94
+ //# sourceMappingURL=rotate.d.ts.map