From 60e590f75cab34f73c6b822ccb781191086f3f10 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Wed, 10 May 2023 09:34:18 +0000 Subject: [PATCH] Addon build working --- .gitignore | 3 +- packages/zammad-addon-common/build.ts | 64 +++++++++- packages/zammad-addon-common/dist/build.d.ts | 1 - packages/zammad-addon-common/dist/build.js | 12 -- packages/zammad-addon-common/dist/index.d.ts | 2 - packages/zammad-addon-common/dist/index.js | 116 ------------------ packages/zammad-addon-common/dist/lib.d.ts | 2 - packages/zammad-addon-common/dist/lib.js | 113 ----------------- .../zammad-addon-common/dist/migrate.d.ts | 1 - packages/zammad-addon-common/dist/migrate.js | 11 -- .../dist/tsconfig.tsbuildinfo | 1 - packages/zammad-addon-common/lib.ts | 115 ----------------- packages/zammad-addon-common/migrate.ts | 49 +++++++- packages/zammad-addon-common/package.json | 3 - packages/zammad-addon-common/test.js | 3 - packages/zammad-addon-hardening/package.json | 15 +++ .../{ => src}/.ruby-version | 0 packages/zammad-addon-metamigo/Makefile | 20 --- packages/zammad-addon-metamigo/package.json | 15 +++ .../{ => src}/.ruby-version | 0 packages/zammad-addon-pgp/package.json | 5 +- .../pgpsupport/20220403000001_pgpsupport.rb | 65 ---------- 22 files changed, 141 insertions(+), 475 deletions(-) delete mode 100644 packages/zammad-addon-common/dist/build.d.ts delete mode 100644 packages/zammad-addon-common/dist/build.js delete mode 100644 packages/zammad-addon-common/dist/index.d.ts delete mode 100644 packages/zammad-addon-common/dist/index.js delete mode 100644 packages/zammad-addon-common/dist/lib.d.ts delete mode 100644 packages/zammad-addon-common/dist/lib.js delete mode 100644 packages/zammad-addon-common/dist/migrate.d.ts delete mode 100644 packages/zammad-addon-common/dist/migrate.js delete mode 100644 packages/zammad-addon-common/dist/tsconfig.tsbuildinfo delete mode 100644 packages/zammad-addon-common/lib.ts delete mode 100644 packages/zammad-addon-common/test.js create mode 100644 packages/zammad-addon-hardening/package.json rename packages/zammad-addon-hardening/{ => src}/.ruby-version (100%) delete mode 100644 packages/zammad-addon-metamigo/Makefile create mode 100644 packages/zammad-addon-metamigo/package.json rename packages/zammad-addon-metamigo/{ => src}/.ruby-version (100%) delete mode 100644 packages/zammad-addon-pgp/src/db/addon/pgpsupport/20220403000001_pgpsupport.rb diff --git a/.gitignore b/.gitignore index 6f45778..7d193c3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ node_modules .env .turbo build/** -dist/** +**/dist/** .next/** docker/zammad/auto_install/** .npmrc @@ -18,3 +18,4 @@ yarn-error.log docker-compose.yml coverage .pgpass +**/dist/** diff --git a/packages/zammad-addon-common/build.ts b/packages/zammad-addon-common/build.ts index c036ee4..679c5c7 100644 --- a/packages/zammad-addon-common/build.ts +++ b/packages/zammad-addon-common/build.ts @@ -1,11 +1,67 @@ -import { createZPM } from "./lib"; +#!/usr/bin/env node + import { promises as fs } from "fs"; +import path from "path"; +import os from "os"; + +const packageFile = async (actualPath: string): Promise => { + console.log(`Packaging: ${actualPath}`); + const packagePath = actualPath.slice(4); + const data = await fs.readFile(actualPath, "utf-8"); + const content = Buffer.from(data, "utf-8").toString("base64"); + const fileStats = await fs.stat(actualPath); + const permission = parseInt((fileStats.mode & 0o777).toString(8).slice(-3), 10); + return { + location: packagePath, + permission, + encode: "base64", + content, + }; +} + +const packageFiles = async () => { + const packagedFiles: any[] = []; + const ignoredPatterns = [/\.gitkeep/, /Gemfile/, /Gemfile.lock/, /\.ruby-version/]; + + const processDir = async (dir: string) => { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const entry of entries) { + const entryPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + await processDir(entryPath); + } else if (entry.isFile()) { + if (!ignoredPatterns.some((pattern) => pattern.test(entry.name))) { + packagedFiles.push(await packageFile(entryPath)); + } + } + } + }; + + await processDir("./src/"); + return packagedFiles; +} + +export const createZPM = async ({ name, displayName, version }: Record) => { + const files = await packageFiles(); + const skeleton = { + name: displayName, + version, + vendor: "Center for Digital Resilience", + license: "AGPL-v3+", + url: `https://gitlab.com/digiresilience/link/link-stack/packages/${name}`, + buildhost: os.hostname(), + builddate: new Date().toISOString(), + files + } + const pkg = JSON.stringify(skeleton, null, 2); + await fs.writeFile(`../../docker/zammad/auto_install/${name}-v${version}.zpm`, pkg, 'utf-8'); +} const main = async () => { const packageJSON = JSON.parse(await fs.readFile("./package.json", "utf-8")); - const { name, version } = packageJSON; - console.log(`Building ${name} v${version}`); - await createZPM({ name, version }); + const { name, displayName, version } = packageJSON; + console.log(`Building ${displayName} v${version}`); + await createZPM({ name, displayName, version }); } main(); diff --git a/packages/zammad-addon-common/dist/build.d.ts b/packages/zammad-addon-common/dist/build.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/packages/zammad-addon-common/dist/build.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/zammad-addon-common/dist/build.js b/packages/zammad-addon-common/dist/build.js deleted file mode 100644 index 47ed3b7..0000000 --- a/packages/zammad-addon-common/dist/build.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const lib_1 = require("./lib"); -const fs_1 = require("fs"); -const main = async () => { - const packageJSON = JSON.parse(await fs_1.promises.readFile("./package.json", "utf-8")); - const { name, version } = packageJSON; - console.log(`Building ${name} v${version}`); - await (0, lib_1.createZPM)({ name, version }); -}; -main(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFrQztBQUNsQywyQkFBb0M7QUFFcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGFBQUUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxJQUFBLGVBQVMsRUFBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQTtBQUVELElBQUksRUFBRSxDQUFDIn0= \ No newline at end of file diff --git a/packages/zammad-addon-common/dist/index.d.ts b/packages/zammad-addon-common/dist/index.d.ts deleted file mode 100644 index 50a7c59..0000000 --- a/packages/zammad-addon-common/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const createZPM: () => Promise; -export declare const createMigration: () => Promise; diff --git a/packages/zammad-addon-common/dist/index.js b/packages/zammad-addon-common/dist/index.js deleted file mode 100644 index 8cc556e..0000000 --- a/packages/zammad-addon-common/dist/index.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createMigration = exports.createZPM = void 0; -const fs_1 = require("fs"); -const path_1 = __importDefault(require("path")); -const os_1 = __importDefault(require("os")); -const skeleton = { - "name": "PackageName", - "version": "0.1.0", - "vendor": "Center for Digital Resilience", - "license": "AGPL-v3+", - "url": "https://gitlab.com/digiresilience/link/zammad-addon-package-name", - "buildhost": "", - "builddate": "", - "change_log": [ - { - "version": "0.0.1", - "date": "2020-02-11", - "log": "Some changes" - } - ], - "description": [ - { - "language": "en", - "text": "Change me" - } - ], - "files": [] -}; -const packageFile = async (actualPath) => { - console.log(`Packaging: ${actualPath}`); - const packagePath = actualPath.slice(6); - const data = await fs_1.promises.readFile(actualPath, "utf-8"); - const content = Buffer.from(data, "utf-8").toString("base64"); - const fileStats = await fs_1.promises.stat(actualPath); - const permission = parseInt((fileStats.mode & 0o777).toString(8).slice(-3), 10); - return { - location: packagePath, - permission, - encode: "base64", - content, - }; -}; -const packageFiles = async () => { - const packagedFiles = []; - const ignoredPatterns = [/\.gitkeep/]; - const processDir = async (dir) => { - const entries = await fs_1.promises.readdir(dir, { withFileTypes: true }); - for (const entry of entries) { - const entryPath = path_1.default.join(dir, entry.name); - if (entry.isDirectory()) { - await processDir(entryPath); - } - else if (entry.isFile()) { - if (!ignoredPatterns.some((pattern) => pattern.test(entry.name))) { - packagedFiles.push(await packageFile(entryPath)); - } - } - } - }; - await processDir("./src/"); - return packagedFiles; -}; -const underscore = (str) => { - return str - .replace(/([a-z\d])([A-Z])/g, "$1_$2") - .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1_$2") - .toLowerCase(); -}; -const camelize = (str) => { - const camelizedStr = str.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); - return camelizedStr.charAt(0).toUpperCase() + camelizedStr.slice(1); -}; -const createZPM = async () => { - const files = await packageFiles(); - skeleton.files = files; - skeleton.builddate = new Date().toISOString(); - skeleton.buildhost = os_1.default.hostname(); - const name = skeleton.name.toLowerCase(); - const version = skeleton.version; - const pkg = JSON.stringify(skeleton, null, 2); - await fs_1.promises.writeFile(`dist/${name}-v${version}.zpm`, pkg, 'utf-8'); -}; -exports.createZPM = createZPM; -const createMigration = async () => { - const name = skeleton["name"].toLowerCase(); - const rawName = await new Promise((resolve) => { - process.stdin.setEncoding("utf-8"); - process.stdout.write("Enter migration name: "); - process.stdin.once("data", (data) => { - resolve(data.trim()); - }); - }); - const migrationBaseName = `${name}_${underscore(rawName)}`; - const migrationName = camelize(migrationBaseName); - const migrationTemplate = `class MIGRATION_NAME < ActiveRecord::Migration[5.2] - def self.up - # add your code here - end - - def self.down - # add your code here - end - end`; - const contents = migrationTemplate.replace("MIGRATION_NAME", migrationName); - const time = new Date().toISOString().replace(/[-:.]/g, "").slice(0, 14); - const migrationFileName = `${time}_${migrationBaseName}.rb`; - const addonDir = path_1.default.join("src", "db", "addon", skeleton["name"]); - await fs_1.promises.mkdir(addonDir, { recursive: true }); - await fs_1.promises.writeFile(path_1.default.join(addonDir, migrationFileName), contents); -}; -exports.createMigration = createMigration; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBb0M7QUFDcEMsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUVwQixNQUFNLFFBQVEsR0FBd0I7SUFDcEMsTUFBTSxFQUFFLGFBQWE7SUFDckIsU0FBUyxFQUFFLE9BQU87SUFDbEIsUUFBUSxFQUFFLCtCQUErQjtJQUN6QyxTQUFTLEVBQUUsVUFBVTtJQUNyQixLQUFLLEVBQUUsa0VBQWtFO0lBQ3pFLFdBQVcsRUFBRSxFQUFFO0lBQ2YsV0FBVyxFQUFFLEVBQUU7SUFDZixZQUFZLEVBQUU7UUFDWjtZQUNFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEtBQUssRUFBRSxjQUFjO1NBQ3RCO0tBQ0Y7SUFDRCxhQUFhLEVBQUU7UUFDYjtZQUNFLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxXQUFXO1NBQ3BCO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsVUFBa0IsRUFBZ0IsRUFBRTtJQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sYUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlELE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUs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 \ No newline at end of file diff --git a/packages/zammad-addon-common/dist/lib.d.ts b/packages/zammad-addon-common/dist/lib.d.ts deleted file mode 100644 index 54fad8c..0000000 --- a/packages/zammad-addon-common/dist/lib.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const createZPM: ({ name, version }: Record) => Promise; -export declare const createMigration: ({ packageName }: Record) => Promise; diff --git a/packages/zammad-addon-common/dist/lib.js b/packages/zammad-addon-common/dist/lib.js deleted file mode 100644 index a93be15..0000000 --- a/packages/zammad-addon-common/dist/lib.js +++ /dev/null @@ -1,113 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createMigration = exports.createZPM = void 0; -const fs_1 = require("fs"); -const path_1 = __importDefault(require("path")); -const os_1 = __importDefault(require("os")); -const skeleton = { - "name": "PackageName", - "version": "0.1.0", - "vendor": "Center for Digital Resilience", - "license": "AGPL-v3+", - "url": "https://gitlab.com/digiresilience/link/zammad-addon-package-name", - "buildhost": "", - "builddate": "", - "change_log": [ - { - "version": "0.0.1", - "date": "2020-02-11", - "log": "Some changes" - } - ], - "description": [ - { - "language": "en", - "text": "Change me" - } - ], - "files": [] -}; -const packageFile = async (actualPath) => { - console.log(`Packaging: ${actualPath}`); - const packagePath = actualPath.slice(4); - const data = await fs_1.promises.readFile(actualPath, "utf-8"); - const content = Buffer.from(data, "utf-8").toString("base64"); - const fileStats = await fs_1.promises.stat(actualPath); - const permission = parseInt((fileStats.mode & 0o777).toString(8).slice(-3), 10); - return { - location: packagePath, - permission, - encode: "base64", - content, - }; -}; -const packageFiles = async () => { - const packagedFiles = []; - const ignoredPatterns = [/\.gitkeep/]; - const processDir = async (dir) => { - const entries = await fs_1.promises.readdir(dir, { withFileTypes: true }); - for (const entry of entries) { - const entryPath = path_1.default.join(dir, entry.name); - if (entry.isDirectory()) { - await processDir(entryPath); - } - else if (entry.isFile()) { - if (!ignoredPatterns.some((pattern) => pattern.test(entry.name))) { - packagedFiles.push(await packageFile(entryPath)); - } - } - } - }; - await processDir("./src/"); - return packagedFiles; -}; -const underscore = (str) => { - return str - .replace(/([a-z\d])([A-Z])/g, "$1_$2") - .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1_$2") - .toLowerCase(); -}; -const camelize = (str) => { - const camelizedStr = str.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); - return camelizedStr.charAt(0).toUpperCase() + camelizedStr.slice(1); -}; -const createZPM = async ({ name, version }) => { - const files = await packageFiles(); - skeleton.files = files; - skeleton.builddate = new Date().toISOString(); - skeleton.buildhost = os_1.default.hostname(); - const pkg = JSON.stringify(skeleton, null, 2); - await fs_1.promises.writeFile(`../../docker/zammad/auto_install/${name}-v${version}.zpm`, pkg, 'utf-8'); -}; -exports.createZPM = createZPM; -const createMigration = async ({ packageName }) => { - const rawName = await new Promise((resolve) => { - process.stdin.setEncoding("utf-8"); - process.stdout.write("Enter migration name: "); - process.stdin.once("data", (data) => { - resolve(data.trim()); - }); - }); - const migrationBaseName = `${packageName}_${underscore(rawName)}`; - const migrationName = camelize(migrationBaseName); - const migrationTemplate = `class MIGRATION_NAME < ActiveRecord::Migration[5.2] - def self.up - # add your code here - end - - def self.down - # add your code here - end - end`; - const contents = migrationTemplate.replace("MIGRATION_NAME", migrationName); - const time = new Date().toISOString().replace(/[-:.]/g, "").slice(0, 14); - const migrationFileName = `${time}_${migrationBaseName}.rb`; - const addonDir = path_1.default.join("src", "db", "addon", skeleton["name"]); - await fs_1.promises.mkdir(addonDir, { recursive: true }); - await fs_1.promises.writeFile(path_1.default.join(addonDir, migrationFileName), contents); -}; -exports.createMigration = createMigration; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJCQUFvQztBQUNwQyxnREFBd0I7QUFDeEIsNENBQW9CO0FBRXBCLE1BQU0sUUFBUSxHQUF3QjtJQUNwQyxNQUFNLEVBQUUsYUFBYTtJQUNyQixTQUFTLEVBQUUsT0FBTztJQUNsQixRQUFRLEVBQUUsK0JBQStCO0lBQ3pDLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLEtBQUssRUFBRSxrRUFBa0U7SUFDekUsV0FBVyxFQUFFLEVBQUU7SUFDZixXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRTtRQUNaO1lBQ0UsU0FBUyxFQUFFLE9BQU87WUFDbEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsS0FBSyxFQUFFLGNBQWM7U0FDdEI7S0FDRjtJQUNELGFBQWEsRUFBRTtRQUNiO1lBQ0UsVUFBVSxFQUFFLElBQUk7WUFDaEIsTUFBTSxFQUFFLFdBQVc7U0FDcEI7S0FDRjtJQUNELE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQTtBQUVELE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxVQUFrQixFQUFnQixFQUFFO0lBQzdELE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxhQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFH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 \ No newline at end of file diff --git a/packages/zammad-addon-common/dist/migrate.d.ts b/packages/zammad-addon-common/dist/migrate.d.ts deleted file mode 100644 index cb0ff5c..0000000 --- a/packages/zammad-addon-common/dist/migrate.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/zammad-addon-common/dist/migrate.js b/packages/zammad-addon-common/dist/migrate.js deleted file mode 100644 index 7510376..0000000 --- a/packages/zammad-addon-common/dist/migrate.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const lib_1 = require("./lib"); -const fs_1 = require("fs"); -const main = async () => { - const packageJSON = JSON.parse(await fs_1.promises.readFile("./package.json", "utf-8")); - const { name, } = packageJSON; - await (0, lib_1.createMigration)({ packageName: name }); -}; -main(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL21pZ3JhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBd0M7QUFDeEMsMkJBQW9DO0FBRXBDLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxFQUFFLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUM5QixNQUFNLElBQUEscUJBQWUsRUFBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQTtBQUVELElBQUksRUFBRSxDQUFDIn0= \ No newline at end of file diff --git a/packages/zammad-addon-common/dist/tsconfig.tsbuildinfo b/packages/zammad-addon-common/dist/tsconfig.tsbuildinfo deleted file mode 100644 index 325b754..0000000 --- a/packages/zammad-addon-common/dist/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../lib.ts","../build.ts","../migrate.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},{"version":"755ee9dfe57bb516aebe1054fc0b9715173780c7087eb40b805cbf7291dd5751","signature":"cb0d25a6cda8cac19d8af1f6f52b7a66507bce04800900b26c0225dd6381a21f"},{"version":"d026402b722439f695e113e0d68aef2bb8808579a9885d0d86f22bcded8a7ec3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"732acea6cb3c4c450f2bf36107a50a81781ed3890243263570404adba3a237ac","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"54ba7456adb777a685250cd144115ea51379784012ba1311255b715c6bdcff2a","affectsGlobalScope":true},"11e2d554398d2bd460e7d06b2fa5827a297c8acfbe00b4f894a224ac0862857f",{"version":"e193e634a99c9c1d71f1c6e4e1567a4a73584328d21ea02dd5cddbaad6693f61","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","489532ff54b714f0e0939947a1c560e516d3ae93d51d639ab02e907a0e950114","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true},"80473bd0dd90ca1e166514c2dfead9d5803f9c51418864ca35abbeec6e6847e1","1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","5eec82ac21f84d83586c59a16b9b8502d34505d1393393556682fe7e7fde9ef2","04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","7d55d78cd47cf5280643b53434b16c2d9d11d144126932759fbdd51da525eec4","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","09326ae5f7e3d49be5cd9ea00eb814770e71870a438faa2efd8bdd9b4db21320",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","c4577fb855ca259bdbf3ea663ca73988ce5f84251a92b4aef80a1f4122b6f98e","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true},{"version":"ff07a9a03c65732ccc59b3c65bc584173da093bd563a6565411c01f5703bd3cb","affectsGlobalScope":true},"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"d8d555f3d607ecaa18d55de6995ea8f206342ecc93305919eac945c7c78c78c6","6c1e688f95fcaf53b1e41c0fdadf2c1cfc96fa924eaf7f9fdb60f96deb0a4986","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","db25694be959314fd1e868d72e567746db1db9e2001fae545d12d2a8c1bba1b8","43883cf3635bb1846cbdc6c363787b76227677388c74f7313e3f0edb380840fa","2d47012580f859dae201d2eef898a416bdae719dffc087dfd06aefe3de2f9c8d","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","2cec1a31729b9b01e9294c33fc9425d336eff067282809761ad2e74425d6d2a5",{"version":"458e2fd1185e659cb800ef68d01ef77de70dcab8860bedf6d94eaebe736751f1","affectsGlobalScope":true}],"options":{"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSourceMap":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","target":7},"fileIdsList":[[91],[91,101],[91,103,106],[45,91],[48,91],[49,54,82,91],[50,61,62,69,79,90,91],[50,51,61,69,91],[52,91],[53,54,62,70,91],[54,79,87,91],[55,57,61,69,91],[56,91],[57,58,91],[61,91],[59,61,91],[61,62,63,79,90,91],[61,62,63,76,79,82,91],[91,95],[57,64,69,79,90,91],[61,62,64,65,69,79,87,90,91],[64,66,79,87,90,91],[45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],[61,67,91],[68,90,91],[57,61,69,79,91],[70,91],[71,91],[48,72,91],[73,89,91,95],[74,91],[75,91],[61,76,77,91],[76,78,91,93],[49,61,79,80,81,82,91],[49,79,81,91],[79,80,91],[82,91],[83,91],[61,85,86,91],[85,86,91],[54,69,79,87,91],[88,91],[69,89,91],[49,64,75,90,91],[54,91],[79,91,92],[91,93],[91,94],[49,54,61,63,72,79,90,91,93,95],[79,91,96],[91,99,105],[91,103],[91,100,104],[91,102],[42,62,91],[62,70,71,91]],"referencedMap":[[99,1],[102,2],[101,1],[107,3],[45,4],[46,4],[48,5],[49,6],[50,7],[51,8],[52,9],[53,10],[54,11],[55,12],[56,13],[57,14],[58,14],[60,15],[59,16],[61,15],[62,17],[63,18],[47,19],[97,1],[64,20],[65,21],[66,22],[98,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,33],[78,34],[79,35],[81,36],[80,37],[82,38],[83,39],[84,1],[85,40],[86,41],[87,42],[88,43],[89,44],[90,45],[91,46],[92,47],[93,48],[94,49],[95,50],[96,51],[106,52],[104,53],[105,54],[100,1],[103,55],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[32,1],[29,1],[30,1],[31,1],[33,1],[7,1],[34,1],[39,1],[40,1],[35,1],[36,1],[37,1],[38,1],[1,1],[41,1],[43,56],[42,57],[44,56]],"exportedModulesMap":[[99,1],[102,2],[101,1],[107,3],[45,4],[46,4],[48,5],[49,6],[50,7],[51,8],[52,9],[53,10],[54,11],[55,12],[56,13],[57,14],[58,14],[60,15],[59,16],[61,15],[62,17],[63,18],[47,19],[97,1],[64,20],[65,21],[66,22],[98,23],[67,24],[68,25],[69,26],[70,27],[71,28],[72,29],[73,30],[74,31],[75,32],[76,33],[77,33],[78,34],[79,35],[81,36],[80,37],[82,38],[83,39],[84,1],[85,40],[86,41],[87,42],[88,43],[89,44],[90,45],[91,46],[92,47],[93,48],[94,49],[95,50],[96,51],[106,52],[104,53],[105,54],[100,1],[103,55],[9,1],[8,1],[2,1],[10,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[3,1],[4,1],[21,1],[18,1],[19,1],[20,1],[22,1],[23,1],[24,1],[5,1],[25,1],[26,1],[27,1],[28,1],[6,1],[32,1],[29,1],[30,1],[31,1],[33,1],[7,1],[34,1],[39,1],[40,1],[35,1],[36,1],[37,1],[38,1],[1,1],[41,1]],"semanticDiagnosticsPerFile":[99,102,101,107,45,46,48,49,50,51,52,53,54,55,56,57,58,60,59,61,62,63,47,97,64,65,66,98,67,68,69,70,71,72,73,74,75,76,77,78,79,81,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,106,104,105,100,103,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,32,29,30,31,33,7,34,39,40,35,36,37,38,1,41,43,42,44]},"version":"4.9.5"} \ No newline at end of file diff --git a/packages/zammad-addon-common/lib.ts b/packages/zammad-addon-common/lib.ts deleted file mode 100644 index 8c0bdf1..0000000 --- a/packages/zammad-addon-common/lib.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { promises as fs } from "fs"; -import path from "path"; -import os from "os"; - -const skeleton: Record = { - "name": "PackageName", - "version": "0.1.0", - "vendor": "Center for Digital Resilience", - "license": "AGPL-v3+", - "url": "https://gitlab.com/digiresilience/link/zammad-addon-package-name", - "buildhost": "", - "builddate": "", - "change_log": [ - { - "version": "0.0.1", - "date": "2020-02-11", - "log": "Some changes" - } - ], - "description": [ - { - "language": "en", - "text": "Change me" - } - ], - "files": [] -} - -const packageFile = async (actualPath: string): Promise => { - console.log(`Packaging: ${actualPath}`); - const packagePath = actualPath.slice(4); - const data = await fs.readFile(actualPath, "utf-8"); - const content = Buffer.from(data, "utf-8").toString("base64"); - const fileStats = await fs.stat(actualPath); - const permission = parseInt((fileStats.mode & 0o777).toString(8).slice(-3), 10); - return { - location: packagePath, - permission, - encode: "base64", - content, - }; -} - -const packageFiles = async () => { - const packagedFiles: any[] = []; - const ignoredPatterns = [/\.gitkeep/]; - - const processDir = async (dir: string) => { - const entries = await fs.readdir(dir, { withFileTypes: true }); - for (const entry of entries) { - const entryPath = path.join(dir, entry.name); - if (entry.isDirectory()) { - await processDir(entryPath); - } else if (entry.isFile()) { - if (!ignoredPatterns.some((pattern) => pattern.test(entry.name))) { - packagedFiles.push(await packageFile(entryPath)); - } - } - } - }; - - await processDir("./src/"); - return packagedFiles; -} - -const underscore = (str: string) => { - return str - .replace(/([a-z\d])([A-Z])/g, "$1_$2") - .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1_$2") - .toLowerCase(); -} - -const camelize = (str: string): string => { - const camelizedStr = str.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); - - return camelizedStr.charAt(0).toUpperCase() + camelizedStr.slice(1); -} - -export const createZPM = async ({ name, version }: Record) => { - const files = await packageFiles(); - skeleton.files = files; - skeleton.builddate = new Date().toISOString(); - skeleton.buildhost = os.hostname(); - const pkg = JSON.stringify(skeleton, null, 2); - await fs.writeFile(`../../docker/zammad/auto_install/${name}-v${version}.zpm`, pkg, 'utf-8'); -} - -export const createMigration = async ({ packageName}: Record) => { - const rawName: string = await new Promise((resolve) => { - process.stdin.setEncoding("utf-8"); - process.stdout.write("Enter migration name: "); - process.stdin.once("data", (data: string) => { - resolve(data.trim()); - }); - }); - - const migrationBaseName = `${packageName}_${underscore(rawName)}`; - const migrationName = camelize(migrationBaseName); - const migrationTemplate = `class MIGRATION_NAME < ActiveRecord::Migration[5.2] - def self.up - # add your code here - end - - def self.down - # add your code here - end - end`; - const contents = migrationTemplate.replace("MIGRATION_NAME", migrationName); - const time = new Date().toISOString().replace(/[-:.]/g, "").slice(0, 14); - const migrationFileName = `${time}_${migrationBaseName}.rb`; - const addonDir = path.join("src", "db", "addon", skeleton["name"]); - await fs.mkdir(addonDir, { recursive: true }); - await fs.writeFile(path.join(addonDir, migrationFileName), contents); -} - diff --git a/packages/zammad-addon-common/migrate.ts b/packages/zammad-addon-common/migrate.ts index 7bd4e18..8dbe05f 100644 --- a/packages/zammad-addon-common/migrate.ts +++ b/packages/zammad-addon-common/migrate.ts @@ -1,10 +1,53 @@ -import { createMigration } from "./lib"; +#!/usr/bin/env node + import { promises as fs } from "fs"; +import path from "path"; + +const underscore = (str: string) => { + return str + .replace(/([a-z\d])([A-Z])/g, "$1_$2") + .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1_$2") + .toLowerCase(); +} + +const camelize = (str: string): string => { + const camelizedStr = str.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); + + return camelizedStr.charAt(0).toUpperCase() + camelizedStr.slice(1); +} + +export const createMigration = async ({ displayName }: Record) => { + const rawName: string = await new Promise((resolve) => { + process.stdin.setEncoding("utf-8"); + process.stdout.write("Enter migration name: "); + process.stdin.once("data", (data: string) => { + resolve(data.trim()); + }); + }); + + const migrationBaseName = `${displayName}_${underscore(rawName)}`; + const migrationName = camelize(migrationBaseName); + const migrationTemplate = `class MIGRATION_NAME < ActiveRecord::Migration[5.2] + def self.up + # add your code here + end + + def self.down + # add your code here + end + end`; + const contents = migrationTemplate.replace("MIGRATION_NAME", migrationName); + const time = new Date().toISOString().replace(/[-:.]/g, "").slice(0, 14); + const migrationFileName = `${time}_${migrationBaseName}.rb`; + const addonDir = path.join("src", "db", "addon", displayName); + await fs.mkdir(addonDir, { recursive: true }); + await fs.writeFile(path.join(addonDir, migrationFileName), contents); +} const main = async () => { const packageJSON = JSON.parse(await fs.readFile("./package.json", "utf-8")); - const { name, } = packageJSON; - await createMigration({ packageName: name }); + const { displayName } = packageJSON; + await createMigration({ displayName }); } main(); diff --git a/packages/zammad-addon-common/package.json b/packages/zammad-addon-common/package.json index af4a239..802a045 100644 --- a/packages/zammad-addon-common/package.json +++ b/packages/zammad-addon-common/package.json @@ -6,9 +6,6 @@ "zpm-build": "./dist/build.js", "zpm-migrate": "./dist/migrate.js" }, - "dependencies": { - "ts-node": "^10.9.1" - }, "scripts": { "build": "tsc" }, diff --git a/packages/zammad-addon-common/test.js b/packages/zammad-addon-common/test.js deleted file mode 100644 index ec60cf8..0000000 --- a/packages/zammad-addon-common/test.js +++ /dev/null @@ -1,3 +0,0 @@ -const { createZPM } = require("./dist/index.js"); - -console.log({ createZPM }); diff --git a/packages/zammad-addon-hardening/package.json b/packages/zammad-addon-hardening/package.json new file mode 100644 index 0000000..4cbd5ca --- /dev/null +++ b/packages/zammad-addon-hardening/package.json @@ -0,0 +1,15 @@ +{ + "name": "zammad-addon-hardening", + "displayName": "Hardening", + "version": "2.0.0", + "description": "A Zammad addon that hardens a Zammad instance according to CDR's needs.", + "scripts": { + "build": "node ../../node_modules/zammad-addon-common/dist/build.js", + "migrate": "node ../../node_modules/zammad-addon-common/dist/migrate.js" + }, + "dependencies": { + "zammad-addon-common": "*" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/zammad-addon-hardening/.ruby-version b/packages/zammad-addon-hardening/src/.ruby-version similarity index 100% rename from packages/zammad-addon-hardening/.ruby-version rename to packages/zammad-addon-hardening/src/.ruby-version diff --git a/packages/zammad-addon-metamigo/Makefile b/packages/zammad-addon-metamigo/Makefile deleted file mode 100644 index e97ab25..0000000 --- a/packages/zammad-addon-metamigo/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -.PHONY: build prep clean fmt new-migration - -build: prep - @./package.py - @find dist/ -iname "*szpm" - -prep: - @mkdir -p dist - -clean: prep - @rm -rf dist/* - -fmt: - rufo --simple-exit src - -new-migration: - @./new-migration.py - -test: - @echo There are no tests diff --git a/packages/zammad-addon-metamigo/package.json b/packages/zammad-addon-metamigo/package.json new file mode 100644 index 0000000..720f8c5 --- /dev/null +++ b/packages/zammad-addon-metamigo/package.json @@ -0,0 +1,15 @@ +{ + "name": "zammad-addon-metamigo", + "displayName": "Metamigo", + "version": "2.0.0", + "description": "An addon that adds metamigo channels to Zammad.", + "scripts": { + "build": "node ../../node_modules/zammad-addon-common/dist/build.js", + "migrate": "node ../../node_modules/zammad-addon-common/dist/migrate.js" + }, + "dependencies": { + "zammad-addon-common": "*" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/zammad-addon-metamigo/.ruby-version b/packages/zammad-addon-metamigo/src/.ruby-version similarity index 100% rename from packages/zammad-addon-metamigo/.ruby-version rename to packages/zammad-addon-metamigo/src/.ruby-version diff --git a/packages/zammad-addon-pgp/package.json b/packages/zammad-addon-pgp/package.json index 24b40f1..85b2749 100644 --- a/packages/zammad-addon-pgp/package.json +++ b/packages/zammad-addon-pgp/package.json @@ -1,10 +1,11 @@ { "name": "zammad-addon-pgp", + "displayName": "PGP Support", "version": "2.0.0", "description": "Adds PGP integration into [Zammad](https://zammad.org) via [Sequoia](https://sequoia-pgp.org).", "scripts": { - "build": "zpm-build", - "migrate": "zpm-migrate" + "build": "node ../../node_modules/zammad-addon-common/dist/build.js", + "migrate": "node ../../node_modules/zammad-addon-common/dist/migrate.js" }, "dependencies": { "zammad-addon-common": "*" diff --git a/packages/zammad-addon-pgp/src/db/addon/pgpsupport/20220403000001_pgpsupport.rb b/packages/zammad-addon-pgp/src/db/addon/pgpsupport/20220403000001_pgpsupport.rb deleted file mode 100644 index e142ddb..0000000 --- a/packages/zammad-addon-pgp/src/db/addon/pgpsupport/20220403000001_pgpsupport.rb +++ /dev/null @@ -1,65 +0,0 @@ -class PGPSupport < ActiveRecord::Migration[5.2] - def up - # return if it's a new setup - # return unless Setting.exists?(name: 'system_init_done') - - Setting.create_if_not_exists( - title: 'PGP integration', - name: 'pgp_integration', - area: 'Integration::Switch', - description: 'Defines if PGP encryption is enabled or not.', - options: { - form: [ - { - display: '', - null: true, - name: 'pgp_integration', - tag: 'boolean', - options: { - true => 'yes', - false => 'no' - } - } - ] - }, - state: false, - preferences: { - prio: 1, - authentication: true, - permission: ['admin.integration'] - }, - frontend: true - ) - Setting.create_if_not_exists( - title: 'PGP config', - name: 'pgp_config', - area: 'Integration::PGP', - description: 'Defines the PGP config.', - options: {}, - state: {}, - preferences: { - prio: 2, - permission: ['admin.integration'] - }, - frontend: true - ) - Setting.create_if_not_exists( - title: 'Defines postmaster filter.', - name: '0016_postmaster_filter_smime', - area: 'Postmaster::PreFilter', - description: 'Defines postmaster filter to handle secure mailing.', - options: {}, - state: 'Channel::Filter::SecureMailing', - frontend: false - ) - - create_table :pgp_keypairs do |t| - t.string :fingerprint, limit: 250, null: false - t.binary :public_key, limit: 10.megabytes, null: false - t.binary :private_key, limit: 10.megabytes, null: true - t.string :private_key_secret, limit: 500, null: true - t.timestamps limit: 3, null: false - end - add_index :pgp_keypairs, [:fingerprint], unique: true - end -end