zotero-plugin 7.0.3 → 7.0.4

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.
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(debug_log_exports);
37
37
  // package.json
38
38
  var package_default = {
39
39
  "name": "zotero-plugin",
40
- "version": "7.0.3",
40
+ "version": "7.0.4",
41
41
  "description": "Zotero plugin builder",
42
42
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
43
43
  "type": "module",
@@ -57,20 +57,20 @@ var package_default = {
57
57
  "require": "./dist/cjs/utils/logger.cjs"
58
58
  },
59
59
  "./copy-assets": {
60
- "import": "dist/esm/bin/copy-assets.js",
61
- "require": "dist/cjs/bin/copy-assets.cjs"
60
+ "import": "./dist/esm/bin/copy-assets.js",
61
+ "require": "./dist/cjs/bin/copy-assets.cjs"
62
62
  },
63
63
  "./make-dirs": {
64
- "import": "dist/esm/bin/make-dirs.js",
65
- "require": "dist/cjs/bin/make-dirs.cjs"
64
+ "import": "./dist/esm/bin/make-dirs.js",
65
+ "require": "./dist/cjs/bin/make-dirs.cjs"
66
66
  },
67
67
  "./make-manifest": {
68
- "import": "dist/esm/bin/make-manifest.js",
69
- "require": "dist/cjs/bin/make-manifest.cjs"
68
+ "import": "./dist/esm/bin/make-manifest.js",
69
+ "require": "./dist/cjs/bin/make-manifest.cjs"
70
70
  },
71
71
  "./make-version": {
72
- "import": "dist/esm/bin/version.js",
73
- "require": "dist/cjs/bin/version.cjs"
72
+ "import": "./dist/esm/bin/version.js",
73
+ "require": "./dist/cjs/bin/version.cjs"
74
74
  }
75
75
  },
