From 4ddb65410be66d3bd44993cdc9dcea54bfe81a71 Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Sat, 11 Feb 2023 13:04:22 -0800 Subject: [PATCH 01/25] chore: up calckey.js --- package.json | 2 +- packages/backend/package.json | 2 +- packages/client/package.json | 2 +- packages/sw/package.json | 2 +- pnpm-lock.yaml | 32 +++++++++++++++----------------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 7cd7efc28..18df3e5b2 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@bull-board/api": "^4.10.2", "@bull-board/ui": "^4.10.2", "@tensorflow/tfjs": "^3.21.0", - "calckey-js": "^0.0.20", + "calckey-js": "^0.0.22", "js-yaml": "4.1.0", "phosphor-icons": "^1.4.2", "seedrandom": "^3.0.5" diff --git a/packages/backend/package.json b/packages/backend/package.json index 80484f95c..c1af9b173 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -47,7 +47,7 @@ "blurhash": "1.1.5", "bull": "4.10.2", "cacheable-lookup": "7.0.0", - "calckey-js": "^0.0.20", + "calckey-js": "^0.0.22", "cbor": "8.1.0", "chalk": "5.2.0", "chalk-template": "0.4.0", diff --git a/packages/client/package.json b/packages/client/package.json index 5a184dbc0..fb63b52a6 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -33,7 +33,7 @@ "blurhash": "1.1.5", "broadcast-channel": "4.19.1", "browser-image-resizer": "https://github.com/misskey-dev/browser-image-resizer.git", - "calckey-js": "^0.0.20", + "calckey-js": "^0.0.22", "chart.js": "4.1.1", "chartjs-adapter-date-fns": "2.0.1", "chartjs-plugin-gradient": "0.5.1", diff --git a/packages/sw/package.json b/packages/sw/package.json index ae9d12f72..55a750eec 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -13,7 +13,7 @@ "@swc/cli": "^0.1.59", "@swc/core": "^1.3.26", "@swc/core-android-arm64": "1.3.11", - "calckey-js": "^0.0.20", + "calckey-js": "^0.0.22", "idb-keyval": "^6.2.0", "swc-loader": "^0.2.3", "webpack": "^5.75.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54880d9c9..056b02cbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: '@tensorflow/tfjs': ^3.21.0 '@types/gulp': 4.0.10 '@types/gulp-rename': 2.0.1 - calckey-js: ^0.0.20 + calckey-js: ^0.0.22 cross-env: 7.0.3 cypress: 10.11.0 execa: 5.1.1 @@ -32,7 +32,7 @@ importers: '@bull-board/api': 4.10.2 '@bull-board/ui': 4.10.2 '@tensorflow/tfjs': 3.21.0_seedrandom@3.0.5 - calckey-js: 0.0.20 + calckey-js: 0.0.22 js-yaml: 4.1.0 phosphor-icons: 1.4.2 seedrandom: 3.0.5 @@ -126,7 +126,7 @@ importers: blurhash: 1.1.5 bull: 4.10.2 cacheable-lookup: 7.0.0 - calckey-js: ^0.0.20 + calckey-js: ^0.0.22 cbor: 8.1.0 chalk: 5.2.0 chalk-template: 0.4.0 @@ -245,7 +245,7 @@ importers: blurhash: 1.1.5 bull: 4.10.2 cacheable-lookup: 7.0.0 - calckey-js: 0.0.20 + calckey-js: 0.0.22 cbor: 8.1.0 chalk: 5.2.0 chalk-template: 0.4.0 @@ -414,7 +414,7 @@ importers: blurhash: 1.1.5 broadcast-channel: 4.19.1 browser-image-resizer: https://github.com/misskey-dev/browser-image-resizer.git - calckey-js: ^0.0.20 + calckey-js: ^0.0.22 chart.js: 4.1.1 chartjs-adapter-date-fns: 2.0.1 chartjs-plugin-gradient: 0.5.1 @@ -488,7 +488,7 @@ importers: blurhash: 1.1.5 broadcast-channel: 4.19.1 browser-image-resizer: github.com/misskey-dev/browser-image-resizer/0380d12c8e736788ea7f4e6e985175521ea7b23c - calckey-js: 0.0.20 + calckey-js: 0.0.22 chart.js: 4.1.1 chartjs-adapter-date-fns: 2.0.1_chart.js@4.1.1 chartjs-plugin-gradient: 0.5.1_chart.js@4.1.1 @@ -542,7 +542,7 @@ importers: '@swc/cli': ^0.1.59 '@swc/core': ^1.3.26 '@swc/core-android-arm64': 1.3.11 - calckey-js: ^0.0.20 + calckey-js: ^0.0.22 idb-keyval: ^6.2.0 swc-loader: ^0.2.3 webpack: ^5.75.0 @@ -550,7 +550,7 @@ importers: '@swc/cli': 0.1.59_@swc+core@1.3.26 '@swc/core': 1.3.26 '@swc/core-android-arm64': 1.3.11 - calckey-js: 0.0.20 + calckey-js: 0.0.22 idb-keyval: 6.2.0 swc-loader: 0.2.3_v4imsvpumnwpgduroyqmpcfjiy webpack: 5.75.0_@swc+core@1.3.26 @@ -3335,7 +3335,7 @@ packages: /axios/0.24.0: resolution: {integrity: sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==} dependencies: - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2 transitivePeerDependencies: - debug dev: false @@ -3343,7 +3343,7 @@ packages: /axios/0.25.0_debug@4.3.4: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} dependencies: - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2 transitivePeerDependencies: - debug dev: true @@ -3351,7 +3351,7 @@ packages: /axios/1.2.2: resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==} dependencies: - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -3361,7 +3361,7 @@ packages: /axios/1.3.2: resolution: {integrity: sha512-1M3O703bYqYuPhbHeya5bnhpYVsDDRyQSabNja04mZtboLNSuZ4YrltestrLXfHgmzua4TpUqRiVKbiQuo2epw==} dependencies: - follow-redirects: 1.15.2_debug@4.3.4 + follow-redirects: 1.15.2 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -3820,8 +3820,8 @@ packages: engines: {node: '>=6'} dev: true - /calckey-js/0.0.20: - resolution: {integrity: sha512-KqydxFuMKAEmi+NPOpNZfnq5Ik7w2eApY7hc2MxrqIkcuy/lgUv8io4rnNx512fHppEHtV7AVxovU2//buvgZA==} + /calckey-js/0.0.22: + resolution: {integrity: sha512-So4Jc3w5QiwNO+8yLomjgNvHR9luKZ5bGLqjIEzAMsD/bIvUqWvriQAyWHN4EweyQUJ8UZCXBG9iyVX8VjtiXw==} dependencies: autobind-decorator: 2.4.0 eventemitter3: 4.0.7 @@ -6301,7 +6301,7 @@ packages: readable-stream: 2.3.7 dev: true - /follow-redirects/1.15.2_debug@4.3.4: + /follow-redirects/1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -6309,8 +6309,6 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.4 /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} From 8b6d3167bccd4c7baa40f74cccfbdc50a7bc8390 Mon Sep 17 00:00:00 2001 From: daikei Date: Sat, 11 Feb 2023 21:05:31 +0000 Subject: [PATCH 02/25] Discard notes made before Fedi's existence, or after today (#9605) This PR should kill #9531 - Safeguarding against posts that are made before 2007 (Identica being made in 2008, the 'first ever activitypub software' according to wikipedia.) Personally, if gone unnoticed, I believe that notes from the past can be used as an attack vector to silently flood a database. Co-authored-by: Kio-td Reviewed-on: https://codeberg.org/calckey/calckey/pulls/9605 Co-authored-by: daikei Co-committed-by: daikei --- .../src/remote/activitypub/models/note.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/backend/src/remote/activitypub/models/note.ts b/packages/backend/src/remote/activitypub/models/note.ts index 28ce46e30..e643e24c9 100644 --- a/packages/backend/src/remote/activitypub/models/note.ts +++ b/packages/backend/src/remote/activitypub/models/note.ts @@ -125,6 +125,23 @@ export async function createNote( logger.info(`Creating the Note: ${note.id}`); + // Skip if note is made before 2007 (1yr before Fedi was created) + // OR skip if note is made 3 days in advance + if (note.published) { + const DateChecker = new Date(note.published) + const FutureCheck = new Date() + FutureCheck.setDate(FutureCheck.getDate() + 3) // Allow some wiggle room for misconfigured hosts + if (DateChecker.getFullYear() < 2007) { + logger.warn('Note somehow made before Activitypub was created; discarding'); + return null; + } + if (DateChecker > FutureCheck) { + logger.warn('Note somehow made after today; discarding') + return null; + } + } + + // Fetch author const actor = (await resolvePerson( getOneApId(note.attributedTo), From 3de2617d6b05664e94238c63e9ad72015109c60e Mon Sep 17 00:00:00 2001 From: daikei Date: Sat, 11 Feb 2023 21:09:43 +0000 Subject: [PATCH 03/25] Remove hardcoding of sounds (#9510) (#9607) Co-authored-by: Kio-td Reviewed-on: https://codeberg.org/calckey/calckey/pulls/9607 Co-authored-by: daikei Co-committed-by: daikei --- gulpfile.js | 3 +- .../assets/sounds/None.mp3 | Bin .../assets/sounds/aisha/1.mp3 | Bin .../assets/sounds/aisha/2.mp3 | Bin .../assets/sounds/aisha/3.mp3 | Bin .../assets/sounds/noizenecio/kick_gaba.mp3 | Bin .../assets/sounds/noizenecio/kick_gaba2.mp3 | Bin .../assets/sounds/syuilo/down.mp3 | Bin .../assets/sounds/syuilo/kick.mp3 | Bin .../sounds/syuilo/pirori-square-wet.mp3 | Bin .../assets/sounds/syuilo/pirori-wet.mp3 | Bin .../assets/sounds/syuilo/pirori.mp3 | Bin .../assets/sounds/syuilo/poi1.mp3 | Bin .../assets/sounds/syuilo/poi2.mp3 | Bin .../assets/sounds/syuilo/pope1.mp3 | Bin .../assets/sounds/syuilo/pope2.mp3 | Bin .../assets/sounds/syuilo/popo.mp3 | Bin .../assets/sounds/syuilo/queue-jammed.mp3 | Bin .../assets/sounds/syuilo/reverved.mp3 | Bin .../assets/sounds/syuilo/ryukyu.mp3 | Bin .../assets/sounds/syuilo/snare.mp3 | Bin .../assets/sounds/syuilo/square-pico.mp3 | Bin .../assets/sounds/syuilo/triple.mp3 | Bin .../assets/sounds/syuilo/up.mp3 | Bin .../assets/sounds/syuilo/waon.mp3 | Bin packages/backend/src/server/api/endpoints.ts | 2 ++ .../src/server/api/endpoints/get-sounds.ts | 28 ++++++++++++++++++ packages/client/src/pages/settings/sounds.vue | 28 ++---------------- packages/client/src/scripts/sound.ts | 2 +- 29 files changed, 35 insertions(+), 28 deletions(-) rename packages/{client => backend}/assets/sounds/None.mp3 (100%) rename packages/{client => backend}/assets/sounds/aisha/1.mp3 (100%) rename packages/{client => backend}/assets/sounds/aisha/2.mp3 (100%) rename packages/{client => backend}/assets/sounds/aisha/3.mp3 (100%) rename packages/{client => backend}/assets/sounds/noizenecio/kick_gaba.mp3 (100%) rename packages/{client => backend}/assets/sounds/noizenecio/kick_gaba2.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/down.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/kick.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/pirori-square-wet.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/pirori-wet.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/pirori.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/poi1.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/poi2.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/pope1.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/pope2.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/popo.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/queue-jammed.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/reverved.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/ryukyu.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/snare.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/square-pico.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/triple.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/up.mp3 (100%) rename packages/{client => backend}/assets/sounds/syuilo/waon.mp3 (100%) create mode 100644 packages/backend/src/server/api/endpoints/get-sounds.ts diff --git a/gulpfile.js b/gulpfile.js index 89a6acb83..87063c0bc 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -15,8 +15,9 @@ gulp.task('copy:backend:views', () => gulp.src('./packages/backend/src/server/web/views/**/*').pipe(gulp.dest('./packages/backend/built/server/web/views')) ); + gulp.task('copy:backend:custom', () => - gulp.src('./custom/assets/*').pipe(gulp.dest('./packages/backend/assets/')) + gulp.src('./custom/assets/**/*').pipe(gulp.dest('./packages/backend/assets/')) ); gulp.task('copy:client:fonts', () => diff --git a/packages/client/assets/sounds/None.mp3 b/packages/backend/assets/sounds/None.mp3 similarity index 100% rename from packages/client/assets/sounds/None.mp3 rename to packages/backend/assets/sounds/None.mp3 diff --git a/packages/client/assets/sounds/aisha/1.mp3 b/packages/backend/assets/sounds/aisha/1.mp3 similarity index 100% rename from packages/client/assets/sounds/aisha/1.mp3 rename to packages/backend/assets/sounds/aisha/1.mp3 diff --git a/packages/client/assets/sounds/aisha/2.mp3 b/packages/backend/assets/sounds/aisha/2.mp3 similarity index 100% rename from packages/client/assets/sounds/aisha/2.mp3 rename to packages/backend/assets/sounds/aisha/2.mp3 diff --git a/packages/client/assets/sounds/aisha/3.mp3 b/packages/backend/assets/sounds/aisha/3.mp3 similarity index 100% rename from packages/client/assets/sounds/aisha/3.mp3 rename to packages/backend/assets/sounds/aisha/3.mp3 diff --git a/packages/client/assets/sounds/noizenecio/kick_gaba.mp3 b/packages/backend/assets/sounds/noizenecio/kick_gaba.mp3 similarity index 100% rename from packages/client/assets/sounds/noizenecio/kick_gaba.mp3 rename to packages/backend/assets/sounds/noizenecio/kick_gaba.mp3 diff --git a/packages/client/assets/sounds/noizenecio/kick_gaba2.mp3 b/packages/backend/assets/sounds/noizenecio/kick_gaba2.mp3 similarity index 100% rename from packages/client/assets/sounds/noizenecio/kick_gaba2.mp3 rename to packages/backend/assets/sounds/noizenecio/kick_gaba2.mp3 diff --git a/packages/client/assets/sounds/syuilo/down.mp3 b/packages/backend/assets/sounds/syuilo/down.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/down.mp3 rename to packages/backend/assets/sounds/syuilo/down.mp3 diff --git a/packages/client/assets/sounds/syuilo/kick.mp3 b/packages/backend/assets/sounds/syuilo/kick.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/kick.mp3 rename to packages/backend/assets/sounds/syuilo/kick.mp3 diff --git a/packages/client/assets/sounds/syuilo/pirori-square-wet.mp3 b/packages/backend/assets/sounds/syuilo/pirori-square-wet.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/pirori-square-wet.mp3 rename to packages/backend/assets/sounds/syuilo/pirori-square-wet.mp3 diff --git a/packages/client/assets/sounds/syuilo/pirori-wet.mp3 b/packages/backend/assets/sounds/syuilo/pirori-wet.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/pirori-wet.mp3 rename to packages/backend/assets/sounds/syuilo/pirori-wet.mp3 diff --git a/packages/client/assets/sounds/syuilo/pirori.mp3 b/packages/backend/assets/sounds/syuilo/pirori.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/pirori.mp3 rename to packages/backend/assets/sounds/syuilo/pirori.mp3 diff --git a/packages/client/assets/sounds/syuilo/poi1.mp3 b/packages/backend/assets/sounds/syuilo/poi1.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/poi1.mp3 rename to packages/backend/assets/sounds/syuilo/poi1.mp3 diff --git a/packages/client/assets/sounds/syuilo/poi2.mp3 b/packages/backend/assets/sounds/syuilo/poi2.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/poi2.mp3 rename to packages/backend/assets/sounds/syuilo/poi2.mp3 diff --git a/packages/client/assets/sounds/syuilo/pope1.mp3 b/packages/backend/assets/sounds/syuilo/pope1.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/pope1.mp3 rename to packages/backend/assets/sounds/syuilo/pope1.mp3 diff --git a/packages/client/assets/sounds/syuilo/pope2.mp3 b/packages/backend/assets/sounds/syuilo/pope2.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/pope2.mp3 rename to packages/backend/assets/sounds/syuilo/pope2.mp3 diff --git a/packages/client/assets/sounds/syuilo/popo.mp3 b/packages/backend/assets/sounds/syuilo/popo.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/popo.mp3 rename to packages/backend/assets/sounds/syuilo/popo.mp3 diff --git a/packages/client/assets/sounds/syuilo/queue-jammed.mp3 b/packages/backend/assets/sounds/syuilo/queue-jammed.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/queue-jammed.mp3 rename to packages/backend/assets/sounds/syuilo/queue-jammed.mp3 diff --git a/packages/client/assets/sounds/syuilo/reverved.mp3 b/packages/backend/assets/sounds/syuilo/reverved.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/reverved.mp3 rename to packages/backend/assets/sounds/syuilo/reverved.mp3 diff --git a/packages/client/assets/sounds/syuilo/ryukyu.mp3 b/packages/backend/assets/sounds/syuilo/ryukyu.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/ryukyu.mp3 rename to packages/backend/assets/sounds/syuilo/ryukyu.mp3 diff --git a/packages/client/assets/sounds/syuilo/snare.mp3 b/packages/backend/assets/sounds/syuilo/snare.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/snare.mp3 rename to packages/backend/assets/sounds/syuilo/snare.mp3 diff --git a/packages/client/assets/sounds/syuilo/square-pico.mp3 b/packages/backend/assets/sounds/syuilo/square-pico.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/square-pico.mp3 rename to packages/backend/assets/sounds/syuilo/square-pico.mp3 diff --git a/packages/client/assets/sounds/syuilo/triple.mp3 b/packages/backend/assets/sounds/syuilo/triple.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/triple.mp3 rename to packages/backend/assets/sounds/syuilo/triple.mp3 diff --git a/packages/client/assets/sounds/syuilo/up.mp3 b/packages/backend/assets/sounds/syuilo/up.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/up.mp3 rename to packages/backend/assets/sounds/syuilo/up.mp3 diff --git a/packages/client/assets/sounds/syuilo/waon.mp3 b/packages/backend/assets/sounds/syuilo/waon.mp3 similarity index 100% rename from packages/client/assets/sounds/syuilo/waon.mp3 rename to packages/backend/assets/sounds/syuilo/waon.mp3 diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index 6ee1a977e..35ab738a2 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -222,6 +222,7 @@ import * as ep___messaging_messages_create from "./endpoints/messaging/messages/ import * as ep___messaging_messages_delete from "./endpoints/messaging/messages/delete.js"; import * as ep___messaging_messages_read from "./endpoints/messaging/messages/read.js"; import * as ep___meta from "./endpoints/meta.js"; +import * as ep___sounds from "./endpoints/get-sounds.js"; import * as ep___miauth_genToken from "./endpoints/miauth/gen-token.js"; import * as ep___mute_create from "./endpoints/mute/create.js"; import * as ep___mute_delete from "./endpoints/mute/delete.js"; @@ -668,6 +669,7 @@ const eps = [ ["users/stats", ep___users_stats], ["admin/drive-capacity-override", ep___admin_driveCapOverride], ["fetch-rss", ep___fetchRss], + ["get-sounds", ep___sounds] ]; export interface IEndpointMeta { diff --git a/packages/backend/src/server/api/endpoints/get-sounds.ts b/packages/backend/src/server/api/endpoints/get-sounds.ts new file mode 100644 index 000000000..aa3ef24e7 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/get-sounds.ts @@ -0,0 +1,28 @@ +import { readdir } from "fs/promises"; +import define from "../define.js"; + +export const meta = { + tags: ["meta"], + requireCredential: false, + requireCredentialPrivateMode: false, +} as const; + +export const paramDef = { + type: "object", + properties: {}, + required: [], +} as const; + +export default define(meta, paramDef, async () => { + const music_files: (string|null)[] = [null, ]; + const directory = (await readdir('./assets/sounds', { withFileTypes: true })) + .filter(potentialFolder => potentialFolder.isDirectory()) + for await (const folder of directory) { + const files = (await readdir(`./assets/sounds/${folder.name}`)) + .filter(potentialSong => potentialSong.endsWith('.mp3')) + for await (const file of files) { + music_files.push(`${folder.name}/${file.replace('.mp3','')}`); + } + } + return music_files +}); diff --git a/packages/client/src/pages/settings/sounds.vue b/packages/client/src/pages/settings/sounds.vue index 970b75ca3..c2297e212 100644 --- a/packages/client/src/pages/settings/sounds.vue +++ b/packages/client/src/pages/settings/sounds.vue @@ -50,32 +50,8 @@ const sounds = ref({ channel: ColdDeviceStorage.get('sound_channel'), }); -const soundsTypes = [ - null, - 'syuilo/up', - 'syuilo/down', - 'syuilo/pope1', - 'syuilo/pope2', - 'syuilo/waon', - 'syuilo/popo', - 'syuilo/triple', - 'syuilo/poi1', - 'syuilo/poi2', - 'syuilo/pirori', - 'syuilo/pirori-wet', - 'syuilo/pirori-square-wet', - 'syuilo/square-pico', - 'syuilo/reverved', - 'syuilo/ryukyu', - 'syuilo/kick', - 'syuilo/snare', - 'syuilo/queue-jammed', - 'aisha/1', - 'aisha/2', - 'aisha/3', - 'noizenecio/kick_gaba', - 'noizenecio/kick_gaba2', -]; +const soundsTypes = await os.api('get-sounds') + async function edit(type) { const { canceled, result } = await os.form(i18n.t('_sfx.' + type), { diff --git a/packages/client/src/scripts/sound.ts b/packages/client/src/scripts/sound.ts index 82233dd6c..29dd181e9 100644 --- a/packages/client/src/scripts/sound.ts +++ b/packages/client/src/scripts/sound.ts @@ -7,7 +7,7 @@ export function getAudio(file: string, useCache = true): HTMLAudioElement { if (useCache && cache.has(file)) { audio = cache.get(file); } else { - audio = new Audio(`/client-assets/sounds/${file}.mp3`); + audio = new Audio(`/static-assets/sounds/${file}.mp3`); if (useCache) cache.set(file, audio); } return audio; From 254a9e8716a45d721afc2edf798491ab50c6d7f7 Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Sat, 11 Feb 2023 13:16:45 -0800 Subject: [PATCH 04/25] =?UTF-8?q?docs:=20=F0=9F=93=9D=20custom=20assets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ custom/assets/badges/error.png | Bin 0 -> 58350 bytes custom/assets/badges/info.png | Bin 0 -> 56191 bytes custom/assets/badges/not-found.png | Bin 0 -> 56874 bytes .../backend => custom}/assets/sounds/None.mp3 | Bin .../src/remote/activitypub/models/note.ts | 13 +++++++------ packages/backend/src/server/api/endpoints.ts | 2 +- .../src/server/api/endpoints/get-sounds.ts | 16 +++++++++------- packages/backend/src/server/api/index.ts | 10 ++++++---- packages/backend/src/server/index.ts | 14 ++++++++------ 10 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 custom/assets/badges/error.png create mode 100644 custom/assets/badges/info.png create mode 100644 custom/assets/badges/not-found.png rename {packages/backend => custom}/assets/sounds/None.mp3 (100%) diff --git a/README.md b/README.md index 91a2c8809..55f599235 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,8 @@ psql postgres -c "create database calckey with encoding = 'UTF8';" - To add custom CSS for all users, edit `./custom/assets/instance.css`. - To add static assets (such as images for the splash screen), place them in the `./custom/assets/` directory. They'll then be available on `https://yourinstance.tld/static-assets/filename.ext`. - To add custom locales, place them in the `./custom/locales/` directory. If you name your custom locale the same as an existing locale, it will overwrite it. If you give it a unique name, it will be added to the list. Also make sure that the first part of the filename matches the locale you're basing it on. (Example: `en-FOO.yml`) +- To add custom error images, place them in the `./custom/assets/badges` directory, replacing the files already there. +- To add custom sounds, place only mp3 files in the `./custom/assets/sounds` directory. - To update custom assets without rebuilding, just run `pnpm run gulp`. ## 🧑‍🔬 Configuring a new instance diff --git a/custom/assets/badges/error.png b/custom/assets/badges/error.png new file mode 100644 index 0000000000000000000000000000000000000000..e90912b405bd46bb597853035ae4b83818ef98ba GIT binary patch literal 58350 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 literal 0 HcmV?d00001 diff --git a/custom/assets/badges/info.png b/custom/assets/badges/info.png new file mode 100644 index 0000000000000000000000000000000000000000..ac70544e4a6a77fdfd81575238346c363c1f7733 GIT binary patch literal 56191 zcmV+9KpVe_P)p%1O zf8SUQd=F^hyYb!lZtT;c4Be>&;=B9(-S}?&9|Zs@(WL}XhZcCg8{duZ#(>-M(5V1| zD{uS@|9bkh?^J-njY^;lSOK&F(Y<}bJKtS_x3P|lyh4Q17o)E~a?<~Wdu|0hKpKz@ z*Z~`mm-t^4XaY=tOw3C&;7c5l?*L%C0Ptu2_4MoC0lz#?5)Sz3Zf_;z>n7y)5e)?+Qc7=PM_LLj0=@#)0r7s$>rhSRw~oK~x;e8? zJ_k+4kWzL5^An8ZwFK+MIMj)U7V}Wyl(-I)iGcqzVm^pJMha7SUbLY;byu6&8oE%hD-D4Nf-Q7)1 zO%0!a{yCp~@(G`P_8Il{_2_z^P2UTA1U!(i8$`eL0C35#?%~Pj-(H^pfX46Se87

