zotero-plugin 8.0.7 → 8.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,7 +135,7 @@ for (const translation of translations) {
135
135
  pkg.localizedDescriptions[locale] = description;
136
136
  }
137
137
  }
138
- var options_and_vars = { minVersion: "7.0.0", maxVersion: "8.*", ...pkg, pretty: true };
138
+ var options_and_vars = { minVersion: "7.0.32", maxVersion: "9.*", ...pkg, pretty: true };
139
139
  try {
140
140
  Object.assign(options_and_vars, JSON.parse(fs3.readFileSync(path3.join(root, "schema", "supported.json"), "utf8")));
141
141
  } catch {
@@ -154,7 +154,7 @@ fs3.writeFileSync(
154
154
  applications: {
155
155
  zotero: {
156
156
  strict_min_version: options_and_vars.minVersion,
157
- trict_max_version: options_and_vars.maxVersion
157
+ strict_max_version: options_and_vars.maxVersion
158
158
  }
159
159
  }
160
160
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\nimport { pkg, root } from './find-root'\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.0', maxVersion: '8.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n trict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { ContinuousIntegration as CI } from './continuous-integration'\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n $version = `${$version}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'node:child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","path","fs","import_node_fs","import_node_path","os","path","fs","glob","msg","attr","basename"]}
1
+ {"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\nimport { pkg, root } from './find-root'\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.32', maxVersion: '9.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { ContinuousIntegration as CI } from './continuous-integration'\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n $version = `${$version}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'node:child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","path","fs","import_node_fs","import_node_path","os","path","fs","glob","msg","attr","basename"]}
@@ -46,7 +46,7 @@ var UZip = __toESM(require("uzip"), 1);
46
46
  // package.json
47
47
  var package_default = {
48
48
  "name": "zotero-plugin",
49
- "version": "8.0.7",
49
+ "version": "8.0.9",
50
50
  "description": "Zotero plugin builder",
51
51
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
52
52
  "type": "module",
@@ -62,7 +62,7 @@ var package_default = {
62
62
  "require": "./dist/cjs/debug-log.cjs"
63
63
  },
64
64
  "./logger": {
65
- "import": "./dist/esm/ulogger.js",
65
+ "import": "./dist/esm/logger.js",
66
66
  "require": "./dist/cjs/logger.cjs"
67
67
  },
68
68
  ".loader/json": {
@@ -118,17 +118,17 @@ var package_default = {
118
118
  "@napi-rs/keyring": "^1.2.0",
119
119
  "@octokit/rest": "^22.0.1",
120
120
  "@rgrove/parse-xml": "^4.2.0",
121
- "@types/node": "^25.0.10",
121
+ "@types/node": "^25.2.3",
122
122
  "@xmldom/xmldom": "^0.9.8",
123
- "ajv": "^8.17.1",
123
+ "ajv": "^8.18.0",
124
124
  "ajv-keywords": "^5.1.0",
125
125
  "archiver": "^7.0.1",
126
126
  "clp": "^4.0.13",
127
- "commander": "^14.0.2",
128
- "dotenv": "^17.2.3",
127
+ "commander": "^14.0.3",
128
+ "dotenv": "^17.3.1",
129
129
  "ejs": "^4.0.1",
130
130
  "fs-extra": "^11.3.3",
131
- "glob": "^13.0.0",
131
+ "glob": "^13.0.3",
132
132
  "ini": "^6.0.0",
133
133
  "jose": "^6.1.3",
134
134
  "jsesc": "^3.1.0",
@@ -140,7 +140,7 @@ var package_default = {
140
140
  "peggy": "^5.0.6",
141
141
  "prompts": "^2.4.2",
142
142
  "pug": "^3.0.3",
143
- "rimraf": "^6.1.2",
143
+ "rimraf": "^6.1.3",
144
144
  "shell-quote": "^1.8.3",
145
145
  "shelljs": "^0.10.0",
146
146
  "string-to-arraybuffer": "^1.0.2",
@@ -183,7 +183,7 @@ var package_default = {
183
183
  "@openpgp/web-stream-tools": "^0.3.0",
184
184
  "concurrently": "^9.2.1",
185
185
  "dprint": "^0.51.1",
186
- "esbuild": "^0.27.2",
186
+ "esbuild": "^0.27.3",
187
187
  "tsup": "^8.5.1"
188
188
  }
189
189
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../debug-log.ts","../../crypto.ts","../../package.json"],"sourcesContent":["/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\nimport { CONTENT_ENCRYPTION_ALG, KEY_WRAPPING_ALG, KEYTYPE } from './crypto'\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport * as jose from 'jose'\nimport * as UZip from 'uzip'\nimport pkg from './package.json'\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 #pk?: JsonWebKey\n #pubKey?: CryptoKey\n\n #files: Record<string, Uint8Array> = {}\n #encoder = new TextEncoder()\n\n constructor(pk?: JsonWebKey) {\n this.key = Zotero.Utilities.generateObjectKey()\n\n if (pk && pk.kty === KEYTYPE) this.#pk = pk\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.#pk) {\n if (!this.#pubKey) this.#pubKey = (await jose.importJWK(this.#pk, KEY_WRAPPING_ALG)) as CryptoKey\n const jwe = await (new jose.CompactEncrypt(encoded))\n .setProtectedHeader({\n alg: KEY_WRAPPING_ALG,\n enc: CONTENT_ENCRYPTION_ALG,\n })\n .encrypt(this.#pubKey)\n\n this.#files[`${this.key}/${path}.jwe`] = this.#encoder.encode(jwe)\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 public async send(useragent, expire = 30): Promise<string> {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: this.formData(expire),\n headers: {\n 'User-Agent': useragent,\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 return this.id(`0x0-${id[1]}`)\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?: JsonWebKey): void {\n const menuLabel = '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', menuLabel)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label: menuLabel }))\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': JSON.stringify(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 ? JSON.parse(pubkey) : undefined)\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 logid = await bundler.send(`Zotero-plugin/${pkg.version}`)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, logid)\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 /*\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}\n\nexport const DebugLog = new DebugLogSender()\n","export const KEYTYPE = 'RSA'\nexport const KEY_WRAPPING_ALG = 'RSA-OAEP-256'\nexport const CONTENT_ENCRYPTION_ALG = 'A256GCM'\nexport const RSA_HASH = 'SHA-256'\nexport const RSA_ALGORITHM = 'RSA-OAEP'\nexport const CIPHER_ALGORITHM = 'aes256'\nexport const AES_KEY_LENGTH = 256\n// export const AES_KEY_BYTES = 32\n\n// export const AES_ALGORITHM = 'AES-GCM'\n// export const IV_LENGTH = 12\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"8.0.7\",\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/debug-log.js\",\n \"require\": \"./dist/cjs/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/ulogger.js\",\n \"require\": \"./dist/cjs/logger.cjs\"\n },\n \".loader/json\": {\n \"import\": \"./dist/esm/loader/json.js\",\n \"require\": \"./dist/cjs/loader/json.cjs\"\n },\n \".loader/peggy\": {\n \"import\": \"./dist/esm/loader/peggy.js\",\n \"require\": \"./dist/cjs/loader/peggy.cjs\"\n },\n \".loader/pem\": {\n \"import\": \"./dist/esm/loader/pem.js\",\n \"require\": \"./dist/cjs/loader/pem.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.1\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^25.0.10\",\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.2\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^4.0.1\",\n \"fs-extra\": \"^11.3.3\",\n \"glob\": \"^13.0.0\",\n \"ini\": \"^6.0.0\",\n \"jose\": \"^6.1.3\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.23\",\n \"moment\": \"^2.30.1\",\n \"node-forge\": \"^1.3.3\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.3.0\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.1.2\",\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.3.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.51.1\",\n \"esbuild\": \"^0.27.2\",\n \"tsup\": \"^8.5.1\"\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../debug-log.ts","../../crypto.ts","../../package.json"],"sourcesContent":["/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\nimport { CONTENT_ENCRYPTION_ALG, KEY_WRAPPING_ALG, KEYTYPE } from './crypto'\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport * as jose from 'jose'\nimport * as UZip from 'uzip'\nimport pkg from './package.json'\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 #pk?: JsonWebKey\n #pubKey?: CryptoKey\n\n #files: Record<string, Uint8Array> = {}\n #encoder = new TextEncoder()\n\n constructor(pk?: JsonWebKey) {\n this.key = Zotero.Utilities.generateObjectKey()\n\n if (pk && pk.kty === KEYTYPE) this.#pk = pk\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.#pk) {\n if (!this.#pubKey) this.#pubKey = (await jose.importJWK(this.#pk, KEY_WRAPPING_ALG)) as CryptoKey\n const jwe = await (new jose.CompactEncrypt(encoded))\n .setProtectedHeader({\n alg: KEY_WRAPPING_ALG,\n enc: CONTENT_ENCRYPTION_ALG,\n })\n .encrypt(this.#pubKey)\n\n this.#files[`${this.key}/${path}.jwe`] = this.#encoder.encode(jwe)\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 public async send(useragent, expire = 30): Promise<string> {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: this.formData(expire),\n headers: {\n 'User-Agent': useragent,\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 return this.id(`0x0-${id[1]}`)\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?: JsonWebKey): void {\n const menuLabel = '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', menuLabel)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label: menuLabel }))\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': JSON.stringify(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 ? JSON.parse(pubkey) : undefined)\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 logid = await bundler.send(`Zotero-plugin/${pkg.version}`)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, logid)\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 /*\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}\n\nexport const DebugLog = new DebugLogSender()\n","export const KEYTYPE = 'RSA'\nexport const KEY_WRAPPING_ALG = 'RSA-OAEP-256'\nexport const CONTENT_ENCRYPTION_ALG = 'A256GCM'\nexport const RSA_HASH = 'SHA-256'\nexport const RSA_ALGORITHM = 'RSA-OAEP'\nexport const CIPHER_ALGORITHM = 'aes256'\nexport const AES_KEY_LENGTH = 256\n// export const AES_KEY_BYTES = 32\n\n// export const AES_ALGORITHM = 'AES-GCM'\n// export const IV_LENGTH = 12\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"8.0.9\",\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/debug-log.js\",\n \"require\": \"./dist/cjs/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/logger.js\",\n \"require\": \"./dist/cjs/logger.cjs\"\n },\n \".loader/json\": {\n \"import\": \"./dist/esm/loader/json.js\",\n \"require\": \"./dist/cjs/loader/json.cjs\"\n },\n \".loader/peggy\": {\n \"import\": \"./dist/esm/loader/peggy.js\",\n \"require\": \"./dist/cjs/loader/peggy.cjs\"\n },\n \".loader/pem\": {\n \"import\": \"./dist/esm/loader/pem.js\",\n \"require\": \"./dist/cjs/loader/pem.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.1\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^25.2.3\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.18.0\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.3.1\",\n \"ejs\": \"^4.0.1\",\n \"fs-extra\": \"^11.3.3\",\n \"glob\": \"^13.0.3\",\n \"ini\": \"^6.0.0\",\n \"jose\": \"^6.1.3\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.23\",\n \"moment\": \"^2.30.1\",\n \"node-forge\": \"^1.3.3\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.3.0\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.1.3\",\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.3.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.51.1\",\n \"esbuild\": \"^0.27.3\",\n \"tsup\": \"^8.5.1\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -112,7 +112,7 @@ for (const translation of translations) {
112
112
  pkg.localizedDescriptions[locale] = description;
113
113
  }
114
114
  }
115
- var options_and_vars = { minVersion: "7.0.0", maxVersion: "8.*", ...pkg, pretty: true };
115
+ var options_and_vars = { minVersion: "7.0.32", maxVersion: "9.*", ...pkg, pretty: true };
116
116
  try {
117
117
  Object.assign(options_and_vars, JSON.parse(fs3.readFileSync(path3.join(root, "schema", "supported.json"), "utf8")));
118
118
  } catch {
@@ -131,7 +131,7 @@ fs3.writeFileSync(
131
131
  applications: {
132
132
  zotero: {
133
133
  strict_min_version: options_and_vars.minVersion,
134
- trict_max_version: options_and_vars.maxVersion
134
+ strict_max_version: options_and_vars.maxVersion
135
135
  }
136
136
  }
137
137
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\nimport { pkg, root } from './find-root'\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.0', maxVersion: '8.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n trict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { ContinuousIntegration as CI } from './continuous-integration'\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n $version = `${$version}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'node:child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","fs","path","path","fs","msg","attr","basename"]}
1
+ {"version":3,"sources":["../../../bin/make-manifest.ts","../../../bin/find-root.ts","../../../bin/version.ts","../../../bin/continuous-integration.ts"],"sourcesContent":["/* eslint-disable no-console, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/restrict-template-expressions, no-magic-numbers */\n\nimport * as FTL from '@fluent/syntax'\nimport * as fs from 'fs'\nimport { globSync as glob } from 'glob'\nimport * as path from 'path'\nimport { parseTemplate } from 'url-template'\n\nimport { pkg, root } from './find-root'\nimport { version } from './version'\n\nif (!pkg.id) (pkg.id as string) = `${pkg.name}@${pkg.author.email.replace(/.*@/, '')}`.toLowerCase()\nif (pkg.xpi) Object.assign(pkg, pkg.xpi)\n\npkg.version = version()\n\nif (pkg.updateLink) pkg.updateLink = parseTemplate(pkg.updateLink).expand({ version: pkg.version })\npkg.updateURL = `${pkg.xpi.releaseURL}update.rdf`\n\nconst translations = glob(path.join(root, 'locale/*/*.ftl'))\nfor (const translation of translations) {\n const locale = path.basename(path.dirname(translation))\n\n const ftl: FTL.Resource = FTL.parse(fs.readFileSync(translation, 'utf-8'), {})\n const body: FTL.Entry[] = ftl.body || []\n const msg: FTL.Message = body.find((msg: FTL.Entry) => msg.type === 'Message' && msg.id.type === 'Identifier' && msg.id.name === 'xpi') as FTL.Message\n if (!msg) continue\n const attr: FTL.Attribute = msg.attributes.find((attr: FTL.Attribute) => attr.id.type === 'Identifier' && attr.id.name === 'description')\n if (!attr) continue\n const description = attr.value.elements.filter((e: FTL.PatternElement) => e.type === 'TextElement').map((e: FTL.PatternElement) => e.value as string).join('')\n if (!description) continue\n\n if (locale === 'en-US') {\n pkg.description = description\n }\n else {\n pkg.localizedDescriptions = pkg.localizedDescriptions || {}\n pkg.localizedDescriptions[locale] = description\n }\n}\n\nconst options_and_vars = { minVersion: '7.0.32', maxVersion: '9.*', ...pkg, pretty: true }\ntry {\n Object.assign(options_and_vars, JSON.parse(fs.readFileSync(path.join(root, 'schema', 'supported.json'), 'utf8')))\n}\ncatch {\n // ignore\n}\n\nconsole.log('generating updates.json')\nfs.writeFileSync(\n path.join(root, 'gen/updates.json'),\n JSON.stringify(\n {\n addons: {\n [pkg.id]: {\n updates: [\n {\n version: options_and_vars.version,\n update_link: options_and_vars.updateLink,\n applications: {\n zotero: {\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n ],\n },\n },\n },\n null,\n 2,\n ),\n)\n\nlet icons: { small: string; big?: string }[] = []\nif (typeof pkg.xpi?.iconURL === 'string') icons.push({ small: pkg.xpi.iconURL.replace(/^chrome:\\/\\/[^/]+\\//, '') })\n\nconst basename = pkg.id.replace(/@.*/, '')\nfor (const icon of [`content/skin/${basename}.png`, `skin/${basename}.png`, `${basename}.png`, 'icon.png']) {\n icons.push({ small: icon })\n icons.push({ small: icon.replace('/zotero-', '/') })\n}\nicons.push(...icons.map(icon => ({ small: icon.small.replace(/[.](svg|png)$/, ext => ({ '.svg': '.png', '.png': '.svg' }[ext] || ext)) })))\nicons = icons.filter(icon => fs.existsSync(path.join(root, ...icon.small.split('/'))))\nicons = icons.map(icon => ({ ...icon, big: icon.small.endsWith('.svg') ? icon.small : icon.small.replace(/([.][^.]+)$/, '@2x$1') }))\nif (icons.length) {\n const { small, big } = icons[0]\n options_and_vars.icons = {\n 48: small,\n 96: fs.existsSync(path.join(root, ...big!.split('/'))) ? big : small,\n }\n}\n\nconsole.log('generating manifest.json')\nfs.writeFileSync(\n path.join(root, 'build/manifest.json'),\n JSON.stringify(\n {\n manifest_version: 2,\n name: options_and_vars.name,\n version: options_and_vars.version,\n description: options_and_vars.description,\n icons: options_and_vars.icons,\n applications: {\n zotero: {\n id: options_and_vars.id,\n update_url: options_and_vars.updateURL.replace('/update.rdf', '/updates.json'),\n strict_min_version: options_and_vars.minVersion,\n strict_max_version: options_and_vars.maxVersion,\n },\n },\n },\n null,\n 2,\n ),\n)\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst folders = process.cwd().split(path.sep)\nconst rootIndex = folders.findIndex((folder: string, i: number) => fs.existsSync(path.join(folders.slice(0, i + 1).join(path.sep), 'package.json')))\nexport const root = (rootIndex > 0 ? folders.slice(0, rootIndex + 1) : folders).join(path.sep)\nconsole.log('project directory:', root)\n\nexport const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'))\n","#!/usr/bin/env node\n\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport { ContinuousIntegration as CI } from './continuous-integration'\nimport { pkg, root } from './find-root'\n\nexport function version(): string {\n let $version = pkg.version as string\n\n if (CI.service && !CI.tag) {\n $version = `${$version}.${CI.build_number}`\n }\n else if (!CI.service) {\n $version = `${$version}.${os.userInfo().username}.${os.hostname()}`\n }\n\n const version_module = path.join(root, 'gen', 'version.cjs')\n if (!fs.existsSync(path.dirname(version_module))) fs.mkdirSync(path.dirname(version_module))\n fs.writeFileSync(version_module, `module.exports = { version: ${JSON.stringify($version)} }`)\n console.log('written version', $version, 'to', version_module)\n return $version\n}\n\nversion()\n","import * as child_process from 'node:child_process'\n\nclass ContinuousIntegrationSingleton {\n public service = ''\n public build_number: number\n public tag = ''\n public commit_message = ''\n public branch = ''\n public pull_request = false\n public issue = ''\n\n constructor() {\n for (const [id, name] of Object.entries({ CIRCLECI: 'Circle', TRAVIS: 'Travis', SEMAPHORE: 'Semaphore', GITHUB_ACTIONS: 'GitHub' })) {\n if (process.env[id] === 'true') this.service = name\n }\n\n switch (this.service) {\n case 'Circle':\n this.build_number = this.parseInt(process.env.CIRCLE_BUILD_NUM)\n try {\n this.tag = child_process.execSync(`git describe --exact-match ${process.env.CIRCLE_SHA1}`, { stdio: 'pipe' }).toString().trim()\n }\n catch (err) {\n this.tag = null\n }\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.CIRCLE_SHA1}`).toString().trim()\n this.branch = process.env.CIRCLE_BRANCH\n this.pull_request = !!process.env.CIRCLE_PULL_REQUEST\n break\n\n case 'GitHub':\n this.build_number = this.parseInt(process.env.GITHUB_RUN_NUMBER)\n this.commit_message = child_process.execSync(`git log --format=%B -n 1 ${process.env.GITHUB_SHA}`).toString().trim()\n this.pull_request = process.env.GITHUB_EVENT_NAME.startsWith('pull-request')\n\n if (process.env.GITHUB_HEAD_REF) {\n this.branch = process.env.GITHUB_HEAD_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/tags/')) {\n // leave branch undefined when tagged... not great\n this.tag = process.env.GITHUB_REF.split('/').pop()\n }\n else if (process.env.GITHUB_REF.startsWith('refs/heads/')) {\n this.branch = process.env.GITHUB_REF.split('/').pop()\n }\n this.branch = this.branch || ''\n this.issue = this.branch.match(/^gh-([0-9]+)$/)?.[1] || ''\n break\n\n default:\n if (process.env.CI === 'true') throw new Error(`Unexpected CI service ${this.service}`)\n }\n }\n\n private parseInt(n: number | string): number {\n if (typeof n === 'number') return n\n const int = parseInt(n)\n if (isNaN(int)) throw new Error(`${n} is not an integer`)\n return int\n }\n}\n\nexport const ContinuousIntegration = new ContinuousIntegrationSingleton() // eslint-disable-line @typescript-eslint/naming-convention,no-underscore-dangle,id-blacklist,id-match\n"],"mappings":"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","names":["fs","path","fs","path","path","fs","msg","attr","basename"]}
@@ -10,7 +10,7 @@ import * as UZip from "uzip";
10
10
  // package.json
11
11
  var package_default = {
12
12
  "name": "zotero-plugin",
13
- "version": "8.0.7",
13
+ "version": "8.0.9",
14
14
  "description": "Zotero plugin builder",
15
15
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
16
16
  "type": "module",
@@ -26,7 +26,7 @@ var package_default = {
26
26
  "require": "./dist/cjs/debug-log.cjs"
27
27
  },
28
28
  "./logger": {
29
- "import": "./dist/esm/ulogger.js",
29
+ "import": "./dist/esm/logger.js",
30
30
  "require": "./dist/cjs/logger.cjs"
31
31
  },
32
32
  ".loader/json": {
@@ -82,17 +82,17 @@ var package_default = {
82
82
  "@napi-rs/keyring": "^1.2.0",
83
83
  "@octokit/rest": "^22.0.1",
84
84
  "@rgrove/parse-xml": "^4.2.0",
85
- "@types/node": "^25.0.10",
85
+ "@types/node": "^25.2.3",
86
86
  "@xmldom/xmldom": "^0.9.8",
87
- "ajv": "^8.17.1",
87
+ "ajv": "^8.18.0",
88
88
  "ajv-keywords": "^5.1.0",
89
89
  "archiver": "^7.0.1",
90
90
  "clp": "^4.0.13",
91
- "commander": "^14.0.2",
92
- "dotenv": "^17.2.3",
91
+ "commander": "^14.0.3",
92
+ "dotenv": "^17.3.1",
93
93
  "ejs": "^4.0.1",
94
94
  "fs-extra": "^11.3.3",
95
- "glob": "^13.0.0",
95
+ "glob": "^13.0.3",
96
96
  "ini": "^6.0.0",
97
97
  "jose": "^6.1.3",
98
98
  "jsesc": "^3.1.0",
@@ -104,7 +104,7 @@ var package_default = {
104
104
  "peggy": "^5.0.6",
105
105
  "prompts": "^2.4.2",
106
106
  "pug": "^3.0.3",
107
- "rimraf": "^6.1.2",
107
+ "rimraf": "^6.1.3",
108
108
  "shell-quote": "^1.8.3",
109
109
  "shelljs": "^0.10.0",
110
110
  "string-to-arraybuffer": "^1.0.2",
@@ -147,7 +147,7 @@ var package_default = {
147
147
  "@openpgp/web-stream-tools": "^0.3.0",
148
148
  "concurrently": "^9.2.1",
149
149
  "dprint": "^0.51.1",
150
- "esbuild": "^0.27.2",
150
+ "esbuild": "^0.27.3",
151
151
  "tsup": "^8.5.1"
152
152
  }
153
153
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../crypto.ts","../../debug-log.ts","../../package.json"],"sourcesContent":["export const KEYTYPE = 'RSA'\nexport const KEY_WRAPPING_ALG = 'RSA-OAEP-256'\nexport const CONTENT_ENCRYPTION_ALG = 'A256GCM'\nexport const RSA_HASH = 'SHA-256'\nexport const RSA_ALGORITHM = 'RSA-OAEP'\nexport const CIPHER_ALGORITHM = 'aes256'\nexport const AES_KEY_LENGTH = 256\n// export const AES_KEY_BYTES = 32\n\n// export const AES_ALGORITHM = 'AES-GCM'\n// export const IV_LENGTH = 12\n","/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\nimport { CONTENT_ENCRYPTION_ALG, KEY_WRAPPING_ALG, KEYTYPE } from './crypto'\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport * as jose from 'jose'\nimport * as UZip from 'uzip'\nimport pkg from './package.json'\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 #pk?: JsonWebKey\n #pubKey?: CryptoKey\n\n #files: Record<string, Uint8Array> = {}\n #encoder = new TextEncoder()\n\n constructor(pk?: JsonWebKey) {\n this.key = Zotero.Utilities.generateObjectKey()\n\n if (pk && pk.kty === KEYTYPE) this.#pk = pk\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.#pk) {\n if (!this.#pubKey) this.#pubKey = (await jose.importJWK(this.#pk, KEY_WRAPPING_ALG)) as CryptoKey\n const jwe = await (new jose.CompactEncrypt(encoded))\n .setProtectedHeader({\n alg: KEY_WRAPPING_ALG,\n enc: CONTENT_ENCRYPTION_ALG,\n })\n .encrypt(this.#pubKey)\n\n this.#files[`${this.key}/${path}.jwe`] = this.#encoder.encode(jwe)\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 public async send(useragent, expire = 30): Promise<string> {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: this.formData(expire),\n headers: {\n 'User-Agent': useragent,\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 return this.id(`0x0-${id[1]}`)\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?: JsonWebKey): void {\n const menuLabel = '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', menuLabel)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label: menuLabel }))\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': JSON.stringify(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 ? JSON.parse(pubkey) : undefined)\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 logid = await bundler.send(`Zotero-plugin/${pkg.version}`)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, logid)\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 /*\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}\n\nexport const DebugLog = new DebugLogSender()\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"8.0.7\",\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/debug-log.js\",\n \"require\": \"./dist/cjs/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/ulogger.js\",\n \"require\": \"./dist/cjs/logger.cjs\"\n },\n \".loader/json\": {\n \"import\": \"./dist/esm/loader/json.js\",\n \"require\": \"./dist/cjs/loader/json.cjs\"\n },\n \".loader/peggy\": {\n \"import\": \"./dist/esm/loader/peggy.js\",\n \"require\": \"./dist/cjs/loader/peggy.cjs\"\n },\n \".loader/pem\": {\n \"import\": \"./dist/esm/loader/pem.js\",\n \"require\": \"./dist/cjs/loader/pem.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.1\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^25.0.10\",\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.2\",\n \"dotenv\": \"^17.2.3\",\n \"ejs\": \"^4.0.1\",\n \"fs-extra\": \"^11.3.3\",\n \"glob\": \"^13.0.0\",\n \"ini\": \"^6.0.0\",\n \"jose\": \"^6.1.3\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.23\",\n \"moment\": \"^2.30.1\",\n \"node-forge\": \"^1.3.3\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.3.0\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.1.2\",\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.3.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.51.1\",\n \"esbuild\": \"^0.27.2\",\n \"tsup\": \"^8.5.1\"\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../crypto.ts","../../debug-log.ts","../../package.json"],"sourcesContent":["export const KEYTYPE = 'RSA'\nexport const KEY_WRAPPING_ALG = 'RSA-OAEP-256'\nexport const CONTENT_ENCRYPTION_ALG = 'A256GCM'\nexport const RSA_HASH = 'SHA-256'\nexport const RSA_ALGORITHM = 'RSA-OAEP'\nexport const CIPHER_ALGORITHM = 'aes256'\nexport const AES_KEY_LENGTH = 256\n// export const AES_KEY_BYTES = 32\n\n// export const AES_ALGORITHM = 'AES-GCM'\n// export const IV_LENGTH = 12\n","/* eslint-disable no-magic-numbers */\n\nComponents.utils.importGlobalProperties(['FormData'])\nimport { CONTENT_ENCRYPTION_ALG, KEY_WRAPPING_ALG, KEYTYPE } from './crypto'\n\ntype ZoteroPane = {\n getSelectedItems: () => any[]\n}\n\nimport * as jose from 'jose'\nimport * as UZip from 'uzip'\nimport pkg from './package.json'\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 #pk?: JsonWebKey\n #pubKey?: CryptoKey\n\n #files: Record<string, Uint8Array> = {}\n #encoder = new TextEncoder()\n\n constructor(pk?: JsonWebKey) {\n this.key = Zotero.Utilities.generateObjectKey()\n\n if (pk && pk.kty === KEYTYPE) this.#pk = pk\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.#pk) {\n if (!this.#pubKey) this.#pubKey = (await jose.importJWK(this.#pk, KEY_WRAPPING_ALG)) as CryptoKey\n const jwe = await (new jose.CompactEncrypt(encoded))\n .setProtectedHeader({\n alg: KEY_WRAPPING_ALG,\n enc: CONTENT_ENCRYPTION_ALG,\n })\n .encrypt(this.#pubKey)\n\n this.#files[`${this.key}/${path}.jwe`] = this.#encoder.encode(jwe)\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 public async send(useragent, expire = 30): Promise<string> {\n const response = await fetch('https://0x0.st', {\n method: 'POST',\n body: this.formData(expire),\n headers: {\n 'User-Agent': useragent,\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 return this.id(`0x0-${id[1]}`)\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?: JsonWebKey): void {\n const menuLabel = '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', menuLabel)\n }\n else {\n menupopup = doc.querySelector('menupopup#menu_HelpPopup')\n .appendChild(this.element('menu', { id: this.id.menu, label: menuLabel }))\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': JSON.stringify(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 ? JSON.parse(pubkey) : undefined)\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 logid = await bundler.send(`Zotero-plugin/${pkg.version}`)\n Services.prompt.alert(null, `Debug log ID for ${plugin}`, logid)\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 /*\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}\n\nexport const DebugLog = new DebugLogSender()\n","export default {\n \"name\": \"zotero-plugin\",\n \"version\": \"8.0.9\",\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/debug-log.js\",\n \"require\": \"./dist/cjs/debug-log.cjs\"\n },\n \"./logger\": {\n \"import\": \"./dist/esm/logger.js\",\n \"require\": \"./dist/cjs/logger.cjs\"\n },\n \".loader/json\": {\n \"import\": \"./dist/esm/loader/json.js\",\n \"require\": \"./dist/cjs/loader/json.cjs\"\n },\n \".loader/peggy\": {\n \"import\": \"./dist/esm/loader/peggy.js\",\n \"require\": \"./dist/cjs/loader/peggy.cjs\"\n },\n \".loader/pem\": {\n \"import\": \"./dist/esm/loader/pem.js\",\n \"require\": \"./dist/cjs/loader/pem.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.1\",\n \"@rgrove/parse-xml\": \"^4.2.0\",\n \"@types/node\": \"^25.2.3\",\n \"@xmldom/xmldom\": \"^0.9.8\",\n \"ajv\": \"^8.18.0\",\n \"ajv-keywords\": \"^5.1.0\",\n \"archiver\": \"^7.0.1\",\n \"clp\": \"^4.0.13\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.3.1\",\n \"ejs\": \"^4.0.1\",\n \"fs-extra\": \"^11.3.3\",\n \"glob\": \"^13.0.3\",\n \"ini\": \"^6.0.0\",\n \"jose\": \"^6.1.3\",\n \"jsesc\": \"^3.1.0\",\n \"lodash\": \"^4.17.23\",\n \"moment\": \"^2.30.1\",\n \"node-forge\": \"^1.3.3\",\n \"node-stream-zip\": \"^1.15.0\",\n \"openpgp\": \"^6.3.0\",\n \"peggy\": \"^5.0.6\",\n \"prompts\": \"^2.4.2\",\n \"pug\": \"^3.0.3\",\n \"rimraf\": \"^6.1.3\",\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.3.0\",\n \"concurrently\": \"^9.2.1\",\n \"dprint\": \"^0.51.1\",\n \"esbuild\": \"^0.27.3\",\n \"tsup\": \"^8.5.1\"\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zotero-plugin",
3
- "version": "8.0.7",
3
+ "version": "8.0.9",
4
4
  "description": "Zotero plugin builder",
5
5
  "homepage": "https://github.com/retorquere/zotero-plugin/wiki",
6
6
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "require": "./dist/cjs/debug-log.cjs"
17
17
  },
18
18
  "./logger": {
19
- "import": "./dist/esm/ulogger.js",
19
+ "import": "./dist/esm/logger.js",
20
20
  "require": "./dist/cjs/logger.cjs"
21
21
  },
22
22
  ".loader/json": {
@@ -72,17 +72,17 @@
72
72
  "@napi-rs/keyring": "^1.2.0",
73
73
  "@octokit/rest": "^22.0.1",
74
74
  "@rgrove/parse-xml": "^4.2.0",
75
- "@types/node": "^25.0.10",
75
+ "@types/node": "^25.2.3",
76
76
  "@xmldom/xmldom": "^0.9.8",
77
- "ajv": "^8.17.1",
77
+ "ajv": "^8.18.0",
78
78
  "ajv-keywords": "^5.1.0",
79
79
  "archiver": "^7.0.1",
80
80
  "clp": "^4.0.13",
81
- "commander": "^14.0.2",
82
- "dotenv": "^17.2.3",
81
+ "commander": "^14.0.3",
82
+ "dotenv": "^17.3.1",
83
83
  "ejs": "^4.0.1",
84
84
  "fs-extra": "^11.3.3",
85
- "glob": "^13.0.0",
85
+ "glob": "^13.0.3",
86
86
  "ini": "^6.0.0",
87
87
  "jose": "^6.1.3",
88
88
  "jsesc": "^3.1.0",
@@ -94,7 +94,7 @@
94
94
  "peggy": "^5.0.6",
95
95
  "prompts": "^2.4.2",
96
96
  "pug": "^3.0.3",
97
- "rimraf": "^6.1.2",
97
+ "rimraf": "^6.1.3",
98
98
  "shell-quote": "^1.8.3",
99
99
  "shelljs": "^0.10.0",
100
100
  "string-to-arraybuffer": "^1.0.2",
@@ -137,7 +137,7 @@
137
137
  "@openpgp/web-stream-tools": "^0.3.0",
138
138
  "concurrently": "^9.2.1",
139
139
  "dprint": "^0.51.1",
140
- "esbuild": "^0.27.2",
140
+ "esbuild": "^0.27.3",
141
141
  "tsup": "^8.5.1"
142
142
  }
143
143
  }