76
76
  "author": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../debug-log.ts","../../package.json"],"sourcesContent":["/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport pkg from './package.json'\n\nimport * as UZip from 'uzip'\n\n/*\nconst path = new class {\n #home = ''\n\n get home(): string {\n return this.#home = (this.#home || FileUtils.getDir('Home', []).path)\n }\n}\n*/\n\nexport class Bundler {\n public key: string\n\n #refs = false\n\n private IV_LENGTH = 12\n #symmetric: CryptoKey\n #pubkey: string\n\n #crypto: Crypto\n #subtle: SubtleCrypto\n #files: Record<string, Uint8Array> = {}\n\n #encoder = new TextEncoder()\n\n constructor(pubkey: string) {\n this.key = Zotero.Utilities.generateObjectKey()\n this.#pubkey = pubkey\n this.#crypto = Zotero.getMainWindow().crypto\n this.#subtle = this.#crypto.subtle\n }\n\n async add(path: string, data: string, refs = false): Promise<void> {\n this.#refs = this.#refs || refs\n\n const encoded = this.#encoder.encode(data)\n\n if (this.#pubkey) {\n if (!this.#symmetric) {\n this.#symmetric = await this.#subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'])\n\n const base64Pem = this.#pubkey\n .replace('-----BEGIN PUBLIC KEY-----', '')\n .replace('-----END PUBLIC KEY-----', '')\n .replace(/\\s/g, '')\n const keyBuffer = Uint8Array.from(atob(base64Pem), c => c.charCodeAt(0)).buffer\n const publicKey = await this.#subtle.importKey('spki', keyBuffer, { name: 'RSA-OAEP', hash: 'SHA-256' }, true, ['encrypt'])\n const exportedKey = await this.#subtle.exportKey('raw', this.#symmetric)\n\n this.#files[`${this.key}/${this.key}.key`] = new Uint8Array(await this.#subtle.encrypt({ name: 'RSA-OAEP' }, publicKey, exportedKey))\n }\n\n const iv = this.#crypto.getRandomValues(new Uint8Array(this.IV_LENGTH))\n const encryptedData = await this.#subtle.encrypt({ name: 'AES-GCM', iv: iv }, this.#symmetric, encoded)\n this.#files[`${this.key}/${path}.iv`] = iv\n this.#files[`${this.key}/${path}.enc`] = new Uint8Array(encryptedData)\n }\n else {\n this.#files[`${this.key}/${path}`] = encoded\n }\n }\n\n public get zip(): ArrayBuffer {\n return UZip.encode(this.#files) as ArrayBuffer\n }\n\n public get name(): string {\n return `${this.key}.zip`\n }\n\n public id(remote: string): string {\n return `${this.key}-${remote}${this.#refs ? '.refs' : ''}${this.#pubkey ? '.enc' : ''}`\n }\n\n public formData(expire = 30): FormData {\n const blob = new Blob([this.zip], { type: 'application/zip' })\n const formData = new FormData()\n formData.append('file', blob, this.name)\n formData.append('expire', `${expire * 24}`)\n return formData\n }\n}\n\ndeclare var Zotero: { // eslint-disable-line no-var\n platformMajorVersion: number\n debug: (msg: string) => void\n DebugLogSender: {\n plugins: Record<string, string[]>\n }\n Translate: any\n Prefs: {\n get: (name: string, global?: boolean) => string | number | boolean\n }\n getInstalledExtensions: () => Promise<string[]>\n platform: string\n oscpu: string\n arch: string\n locale: string\n Utilities: {\n generateObjectKey: () => string\n }\n Debug: {\n enabled: boolean\n getConsoleViewerOutput: () => string[]\n }\n getErrors: (something: boolean) => string[]\n Schema: {\n schemaUpdatePromise: Promise<void>\n }\n getActiveZoteroPane: () => ZoteroPane\n getMainWindow(): Window\n}\n\ndeclare var Services: any // eslint-disable-line no-var\ndeclare const Components: any\ndeclare const ChromeUtils: any\n\ntype ExportTranslator = {\n setHandler: (phase: string, handler: (obj: { string: string }, success: boolean) => void) => void // eslint-disable-line id-blacklist\n setTranslator: (id: string) => void\n setItems: (items: any[]) => void\n translate: () => void\n}\n\nconst zotero_prefs_root = 'extensions.zotero.'\n\nclass DebugLogSender {\n public id = {\n menu: 'debug-log-sender-menu',\n menupopup: 'debug-log-sender-menupopup',\n menuitem: 'debug-log-sender',\n }\n\n public debugEnabledAtStart: boolean = typeof Zotero !== 'undefined'\n ? (Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled) as unknown as boolean\n : null\n\n private element(name: string, attrs: Record<string, string> = {}): HTMLElement {\n const doc = Zotero.getMainWindow().document\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const elt: HTMLElement = doc[Zotero.platformMajorVersion >= 102 ? 'createXULElement' : 'createElement'](name)\n for (const [k, v] of Object.entries(attrs)) {\n elt.setAttribute(k, v)\n }\n return elt\n }\n\n public register(plugin: string, preferences: string[] = [], pubkey = ''): void {\n const label = 'Send plugin debug log'\n\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n let menupopup = doc.querySelector(`#${this.id.menupopup}`)\n if (menupopup) {\n menupopup.setAttribute('label', label)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label }))\n .appendChild(this.element('menupopup', { id: this.id.menupopup }))\n }\n\n doc.querySelector(`.${this.id.menuitem}[label=${JSON.stringify(plugin)}]`)?.remove()\n const menuitem = menupopup.appendChild(this.element('menuitem', {\n label: plugin,\n class: this.id.menuitem,\n 'data-preferences': JSON.stringify(preferences || []),\n 'data-pubkey': pubkey,\n }))\n menuitem.addEventListener('command', event => this.send(event.currentTarget))\n }\n }\n\n public unregister(plugin: string): void {\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n doc.querySelector(`.debug-log-sender[label=${JSON.stringify(plugin)}]`)?.remove()\n const menupopup = doc.querySelector('#debug-log-sender-menupopup')\n if (menupopup && !menupopup.children.length) doc.querySelector('#debug-log-sender-menu')?.remove()\n }\n }\n\n public send(target: EventTarget): void {\n const elt: HTMLElement = target as unknown as HTMLElement\n const plugin: string = elt.getAttribute('label')\n const preferences: string[] = JSON.parse(elt.getAttribute('data-preferences')) as string[]\n const pubkey: string = elt.getAttribute('data-pubkey')\n\n this.sendAsync(plugin, preferences, pubkey).catch((err: Error) => {\n Services.prompt.alert(null, 'Debug log submission error', `${err}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n })\n }\n\n private async sendAsync(plugin: string, preferences: string[], pubkey = '') {\n await Zotero.Schema.schemaUpdatePromise\n\n const bundler = new Bundler(pubkey)\n\n let log = [\n await this.info(preferences),\n Zotero.getErrors(true).join('\\n\\n'),\n Zotero.Debug.getConsoleViewerOutput().slice(-250000).join('\\n'), // eslint-disable-line no-magic-numbers\n ].filter((txt: string) => txt).join('\\n\\n').trim()\n await bundler.add('debug.txt', log)\n\n let rdf = await this.rdf()\n if (rdf) await bundler.add('items.rdf', rdf, true)\n\n try {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: bundler.formData(),\n headers: {\n 'User-Agent': `Zotero-plugin/${pkg.version}`,\n },\n })\n const body = await response.text()\n const id = body.match(/https:\\/\\/0x0.st\\/([A-Z0-9]+)\\.zip/i)\n if (!id) throw new Error(body)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, bundler.id(`0x0-${id[1]}`))\n }\n catch (err) {\n Services.prompt.alert(null, `Could not post debug log for ${plugin}`, err.message)\n }\n }\n\n private preferences(preferences: string[]): Record<string, string | number | boolean> {\n const prefs: Record<string, string | number | boolean> = {}\n\n const names: string[] = []\n for (let pref of preferences) {\n if (pref[0] === ':') {\n pref = pref.substring(1)\n }\n else if (!pref.startsWith(zotero_prefs_root)) {\n pref = zotero_prefs_root + pref\n }\n if (pref.endsWith('.')) {\n const childkeys: string[] = Services.prefs.getBranch(pref).getChildList('', {})\n for (const key of childkeys) {\n names.push(pref + key)\n }\n }\n else {\n names.push(pref)\n }\n }\n\n for (const pref of names.sort()) {\n prefs[pref] = Zotero.Prefs.get(pref, true)\n }\n\n return prefs\n }\n\n // general state of Zotero\n private async info(preferences: string[]): Promise<string> {\n let info = ''\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const appInfo: { name: string; version: string } = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo)\n info += `Application: ${appInfo.name} ${appInfo.version} ${Zotero.locale}\\n`\n\n const platform = ['Win', 'Mac', 'Linux'].find(p => Zotero[`is${p}`]) || 'Unknown'\n const arch = Zotero.oscpu || Zotero.arch\n info += `Platform: ${platform} ${arch}\\n`\n\n const addons: string[] = await Zotero.getInstalledExtensions()\n if (addons.length) {\n info += 'Addons:\\n' + addons.map((addon: string) => ` ${addon}\\n`).join('') // eslint-disable-line prefer-template\n }\n info += `Debug logging on at Zotero start: ${this.debugEnabledAtStart}\\n`\n info += `Debug logging on at log submit: ${Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled}\\n`\n\n for (const [pref, value] of Object.entries(this.preferences(preferences))) {\n info += `${pref} = ${JSON.stringify(value)}\\n`\n }\n\n return info\n }\n\n private rdf(): Promise<string> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const items: any[] = Zotero.getActiveZoteroPane().getSelectedItems()\n if (items.length === 0) return resolve('')\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const translation: ExportTranslator = new Zotero.Translate.Export() as ExportTranslator\n translation.setItems(items)\n translation.setTranslator('14763d24-8ba0-45df-8f52-b8d1108e7ac9') // rdf\n\n translation.setHandler('done', (obj, success) => {\n if (success) {\n resolve(obj ? obj.string : undefined)\n }\n else {\n reject(new Error('translation failed'))\n }\n })\n\n translation.translate() // eslint-disable-line @typescript-eslint/no-unsafe-call\n })\n }\n\n private arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = new Uint8Array(buffer)\n const len = bytes.byteLength\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n private base64ToArrayBuffer(base64) {\n const binaryString = atob(base64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes.buffer\n }\n}\n\nexport const DebugLog = new DebugLogSender()\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"7.0.3\",\n \"description\": \"Zotero plugin builder\",\n \"homepage\": \"https://github.com/retorquere/zotero-plugin/wiki\",\n \"type\": \"module\",\n \"main\": \"./dist/cjs/index.js\",\n \"module\": \"./dist/esm/index.js\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/esm/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./debug-log\": {\n \"import\": \"./dist/esm/utils/debug-log.js\",\n \"require\": \"./dist/cjs/utils/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/utils/logger.js\",\n \"require\": \"./dist/cjs/utils/logger.cjs\"\n },\n \"./copy-assets\": {\n \"import\": \"dist/esm/bin/copy-assets.js\",\n \"require\": \"dist/cjs/bin/copy-assets.cjs\"\n },\n \"./make-dirs\": {\n \"import\": \"dist/esm/bin/make-dirs.js\",\n \"require\": \"dist/cjs/bin/make-dirs.cjs\"\n },\n \"./make-manifest\": {\n \"import\": \"dist/esm/bin/make-manifest.js\",\n \"require\": \"dist/cjs/bin/make-manifest.cjs\"\n },\n \"./make-version\": {\n \"import\": \"dist/esm/bin/version.js\",\n \"require\": \"dist/cjs/bin/version.cjs\"\n }\n },\n \"author\": {\n \"name\": \"Emiliano Heyns\",\n \"email\": \"Emiliano.Heyns@iris-advies.com\"\n },\n \"scripts\": {\n \"preversion\": \"npm test\",\n \"postversion\": \"git push --follow-tags\",\n \"test\": \"dprint fmt *.ts */*.ts && dprint check *.ts */*.ts && npm run build\",\n \"prebuild\": \"rm -rf dist\",\n \"build\": \"tsup\",\n \"check\": \"tsc --noEmit\",\n \"start\": \"concurrently --raw --group 'npm run check' 'npm run build'\",\n \"pack\": \"npm test && npm pack\",\n \"prepublishOnly\": \"npm install && npm run build\",\n \"ncu\": \"ncu -u && npm i && git add package.json package-lock.json && git commit -m ncu\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"dependencies\": {\n \"@fluent/syntax\": \"^0.19.0\",\n \"@napi-rs/keyring\": \"^1.2.0\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^24.9.1\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.17.1\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.1\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^3.1.10\",\n \"fs-extra\": \"^11.3.2\",\n \"glob\": \"^11.0.3\",\n \"ini\": \"^6.0.0\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.21\",\n \"moment\": \"^2.30.1\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.2.2\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"shelljs\": \"^0.10.0\",\n \"string-to-arraybuffer\": \"^1.0.2\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.8.1\",\n \"typescript\": \"^5.9.3\",\n \"uri-templates\": \"^0.2.0\",\n \"url-template\": \"^3.1.1\",\n \"uzip\": \"^0.20201231.0\",\n \"xml-parser\": \"^1.2.1\",\n \"xpath\": \"^0.0.34\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/retorquere/zotero-plugin.git\"\n },\n \"license\": \"ISC\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"dist\"\n ],\n \"bin\": {\n \"zp-release\": \"dist/cjs/bin/release.cjs\",\n \"zp-zipup\": \"dist/cjs/bin/zipup.cjs\",\n \"zp-link\": \"dist/cjs/bin/link.cjs\",\n \"issue-branches\": \"dist/cjs/bin/branches.cjs\",\n \"zotero-start\": \"dist/cjs/bin/start.cjs\",\n \"zp-fetch-log\": \"dist/cjs/bin/fetch-log.cjs\",\n \"zp-keypair\": \"dist/cjs/bin/keypair.cjs\",\n \"zp-copy-assets\": \"dist/cjs/copy-assets.cjs\",\n \"zp-make-dirs\": \"dist/cjs/make-dirs.cjs\",\n \"zp-manifest\": \"dist/cjs/make-manifest.cjs\",\n \"zp-version\": \"dist/cjs/version.cjs\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/retorquere/zotero-plugin/issues\"\n },\n \"devDependencies\": {\n \"@openpgp/web-stream-tools\": \"^0.2.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.50.2\",\n \"esbuild\": \"^0.25.11\",\n \"tsup\": \"^8.5.0\"\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../debug-log.ts","../../package.json"],"sourcesContent":["/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport pkg from './package.json'\n\nimport * as UZip from 'uzip'\n\n/*\nconst path = new class {\n #home = ''\n\n get home(): string {\n return this.#home = (this.#home || FileUtils.getDir('Home', []).path)\n }\n}\n*/\n\nexport class Bundler {\n public key: string\n\n #refs = false\n\n private IV_LENGTH = 12\n #symmetric: CryptoKey\n #pubkey: string\n\n #crypto: Crypto\n #subtle: SubtleCrypto\n #files: Record<string, Uint8Array> = {}\n\n #encoder = new TextEncoder()\n\n constructor(pubkey: string) {\n this.key = Zotero.Utilities.generateObjectKey()\n this.#pubkey = pubkey\n this.#crypto = Zotero.getMainWindow().crypto\n this.#subtle = this.#crypto.subtle\n }\n\n async add(path: string, data: string, refs = false): Promise<void> {\n this.#refs = this.#refs || refs\n\n const encoded = this.#encoder.encode(data)\n\n if (this.#pubkey) {\n if (!this.#symmetric) {\n this.#symmetric = await this.#subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'])\n\n const base64Pem = this.#pubkey\n .replace('-----BEGIN PUBLIC KEY-----', '')\n .replace('-----END PUBLIC KEY-----', '')\n .replace(/\\s/g, '')\n const keyBuffer = Uint8Array.from(atob(base64Pem), c => c.charCodeAt(0)).buffer\n const publicKey = await this.#subtle.importKey('spki', keyBuffer, { name: 'RSA-OAEP', hash: 'SHA-256' }, true, ['encrypt'])\n const exportedKey = await this.#subtle.exportKey('raw', this.#symmetric)\n\n this.#files[`${this.key}/${this.key}.key`] = new Uint8Array(await this.#subtle.encrypt({ name: 'RSA-OAEP' }, publicKey, exportedKey))\n }\n\n const iv = this.#crypto.getRandomValues(new Uint8Array(this.IV_LENGTH))\n const encryptedData = await this.#subtle.encrypt({ name: 'AES-GCM', iv: iv }, this.#symmetric, encoded)\n this.#files[`${this.key}/${path}.iv`] = iv\n this.#files[`${this.key}/${path}.enc`] = new Uint8Array(encryptedData)\n }\n else {\n this.#files[`${this.key}/${path}`] = encoded\n }\n }\n\n public get zip(): ArrayBuffer {\n return UZip.encode(this.#files) as ArrayBuffer\n }\n\n public get name(): string {\n return `${this.key}.zip`\n }\n\n public id(remote: string): string {\n return `${this.key}-${remote}${this.#refs ? '.refs' : ''}${this.#pubkey ? '.enc' : ''}`\n }\n\n public formData(expire = 30): FormData {\n const blob = new Blob([this.zip], { type: 'application/zip' })\n const formData = new FormData()\n formData.append('file', blob, this.name)\n formData.append('expire', `${expire * 24}`)\n return formData\n }\n}\n\ndeclare var Zotero: { // eslint-disable-line no-var\n platformMajorVersion: number\n debug: (msg: string) => void\n DebugLogSender: {\n plugins: Record<string, string[]>\n }\n Translate: any\n Prefs: {\n get: (name: string, global?: boolean) => string | number | boolean\n }\n getInstalledExtensions: () => Promise<string[]>\n platform: string\n oscpu: string\n arch: string\n locale: string\n Utilities: {\n generateObjectKey: () => string\n }\n Debug: {\n enabled: boolean\n getConsoleViewerOutput: () => string[]\n }\n getErrors: (something: boolean) => string[]\n Schema: {\n schemaUpdatePromise: Promise<void>\n }\n getActiveZoteroPane: () => ZoteroPane\n getMainWindow(): Window\n}\n\ndeclare var Services: any // eslint-disable-line no-var\ndeclare const Components: any\ndeclare const ChromeUtils: any\n\ntype ExportTranslator = {\n setHandler: (phase: string, handler: (obj: { string: string }, success: boolean) => void) => void // eslint-disable-line id-blacklist\n setTranslator: (id: string) => void\n setItems: (items: any[]) => void\n translate: () => void\n}\n\nconst zotero_prefs_root = 'extensions.zotero.'\n\nclass DebugLogSender {\n public id = {\n menu: 'debug-log-sender-menu',\n menupopup: 'debug-log-sender-menupopup',\n menuitem: 'debug-log-sender',\n }\n\n public debugEnabledAtStart: boolean = typeof Zotero !== 'undefined'\n ? (Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled) as unknown as boolean\n : null\n\n private element(name: string, attrs: Record<string, string> = {}): HTMLElement {\n const doc = Zotero.getMainWindow().document\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const elt: HTMLElement = doc[Zotero.platformMajorVersion >= 102 ? 'createXULElement' : 'createElement'](name)\n for (const [k, v] of Object.entries(attrs)) {\n elt.setAttribute(k, v)\n }\n return elt\n }\n\n public register(plugin: string, preferences: string[] = [], pubkey = ''): void {\n const label = 'Send plugin debug log'\n\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n let menupopup = doc.querySelector(`#${this.id.menupopup}`)\n if (menupopup) {\n menupopup.setAttribute('label', label)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label }))\n .appendChild(this.element('menupopup', { id: this.id.menupopup }))\n }\n\n doc.querySelector(`.${this.id.menuitem}[label=${JSON.stringify(plugin)}]`)?.remove()\n const menuitem = menupopup.appendChild(this.element('menuitem', {\n label: plugin,\n class: this.id.menuitem,\n 'data-preferences': JSON.stringify(preferences || []),\n 'data-pubkey': pubkey,\n }))\n menuitem.addEventListener('command', event => this.send(event.currentTarget))\n }\n }\n\n public unregister(plugin: string): void {\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n doc.querySelector(`.debug-log-sender[label=${JSON.stringify(plugin)}]`)?.remove()\n const menupopup = doc.querySelector('#debug-log-sender-menupopup')\n if (menupopup && !menupopup.children.length) doc.querySelector('#debug-log-sender-menu')?.remove()\n }\n }\n\n public send(target: EventTarget): void {\n const elt: HTMLElement = target as unknown as HTMLElement\n const plugin: string = elt.getAttribute('label')\n const preferences: string[] = JSON.parse(elt.getAttribute('data-preferences')) as string[]\n const pubkey: string = elt.getAttribute('data-pubkey')\n\n this.sendAsync(plugin, preferences, pubkey).catch((err: Error) => {\n Services.prompt.alert(null, 'Debug log submission error', `${err}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n })\n }\n\n private async sendAsync(plugin: string, preferences: string[], pubkey = '') {\n await Zotero.Schema.schemaUpdatePromise\n\n const bundler = new Bundler(pubkey)\n\n let log = [\n await this.info(preferences),\n Zotero.getErrors(true).join('\\n\\n'),\n Zotero.Debug.getConsoleViewerOutput().slice(-250000).join('\\n'), // eslint-disable-line no-magic-numbers\n ].filter((txt: string) => txt).join('\\n\\n').trim()\n await bundler.add('debug.txt', log)\n\n let rdf = await this.rdf()\n if (rdf) await bundler.add('items.rdf', rdf, true)\n\n try {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: bundler.formData(),\n headers: {\n 'User-Agent': `Zotero-plugin/${pkg.version}`,\n },\n })\n const body = await response.text()\n const id = body.match(/https:\\/\\/0x0.st\\/([A-Z0-9]+)\\.zip/i)\n if (!id) throw new Error(body)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, bundler.id(`0x0-${id[1]}`))\n }\n catch (err) {\n Services.prompt.alert(null, `Could not post debug log for ${plugin}`, err.message)\n }\n }\n\n private preferences(preferences: string[]): Record<string, string | number | boolean> {\n const prefs: Record<string, string | number | boolean> = {}\n\n const names: string[] = []\n for (let pref of preferences) {\n if (pref[0] === ':') {\n pref = pref.substring(1)\n }\n else if (!pref.startsWith(zotero_prefs_root)) {\n pref = zotero_prefs_root + pref\n }\n if (pref.endsWith('.')) {\n const childkeys: string[] = Services.prefs.getBranch(pref).getChildList('', {})\n for (const key of childkeys) {\n names.push(pref + key)\n }\n }\n else {\n names.push(pref)\n }\n }\n\n for (const pref of names.sort()) {\n prefs[pref] = Zotero.Prefs.get(pref, true)\n }\n\n return prefs\n }\n\n // general state of Zotero\n private async info(preferences: string[]): Promise<string> {\n let info = ''\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const appInfo: { name: string; version: string } = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo)\n info += `Application: ${appInfo.name} ${appInfo.version} ${Zotero.locale}\\n`\n\n const platform = ['Win', 'Mac', 'Linux'].find(p => Zotero[`is${p}`]) || 'Unknown'\n const arch = Zotero.oscpu || Zotero.arch\n info += `Platform: ${platform} ${arch}\\n`\n\n const addons: string[] = await Zotero.getInstalledExtensions()\n if (addons.length) {\n info += 'Addons:\\n' + addons.map((addon: string) => ` ${addon}\\n`).join('') // eslint-disable-line prefer-template\n }\n info += `Debug logging on at Zotero start: ${this.debugEnabledAtStart}\\n`\n info += `Debug logging on at log submit: ${Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled}\\n`\n\n for (const [pref, value] of Object.entries(this.preferences(preferences))) {\n info += `${pref} = ${JSON.stringify(value)}\\n`\n }\n\n return info\n }\n\n private rdf(): Promise<string> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const items: any[] = Zotero.getActiveZoteroPane().getSelectedItems()\n if (items.length === 0) return resolve('')\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const translation: ExportTranslator = new Zotero.Translate.Export() as ExportTranslator\n translation.setItems(items)\n translation.setTranslator('14763d24-8ba0-45df-8f52-b8d1108e7ac9') // rdf\n\n translation.setHandler('done', (obj, success) => {\n if (success) {\n resolve(obj ? obj.string : undefined)\n }\n else {\n reject(new Error('translation failed'))\n }\n })\n\n translation.translate() // eslint-disable-line @typescript-eslint/no-unsafe-call\n })\n }\n\n private arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = new Uint8Array(buffer)\n const len = bytes.byteLength\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n private base64ToArrayBuffer(base64) {\n const binaryString = atob(base64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes.buffer\n }\n}\n\nexport const DebugLog = new DebugLogSender()\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"7.0.4\",\n \"description\": \"Zotero plugin builder\",\n \"homepage\": \"https://github.com/retorquere/zotero-plugin/wiki\",\n \"type\": \"module\",\n \"main\": \"./dist/cjs/index.js\",\n \"module\": \"./dist/esm/index.js\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/esm/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./debug-log\": {\n \"import\": \"./dist/esm/utils/debug-log.js\",\n \"require\": \"./dist/cjs/utils/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/utils/logger.js\",\n \"require\": \"./dist/cjs/utils/logger.cjs\"\n },\n \"./copy-assets\": {\n \"import\": \"./dist/esm/bin/copy-assets.js\",\n \"require\": \"./dist/cjs/bin/copy-assets.cjs\"\n },\n \"./make-dirs\": {\n \"import\": \"./dist/esm/bin/make-dirs.js\",\n \"require\": \"./dist/cjs/bin/make-dirs.cjs\"\n },\n \"./make-manifest\": {\n \"import\": \"./dist/esm/bin/make-manifest.js\",\n \"require\": \"./dist/cjs/bin/make-manifest.cjs\"\n },\n \"./make-version\": {\n \"import\": \"./dist/esm/bin/version.js\",\n \"require\": \"./dist/cjs/bin/version.cjs\"\n }\n },\n \"author\": {\n \"name\": \"Emiliano Heyns\",\n \"email\": \"Emiliano.Heyns@iris-advies.com\"\n },\n \"scripts\": {\n \"preversion\": \"npm test\",\n \"postversion\": \"git push --follow-tags\",\n \"test\": \"dprint fmt *.ts */*.ts && dprint check *.ts */*.ts && npm run build\",\n \"prebuild\": \"rm -rf dist\",\n \"build\": \"tsup\",\n \"check\": \"tsc --noEmit\",\n \"start\": \"concurrently --raw --group 'npm run check' 'npm run build'\",\n \"pack\": \"npm test && npm pack\",\n \"prepublishOnly\": \"npm install && npm run build\",\n \"ncu\": \"ncu -u && npm i && git add package.json package-lock.json && git commit -m ncu\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"dependencies\": {\n \"@fluent/syntax\": \"^0.19.0\",\n \"@napi-rs/keyring\": \"^1.2.0\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^24.9.1\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.17.1\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.1\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^3.1.10\",\n \"fs-extra\": \"^11.3.2\",\n \"glob\": \"^11.0.3\",\n \"ini\": \"^6.0.0\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.21\",\n \"moment\": \"^2.30.1\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.2.2\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"shelljs\": \"^0.10.0\",\n \"string-to-arraybuffer\": \"^1.0.2\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.8.1\",\n \"typescript\": \"^5.9.3\",\n \"uri-templates\": \"^0.2.0\",\n \"url-template\": \"^3.1.1\",\n \"uzip\": \"^0.20201231.0\",\n \"xml-parser\": \"^1.2.1\",\n \"xpath\": \"^0.0.34\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/retorquere/zotero-plugin.git\"\n },\n \"license\": \"ISC\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"dist\"\n ],\n \"bin\": {\n \"zp-release\": \"dist/cjs/bin/release.cjs\",\n \"zp-zipup\": \"dist/cjs/bin/zipup.cjs\",\n \"zp-link\": \"dist/cjs/bin/link.cjs\",\n \"issue-branches\": \"dist/cjs/bin/branches.cjs\",\n \"zotero-start\": \"dist/cjs/bin/start.cjs\",\n \"zp-fetch-log\": \"dist/cjs/bin/fetch-log.cjs\",\n \"zp-keypair\": \"dist/cjs/bin/keypair.cjs\",\n \"zp-copy-assets\": \"dist/cjs/copy-assets.cjs\",\n \"zp-make-dirs\": \"dist/cjs/make-dirs.cjs\",\n \"zp-manifest\": \"dist/cjs/make-manifest.cjs\",\n \"zp-version\": \"dist/cjs/version.cjs\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/retorquere/zotero-plugin/issues\"\n },\n \"devDependencies\": {\n \"@openpgp/web-stream-tools\": \"^0.2.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.50.2\",\n \"esbuild\": \"^0.25.11\",\n \"tsup\": \"^8.5.0\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  "name": "zotero-plugin",
4
- "version": "7.0.3",
4
+ "version": "7.0.4",
5
5
  "description": "Zotero plugin builder",
6
6
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
7
7
  "type": "module",
@@ -21,20 +21,20 @@ var package_default = {
21
21
  "require": "./dist/cjs/utils/logger.cjs"
22
22
  },
23
23
  "./copy-assets": {
24
- "import": "dist/esm/bin/copy-assets.js",
25
- "require": "dist/cjs/bin/copy-assets.cjs"
24
+ "import": "./dist/esm/bin/copy-assets.js",
25
+ "require": "./dist/cjs/bin/copy-assets.cjs"
26
26
  },
27
27
  "./make-dirs": {
28
- "import": "dist/esm/bin/make-dirs.js",
29
- "require": "dist/cjs/bin/make-dirs.cjs"
28
+ "import": "./dist/esm/bin/make-dirs.js",
29
+ "require": "./dist/cjs/bin/make-dirs.cjs"
30
30
  },
31
31
  "./make-manifest": {
32
- "import": "dist/esm/bin/make-manifest.js",
33
- "require": "dist/cjs/bin/make-manifest.cjs"
32
+ "import": "./dist/esm/bin/make-manifest.js",
33
+ "require": "./dist/cjs/bin/make-manifest.cjs"
34
34
  },
35
35
  "./make-version": {
36
- "import": "dist/esm/bin/version.js",
37
- "require": "dist/cjs/bin/version.cjs"
36
+ "import": "./dist/esm/bin/version.js",
37
+ "require": "./dist/cjs/bin/version.cjs"
38
38
  }
39
39
  },