y5V|w~A?oj>ef0twzj}v`^-IxX(S^XB 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

uPCgXrPeK)6>^W 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

fI-7`|3+;u0 z;&rr$O3HFsh~v>~xt(^A zUBJgSP-Fm_wd()}H+S5B_z*w*_#?jg?mKMTwHuxE4c;UH0zBWpLY1mQ_BUW5dd*O_a&<8Ry_9+dG48x<<(ep0 zO@lz(5ap`Z7hvWw>18X`ARt#knF>|uxhFsqu&Y$AiaIsxpn8>RX{T1{3YDRu(*w;1 zOheo8%h7p`)Ck2*R;EFRVG)^_K5#XgN<&EjTtmveuiwFpy?^k{|Gp4p!0y58*RP8N z_<#TXcZ?Y`M)mZMA}du?3E*8SfY#jk#3i^{0gK-_%?C_JZIbhsPu#*wB7omMqbHDV zUw%O{>PtHDA93A3k-;aD@%JZVd;HRH|#&7hb|4g@c@7=?oQKN-B zpbCDr8g(_$zD)<=KGbd8B&~jc?^~{Xc{*85K3LUUo;wuNCM2Z@Lf{r?J;#k`Kgj_a zT`lO8mIhChCZeoTy@u$RWUE%QHmcXDi<))op>pkdFfiY^&s$YUqHey3%yr-;;KZc2+)gMfKi6!NiO9QiL-uACD5kICBR3N8P_ z?ZACXlq~hKUYt{H#dL5i~ADr|N0;B&(CDPko^Sw`3(`lLoy(UQ?%chLA!Em(StbH#%BO#&%J6dzM5p#d z1{(D;6cAOfQwJ4DRvY{5`ncA7M@zK=itspen&pY=t+eTMuOynJYSn9i#;x0u8tN>p zWtwRVt5~f%dYksc&$s`<3ntf_QjCS`EWSMdJv^*@iJWVra?^Iuvs;%Q<&VyNOYq>e zsc<`<`w`(E`}O6QU!qHwE~=-$U#`*efmVaP%b}o)L=8Zea{!WI>VF6o>Nm&S$@B4& zPWqR0;{W|4NxR>H*ME@xDc$ntf0JwX*K^>rGmp@?VG~rNQ*7+iX-GMJ8ehZ;@Z>i-x=sWWSej1D26W4g_h!Kqs>#tDy3Au6Vl4K_rXl#4Kj~ zrJ~bpU(~FnfpbT$;2)CtuYQwGeF1!BJm+;f5%9Hk)jHwVGGN>5bjSQTo zhfkP@R@z9)vZs8pt&rCrTg(Pk3V{U#yVI$Ao5 zh`f3^bu?(Hnfvr72SnRAx|{p8tPgA<$s*^Iw-NU4}QEY*6`m+MNDqHFAEI{(sNtRA>%ghz_kg;>)Yw z;vYKwU-L%kzq6U!Ab-uq+D6I%2#G7bp*!eyN1LwQG6w!s-t0}WK7SiIaQI zpmOD^XxOqonU#>@(zy2DdxE_0-Q~oDt#Y(P^=VNUaJN z;9}OrR~#F-eE3r|(rAdfIz6EXOUN|=a652h>K%OlTfuYlmv6JWZHefSDAy7r=kzG@%mSb#~yNfBwO;Wy@5-|7o72|3^L)bclN8ntwO% zJsst0XzRnb<{WLSHx!o@U)~DdamoD zJo)fV+qKU#_$9^Dp4^5q@OKCmLBDJXK<>cgbnN`eOHi6fCqqE+EsuBJ?u%G=?jC;s z^X~$I?CIC{VC~mOob(L(b%*C-|7i!Y-B-EwmnQ)2I%y-ygt<6~iC~GRIj((r@|_aE z>eZ`JkzNZK{J)Y-&KHtCPz<1;1kkZmnR4HDwhV&y>_C2Fa?SHHvcT$^onRhv^vx4B zN@_Hz)2%1$7C7LaZ{@(>UpY^0;=u~tb#a3vc8P*DL1Th5?r1UQPi(rU-k6&mdD@~T>|*6U(Qe} zXxg+XYSI&~na!!!o?HQ4Lj#zao1sS!3-lzbQ>Qk1nfJzz4}QnUL1R$9N|p4qmxtxul zjYgWS1p%xJ+=7>PvT44`)P?!{{4dbg)V%ye|e}pid&(%8d;r zN|t=8R-(ig9Oz@8r(U;yQ26mqy;Nvfx`C$vXSoJk5I{0a{f?qxM+2PPdy4d>9OZvY zHs{QlGorbITX{1RKsy41v8gEr^zDOT1N&q6AhrP*OrKYy|FdYpV*Kyf576$^1sV++ zk}~L$fdE)amo8Jfzy!eHA4=f&KKl?cH=iT)%9j|o?SfDPg^}*#lI4o@_n7tVhn4Hr zHP~LxW_*K{?m@Ro)5_Pi`q3+D2IU6miY6}7lj7?D_5?d zQ>RX<;J-xHra)Ty{f-11pv(f)$^H?QC@n8A^d$SFOr@%?YIV>@i$T-TVVWb_Pqsso z9-~pYp{7{Ztu@ILJwm0So-GDU&AO^iCIBOky=bj%j89MB!|UJP?*FGvR^>oltJWF( z-md!k=+~#00Dflc->U~ISE_^+F)MKE#w}6t(}>&A^6=-Rcb zD){*zG%av4{R2z|{+?`9HhFxp(YHj2l3#NTc@xEW=vb{J=@%!qI??;zSu zv_;Lf-O+ib9~5EnVzY0S<)ShH=s9hJo^d}szx^Fv=feNzD>yh<$X^lolHbhT4Gl54 ze_ssG0{pB1EKH11sZvE8KXx2jw{At{%9YT!hXO+f^oNdtLD~dio)^e3We55ZIe1;1iunaU?;_wm2ORYuI(8gxeewx@`Sn-4c==M? zetPFK7#JF1V4q>4PNH$EHg64#R;*YFv71vw^SL$^??dQCb6X1tXEW^6x) zm1pka=a+vK2yk5MKi63g^WC}t20{70i#6bRApjl@I>Vu}OaM;`MfU6H=%|998+`^B zO4;0d9|=~rJj&Ou{}cUcpKR&@{L0sC2%S0WVD6a=i@+3Va!h#obeJBI5}^bVI^Z8Y%UPyUAmv0+iEWGLDX7 zV4DUUh9dMt4zuo)L^WA=hb@>mX%Sw2^>?lUfUjP?5*=2`6rh%_E(Z4NlP&m_1fZkc z87*405X`Mh|EFX7b{IWus33u%L>}FUM4Gg1D_jeHQQJ?kL(f&Ic?SQ;&FA2E>MlY8 zgOC_DivZ(^Z%?~n{lbw5j#-PS8_zLq&*gl@0@#(R-N{fC{BX{H(#%;nNs^!Y9-cja zE*hZRJ<0tt>4n%GCj|l2Z{9LT0;t=#DXLekfiwHBNQFRGRYtF8p2eUtjp^HKzr(Pb z5o)y8&oKNWs{o+mk!wh~U+^wK_T7Wm&Jw{qp8AuQ@!yG{Po?d^Z?-NoChp$ zr4=^;acYkv{KInqzmfntwrdM*ZEfr!pSdpi{}JI~IGvh`KtErM8#!FW0yv^hf3rAY zJJ0jYlL8PC|BYwied-=UB359B{X~47>LLi>r%PT)2)0CkwH0EnJQA^iyk-PA_^0o( z0qWIii*80Hzg~lfVE6w0NIi1~DW}gMX3bi((9{%_j$G?dwQ6-q0cd4U0Q@)Cs!&Ju}z=6Q+307}a0sMVV7cTKO!W^gWqKGJ8837%1uc~n#ixdo|W zrksiM5$G-70-eRHpl7!!#}pB}23-~gp`PJjSkAV?U*8k*|9pD}fII$-j0{ncq`EfA zu$-j7Dgm_7Y$;^h+_`hnu5BBfKX+D;3D*>yN=e47IkQE(Y@^0aP`+BN9EX=?1^yA6 z&cW+6fq&%&teigv50BXi;Qx40B7l2`Y!Ehk93o=Ri;TeNE$8x78^C1LX53N{{No5e z2P`>e!6d+C(Br3DqNA>!h>iF;2I0i^B;ngP;ut^^UKRZtN)MQ zvQ(%5D?c;rI%%CP3GmkspLZ42fqZ|SD*VTvc`rr2fB!zFO`E2=(wprZnf^OzoqJyd z@cm~;VPVt-6&mo1cvy;hlPMzN#Lj!JGNXr+pfbf|NZCp?o@$Nv6W}+pJ%p|^W1!h@ z0W`GxpnA)0sMW>*jZH?Q-8g#~d+*J$Uz`U?H0m)1y)63U_wQb&H~t{!BA{;Fx}h@p z^PJ;<+v%?)fVQnPg>>W5%!3CGKtg;R{`%`L{6)Sq8`p6A`1)cxz0g$}wh)Avn=Amo z$wzHD51%vl5xRO4!YxPQ#`dLY;8)uJ&bnip^;qEs#N7M}_6c`HflOXz0%~;ciL&bI zXx5=ahPnk|9kfJ5pC=?8+;|*2R_-NNq5NA?fl_f)6C%BbpFGCvU!^WgZpQlSJK|$f z?SDL#NP)>fIg~{VY59x^U=$I6CcSsEUpcmL?A|w$#B9qfcMCUNs#@KrgnshP2x>f5W>Hqre1i(Igwc54Or+3d>6F>)Y z0m_npU!z8K%$znAdv@)_ix)3MSuxumFJFpVPY-ugY1Urs4$RH43(oEPoqd4NRT~jB zc^J;Eo|ggmO8e=u7tXGni-1LQ5Owwr!moabvAL}aAfjMGs#w1ns*(iF4CL0@UC^#e zH`H(147F?4!Htu55b7C;GE5fjI_5|K+)mv}vlX5{c`o8FqWzj%uU|?XnXhD0_=CRv z`{(HcS$@9r4~Fy}ipu<4g=Fml^j(<@+r!teIprE&zI=(oytvzsSB7yv01pA>YCqlq z7_norh!1dI051{Yd4bEkEpYM1i9F}`r%s)UN|h>Qj`X|86Ry-gUIKU!hnJ5Mu_44B zm8#bin|MSqN2VbUEP;)@cA~z1Uz99W`dfNvVZ70_M9ESwDrz)ABeUTm4{YqYR|Eii zM5d-~pLsj@f5^)2KMa(%@!@t zu1$M<_1XVmx5!a+KBiX&W=#Ox9?gX;-~aFXj2)NUe*L%Hg3aRWS7{&%y9d9227G_( z1x&k}qI$dTViHky1wgzDKrw0x#*ZI|ix)2zYC{eyftamUSm0_X)Bux#bSr(#GXjIx z&BkXBF6C*E2lw(fZroTE_^-*%@?aaa_i?>z@V|JFfP1I5Lr1F(>gf%HA}B$M;Aa6` zRsxE!6X2zuYHB4=xsfJ1PIH#zJ*WL*q#A%8*=>=@<&3+Q!{?!O+jh8c;X;lt5T7JH zdh|fm>eX{i0Bl?%pfEAQ@WBHydE6NI`*`8@ty^gXz@1#2VHi7h44Mv@nr#4(C4Zk) zDOhmiCc-W~LP*pq_>UiqxIjyMe=ckAtJ*Q2sqmjaJ5MS=`2S-Ti8%$L_=$kqjYyEQ zAFP0sDyUKY`smfO7k>NU1xAk;BT||zGnG1Lwo3Fo8W|ah*vcDSmnww7s(>4{{&)s4 zvFWR8KS8^_HZ=76%kP7%T7b{N<-j>KZYxRXx^?Sf;lhPDckUei{PWL3A%VaC{u7@+ zx`HD~tFUUj4T9Fr63at&9t{-DKQI5tUGdSwhYt}L7%0?bCSU&tGIz4NYVYfMr_%pH zJifVp7~_ZZK$S-Ap}%|=6h6sPN-tEI#>)iW70IHRhiBzgY21qB=zeJ?T%qldlj08b z4EjM^yE8ud3l-py z_!)Ywe7g#$uiuCK|FWW8xpVjK7}PIg(G#aLYm$32ecE*V^uy2SuG^gyL38LE8K+k| zW?|e9(XVgcoB{b-O3$(q;P}8Fj|nj6zk+5{O*HF2Ez3e6RseH$UxNMi#NVsc*7%>Q z56$%$oAz_RBbT77feCc%-^>6=X}&XX zOTCZi3-=K0AB2E$1CS6h1OGescJM3h`|}>y=Q0s~b7vsx^d~|EOxSTT$Bck^*m1EL zxC))t?C04EhaqFysfdPDd zeUX})DpGCl^Wq?1-@bh_1OG3%7Dh*&X7&EBcjos$Ou&&1eyCHs7FzaSEG>UnNpvknz2_8R3x9D zPqW0tM6rh2!qi0kt$cqylKF2CKu0Yi(sGzNb7n4%ODP_})0+PI8c5!I7S(FhL6=2g zSt@`&+zWB!8vGJ&ZMc<6vr=Ad!H(T-1||3g|S) zQ=|v8?C>ijCBXCTN>{3izJ2h+PAk*pTbAeC&da&`sH7{Rm?vz~K%85<06$#FJ@8fS2O^CFu9M(5b21{6 zuOsr>Q%v1`IZG9w3;>oaTTYDgHeyg`@i+ChFc$>CjZz%Ms#diM2C6hh4I&qTT?b{_ zP&xdhRGG43ZFOD<;MF(4jum@RiC3w)Y?EdJWU&W;$AJ4K-0~z6P%Bv~Z5)0X`E=zC zIoHX4$xH^Et(@^NepIgwn>M4%e5nGE!PuAH#7mFg z761)DkO04VGZ8&~Fs_R{fBwL)8Vd*~A_)$SM9ht6@ILb(%N_wP&gwALLA*)J)8o#{ z?U59XDV_RN#OXP1{CG5KQ2z~;(7RVp^d3AI{YQ*MI~`p#YTZT@4)JrDR{{uj4I{Ut zGt7fdym3${$AEJNz%TyReBbz6YHV3t+=6aI7DIM}?3>JFkeL|R{VS}CGe1Lz4psjA zU*1_^Pf;L%AMYH;;GTx4quq}{PJnlm7e?Bsn4RPbaCt8W1bbxR2Jp@|o;lxGF{1DW zTx4VIr`n@Tg~}o_|J7Gty-}Judh}>cPohECQVHoJ#qv~mMnqUr1>xlJ|eBNUVj=+CqGBj)h`gVVF!FBkH*>sBk|cm+c%1Q z@@vO@r@?Q^7(~RLL-dX3SaA48mI|QxfT?KQs1YhxsRAPd{VWN9GaS{)rQuG;4jtM< zTdU(6_nR8FJ>M*NlP<{th%L;sZo z!1Dk8nH^}|vMJh*a)r5DDh!t%gsDy9n*`t}t%??_pChu0?kA&x(Lm8NAeul5oB_zW z`mOcoMI?XKF^rh{*|TRE=fjbF=ZpZqi8(FUsgo8g%uLXqPCD-Y@1-yk`Tyokn+SQ_ zvSmx*^MC#I*EoCjEF2vigey_2d0Vs?HV4K52L!22+;I`!XCEQ@++73*hQM#!VC;07 zj4$Gy3l04IbH0dk#EKb15J-M+G!xCm#~8lp>>I8C*I`&KU5d_~J435|yDSO7+}H@U zYSn_3m6eFH_b@YggA5nUnT1OiF5u-Ke~9+s&+pxXv$L}(dU-oq(u06JyKzY0;b=Kx zF@ZnzO#%>Oz|X)t?&co^_FgK$S0~dX(^>T&qZMk z@#NW(G6DQa*6&|Q052XT;9A@|G-%im+B2h}GcyWJ^hdomv5w8C0&L|~(Qfo224zhE zT)3k-bPg&vY6VmO!x=073Y`d&#VGMMV;7@z#VR8DotgdFk6W{5jqn$%RIQ5gbi#8$ zi2={2J)eqPI_&K1BGxpoSg}Iu3|21Ze*E}xp=1I2 z^y#A{fEQ%u|5^gLowN~6NIrEO?LZQE3R-sS4HLTrl{mo3^f-X4-0B;iMIdkm`=m}{ z@{fVtHdutEsI&pUJ2k+Qhsso`fe!84r_{KcgDRC3BXhQ%*{(j!GFP=w6x%)ofqZepk$bmOTw9nM-Lw$DJe;u@}i(A z)9K#FLLo@6RO!;_+F9!jl`wkP5V`hYJAV7^H>nRowp>-`$;Cjge*&(?-$IMd#xV9e zARPeN62Q&J{t34fWSc!>Z~nP-?`16Adj&EHw8|p^sL8Pc5ewiN{eoWX{;A~uf0Toh z|4tX+>6N|c)S)%Tk{`IjeJL7r?g>+e#5W1RUh4Eq3j{`H4g{v6+tLWASE-4vvm@z# zsp&;T;VS9F=)w;Sc3B*Z3iX%x*Znx>UAM1jj3HTiC=fL0kg`*H3 zGP7`10R8-1yQ~m0VE}@|qD4T^gNSIr8fnw6k?&sg95DgE{QQ$hTk(n2q*22+Qh|f} z^+BVC4WLoC4*K`*`9=_Q%*# z=gu9GZIFNFyIzm?VS|9b-jBsfe=D3j5QEh|R;bm+5T=gt65wsK2n2e{ae(kl<-IY| ztUpc#wj1RLh1V$&Gf?=*ZbMimH4t66bpnR&TT$Pzzt~R0Z}aZ27U8>do&x-QLdONoAb<{p$3RmY^%_@bae%b6AQ8-Q|LO3XG!o$l6A^v$Ip!X` zE*__W&mPRQa=>dDs2s3k7su4l;EhwB(|!Z9nTa@x6aWVSJzSk}>EZ=(^5=yBL;&!2 zh|%rNR$gc~!AbOfWTpB5UbpjSq3Fx{s6!rA`qFkLuC{?kF zh!K>jS`(F;v_XBNfx=}l^w=t<=x`)m{6BgO!p}c+1HqS{Am;j)2;X}G{!14jaBP3< zbD4xkv5o@Z4E{&Q9kAVI93rO-K*U4^y!vb5lidpoH5S0&=im1%$rg;C- zp~p97>v@=j97Dh9i*WJ$`Lvh^tAM(-Yl%}oFZB;>b7o9OOk{+}r?XnhmHdB|o&osz z!3zu@GY|UCyNCc%vK$A-S%5*LU?vdBD(HP+P6}~QNGhBTU;mrjfnXwlZUp+8`5=K| z%B%oK?{h_7ISlyVxRDHg-eECXt*Bh@vKQdR!vtJDx&{p!HiFiqAecL+W^@BovH=Wg zK?1?)C%dq)M6r9GpS(tfqhaC{C*}iWC@Bt785I_pMUzl;!PNkt=-ei&@4NwePV2=f zFSYTWOapxeS-SZgTvI+5DYvNPYY6fWg5UU|0(e)qEDhy zVZ-`$0U3dzl1W<*{G>G7*H(3ml$` zR>KyEC$D6wGH7mL2~+1pskGQxQV+r{@Rf-m(*RM6>^cYYLkuL7nGA#pz$d>UM|ni| z4Dvk#E`EWS%a0JYX&3zFOh@>n0f-NtAx>XD)j25l%_&#J2F?&b+%T^nwkQflD<`hP6ID=U`FTj~A1>gv z`uSA=OdLEJN~ONQS*<8t@2m}&z<)P&8~Q8sP_|N4Xc#KcX{H}c?U)4Q%0Q*rtMmvc zPj(M!7^sDR3Un5d|5ULW_ep?Ou7sR8apKz>fK=x&{O~K*My!Ko`>tp;a*;IdEvJDg z>~0Zp^@~XnuP?g-3gzo8zt)3@AUHti6Mu^p!D6~C^A-}&k)!pPKYxC{Pyg81Sk*xv zTz%N--%S8Y@Soa--X=OIQ>iA}k8wlSh0$m}VlvuIvVq>>ZA1idqCddgF-4dFGaH}m zF3Ca-FcFx!C&Sb=4z=1DLC($YEu~%oE&I%esZ(M)2`Guc`D9v*K#+l-lx9=}rK^fG zVu(1I`+*`cIgg{}1|Gljk3^A8=!PBeoi-j(QwNdso+l>tW(8<=13uetg{zxptAz>|l>HsCp) zC{v{-^!2)nH!@c+a{7;poq8+GrTGBD-+$BpXYkjqRTIsdHy3TNxviEl(&`fteh4!@6r0A%prJG~u!%yjA0u7M6?J*75a0%!Ndo6%`qmPjB09Vd98bh(PW1$8;^Ln~FL z9GaO=g^6RFL<06IO2R>f3|vmCkcq4kyd;-FD24305p%hWlO_NB!#5Cq^(g`969oAM zilH5R>fb+NC!P40a!$?teA!!ov9N)kp(}9jB6#*~i#=975jDO$4!Vy^3kqJ_wge&L z`yfqJd_qOO6n0x>Z$qC}R}K+9%LVXUu*emyNPpieJR z6{#>WM*Fs{1yS%^L?({hT(@uE#_U-$q0zV*8ub_rW1oG}o`+m0wElGZ_g^8^h$up3 zk`I<#LVk_K0YC?Vxv!K#nzH6RJdfY}hkzg8D=UF4E(>KRp}oC*{+5gG-!F>AWbl7g zWa|Il6#;PM|I5q!FszR;N>`|c_M_dU)7(J@C;9&-wsGjbXcM$%c%jXtCD0r<6D`L~ zLyOUpwH$2;&9O7dW~0^kd1zoX0M%P|MU7TEC`~87T(docY)#2hW&UYwG!{lShopuh z`;%|F7OJG+n2{LF-Q~bzHaX_ENq%mqv5xx`kwWsH6;bujiQKw78{eLBduM>ok9|*S zW81P`@EOn!2W)#IY@9JJu3wn;7raI%BZh|%uyk!#pmLKos9voa zLPA1t?bg{p>g9TsNAd_I?wl$ zN2Dd^&OPJ3h~(?fBGoc`>qQKWI3<)HlRT3>lfEE-7s*WN^|x?MhRq&PBM`4t0a;v2 zlqYw72!PwmGcEM+Q!9#BVS@krPmW^F#K9<2z6#n7cTArFV5?#bOotTddvvm!`O<0c za{xwOyP)s38QmRML&q)}-K@jVb$Kw_PO?JTDmC~Cyg(K}7A$pjm8c-?4=nLVt+qz! zzHlqdT~egqXP4=Bs{U@(n1iz%Kn%*R7a@D_a~-|=se6bf@Q3d{3cp!XuyWQA+}yDY zKPp>yFL)Li0ucQGD(PHA2Uk;=wU{p%A`1>yAU7Q$(gBY}rbV&=vR=iv?lK#Knk4LEMLX;~{{(0X8(v$9R z^35(l+e`&OA<1%=SF*hSJ(H0Pb z276fzxXD?EToQnCBaiR7hvK9R+q4_LlSX3G;*of8gurxxPSo?B_~D$VxD|Fm#Xc|z zJWa625szUA9@Pb|J=@?^^mN(%@Wk_E7i?WV27c2gAoAEL1YY_=6fs#uOEnQZs;ybS zi72UF9wsF9IYpS)i)Suy`Lvc+NAYv&bW=drZbe#_C4Y@vQXGe0!=bBB!S>))I2^c! z(NSlF$}^?+qA3wTf3H+5-g+56aksuD@XsJOphPwVzyk$%?Y5YW$fTB+i@PLMmU{dw z*A%GzYYE`xqXeAZAB_feYoe}pUzj*Z0lqhYm)lOj4AL(d=Ap+?w~HvGIGN1^6`r7a zsdTwYXwZEqbmpuTSprda;E?>LYhagNhMZw2Npvp2Pk`_}D}g_B-8T459FE;~ayY#{Sdt3Ew>l9 zKsRmLRQ2@teD8Dq-X{U@*5Ci#K8jHT%uud&Q%Q3*uRD>Q!o^f$k7=niwF(2go(xJ%daLtPaGjYpR%4VD6nHWd+_615l>l}IPxDG zka(Nhg)8Qw2B10F69zDE<^AD@A94kL?i$Rr!aJ6%j#^Q^3gh(O5$!5+ovnx1N((*h za{#|80l4Rm0Mf@*FGh)yC7;s6?wHM=!%W*<-YIauRGD(Gsx)kiMuub1ZiExGr-h^2 ztX1eTBN}anSfh#Aco=&g5c>t*mI~zY+&on`=Eie`?}>%q~K?E0zma#imY4wVH!|RmB%hA_EB}$e`EnU8HV%bX7&y^}$ z{?7`v8$!#{U2F}`O&!3TgV&`3pTw*1n`4QM3r6D69%p=Y&? z+T8H1*}aA4%B{e!b2Gt+_eXHGVCmAOmEeC)W}@~nTm_x|w`+wv%2%jBC#kAo|J^1bO=+ zYRVvdy2TD(AM(PNyFKt^2iZ0ce92(n>V+qpz3{~*Pdwg8Mz>#VCL-A4DZbA{@ob-@ z2>zEO#R`g|8ekQ`eFIyqM#FE$Bt#`%hS!;g!VP+3pr|O3P8I1p9xHAZa#Z;C%CD>T zNxU!MtHuPl2xwq*s%Q`PK5^|kw}a>Ak67kjdb;1LtlldeV>-h?ZqlTQNK?LT+AmLj zQmOUl+JWI}AInt`0{G?gSWFz&6BRTxv+nlG&g1}`XyggYZ6#i^Xuhe|yaPYU5&8I2 z**yp?Q?Uv<&-E3v2D0o8$V3Qy;?3NDRY?EHgiG+9JR0k*ERov*s^dO z-A=$>>#2zISbz(`Hn_XS4PR^^BG^DAut6dNCIvwR+a*Qt6}blA#mn)5GewaEyztc%s56Y^=trLjCc zC;IGX2((!azcGX0GprZ9hxUZm$N{7X24gLOWYx662p>NHL1PDCh2$VCaw2l8X``rQ`3iR0kpDR8^ z>$q1c+K+L8TFKJ<{#jh7ar5lnC%#HQp0gG?UF+AcR|P+}4)ayl9E^v_&79;#xQrVVjL+`L2A z5lnt?^qD&d-+dgx!4U{pyg&@r2p-c9tEUdc?nNVU!gf54E+2~xGln9FzP`$GB+mLR z#UmyFr74L(Rs$Rx_~tmd1j+A#1eD;GYZN#JA?$1>C<36j$l`V6w63TI^iVdIr9f}VR#dL9sq81oE;8SYjO$Iru+z(zFK4?n*2&39 zlsc=WFZ5(pT0!k&yYfo_e~|wl>bd}BE7wH#1)HVRpKUHrf0yjXfMqwBgQxRUsMApC z|Ch?gpE|#6rE1V~TrYfoY1V*zO87~ghoXGcTdE!J5uWmfYr;h_i;vzyzy%_LYtImU z{sAJ6oIyy`Is{l*!EgL9gpBEnO*4n$xXn0025Y7dMlhY8#~f$j!CH68B~T@S%`yq> zk>djIf&^4Rp9c0bp6N9UsZw@AX{<*0Ya%|ukL8>f?j5v4#N>fezreL82)yt(tw`v7 zpYm^zcbF7R=GTp1KT-bcDwlh^rNF>?A8NG~v7_(gKL6~lX=MK}sEv({vs?_q!#%hR zx@5_cs_VVn$f~M+j8{R1eJq+b9OY^?mHdBY^xs;xoKAmtl}W%+xv9QO0!w$fKie>$ zf9f>OL+jeC6w_r`eF%Bzu2L>4`UALxG#+}^o1h4d&lC@kZn;s0$7p$@tb3X z=nkj?UkUnC63D+xlYOaIimk zsmgv%6?(}5X0`tm0sML|4&#PcpmLK=(&{gJdFzk0s;Q7c7N>u1(tqsxcb@Bw(&a@@ zbz}kBDUC~%D*db0ba(U!NfoC(PZknILR=U`3dY3t1iD(TK>cn5P^-NG%mR-|t*BXK z2H5(qPQ`@n7hxZN2Z84v6A?T|^yR0Bh`)}In2qqCKL`G!`(x$g0a#C}Ae2a8zs)o} z+~6){2{vS{1Q?V8bjs{NL4ki-I?=yNk_wa<;2e7pH4D4w_sS_uRpV@hsAJfdp1OQ; z)ETSj?+A2qroZzsk>8hM!f~!uKqgQNU`MIQ_{dB^S8eT80zODS>3w9-D;s^BPNuho zbBdW>S5~GqGP(}t@bfr`6Ym# zKRbcJJq=K`g--gw&o>A_Hk7xPfEw+)DjO=A7T`~9NcLG{lTlE3 zr;45dgC+aWb=pd_8|sWEMiWuJSyz;)P?du@ubL=EXE}yCD|NyPK89^PizUZyA@ICR z1XrIUGUX0J*X@G;qWMA*aICg-$Xxid3fP}00)ku_*?&!H zo=SD!0Jf?r<1h^NVEKgiR{^|xrjy?Bq)NBxNvSp5C0P`ERc_FR-#5?5CKLE`+P+&! zuG$me_Vo13Fr#4Q%9Ub2fC~7(BpatzR0ex~C;}Kn1W>J|o=gA?^h5%@s>uYPvIHc< z4uI&lr2WEUsMMq>7giK>kpjN~R#mLi4DCm{KtroHDw6wBx_sroN|Y?gx!XHr z+sTfVty1Haj#Z4@pp>5H=G}SXHZ8ZE{DyllY{MBWJaQ8O=N}OfJR^UZh~U&`qzE>M ze7eu@-b4m{anfhL02ikP-yi`wJ0Mbor_zIQ`2zkCxk7QL1ZDwx8SIZ$U6Cy83-Nfo z=>K@(=?*S<^1_4d&R8*R2m(F45zR|X)0T}U<*HeSK`u^le|cDopDf{hWsoalF`k)P zd9wq&N_Quhd2=yZi{5j<<>2&MULjND;=M7J><aPR>JlS&jmPvp~fysfJbG%RHs_tHSvUXnVi6(=G zqe{zGTvl155dK_~5+zE0U$TrkzmV6-T*!uyX_M7elh!qT$?eB=v`wMWO@Vsdd!ez# z2(%nJ6K%#Wfz}LHbhCs6(qp#~eDSg99bh7e zh`Wp+Z-4lXm)wCf!He-^y9d79sshN3a;*T7!1Du=Y-d1cO9Hao7s0(VveZwMPJAKr zcS@(dIO$bEzy3|*0HsvB;Dv|lJaBiFD{e(Q;zpz$ZpAp@{zez!q8xLzgx|FBh)ldD zQ~;Mq_gazs)`~n4p;wK&xTt{JIivrcCg(GQ-7Zsmx0oj>xpG}+trGq|5&A!JH(&Ey zyeGKvCrJr#&g*k!ANMe5Yip|lpCkQi$l9y@o34DP0Usv7X3kiYtJN5WR(t7%Vz84E zuqInB-!cjCDsV^oo_nIyb(huYpGELT$36nhMvOy;IS#1Ss>2_JQe8#pr+@9_R8WU3 z?!km`pX@wW49fSrMs}C%3l2h-C|T-{QspZArOso)>o-H~js|F~7=?BdZJ}em0w%r( zh!hgiNMYor^RQ32gK#k#{5hiNHhgy+0+udD(AfSsXg>}2Hag?!cCU1oK&}&D|C~?o zY%>EYr#?sYx#@^~d?EFBd8R3hoPaMtzsXB{@6JjmoC{cr!*(;UdEPiW=}GEO7=*C# z0})2IE2a;}0lTS4^qq^KaRU*$aSsu|R|vfD2!q$1&OR+DpZ=`=#HsF_1-LVVJo8Kk z)l5>_T#00H>KiUUfR?@IqFmLwN_oCOmi4*0CdiR|-re{QZvnEjv=oC)RKWkOoa3*h z_HVoLod$fIh;@OsP_I-S-Dac)G2}FU1G-5KXarvQfbN1b6$() zBgYf??O+~$9Chg=riZ$}kcupLhCt11zE?#}S`^8*73DWk4f$)FBj$~=136kuM1X3| zv{AKDd#G2gg;Hh9i$GC!y-8pCCo>g^#b4`YNj84SBywDp&q& zl`~HJEynI;QxG|I1boJiKp^?}k<&+G&AiFjwqy$SSWUv-rQ@)5{z&*w9FD;8gWx~1 zH-h~F#XuAe26C}fwr)U_JeSW`KKUJUnAMO|3Rww!KJlGXh1};7^ePS8fykW$cw6Py zD7P06==?-k#YcYrw~ZS&&b%u8Q&}bcJFkLt0iN0yh3eI+qTNVGdO`TKk0s!%m&Q-kNm4ffK`J+Atzzvx(h8wPebd;^I#TonEdWjXf<-4GKbssgFaa$N~p^U z;#bZT7~3C(vBPobE!u`olY^nzZz1Y->V--gEqIEtAcP9F8$d&+r<`~@L+QSK;X6cuASXveU*$Le?-;!Fb^_pf3tsHPCF6E^1U;z( z&eX8fH?-Q1w!`dEy?GauEM1m^wx`HO^Hq>i;3t>% zqEp-EsINDiWF4LKb|>i6CtEHXe{4@A;1Wj!Knfs)NFY2(PVq1ya4&um6hUNuNicCg zgw_)mpyk+UF!J4*Hiuu=ZY2RqG+Wqzz^AG$*%mta|E{kySj-s^W6k(9a*|VtTn*`z zB)+FJcb#ZKZb;8fwWgh+UZobwkXowJq%GR?oq!3RE8%(gA|lQ|Mbz;t2()uRz?lBn zvwRBfu5}S$eY`0>9w7P#lF|!wl)gTv^fH|KD$#rn-hH{vOMLzQMppv84dUJBVDtPj z2pQW?lr#H`8UVkEbh2~p!u&Z1v|0v#TYCh$dLYOr2*H672nq;8kbfwGyaN#A;e{Y) z7X-Puh|yuu*PjX#m4Vq2K(wUn44rnM)quq?T7H-mBRyBP$ytM4HL&L-&2lhxOn~mZ z4QSbC9(ei_y$*lL0G^hQ_)vYaqnS>6)q4J9vi@pCd635k4+1`r0)aEf4nW2Ft?5m_ zk6ttayv;EJKihF405Ur=r&ySKCqNNMBoNF*Al)hg62#ZdJriK+ehlrW+mZC206mwr zDiL;RB2e|#A|R6_OY`@6vHV|5_IcS#HPC{5O%wh*m8Y0(7C|Y8#H#7T5KPjY!R|MA76P4I5fZ)@VcSn2{OAQl zB;G>gse6bz_ZSgp9}zJ+w=zi}0`9eCerPgJT>6`dye(hEqZy{(b}WaH22 zg*0B@<~T?*+>=k2UKSD>4m z&*dVKa`I`?PL`BBSmYKD7U4H-m+6sGggW!AL+fnhtMWAClgv@65>iCkRDbDiXiW@2 zQwvMfr8jrO4upKN8;nu9TCf>lh9s|r5(y~d0lU(x_Ba~EZeJ?8%nw1SaurCrtKY5C zpxxuT9eRoyj21oS2y3pGfhHysq0zYyDW^^%omZk{NnX))gDgZ%8rD&+5MFyeOrFTu zATBRAma75(TUUVwf;@=Fv&;Ko*tI=0y7s3xI)UBpC;{RKfuD^(CbK0I!$Qa$kEff{ z3E>`eTNH(+!^WWFTxTf4(DjR=R8OTz~Tm8jE2onMY2T*dl0{T_iWWYxe;6pEcAwcbP@-D1S+{Uc^*TiICKHW!cIfr2z z&xkq)j`(v+Fc$#vyg&=pJb$Rl@|Dah+@pAIe*!eRiHbVTu9&JxLtS^PNi+B!$gjs; z`E@v;Ce762B^?@t{MN4{rwMESC#3$nAb{WQ$KlsIv6we;2ufF~3EjD?NX`++tq&9U zRg6DpQm`SjJtC0=-_P*`^p5UBL*ze;%C3WQB)^~+pYqSj z*QkdYn%z*Xi56LP)+>%08ZUf6; zQVOOv@#s2jHL5l5jtc5!uxywGK3n4=PI;F1&k6XSZ*ak3_t^-VHW-U~8(@5QEsQkO z!@?Q!;Tp0D-n-Ah_t;JN$A5~Tq|XqNau1Bdu@ z`BYan=9HE*FOAfsNlx`-C00hQ_$s@_w(;pjPT5*w4we%kC@o_=!Q3td1`GE=L#sc^lu^gDUV8X+wG(cv zut(_Z;V{!`fvOeDp#n+d+AVcaOH+@0YeO{Y+7nH?n4@t=Jv46D6^+|=M$`6P&{A6u zt#wV%tgA5^b~8sKqXB5rV+@-0os8C_mZ1Gq7j&BA3mxl~FmT-p6aNEZ=3meQ`^wj*rN zd4?xijG79=Wn1YD%s@X#fX{412-b(h_f72%p~F-MA^mlhMvI_ePOZWG2Gp9#Cx?js z7FJ%C(~4g;HJ=1?R{}AQGv}R!wsBHTgN3zV-?3zZslKvUD{(3!CgCN{BR_w5La- z<9I)@q=k1iG%=lwdff(zAY@fiJQeG<5XCbhWm&EwxI(gYg-Q@bPW76hM(ZwUVAvlm z23v~fUe9qYOal*!(cnr_5Sbb})peFd)6c1jW){;$j6($SoaOCHDg|In06bAxUiLDl z7=a&gC7{#7iKyO67p6`JVQjw}nqy|5<1{CF;}Y1d4-inutW=CYXJW8Bg06EzM9{C( zEO$C7juQbSphrYf4g`=Q-hgE)iMnjN!uZ=O)MCY{=FEYnt}~;gS_V70enFYaTps(T zS;tDGzy!hSz)scV>POqRkwQZ5NI|H9Wa!V^h1LV?(QcRrbY^aV@v@`jZjsxdx@lQn zzm~RiRhgcYV-3oz1jigWGhswztiNQZNUv#6i$MEPZfHH&3XP4%aE}B(&%errFwcp2 zU-GG4xnT=Y9^Gc#Qs^v?l(zZsscyfH$9})&b!`oFhC+YQZfP%rOR}i#7jc1zlcGA3 z%c;o);OfqP#R&We2|(-uxOEs7hT3SLKa5UKlKqZ{(Pg$Dnva+SgC*+$np;;=^|fS?3X8;~sl(3{M_b(8Ysa4N*7pc>isnytFSXgQZO zGXb2C(wJ$cTH6pS6+GF=MNVQlX?(gl%I3fgQt|07gm5F`b3qDOkb{j(1O#?rcJk~6 zTU8e#li4O^y%sIQ&P2J6L6C(^5^kxY0jFM^3_LG;x)P}%hO`u=CkHEiAy0u{fI6%_h9?gc2gWi%g z^roYe%>5WCfcUp4fK;)mwv>ALS8CF@@4~z^)Jl{%+}Lmwxh6-X+6C)O=}fL^ustpn zJ26Q(Nd->k?(tHMgKwfJcjlS~bKZIA8ZQ+`Ib|Y*EJ;B&>vt4qcq87BMKDse;?5-n zohApNw0cDbs!OKls-&DJ=kzHL*x15R`;w*0{LKL7KpDT~(e&|7HK}v+0I7i&H8u6o zd2$FnFZ9}m^Xc!Qd<_>CqwixTfYaO1ypaYpy7ZzqIm`O}0^GU_B1r{IK)1P};&U@= zA_6{Ht@jDnp!>oY0e&q@7Xk)X(;X%SKm-s%EW zPL9=_EK|P9tCoG|qWiM7q!?Q8&rB#l5l`_|6kLFBZypl){~E3J>CHmmw&N3?fNrw~ z9j4eqbIeQv(l+{hpF{$5Yhtq-Z6+)f^51CrR*3+d4ng5XEbp{9)PF8tqdvM#3n!Ue3{poTuq1FRs#Ttd?cHUuxer7D zz9$GQyrCx>1;8@_dyG_$cCyIFpIJ)=J(I^5CCjM)U7=Op6Vv+{GFQ809#I{YOHxoO1#%zE++|WA_rlCM zE^A^)BL_KSkrg@QS~+Av3QPh#!@(&D%`Ggs(~g6IQws1lYpNy{_gqr@ST^Pq6TsW1 z0w-X#|8kU3FOSZXJYep~vUxYXfp!Zb=rYR}Ek;g){$ef;+E2bUpZ*I(r=K|e>1$>V z`(f^S2o`~{=_|UjssdaZri}it&Ex6M#U%5{E|e}^=CArqTf=zZ6j;m&g2}SYFd-5$ zcREUTj2=Ik0~;495%?X+oau9q6Hxfas{lVKBj|HG^fIgAmVy+LGLV9B9|C1k@F7z0 z%A^)D6T=(ikSQx+n}yjVyv4ZwAyKsL^1xSlt{#tL?@@r73m&@Cuo!Xw5(3~jz||9L zP_Ir6Iz>kjh?oF&5drKZ+Xa*5+t6nG0<@d7gj|F@=)O2w>^9a51 zhl}$p<32MJl=FlOP1vEUtB(#s$Rart9D&YFlBiNJl35;$evFT zu;UZhuD*yd-UMvBgD~anggEudC9yv&z;Et)3<{rEDLX;xB-g-?$p#ghQraWSS*N=}T4PuQ?D2xttX99xBvor0k9FUW}Sz0uc7Y zr$^CW(H)f<(8+4O1?ILy0LynsMr6=^p&Srg5R8t~9q8kUFtl1nZ?L`e2HQ*W{{X$A z$^Q>a$Xfmr0cZ}NjS?lqh^O3Djg=_D%NZQVerVFV6J|I@!+-k~gc0yVcHBbn)*A@g zd>z4L{u{2rD&h>rdBs6NM8KI0Gp8dWEvX2IBk;+meq>TE*OwI@DP*k{vQP|y91mS&hG8uo(g|iw-(4HQG3bn+MNlRbcAXYVn(nn{{%tc!BH5Bg?3l`^R+fM0jjIh46!S5VDJazwJ7L zwp>HdrmG0rAlt@kf(Qb(+`yukv*_hclAi;TLGjY5|1N=FP_>Zl_-qw|P$7vl6%m+} zP8Kp@q@^&ul}7g=GxtiA%sWvG^Uzti0#%!JP{v}oQ?gYtg8st%$jHQ3bQPkElP!^-;=km|t z3PETzZh>hIVer_LijaM`5VrRdgzUUYr#}(EW(NKh$u<)KY`cMw-M0`*L}9n*28OLX z1x2_F{^$<`{=6>Kh{^>)WG0HN#&XLexs5&d!_avL%mZSj?ajO;DIyg;qfW!fV>cQY z4dh%tzc!E5^0%k4`1&^x05=5vNN&K;-iD}HuO*C^Zy?Y!0c?Sp6`3`s0k@*vL{9xp zfw2{R-)<)<1tI{~{jdl;L2tr@H%@;hfYzfI^3)fW{>$Zu+FlMqwNT4`83RYEdA0Ms zGG*0Y)M?lZI_85gafu(CSHvQC=XHe2L=e2?DuTCPC-C1y*x@^fIQan4=f8ko>H|#N zb`d>eiXiw4x@{-wO;aTdF|;G-7;1MiM!6aqsL`ey>KpV&^L|s%YQzGx9<>OXL+7BO z$q;2lCfi=M;;y~_C;`aXfEe#3D9diZ6b~rucgh5?iEJ~Gz*ZP6ihDA=Tc?M zp@D8+)M}&45|qh+M>zE^S-NaaTVE>5*#j;;O)XcU(qB4egJ2!97vab5ATm`3KY?C3 z1&3$c@u15^M{f!eu=ux2DF4fF?ahbK%KL zwKoe-c!J9*4Q&OC9k!vaR?>aNmB_rfvE4_?%3)7%jyFkZl~`z#31nO{L?g1HbX&H8lmV#& zr=76yKSJ_9odEcR>~6P8%+Qy8PxkXu)TEhkp=5K_q)IYQ1qM`U(DJq6($!FqD`D=u z8y!YjLA`Pfb_tfL{AnG@j+QB_{<@o4e=PD{kAU6h5fOU_F=rnmhJk-2XYi|%0ME%A zuqHKE?f_RWYA^7Idd=EsI%o`9jG2PgljlOub!`U4Q}jt7m0p*Xs8ClF0i9EmmZKD3 z#RTwX9N<>MdNizC6OHr-!ki?!*>Wa;wJ=+4mf#c-B-mT_}aik_Vqd`Q<9VviKFn47F;PPKi0meZQ zavY7#hKZA($581nT_Iuw=1x0cYPT7NOIM-mbT72(XNejuI`IlF-URb=#aazvurL}5 zyX`Qy+a}1MiP2F0IUC7tH)_!aOMKQLV&4^n?Y)e!16L720FF9Gvj5T-Qot_{;8(^3 zc=KT-U( z?81!Nd=3+KT*UM}SH!emUgk0Tz%|S}bRBaJUdJr@c>3Nem`L{-N%vK*{pO#?i&0CK zF2k;tM~M<8OBN&NKS}^U-aUqOA+`v1orkY(>=(sAzdeY>@AqOcYuo^oty%{Liy{c@ zoCQ!40NJv&f)vc1w?pB3P$GfAqi8#7G0&pol}w3bPx;jEz95X`{Vtf>bJk!hxfI)= za3n&Y|KDkx9qP30E@B1EjE9rb*htD^3lyXTbY};kTB~-i>U1;0faQ^J+HeYiJI*0| z-z7wxxP_=Q4-j?niwx2J{E)!R{a4dn0U7j)$T*k=AB3^rZkPt{7Xi(V(_K-46pY^D z6|e}36IqXL)*)y!bs@|{j}~fRP&u)eKjxq%@9JZKJ0^W5Vi*Az9wF??6Y==7a&d%R zPtSnxeSOb9#IobJF?!2+^omMA1JfZ)us^9uTXTx9{~7`CsegQH04i6ifD&|Kj~ZZx zTZ!xOlH&m6286oI6SMofP4}Rad6P^4t0W_z-F!Kz0Q$PQ%T6df_CkA_8`P`RR1S!! zFTb(wkdKe9(>w{(Tur!1A`UiE5DFp$Q&JP{hb%z##%+SUE!K_L}tCnE$WMCgDP)+4A*72%DfkD+uid&V~uO8U~BP zMZbae3}-0&c(@-h}eP(RYg1?B9}u#im!hQ0dTr+&cs0^^J~LkSu{G1 zwIYez7&WR^g7dd zo;Sd7gUJfA_3RQgEo$3kWg;A2CSSlNRY|e27A_Fs07VRf3Lc0m`VY+;+ za6d%Akraf&L#jF8lb28IK_ri@<31H9WK5m_@C;E`pTP0(Y4o!9B%gQ^I$O?zj%^4` zgAPd93_8)3#-p>@9q7Es6D`L~ht>>7n7Zu}%};L|eU=mOd#*T%;hWB4$+27TCYL5s z?C2|ez-Mdp`+7{Ctt=AC^KcK}_*)sQ`1*(l;Fr&jV`M)QRM2P!6WcZ9r*DP+f?#NL zHbv<&WznU5%h%N^m498oi-JyHlI&Ki(g|Q05y0{_Fs0l2+U8QauSAL0rOK$kDpR2{ zr}0p}dL0nxQMrC|RBPM@)tj^f16L=W(E9lhYH@$n@B@FcnMcZ*xpfhVBrmx%vpOo8} zvioulCwa1*<=6x5#op*N&kd$N`?8;Wlq2wy#d`Q+UolMYf@N8&Lw1>`2FX+t; zgu%j4p$?3f#gL!BN|1%g;%FGn3x&ZfKNv3vOLr+`x58}MYIK;m2-@WTONwBfa5Kyu zwm{*zS7aM9R~#yhciyqToE4B5{O++AF*$ra273gf!z4@kJ<~Bhcs2Z!Zy|={_6oY6 z*QxtLif3CN5G}V969Jh9?1x$K;aqnaDu3qC4QH@C_7j9&{vt!L?wtai70dEe<` z5PmEK@V{G9s;_!WZJ5~+z^&P@Um5huE8`A0Bn!p=FV5ILaWAL*dzXomk zO$D9!sM}tT{Pt-2KO2ca){|R6L}J6h>GD$B>{YsU;M4T zehIe@`zPEwPIi($zE1X#zW#%6!tFn8w!~tLy`S6ckd11yLpK$J@M9nVX%g@O7X^&U^v} z(n;T3t1CL_njrYVc|;t&hVUa-5OLxLB9reR>g;_)Uwnkn^N%ok^EnZbe`^O`F6I8@ zotMPwZSh#%r_86nJLLR5bf3Ev4F(KB>#>udIchw#rp&|;a)Im)rU-&y(;hSeCgW!y z`1I!pO1+D~l+WOQ@(vu2U5E9dtFSt71&j7w#=^aqFlX0ASnj-tezqZ~*P``{5+zFX zDqFsS8h~ODek=sQ3cy6SgP00qX2U)`12#f3D*`CF0`)o>kqT%)1VD1#b~T;y>!8cZ zfPDK(bsMAmEN|g9Ffm9VC-PVlnTt!cyiyU~G3LyV~PRLq1>1trida#XNO}ppi=!7Fj-C@WLp|8*)jqwkwX2>Ca6@W5sZlx6pkC9KR*Cf8@G~T18sF+xP-p$ zuwGIO%NWQJZ?Wu&!EA8^OcsWuD+E>)28E4^5T z{QSs^57A@73{lqmo8r zm{`Za*eVjWT4{@ovvoQdqD;jqs9diZw8ktUcY%F<*@ajVF40c z;@DM0pZOe)qyqY^IGM)?f0A%PmL9(?r6!9A_?2$Zk{!p>NPt}f2D&$AKcY87d-@zf z1P+H!OM$}cPer_9(7ID;0ZazJvF{$#?PjhF8cr@o-N#x8MCQJ13QAY33O(|>6*e&v z_?Zlt0IWE_uZ5bLonS;CYmhros;oNNj9LH%0kZRKPf`!fM73bc9-}2ULXbeD4EnH4 zmWdRWWF`m|LRcClxfKo@pzzrTi_jA!{}b}nc*AKzK>~8sAd^5q;&qq|pMaWm>tot7 zPa=U+f&fByrXqabSwtq>M8w(qn7sXbo>Ty*_PCIzsDM5z5?H$P1lo?DiZMYego~uC zF7!;iius!lBILsTv|=Hz)A!MD%_(VhIQ@M(wkuGrl{R;3a=5?G=j8L(sMk=foq?jb z4&b9BfJgDz5@wGw>gwn`ZYdPDD`W*g1VDf{S{Nw&|GFLZQNN2BH;-GsVbOi{8-Su`~s1XFe+tmRn3;?OKig%FlxA_G+ufyh-bciIRGf7$=%=zl)_ zaV7zdz_SuqL2vezH=ZN>?B^J5<%%Y)+hhDZdjxM!Ld2fah}g%jz-3Ya_uv%w3Hs!w zV~~`>v^|#*bn$VKI`y+70n1f8&~Cys*dIzwll#gPVS3Eu8LW?AhmK7Yw5Hml>r@+b z8#ErhCe8h1e#Ev#VduWk@=v-`)i3dr;)0-$vJ&u794;SS0gc+#(SlBJg&q6x5&#@f zCgKbcLS;y|q!^Y)rUxMTa}Gk6ENZpag7Mht80X-JWl`JVw>t$rPa$ri(LdJfo0(`=tI-u3W6AvD#2z&Mq~GZzs|R|box82 zgTj3qEP{{b!~ai~nsey?a93YiCg+->Fp=*?Y9YR4Kz^Q~aK zz#3+YY%$g=9HGgdAcjC~ODdpO7VW+ae)f+Y5 zZhyaj0!yY36IFi(^L+?>k%9nB7YCwdiw@#cZ)q_CW)7=h;k^SEtN%TpP#D8X zz{q_IDm7@1%JrJUklY9JCX^) z{vN{4-zS&g9>UMuMQF;W2u}F~Q5PQ}`sx#eUitzfHl5873FnXbYaXZWz2CfkA={{c z7@-1K5oA97`ETQNYEA=5m=Ff7NyW77=V5>38hqkz{Y6BONT451R=$`7iWmXBcpQ(U zJ)s!V*BE7SkaSI!_L&|A=BGW6Mo&P%+ZIo=Y@MvSEse>Q#Y1p|+bFb_MHHm^`R z&5|+q;B~11hg*sX?9o@gknM@|`8BD@h?{j(!Oz1ud_~#uvv=&Tr*{OVwF1kZM`if_ zvpn|`@c;2Xc>@LutVj)<5`6*DDl-IT?Z1|*xrr9CF1I+cbP^Y6l0hLZ|EArQu(h0tVY+0}%1oP!| zirdAIBqyJo zSP@iAv#=9sCcYmTpB{5~V^r5k@jdh4!|3i9gLan7ME`!vansRhkvsGm^x?F)h18}Lc z)rs4fy8E)|Dey?WCr)c7B>(ddMRSp|JMwJ=#owPCwGrb&R;S&UZ{6r;_FbKluNsJc zLR!lCEQrM-W0UN`DuV z504nLh%VR|GmaB1J8*^7z@J0}8|k)rF$sJ?0^q3sz0+IJypaa#=_t@`h7-!wsEbxj z>tiz!Krf>%XftpMNq3IM69Fvph514sx+PoeCy{_nIQi>qNUrZi50=!KT!Ef3NicNT zfO6Gpqd`|QQVr1(0c21QvDu#L>5Vo?Ir#j^VmeRb0YlMhES>hV>|p4)5(@6jQ^pGN z5HRF7ItROgIfa)4a5*RLb0&Y_SN(F(IHOkf0fJUuq7}lfv>*ihbUzu8w?6)HM zzL*GLkvEZmY)k^nf&@V*+%^!H54`CL@Eec5R#)2uRq8i|3A+zAJX0_d3dhyt*YC-a zIPx^!nojo4^L$XTUPE-AY6lDVtz=uI_yo`EkBG~jU~(|_c_VX}EF6=^MjmCWZ^YFn z@FSOjs{^@ZnM-Sx0Lw4X^FCitQVTp^kktkENd%mi0)HzB^w#?l;d&u z3}ZK)fz#3JOak8!=xxcWXE$4*_D-G2fs$Zxi=kA&`YJ5+Dh z24%~XepS9w?umTpoyU-)FfGU7Y*E$O2Nxd{N>JM{L7Ye7fDkN}JCYjuq4~qcSYGpj& zS>9*tU6%%oa$t@FbYk&{Ea!{jq7bFKz-nahy3<0gTfF1n$G?l~2OK$N7=PfbfhE2Y0q`x80~3fR`Sl^}d&gw}nz6?=0nSD`3Mr<*E`=4l58<-= za8Pz1@~HyEWS&H{pJ0Wum8z1WnIsW_(;6sTHwsrns1yDjf@pH521JUFd}ao6OfIMF zas{9(kp|D_=Mywd+J8h#MBn#g9kBK^Mz1@GnJf0gYW-n2?n>Stb>*wF#RTw<2_VvA z0ZQ?_zln=sVaS91xf`NxLAV47xgr840bZ<;Q|gTUdLH7*em(cgbFl40%ln+C z7bWF6I9lkd$>fSc&fsV-3_zW(<|tpaCTeIjNa@EiJyCHyBK>#7n zvqkrw&U9-6V}Jzwg|3ncD6r{k-Ktk}JV#!iHP{*L5mE#KZ!z!RGlOztsBB5Nbkwk{jcX3QegY}-w^hicN!NH4Pb+C2uUX?8VG z^FDFC7{u?A0Q~J|pmh0)=x%9Cp!AnOPe3OyL%^7&)HQ z!4eqL_Y`&{=Q)t*y@d!s^)ycp1ePvW9y(L4MVx_M4dHGO87Lg0B;qIp6(9r}@O47v-M*XCgbmGM{~W27ZwRz3TJA zfRBii3adhoOG=1Suo3b3%97-z`AW}e9a;{yMC-xR(PpS6>T2neOIVjjk6$3$pe8Md zZQb6ycq!3)B>-RB>4JTAr!R-aaypS0k&nN?NySu%fYgCd1FRIR1EEJ>Z#!`onhqO{ zmLn%XdzLj!hy*OWx5^42US&P_NoddY7AwCxj+g-pn-Jk*2$zH02%#Qa*A`p_WKsgH z$PG}hQUf(xc0}iKi^%;5BO+J<3ujUV?i)n_Qe+|c@kZoaX~+R9`-D62Jau0HUn%p8 zyiYGq{sgJYGVl--Uc9+!htyZWCD=S%MOlm${cecBf_}e=-(LE?n=sUSJ;r;+V7l+B zZ>%>S+v;`v>VQ4pqe@@PC29^kPpS=H>Q)^6e?J5e3lFO)D49k81jI$IP!RAH3mk=| z5y3)dK@NfdtVy=p6VP2&!Q5j5^yuTZQx^&%&>TG(T}dsN2kp;L703!e&wiDd8l>5C zxD;??0ub>AFUf^)h%6ixph5yY>5ZpJr%uVzWnQaSu7+Bg9np5cMCi|ThnXF@D;$9I z-i96ld&TeVsj39B__>_E`zTI)RbxWqlRx-~=%!R~gO$S?sR@glu80ss|3%n|90{;6 zlz?c%Ccl61`ZJie<09-1UxRnt&6j=&w=Vd_-)}_-^L8oYU^8edRnJ9tr&1 zlqFiQqouZMA_IjR7f$UL_j~6qfl9*=ry9p?J|iX!d&b^;MI>;BKtEWu4xpF>-eDFX z$Z-}CfI7NOSxf{#AY9}ugWg`n93)~`>IsEy5G*`5NRfVJZe5%j(y6H+-(Q!AfV=LP z2-?qFE*5Mu0VqO_pt@!!)Ymo?U{50eHg+$T`%5aoZ>JPPh>9=xn@~(DN<=41XH;p_ z5}n5{g28-GbR0Do&3cSL{q8+P8FT}KzG&We0<`FUrab51-$DQkWS0IxB>i1CN#N&J zY@YJO#xokYP1|mj=+2aCCXT14O5aDyQQqb>a>HpcZkz!B8xcW3<~ahz*E=A9D9;6= z*r)5n1u_9R$)LB(NC1n80IW#IyJWMN&cgUBa8 zf(CTrYINvE1P}^{U@Pf?Rw}k zX_+W{?%}hYh-|+c1CZo@&*;Q=<_CYc)Bl)gyiz!Bc0m z*jW&Oh3iTJ4Nn4+(|j@6H|U50ApbpRKg(LEfev$Q(X{7CXmr#ipa)5cVxfzOIhZS5 zjOBhLQzIpk$rMN|Xb_B>gPQgnjS96i&|%~(Dd^}&zlRAxWCJqQ2gD?O+~601zZ0V6 zTH(s;*Q3R77YY0UvIWxTff6aOGO$}Al!8Uz0VyUBmGD8xaKh%ZaO3vjgj?t3m1D&u z@Gb~o-zrzA69IG>GEpV~M;Z7wDrP4UgOwL4fGG0)cc)AAw}FJD9mfH9wKlKXuGzU8 z>UPi}SAtIZWnOa3!AUaVW_XG3S$J+l4~{QH#ukngjZRD>0S*d^l40Y1FtiGiT#gV) z1qc#I3j}`51Rw|g$nCQ5+5vO>6;l5N&tzESpUGq*SQ0EL0sECucx)wQbU3|7;{!Yw zqc@&`^Reqp0@n%n9g9hz(3^qc5Wme270aumb)Vs|u*r@9=<|i-1}vo$+KvF@vn3zk zOoG1a8Z_!X2$kwJg6<3(A{_Gh7rW8Vc9Pr-zFp!bsQ~8~S!o=9i_*wD3Gk`dWu7;x zYigmAMk6#a>IdyNNNfGqu4L2+*e7eJX?v)``-zh4%{jb20q z|8MV0prSm}bX$!(ii!)kqJX#}A|U%#g_>wg+!X|5FQBTRpo)E!MMO|UK#eg*vzTaN z)WqEwv)-h;lk}E!ced{7PS4D_cjk7_^mfmg>3;6}e&1h3QGmFxnCbGI_pqoX!v8$q z^KQ?VdqAvfi|I+T&%*$x0@j5>t_uhfxbf2u2>A2uB+!QhAY6biw~KXPx5%{$0hB19 zHz|=XgKGku2AC*MuV^Q5p1qGk-7N%^9fiZpxtKK96Cql9y}TNw?x1uWxCqJ0py+@k zn&z&11$`lnxjh(Oe@5&MxU5uR@={-V8v(a<+u^<`0ZY<~pyJc-yDa^iE{ItN>FTs! zF?6X{d>!gL-nYbFnGP765mC?zKYa}%YG3H^YZ#=Rgsmsv!|toXP3Wq1o6!F2K?&fS zYxw2c&tmS3shHs#LMJkTJBNYDpf}nCeNJCYDxi`i`d*UgT&R1k?q>(A3f_02jQSFB@j@2QH$)Zl6>r>fZRjv`5q=KVZxxdl{(UBiy#4UcD2I1i zfiQlRehq`062-sp0cxd*NV9S+xt#sW4)!1N;(mpfc7dsfW^eFxMMO4w8g@`R?lt_uL)m zOa!5OPGf#tx^NGU9^^%t`%ZCKEm8Wy#my*ETNWP&2DrYqhp_T@AOZ-_*^5OxH3-PA zMQG_!B@MVfxQjz<(DL#}yfXY30{&KeD$oZ6z{5bl|Li-rW1#Wr$QkBdTm`{ z=XyhvQVeXr*>B4#LDi>(dvGYX1rOi;ZWjIMd!%Z5jq?5z!e=4UXa+xny!sBI5J7ew zB1i>zC1|lCtq==$rX#$hUCc^YtlkEZ6wSt>RnlGfxZO4AK?#6TfWLlo6_tiKal>yw zssXCJa)kg4O5|9*uLP?BGYRC^Kvhm8(D35jD*;gpxCz%)+c45$JOb16>EErCz&95j zx!#b+sm6XuFbCi0o0)(ff=~V>8AaW^{;lsw(T~8t{{ktdQ_`4){T6uJGP^tQ@9v%m zNb*Mz2?S{?;gf0-1Q014n_hlk$ELmvP6Y_`|4FghP5=)`0K5=%(mV{bEfFdcoy2;R z75KXgGYRA?Bv4HxaPS^TK&An_9?VmSzVTU58Mz%;XjN~Z_YFiw1@-h$AEz|nLcgT} zd{=;Hd?x(MjwsgQR`r30c{0!z{I$;$VIGp(n&w3-^Qd)~*liPv5+KFEwr@)lvLpeJ z0^kikwb{3EkkbHG0qc&vEe%C){`4Gyf25rR?wbJQEWn$m8{jZz6g;9Ihbo_dn9Zj! z13jBUuSB+0C`6#ml_Zc`(m?`y?}h{<0W68n7j8t$ccdx=P+(PbG|7S^*BZ)Op>BGm zf6@Sw|6z^iNdBiFWY1|S|3zW&hAe!Ep`aTN9|>5u`xyLnFNi$~0sh=NxnN~BcIh!} zNugT$Jm&2c_HT~ zS}X8Z^b*|=0vo^N)ni$r4hx7BBiZJSU7l)r_{%(#G59KAEvbM~sREuR@DH_gWM{M!ud%1NxW%D97dAe<+Uxi&K^I-TmhXSf}7m@;JEiY30Gc zIrudJvpO-${yLKVC5PlDC2v;>LznWNLvJ135CU7gQeXOri-Er*;4iilzxtkeXoTX?rR2!Oyecl8d8951Ec~hc zY!ClD-*{+Lz@`)LqFN3I71;^kehEM+1fFQj!|)N5k8e*TInH1-D8SE>ZyESR3MxJ4 z{RT-8+U(9Mfj>5rKt7Q`MGMsXc#_OUI`Rol%D~w-5@RP%MJTubSUu=+JJ%Y7vY@oU zSOHb(etIoBp<6EX`3b~!ReX=2cTTk=82Xw+=tQ07wer8l&zb+zRf!Aqjmr>cFHQX`V*Y~o_5wpywx?QG=I>3w#1vW{-ZK(T%cqjX>arA0y7a!g+q zfB;P?RBYDL^zf(v_7E^$_?Xjx_pQAH?7!}b0AwBD<4bLDo-z^h!lR)wksN2Bn+ZUx z6MzpVK(0*7LPR#5)Hy~;1Qrs|b`S;sT~-kVbaGd9vn_h5g!Rnx>9;*81B$@O>9e}qL=kH8IL<8mgdrrYEdIM$zu7Z=NH^O$G zL`3Z=gp?f}_|wnajbH`B;BR~ts_JLx`>|inN$}XTWtXD3mni8WtnJ^V^&69bS3)LM zBN+r0(7bydzbe!93>1{RN_Fwl(06Y=+t82LNVm-!<9S!%0RZyEsDBq`?pHzS#0D}pOcP7GPYb^XV z*_gk5C+2S0ie*F!5tR3{LXadtpv_cBfIl|mLzPe9tv*5z4TJYGqT8;)ZEYNeGub3& zK$T}MI+|5PRyRaaCJKupouJp~m$6`anAzBL=IY1cxm_!W$~SjECb}=ilDItjx^E0j z4Zy0>&jm?tf$}T_4@HUT$ZV^~V5=HfQSfMXUJYCWqyBr;_z8atV82K% zGIFqo1KYywd!^&@m;SB=u(9i&vk0qyMXYE?E7#5ot2g?+2LSx!A_-zzFsvRDkGbY!S}FmZ`vgd*H2#eWDfln%KCEDm^F{rgAH!UxOH# z&hI7el@N+7ehey77(UxmF=FgE%ngi^MlkFN$&uG#3@cPXe@_R}sUKQ*299$VVa&8y zn6fMwo?9{zP)w-^6A%%=<`eIjSA{ip0=Q2C5NW_SSI}6JieaJ~5D&GnP=KG6KopU| z!X0r~7()b*OP|lp7o^~qqJi5cz8GW&0@AaH1ahTfVDM|RL>j^BK~+$t)B?^SboU92 znKB(SSFDsB2XnzOlYpO@p+u$(CIMCl{BIWTfqL)r_cRb>egB-V@sPNV>YncwIAXOv zJP_dL_2;H@^!+-4sFEhRbj4%Q`XXgj+tmHKwt0fGQ`{vnuoB3obS<|E!I_0{oIMv4 zX1XFoQy>?$SQ!YfhDzz-P}VA~;ad7z1>8nt^JPpAT*Fs~ar}+qFC)fH6kQ}A-CnF| zy((@OZg}%&$BIthv=hL65dftDfBEJrethi+=1iXg=cUW(q%W2#Alo1aU;)W~K>!A$ z_?!s(d{BmtQiB-G-MEzqAzgl+l>?pRf(V!tO!RP79z^v1Ggy{XAoBmkk8dK9DVC~% z!JeV9355t)9dIg9SOazaNueUtZP&Yh=#KD7FF_x5=sE%ZB*}T@{<#sOFl|MoX!|{U z7k1uMD*Z%mjU;uek5RteAiWoO7)oE*Gw`!)qE~XTAq1VWf=xgVr&E5$$`Fhk=ZF>C zQv@N%LZebcVBZE-1ci;F6)ERD`rj)cLKwPk#gJjcm;~OVXr}m_ueEdbi-J165LFlc z*9WaX_}#dDw|`*={=E|btAMNc(-&_*oA5Y>@*RHhDNvgTpa!D=y(baCA|`;GT&WBg zHEpv};8cKBKt($#l~?+!y5RY1v-OAVHwxb$0VwOiA6__!SuT??ajrYU^hQAfQ6%|06M$Yu zjzNMuzZ{XKGI;Gu6Lo=Q@rm@X=#(@-C)0qU-H0e}!34KOn7Yu59-?xQW~fOqsF^Ty zS|xR`4xLaG>bxSTi)#^G|16?gWC{?~at&d7&%wX&2$m+7V@~vTjGyBvfX<*FF>V4z zO`IygKWyYEcy84_oZEa#rC;4}np6@O`)UdNB>A~M!qbu3+^#Fx-FY>1iEa#CYzcss zMNX*zzvtRb7%|=vZXqf}a>^mVZ(DCDl%Ho8r;-CuHN0e%2K2w%QRLpUm=&~|f2Mz> z$Wk8j6%?0;4Ilo#i<_r2g&p|!M*va<{Q0X(Xevv?$PvRa(=QNF1n#K(Qj-4(qTr`8 z5CLR!YmiR=Jd)-mwNULo1oduqlif=aKSPj!4=Di)Q5f=|F06omMuEux9cQ`1JwlDe zkFAIIhRs;9nbL9D#hRvFJ$TR?y#0^xXb89HCVteE#4xD0Nf+i(D!LHW_tS} zg1s1WO0E1EY|;m_S3?n{0rk&YS+@1J>4~h5gjXEHlm*L}1pb}kQRPveNHL3Ih#mD0 zLI9)!xFhg?KYI<8Ik6byFc$OIZKNOeZY+%5B^3aHS)Ba2MscdE>yF6^f8)#a_60;% zwPNuu4dxOF1f*xkKT9cux}Y2j9^Xo*%tTD}3J@1`@Z140H-)k^j~a#H z^g!~*{Cf;=`q7Hhe8`ZYBA@3Ie*EnDa0ysVVAsRH;IO!XmO<>3-9+G@Ds0CV#^!bO zlDh!C1K6t88zO}WseK87<X@INmWsCax@ zj70O0m6(dm?j~~XA$lMLv1yqv(hCN^N5pDj((1g(3t?ILat&Kw&_m6^BvXdGD!HX; zA%L6xKMrkP)S|Q_NM9}7r09A05yf0P())}6WJiEW;P*rV#aY`h-f0rt9(@uEViU1I zbOA`t=aLFAQvP0fK!9G|{F)r};rx96D+u3x1RgPo1k6}Oa3PWYY(#D$rY`m-Sw00p z#(IQM9=Rep2a7kx!999CT*FrjcVd_20dV$S2^XIrdOr};{lYLi@=45lERJ4J2d}g$ z0%IG3s-6?YAyKI}*8%8ZS)5QLr2lXSMrW#pcTfrBR`dnAeMp2&C6{ zP1lnAFUQK{OpKZ^36tCxA)=H{kJ3F*6<5pPG@_)A^2$B*VAUh4Y#&q=O_W;5*N<+! zCI)k&Emi)vB?y(%m_Z)4?={R@n;;}V-$LxI-HXVUYY3@3gB3XkuqeI&vkAbH7Oud! znQo*+CJBIZFj+Xvn1_j;%SESPwrUIJJ)Q^;B8T}~w3I>^Fm-vDP#-hH)+4;>b@4Sk zIQaL8T8LP|7Gu?Vn>B1*$F?OeXc0j~YI6~omIdF$RQjH#BO*iBvtNTH%-}Z(@P}v& za9QFl)D_GAFfJ7G=A}>{c~+i~hOT~)x$M+LKfB#*+kU>^CNq2d{_#!(Pezs;#BBd? zCV>B-SYtI}jBYGWIaN)Uji|7bM8H+?Z!9_*!mR>h1j~*~CI#RlzDsQB;LK*xK>$pAL z*>_7w^hpa=$ZG!>2h0drhglIDFu`M)r~?R~(<#nr!?;=Qa9J5G$YOCqA$)S0M7uD& z@uDa!szmSqcIW(`)I$V;erEU+;{U({DV!?E^x<9#epkAJpGTb;+~(a2>q$uSmZbvz zm8qE`4O$Guik(rW(~>X zNeI(sO9C*G5~v`MHoYVjfMqzx+}FMeA43i1ZHYmEz7P}VdI-;ffUH8O3M(Y=bv!bh zCEx1lVa~~sDF&$lIXU>cc%2@1@#(?iVjoL(Wl%%}1D?A9W2d`fs!urFpGbjs)*b{^ zo+2P$>_{8TVWlQ|9xCFYlq+yuwF5&bEnsq4S$s@U0=Ik5Uq!+1yl90A@EgnI6l9k% zXsb{*F(V1U%M()IzIg{$B&LxH$dU6CmQ74u56U51f&?iH_WfI7yhpwPZfJD4zF9xHk)|=wA=gBaK>2oo~D+sQuW3V)(904Uy zBYfX^sM_AVC!qJ%CE#Kq7Z!()9f#4AU5Hrf>GM6kZU-4k@Y6$EM(GdlHt@!!7=p^` zn1al(o`N*{Fc`3WR|?!VZzlzi(Xo7$)tzFnRu1y-GWa7&Wh`2=9wWyRDLPGt_r~pX znitAtE>Ta&xr5_Vt|SR=O%^F8t!8tU0pAEz$duCnwreYIK|qQDqsC8wG8JaK9+-I_$C zQ6nWk173h%ApkvnY@pYzY_=>8^)4@OQ$BtXLA#$v7~gA8;OwaGzy079`<|{or`KJk zslk{jGela!(}rAJ>|7kQ-sQg_ilwUZCOH*J;1}DL4Bm`xhM<@Xvg9arP3HHzT@yErW@TSDz*Lbx?IX{%k!4oh1gLymltQ zJD!M>9htPs%Cto_*o0Nuz{6L;DH)i)WSQ9Sn7P~+A?aH2d0BJN+t|KoyVf2o4o|zq zkdnIbjLiE7(-1_|0j|h>iK-(|71U8W^Eea0A1T7^sP88NxOlu0qehK{*M^Of0Q4Gq zn6**`)V3=s;EI)bCZB*e;Pym<$je>41H_<^DE?XGzs80DD6ObItQdb>edsUfWR=0Q z2izH85^$Wi7(O}sJLdcOq-;7Xx)~}iY#Pkq&wwf;og$6EZXM|&R73)yX=w;e*I-FZ z9Ktgs8SrSe+?!y6&{!=`Ny4yzpH6;D^V_13DVGr=$bMpi&yO7Kni2o6PqyFaRTMWj##?x2~ulDv6>xaQ4qGuA+z%u zw(w!dlWW)|dqvlxXP4)Jz5)4$R3ZCbMidWF87mR0F~DK682dhIM}0pKz@Lc#zJBjn zc+7FZOh11~06Kb5waN5w(SwmMf+_;>%+Pg$09->?$zDG%7g_RuO-CBQ zpW`k-VFgLe(}SC5-lt=Ye?dE@dWVWh#fk1q;G0La&amvLjiwEr--tInE+A| zoSZ}?kc6-_`ZzP)q8Q9!Rt$m|v~uZ+YXl3_tHl)MxT(|NyDbK4k#fitZHs!aj!r5< zDL(S)&qcz*YN%?DDMi1_gKq|EuBot5%AS*QX)3o25jqnl&T{4F>>9;LJM#OQ0KUG8 z|MTOs2=iNniSyj(o6bG~^k8Pu>7?VeQ9Y@E-NeeLtU3ZW5k*Yx;vXdyfNCvN#WiBJ zShW5u1fY-re=b`u+kn;WR%yV)uL7)7f~c0O@Ytvk(}--UF()t#!8{DbI}|!T$;||i z+)YSAP!j=!q$E-#bx{f(L9at;fQr-;gFli$?hzIti+!$h5tNur;LlZ7v$F(I^jvf3 zC_c&stUTGNs5mG`ya&49f5!_^E{R%%s^U<`1Z8#soEI$N=j;a*j&|htF#(7rp)X!X z^44g2uqPpmPBL{iojzH+Bnf2GgP3o!Q2{p)(fBGRFZRRth77^NCw2%aEc^diR^Ycu z19*3!uu@S0Rt2Z;%9Y(pF_MRioc*K4{fA>FO~U+$NQ9=Q()W$XKu18!;*;G>1W8IH zBT|!uh;%ynQxgRVbXE)2;7=FeSL^kNpqzaUDKlP+o$2L`Q0~;Q;t(s@=6XYVr#eID zuu3I(Gn3b}i)x{+e^x2T4)(o(HiJ}k&(P^#C$FXB7G+KWrZ4q2cLFBck>A$@ptJ(_ zm!)FZ$dT~dxsy(`EJ*;F3G_hIsYNP4U0N+`0WB91-F_XxRnLmaJ6^|Kk*JdcK%xVX z*$n|$s{oR%RR?7|&^%@=PN16)?`56c)dpIw!7F_?9Oo_;ZP0O3rocTU1Oahz^nYdW zG7+RHL?B5ZJS~x=e*&V22qM#yx={$JQblN)g!Ks5WMJkpIo9jyzY>u|2K;%U3^IGK zH<$~Mf+V=sz=kfy5@FyX$Gk5Mxb$bsZl-eexd?(2(K?r`d_JN_>6uKWxKe(+B?{G)Fvev8AO{2GV9 z|4X#L`!QNBUc{c`hoRqFgY`xu5uV=S89CF(p9$bYit%>j_X7cN9pEoty#Z6&Mmp6U z5R{UPXi5Xr+C)hJtOoew;&OU;P9l8I3t~uy3xM<2Y!n-RT{{4GA^~MI*pMqW5V<=b zCh1re2r^JskXacV`i_tR6M?d}99Vfu7?n(LUuxN5n7d*b)ESgkX{>@j79@}?(gn3X zi@=|PsqP-4$L|>#DNlVaFlJd77?XMl8$w_LVDlC>gJt=@zaK5wyE*xvIPo4zZ~a06 z{PCyQ5xV%l2dIo&;v;iWmcjj0!{<+^ATPD6ui?*#gfkO(PQDCmaF9d z2CE6cI}w069mtYufQf(=K_@b3RFuJKIX7S-gDc(F3;2tUIb!2`DHOIpygl%^6N^lj-CmpdG1UAw4)_AXNZ+1f*DGyN=^6#=l#8+||3d!CW$R!{EB zeJuTBPk)4#kAKqven9|y`hS7;_dY?}#S3VC?l4-9?X!UYP)oUpHu|`%p#mmR7 z67g0c2|%q)f!EsA80|P7GnaWGFmV?`(^C=2lZB)VBmpEUse=uHXm<4wRzzSXfTAj> z_x57H-pBGkm-7Bjr@xT@zef8n0gzs=;6KUtjqQJKjIPftW(daSrh_2 zLIQ{Yl9l>Fd=GI4A`mG?+Mp1?W5?b`-TPk?0estq01kinGt{0vhwVislr@&4wT-2J zF}CNVVL2(!jAAXN1EnY_$%KQ0SO(JDQQz+bU`+y7@Q2UN;qr+}_$+aQ!}M7q=l>o_ zUiSYB$S{eVlBfH+j{j=Dp?~VmgVF=z8LtlTYQd3D4#Ne}WodCFd@Jcv)dSLw2DHuCxBAn*T!n^=K_-=U; zQG9~4O3-wtBDzZ}Y>8o)oJ{1JLNTQP4W|Z-0MuSf81M`J1<56Me5zG%*-4V))=ySBc`3~A&K8~Ws3V6rH z!foT0zpspoh40Q7xNg`C4mg@L=k|>~PF3M!{95ur#R{ zF8(UfIvp}}2*x@&Va(*InBuumkbx+&>Xd>ZrwYm#woDhyz>n=EdLjjS4LVVU$xA^o z)O((ma~5sa2Bc$Ry!M$50emZqfII;7&iB!F?nSgcdjN&?g+ltTN=-m|VFq>?(_yI4 zVbkVS{M`Ku#UeZE2b=(|gDF2c7RU*KB^gXQU*t$ zYIvT=z&wup#+|1S@0k#!ZJ4k;r%)Zdgn;~JxIelT6I?w+&0wU117L4?_^nWJd#vef$4GJ)b#Nbq(013p8W7zBD2t?R3zPfD)!4ML{1fWS&6+1 zSRHgn2(~Fhccfq;0p*%-evSRFKuzgLM9DrZi`7tCwH(98IAGK`2e=0ZAT&9a)BsNi z?z~45=z$bCjbMWp_I6;O$Ho`v|1)sA0NIy*VgY{}MeC=(?HC4n{}Z%bdYx223tFG5 zL2GLviAEh z6TsaT5VevF#H@j#V+xTw3MF-PVzxlF=QvdRPD|#-0JTL8?708nzt6RWoGcBxmdP8XOEc%4=#gjcLm2Bn5zAq8utU=`wu zwKt^s#hw$0Dy)(t&qOw%d6jUFenPBRKQdxCW-VKS;KUtb7em$sV(woFWKtTyMlU84 zsSm~Oz4gj~>;v!`u=e7QZE6A5D&SMJU%7;~=Sc+|t43Q}F%BHa!xL$-7~$y11aQ!f z_(39o-w^@C#BC)7FcCp|%9+LFU-oyH0D4(c>NIPhm9-AbB%(pydtg=w#WgZz;DRF8 z5O|YOqz&gg3X7~1gj%>PgWu=hWAfnp1lUWFQxNf*WunI7mzD=7kHw=gNy=x$+#dmO8o+JEylncKd97PFZLdCu zwiBcRj+CM8P(JoI>Jbtmt_%Mug{K|$gGB)G+d30~{(lky+^sq=6N1%fvN>g702>RH zle|`5ep=lo)|*v)U6}cbb#~$5XgnU1hG53`Qh^PJ;XnUbm zsDReCLbSEyp`lI#ucdD0WuS?6qPBp(?wp^}aqNS9>XO|WZE;BLgkw-9R z#WIAY#LBwBJ*NXP(%XU30JX^obxn)(cx=5qV6H$s7{pFMoe01(81!?rzw;s5&Yva~ zu$NRoDOwNZp}oa`iqc(}HFGLY1J({5I@DeZ7-$06K`Fo}r)dbut-OQvm*yXr5V|7; zkvb^EU?B%3#OL(#&xvkIrqyd^$-5PpNZ7!G(hOE!(^mwG*#RflS@7SsUg;3@4t%wB zP#PdsyLnlutfr$I&^|!UKoo1Aen(6P_B0pJe&Yt(UgWueDzvtm(0VYNNFWEgtc@5y ze(ay<(cfuD|9}#}O~fW_!{{k4atO#m02%*)1kf8H^h62@F<2tY3iz2lv@Er<*qT=; z>I4y`O_&v=7F_}dr-|^}xS9YRb5{glAp+|(ps*O~`lknMEZEv3fPDe?ee^5E9mrY* zkUF^i9@@@5ht}gYlm--_mB8QHtP@1=*kgehGGqwP1i1a9 FutureCheck) { - logger.warn('Note somehow made after today; discarding') + logger.warn("Note somehow made after today; discarding"); return null; } } - // Fetch author const actor = (await resolvePerson( getOneApId(note.attributedTo), diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts index 35ab738a2..7fb5fd320 100644 --- a/packages/backend/src/server/api/endpoints.ts +++ b/packages/backend/src/server/api/endpoints.ts @@ -669,7 +669,7 @@ const eps = [ ["users/stats", ep___users_stats], ["admin/drive-capacity-override", ep___admin_driveCapOverride], ["fetch-rss", ep___fetchRss], - ["get-sounds", ep___sounds] + ["get-sounds", ep___sounds], ]; export interface IEndpointMeta { diff --git a/packages/backend/src/server/api/endpoints/get-sounds.ts b/packages/backend/src/server/api/endpoints/get-sounds.ts index aa3ef24e7..f7edd3860 100644 --- a/packages/backend/src/server/api/endpoints/get-sounds.ts +++ b/packages/backend/src/server/api/endpoints/get-sounds.ts @@ -14,15 +14,17 @@ export const paramDef = { } as const; export default define(meta, paramDef, async () => { - const music_files: (string|null)[] = [null, ]; - const directory = (await readdir('./assets/sounds', { withFileTypes: true })) - .filter(potentialFolder => potentialFolder.isDirectory()) + const music_files: (string | null)[] = [null]; + const directory = ( + await readdir("./assets/sounds", { withFileTypes: true }) + ).filter((potentialFolder) => potentialFolder.isDirectory()); for await (const folder of directory) { - const files = (await readdir(`./assets/sounds/${folder.name}`)) - .filter(potentialSong => potentialSong.endsWith('.mp3')) + const files = (await readdir(`./assets/sounds/${folder.name}`)).filter( + (potentialSong) => potentialSong.endsWith(".mp3"), + ); for await (const file of files) { - music_files.push(`${folder.name}/${file.replace('.mp3','')}`); + music_files.push(`${folder.name}/${file.replace(".mp3", "")}`); } } - return music_files + return music_files; }); diff --git a/packages/backend/src/server/api/index.ts b/packages/backend/src/server/api/index.ts index 189705903..6d02ad0ab 100644 --- a/packages/backend/src/server/api/index.ts +++ b/packages/backend/src/server/api/index.ts @@ -61,10 +61,12 @@ router.use( }), ); -mastoRouter.use(koaBody({ - multipart: true, - urlencoded: true -})); +mastoRouter.use( + koaBody({ + multipart: true, + urlencoded: true, + }), +); apiMastodonCompatible(mastoRouter); diff --git a/packages/backend/src/server/index.ts b/packages/backend/src/server/index.ts index cd495971e..efdd746ee 100644 --- a/packages/backend/src/server/index.ts +++ b/packages/backend/src/server/index.ts @@ -72,9 +72,11 @@ app.use(mount("/proxy", proxyServer)); const router = new Router(); const mastoRouter = new Router(); -mastoRouter.use(koaBody({ - urlencoded: true -})); +mastoRouter.use( + koaBody({ + urlencoded: true, + }), +); // Routing router.use(activityPub.routes()); @@ -159,9 +161,9 @@ mastoRouter.post("/oauth/token", async (ctx) => { ctx.body = { error: "Invalid code" }; return; } - } + } if (client_id instanceof Array) { - client_id = client_id.toString();; + client_id = client_id.toString(); } else if (!client_id) { client_id = null; } @@ -169,7 +171,7 @@ mastoRouter.post("/oauth/token", async (ctx) => { const atData = await client.fetchAccessToken( client_id, body.client_secret, - m ? m[0] : '', + m ? m[0] : "", ); ctx.body = { access_token: atData.accessToken, From 60b959f63fc7747d060eade2672cfcd9f6bef4b7 Mon Sep 17 00:00:00 2001 From: Evangelos Paterakis Date: Sat, 11 Feb 2023 23:28:46 +0200 Subject: [PATCH 05/25] =?UTF-8?q?fix:=20=F0=9F=90=9B=20100vh=20body=20back?= =?UTF-8?q?ground=20color?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/server/web/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/web/style.css b/packages/backend/src/server/web/style.css index 5072e0ad4..ee42b9deb 100644 --- a/packages/backend/src/server/web/style.css +++ b/packages/backend/src/server/web/style.css @@ -1,4 +1,4 @@ -html { +html, body { background-color: var(--bg); color: var(--fg); } From c135d1602441c4f2db689a479a19869aec76e616 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sat, 11 Feb 2023 22:50:15 +0100 Subject: [PATCH 06/25] meow Co-authored-by: cutls --- packages/backend/package.json | 2 +- .../server/api/mastodon/endpoints/account.ts | 19 +++++++++++++++++++ pnpm-lock.yaml | 8 ++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index c1af9b173..7a25ee76b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -79,7 +79,7 @@ "koa-send": "5.0.1", "koa-slow": "2.1.0", "koa-views": "7.0.2", - "@cutls/megalodon": "5.1.15", + "@cutls/megalodon": "5.1.16", "mfm-js": "0.23.2", "mime-types": "2.1.35", "multer": "1.4.4-lts.1", diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 0162951d6..2766dbdce 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -4,6 +4,23 @@ import { koaBody } from "koa-body"; import { getClient } from "../ApiMastodonCompatibleService.js"; import { toLimitToInt } from "./timeline.js"; +const relationshopModel = { + id: '', + following: false, + followed_by: false, + delivery_following: false, + blocking: false, + blocked_by: false, + muting: false, + muting_notifications: false, + requested: false, + domain_blocking: false, + showing_reblogs: false, + endorsed: false, + notifying: false, + note: '' +} + export function apiAccountMastodon(router: Router): void { router.get("/v1/accounts/verify_credentials", async (ctx, next) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; @@ -258,6 +275,8 @@ export function apiAccountMastodon(router: Router): void { try { const idsRaw = (ctx.query as any)["id[]"]; const ids = typeof idsRaw === "string" ? [idsRaw] : idsRaw; + relationshopModel.id = idsRaw || '1' + if (!idsRaw) return [relationshopModel] const data = (await client.getRelationships(ids)) as any; ctx.body = data.data; } catch (e: any) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 056b02cbf..a4a61060c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: '@bull-board/api': ^4.6.4 '@bull-board/koa': ^4.6.4 '@bull-board/ui': ^4.6.4 - '@cutls/megalodon': 5.1.15 + '@cutls/megalodon': 5.1.16 '@discordapp/twemoji': 14.0.2 '@elastic/elasticsearch': 7.17.0 '@koa/cors': 3.4.3 @@ -223,7 +223,7 @@ importers: '@bull-board/api': 4.10.2 '@bull-board/koa': 4.10.2_6tybghmia4wsnt33xeid7y4rby '@bull-board/ui': 4.10.2 - '@cutls/megalodon': 5.1.15 + '@cutls/megalodon': 5.1.16 '@discordapp/twemoji': 14.0.2 '@elastic/elasticsearch': 7.17.0 '@koa/cors': 3.4.3 @@ -847,8 +847,8 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cutls/megalodon/5.1.15: - resolution: {integrity: sha512-4+mIKUYYr2CLY3idSxXk56WSTG9ww3opeenmsPRxftTwcjQTYxGntNkWmJWEbzeJ4rPslnvpwD7cFR62bPf41g==} + /@cutls/megalodon/5.1.16: + resolution: {integrity: sha512-s2U3qjcs86v0/p0EPwlQqSMh4UhAqTNxu8xUVsPvzrwXr5TrrJ5AVKunBm5582AEkx47nZkqm/98ZF2iHb0GtQ==} engines: {node: '>=15.0.0'} dependencies: '@types/oauth': 0.9.1 From 43c985d78c0abf71bf3aaf23d4bb5da3efb518a8 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sat, 11 Feb 2023 23:12:14 +0100 Subject: [PATCH 07/25] fix timelines --- packages/backend/src/server/api/mastodon/endpoints/timeline.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/timeline.ts b/packages/backend/src/server/api/mastodon/endpoints/timeline.ts index 9caf43114..a2857e32c 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/timeline.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/timeline.ts @@ -6,8 +6,9 @@ import Autolinker from "autolinker"; import { ParsedUrlQuery } from "querystring"; export function toLimitToInt(q: ParsedUrlQuery) { + let object: any = q; if (q.limit) - if (typeof q.limit === "string") q.limit = parseInt(q.limit, 10).toString(); + if (typeof q.limit === "string") object.limit = parseInt(q.limit, 10); return q; } From f61b157a70b0a2ec68873b65e7ad445bca1f5d26 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sat, 11 Feb 2023 23:46:35 +0100 Subject: [PATCH 08/25] change name of Reactions bot --- packages/backend/src/server/api/mastodon/endpoints/status.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/status.ts b/packages/backend/src/server/api/mastodon/endpoints/status.ts index 3afd7e576..cce2e8e1d 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/status.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/status.ts @@ -435,7 +435,7 @@ export function statusModel( id: "9arzuvv0sw", username: "ReactionBot", acct: "ReactionBot", - display_name: "ReactionOfThisPost", + display_name: "ReactionsToThisPost", locked: false, created_at: now, followers_count: 0, From 54de8b92d81f5a4b8a718454d83ff78c33949d61 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sat, 11 Feb 2023 23:50:58 +0100 Subject: [PATCH 09/25] remove unneeded next middleware --- .../server/api/mastodon/endpoints/account.ts | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 2766dbdce..58de9ad17 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -1,6 +1,4 @@ -import megalodon, { MegalodonInterface } from "@cutls/megalodon"; import Router from "@koa/router"; -import { koaBody } from "koa-body"; import { getClient } from "../ApiMastodonCompatibleService.js"; import { toLimitToInt } from "./timeline.js"; @@ -22,7 +20,7 @@ const relationshopModel = { } export function apiAccountMastodon(router: Router): void { - router.get("/v1/accounts/verify_credentials", async (ctx, next) => { + router.get("/v1/accounts/verify_credentials", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -67,7 +65,7 @@ export function apiAccountMastodon(router: Router): void { }); router.get<{ Params: { id: string } }>( "/v1/accounts/:id", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -84,7 +82,7 @@ export function apiAccountMastodon(router: Router): void { ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id/statuses", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -104,7 +102,7 @@ export function apiAccountMastodon(router: Router): void { ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id/followers", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -124,7 +122,7 @@ export function apiAccountMastodon(router: Router): void { ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id/following", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -144,7 +142,7 @@ export function apiAccountMastodon(router: Router): void { ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id/lists", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -161,7 +159,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/accounts/:id/follow", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -180,7 +178,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/accounts/:id/unfollow", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -199,7 +197,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/accounts/:id/block", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -216,7 +214,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/accounts/:id/unblock", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -253,7 +251,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/accounts/:id/unmute", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -268,7 +266,7 @@ export function apiAccountMastodon(router: Router): void { } }, ); - router.get("/v1/accounts/relationships", async (ctx, next) => { + router.get("/v1/accounts/relationships", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -286,7 +284,7 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get("/v1/bookmarks", async (ctx, next) => { + router.get("/v1/bookmarks", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -300,7 +298,7 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get("/v1/favourites", async (ctx, next) => { + router.get("/v1/favourites", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -314,7 +312,7 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get("/v1/mutes", async (ctx, next) => { + router.get("/v1/mutes", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -328,7 +326,7 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get("/v1/blocks", async (ctx, next) => { + router.get("/v1/blocks", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -342,7 +340,7 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get("/v1/follow_ctxs", async (ctx, next) => { + router.get("/v1/follow_ctxs", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -360,7 +358,7 @@ export function apiAccountMastodon(router: Router): void { }); router.post<{ Params: { id: string } }>( "/v1/follow_ctxs/:id/authorize", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); @@ -377,7 +375,7 @@ export function apiAccountMastodon(router: Router): void { ); router.post<{ Params: { id: string } }>( "/v1/follow_ctxs/:id/reject", - async (ctx, next) => { + async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); From 631355c2c8dc4c0ad4188b8e1fc175f20c65661e Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:10:10 +0100 Subject: [PATCH 10/25] add account lookup --- .../server/api/mastodon/endpoints/account.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 58de9ad17..82c721ef4 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -63,6 +63,31 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); + router.get( + "/v1/accounts/lookup", + async (ctx) => { + const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; + const accessTokens = ctx.headers.authorization; + const client = getClient(BASE_URL, accessTokens); + try { + const data = await client.searchAccount((ctx.query.acct || '').toString(), { + resolve: true + }); + ctx.body = data.data[0]; + if (data.data.length === 0) { + ctx.status = 404; + ctx.body = { + error: "Record not found" + } + } + } catch (e: any) { + console.error(e); + console.error(e.response.data); + ctx.status = 401; + ctx.body = e.response.data; + } + }, + ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id", async (ctx) => { From 209cd8a7c8892e0a066a34af0aa3b6298b06d4b3 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:14:03 +0100 Subject: [PATCH 11/25] refine error msg --- packages/backend/src/server/api/mastodon/endpoints/account.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 82c721ef4..cb9f6c4ef 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -77,7 +77,7 @@ export function apiAccountMastodon(router: Router): void { if (data.data.length === 0) { ctx.status = 404; ctx.body = { - error: "Record not found" + error: `Record (${ctx.query.acct}) not found` } } } catch (e: any) { From 7ea17df2ba04e5da9b876f0638d67af5f6a2b532 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:19:35 +0100 Subject: [PATCH 12/25] try this instead --- .../backend/src/server/api/mastodon/endpoints/account.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index cb9f6c4ef..fe48e4a11 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -70,11 +70,11 @@ export function apiAccountMastodon(router: Router): void { const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); try { - const data = await client.searchAccount((ctx.query.acct || '').toString(), { + const data = await client.search((ctx.query.acct || '').toString(), "accounts", { resolve: true }); - ctx.body = data.data[0]; - if (data.data.length === 0) { + ctx.body = data.data.accounts[0]; + if (data.data.accounts.length === 0) { ctx.status = 404; ctx.body = { error: `Record (${ctx.query.acct}) not found` From 63cd831cf62674476f1b292680b1f966f67369c9 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:25:51 +0100 Subject: [PATCH 13/25] simplify code --- .../server/api/mastodon/endpoints/account.ts | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index fe48e4a11..4e2c93334 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -63,39 +63,20 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); - router.get( - "/v1/accounts/lookup", - async (ctx) => { - const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; - const accessTokens = ctx.headers.authorization; - const client = getClient(BASE_URL, accessTokens); - try { - const data = await client.search((ctx.query.acct || '').toString(), "accounts", { - resolve: true - }); - ctx.body = data.data.accounts[0]; - if (data.data.accounts.length === 0) { - ctx.status = 404; - ctx.body = { - error: `Record (${ctx.query.acct}) not found` - } - } - } catch (e: any) { - console.error(e); - console.error(e.response.data); - ctx.status = 401; - ctx.body = e.response.data; - } - }, - ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); + let req_user = ctx.query.acct; + if (!req_user) { + req_user = ctx.params.id; + } else { + req_user = req_user.toString(); + } try { - const data = await client.getAccount(ctx.params.id); + const data = await client.getAccount(req_user); ctx.body = data.data; } catch (e: any) { console.error(e); From b862402ce924ba34169104fbe19cb3496b055357 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:29:52 +0100 Subject: [PATCH 14/25] eow --- .../server/api/mastodon/endpoints/account.ts | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 4e2c93334..2836c7fda 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -63,20 +63,31 @@ export function apiAccountMastodon(router: Router): void { ctx.body = e.response.data; } }); + router.get( + "/v1/accounts/lookup", + async (ctx) => { + const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; + const accessTokens = ctx.headers.authorization; + const client = getClient(BASE_URL, accessTokens); + try { + const data = await client.getAccount(( || '').toString()); + ctx.body = data.data; + } catch (e: any) { + console.error(e); + console.error(e.response.data); + ctx.status = 401; + ctx.body = e.response.data; + } + }, + ); router.get<{ Params: { id: string } }>( "/v1/accounts/:id", async (ctx) => { const BASE_URL = `${ctx.protocol}://${ctx.hostname}`; const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); - let req_user = ctx.query.acct; - if (!req_user) { - req_user = ctx.params.id; - } else { - req_user = req_user.toString(); - } try { - const data = await client.getAccount(req_user); + const data = await client.getAccount(ctx.params.id); ctx.body = data.data; } catch (e: any) { console.error(e); From 69efbf8fdafa03b7e289ca16e579a9a10bfc09e9 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:33:52 +0100 Subject: [PATCH 15/25] oof --- packages/backend/src/server/api/mastodon/endpoints/account.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 2836c7fda..ef9ac4f43 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -70,7 +70,7 @@ export function apiAccountMastodon(router: Router): void { const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); try { - const data = await client.getAccount(( || '').toString()); + const data = await client.getAccount((ctx.query.acct || '').toString()); ctx.body = data.data; } catch (e: any) { console.error(e); From 6eee77cbc5394448966cc879823a347942e05522 Mon Sep 17 00:00:00 2001 From: cutestnekoaqua Date: Sun, 12 Feb 2023 00:35:39 +0100 Subject: [PATCH 16/25] is this too spec? --- packages/backend/src/server/api/mastodon/endpoints/account.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index ef9ac4f43..1127fa5fb 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -70,7 +70,7 @@ export function apiAccountMastodon(router: Router): void { const accessTokens = ctx.headers.authorization; const client = getClient(BASE_URL, accessTokens); try { - const data = await client.getAccount((ctx.query.acct || '').toString()); + const data = await client.getAccount(`@${(ctx.query.acct || '').toString()}`); ctx.body = data.data; } catch (e: any) { console.error(e); From 3e1048d3b1082677572b380a893ce134a98ff761 Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Sat, 11 Feb 2023 16:20:57 -0800 Subject: [PATCH 17/25] chore: calckey megalodon --- packages/backend/package.json | 2 +- pnpm-lock.yaml | 52 +++++++++++++++++------------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index c1af9b173..55a64191a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -79,7 +79,7 @@ "koa-send": "5.0.1", "koa-slow": "2.1.0", "koa-views": "7.0.2", - "@cutls/megalodon": "5.1.15", + "@calckey/megalodon": "5.1.2", "mfm-js": "0.23.2", "mime-types": "2.1.35", "multer": "1.4.4-lts.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 056b02cbf..827dc8da5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: '@bull-board/api': ^4.6.4 '@bull-board/koa': ^4.6.4 '@bull-board/ui': ^4.6.4 - '@cutls/megalodon': 5.1.15 + '@calckey/megalodon': 5.1.2 '@discordapp/twemoji': 14.0.2 '@elastic/elasticsearch': 7.17.0 '@koa/cors': 3.4.3 @@ -223,7 +223,7 @@ importers: '@bull-board/api': 4.10.2 '@bull-board/koa': 4.10.2_6tybghmia4wsnt33xeid7y4rby '@bull-board/ui': 4.10.2 - '@cutls/megalodon': 5.1.15 + '@calckey/megalodon': 5.1.2 '@discordapp/twemoji': 14.0.2 '@elastic/elasticsearch': 7.17.0 '@koa/cors': 3.4.3 @@ -746,6 +746,30 @@ packages: '@bull-board/api': 4.10.2 dev: false + /@calckey/megalodon/5.1.2: + resolution: {integrity: sha512-bUjPOfASy8X2NxdBvYDOWN9Rw/KdkfbTxy5vMQBcrGXepFbT4M+00blEYNc00Uu/epwH9YoNqpQC8PKQr/WU4w==} + engines: {node: '>=15.0.0'} + dependencies: + '@types/oauth': 0.9.1 + '@types/ws': 8.5.4 + axios: 1.2.2 + dayjs: 1.11.7 + form-data: 4.0.0 + https-proxy-agent: 5.0.1 + oauth: 0.10.0 + object-assign-deep: 0.4.0 + parse-link-header: 2.0.0 + socks-proxy-agent: 7.0.0 + typescript: 4.9.4 + uuid: 9.0.0 + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + /@colors/colors/1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -847,30 +871,6 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@cutls/megalodon/5.1.15: - resolution: {integrity: sha512-4+mIKUYYr2CLY3idSxXk56WSTG9ww3opeenmsPRxftTwcjQTYxGntNkWmJWEbzeJ4rPslnvpwD7cFR62bPf41g==} - engines: {node: '>=15.0.0'} - dependencies: - '@types/oauth': 0.9.1 - '@types/ws': 8.5.4 - axios: 1.2.2 - dayjs: 1.11.7 - form-data: 4.0.0 - https-proxy-agent: 5.0.1 - oauth: 0.10.0 - object-assign-deep: 0.4.0 - parse-link-header: 2.0.0 - socks-proxy-agent: 7.0.0 - typescript: 4.9.4 - uuid: 9.0.0 - ws: 8.12.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: false - /@cypress/request/2.88.11: resolution: {integrity: sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==} engines: {node: '>= 6'} From 474a02bfe0b1145ba2b7abcfaa366dcb6828711c Mon Sep 17 00:00:00 2001 From: Free Date: Sun, 12 Feb 2023 01:11:11 +0000 Subject: [PATCH 18/25] Hide inactive tab labels on mobile (#9609) Co-authored-by: Freeplay Reviewed-on: https://codeberg.org/calckey/calckey/pulls/9609 Co-authored-by: Free Co-committed-by: Free --- .../src/components/global/MkPageHeader.vue | 704 +++++++++--------- 1 file changed, 359 insertions(+), 345 deletions(-) diff --git a/packages/client/src/components/global/MkPageHeader.vue b/packages/client/src/components/global/MkPageHeader.vue index 464a965b3..c6568bbff 100644 --- a/packages/client/src/components/global/MkPageHeader.vue +++ b/packages/client/src/components/global/MkPageHeader.vue @@ -1,247 +1,314 @@ - + - - From b02f62dba472017672efeaf6771ac09dc97bf46a Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Sat, 11 Feb 2023 17:14:50 -0800 Subject: [PATCH 19/25] Formatting --- .gitignore | 2 + .../src/components/global/MkPageHeader.vue | 659 +++++++++--------- 2 files changed, 331 insertions(+), 330 deletions(-) diff --git a/.gitignore b/.gitignore index 135bf9660..52139614c 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,8 @@ api-docs.json files ormconfig.json packages/backend/assets/instance.css +packages/backend/assets/sounds/None.mp3 + # blender backups *.blend1 diff --git a/packages/client/src/components/global/MkPageHeader.vue b/packages/client/src/components/global/MkPageHeader.vue index c6568bbff..f37b2f43f 100644 --- a/packages/client/src/components/global/MkPageHeader.vue +++ b/packages/client/src/components/global/MkPageHeader.vue @@ -7,7 +7,7 @@
- +
{{ metadata.title }}
@@ -31,284 +31,226 @@
- + - + From ace835004341a8c4a2cf89b81f074ed7d2a0c32b Mon Sep 17 00:00:00 2001 From: ThatOneCalculator Date: Sat, 11 Feb 2023 17:16:55 -0800 Subject: [PATCH 20/25] chore: tag dev1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 18df3e5b2..4a5222f61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "calckey", - "version": "13.2.0-dev", + "version": "13.2.0-dev1", "codename": "aqua", "repository": { "type": "git", From 653c71dad51cdf858997159973755ea2d66875e4 Mon Sep 17 00:00:00 2001 From: Kaity A Date: Sun, 12 Feb 2023 01:19:43 +0000 Subject: [PATCH 21/25] Enable reply update/display in detailed view. (#9606) This PR establishes a new replied note stream update for subscribed notes, which gets fired off whenever a note receives a reply and the user is subscribed to the note for updates. It specifically does not provide note details as part of the update, just the note id of the reply, so that they must go and retrieve the note and be subject to the proper permission and visibility checks. The detailed note component has then been updated to watch for the replied notification so it can add new replies to the thread as they are created. This allows both seeing new replies while on the page, and also to see your own replies appear after you post them without having to reload the page. This PR relies on https://codeberg.org/calckey/calckey.js/pulls/2 to add the replied type to the calkey.js module. Co-authored-by: Kaity A Reviewed-on: https://codeberg.org/calckey/calckey/pulls/9606 Co-authored-by: Kaity A Co-committed-by: Kaity A --- .../backend/src/server/api/stream/types.ts | 3 +++ packages/backend/src/services/note/create.ts | 8 +++++- .../client/src/components/MkNoteDetailed.vue | 27 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/server/api/stream/types.ts b/packages/backend/src/server/api/stream/types.ts index 837f42c87..b35c599bd 100644 --- a/packages/backend/src/server/api/stream/types.ts +++ b/packages/backend/src/server/api/stream/types.ts @@ -135,6 +135,9 @@ export interface NoteStreamTypes { reaction: string; userId: User["id"]; }; + replied: { + id: Note["id"]; + }; } type NoteStreamEventTypes = { [key in keyof NoteStreamTypes]: { diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index 210ea7771..b37b160fb 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -1,6 +1,6 @@ import * as mfm from "mfm-js"; import es from "../../db/elasticsearch.js"; -import { publishMainStream, publishNotesStream } from "@/services/stream.js"; +import { publishMainStream, publishNotesStream, publishNoteStream } from "@/services/stream.js"; import DeliverManager from "@/remote/activitypub/deliver-manager.js"; import renderNote from "@/remote/activitypub/renderer/note.js"; import renderCreate from "@/remote/activitypub/renderer/create.js"; @@ -430,6 +430,12 @@ export default async ( } publishNotesStream(note); + if (note.replyId != null) { + // Only provide the reply note id here as the recipient may not be authorized to see the note. + publishNoteStream(note.replyId, "replied", { + id: note.id, + }); + } const webhooks = await getActiveWebhooks().then((webhooks) => webhooks.filter((x) => x.userId === user.id && x.on.includes("note")), diff --git a/packages/client/src/components/MkNoteDetailed.vue b/packages/client/src/components/MkNoteDetailed.vue index dd6187d7e..fab06f1ab 100644 --- a/packages/client/src/components/MkNoteDetailed.vue +++ b/packages/client/src/components/MkNoteDetailed.vue @@ -142,6 +142,8 @@ import { i18n } from '@/i18n'; import { getNoteMenu } from '@/scripts/get-note-menu'; import { useNoteCapture } from '@/scripts/use-note-capture'; import { deepClone } from '@/scripts/clone'; +import { stream } from '@/stream'; +import { NoteUpdatedEvent } from 'calckey-js/built/streaming.types'; const router = useRouter(); @@ -302,6 +304,31 @@ if (appearNote.replyId) { conversation.value = res.reverse(); }); } + +function onNoteReplied(noteData: NoteUpdatedEvent): void { + const { type, id, body } = noteData; + if (type === 'replied' && id === appearNote.id) { + const { id: createdId } = body; + + os.api('notes/show', { + noteId: createdId, + }).then(note => { + if (note.replyId === appearNote.id) { + replies.value.unshift(note); + directReplies.value.unshift(note); + } + }); + } + +} + +onMounted(() => { + stream.on("noteUpdated", onNoteReplied); +}); + +onUnmounted(() => { + stream.off("noteUpdated", onNoteReplied); +}); diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts index 0784b68de..a0c263572 100644 --- a/packages/client/src/os.ts +++ b/packages/client/src/os.ts @@ -545,6 +545,21 @@ export async function selectUser() { }); } +export async function selectInstance(): Promise { + return new Promise((resolve, reject) => { + popup( + defineAsyncComponent(() => import("@/components/MkInstanceSelectDialog.vue")), + {}, + { + ok: (instance) => { + resolve(instance); + }, + }, + "closed", + ); + }); +} + export async function selectDriveFile(multiple: boolean) { return new Promise((resolve, reject) => { popup( diff --git a/packages/client/src/pages/my-antennas/create.vue b/packages/client/src/pages/my-antennas/create.vue index 794b74370..337816e00 100644 --- a/packages/client/src/pages/my-antennas/create.vue +++ b/packages/client/src/pages/my-antennas/create.vue @@ -5,7 +5,6 @@