Sign In

@oscardvs/zoteus

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@oscardvs/zoteus - npm Package Compare versions

Comparing version
1.4.2
to
1.5.0
+21
-0
dist/api/attachments.d.ts

@@ -10,2 +10,15 @@ import type { WebApiClient, LibraryRef } from './web-client.js';

}
export interface UploadBytesOptions {
bytes: Uint8Array;
/** Bare file name to store under; Zotero joins it onto the storage directory. */
filename: string;
parentItem?: string;
title?: string;
contentType?: string;
linkMode?: string;
/** Where the bytes came from. Kept on the attachment, and implies `imported_url`. */
url?: string;
/** Modification time in ms since the epoch; defaults to now for in-memory bytes. */
mtime?: number;
}
export interface UploadResult {

@@ -16,2 +29,10 @@ key: string;

}
/**
* Run the full 5-step Zotero File Storage upload for bytes already in memory.
*
* This is the only file-write path that works without the Zotero desktop app, so it is
* what a remote/hosted Zoteus uses: the desktop local API listens on the *user's*
* loopback interface, which a server elsewhere has no route to.
*/
export declare function uploadAttachmentBytes(web: WebApiClient, lib: LibraryRef, opts: UploadBytesOptions): Promise<UploadResult>;
/** Run the full 5-step Zotero File Storage upload for a local file. */

@@ -18,0 +39,0 @@ export declare function uploadFile(web: WebApiClient, lib: LibraryRef, opts: UploadOptions): Promise<UploadResult>;

+30
-8