40
40
  "author": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json","../../debug-log.ts"],"sourcesContent":["export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"7.0.3\",\n \"description\": \"Zotero plugin builder\",\n \"homepage\": \"https://github.com/retorquere/zotero-plugin/wiki\",\n \"type\": \"module\",\n \"main\": \"./dist/cjs/index.js\",\n \"module\": \"./dist/esm/index.js\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/esm/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./debug-log\": {\n \"import\": \"./dist/esm/utils/debug-log.js\",\n \"require\": \"./dist/cjs/utils/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/utils/logger.js\",\n \"require\": \"./dist/cjs/utils/logger.cjs\"\n },\n \"./copy-assets\": {\n \"import\": \"dist/esm/bin/copy-assets.js\",\n \"require\": \"dist/cjs/bin/copy-assets.cjs\"\n },\n \"./make-dirs\": {\n \"import\": \"dist/esm/bin/make-dirs.js\",\n \"require\": \"dist/cjs/bin/make-dirs.cjs\"\n },\n \"./make-manifest\": {\n \"import\": \"dist/esm/bin/make-manifest.js\",\n \"require\": \"dist/cjs/bin/make-manifest.cjs\"\n },\n \"./make-version\": {\n \"import\": \"dist/esm/bin/version.js\",\n \"require\": \"dist/cjs/bin/version.cjs\"\n }\n },\n \"author\": {\n \"name\": \"Emiliano Heyns\",\n \"email\": \"Emiliano.Heyns@iris-advies.com\"\n },\n \"scripts\": {\n \"preversion\": \"npm test\",\n \"postversion\": \"git push --follow-tags\",\n \"test\": \"dprint fmt *.ts */*.ts && dprint check *.ts */*.ts && npm run build\",\n \"prebuild\": \"rm -rf dist\",\n \"build\": \"tsup\",\n \"check\": \"tsc --noEmit\",\n \"start\": \"concurrently --raw --group 'npm run check' 'npm run build'\",\n \"pack\": \"npm test && npm pack\",\n \"prepublishOnly\": \"npm install && npm run build\",\n \"ncu\": \"ncu -u && npm i && git add package.json package-lock.json && git commit -m ncu\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"dependencies\": {\n \"@fluent/syntax\": \"^0.19.0\",\n \"@napi-rs/keyring\": \"^1.2.0\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^24.9.1\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.17.1\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.1\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^3.1.10\",\n \"fs-extra\": \"^11.3.2\",\n \"glob\": \"^11.0.3\",\n \"ini\": \"^6.0.0\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.21\",\n \"moment\": \"^2.30.1\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.2.2\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"shelljs\": \"^0.10.0\",\n \"string-to-arraybuffer\": \"^1.0.2\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.8.1\",\n \"typescript\": \"^5.9.3\",\n \"uri-templates\": \"^0.2.0\",\n \"url-template\": \"^3.1.1\",\n \"uzip\": \"^0.20201231.0\",\n \"xml-parser\": \"^1.2.1\",\n \"xpath\": \"^0.0.34\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/retorquere/zotero-plugin.git\"\n },\n \"license\": \"ISC\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"dist\"\n ],\n \"bin\": {\n \"zp-release\": \"dist/cjs/bin/release.cjs\",\n \"zp-zipup\": \"dist/cjs/bin/zipup.cjs\",\n \"zp-link\": \"dist/cjs/bin/link.cjs\",\n \"issue-branches\": \"dist/cjs/bin/branches.cjs\",\n \"zotero-start\": \"dist/cjs/bin/start.cjs\",\n \"zp-fetch-log\": \"dist/cjs/bin/fetch-log.cjs\",\n \"zp-keypair\": \"dist/cjs/bin/keypair.cjs\",\n \"zp-copy-assets\": \"dist/cjs/copy-assets.cjs\",\n \"zp-make-dirs\": \"dist/cjs/make-dirs.cjs\",\n \"zp-manifest\": \"dist/cjs/make-manifest.cjs\",\n \"zp-version\": \"dist/cjs/version.cjs\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/retorquere/zotero-plugin/issues\"\n },\n \"devDependencies\": {\n \"@openpgp/web-stream-tools\": \"^0.2.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.50.2\",\n \"esbuild\": \"^0.25.11\",\n \"tsup\": \"^8.5.0\"\n }\n}\n","/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport pkg from './package.json'\n\nimport * as UZip from 'uzip'\n\n/*\nconst path = new class {\n #home = ''\n\n get home(): string {\n return this.#home = (this.#home || FileUtils.getDir('Home', []).path)\n }\n}\n*/\n\nexport class Bundler {\n public key: string\n\n #refs = false\n\n private IV_LENGTH = 12\n #symmetric: CryptoKey\n #pubkey: string\n\n #crypto: Crypto\n #subtle: SubtleCrypto\n #files: Record<string, Uint8Array> = {}\n\n #encoder = new TextEncoder()\n\n constructor(pubkey: string) {\n this.key = Zotero.Utilities.generateObjectKey()\n this.#pubkey = pubkey\n this.#crypto = Zotero.getMainWindow().crypto\n this.#subtle = this.#crypto.subtle\n }\n\n async add(path: string, data: string, refs = false): Promise<void> {\n this.#refs = this.#refs || refs\n\n const encoded = this.#encoder.encode(data)\n\n if (this.#pubkey) {\n if (!this.#symmetric) {\n this.#symmetric = await this.#subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'])\n\n const base64Pem = this.#pubkey\n .replace('-----BEGIN PUBLIC KEY-----', '')\n .replace('-----END PUBLIC KEY-----', '')\n .replace(/\\s/g, '')\n const keyBuffer = Uint8Array.from(atob(base64Pem), c => c.charCodeAt(0)).buffer\n const publicKey = await this.#subtle.importKey('spki', keyBuffer, { name: 'RSA-OAEP', hash: 'SHA-256' }, true, ['encrypt'])\n const exportedKey = await this.#subtle.exportKey('raw', this.#symmetric)\n\n this.#files[`${this.key}/${this.key}.key`] = new Uint8Array(await this.#subtle.encrypt({ name: 'RSA-OAEP' }, publicKey, exportedKey))\n }\n\n const iv = this.#crypto.getRandomValues(new Uint8Array(this.IV_LENGTH))\n const encryptedData = await this.#subtle.encrypt({ name: 'AES-GCM', iv: iv }, this.#symmetric, encoded)\n this.#files[`${this.key}/${path}.iv`] = iv\n this.#files[`${this.key}/${path}.enc`] = new Uint8Array(encryptedData)\n }\n else {\n this.#files[`${this.key}/${path}`] = encoded\n }\n }\n\n public get zip(): ArrayBuffer {\n return UZip.encode(this.#files) as ArrayBuffer\n }\n\n public get name(): string {\n return `${this.key}.zip`\n }\n\n public id(remote: string): string {\n return `${this.key}-${remote}${this.#refs ? '.refs' : ''}${this.#pubkey ? '.enc' : ''}`\n }\n\n public formData(expire = 30): FormData {\n const blob = new Blob([this.zip], { type: 'application/zip' })\n const formData = new FormData()\n formData.append('file', blob, this.name)\n formData.append('expire', `${expire * 24}`)\n return formData\n }\n}\n\ndeclare var Zotero: { // eslint-disable-line no-var\n platformMajorVersion: number\n debug: (msg: string) => void\n DebugLogSender: {\n plugins: Record<string, string[]>\n }\n Translate: any\n Prefs: {\n get: (name: string, global?: boolean) => string | number | boolean\n }\n getInstalledExtensions: () => Promise<string[]>\n platform: string\n oscpu: string\n arch: string\n locale: string\n Utilities: {\n generateObjectKey: () => string\n }\n Debug: {\n enabled: boolean\n getConsoleViewerOutput: () => string[]\n }\n getErrors: (something: boolean) => string[]\n Schema: {\n schemaUpdatePromise: Promise<void>\n }\n getActiveZoteroPane: () => ZoteroPane\n getMainWindow(): Window\n}\n\ndeclare var Services: any // eslint-disable-line no-var\ndeclare const Components: any\ndeclare const ChromeUtils: any\n\ntype ExportTranslator = {\n setHandler: (phase: string, handler: (obj: { string: string }, success: boolean) => void) => void // eslint-disable-line id-blacklist\n setTranslator: (id: string) => void\n setItems: (items: any[]) => void\n translate: () => void\n}\n\nconst zotero_prefs_root = 'extensions.zotero.'\n\nclass DebugLogSender {\n public id = {\n menu: 'debug-log-sender-menu',\n menupopup: 'debug-log-sender-menupopup',\n menuitem: 'debug-log-sender',\n }\n\n public debugEnabledAtStart: boolean = typeof Zotero !== 'undefined'\n ? (Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled) as unknown as boolean\n : null\n\n private element(name: string, attrs: Record<string, string> = {}): HTMLElement {\n const doc = Zotero.getMainWindow().document\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const elt: HTMLElement = doc[Zotero.platformMajorVersion >= 102 ? 'createXULElement' : 'createElement'](name)\n for (const [k, v] of Object.entries(attrs)) {\n elt.setAttribute(k, v)\n }\n return elt\n }\n\n public register(plugin: string, preferences: string[] = [], pubkey = ''): void {\n const label = 'Send plugin debug log'\n\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n let menupopup = doc.querySelector(`#${this.id.menupopup}`)\n if (menupopup) {\n menupopup.setAttribute('label', label)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label }))\n .appendChild(this.element('menupopup', { id: this.id.menupopup }))\n }\n\n doc.querySelector(`.${this.id.menuitem}[label=${JSON.stringify(plugin)}]`)?.remove()\n const menuitem = menupopup.appendChild(this.element('menuitem', {\n label: plugin,\n class: this.id.menuitem,\n 'data-preferences': JSON.stringify(preferences || []),\n 'data-pubkey': pubkey,\n }))\n menuitem.addEventListener('command', event => this.send(event.currentTarget))\n }\n }\n\n public unregister(plugin: string): void {\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n doc.querySelector(`.debug-log-sender[label=${JSON.stringify(plugin)}]`)?.remove()\n const menupopup = doc.querySelector('#debug-log-sender-menupopup')\n if (menupopup && !menupopup.children.length) doc.querySelector('#debug-log-sender-menu')?.remove()\n }\n }\n\n public send(target: EventTarget): void {\n const elt: HTMLElement = target as unknown as HTMLElement\n const plugin: string = elt.getAttribute('label')\n const preferences: string[] = JSON.parse(elt.getAttribute('data-preferences')) as string[]\n const pubkey: string = elt.getAttribute('data-pubkey')\n\n this.sendAsync(plugin, preferences, pubkey).catch((err: Error) => {\n Services.prompt.alert(null, 'Debug log submission error', `${err}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n })\n }\n\n private async sendAsync(plugin: string, preferences: string[], pubkey = '') {\n await Zotero.Schema.schemaUpdatePromise\n\n const bundler = new Bundler(pubkey)\n\n let log = [\n await this.info(preferences),\n Zotero.getErrors(true).join('\\n\\n'),\n Zotero.Debug.getConsoleViewerOutput().slice(-250000).join('\\n'), // eslint-disable-line no-magic-numbers\n ].filter((txt: string) => txt).join('\\n\\n').trim()\n await bundler.add('debug.txt', log)\n\n let rdf = await this.rdf()\n if (rdf) await bundler.add('items.rdf', rdf, true)\n\n try {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: bundler.formData(),\n headers: {\n 'User-Agent': `Zotero-plugin/${pkg.version}`,\n },\n })\n const body = await response.text()\n const id = body.match(/https:\\/\\/0x0.st\\/([A-Z0-9]+)\\.zip/i)\n if (!id) throw new Error(body)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, bundler.id(`0x0-${id[1]}`))\n }\n catch (err) {\n Services.prompt.alert(null, `Could not post debug log for ${plugin}`, err.message)\n }\n }\n\n private preferences(preferences: string[]): Record<string, string | number | boolean> {\n const prefs: Record<string, string | number | boolean> = {}\n\n const names: string[] = []\n for (let pref of preferences) {\n if (pref[0] === ':') {\n pref = pref.substring(1)\n }\n else if (!pref.startsWith(zotero_prefs_root)) {\n pref = zotero_prefs_root + pref\n }\n if (pref.endsWith('.')) {\n const childkeys: string[] = Services.prefs.getBranch(pref).getChildList('', {})\n for (const key of childkeys) {\n names.push(pref + key)\n }\n }\n else {\n names.push(pref)\n }\n }\n\n for (const pref of names.sort()) {\n prefs[pref] = Zotero.Prefs.get(pref, true)\n }\n\n return prefs\n }\n\n // general state of Zotero\n private async info(preferences: string[]): Promise<string> {\n let info = ''\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const appInfo: { name: string; version: string } = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo)\n info += `Application: ${appInfo.name} ${appInfo.version} ${Zotero.locale}\\n`\n\n const platform = ['Win', 'Mac', 'Linux'].find(p => Zotero[`is${p}`]) || 'Unknown'\n const arch = Zotero.oscpu || Zotero.arch\n info += `Platform: ${platform} ${arch}\\n`\n\n const addons: string[] = await Zotero.getInstalledExtensions()\n if (addons.length) {\n info += 'Addons:\\n' + addons.map((addon: string) => ` ${addon}\\n`).join('') // eslint-disable-line prefer-template\n }\n info += `Debug logging on at Zotero start: ${this.debugEnabledAtStart}\\n`\n info += `Debug logging on at log submit: ${Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled}\\n`\n\n for (const [pref, value] of Object.entries(this.preferences(preferences))) {\n info += `${pref} = ${JSON.stringify(value)}\\n`\n }\n\n return info\n }\n\n private rdf(): Promise<string> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const items: any[] = Zotero.getActiveZoteroPane().getSelectedItems()\n if (items.length === 0) return resolve('')\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const translation: ExportTranslator = new Zotero.Translate.Export() as ExportTranslator\n translation.setItems(items)\n translation.setTranslator('14763d24-8ba0-45df-8f52-b8d1108e7ac9') // rdf\n\n translation.setHandler('done', (obj, success) => {\n if (success) {\n resolve(obj ? obj.string : undefined)\n }\n else {\n reject(new Error('translation failed'))\n }\n })\n\n translation.translate() // eslint-disable-line @typescript-eslint/no-unsafe-call\n })\n }\n\n private arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = new Uint8Array(buffer)\n const len = bytes.byteLength\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n private base64ToArrayBuffer(base64) {\n const binaryString = atob(base64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes.buffer\n }\n}\n\nexport const DebugLog = new DebugLogSender()\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../package.json","../../debug-log.ts"],"sourcesContent":["export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"7.0.4\",\n \"description\": \"Zotero plugin builder\",\n \"homepage\": \"https://github.com/retorquere/zotero-plugin/wiki\",\n \"type\": \"module\",\n \"main\": \"./dist/cjs/index.js\",\n \"module\": \"./dist/esm/index.js\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/esm/index.js\",\n \"require\": \"./dist/cjs/index.cjs\"\n },\n \"./debug-log\": {\n \"import\": \"./dist/esm/utils/debug-log.js\",\n \"require\": \"./dist/cjs/utils/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/utils/logger.js\",\n \"require\": \"./dist/cjs/utils/logger.cjs\"\n },\n \"./copy-assets\": {\n \"import\": \"./dist/esm/bin/copy-assets.js\",\n \"require\": \"./dist/cjs/bin/copy-assets.cjs\"\n },\n \"./make-dirs\": {\n \"import\": \"./dist/esm/bin/make-dirs.js\",\n \"require\": \"./dist/cjs/bin/make-dirs.cjs\"\n },\n \"./make-manifest\": {\n \"import\": \"./dist/esm/bin/make-manifest.js\",\n \"require\": \"./dist/cjs/bin/make-manifest.cjs\"\n },\n \"./make-version\": {\n \"import\": \"./dist/esm/bin/version.js\",\n \"require\": \"./dist/cjs/bin/version.cjs\"\n }\n },\n \"author\": {\n \"name\": \"Emiliano Heyns\",\n \"email\": \"Emiliano.Heyns@iris-advies.com\"\n },\n \"scripts\": {\n \"preversion\": \"npm test\",\n \"postversion\": \"git push --follow-tags\",\n \"test\": \"dprint fmt *.ts */*.ts && dprint check *.ts */*.ts && npm run build\",\n \"prebuild\": \"rm -rf dist\",\n \"build\": \"tsup\",\n \"check\": \"tsc --noEmit\",\n \"start\": \"concurrently --raw --group 'npm run check' 'npm run build'\",\n \"pack\": \"npm test && npm pack\",\n \"prepublishOnly\": \"npm install && npm run build\",\n \"ncu\": \"ncu -u && npm i && git add package.json package-lock.json && git commit -m ncu\"\n },\n \"directories\": {\n \"test\": \"test\"\n },\n \"dependencies\": {\n \"@fluent/syntax\": \"^0.19.0\",\n \"@napi-rs/keyring\": \"^1.2.0\",\n \"@octokit/rest\": \"^22.0.0\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^24.9.1\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.17.1\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.1\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^3.1.10\",\n \"fs-extra\": \"^11.3.2\",\n \"glob\": \"^11.0.3\",\n \"ini\": \"^6.0.0\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.21\",\n \"moment\": \"^2.30.1\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.2.2\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"shelljs\": \"^0.10.0\",\n \"string-to-arraybuffer\": \"^1.0.2\",\n \"ts-node\": \"^10.9.2\",\n \"tslib\": \"^2.8.1\",\n \"typescript\": \"^5.9.3\",\n \"uri-templates\": \"^0.2.0\",\n \"url-template\": \"^3.1.1\",\n \"uzip\": \"^0.20201231.0\",\n \"xml-parser\": \"^1.2.1\",\n \"xpath\": \"^0.0.34\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/retorquere/zotero-plugin.git\"\n },\n \"license\": \"ISC\",\n \"files\": [\n \"package.json\",\n \"README.md\",\n \"dist\"\n ],\n \"bin\": {\n \"zp-release\": \"dist/cjs/bin/release.cjs\",\n \"zp-zipup\": \"dist/cjs/bin/zipup.cjs\",\n \"zp-link\": \"dist/cjs/bin/link.cjs\",\n \"issue-branches\": \"dist/cjs/bin/branches.cjs\",\n \"zotero-start\": \"dist/cjs/bin/start.cjs\",\n \"zp-fetch-log\": \"dist/cjs/bin/fetch-log.cjs\",\n \"zp-keypair\": \"dist/cjs/bin/keypair.cjs\",\n \"zp-copy-assets\": \"dist/cjs/copy-assets.cjs\",\n \"zp-make-dirs\": \"dist/cjs/make-dirs.cjs\",\n \"zp-manifest\": \"dist/cjs/make-manifest.cjs\",\n \"zp-version\": \"dist/cjs/version.cjs\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/retorquere/zotero-plugin/issues\"\n },\n \"devDependencies\": {\n \"@openpgp/web-stream-tools\": \"^0.2.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.50.2\",\n \"esbuild\": \"^0.25.11\",\n \"tsup\": \"^8.5.0\"\n }\n}\n","/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport pkg from './package.json'\n\nimport * as UZip from 'uzip'\n\n/*\nconst path = new class {\n #home = ''\n\n get home(): string {\n return this.#home = (this.#home || FileUtils.getDir('Home', []).path)\n }\n}\n*/\n\nexport class Bundler {\n public key: string\n\n #refs = false\n\n private IV_LENGTH = 12\n #symmetric: CryptoKey\n #pubkey: string\n\n #crypto: Crypto\n #subtle: SubtleCrypto\n #files: Record<string, Uint8Array> = {}\n\n #encoder = new TextEncoder()\n\n constructor(pubkey: string) {\n this.key = Zotero.Utilities.generateObjectKey()\n this.#pubkey = pubkey\n this.#crypto = Zotero.getMainWindow().crypto\n this.#subtle = this.#crypto.subtle\n }\n\n async add(path: string, data: string, refs = false): Promise<void> {\n this.#refs = this.#refs || refs\n\n const encoded = this.#encoder.encode(data)\n\n if (this.#pubkey) {\n if (!this.#symmetric) {\n this.#symmetric = await this.#subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'])\n\n const base64Pem = this.#pubkey\n .replace('-----BEGIN PUBLIC KEY-----', '')\n .replace('-----END PUBLIC KEY-----', '')\n .replace(/\\s/g, '')\n const keyBuffer = Uint8Array.from(atob(base64Pem), c => c.charCodeAt(0)).buffer\n const publicKey = await this.#subtle.importKey('spki', keyBuffer, { name: 'RSA-OAEP', hash: 'SHA-256' }, true, ['encrypt'])\n const exportedKey = await this.#subtle.exportKey('raw', this.#symmetric)\n\n this.#files[`${this.key}/${this.key}.key`] = new Uint8Array(await this.#subtle.encrypt({ name: 'RSA-OAEP' }, publicKey, exportedKey))\n }\n\n const iv = this.#crypto.getRandomValues(new Uint8Array(this.IV_LENGTH))\n const encryptedData = await this.#subtle.encrypt({ name: 'AES-GCM', iv: iv }, this.#symmetric, encoded)\n this.#files[`${this.key}/${path}.iv`] = iv\n this.#files[`${this.key}/${path}.enc`] = new Uint8Array(encryptedData)\n }\n else {\n this.#files[`${this.key}/${path}`] = encoded\n }\n }\n\n public get zip(): ArrayBuffer {\n return UZip.encode(this.#files) as ArrayBuffer\n }\n\n public get name(): string {\n return `${this.key}.zip`\n }\n\n public id(remote: string): string {\n return `${this.key}-${remote}${this.#refs ? '.refs' : ''}${this.#pubkey ? '.enc' : ''}`\n }\n\n public formData(expire = 30): FormData {\n const blob = new Blob([this.zip], { type: 'application/zip' })\n const formData = new FormData()\n formData.append('file', blob, this.name)\n formData.append('expire', `${expire * 24}`)\n return formData\n }\n}\n\ndeclare var Zotero: { // eslint-disable-line no-var\n platformMajorVersion: number\n debug: (msg: string) => void\n DebugLogSender: {\n plugins: Record<string, string[]>\n }\n Translate: any\n Prefs: {\n get: (name: string, global?: boolean) => string | number | boolean\n }\n getInstalledExtensions: () => Promise<string[]>\n platform: string\n oscpu: string\n arch: string\n locale: string\n Utilities: {\n generateObjectKey: () => string\n }\n Debug: {\n enabled: boolean\n getConsoleViewerOutput: () => string[]\n }\n getErrors: (something: boolean) => string[]\n Schema: {\n schemaUpdatePromise: Promise<void>\n }\n getActiveZoteroPane: () => ZoteroPane\n getMainWindow(): Window\n}\n\ndeclare var Services: any // eslint-disable-line no-var\ndeclare const Components: any\ndeclare const ChromeUtils: any\n\ntype ExportTranslator = {\n setHandler: (phase: string, handler: (obj: { string: string }, success: boolean) => void) => void // eslint-disable-line id-blacklist\n setTranslator: (id: string) => void\n setItems: (items: any[]) => void\n translate: () => void\n}\n\nconst zotero_prefs_root = 'extensions.zotero.'\n\nclass DebugLogSender {\n public id = {\n menu: 'debug-log-sender-menu',\n menupopup: 'debug-log-sender-menupopup',\n menuitem: 'debug-log-sender',\n }\n\n public debugEnabledAtStart: boolean = typeof Zotero !== 'undefined'\n ? (Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled) as unknown as boolean\n : null\n\n private element(name: string, attrs: Record<string, string> = {}): HTMLElement {\n const doc = Zotero.getMainWindow().document\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const elt: HTMLElement = doc[Zotero.platformMajorVersion >= 102 ? 'createXULElement' : 'createElement'](name)\n for (const [k, v] of Object.entries(attrs)) {\n elt.setAttribute(k, v)\n }\n return elt\n }\n\n public register(plugin: string, preferences: string[] = [], pubkey = ''): void {\n const label = 'Send plugin debug log'\n\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n let menupopup = doc.querySelector(`#${this.id.menupopup}`)\n if (menupopup) {\n menupopup.setAttribute('label', label)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label }))\n .appendChild(this.element('menupopup', { id: this.id.menupopup }))\n }\n\n doc.querySelector(`.${this.id.menuitem}[label=${JSON.stringify(plugin)}]`)?.remove()\n const menuitem = menupopup.appendChild(this.element('menuitem', {\n label: plugin,\n class: this.id.menuitem,\n 'data-preferences': JSON.stringify(preferences || []),\n 'data-pubkey': pubkey,\n }))\n menuitem.addEventListener('command', event => this.send(event.currentTarget))\n }\n }\n\n public unregister(plugin: string): void {\n const doc = Zotero.getMainWindow()?.document\n if (doc) {\n doc.querySelector(`.debug-log-sender[label=${JSON.stringify(plugin)}]`)?.remove()\n const menupopup = doc.querySelector('#debug-log-sender-menupopup')\n if (menupopup && !menupopup.children.length) doc.querySelector('#debug-log-sender-menu')?.remove()\n }\n }\n\n public send(target: EventTarget): void {\n const elt: HTMLElement = target as unknown as HTMLElement\n const plugin: string = elt.getAttribute('label')\n const preferences: string[] = JSON.parse(elt.getAttribute('data-preferences')) as string[]\n const pubkey: string = elt.getAttribute('data-pubkey')\n\n this.sendAsync(plugin, preferences, pubkey).catch((err: Error) => {\n Services.prompt.alert(null, 'Debug log submission error', `${err}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n })\n }\n\n private async sendAsync(plugin: string, preferences: string[], pubkey = '') {\n await Zotero.Schema.schemaUpdatePromise\n\n const bundler = new Bundler(pubkey)\n\n let log = [\n await this.info(preferences),\n Zotero.getErrors(true).join('\\n\\n'),\n Zotero.Debug.getConsoleViewerOutput().slice(-250000).join('\\n'), // eslint-disable-line no-magic-numbers\n ].filter((txt: string) => txt).join('\\n\\n').trim()\n await bundler.add('debug.txt', log)\n\n let rdf = await this.rdf()\n if (rdf) await bundler.add('items.rdf', rdf, true)\n\n try {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: bundler.formData(),\n headers: {\n 'User-Agent': `Zotero-plugin/${pkg.version}`,\n },\n })\n const body = await response.text()\n const id = body.match(/https:\\/\\/0x0.st\\/([A-Z0-9]+)\\.zip/i)\n if (!id) throw new Error(body)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, bundler.id(`0x0-${id[1]}`))\n }\n catch (err) {\n Services.prompt.alert(null, `Could not post debug log for ${plugin}`, err.message)\n }\n }\n\n private preferences(preferences: string[]): Record<string, string | number | boolean> {\n const prefs: Record<string, string | number | boolean> = {}\n\n const names: string[] = []\n for (let pref of preferences) {\n if (pref[0] === ':') {\n pref = pref.substring(1)\n }\n else if (!pref.startsWith(zotero_prefs_root)) {\n pref = zotero_prefs_root + pref\n }\n if (pref.endsWith('.')) {\n const childkeys: string[] = Services.prefs.getBranch(pref).getChildList('', {})\n for (const key of childkeys) {\n names.push(pref + key)\n }\n }\n else {\n names.push(pref)\n }\n }\n\n for (const pref of names.sort()) {\n prefs[pref] = Zotero.Prefs.get(pref, true)\n }\n\n return prefs\n }\n\n // general state of Zotero\n private async info(preferences: string[]): Promise<string> {\n let info = ''\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const appInfo: { name: string; version: string } = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo)\n info += `Application: ${appInfo.name} ${appInfo.version} ${Zotero.locale}\\n`\n\n const platform = ['Win', 'Mac', 'Linux'].find(p => Zotero[`is${p}`]) || 'Unknown'\n const arch = Zotero.oscpu || Zotero.arch\n info += `Platform: ${platform} ${arch}\\n`\n\n const addons: string[] = await Zotero.getInstalledExtensions()\n if (addons.length) {\n info += 'Addons:\\n' + addons.map((addon: string) => ` ${addon}\\n`).join('') // eslint-disable-line prefer-template\n }\n info += `Debug logging on at Zotero start: ${this.debugEnabledAtStart}\\n`\n info += `Debug logging on at log submit: ${Zotero.Prefs.get('debug.store') || Zotero.Debug.enabled}\\n`\n\n for (const [pref, value] of Object.entries(this.preferences(preferences))) {\n info += `${pref} = ${JSON.stringify(value)}\\n`\n }\n\n return info\n }\n\n private rdf(): Promise<string> {\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment\n const items: any[] = Zotero.getActiveZoteroPane().getSelectedItems()\n if (items.length === 0) return resolve('')\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const translation: ExportTranslator = new Zotero.Translate.Export() as ExportTranslator\n translation.setItems(items)\n translation.setTranslator('14763d24-8ba0-45df-8f52-b8d1108e7ac9') // rdf\n\n translation.setHandler('done', (obj, success) => {\n if (success) {\n resolve(obj ? obj.string : undefined)\n }\n else {\n reject(new Error('translation failed'))\n }\n })\n\n translation.translate() // eslint-disable-line @typescript-eslint/no-unsafe-call\n })\n }\n\n private arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = new Uint8Array(buffer)\n const len = bytes.byteLength\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n private base64ToArrayBuffer(base64) {\n const binaryString = atob(base64)\n const len = binaryString.length\n const bytes = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i)\n }\n return bytes.buffer\n }\n}\n\nexport const DebugLog = new DebugLogSender()\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zotero-plugin",
3
- "version": "7.0.3",
3
+ "version": "7.0.4",
4
4
  "description": "Zotero plugin builder",
5
5
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
6
6
  "type": "module",
@@ -20,20 +20,20 @@
20
20
  "require": "./dist/cjs/utils/logger.cjs"
21
21
  },
