emdash-emit 0.1.7 → 0.1.9
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 +237 -82
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +3 -1
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/profile.d.ts.map +1 -1
- package/dist/cli/commands/profile.js +67 -13
- package/dist/cli/commands/profile.js.map +1 -1
- package/dist/cli/commands/pull.d.ts +5 -0
- package/dist/cli/commands/pull.d.ts.map +1 -1
- package/dist/cli/commands/pull.js +96 -39
- package/dist/cli/commands/pull.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +17 -2
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/status.d.ts +19 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +93 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/context.d.ts +35 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +112 -10
- package/dist/cli/context.js.map +1 -1
- package/dist/client/auth.d.ts +1 -0
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +1 -0
- package/dist/client/auth.js.map +1 -1
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +27 -10
- package/dist/client/http.js.map +1 -1
- package/dist/client/mapper.d.ts +12 -0
- package/dist/client/mapper.d.ts.map +1 -1
- package/dist/client/mapper.js +65 -0
- package/dist/client/mapper.js.map +1 -1
- package/dist/client/media.d.ts +141 -0
- package/dist/client/media.d.ts.map +1 -0
- package/dist/client/media.js +582 -0
- package/dist/client/media.js.map +1 -0
- package/dist/client/portable-text.d.ts +22 -1
- package/dist/client/portable-text.d.ts.map +1 -1
- package/dist/client/portable-text.js +85 -5
- package/dist/client/portable-text.js.map +1 -1
- package/dist/db/cache.d.ts +16 -0
- package/dist/db/cache.d.ts.map +1 -1
- package/dist/db/cache.js +67 -0
- package/dist/db/cache.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/context.d.ts +1 -0
- package/dist/mcp/context.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +60 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-errors.d.ts +11 -0
- package/dist/mcp/tool-errors.d.ts.map +1 -0
- package/dist/mcp/tool-errors.js +62 -0
- package/dist/mcp/tool-errors.js.map +1 -0
- package/dist/mcp/tools/profile.d.ts +9 -2
- package/dist/mcp/tools/profile.d.ts.map +1 -1
- package/dist/mcp/tools/profile.js +49 -36
- package/dist/mcp/tools/profile.js.map +1 -1
- package/dist/mcp/tools/sync-diff.d.ts.map +1 -1
- package/dist/mcp/tools/sync-diff.js +18 -70
- package/dist/mcp/tools/sync-diff.js.map +1 -1
- package/dist/mcp/tools/sync-new.d.ts.map +1 -1
- package/dist/mcp/tools/sync-new.js +40 -21
- package/dist/mcp/tools/sync-new.js.map +1 -1
- package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
- package/dist/mcp/tools/sync-pull.js +110 -86
- package/dist/mcp/tools/sync-pull.js.map +1 -1
- package/dist/mcp/tools/sync-push.d.ts.map +1 -1
- package/dist/mcp/tools/sync-push.js +24 -32
- package/dist/mcp/tools/sync-push.js.map +1 -1
- package/dist/mcp/tools/sync-status.d.ts.map +1 -1
- package/dist/mcp/tools/sync-status.js +55 -4
- package/dist/mcp/tools/sync-status.js.map +1 -1
- package/dist/sync/diff.d.ts +36 -0
- package/dist/sync/diff.d.ts.map +1 -1
- package/dist/sync/diff.js +118 -0
- package/dist/sync/diff.js.map +1 -1
- package/dist/sync/media.d.ts +16 -0
- package/dist/sync/media.d.ts.map +1 -1
- package/dist/sync/media.js +180 -26
- package/dist/sync/media.js.map +1 -1
- package/dist/sync/merge.d.ts.map +1 -1
- package/dist/sync/merge.js +1 -0
- package/dist/sync/merge.js.map +1 -1
- package/dist/sync/orchestrator.d.ts +6 -0
- package/dist/sync/orchestrator.d.ts.map +1 -1
- package/dist/sync/orchestrator.js +52 -27
- package/dist/sync/orchestrator.js.map +1 -1
- package/dist/sync/preflight.d.ts +30 -2
- package/dist/sync/preflight.d.ts.map +1 -1
- package/dist/sync/preflight.js +274 -10
- package/dist/sync/preflight.js.map +1 -1
- package/dist/sync/pull.d.ts +47 -0
- package/dist/sync/pull.d.ts.map +1 -1
- package/dist/sync/pull.js +148 -8
- package/dist/sync/pull.js.map +1 -1
- package/dist/sync/push.d.ts +2 -0
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +332 -6
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/status.d.ts +11 -1
- package/dist/sync/status.d.ts.map +1 -1
- package/dist/sync/status.js +40 -6
- package/dist/sync/status.js.map +1 -1
- package/dist/sync/taxonomies.d.ts.map +1 -1
- package/dist/sync/taxonomies.js +39 -4
- package/dist/sync/taxonomies.js.map +1 -1
- package/dist/utils/config.d.ts +11 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +14 -4
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +16 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +66 -7
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/profile.d.ts +3 -3
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +105 -8
- package/dist/utils/profile.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { CacheDatabase } from '../db/cache.js';
|
|
2
|
+
/**
|
|
3
|
+
* Maximum media upload size allowed by EmDash OpenAPI 3.1.0 schema (MediaUploadUrlBody.size.maximum).
|
|
4
|
+
* 50 MiB = 52,428,800 bytes.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MAX_MEDIA_UPLOAD_BYTES = 52428800;
|
|
7
|
+
export declare function resolveImageMimeType(filename: string): string | null;
|
|
8
|
+
export interface MediaHashes {
|
|
9
|
+
/** Emit-internal SHA-256 hex key used exclusively for local media_state table */
|
|
10
|
+
localHash: string;
|
|
11
|
+
/** EmDash server deduplication hash formatted as "sha1:<40-char-hex>" */
|
|
12
|
+
serverContentHash: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function computeMediaHashes(buffer: Buffer): MediaHashes;
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes a media file URL into the canonical root-relative form:
|
|
17
|
+
* `/_emdash/api/media/file/<storageKey>`
|
|
18
|
+
*
|
|
19
|
+
* Note: `storageKey` may be either `<ULID>.<ext>` (legacy migrated media) or
|
|
20
|
+
* `<ULID_1>.<ULID_2>.<ext>` (native EmDash uploads after confirmation). Treat it as an opaque key.
|
|
21
|
+
*/
|
|
22
|
+
export declare function toRootRelativeMediaUrl(rawUrl: string | undefined | null, storageKey: string, origin: string): string;
|
|
23
|
+
export interface MediaUploadUrlResponse {
|
|
24
|
+
uploadUrl: string;
|
|
25
|
+
method: 'PUT';
|
|
26
|
+
headers: Record<string, string>;
|
|
27
|
+
mediaId: string;
|
|
28
|
+
storageKey: string;
|
|
29
|
+
expiresAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface MediaExistingResponse {
|
|
32
|
+
existing: true;
|
|
33
|
+
mediaId: string;
|
|
34
|
+
storageKey: string;
|
|
35
|
+
url: string;
|
|
36
|
+
}
|
|
37
|
+
export interface UploadMediaOptions {
|
|
38
|
+
filePath?: string;
|
|
39
|
+
buffer?: Buffer;
|
|
40
|
+
filename: string;
|
|
41
|
+
contentType?: string;
|
|
42
|
+
origin: string;
|
|
43
|
+
token: string;
|
|
44
|
+
refreshToken?: string;
|
|
45
|
+
alt?: string;
|
|
46
|
+
caption?: string;
|
|
47
|
+
cache?: CacheDatabase;
|
|
48
|
+
fetchFn?: typeof fetch;
|
|
49
|
+
}
|
|
50
|
+
export interface UploadMediaResult {
|
|
51
|
+
/** Media record ULID (used for frontmatter `featuredImage` and promoted filename prefix) */
|
|
52
|
+
mediaId: string;
|
|
53
|
+
/** Confirmed storage key (used for `/_emdash/api/media/file/<storageKey>`) */
|
|
54
|
+
storageKey: string;
|
|
55
|
+
/** Canonical root-relative URL `/_emdash/api/media/file/<storageKey>` */
|
|
56
|
+
url: string;
|
|
57
|
+
/** SHA-256 hex of the binary file */
|
|
58
|
+
localHash: string;
|
|
59
|
+
/** `sha1:<hex>` content hash */
|
|
60
|
+
contentHash: string;
|
|
61
|
+
size: number;
|
|
62
|
+
mimeType: string;
|
|
63
|
+
filename: string;
|
|
64
|
+
width?: number | null;
|
|
65
|
+
height?: number | null;
|
|
66
|
+
createdAt?: string;
|
|
67
|
+
deduplicated: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the returned record was confirmed against `GET /_emdash/api/media/{mediaId}`.
|
|
70
|
+
* - `'verified'`: the remote record was confirmed to exist and be `ready`
|
|
71
|
+
* - `'unknown'`: the server did not answer the existence check (no GET support / 5xx / network error)
|
|
72
|
+
* Absent for a fresh upload confirmed via `POST .../confirm`.
|
|
73
|
+
*/
|
|
74
|
+
remoteVerification?: 'verified' | 'unknown';
|
|
75
|
+
/** Reason attached when `remoteVerification` is `'unknown'` */
|
|
76
|
+
remoteVerificationNote?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface CompensationResult {
|
|
79
|
+
compensated: boolean;
|
|
80
|
+
alreadyReadyItem?: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
export interface RemoteMediaDetail {
|
|
83
|
+
id: string;
|
|
84
|
+
filename?: string;
|
|
85
|
+
mimeType?: string;
|
|
86
|
+
size?: number;
|
|
87
|
+
width?: number | null;
|
|
88
|
+
height?: number | null;
|
|
89
|
+
alt?: string | null;
|
|
90
|
+
caption?: string | null;
|
|
91
|
+
storageKey?: string;
|
|
92
|
+
contentHash?: string | null;
|
|
93
|
+
status?: string;
|
|
94
|
+
createdAt?: string;
|
|
95
|
+
url?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Result of a remote media existence check. `'unknown'` always carries a human-readable
|
|
99
|
+
* `reason` so callers can surface it as a warning instead of silently treating the record
|
|
100
|
+
* as verified.
|
|
101
|
+
*/
|
|
102
|
+
export type RemoteMediaExistence = {
|
|
103
|
+
exists: true;
|
|
104
|
+
item: RemoteMediaDetail;
|
|
105
|
+
} | {
|
|
106
|
+
exists: false;
|
|
107
|
+
} | {
|
|
108
|
+
exists: 'unknown';
|
|
109
|
+
reason: string;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Fetches authoritative metadata for a single media record via `GET /_emdash/api/media/{mediaId}`.
|
|
113
|
+
* Returns:
|
|
114
|
+
* - `{ exists: true, item }` when the server returns 200 OK
|
|
115
|
+
* - `{ exists: false }` when the server returns 404 Not Found (deleted on remote)
|
|
116
|
+
* - `{ exists: 'unknown', reason }` on transient errors or when the server does not implement GET
|
|
117
|
+
*/
|
|
118
|
+
export declare function fetchRemoteMediaDetail(mediaId: string, options: {
|
|
119
|
+
origin: string;
|
|
120
|
+
token: string;
|
|
121
|
+
fetchFn: typeof fetch;
|
|
122
|
+
}): Promise<RemoteMediaExistence>;
|
|
123
|
+
/**
|
|
124
|
+
* Compensating transaction for failed uploads after `POST /_emdash/api/media/upload-url`
|
|
125
|
+
* has created a pending record on the server.
|
|
126
|
+
*
|
|
127
|
+
* 1. Reads `GET /_emdash/api/media/{mediaId}` to inspect `status`.
|
|
128
|
+
* 2. If `status` is `pending` or `failed`, calls `DELETE /_emdash/api/media/{mediaId}`.
|
|
129
|
+
* 3. If `status` is `ready`, preserves the record and returns `alreadyReadyItem`.
|
|
130
|
+
*/
|
|
131
|
+
export declare function compensateOrphanMedia(mediaId: string, options: {
|
|
132
|
+
origin: string;
|
|
133
|
+
token: string;
|
|
134
|
+
fetchFn: typeof fetch;
|
|
135
|
+
}): Promise<CompensationResult>;
|
|
136
|
+
/**
|
|
137
|
+
* Executes the confirmed 4-phase EmDash media upload contract with server-side
|
|
138
|
+
* deduplication, local `media_state` idempotency, and orphan-pending compensation.
|
|
139
|
+
*/
|
|
140
|
+
export declare function uploadMediaFile(options: UploadMediaOptions): Promise<UploadMediaResult>;
|
|
141
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/client/media.ts"],"names":[],"mappings":"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"}
|