@@ -30,14 +30,20 @@ import { createHash } from 'node:crypto';

}
/** Run the full 5-step Zotero File Storage upload for a local file. */
export async function uploadFile(web, lib, opts) {
const bytes = new Uint8Array(await readFile(opts.filePath));
const st = await stat(opts.filePath);
const filename = basename(opts.filePath);
/**
* Run the full 5-step Zotero File Storage upload for bytes already in memory.
*
* This is the only file-write path that works without the Zotero desktop app, so it is
* what a remote/hosted Zoteus uses: the desktop local API listens on the *user's*
* loopback interface, which a server elsewhere has no route to.
*/
export async function uploadAttachmentBytes(web, lib, opts) {
const { bytes, filename } = opts;
const md5 = createHash('md5').update(bytes).digest('hex');
const mtime = Math.floor(st.mtimeMs);
const mtime = opts.mtime ?? Date.now();
const contentType = opts.contentType ?? guessContentType(filename);
// Step 1: create the attachment item.
// Step 1: create the attachment item. A file fetched from the web is an
// `imported_url` (what Zotero itself records for a downloaded PDF), which keeps the
// source URL on the attachment; bytes read off disk stay `imported_file`.
const itemObj = {
itemType: 'attachment',
linkMode: opts.linkMode ?? 'imported_file',
linkMode: opts.linkMode ?? (opts.url ? 'imported_url' : 'imported_file'),
title: opts.title ?? filename,

@@ -49,2 +55,4 @@ filename,

itemObj.parentItem = opts.parentItem;
if (opts.url)
itemObj.url = opts.url;
const created = await web.writeItems(lib, [itemObj]);

@@ -68,2 +76,16 @@ if (!created.successful.length) {

}
/** Run the full 5-step Zotero File Storage upload for a local file. */
export async function uploadFile(web, lib, opts) {
const bytes = new Uint8Array(await readFile(opts.filePath));
const st = await stat(opts.filePath);
return uploadAttachmentBytes(web, lib, {
bytes,
filename: basename(opts.filePath),
mtime: Math.floor(st.mtimeMs),
parentItem: opts.parentItem,
title: opts.title,
contentType: opts.contentType,
linkMode: opts.linkMode,
});
}
export async function downloadFile(web, lib, key, savePath) {

@@ -70,0 +92,0 @@ const { bytes, contentType } = await web.downloadFileBytes(lib, key);

@@ -1,1 +0,1 @@

{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/api/attachments.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/api/attachments.ts"],"names":[],"mappings":"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"}
import type { ToolContext } from '../../registry/registry.js';
import type { LibraryRef } from '../../api/web-client.js';
/**

@@ -33,2 +34,33 @@ * Zotero rejects anything that is not a bare file name, since it joins the value onto

/**
* Resolve everything a store needs from either a local path or a URL: the bytes, a bare
* file name Zotero will accept, and a settled MIME type. Shared so `path` and `url`
* behave identically whichever backend the attachment ends up on.
*
* `titleHint` names the file when the URL yields nothing usable (a trailing-slash URL),
* and the extension implied by the content type is appended when the name carries none,
* since arXiv-style PDF URLs do not carry one.
*/
export declare function readAttachmentSource(ctx: Pick<ToolContext, 'fetcher'>, src: {
path?: string;
url?: string;
filename?: string;
contentType?: string;
titleHint?: string;
fallbackType?: string;
}): Promise<{
bytes: Uint8Array;
filename: string;
contentType: string;
}>;
/**
* The attachment item was created but its bytes never landed. Kept distinct from a
* failure before creation, so callers know that retrying elsewhere would leave an empty
* attachment behind rather than being a clean second attempt.
*/
export declare class AttachmentUploadError extends Error {
readonly attachmentKey: string;
readonly reason: unknown;
constructor(attachmentKey: string, reason: unknown);
}
/**
* Create an `imported_file` attachment under `parent` and store the bytes on it

@@ -46,1 +78,21 @@ * (authorize -> POST bytes -> register). Returns the new attachment key; throws with a

}): Promise<string>;
/**
* Cloud sibling of `storeLocalAttachment`: create the attachment under `parent` and push
* the bytes through the Web API's File Storage protocol. Needs an API key with file
* access and consumes the account's storage quota, but requires nothing running on the
* user's machine, so it is what remote deployments and group libraries use.
*
* Returns the new key plus whether Zotero already had those exact bytes in storage, in
* which case the upload short-circuits and only the item is new.
*/
export declare function storeCloudAttachment(ctx: Pick<ToolContext, 'web'>, lib: LibraryRef, file: {
parent?: string;
bytes: Uint8Array;
filename: string;
contentType: string;
title?: string;
url?: string;
}): Promise<{
key: string;
exists: boolean;
}>;

@@ -1,11 +0,19 @@

import { guessContentType } from '../../api/attachments.js';
import { readFile } from 'node:fs/promises';
import { guessContentType, uploadAttachmentBytes } from '../../api/attachments.js';
/**
* Shared plumbing for storing a file as an `imported_file` attachment through the
* Zotero 10+ desktop local API: download the bytes, create the attachment item under
* a parent, then push the bytes with the local API's 3-phase upload.
* Shared plumbing for storing a file as a child attachment: resolve the bytes (from a
* local path or a URL), create the attachment item under a parent, then push the bytes
* with the 3-phase upload both Zotero backends implement.
*
* Used by `zotero_attach_file` and by `zotero_import`'s local-API save path
* (`attach_url`), which would otherwise duplicate the same dance. The connector
* protocol has its own equivalent (a single saveAttachment call inside the save
* session), so only the local-API side lives here.
* Two destinations live here, and callers pick one per request:
* - `storeLocalAttachment` writes through the Zotero 10+ desktop local API. Preferred
* when the app is reachable: no cloud key, no storage quota, bytes stay on the box.
* - `storeCloudAttachment` writes through the Web API's File Storage protocol. The
* only option when Zoteus runs somewhere the user's desktop is not, which is every
* hosted/remote deployment.
*
* Used by `zotero_attach_file`, `zotero_attachment`, and `zotero_import`'s `attach_url`,
* which would otherwise each duplicate the same dance. The connector protocol has its
* own equivalent (a single saveAttachment call inside the save session), so it is the
* one path that does not route through here.
*/

@@ -86,2 +94,51 @@ const GENERIC_TYPE = 'application/octet-stream';

/**
* Resolve everything a store needs from either a local path or a URL: the bytes, a bare
* file name Zotero will accept, and a settled MIME type. Shared so `path` and `url`
* behave identically whichever backend the attachment ends up on.
*
* `titleHint` names the file when the URL yields nothing usable (a trailing-slash URL),
* and the extension implied by the content type is appended when the name carries none,
* since arXiv-style PDF URLs do not carry one.
*/
export async function readAttachmentSource(ctx, src) {
let bytes;
let inferredName;
let served;
if (src.path) {
bytes = new Uint8Array(await readFile(src.path));
inferredName = bareFilename(src.path);
}
else if (src.url) {
const file = await downloadAttachment(ctx, src.url);
({ bytes, contentType: served } = file);
inferredName = file.filename === 'attachment' && src.titleHint ? bareFilename(src.titleHint) : file.filename;
}
else {
throw new Error('Provide `path` or `url`.');
}
const name = bareFilename(src.filename ?? inferredName, inferredName);
const contentType = resolveContentType(name, {
explicit: src.contentType,
served,
fallback: src.fallbackType,
});
return { bytes, filename: withExtensionFor(name, contentType), contentType };
}
/**
* The attachment item was created but its bytes never landed. Kept distinct from a
* failure before creation, so callers know that retrying elsewhere would leave an empty
* attachment behind rather than being a clean second attempt.
*/
export class AttachmentUploadError extends Error {
attachmentKey;
reason;
constructor(attachmentKey, reason) {
super(`Attachment ${attachmentKey} was created, but storing its bytes failed: ` +
(reason instanceof Error ? reason.message : String(reason)));
this.attachmentKey = attachmentKey;
this.reason = reason;
this.name = 'AttachmentUploadError';
}
}
/**
* Create an `imported_file` attachment under `parent` and store the bytes on it

@@ -112,9 +169,34 @@ * (authorize -> POST bytes -> register). Returns the new attachment key; throws with a

throw new Error('Local write returned no attachment key.');
await ctx.localWrites.uploadFile(attachmentKey, {
try {
await ctx.localWrites.uploadFile(attachmentKey, {
bytes: file.bytes,
filename: file.filename,
contentType: file.contentType,
});
}
catch (e) {
throw new AttachmentUploadError(attachmentKey, e);
}
return attachmentKey;
}
/**
* Cloud sibling of `storeLocalAttachment`: create the attachment under `parent` and push
* the bytes through the Web API's File Storage protocol. Needs an API key with file
* access and consumes the account's storage quota, but requires nothing running on the
* user's machine, so it is what remote deployments and group libraries use.
*
* Returns the new key plus whether Zotero already had those exact bytes in storage, in
* which case the upload short-circuits and only the item is new.
*/
export async function storeCloudAttachment(ctx, lib, file) {
const result = await uploadAttachmentBytes(ctx.web, lib, {
bytes: file.bytes,
filename: file.filename,
contentType: file.contentType,
parentItem: file.parent,
title: file.title ?? file.filename,
url: file.url,
});
return attachmentKey;
return { key: result.key, exists: result.exists };
}
//# sourceMappingURL=store.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/features/attachments/store.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/features/attachments/store.ts"],"names":[],"mappings":"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"}
import type { ToolDefinition } from '../registry/registry.js';
/**
* Attach a file (local path or URL) to an item as a stored (imported_file)
* attachment. Requires the Zotero desktop app (Zotero 10+ local API writes), since
* the cloud client here does not implement the storage upload flow.
* Attach a file (local path or URL) to an item as a stored attachment.
*
* Two backends, chosen per call: the Zotero desktop app's local API when it is reachable
* (Zotero 10+, key-free, no storage quota), otherwise the cloud Web API's File Storage
* protocol. The cloud path matters most for remote deployments, where the desktop app is
* on the user's loopback and structurally out of reach; there, `url` is the way in, since
* the server downloads the bytes itself and never needs a file on its own disk.
*/
declare const attachFile: ToolDefinition;
export default attachFile;
import { z } from 'zod';
import { readFile } from 'node:fs/promises';
import { ok, ensureLocalApi } from '../registry/registry.js';
import { AttachmentDownloadError, bareFilename, downloadAttachment, resolveContentType, storeLocalAttachment, } from '../features/attachments/store.js';
import { ok, ensureLocalApi, isLocalWritesUnavailable, requireCloudLibrary } from '../registry/registry.js';
import { AttachmentDownloadError, AttachmentUploadError, readAttachmentSource, storeCloudAttachment, storeLocalAttachment, } from '../features/attachments/store.js';
function err(text) {
return { content: [{ type: 'text', text }], isError: true };
}
/**
* Attach a file (local path or URL) to an item as a stored (imported_file)
* attachment. Requires the Zotero desktop app (Zotero 10+ local API writes), since
* the cloud client here does not implement the storage upload flow.
* Attach a file (local path or URL) to an item as a stored attachment.
*
* Two backends, chosen per call: the Zotero desktop app's local API when it is reachable
* (Zotero 10+, key-free, no storage quota), otherwise the cloud Web API's File Storage
* protocol. The cloud path matters most for remote deployments, where the desktop app is
* on the user's loopback and structurally out of reach; there, `url` is the way in, since
* the server downloads the bytes itself and never needs a file on its own disk.
*/

@@ -13,46 +19,65 @@ const attachFile = {

title: 'Attach a file (PDF, snapshot) to an item',
description: 'Add a stored file attachment (e.g. a PDF full text) under an existing item. Give `parent` (the item key) and either `path` (a local file the Zoteus process can read) or `url` (downloaded first). `filename` and `content_type` are inferred when omitted. Runs against the Zotero desktop app\u2019s local API (Zotero 10+; you may be asked once to allow Zoteus write access — choose "Always Allow"). Returns the new attachment key.',
description: 'Add a stored file attachment (e.g. a PDF full text) under an existing item. Give `parent` (the item key) and either `url` (Zoteus downloads it, then stores it) or `path` (a file on the machine running Zoteus). `filename` and `content_type` are inferred when omitted. Saves through the Zotero desktop app when one is reachable (Zotero 10+ local API; you may be asked once to allow Zoteus write access, choose "Always Allow"), and otherwise through the cloud Web API, which needs ZOTERO_API_KEY with file access and uses your Zotero file-storage quota. `url` works on every setup including a remote/hosted Zoteus that cannot see your desktop, so prefer it over `path` unless the file really is on the server. Returns the new attachment key.',
inputSchema: {
parent: z.string().describe('Key of the parent item to attach the file to.'),
path: z.string().optional().describe('Local filesystem path to the file.'),
url: z.string().url().optional().describe('URL to download the file from.'),
path: z.string().optional().describe('Filesystem path to the file, on the machine running Zoteus.'),
url: z.string().url().optional().describe('URL to download the file from; works on remote/hosted servers.'),
filename: z.string().optional().describe('File name to store; inferred from path/url if omitted.'),
content_type: z.string().optional().describe('MIME type; inferred from the extension if omitted (pdf -> application/pdf).'),
title: z.string().optional().describe('Attachment title, e.g. "Full Text PDF".'),
library_type: z.enum(['user', 'group']).optional(),
library_id: z.number().int().optional().describe('Group library to attach in; forces the cloud path.'),
},
annotations: { readOnlyHint: false, openWorldHint: true },
handler: async (args, ctx) => {
if (!ctx.localWrites || !(await ensureLocalApi(ctx))) {
return {
content: [{ type: 'text', text: 'Storing files needs Zotero desktop write access, which the local API provides from Zotero 10. Grant it once when Zotero asks (or pre-provision ZOTEUS_LOCAL_API_KEY). On Zotero 9 and earlier, attach files DURING import instead — zotero_import supports `attach_url`, which streams the file into the same save session. Otherwise set ZOTERO_API_KEY and use the cloud flow.' }],
isError: true,
};
}
if (!args.path && !args.url) {
return { content: [{ type: 'text', text: 'Provide `path` or `url`.' }], isError: true };
return err('Provide `path` or `url`.');
}
let bytes;
let inferredName;
let served;
if (args.path) {
bytes = new Uint8Array(await readFile(args.path));
inferredName = bareFilename(args.path);
// Desktop first for the personal library: no cloud key, no quota, bytes never leave
// the machine. Group libraries the app may not have are cloud-only either way.
const useLocal = !args.library_id && Boolean(ctx.localWrites) && (await ensureLocalApi(ctx));
if (!useLocal && !args.library_id && !ctx.capabilities.cloud) {
return err('Storing a file needs one of two write paths, and neither is available: the Zotero desktop app (Zotero 10+ with the local API enabled, granted once when Zotero asks), or a cloud API key with file access (ZOTERO_API_KEY). ' +
'If Zoteus is running on a different machine than Zotero, only the cloud key can work, since the desktop local API listens on your own loopback address.');
}
else {
let source;
try {
source = await readAttachmentSource(ctx, {
path: args.path,
url: args.url,
filename: args.filename,
contentType: args.content_type,
titleHint: args.title,
});
}
catch (e) {
if (!(e instanceof AttachmentDownloadError))
throw e;
return err(e.message);
}
const { bytes, filename, contentType } = source;
if (useLocal) {
try {
const file = await downloadAttachment(ctx, args.url);
({ bytes, contentType: served } = file);
inferredName = file.filename;
const attachmentKey = await storeLocalAttachment(ctx, {
parent: args.parent,
bytes,
filename,
contentType,
title: args.title,
url: args.url,
});
return ok({ attachment: attachmentKey, parent: args.parent, filename, bytes: bytes.length, contentType, target: 'local' }, `Attached ${filename} (${bytes.length} bytes) to item ${args.parent} as ${attachmentKey}.`);
}
catch (e) {
if (!(e instanceof AttachmentDownloadError))
// Zotero 9 and earlier answer the write endpoints with 404/501. That fails before
// anything is created, so with a cloud key the same bytes can still go up the Web
// API instead of dead-ending. A failure after the item exists must not retry:
// a second attempt would leave the empty first attachment behind.
if (e instanceof AttachmentUploadError || !isLocalWritesUnavailable(e) || !ctx.capabilities.cloud)
throw e;
return { content: [{ type: 'text', text: e.message }], isError: true };
ctx.logger.info(`Local-API attachment writes unavailable (${e instanceof Error ? e.message : e}); using the cloud Web API.`);
}
}
const filename = bareFilename(args.filename ?? inferredName, inferredName);
const contentType = resolveContentType(filename, { explicit: args.content_type, served });
// 1) Create the attachment item, 2) upload + register the file bytes. A refusal
// from Zotero surfaces as a tool error through the registry's error mapping.
const attachmentKey = await storeLocalAttachment(ctx, {
const lib = requireCloudLibrary(ctx, args);
const result = await storeCloudAttachment(ctx, lib, {
parent: args.parent,

@@ -65,3 +90,13 @@ bytes,

});
return ok({ attachment: attachmentKey, parent: args.parent, filename, bytes: bytes.length, contentType, target: 'local' }, `Attached ${filename} (${bytes.length} bytes) to item ${args.parent} as ${attachmentKey}.`);
return ok({
attachment: result.key,
parent: args.parent,
filename,
bytes: bytes.length,
contentType,
target: 'cloud',
alreadyInStorage: result.exists,
}, result.exists
? `${filename} was already in Zotero file storage; attached to item ${args.parent} as ${result.key}.`
: `Uploaded ${filename} (${bytes.length} bytes) to Zotero file storage and attached it to item ${args.parent} as ${result.key}.`);
},

@@ -68,0 +103,0 @@ };

@@ -1,1 +0,1 @@

{"version":3,"file":"attach-file.js","sourceRoot":"","sources":["../../src/tools/attach-file.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"attach-file.js","sourceRoot":"","sources":["../../src/tools/attach-file.ts"],"names":[],"mappings":"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"}

@@ -6,2 +6,3 @@ import { z } from 'zod';

import { uploadFile, downloadFile } from '../api/attachments.js';
import { AttachmentDownloadError, readAttachmentSource, storeCloudAttachment } from '../features/attachments/store.js';
function err(text) {

@@ -13,6 +14,7 @@ return { content: [{ type: 'text', text }], isError: true };

title: 'Zotero attachments (files)',
description: "Upload, download, or inspect attachment files. `action`: \"upload\" stores a local file as a Zotero attachment using the full File Storage protocol (provide `file_path`; optional `parent_item` to attach it under an item, `title`, `content_type`) and returns the new attachment key; \"download\" fetches an attachment's file to a local path (provide `item_key`; optional `save_path`, default under the Zoteus data dir) and returns the path and byte count; \"info\" returns an attachment item's metadata. File bytes are written to / read from disk — they are never streamed through the conversation. Upload/download use the cloud Web API and your file-storage quota.",
description: "Upload, download, or inspect attachment files. `action`: \"upload\" stores a file as a Zotero attachment using the full File Storage protocol (provide `url` to have Zoteus fetch it, or `file_path` for a file on the machine running Zoteus; optional `parent_item` to attach it under an item, `title`, `content_type`) and returns the new attachment key; \"download\" fetches an attachment's file to a local path (provide `item_key`; optional `save_path`, default under the Zoteus data dir) and returns the path and byte count; \"info\" returns an attachment item's metadata. File bytes are written to / read from disk, never streamed through the conversation. Upload/download use the cloud Web API and your file-storage quota. When Zoteus runs on a different machine than Zotero, `file_path` refers to the server's disk, so use `url` instead.",
inputSchema: {
action: z.enum(['upload', 'download', 'info']),
file_path: z.string().optional().describe('Local file to upload.'),
file_path: z.string().optional().describe('File to upload, on the machine running Zoteus.'),
url: z.string().url().optional().describe('URL to download and upload instead of `file_path`; works on remote/hosted servers.'),
parent_item: z.string().optional().describe('Parent item key to attach under (upload).'),

@@ -39,4 +41,33 @@ title: z.string().optional(),

if (args.action === 'upload') {
if (!args.file_path)
return err('`file_path` is required for upload.');
if (!args.file_path && !args.url)
return err('`file_path` or `url` is required for upload.');
// A URL is fetched here and uploaded from memory, so the bytes never have to exist
// on the server's disk; a path still goes through the file reader, which picks up
// the real mtime.
if (args.url) {
let source;
try {
source = await readAttachmentSource(ctx, {
url: args.url,
contentType: args.content_type,
titleHint: args.title,
});
}
catch (e) {
if (!(e instanceof AttachmentDownloadError))
throw e;
return err(e.message);
}
const stored = await storeCloudAttachment(ctx, lib, {
parent: args.parent_item,
bytes: source.bytes,
filename: source.filename,
contentType: source.contentType,
title: args.title,
url: args.url,
});
return ok({ key: stored.key, exists: stored.exists, filename: source.filename, bytes: source.bytes.length }, stored.exists
? `File already in storage; attachment item ${stored.key} created for ${source.filename}.`
: `Uploaded ${source.filename} (${source.bytes.length} bytes) as attachment ${stored.key}.`);
}
const result = await uploadFile(ctx.web, lib, {

@@ -43,0 +74,0 @@ filePath: args.file_path,

@@ -1,1 +0,1 @@

{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"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"}
import { z } from 'zod';
import { ok, requireCloudLibrary, isLocalWritesUnavailable, ensureLocalApi } from '../registry/registry.js';
import { arxivItem, fromScholarWork, parseIdentifier, bareDoi } from '../features/resolve/resolve.js';
import { AttachmentDownloadError, bareFilename, downloadAttachment, resolveContentType, storeLocalAttachment, withExtensionFor, } from '../features/attachments/store.js';
import { AttachmentDownloadError, downloadAttachment, readAttachmentSource, storeCloudAttachment, storeLocalAttachment, } from '../features/attachments/store.js';
function err(text) {

@@ -53,3 +53,3 @@ return { content: [{ type: 'text', text }], isError: true };

collection_key: z.string().optional().describe('Collection to add saved items to: an 8-char collection key or a Zotero treeViewID like "C20".'),
attach_url: z.string().url().optional().describe('File URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item when saving to the desktop app.'),
attach_url: z.string().url().optional().describe('File URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item. Works on every save path: the desktop app when one is reachable, otherwise the cloud Web API.'),
attach_title: z.string().optional().describe('Title for the attached file, e.g. "Full Text PDF".'),

@@ -228,4 +228,26 @@ library_type: z.enum(['user', 'group']).optional(),

const result = await ctx.web.writeItems(lib, payload);
const created = result.successful.map((s) => s.key);
// The cloud has its own file-storage upload, so attach_url is not desktop-only: the
// bytes are fetched here and pushed to Zotero storage. As on the desktop paths, a
// failure degrades to a warning, since the items are already saved and re-running
// would duplicate them.
let attached;
let warning;
if (args.attach_url) {
if (!created[0]) {
warning = `No item key came back from the save, so ${args.attach_url} was not attached.`;
}
else {
try {
attached = await attachUrlToCloud(ctx, lib, created[0], args.attach_url, args.attach_title);
}
catch (e) {
const why = e instanceof Error ? e.message : String(e);
ctx.logger.warn(`Attaching ${args.attach_url} to ${created[0]} failed: ${why}`);
warning = `Item saved, but attaching ${args.attach_url} failed: ${why}`;
}
}
}
return ok({
created: result.successful.map((s) => s.key),
created,
failed: result.failed,

@@ -235,25 +257,28 @@ resolved: payload.length,

target: 'cloud',
warning: args.attach_url ? 'attach_url is only supported for desktop-app saves; the file was not attached.' : undefined,
}, `Imported ${result.successful.length} of ${payload.length} resolved item(s) via ${source} into the library.`);
attached,
warning,
}, `Imported ${result.successful.length} of ${payload.length} resolved item(s) via ${source} into the library` +
(attached ? `, with ${attached.bytes}-byte ${attached.filename} attached` : '') +
'.' +
(warning ? ` ${warning}` : ''));
}
export default importTool;
/**
* Fetch `attach_url` the way both non-connector save paths need it. attach_url is
* documented as a full-text file (typically a PDF), so that is the content type assumed
* when neither the server nor the URL says what it is, and `attach_title` names the file
* when the URL yields nothing usable.
*/
function fetchAttachUrl(ctx, url, title) {
return readAttachmentSource(ctx, { url, titleHint: title, fallbackType: 'application/pdf' });
}
/**
* Local-API equivalent of the connector protocol's in-session saveAttachment: download
* `attach_url` and store it as an `imported_file` child of the item just saved.
*
* `attach_title` names the attachment (the connector path defaults to "Full Text PDF");
* the stored file name comes from the URL, since Zotero needs a bare name and titles may
* contain path separators. arXiv-style URLs carry no extension, so one is appended from
* the content type.
*/
async function attachUrlLocally(ctx, parent, url, title) {
const file = await downloadAttachment(ctx, url);
const name = file.filename === 'attachment' && title ? bareFilename(title) : file.filename;
// attach_url is documented as a full-text file (typically a PDF); fall back to that
// when neither the server nor the URL says what it is.
const contentType = resolveContentType(name, { served: file.contentType, fallback: 'application/pdf' });
const filename = withExtensionFor(name, contentType);
const { bytes, filename, contentType } = await fetchAttachUrl(ctx, url, title);
const key = await storeLocalAttachment(ctx, {
parent,
bytes: file.bytes,
bytes,
filename,

@@ -264,5 +289,22 @@ contentType,

});
return { key, bytes: file.bytes.length, contentType, filename };
return { key, bytes: bytes.length, contentType, filename };
}
/**
* Cloud equivalent of the same step, for saves that did not go through the desktop app:
* push the downloaded bytes into Zotero file storage under the item just created. This
* is the only attach path a remote/hosted Zoteus has, since it cannot reach the desktop.
*/
async function attachUrlToCloud(ctx, lib, parent, url, title) {
const { bytes, filename, contentType } = await fetchAttachUrl(ctx, url, title);
const stored = await storeCloudAttachment(ctx, lib, {
parent,
bytes,
filename,
contentType,
title: title ?? 'Full Text PDF',
url,
});
return { key: stored.key, bytes: bytes.length, contentType, filename, alreadyInStorage: stored.exists };
}
/**
* Resolve a caller-supplied collection to the connector protocol's treeViewID

@@ -269,0 +311,0 @@ * ("L1" for My Library, "C<id>" for collections). Accepts a treeViewID directly,

@@ -1,1 +0,1 @@

{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/tools/import.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/tools/import.ts"],"names":[],"mappings":"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"}
{
"name": "@oscardvs/zoteus",
"version": "1.4.2",
"version": "1.5.0",
"description": "The everything Zotero MCP server — complete Zotero Web API v3 + desktop local API for Claude and any MCP client.",

@@ -5,0 +5,0 @@ "keywords": [