22
22
  "./copy-assets": {
23
- "import": "dist/esm/bin/copy-assets.js",
24
- "require": "dist/cjs/bin/copy-assets.cjs"
23
+ "import": "./dist/esm/bin/copy-assets.js",
24
+ "require": "./dist/cjs/bin/copy-assets.cjs"
25
25
  },
26
26
  "./make-dirs": {
27
- "import": "dist/esm/bin/make-dirs.js",
28
- "require": "dist/cjs/bin/make-dirs.cjs"
27
+ "import": "./dist/esm/bin/make-dirs.js",
28
+ "require": "./dist/cjs/bin/make-dirs.cjs"
29
29
  },
30
30
  "./make-manifest": {
31
- "import": "dist/esm/bin/make-manifest.js",
32
- "require": "dist/cjs/bin/make-manifest.cjs"
31
+ "import": "./dist/esm/bin/make-manifest.js",
32
+ "require": "./dist/cjs/bin/make-manifest.cjs"
33
33
  },
34
34
  "./make-version": {
35
- "import": "dist/esm/bin/version.js",
36
- "require": "dist/cjs/bin/version.cjs"
35
+ "import": "./dist/esm/bin/version.js",
36
+ "require": "./dist/cjs/bin/version.cjs"
37
37
  }
38
38
  },
39
39
  "author": {