Defry the fish (#125)

Co-authored-by: Luna <luna.dragon@suse.com>
Reviewed-on: https://iceshrimp.dev/iceshrimp/iceshrimp/pulls/125
Co-authored-by: Luna D Dragon <lunarequest@nullrequest.com>
Co-committed-by: Luna D Dragon <lunarequest@nullrequest.com>
This commit is contained in:
Luna D Dragon 2023-08-21 16:14:53 +02:00 committed by Laura Hausmann
parent e3131e9b11
commit 91b8b7b76b
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
93 changed files with 364 additions and 373 deletions

View file

@ -1,4 +1,5 @@
Copyright 2023 Firefish Copyright 2023 The Iceshrimp contributors
Copyright 2023 The Firefish contributors
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View file

@ -8,7 +8,7 @@ resources:
cpu: 1 cpu: 1
memory: 1Gi memory: 1Gi
firefish: iceshrimp:
domain: example.tld domain: example.tld
smtp: smtp:
from_address: noreply@example.tld from_address: noreply@example.tld

View file

@ -1,3 +1,3 @@
[weblate] [weblate]
url = https://hosted.weblate.org/api/ url = https://hosted.weblate.org/api/
translation = firefish/locales translation = iceshrimp/locales

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-latest: publish-docker-latest:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/firefish repo: iceshrimp/iceshrimp
tags: latest tags: latest
dockerfile: Dockerfile dockerfile: Dockerfile
username: username:

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-latest: publish-docker-latest:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/firefish repo: iceshrimp/iceshrimp
tags: rc tags: rc
dockerfile: Dockerfile dockerfile: Dockerfile
username: username:

View file

@ -2,7 +2,7 @@ pipeline:
publish-docker-tag: publish-docker-tag:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/firefish repo: iceshrimp/iceshrimp
# Uses the tag from git for the container tag # Uses the tag from git for the container tag
tags: ${CI_COMMIT_TAG} tags: ${CI_COMMIT_TAG}
dockerfile: Dockerfile dockerfile: Dockerfile

View file

@ -2,7 +2,7 @@ pipeline:
docker-build: docker-build:
image: plugins/kaniko image: plugins/kaniko
settings: settings:
repo: thatonecalculator/firefish repo: iceshrimp/iceshrimp
tags: test tags: test
dockerfile: Dockerfile dockerfile: Dockerfile
no_push: true no_push: true

View file

@ -1,6 +1,6 @@
# Changelog # Changelog
All changes from v13.0.0 onwards, for a list of differences read FIREFISH.md All changes from v13.0.0 onwards, for a list of differences read CHANGES_FROM_UPSTREAM.md
## [1.0.0] - 2023-07-19 ## [1.0.0] - 2023-07-19

View file

@ -85,7 +85,7 @@
- Undo renote button inside original note - Undo renote button inside original note
- Custom locales - Custom locales
- Obliteration of Ai-chan - Obliteration of Ai-chan
- Switch to [Firefish.js](https://codeberg.org/firefish/firefish.js) - Switch to [Iceshrimp.js](https://iceshrimp.dev/iceshrimp/iceshrimp/)
- Woozy mode 🥴 - Woozy mode 🥴
- Improve blocking servers - Improve blocking servers
- Release notes - Release notes

View file

@ -60,10 +60,7 @@ representative at an online or offline event.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at `conduct@iceshrimp.dev`.
@thatonecalculator on Codeberg,
`@kainoa@firefish.social` on the Fediverse,
or kainoa@t1c.dev via email.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the

View file

@ -1,26 +1,24 @@
# Contribution guide # Contribution guide
We're glad you're interested in contributing Firefish! In this document you will find the information you need to contribute to the project. We're glad you're interested in contributing Iceshrimp! In this document you will find the information you need to contribute to the project.
## Translation (i18n) ## Translation (i18n)
Firefish uses [Weblate](hhttps://hosted.weblate.org/engage/firefish/) for translation and internationalization management. Iceshrimp uses [Weblate](https://translate.iceshrimp.dev/) for translation and internationalization management.
If your language is not listed in Weblate, please open an issue. If your language is not listed in Weblate, please open an issue.
You can contribute without knowing how to code by helping translate here: You can contribute without knowing how to code by helping translate here:
[![Translation status](https://hosted.weblate.org/widgets/firefish/-/287x66-grey.png)](https://hosted.weblate.org/engage/firefish/) [![Translation status](https://translate.iceshrimp.dev/widgets/iceshrimp/-/287x66-grey.png)](https://translate.iceshrimp.dev/)
[![Translation bars](https://hosted.weblate.org/widgets/firefish/-/multi-auto.svg)](https://hosted.weblate.org/engage/firefish/) [![Translation bars](https://translate.iceshrimp.dev/widgets/iceshrimp/-/multi-auto.svg)](https://translate.iceshrimp.dev/)
## Roadmap
See [FIREFISH.md](./FIREFISH.md)
## Issues ## Issues
Before creating an issue, please check the following: Before creating an issue, please check the following:
- To avoid duplication, please search for similar issues before creating a new issue. - To avoid duplication, please search for similar issues before creating a new issue.
- Do not use Issues to ask questions or troubleshooting. - Do not use Issues to ask questions or troubleshooting.
- Issues should only be used to feature requests, suggestions, and bug tracking. - Issues should only be used to feature requests, suggestions, and bug tracking.
- Please ask questions or troubleshooting in the [Matrix room](https://matrix.to/#/#firefish:matrix.fedibird.com). - Please ask questions or troubleshooting in the [Matrix room](https://matrix.to/#/#iceshrimp-dev:161.rocks).
> **Warning** > **Warning**
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged. > Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.

View file

@ -18,7 +18,7 @@ And are distributed under The Apache License, Version 2.0, you should have recei
--- ---
Firefish includes several third-party open-source softwares and software libraries. Iceshrimp includes several third-party open-source softwares and software libraries.
RsaSignature2017 implementation by Transmute Industries Inc RsaSignature2017 implementation by Transmute Industries Inc
License: MIT License: MIT

View file

@ -1,16 +1,11 @@
# Reporting Security Issues # Reporting Security Issues
## Minor Security Issues
If you discover a minor security issue in Firefish, please report it by sending an
email to [kainoa@t1c.dev](mailto:kainoa@t1c.dev).
## High Security Issues ## High Security Issues
If you discover a security issue, which is so high risk, that too much is affected by it, please dont send it over unencrypted communication. You can share your PGP keys with us using kainoa@t1c.dev and after we established a secure communication, send it over E-Mail, or message us using matrix' encrypted private messages at @t1c:matrix.fedibird.com or @cleo:tchncs.de If you discover a security issue, which is so high risk, that too much is affected by it, please dont send it over unencrypted communication. You can share your PGP keys with us using security@iceshrimp.dev and after we established a secure communication, send it over E-Mail, or message us using matrix' encrypted private messages at @zotan:161.rocks
This will allow us to assess the risk, and make a fix available before we add a This will allow us to assess the risk, and make a fix available before we add a
bug report to the Codeberg repository. bug report to the Codeberg repository.
Thanks for helping make Firefish safe for everyone. Thanks for helping make Iceshrimp safe for everyone.

View file

@ -1,6 +1,6 @@
apiVersion: v2 apiVersion: v2
name: firefish name: iceshrimp
description: A fun, new, open way to experience social media https://joinfirefish.org description: A fun, new, open way to experience social media https://iceshrimp.dev
# A chart can be either an 'application' or a 'library' chart. # A chart can be either an 'application' or a 'library' chart.
# #

View file

@ -1,8 +1,8 @@
# firefish # iceshrimp
![Version: 0.1.2](https://img.shields.io/badge/Version-0.1.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: rc](https://img.shields.io/badge/AppVersion-rc-informational?style=flat-square) ![Version: 0.1.2](https://img.shields.io/badge/Version-0.1.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: rc](https://img.shields.io/badge/AppVersion-rc-informational?style=flat-square)
A fun, new, open way to experience social media https://joinfirefish.org A fun, new, open way to experience social media https://iceshrimp.dev
## Requirements ## Requirements
@ -21,39 +21,39 @@ A fun, new, open way to experience social media https://joinfirefish.org
| autoscaling.maxReplicas | int | `100` | | | autoscaling.maxReplicas | int | `100` | |
| autoscaling.minReplicas | int | `1` | | | autoscaling.minReplicas | int | `1` | |
| autoscaling.targetCPUUtilizationPercentage | int | `80` | | | autoscaling.targetCPUUtilizationPercentage | int | `80` | |
| firefish.allowedPrivateNetworks | list | `[]` | If you want to allow firefish to connect to private ips, enter the cidrs here. | | iceshrimp.allowedPrivateNetworks | list | `[]` | If you want to allow iceshrimp to connect to private ips, enter the cidrs here. |
| firefish.deepl.authKey | string | `""` | | | iceshrimp.deepl.authKey | string | `""` | |
| firefish.deepl.isPro | bool | `false` | | | iceshrimp.deepl.isPro | bool | `false` | |
| firefish.deepl.managed | bool | `false` | | | iceshrimp.deepl.managed | bool | `false` | |
| firefish.domain | string | `"firefish.local"` | | | iceshrimp.domain | string | `"iceshrimp.local"` | |
| firefish.isManagedHosting | bool | `true` | | | iceshrimp.isManagedHosting | bool | `true` | |
| firefish.libreTranslate.apiKey | string | `""` | | | iceshrimp.libreTranslate.apiKey | string | `""` | |
| firefish.libreTranslate.apiUrl | string | `""` | | | iceshrimp.libreTranslate.apiUrl | string | `""` | |
| firefish.libreTranslate.managed | bool | `false` | | | iceshrimp.libreTranslate.managed | bool | `false` | |
| firefish.objectStorage.access_key | string | `""` | | | iceshrimp.objectStorage.access_key | string | `""` | |
| firefish.objectStorage.access_secret | string | `""` | | | iceshrimp.objectStorage.access_secret | string | `""` | |
| firefish.objectStorage.baseUrl | string | `""` | | | iceshrimp.objectStorage.baseUrl | string | `""` | |
| firefish.objectStorage.bucket | string | `""` | | | iceshrimp.objectStorage.bucket | string | `""` | |
| firefish.objectStorage.endpoint | string | `""` | | | iceshrimp.objectStorage.endpoint | string | `""` | |
| firefish.objectStorage.managed | bool | `true` | | | iceshrimp.objectStorage.managed | bool | `true` | |
| firefish.objectStorage.prefix | string | `"files"` | | | iceshrimp.objectStorage.prefix | string | `"files"` | |
| firefish.objectStorage.region | string | `""` | | | iceshrimp.objectStorage.region | string | `""` | |
| firefish.reservedUsernames[0] | string | `"root"` | | | iceshrimp.reservedUsernames[0] | string | `"root"` | |
| firefish.reservedUsernames[1] | string | `"admin"` | | | iceshrimp.reservedUsernames[1] | string | `"admin"` | |
| firefish.reservedUsernames[2] | string | `"administrator"` | | | iceshrimp.reservedUsernames[2] | string | `"administrator"` | |
| firefish.reservedUsernames[3] | string | `"me"` | | | iceshrimp.reservedUsernames[3] | string | `"me"` | |
| firefish.reservedUsernames[4] | string | `"system"` | | | iceshrimp.reservedUsernames[4] | string | `"system"` | |
| firefish.smtp.from_address | string | `"notifications@example.com"` | | | iceshrimp.smtp.from_address | string | `"notifications@example.com"` | |
| firefish.smtp.login | string | `""` | | | iceshrimp.smtp.login | string | `""` | |
| firefish.smtp.managed | bool | `true` | | | iceshrimp.smtp.managed | bool | `true` | |
| firefish.smtp.password | string | `""` | | | iceshrimp.smtp.password | string | `""` | |
| firefish.smtp.port | int | `587` | | | iceshrimp.smtp.port | int | `587` | |
| firefish.smtp.server | string | `"smtp.mailgun.org"` | | | iceshrimp.smtp.server | string | `"smtp.mailgun.org"` | |
| firefish.smtp.useImplicitSslTls | bool | `false` | | | iceshrimp.smtp.useImplicitSslTls | bool | `false` | |
| elasticsearch | object | `{"auth":{},"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters | | elasticsearch | object | `{"auth":{},"enabled":false,"hostname":"","port":9200,"ssl":false}` | https://github.com/bitnami/charts/tree/master/bitnami/elasticsearch#parameters |
| fullnameOverride | string | `""` | | | fullnameOverride | string | `""` | |
| image.pullPolicy | string | `"IfNotPresent"` | | | image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"docker.io/thatonecalculator/firefish"` | | | image.repository | string | `"iceshrimp.dev/iceshrimp/iceshrimp"` | |
| image.tag | string | `""` | | | image.tag | string | `""` | |
| imagePullSecrets | list | `[]` | | | imagePullSecrets | list | `[]` | |
| ingress.annotations | object | `{}` | | | ingress.annotations | object | `{}` | |
@ -67,9 +67,9 @@ A fun, new, open way to experience social media https://joinfirefish.org
| nodeSelector | object | `{}` | | | nodeSelector | object | `{}` | |
| podAnnotations | object | `{}` | | | podAnnotations | object | `{}` | |
| podSecurityContext | object | `{}` | | | podSecurityContext | object | `{}` | |
| postgresql.auth.database | string | `"firefish_production"` | | | postgresql.auth.database | string | `"iceshrimp_production"` | |
| postgresql.auth.password | string | `""` | | | postgresql.auth.password | string | `""` | |
| postgresql.auth.username | string | `"firefish"` | | | postgresql.auth.username | string | `"iceshrimp"` | |
| postgresql.enabled | bool | `true` | disable if you want to use an existing db; in which case the values below must match those of that external postgres instance | | postgresql.enabled | bool | `true` | disable if you want to use an existing db; in which case the values below must match those of that external postgres instance |
| redis.auth.password | string | `""` | you must set a password; the password generated by the redis chart will be rotated on each upgrade: | | redis.auth.password | string | `""` | you must set a password; the password generated by the redis chart will be rotated on each upgrade: |
| redis.enabled | bool | `true` | | | redis.enabled | bool | `true` | |

View file

@ -6,16 +6,16 @@
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- else if contains "NodePort" .Values.service.type }} {{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "firefish.fullname" . }}) export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "iceshrimp.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }} {{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available. NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "firefish.fullname" . }}' You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "iceshrimp.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "firefish.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "iceshrimp.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }} echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }} {{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "firefish.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "iceshrimp.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application" echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT

View file

@ -1,7 +1,7 @@
{{/* {{/*
Expand the name of the chart. Expand the name of the chart.
*/}} */}}
{{- define "firefish.name" -}} {{- define "iceshrimp.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }} {{- end }}
@ -10,7 +10,7 @@ Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name. If release name contains chart name it will be used as a full name.
*/}} */}}
{{- define "firefish.fullname" -}} {{- define "iceshrimp.fullname" -}}
{{- if .Values.fullnameOverride }} {{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }} {{- else }}
@ -26,16 +26,16 @@ If release name contains chart name it will be used as a full name.
{{/* {{/*
Create chart name and version as used by the chart label. Create chart name and version as used by the chart label.
*/}} */}}
{{- define "firefish.chart" -}} {{- define "iceshrimp.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }} {{- end }}
{{/* {{/*
Common labels Common labels
*/}} */}}
{{- define "firefish.labels" -}} {{- define "iceshrimp.labels" -}}
helm.sh/chart: {{ include "firefish.chart" . }} helm.sh/chart: {{ include "iceshrimp.chart" . }}
{{ include "firefish.selectorLabels" . }} {{ include "iceshrimp.selectorLabels" . }}
{{- if .Chart.AppVersion }} {{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }} {{- end }}
@ -45,17 +45,17 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
{{/* {{/*
Selector labels Selector labels
*/}} */}}
{{- define "firefish.selectorLabels" -}} {{- define "iceshrimp.selectorLabels" -}}
app.kubernetes.io/name: {{ include "firefish.name" . }} app.kubernetes.io/name: {{ include "iceshrimp.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }} {{- end }}
{{/* {{/*
Create the name of the service account to use Create the name of the service account to use
*/}} */}}
{{- define "firefish.serviceAccountName" -}} {{- define "iceshrimp.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }} {{- if .Values.serviceAccount.create }}
{{- default (include "firefish.fullname" .) .Values.serviceAccount.name }} {{- default (include "iceshrimp.fullname" .) .Values.serviceAccount.name }}
{{- else }} {{- else }}
{{- default "default" .Values.serviceAccount.name }} {{- default "default" .Values.serviceAccount.name }}
{{- end }} {{- end }}
@ -65,31 +65,31 @@ Create the name of the service account to use
Create a default fully qualified name for dependent services. Create a default fully qualified name for dependent services.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
*/}} */}}
{{- define "firefish.elasticsearch.fullname" -}} {{- define "iceshrimp.elasticsearch.fullname" -}}
{{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "elasticsearch" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{- define "firefish.redis.fullname" -}} {{- define "iceshrimp.redis.fullname" -}}
{{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "redis" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{- define "firefish.postgresql.fullname" -}} {{- define "iceshrimp.postgresql.fullname" -}}
{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{/* {{/*
config/default.yml content config/default.yml content
*/}} */}}
{{- define "firefish.configDir.default.yml" -}} {{- define "iceshrimp.configDir.default.yml" -}}
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Firefish configuration # iceshrimp configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐ # ┌─────┐
#───┘ URL └───────────────────────────────────────────────────── #───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user. # Final accessible URL seen by a user.
url: "https://{{ .Values.firefish.domain }}/" url: "https://{{ .Values.iceshrimp.domain }}/"
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE # ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT! # URL SETTINGS AFTER THAT!
@ -118,7 +118,7 @@ port: 3000
db: db:
{{- if .Values.postgresql.enabled }} {{- if .Values.postgresql.enabled }}
host: {{ template "firefish.postgresql.fullname" . }} host: {{ template "iceshrimp.postgresql.fullname" . }}
port: '5432' port: '5432'
{{- else }} {{- else }}
host: {{ .Values.postgresql.postgresqlHostname }} host: {{ .Values.postgresql.postgresqlHostname }}
@ -146,7 +146,7 @@ db:
redis: redis:
{{- if .Values.redis.enabled }} {{- if .Values.redis.enabled }}
host: {{ template "firefish.redis.fullname" . }}-master host: {{ template "iceshrimp.redis.fullname" . }}-master
{{- else }} {{- else }}
host: {{ required "When the redis chart is disabled .Values.redis.hostname is required" .Values.redis.hostname }} host: {{ required "When the redis chart is disabled .Values.redis.hostname is required" .Values.redis.hostname }}
{{- end }} {{- end }}
@ -218,7 +218,7 @@ id: 'aid'
# Reserved usernames that only the administrator can register with # Reserved usernames that only the administrator can register with
reservedUsernames: reservedUsernames:
{{ .Values.firefish.reservedUsernames | toYaml }} {{ .Values.iceshrimp.reservedUsernames | toYaml }}
# Whether disable HSTS # Whether disable HSTS
#disableHsts: true #disableHsts: true
@ -266,7 +266,7 @@ reservedUsernames:
#proxyRemoteFiles: true #proxyRemoteFiles: true
allowedPrivateNetworks: allowedPrivateNetworks:
{{ .Values.firefish.allowedPrivateNetworks | toYaml }} {{ .Values.iceshrimp.allowedPrivateNetworks | toYaml }}
# TWA # TWA
#twa: #twa:
@ -286,34 +286,34 @@ allowedPrivateNetworks:
# If you mess this up, that's on you, you've been warned... # If you mess this up, that's on you, you've been warned...
#maxUserSignups: 100 #maxUserSignups: 100
isManagedHosting: {{ .Values.firefish.isManagedHosting }} isManagedHosting: {{ .Values.iceshrimp.isManagedHosting }}
deepl: deepl:
managed: {{ .Values.firefish.deepl.managed }} managed: {{ .Values.iceshrimp.deepl.managed }}
authKey: {{ .Values.firefish.deepl.authKey | quote}} authKey: {{ .Values.iceshrimp.deepl.authKey | quote}}
isPro: {{ .Values.firefish.deepl.isPro }} isPro: {{ .Values.iceshrimp.deepl.isPro }}
libreTranslate: libreTranslate:
managed: {{ .Values.firefish.libreTranslate.managed }} managed: {{ .Values.iceshrimp.libreTranslate.managed }}
apiUrl: {{ .Values.firefish.libreTranslate.apiUrl | quote }} apiUrl: {{ .Values.iceshrimp.libreTranslate.apiUrl | quote }}
apiKey: {{ .Values.firefish.libreTranslate.apiKey | quote }} apiKey: {{ .Values.iceshrimp.libreTranslate.apiKey | quote }}
email: email:
managed: {{ .Values.firefish.smtp.managed }} managed: {{ .Values.iceshrimp.smtp.managed }}
address: {{ .Values.firefish.smtp.from_address | quote }} address: {{ .Values.iceshrimp.smtp.from_address | quote }}
host: {{ .Values.firefish.smtp.server | quote }} host: {{ .Values.iceshrimp.smtp.server | quote }}
port: {{ .Values.firefish.smtp.port }} port: {{ .Values.iceshrimp.smtp.port }}
user: {{ .Values.firefish.smtp.login | quote }} user: {{ .Values.iceshrimp.smtp.login | quote }}
pass: {{ .Values.firefish.smtp.password | quote }} pass: {{ .Values.iceshrimp.smtp.password | quote }}
useImplicitSslTls: {{ .Values.firefish.smtp.useImplicitSslTls }} useImplicitSslTls: {{ .Values.iceshrimp.smtp.useImplicitSslTls }}
objectStorage: objectStorage:
managed: {{ .Values.firefish.objectStorage.managed }} managed: {{ .Values.iceshrimp.objectStorage.managed }}
baseUrl: {{ .Values.firefish.objectStorage.baseUrl | quote }} baseUrl: {{ .Values.iceshrimp.objectStorage.baseUrl | quote }}
bucket: {{ .Values.firefish.objectStorage.bucket | quote }} bucket: {{ .Values.iceshrimp.objectStorage.bucket | quote }}
prefix: {{ .Values.firefish.objectStorage.prefix | quote }} prefix: {{ .Values.iceshrimp.objectStorage.prefix | quote }}
endpoint: {{ .Values.firefish.objectStorage.endpoint | quote }} endpoint: {{ .Values.iceshrimp.objectStorage.endpoint | quote }}
region: {{ .Values.firefish.objectStorage.region | quote }} region: {{ .Values.iceshrimp.objectStorage.region | quote }}
accessKey: {{ .Values.firefish.objectStorage.access_key | quote }} accessKey: {{ .Values.iceshrimp.objectStorage.access_key | quote }}
secretKey: {{ .Values.firefish.objectStorage.access_secret | quote }} secretKey: {{ .Values.iceshrimp.objectStorage.access_secret | quote }}
useSsl: true useSsl: true
connnectOverProxy: false connnectOverProxy: false
setPublicReadOnUpload: true setPublicReadOnUpload: true

View file

@ -1,16 +1,16 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: {{ include "firefish.fullname" . }} name: {{ include "iceshrimp.fullname" . }}
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
spec: spec:
{{- if not .Values.autoscaling.enabled }} {{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }} replicas: {{ .Values.replicaCount }}
{{- end }} {{- end }}
selector: selector:
matchLabels: matchLabels:
{{- include "firefish.selectorLabels" . | nindent 6 }} {{- include "iceshrimp.selectorLabels" . | nindent 6 }}
template: template:
metadata: metadata:
annotations: annotations:
@ -19,19 +19,19 @@ spec:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
labels: labels:
{{- include "firefish.selectorLabels" . | nindent 8 }} {{- include "iceshrimp.selectorLabels" . | nindent 8 }}
spec: spec:
{{- with .Values.imagePullSecrets }} {{- with .Values.imagePullSecrets }}
imagePullSecrets: imagePullSecrets:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
serviceAccountName: {{ include "firefish.serviceAccountName" . }} serviceAccountName: {{ include "iceshrimp.serviceAccountName" . }}
securityContext: securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }} {{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes: volumes:
- name: config-volume - name: config-volume
secret: secret:
secretName: {{ template "firefish.fullname" . }}-config secretName: {{ template "iceshrimp.fullname" . }}-config
containers: containers:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
securityContext: securityContext:
@ -47,7 +47,7 @@ spec:
value: "production" value: "production"
volumeMounts: volumeMounts:
- name: config-volume - name: config-volume
mountPath: /firefish/.config mountPath: /iceshrimp/.config
ports: ports:
- name: http - name: http
containerPort: 3000 containerPort: 3000

View file

@ -2,14 +2,14 @@
apiVersion: autoscaling/v2beta1 apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler kind: HorizontalPodAutoscaler
metadata: metadata:
name: {{ include "firefish.fullname" . }} name: {{ include "iceshrimp.fullname" . }}
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
spec: spec:
scaleTargetRef: scaleTargetRef:
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
name: {{ include "firefish.fullname" . }} name: {{ include "iceshrimp.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }} minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }} maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics: metrics:

View file

@ -1,5 +1,5 @@
{{- if .Values.ingress.enabled -}} {{- if .Values.ingress.enabled -}}
{{- $fullName := include "firefish.fullname" . -}} {{- $fullName := include "iceshrimp.fullname" . -}}
{{- $svcPort := .Values.service.port -}} {{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} {{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
@ -17,7 +17,7 @@ kind: Ingress
metadata: metadata:
name: {{ $fullName }} name: {{ $fullName }}
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }} {{- with .Values.ingress.annotations }}
annotations: annotations:
{{- toYaml . | nindent 4 }} {{- toYaml . | nindent 4 }}

View file

@ -1,9 +1,9 @@
apiVersion: batch/v1 apiVersion: batch/v1
kind: Job kind: Job
metadata: metadata:
name: {{ include "firefish.fullname" . }}-db-migrate name: {{ include "iceshrimp.fullname" . }}-db-migrate
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
annotations: annotations:
"helm.sh/hook": post-install,pre-upgrade "helm.sh/hook": post-install,pre-upgrade
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
@ -11,7 +11,7 @@ metadata:
spec: spec:
template: template:
metadata: metadata:
name: {{ include "firefish.fullname" . }}-db-migrate name: {{ include "iceshrimp.fullname" . }}-db-migrate
{{- with .Values.podAnnotations }} {{- with .Values.podAnnotations }}
annotations: annotations:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
@ -22,13 +22,13 @@ spec:
imagePullSecrets: imagePullSecrets:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
serviceAccountName: {{ include "firefish.serviceAccountName" . }} serviceAccountName: {{ include "iceshrimp.serviceAccountName" . }}
securityContext: securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }} {{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes: volumes:
- name: config-volume - name: config-volume
secret: secret:
secretName: {{ template "firefish.fullname" . }}-config secretName: {{ template "iceshrimp.fullname" . }}-config
containers: containers:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
securityContext: securityContext:
@ -44,7 +44,7 @@ spec:
value: "production" value: "production"
volumeMounts: volumeMounts:
- name: config-volume - name: config-volume
mountPath: /firefish/.config mountPath: /iceshrimp/.config
{{- with .Values.nodeSelector }} {{- with .Values.nodeSelector }}
nodeSelector: nodeSelector:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}

View file

@ -1,9 +1,9 @@
apiVersion: v1 apiVersion: v1
kind: Secret kind: Secret
metadata: metadata:
name: {{ template "firefish.fullname" . }}-config name: {{ template "iceshrimp.fullname" . }}-config
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
type: Opaque type: Opaque
data: data:
default.yml: {{ include "firefish.configDir.default.yml" . | b64enc }} default.yml: {{ include "iceshrimp.configDir.default.yml" . | b64enc }}

View file

@ -1,9 +1,9 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: {{ include "firefish.fullname" . }} name: {{ include "iceshrimp.fullname" . }}
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
spec: spec:
type: {{ .Values.service.type }} type: {{ .Values.service.type }}
ports: ports:
@ -12,4 +12,4 @@ spec:
protocol: TCP protocol: TCP
name: http name: http
selector: selector:
{{- include "firefish.selectorLabels" . | nindent 4 }} {{- include "iceshrimp.selectorLabels" . | nindent 4 }}

View file

@ -2,9 +2,9 @@
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: {{ include "firefish.serviceAccountName" . }} name: {{ include "iceshrimp.serviceAccountName" . }}
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }} {{- with .Values.serviceAccount.annotations }}
annotations: annotations:
{{- toYaml . | nindent 4 }} {{- toYaml . | nindent 4 }}

View file

@ -1,9 +1,9 @@
apiVersion: v1 apiVersion: v1
kind: Pod kind: Pod
metadata: metadata:
name: "{{ include "firefish.fullname" . }}-test-connection" name: "{{ include "iceshrimp.fullname" . }}-test-connection"
labels: labels:
{{- include "firefish.labels" . | nindent 4 }} {{- include "iceshrimp.labels" . | nindent 4 }}
annotations: annotations:
"helm.sh/hook": test "helm.sh/hook": test
spec: spec:
@ -11,5 +11,5 @@ spec:
- name: wget - name: wget
image: busybox image: busybox
command: ['wget'] command: ['wget']
args: ['{{ include "firefish.fullname" . }}:{{ .Values.service.port }}'] args: ['{{ include "iceshrimp.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never restartPolicy: Never

View file

@ -1,18 +1,18 @@
# Default values for firefish. # Default values for iceshrimp.
# This is a YAML-formatted file. # This is a YAML-formatted file.
# Declare variables to be passed into your templates. # Declare variables to be passed into your templates.
replicaCount: 1 replicaCount: 1
image: image:
repository: docker.io/thatonecalculator/firefish repository: docker.io/thatonecalculator/iceshrimp
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion. # Overrides the image tag whose default is the chart appVersion.
tag: "" tag: ""
firefish: iceshrimp:
isManagedHosting: true isManagedHosting: true
domain: firefish.local domain: iceshrimp.local
deepl: deepl:
managed: false managed: false
@ -43,7 +43,7 @@ firefish:
endpoint: "" # e.g. "nyc3.digitaloceanspaces.com:443" endpoint: "" # e.g. "nyc3.digitaloceanspaces.com:443"
region: "" # e.g. "nyc3" region: "" # e.g. "nyc3"
# -- If you want to allow firefish to connect to private ips, enter the cidrs here. # -- If you want to allow iceshrimp to connect to private ips, enter the cidrs here.
allowedPrivateNetworks: [] allowedPrivateNetworks: []
# - "10.0.0.0/8" # - "10.0.0.0/8"
@ -62,8 +62,8 @@ postgresql:
# postgresqlHostname: preexisting-postgresql # postgresqlHostname: preexisting-postgresql
# postgresqlPort: 5432 # postgresqlPort: 5432
auth: auth:
database: firefish_production database: iceshrimp_production
username: firefish username: iceshrimp
# you must set a password; the password generated by the postgresql chart will # you must set a password; the password generated by the postgresql chart will
# be rotated on each upgrade: # be rotated on each upgrade:
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade # https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade

View file

@ -4,7 +4,7 @@
# changelog header # changelog header
header = """ header = """
# Changelog\n # Changelog\n
All changes from v13.0.0 onwards, for a list of differences read FIREFISH.md\n All changes from v13.0.0 onwards, for a list of differences read CHANGES_FROM_UPSTREAM.md\n
""" """
# template for the changelog body # template for the changelog body
# https://tera.netlify.app/docs/#introduction # https://tera.netlify.app/docs/#introduction

View file

@ -1,4 +1,4 @@
Copyright 2023 Firefish Copyright 2023 The Iceshrimp contributors
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

View file

@ -2,9 +2,9 @@ version: "3"
services: services:
web: web:
image: docker.io/thatonecalculator/firefish image: iceshrimp.dev/iceshrimp/iceshrimp:dev
build: .. build: ..
container_name: firefish_web container_name: iceshrimp_web
restart: always restart: always
depends_on: depends_on:
- db - db
@ -16,12 +16,12 @@ services:
- network - network
# - web # - web
volumes: volumes:
- ../files:/firefish/files - ../files:/iceshrimp/files
- ../.config:/firefish/.config:ro - ../.config:/iceshrimp/.config:ro
redis: redis:
restart: always restart: always
container_name: firefish_redis container_name: iceshrimp_redis
image: docker.io/redis:7.0-alpine image: docker.io/redis:7.0-alpine
networks: networks:
- network - network
@ -31,7 +31,7 @@ services:
db: db:
restart: always restart: always
image: docker.io/postgres:12.2-alpine image: docker.io/postgres:12.2-alpine
container_name: firefish_db container_name: iceshrimp_db
networks: networks:
- network - network
env_file: env_file:

View file

@ -1,5 +1,5 @@
# API Documentation # API Documentation
You can find interactive API documentation at any Firefish instance. https://firefish.social/api-doc You can find interactive API documentation at any Iceshrimp instance. https://iceshrimp.social/api-doc
You can also find auto-generated documentation for iceshrimp-js [here](../packages/iceshrimp-js/markdown/iceshrimp-js.md). You can also find auto-generated documentation for iceshrimp-js [here](../packages/iceshrimp-js/markdown/iceshrimp-js.md).

View file

@ -1,7 +1,7 @@
# 🌎 Firefish Developer Docs # 🌎 Iceshrimp Developer Docs
## Nix Dev Environment ## Nix Dev Environment
The Firefish repo comes with a Nix-based shell environment to help make development as easy as possible! The Iceshrimp repo comes with a Nix-based shell environment to help make development as easy as possible!
Please note, however, that this environment will not work on Windows outside of a WSL2 environment. Please note, however, that this environment will not work on Windows outside of a WSL2 environment.
@ -10,12 +10,12 @@ Please note, however, that this environment will not work on Windows outside of
- Installed the [Nix Package Manager](https://nixos.org/download.html) (use the comman on their website) - Installed the [Nix Package Manager](https://nixos.org/download.html) (use the comman on their website)
- Installed [direnv](https://direnv.net/docs/installation.html) and added its hook to your shell. (package manager) - Installed [direnv](https://direnv.net/docs/installation.html) and added its hook to your shell. (package manager)
Once the repo is cloned to your computer, follow these next few steps inside the Firefish folder: Once the repo is cloned to your computer, follow these next few steps inside the Iceshrimp folder:
- Run `direnv allow`. This will build the environment and install all needed tools. - Run `direnv allow`. This will build the environment and install all needed tools.
- Run `install-deps`, then `prepare-config`, to install the node dependencies and prepare the needed config files. - Run `install-deps`, then `prepare-config`, to install the node dependencies and prepare the needed config files.
- In a second terminal, run `devenv up`. This will spawn a **Redis** server, a **Postgres** server, and the **Firefish** server in dev mode. - In a second terminal, run `devenv up`. This will spawn a **Redis** server, a **Postgres** server, and the **Iceshrimp** server in dev mode.
- Once you see the Firefish banner printed in your second terminal, run `migrate` in the first. - Once you see the Iceshrimp banner printed in your second terminal, run `migrate` in the first.
- Once migrations finish, open http://localhost:3000 in your web browser. - Once migrations finish, open http://localhost:3000 in your web browser.
- You should now see the admin user creation screen! - You should now see the admin user creation screen!
@ -40,7 +40,7 @@ delete `flake.lock`, or better, run `nix flake update --extra-experimental-featu
after that, run `direnv rebuild` after that, run `direnv rebuild`
if there are any errors, you might have to change `flake.nix` if there are any errors, you might have to change `flake.nix`
(because the available options can change between versions - consider getting support in [the matrix channel](https://matrix.to/#/#firefish:matrix.fedibird.com)) (because the available options can change between versions - consider getting support in [the matrix channel](https://matrix.to/#/%23iceshrimp-dev:161.rocks))
### after changing a node version ### after changing a node version
in my case, i had to change the node version from 19, to 18 in my case, i had to change the node version from 19, to 18
@ -66,18 +66,18 @@ devenv up may take a looong time. (some say this is fake news, maybe it was bad
do not get spooked by this error: do not get spooked by this error:
``` ```
> firefish@14.0.0-dev32 start /mnt/.../firefish > iceshrimp@14.0.0-dev32 start /mnt/.../iceshrimp
> pnpm --filter backend run start > pnpm --filter backend run start
> backend@ start /mnt/.../firefish/packages/backend > backend@ start /mnt/.../iceshrimp/packages/backend
> pnpm node ./built/index.js > pnpm node ./built/index.js
node:internal/modules/cjs/loader:1078 node:internal/modules/cjs/loader:1078
throw err; throw err;
^ ^
Error: Cannot find module '/mnt/.../firefish/packages/backend/built/index.js' Error: Cannot find module '/mnt/.../iceshrimp/packages/backend/built/index.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15) at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27) at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
@ -88,7 +88,7 @@ Error: Cannot find module '/mnt/.../firefish/packages/backend/built/index.js'
Node.js v18.16.0 Node.js v18.16.0
undefined undefined
/mnt/.../firefish/packages/backend: /mnt/.../iceshrimp/packages/backend:
ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL backend@ start: `pnpm node ./built/index.js` ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL backend@ start: `pnpm node ./built/index.js`
Exit status 1 Exit status 1
ELIFECYCLE Command failed with exit code 1. ELIFECYCLE Command failed with exit code 1.
@ -97,7 +97,7 @@ Exit status 1
the script is designed to constantly try to start the server, while the build is still running. the script is designed to constantly try to start the server, while the build is still running.
this just means that the build isn't finished yet. this just means that the build isn't finished yet.
at some point you should see a banner that says "Firefish" in big letters - at some point you should see a banner that says "Iceshrimp" in big letters -
then you're good to go and can run `migrate` (in another terminal)! then you're good to go and can run `migrate` (in another terminal)!
if you don't see the banner, if you don't see the banner,

View file

@ -1,14 +1,14 @@
# 🐳 Running a Firefish server with Docker # 🐳 Running a Iceshrimp server with Docker
## Pre-built docker container ## Pre-built docker container
[thatonecalculator/firefish](https://hub.docker.com/r/thatonecalculator/firefish) [iceshrimp/iceshrimp](iceshrimp.dev/iceshrimp/iceshrimp)
## `docker-compose` ## `docker-compose`
There is a `docker-compose.yml` in the root of the project that you can use to build the container from source There is a `docker-compose.yml` in the root of the project that you can use to build the container from source
- .config/docker.env (**db config settings**) - .config/docker.env (**db config settings**)
- .config/default.yml (**firefish server settings**) - .config/default.yml (**Iceshrimp server settings**)
## Configuring ## Configuring
@ -21,22 +21,22 @@ Rename the files:
then edit them according to your environment. then edit them according to your environment.
You can configure `docker.env` with anything you like, but you will have to pay attention to the `default.yml` file: You can configure `docker.env` with anything you like, but you will have to pay attention to the `default.yml` file:
- `url` should be set to the URL you will be hosting the web interface for the server at. - `url` should be set to the URL you will be hosting the web interface for the server at.
- `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *firefish_db_1*), and the others should match your `docker.env`. - `host`, `db`, `user`, `pass` will have to be configured in the `PostgreSQL configuration` section - `host` is the name of the postgres container (eg: *iceshrimp_db_1*), and the others should match your `docker.env`.
- `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *firefish_redis_1*) - `host`will need to be configured in the *Redis configuration* section - it is the name of the redis container (eg: *iceshrimp_redis_1*)
- `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword` - `auth` will need to be configured in the *Sonic* section - cannot be the default `SecretPassword`
Everything else can be left as-is. Everything else can be left as-is.
## Running docker-compose ## Running docker-compose
The [prebuilt container for firefish](https://hub.docker.com/r/thatonecalculator/firefish) is fairly large, and may take a few minutes to download and extract using docker. The [prebuilt container for iceshrimp](https://iceshrimp.dev/iceshrimp/-/packages/container/iceshrimp/latest) is fairly large, and may take a few minutes to download and extract using docker.
Copy `docker-compose.yml` and the `config/` to a directory, then run the **docker-compose** command: Copy `docker-compose.yml` and the `config/` to a directory, then run the **docker-compose** command:
`docker-compose up -d`. `docker-compose up -d`.
NOTE: This will take some time to come fully online, even after download and extracting the container images, and it may emit some error messages before completing successfully. Specifically, the `db` container needs to initialize and so isn't available to the `web` container right away. Only once the `db` container comes online does the `web` container start building and initializing the firefish tables. NOTE: This will take some time to come fully online, even after download and extracting the container images, and it may emit some error messages before completing successfully. Specifically, the `db` container needs to initialize and so isn't available to the `web` container right away. Only once the `db` container comes online does the `web` container start building and initializing the Iceshrimp tables.
Once the server is up you can use a web browser to access the web interface at `http://serverip:3000` (where `serverip` is the IP of the server you are running the firefish server on). Once the server is up you can use a web browser to access the web interface at `http://serverip:3000` (where `serverip` is the IP of the server you are running the Iceshrimp server on).
## Docker for development ## Docker for development

View file

@ -1,7 +1,7 @@
# Running a Firefish server with Kubernetes and Helm # Running a iceshrimp server with Kubernetes and Helm
This is a [Helm](https://helm.sh/) chart directory in the root of the project This is a [Helm](https://helm.sh/) chart directory in the root of the project
that you can use to deploy firefish to a Kubernetes cluster that you can use to deploy iceshrimp to a Kubernetes cluster
## Deployment ## Deployment
@ -17,29 +17,29 @@ helm dependency list $dir 2> /dev/null | tail +2 | head -n -1 | awk '{ print "he
cd ../ cd ../
``` ```
3. Create the firefish helm release (also used to update existing deployment): 3. Create the iceshrimp helm release (also used to update existing deployment):
```shell ```shell
helm upgrade \ helm upgrade \
--install \ --install \
--namespace firefish \ --namespace iceshrimp \
--create-namespace \ --create-namespace \
firefish chart/ \ iceshrimp chart/ \
-f .config/helm_values.yml -f .config/helm_values.yml
``` ```
4. Watch your firefish server spin up: 4. Watch your iceshrimp server spin up:
```shell ```shell
kubectl -n firefish get po -w kubectl -n iceshrimp get po -w
``` ```
5. Initial the admin user and managed config: 5. Initial the admin user and managed config:
```shell ```shell
export firefish_USERNAME="my_desired_admin_handle" && \ export iceshrimp_USERNAME="my_desired_admin_handle" && \
export firefish_PASSWORD="myDesiredInitialPassword" && \ export iceshrimp_PASSWORD="myDesiredInitialPassword" && \
export firefish_HOST="firefish.example.com" && \ export iceshrimp_HOST="iceshrimp.example.com" && \
export firefish_TOKEN=$(curl -X POST https://$firefish_HOST/api/admin/accounts/create -H "Content-Type: application/json" -d "{ \"username\":\"$firefish_USERNAME\", \"password\":\"$firefish_PASSWORD\" }" | jq -r '.token') && \ export iceshrimp_TOKEN=$(curl -X POST https://$iceshrimp_HOST/api/admin/accounts/create -H "Content-Type: application/json" -d "{ \"username\":\"$iceshrimp_USERNAME\", \"password\":\"$iceshrimp_PASSWORD\" }" | jq -r '.token') && \
echo "Save this token: ${firefish_TOKEN}" && \ echo "Save this token: ${iceshrimp_TOKEN}" && \
curl -X POST -H "Authorization: Bearer $firefish_TOKEN" https://$firefish_HOST/api/admin/accounts/hosted curl -X POST -H "Authorization: Bearer $iceshrimp_TOKEN" https://$iceshrimp_HOST/api/admin/accounts/hosted
``` ```
6. Enjoy! 6. Enjoy!

View file

@ -1,4 +1,4 @@
# 🚚 Migrating from Misskey/FoundKey to Firefish # 🚚 Migrating from Misskey/FoundKey to Iceshrimp
All the guides below assume you're starting in the root of the repo directory. All the guides below assume you're starting in the root of the repo directory.
@ -14,8 +14,8 @@ Tested with Misskey v13.11.3.
If your Misskey v13 is older, we recommend updating your Misskey to v13.11.3. If your Misskey v13 is older, we recommend updating your Misskey to v13.11.3.
```sh ```sh
wget -O mkv13.patch https://codeberg.org/firefish/firefish/raw/branch/develop/docs/mkv13.patch wget -O mkv13.patch https://iceshrimp.dev/iceshrimp/iceshrimp/raw/branch/dev/docs/mkv13.patch
wget -O mkv13_restore.patch https://codeberg.org/firefish/firefish/raw/branch/develop/docs/mkv13_restore.patch wget -O mkv13_restore.patch https://iceshrimp.dev/iceshrimp/iceshrimp/raw/branch/dev/docs/mkv13_restore.patch
git apply mkv13.patch mkv13_restore.patch git apply mkv13.patch mkv13_restore.patch
cd packages/backend cd packages/backend
@ -27,13 +27,13 @@ for i in $(seq 1 $NUM_MIGRATIONS); do pnpm typeorm migration:revert -d ormconfig
cd ../../ cd ../../
git remote set-url origin https://codeberg.org/firefish/firefish.git git remote set-url origin https://iceshrimp.dev/iceshrimp/iceshrimp.git
git fetch origin git fetch origin
git stash push git stash push
rm -rf fluent-emojis misskey-assets rm -rf fluent-emojis misskey-assets
git switch main # or beta or develop git switch main # or beta or develop
git pull --ff git pull --ff
wget -O renote_muting.patch https://codeberg.org/firefish/firefish/raw/branch/develop/docs/renote_muting.patch wget -O renote_muting.patch https://iceshrimp.dev/iceshrimp/iceshrimp/raw/branch/dev/docs/renote_muting.patch
git apply renote_muting.patch git apply renote_muting.patch
pnpm install pnpm install
@ -60,16 +60,16 @@ ALTER TABLE "instance" ADD COLUMN "latestStatus" character varying(512);
ALTER TABLE "instance" ADD COLUMN "lastCommunicatedAt" date; ALTER TABLE "instance" ADD COLUMN "lastCommunicatedAt" date;
``` ```
then quit with `\q`, and restart Firefish. then quit with `\q`, and restart Iceshrimp.
Note: Ignore errors of `column "xxx" of relation "xxx" already exists`. Note: Ignore errors of `column "xxx" of relation "xxx" already exists`.
If no other errors happened, your Firefish is ready to launch! If no other errors happened, your Iceshrimp is ready to launch!
## Misskey v12.119 and before ## Misskey v12.119 and before
```sh ```sh
git remote set-url origin https://codeberg.org/firefish/firefish.git git remote set-url origin https://iceshrimp.dev/iceshrimp/iceshrimp.git
git fetch git fetch
git checkout main # or beta or develop git checkout main # or beta or develop
git pull --ff git pull --ff
@ -81,7 +81,7 @@ NODE_ENV=production pnpm run migrate
## FoundKey ## FoundKey
```sh ```sh
wget -O fk.patch https://codeberg.org/firefish/firefish/raw/branch/develop/docs/fk.patch wget -O fk.patch https://iceshrimp.dev/iceshrimp/iceshrimp/raw/branch/dev/docs/fk.patch
git apply fk.patch git apply fk.patch
cd packages/backend cd packages/backend
@ -92,9 +92,9 @@ for i in $(seq 1 $NUM_MIGRATIONS); do
npx typeorm migration:revert -d ormconfig.js npx typeorm migration:revert -d ormconfig.js
done done
git remote set-url origin https://codeberg.org/firefish/firefish.git git remote set-url origin https://iceshrimp.dev/iceshrimp/iceshrimp.git
git fetch git fetch
git checkout main # or beta or develop git checkout main # or dev
git pull --ff git pull --ff
NODE_ENV=production pnpm run migrate NODE_ENV=production pnpm run migrate
@ -103,4 +103,4 @@ NODE_ENV=production pnpm run migrate
## Reverse ## Reverse
You ***cannot*** migrate back to Misskey from Firefish due to re-hashing passwords on signin with argon2. You can migrate from Calckey to FoundKey, although this is not recommended due to FoundKey being end-of-life, and may have some problems with alt-text. You ***cannot*** migrate back to Misskey from Iceshrimp due to re-hashing passwords on signin with argon2. You can migrate from Iceshrimp to FoundKey, although this is not recommended due to FoundKey being end-of-life, and may have some problems with alt-text.

View file

@ -1,5 +1,5 @@
{ {
description = "Firefish development flake"; description = "Iceshrimp development flake";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";

View file

@ -1,6 +1,6 @@
# 📦 Packages # 📦 Packages
This directory contains all of the packages Firefish uses. This directory contains all of the packages Iceshrimp uses.
- `backend`: Main backend code written in TypeScript for NodeJS - `backend`: Main backend code written in TypeScript for NodeJS
- `backend/native-utils`: Backend code written in Rust, bound to NodeJS by [NAPI-RS](https://napi.rs/) - `backend/native-utils`: Backend code written in Rust, bound to NodeJS by [NAPI-RS](https://napi.rs/)

View file

@ -1,4 +1,4 @@
Copyright 2023 Firefish Copyright 2023 The Iceshrimp contributors
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.

BIN
packages/backend/assets/splash.svg (Stored with Git LFS)

Binary file not shown.

View file

@ -8,7 +8,7 @@ static CHAR_COLLECTION: &str = "0123456789abcdefghijklmnopqrstuvwxyz";
#[napi] #[napi]
pub enum IdConvertType { pub enum IdConvertType {
MastodonId, MastodonId,
FirefishId, IceshrimpId,
} }
#[napi] #[napi]
@ -23,7 +23,7 @@ pub fn convert_id(in_id: String, id_convert_type: IdConvertType) -> napi::Result
Ok(out.to_string()) Ok(out.to_string())
} }
FirefishId => { IceshrimpId => {
let mut input: i128 = match in_id.parse() { let mut input: i128 = match in_id.parse() {
Ok(s) => s, Ok(s) => s,
Err(_) => { Err(_) => {

View file

@ -53,7 +53,7 @@ export default function load() {
mixin.apiUrl = `${mixin.scheme}://${mixin.host}/api`; mixin.apiUrl = `${mixin.scheme}://${mixin.host}/api`;
mixin.authUrl = `${mixin.scheme}://${mixin.host}/auth`; mixin.authUrl = `${mixin.scheme}://${mixin.host}/auth`;
mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`; mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`;
mixin.userAgent = `Firefish/${meta.version} (${config.url})`; mixin.userAgent = `Iceshrimp/${meta.version} (${config.url})`;
mixin.clientEntry = clientManifest["src/init.ts"]; mixin.clientEntry = clientManifest["src/init.ts"];
if (!config.redis.prefix) config.redis.prefix = mixin.hostname; if (!config.redis.prefix) config.redis.prefix = mixin.hostname;

View file

@ -18,8 +18,8 @@ export function metaToPugArgs(meta: Meta): object {
return { return {
img: meta.bannerUrl, img: meta.bannerUrl,
title: meta.name || "Firefish", title: meta.name || "Iceshrimp",
instanceName: meta.name || "Firefish", instanceName: meta.name || "Iceshrimp",
desc: meta.description, desc: meta.description,
icon: meta.iconUrl, icon: meta.iconUrl,
splashIcon: splashIconUrl, splashIcon: splashIconUrl,

View file

@ -436,14 +436,14 @@ export class Meta {
@Column("varchar", { @Column("varchar", {
length: 512, length: 512,
default: "https://codeberg.org/firefish/firefish", default: "https://iceshrimp.dev/iceshrimp/iceshrimp",
nullable: false, nullable: false,
}) })
public repositoryUrl: string; public repositoryUrl: string;
@Column("varchar", { @Column("varchar", {
length: 512, length: 512,
default: "https://codeberg.org/firefish/firefish/issues/new", default: "https://iceshrimp.dev/iceshrimp/iceshrimp/issues/new",
nullable: true, nullable: true,
}) })
public feedbackUrl: string | null; public feedbackUrl: string | null;

View file

@ -19,7 +19,7 @@ export const packedFederationInstanceSchema = {
type: "string", type: "string",
optional: false, optional: false,
nullable: false, nullable: false,
example: "firefish.example.com", example: "iceshrimp.example.com",
}, },
accountDomain: { accountDomain: {
type: "string", type: "string",
@ -83,7 +83,7 @@ export const packedFederationInstanceSchema = {
type: "string", type: "string",
optional: false, optional: false,
nullable: true, nullable: true,
example: "firefish", example: "iceshrimp",
}, },
softwareVersion: { softwareVersion: {
type: "string", type: "string",

View file

@ -5,7 +5,7 @@ export const packedHashtagSchema = {
type: "string", type: "string",
optional: false, optional: false,
nullable: false, nullable: false,
example: "firefish", example: "iceshrimp",
}, },
mentionedUsersCount: { mentionedUsersCount: {
type: "number", type: "number",

View file

@ -16,10 +16,10 @@ export default async (job: Bull.Job<WebhookDeliverJobData>) => {
url: job.data.to, url: job.data.to,
method: "POST", method: "POST",
headers: { headers: {
"User-Agent": "Firefish-Hooks", "User-Agent": "Iceshrimp-Hooks",
"X-Firefish-Host": config.host, "X-Iceshrimp-Host": config.host,
"X-Firefish-Hook-Id": job.data.webhookId, "X-Iceshrimp-Hook-Id": job.data.webhookId,
"X-Firefish-Hook-Secret": job.data.secret, "X-Iceshrimp-Hook-Secret": job.data.secret,
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify({ body: JSON.stringify({

View file

@ -68,8 +68,8 @@ export async function createImage(
/** /**
* Resolve Image. * Resolve Image.
* *
* If the target Image is registered in Firefish, return it, otherwise * If the target Image is registered in Iceshrimp, return it, otherwise
* Fetch from remote server, register with Firefish and return it. * Fetch from remote server, register with Iceshrimp and return it.
*/ */
export async function resolveImage( export async function resolveImage(
actor: CacheableRemoteUser, actor: CacheableRemoteUser,

View file

@ -92,7 +92,7 @@ export function validateNote(object: any, uri: string) {
/** /**
* Fetch Notes. * Fetch Notes.
* *
* If the target Note is registered in Firefish, it will be returned. * If the target Note is registered in Iceshrimp, it will be returned.
*/ */
export async function fetchNote( export async function fetchNote(
object: string | IObject, object: string | IObject,
@ -397,8 +397,8 @@ export async function createNote(
/** /**
* Resolve Note. * Resolve Note.
* *
* If the target Note is registered in Firefish, return it, otherwise * If the target Note is registered in Iceshrimp, return it, otherwise
* Fetch from remote server, register with Firefish and return it. * Fetch from remote server, register with Iceshrimp and return it.
*/ */
export async function resolveNote( export async function resolveNote(
value: string | IObject, value: string | IObject,

View file

@ -127,7 +127,7 @@ function validateActor(x: IObject, uri: string): IActor {
/** /**
* Fetch a Person. * Fetch a Person.
* *
* If the target Person is registered in Firefish, it will be returned. * If the target Person is registered in Iceshrimp, it will be returned.
*/ */
export async function fetchPerson( export async function fetchPerson(
uri: string, uri: string,
@ -378,7 +378,7 @@ export async function createPerson(
/** /**
* Update Person data from remote. * Update Person data from remote.
* If the target Person is not registered in Firefish, it is ignored. * If the target Person is not registered in Iceshrimp, it is ignored.
* @param uri URI of Person * @param uri URI of Person
* @param resolver Resolver * @param resolver Resolver
* @param hint Hint of Person object (If this value is a valid Person, it is used for updating without Remote resolve) * @param hint Hint of Person object (If this value is a valid Person, it is used for updating without Remote resolve)
@ -564,8 +564,8 @@ export async function updatePerson(
/** /**
* Resolve Person. * Resolve Person.
* *
* If the target person is registered in Firefish, it returns it; * If the target person is registered in Iceshrimp, it returns it;
* otherwise, it fetches it from the remote server, registers it in Firefish, and returns it. * otherwise, it fetches it from the remote server, registers it in Iceshrimp, and returns it.
*/ */
export async function resolvePerson( export async function resolvePerson(
uri: string, uri: string,

View file

@ -337,7 +337,7 @@ import * as ep___users_stats from "./endpoints/users/stats.js";
import * as ep___fetchRss from "./endpoints/fetch-rss.js"; import * as ep___fetchRss from "./endpoints/fetch-rss.js";
import * as ep___admin_driveCapOverride from "./endpoints/admin/drive-capacity-override.js"; import * as ep___admin_driveCapOverride from "./endpoints/admin/drive-capacity-override.js";
//Firefish Move //Iceshrimp Move
import * as ep___i_move from "./endpoints/i/move.js"; import * as ep___i_move from "./endpoints/i/move.js";
import * as ep___i_known_as from "./endpoints/i/known-as.js"; import * as ep___i_known_as from "./endpoints/i/known-as.js";

View file

@ -16,7 +16,7 @@ export const paramDef = {
export default define(meta, paramDef, async () => { export default define(meta, paramDef, async () => {
let tag_name; let tag_name;
await fetch( await fetch(
"https://codeberg.org/api/v1/repos/firefish/firefish/releases?draft=false&pre-release=false&page=1&limit=1", "https://iceshrimp.dev/api/v1/repos/iceshrimp/iceshrimp/releases?draft=false&pre-release=false&page=1&limit=1",
) )
.then((response) => response.json()) .then((response) => response.json())
.then((data) => { .then((data) => {

View file

@ -42,7 +42,7 @@ export const meta = {
optional: false, optional: false,
nullable: false, nullable: false,
format: "url", format: "url",
example: "https://firefish.example.com", example: "https://iceshrimp.example.com",
}, },
description: { description: {
type: "string", type: "string",
@ -68,13 +68,13 @@ export const meta = {
type: "string", type: "string",
optional: false, optional: false,
nullable: false, nullable: false,
default: "https://codeberg.org/firefish/firefish", default: "https://iceshrimp.dev/iceshrimp/iceshrimp",
}, },
feedbackUrl: { feedbackUrl: {
type: "string", type: "string",
optional: false, optional: false,
nullable: false, nullable: false,
default: "https://codeberg.org/firefish/firefish/issues", default: "https://iceshrimp.dev/iceshrimp/iceshrimp/issues",
}, },
defaultDarkTheme: { defaultDarkTheme: {
type: "string", type: "string",

View file

@ -18,7 +18,7 @@ export default define(meta, paramDef, async () => {
let release; let release;
await fetch( await fetch(
"https://codeberg.org/firefish/firefish/raw/branch/develop/release.json", "https://iceshrimp.dev/iceshrimp/iceshrimp/raw/branch/dev/release.json",
) )
.then((response) => response.json()) .then((response) => response.json())
.then((data) => { .then((data) => {

View file

@ -103,7 +103,7 @@ export function apiMastodonCompatible(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.dismissInstanceAnnouncement( const data = await client.dismissInstanceAnnouncement(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data; ctx.body = data.data;
} catch (e: any) { } catch (e: any) {

View file

@ -114,7 +114,7 @@ export function apiAccountMastodon(router: Router): void {
let reqIds = []; let reqIds = [];
for (let i = 0; i < ids.length; i++) { for (let i = 0; i < ids.length; i++) {
reqIds.push(convertId(ids[i], IdType.FirefishId)); reqIds.push(convertId(ids[i], IdType.IceshrimpId));
} }
const data = await client.getRelationships(reqIds); const data = await client.getRelationships(reqIds);
@ -135,7 +135,7 @@ export function apiAccountMastodon(router: Router): void {
const accessTokens = ctx.headers.authorization; const accessTokens = ctx.headers.authorization;
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const calcId = convertId(ctx.params.id, IdType.FirefishId); const calcId = convertId(ctx.params.id, IdType.IceshrimpId);
const data = await client.getAccount(calcId); const data = await client.getAccount(calcId);
ctx.body = convertAccount(data.data); ctx.body = convertAccount(data.data);
} catch (e: any) { } catch (e: any) {
@ -153,7 +153,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountStatuses( const data = await client.getAccountStatuses(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
convertTimelinesArgsId(argsToBools(limitToInt(ctx.query as any))), convertTimelinesArgsId(argsToBools(limitToInt(ctx.query as any))),
); );
ctx.body = data.data.map((status) => convertStatus(status)); ctx.body = data.data.map((status) => convertStatus(status));
@ -173,7 +173,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountFeaturedTags( const data = await client.getAccountFeaturedTags(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data.map((tag) => convertFeaturedTag(tag)); ctx.body = data.data.map((tag) => convertFeaturedTag(tag));
} catch (e: any) { } catch (e: any) {
@ -192,7 +192,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountFollowers( const data = await client.getAccountFollowers(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
convertTimelinesArgsId(limitToInt(ctx.query as any)), convertTimelinesArgsId(limitToInt(ctx.query as any)),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
@ -212,7 +212,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountFollowing( const data = await client.getAccountFollowing(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
convertTimelinesArgsId(limitToInt(ctx.query as any)), convertTimelinesArgsId(limitToInt(ctx.query as any)),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
@ -232,7 +232,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountLists( const data = await client.getAccountLists(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data.map((list) => convertList(list)); ctx.body = data.data.map((list) => convertList(list));
} catch (e: any) { } catch (e: any) {
@ -251,7 +251,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.followAccount( const data = await client.followAccount(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
let acct = convertRelationship(data.data); let acct = convertRelationship(data.data);
acct.following = true; acct.following = true;
@ -272,7 +272,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unfollowAccount( const data = await client.unfollowAccount(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
let acct = convertRelationship(data.data); let acct = convertRelationship(data.data);
acct.following = false; acct.following = false;
@ -293,7 +293,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.blockAccount( const data = await client.blockAccount(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertRelationship(data.data); ctx.body = convertRelationship(data.data);
} catch (e: any) { } catch (e: any) {
@ -331,7 +331,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.muteAccount( const data = await client.muteAccount(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
(ctx.request as any).body as any, (ctx.request as any).body as any,
); );
ctx.body = convertRelationship(data.data); ctx.body = convertRelationship(data.data);
@ -351,7 +351,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unmuteAccount( const data = await client.unmuteAccount(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertRelationship(data.data); ctx.body = convertRelationship(data.data);
} catch (e: any) { } catch (e: any) {
@ -478,7 +478,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.acceptFollowRequest( const data = await client.acceptFollowRequest(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertRelationship(data.data); ctx.body = convertRelationship(data.data);
} catch (e: any) { } catch (e: any) {
@ -497,7 +497,7 @@ export function apiAccountMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.rejectFollowRequest( const data = await client.rejectFollowRequest(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertRelationship(data.data); ctx.body = convertRelationship(data.data);
} catch (e: any) { } catch (e: any) {

View file

@ -27,7 +27,7 @@ export function apiFilterMastodon(router: Router): void {
const body: any = ctx.request.body; const body: any = ctx.request.body;
try { try {
const data = await client.getFilter( const data = await client.getFilter(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertFilter(data.data); ctx.body = convertFilter(data.data);
} catch (e: any) { } catch (e: any) {
@ -59,7 +59,7 @@ export function apiFilterMastodon(router: Router): void {
const body: any = ctx.request.body; const body: any = ctx.request.body;
try { try {
const data = await client.updateFilter( const data = await client.updateFilter(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
body.phrase, body.phrase,
body.context, body.context,
); );
@ -78,7 +78,7 @@ export function apiFilterMastodon(router: Router): void {
const body: any = ctx.request.body; const body: any = ctx.request.body;
try { try {
const data = await client.deleteFilter( const data = await client.deleteFilter(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data; ctx.body = data.data;
} catch (e: any) { } catch (e: any) {

View file

@ -45,7 +45,7 @@ export function apiNotificationsMastodon(router: Router): void {
const body: any = ctx.request.body; const body: any = ctx.request.body;
try { try {
const dataRaw = await client.getNotification( const dataRaw = await client.getNotification(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
const data = convertNotification(dataRaw.data); const data = convertNotification(dataRaw.data);
ctx.body = data; ctx.body = data;
@ -85,7 +85,7 @@ export function apiNotificationsMastodon(router: Router): void {
const body: any = ctx.request.body; const body: any = ctx.request.body;
try { try {
const data = await client.dismissNotification( const data = await client.dismissNotification(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data; ctx.body = data.data;
} catch (e: any) { } catch (e: any) {

View file

@ -26,9 +26,9 @@ export function apiStatusMastodon(router: Router): void {
try { try {
let body: any = ctx.request.body; let body: any = ctx.request.body;
if (body.in_reply_to_id) if (body.in_reply_to_id)
body.in_reply_to_id = convertId(body.in_reply_to_id, IdType.FirefishId); body.in_reply_to_id = convertId(body.in_reply_to_id, IdType.IceshrimpId);
if (body.quote_id) if (body.quote_id)
body.quote_id = convertId(body.quote_id, IdType.FirefishId); body.quote_id = convertId(body.quote_id, IdType.IceshrimpId);
if ( if (
(!body.poll && body["poll[options][]"]) || (!body.poll && body["poll[options][]"]) ||
(!body.media_ids && body["media_ids[]"]) (!body.media_ids && body["media_ids[]"])
@ -63,7 +63,7 @@ export function apiStatusMastodon(router: Router): void {
if (body.media_ids && !body.media_ids.length) body.media_ids = undefined; if (body.media_ids && !body.media_ids.length) body.media_ids = undefined;
if (body.media_ids) { if (body.media_ids) {
body.media_ids = (body.media_ids as string[]).map((p) => body.media_ids = (body.media_ids as string[]).map((p) =>
convertId(p, IdType.FirefishId), convertId(p, IdType.IceshrimpId),
); );
} }
const { sensitive } = body; const { sensitive } = body;
@ -102,7 +102,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getStatus( const data = await client.getStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -117,7 +117,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.deleteStatus( const data = await client.deleteStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data; ctx.body = data.data;
} catch (e: any) { } catch (e: any) {
@ -139,7 +139,7 @@ export function apiStatusMastodon(router: Router): void {
const accessTokens = ctx.headers.authorization; const accessTokens = ctx.headers.authorization;
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const id = convertId(ctx.params.id, IdType.FirefishId); const id = convertId(ctx.params.id, IdType.IceshrimpId);
const data = await client.getStatusContext( const data = await client.getStatusContext(
id, id,
convertTimelinesArgsId(limitToInt(ctx.query as any)), convertTimelinesArgsId(limitToInt(ctx.query as any)),
@ -167,7 +167,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getStatusHistory( const data = await client.getStatusHistory(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
} catch (e: any) { } catch (e: any) {
@ -185,7 +185,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getStatusRebloggedBy( const data = await client.getStatusRebloggedBy(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
} catch (e: any) { } catch (e: any) {
@ -203,7 +203,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getStatusFavouritedBy( const data = await client.getStatusFavouritedBy(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
} catch (e: any) { } catch (e: any) {
@ -222,7 +222,7 @@ export function apiStatusMastodon(router: Router): void {
const react = await getFirstReaction(BASE_URL, accessTokens); const react = await getFirstReaction(BASE_URL, accessTokens);
try { try {
const a = (await client.createEmojiReaction( const a = (await client.createEmojiReaction(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
react, react,
)) as any; )) as any;
//const data = await client.favouriteStatus(ctx.params.id) as any; //const data = await client.favouriteStatus(ctx.params.id) as any;
@ -244,7 +244,7 @@ export function apiStatusMastodon(router: Router): void {
const react = await getFirstReaction(BASE_URL, accessTokens); const react = await getFirstReaction(BASE_URL, accessTokens);
try { try {
const data = await client.deleteEmojiReaction( const data = await client.deleteEmojiReaction(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
react, react,
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
@ -264,7 +264,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.reblogStatus( const data = await client.reblogStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -283,7 +283,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unreblogStatus( const data = await client.unreblogStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -302,7 +302,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.bookmarkStatus( const data = await client.bookmarkStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -321,7 +321,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unbookmarkStatus( const data = await client.unbookmarkStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -340,7 +340,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.pinStatus( const data = await client.pinStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -359,7 +359,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unpinStatus( const data = await client.unpinStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
} catch (e: any) { } catch (e: any) {
@ -378,7 +378,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.reactStatus( const data = await client.reactStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
ctx.params.name, ctx.params.name,
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
@ -398,7 +398,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.unreactStatus( const data = await client.unreactStatus(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
ctx.params.name, ctx.params.name,
); );
ctx.body = convertStatus(data.data); ctx.body = convertStatus(data.data);
@ -416,7 +416,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getMedia( const data = await client.getMedia(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertAttachment(data.data); ctx.body = convertAttachment(data.data);
} catch (e: any) { } catch (e: any) {
@ -431,7 +431,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.updateMedia( const data = await client.updateMedia(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
ctx.request.body as any, ctx.request.body as any,
); );
ctx.body = convertAttachment(data.data); ctx.body = convertAttachment(data.data);
@ -447,7 +447,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getPoll( const data = await client.getPoll(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertPoll(data.data); ctx.body = convertPoll(data.data);
} catch (e: any) { } catch (e: any) {
@ -464,7 +464,7 @@ export function apiStatusMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.votePoll( const data = await client.votePoll(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
(ctx.request.body as any).choices, (ctx.request.body as any).choices,
); );
ctx.body = convertPoll(data.data); ctx.body = convertPoll(data.data);

View file

@ -46,11 +46,11 @@ export function argsToBools(q: ParsedUrlQuery) {
export function convertTimelinesArgsId(q: ParsedUrlQuery) { export function convertTimelinesArgsId(q: ParsedUrlQuery) {
if (typeof q.min_id === "string") if (typeof q.min_id === "string")
q.min_id = convertId(q.min_id, IdType.FirefishId); q.min_id = convertId(q.min_id, IdType.IceshrimpId);
if (typeof q.max_id === "string") if (typeof q.max_id === "string")
q.max_id = convertId(q.max_id, IdType.FirefishId); q.max_id = convertId(q.max_id, IdType.IceshrimpId);
if (typeof q.since_id === "string") if (typeof q.since_id === "string")
q.since_id = convertId(q.since_id, IdType.FirefishId); q.since_id = convertId(q.since_id, IdType.IceshrimpId);
return q; return q;
} }
@ -121,7 +121,7 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getListTimeline( const data = await client.getListTimeline(
convertId(ctx.params.listId, IdType.FirefishId), convertId(ctx.params.listId, IdType.IceshrimpId),
convertTimelinesArgsId(limitToInt(ctx.query)), convertTimelinesArgsId(limitToInt(ctx.query)),
); );
ctx.body = data.data.map((status) => convertStatus(status)); ctx.body = data.data.map((status) => convertStatus(status));
@ -173,7 +173,7 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getList( const data = await client.getList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = convertList(data.data); ctx.body = convertList(data.data);
} catch (e: any) { } catch (e: any) {
@ -206,7 +206,7 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.updateList( const data = await client.updateList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
(ctx.request.body as any).title, (ctx.request.body as any).title,
); );
ctx.body = convertList(data.data); ctx.body = convertList(data.data);
@ -226,7 +226,7 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.deleteList( const data = await client.deleteList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
); );
ctx.body = data.data; ctx.body = data.data;
} catch (e: any) { } catch (e: any) {
@ -245,7 +245,7 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.getAccountsInList( const data = await client.getAccountsInList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
convertTimelinesArgsId(ctx.query as any), convertTimelinesArgsId(ctx.query as any),
); );
ctx.body = data.data.map((account) => convertAccount(account)); ctx.body = data.data.map((account) => convertAccount(account));
@ -265,9 +265,9 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.addAccountsToList( const data = await client.addAccountsToList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
(ctx.query.account_ids as string[]).map((id) => (ctx.query.account_ids as string[]).map((id) =>
convertId(id, IdType.FirefishId), convertId(id, IdType.IceshrimpId),
), ),
); );
ctx.body = data.data; ctx.body = data.data;
@ -287,9 +287,9 @@ export function apiTimelineMastodon(router: Router): void {
const client = getClient(BASE_URL, accessTokens); const client = getClient(BASE_URL, accessTokens);
try { try {
const data = await client.deleteAccountsFromList( const data = await client.deleteAccountsFromList(
convertId(ctx.params.id, IdType.FirefishId), convertId(ctx.params.id, IdType.IceshrimpId),
(ctx.query.account_ids as string[]).map((id) => (ctx.query.account_ids as string[]).map((id) =>
convertId(id, IdType.FirefishId), convertId(id, IdType.IceshrimpId),
), ),
); );
ctx.body = data.data; ctx.body = data.data;

View file

@ -9,13 +9,13 @@ export function genOpenapiSpec() {
info: { info: {
version: "v1", version: "v1",
title: "Firefish API", title: "Iceshrimp API",
"x-logo": { url: "/static-assets/api-doc.png" }, "x-logo": { url: "/static-assets/api-doc.png" },
}, },
externalDocs: { externalDocs: {
description: "Repository", description: "Repository",
url: "https://codeberg.org/firefish/firefish", url: "https://iceshrimp.dev/iceshrimp/iceshrimp",
}, },
servers: [ servers: [
@ -106,7 +106,7 @@ export function genOpenapiSpec() {
description: desc, description: desc,
externalDocs: { externalDocs: {
description: "Source code", description: "Source code",
url: `https://codeberg.org/firefish/firefish/src/branch/develop/packages/backend/src/server/api/endpoints/${endpoint.name}.ts`, url: `https://iceshrimp.dev/iceshrimp/iceshrimp/src/branch/dev/packages/backend/src/server/api/endpoints/${endpoint.name}.ts`,
}, },
tags: endpoint.meta.tags || undefined, tags: endpoint.meta.tags || undefined,
security, security,

View file

@ -45,7 +45,7 @@ main {
* { * {
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif; font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
} }
#firefish_app { #iceshrimp_app {
display: none !important; display: none !important;
} }
body, body,

View file

@ -185,7 +185,7 @@
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif; font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
} }
#firefish_app, #iceshrimp_app,
#splash { #splash {
display: none !important; display: none !important;
} }

View file

@ -26,7 +26,7 @@ img {
text-align: center; text-align: center;
} }
#firefish_app { #iceshrimp_app {
display: none !important; display: none !important;
} }

View file

@ -43,7 +43,7 @@ export default async function (
id: author.link, id: author.link,
title: `${author.name} (@${user.username}@${config.host})`, title: `${author.name} (@${user.username}@${config.host})`,
updated: notes[0].createdAt, updated: notes[0].createdAt,
generator: "Firefish", generator: "Iceshrimp",
description: `${user.notesCount} Notes, ${ description: `${user.notesCount} Notes, ${
profile.ffVisibility === "public" ? user.followingCount : "?" profile.ffVisibility === "public" ? user.followingCount : "?"
} Following, ${ } Following, ${

View file

@ -1,6 +1,6 @@
{ {
"short_name": "Firefish", "short_name": "Iceshrimp",
"name": "Firefish", "name": "Iceshrimp",
"description": "An open source, decentralized social media platform that's free forever!", "description": "An open source, decentralized social media platform that's free forever!",
"start_url": "/", "start_url": "/",
"display": "standalone", "display": "standalone",

View file

@ -9,8 +9,8 @@ export const manifestHandler = async (ctx: Koa.Context) => {
const instance = await fetchMeta(true); const instance = await fetchMeta(true);
res.short_name = instance.name || "Firefish"; res.short_name = instance.name || "Iceshrimp";
res.name = instance.name || "Firefish"; res.name = instance.name || "Iceshrimp";
if (instance.themeColor) res.theme_color = instance.themeColor; if (instance.themeColor) res.theme_color = instance.themeColor;
ctx.set("Cache-Control", "max-age=300"); ctx.set("Cache-Control", "max-age=300");

View file

@ -29,7 +29,7 @@ export default class Logger {
if (config.syslog) { if (config.syslog) {
this.syslogClient = new SyslogPro.RFC5424({ this.syslogClient = new SyslogPro.RFC5424({
applacationName: "Firefish", applacationName: "Iceshrimp",
timestamp: true, timestamp: true,
encludeStructuredData: true, encludeStructuredData: true,
color: true, color: true,

View file

@ -55,33 +55,33 @@ describe("fromHtml", () => {
it("link with different text", () => { it("link with different text", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml('<p>a <a href="https://joinfirefish.org/b">c</a> d</p>'), fromHtml('<p>a <a href="https://iceshrimp.dev/b">c</a> d</p>'),
"a [c](https://joinfirefish.org/b) d", "a [c](https://iceshrimp.dev/b) d",
); );
}); });
it("link with different text, but not encoded", () => { it("link with different text, but not encoded", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml('<p>a <a href="https://joinfirefish.org/ä">c</a> d</p>'), fromHtml('<p>a <a href="https://iceshrimp.dev/ä">c</a> d</p>'),
"a [c](<https://joinfirefish.org/ä>) d", "a [c](<https://iceshrimp.dev/ä>) d",
); );
}); });
it("link with same text", () => { it("link with same text", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml( fromHtml(
'<p>a <a href="https://joinfirefish.org/b">https://joinfirefish.org/b</a> d</p>', '<p>a <a href="https://joiniceshrimp.org/b">https://joiniceshrimp.org/b</a> d</p>',
), ),
"a https://joinfirefish.org/b d", "a https://joiniceshrimp.org/b d",
); );
}); });
it("link with same text, but not encoded", () => { it("link with same text, but not encoded", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml( fromHtml(
'<p>a <a href="https://joinfirefish.org/ä">https://joinfirefish.org/ä</a> d</p>', '<p>a <a href="https://joiniceshrimp.org/ä">https://joiniceshrimp.org/ä</a> d</p>',
), ),
"a <https://joinfirefish.org/ä> d", "a <https://joiniceshrimp.org/ä> d",
); );
}); });
@ -98,8 +98,8 @@ describe("fromHtml", () => {
it("link without text", () => { it("link without text", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml('<p>a <a href="https://joinfirefish.org/b"></a> d</p>'), fromHtml('<p>a <a href="https://joiniceshrimp.org/b"></a> d</p>'),
"a https://joinfirefish.org/b d", "a https://joiniceshrimp.org/b d",
); );
}); });
@ -110,15 +110,15 @@ describe("fromHtml", () => {
it("mention", () => { it("mention", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml( fromHtml(
'<p>a <a href="https://joinfirefish.org/@user" class="u-url mention">@user</a> d</p>', '<p>a <a href="https://joiniceshrimp.org/@user" class="u-url mention">@user</a> d</p>',
), ),
"a @user@joinfirefish.org d", "a @user@joiniceshrimp.org d",
); );
}); });
it("hashtag", () => { it("hashtag", () => {
assert.deepStrictEqual( assert.deepStrictEqual(
fromHtml('<p>a <a href="https://joinfirefish.org/tags/a">#a</a> d</p>', [ fromHtml('<p>a <a href="https://joiniceshrimp.org/tags/a">#a</a> d</p>', [
"#a", "#a",
]), ]),
"a #a d", "a #a d",

View file

@ -24,13 +24,13 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import * as firefish from "iceshrimp-js"; import * as iceshrimp from "iceshrimp-js";
import MkMiniChart from "@/components/MkMiniChart.vue"; import MkMiniChart from "@/components/MkMiniChart.vue";
import * as os from "@/os"; import * as os from "@/os";
import { getProxiedImageUrlNullable } from "@/scripts/media-proxy"; import { getProxiedImageUrlNullable } from "@/scripts/media-proxy";
const props = defineProps<{ const props = defineProps<{
instance: firefish.entities.Instance; instance: iceshrimp.entities.Instance;
}>(); }>();
let chartValues = $ref<number[] | null>(null); let chartValues = $ref<number[] | null>(null);

View file

@ -35,7 +35,7 @@ const instance = props.instance ?? {
'meta[name="theme-color-orig"]', 'meta[name="theme-color-orig"]',
) as HTMLMetaElement ) as HTMLMetaElement
)?.content, )?.content,
softwareName: Instance.softwareName || "Firefish", softwareName: Instance.softwareName || "Iceshrimp",
}; };
const capitalize = (s: string) => s && s[0].toUpperCase() + s.slice(1); const capitalize = (s: string) => s && s[0].toUpperCase() + s.slice(1);

View file

@ -8,7 +8,7 @@
<span>Switch is now {{ flag ? "on" : "off" }}</span> <span>Switch is now {{ flag ? "on" : "off" }}</span>
</MkSwitch> </MkSwitch>
<div style="margin: 32px 0"> <div style="margin: 32px 0">
<MkRadio v-model="radio" value="misskey">Firefish</MkRadio> <MkRadio v-model="radio" value="misskey">Iceshrimp</MkRadio>
<MkRadio v-model="radio" value="mastodon">Mastodon</MkRadio> <MkRadio v-model="radio" value="mastodon">Mastodon</MkRadio>
<MkRadio v-model="radio" value="pleroma">Pleroma</MkRadio> <MkRadio v-model="radio" value="pleroma">Pleroma</MkRadio>
</div> </div>
@ -50,12 +50,12 @@ export default defineComponent({
return { return {
text: "", text: "",
flag: true, flag: true,
radio: "firefish", radio: "iceshrimp",
mfm: `Hello world! This is an @example mention. BTW, you are @${ mfm: `Hello world! This is an @example mention. BTW, you are @${
this.$i ? this.$i.username : "guest" this.$i ? this.$i.username : "guest"
}.\nAlso, here is ${config.url} and [example link](${ }.\nAlso, here is ${config.url} and [example link](${
config.url config.url
}). for more details, see https://joinfirefish.org.\nAs you know #misskey is open-source software.`, }). for more details, see https://iceshrimp.dev.\nAs you know #misskey is open-source software.`,
}; };
}, },
@ -82,7 +82,7 @@ export default defineComponent({
}, },
baz: { baz: {
type: "string", type: "string",
default: "Firefish makes you happy.", default: "iceshrimp makes you happy.",
label: "This is a string property", label: "This is a string property",
}, },
}); });

View file

@ -1,7 +1,7 @@
<template> <template>
<div v-if="instance.disableRegistration" style="margin-bottom: 1rem"> <div v-if="instance.disableRegistration" style="margin-bottom: 1rem">
<p>{{ i18n.ts.signupsDisabled }}</p> <p>{{ i18n.ts.signupsDisabled }}</p>
<a href="https://joinfirefish.org/join"> <a href="https://iceshrimp.dev/join">
<MkButton rounded gradate <MkButton rounded gradate
>{{ i18n.ts.findOtherInstance }} >{{ i18n.ts.findOtherInstance }}
</MkButton> </MkButton>

View file

@ -14,6 +14,6 @@ export const lang = localStorage.getItem("lang");
export const langs = _LANGS_; export const langs = _LANGS_;
export const locale = JSON.parse(localStorage.getItem("locale")); export const locale = JSON.parse(localStorage.getItem("locale"));
export const version = _VERSION_; export const version = _VERSION_;
export const instanceName = siteName === "Firefish" ? host : siteName; export const instanceName = siteName === "Iceshrimp" ? host : siteName;
export const ui = localStorage.getItem("ui"); export const ui = localStorage.getItem("ui");
export const debug = localStorage.getItem("debug") === "true"; export const debug = localStorage.getItem("debug") === "true";

View file

@ -216,7 +216,7 @@ function checkForSplash() {
// https://github.com/misskey-dev/misskey/pull/8575#issuecomment-1114239210 // https://github.com/misskey-dev/misskey/pull/8575#issuecomment-1114239210
// なぜかinit.tsの内容が2回実行されることがあるため、mountするdivを1つに制限する // なぜかinit.tsの内容が2回実行されることがあるため、mountするdivを1つに制限する
const rootEl = (() => { const rootEl = (() => {
const MISSKEY_MOUNT_DIV_ID = "firefish_app"; const MISSKEY_MOUNT_DIV_ID = "iceshrimp_app";
const currentEl = document.getElementById(MISSKEY_MOUNT_DIV_ID); const currentEl = document.getElementById(MISSKEY_MOUNT_DIV_ID);

View file

@ -41,7 +41,7 @@
<MkInfo v-if="updateAvailable" warn class="info" <MkInfo v-if="updateAvailable" warn class="info"
>{{ i18n.ts.updateAvailable }} >{{ i18n.ts.updateAvailable }}
<a <a
href="https://codeberg.org/firefish/firefish/releases" href="https://iceshrimp.dev/iceshrimp/iceshrimp/releases"
target="_bank" target="_bank"
class="_link" class="_link"
>{{ i18n.ts.check }}</a >{{ i18n.ts.check }}</a

View file

@ -340,7 +340,7 @@
import { watch } from "vue"; import { watch } from "vue";
import { Virtual } from "swiper/modules"; import { Virtual } from "swiper/modules";
import { Swiper, SwiperSlide } from "swiper/vue"; import { Swiper, SwiperSlide } from "swiper/vue";
import type * as firefish from "iceshrimp-js"; import type * as iceshrimp from "iceshrimp-js";
import MkChart from "@/components/MkChart.vue"; import MkChart from "@/components/MkChart.vue";
import MkObjectView from "@/components/MkObjectView.vue"; import MkObjectView from "@/components/MkObjectView.vue";
import FormLink from "@/components/form/link.vue"; import FormLink from "@/components/form/link.vue";
@ -363,11 +363,11 @@ import "swiper/scss";
import "swiper/scss/virtual"; import "swiper/scss/virtual";
import { getProxiedImageUrlNullable } from "@/scripts/media-proxy"; import { getProxiedImageUrlNullable } from "@/scripts/media-proxy";
type AugmentedInstanceMetadata = firefish.entities.DetailedInstanceMetadata & { type AugmentedInstanceMetadata = iceshrimp.entities.DetailedInstanceMetadata & {
blockedHosts: string[]; blockedHosts: string[];
silencedHosts: string[]; silencedHosts: string[];
}; };
type AugmentedInstance = firefish.entities.Instance & { type AugmentedInstance = iceshrimp.entities.Instance & {
isBlocked: boolean; isBlocked: boolean;
isSilenced: boolean; isSilenced: boolean;
}; };

View file

@ -455,7 +455,7 @@ defineProps<{
let preview_mention = $ref("@example"); let preview_mention = $ref("@example");
let preview_hashtag = $ref("#test"); let preview_hashtag = $ref("#test");
let preview_link = $ref(`[${i18n.ts._mfm.dummy}](https://joinfirefish.org)`); let preview_link = $ref(`[${i18n.ts._mfm.dummy}](https://iceshrimp.dev)`);
let preview_emoji = $ref( let preview_emoji = $ref(
instance.emojis.length ? `:${instance.emojis[0].name}:` : ":emojiname:", instance.emojis.length ? `:${instance.emojis[0].name}:` : ":emojiname:",
); );

View file

@ -215,7 +215,7 @@ definePageMetadata(
} }
.fcuexfpr { .fcuexfpr {
#firefish_app > :not(.wallpaper) & { #iceshrimp_app > :not(.wallpaper) & {
background: var(--bg); background: var(--bg);
} }

View file

@ -22,7 +22,7 @@
><i class="ph-upload-simple ph-bold ph-lg"></i ><i class="ph-upload-simple ph-bold ph-lg"></i
></template> ></template>
<FormRadios v-model="importType" class="_formBlock"> <FormRadios v-model="importType" class="_formBlock">
<option value="firefish">Firefish/Misskey</option> <option value="iceshrimp">iceshrimp/Misskey</option>
<option value="mastodon">Mastodon/Akkoma/Pleroma</option> <option value="mastodon">Mastodon/Akkoma/Pleroma</option>
<option :disabled="true" value="twitter"> <option :disabled="true" value="twitter">
Twitter (soon) Twitter (soon)
@ -188,7 +188,7 @@ import { i18n } from "@/i18n";
import { definePageMetadata } from "@/scripts/page-metadata"; import { definePageMetadata } from "@/scripts/page-metadata";
const excludeMutingUsers = ref(false); const excludeMutingUsers = ref(false);
const importType = ref("firefish"); const importType = ref("iceshrimp");
const excludeInactiveUsers = ref(false); const excludeInactiveUsers = ref(false);
const onExportSuccess = () => { const onExportSuccess = () => {

View file

@ -1,6 +1,6 @@
<template> <template>
<form class="mk-setup" @submit.prevent="submit()"> <form class="mk-setup" @submit.prevent="submit()">
<h1>Welcome to Firefish!</h1> <h1>Welcome to Iceshrimp!</h1>
<div class="_formRoot"> <div class="_formRoot">
<p>{{ i18n.ts.intro }}</p> <p>{{ i18n.ts.intro }}</p>
<MkInput <MkInput

View file

@ -302,7 +302,7 @@ export const routes = [
}, },
{ {
path: "/about-iceshrimp", path: "/about-iceshrimp",
component: page(() => import("./pages/about-firefish.vue")), component: page(() => import("./pages/about-iceshrimp.vue")),
}, },
{ {
path: "/theme-editor", path: "/theme-editor",

View file

@ -37,7 +37,7 @@ export function openHelpMenu_(ev: MouseEvent) {
text: i18n.ts.apps, text: i18n.ts.apps,
icon: "ph-device-mobile ph-bold ph-lg", icon: "ph-device-mobile ph-bold ph-lg",
action: () => { action: () => {
window.open("https://joinfirefish.org/apps", "_blank"); window.open("https://iceshrimp.dev/apps", "_blank");
}, },
}, },
{ {

View file

@ -6,7 +6,7 @@
id: 'dark', id: 'dark',
name: 'Dark', name: 'Dark',
author: 'Firefish Contributors', author: 'Iceshrimp Contributors',
desc: 'Default dark theme', desc: 'Default dark theme',
kind: 'dark', kind: 'dark',

View file

@ -6,7 +6,7 @@
id: 'light', id: 'light',
name: 'Light', name: 'Light',
author: 'Firefish Contributors', author: 'Iceshrimp Contributors',
desc: 'Default light theme', desc: 'Default light theme',
kind: 'light', kind: 'light',

View file

@ -254,10 +254,10 @@ function more(ev: MouseEvent) {
box-sizing: border-box; box-sizing: border-box;
overflow: auto; overflow: auto;
overflow-x: clip; overflow-x: clip;
#firefish_app > :not(.wallpaper) & { #iceshrimp_app > :not(.wallpaper) & {
background: var(--navBg); background: var(--navBg);
} }
#firefish_app > .wallpaper:not(.centered) & { #iceshrimp_app > .wallpaper:not(.centered) & {
border-right: 1px solid var(--divider); border-right: 1px solid var(--divider);
} }
contain: strict; contain: strict;

View file

@ -1,6 +1,6 @@
# Firefish.js # iceshrimp.js
Fork of Misskey.js for Firefish Fork of Misskey.js for Iceshrimp
https://www.npmjs.com/package/iceshrimp-js https://www.npmjs.com/package/iceshrimp-js

View file

@ -1,7 +1,7 @@
{ {
"name": "iceshrimp-js", "name": "iceshrimp-js",
"version": "0.0.24", "version": "0.0.24",
"description": "Firefish SDK for JavaScript", "description": "iceshrimp SDK for JavaScript",
"main": "./built/index.js", "main": "./built/index.js",
"types": "./built/index.d.ts", "types": "./built/index.d.ts",
"scripts": { "scripts": {
@ -18,7 +18,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://codeberg.org/firefish/firefish.git" "url": "https://iceshrimp.dev/iceshrimp/iceshrimp.git"
}, },
"devDependencies": { "devDependencies": {
"@microsoft/api-documenter": "^7.22.21", "@microsoft/api-documenter": "^7.22.21",

View file

@ -4,7 +4,7 @@ import * as Misskey from "../src";
describe("API", () => { describe("API", () => {
test("success", async () => { test("success", async () => {
const cli = new Misskey.api.APIClient({ const cli = new Misskey.api.APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
const res = await cli.request("meta", { detail: true }); const res = await cli.request("meta", { detail: true });
@ -13,7 +13,7 @@ describe("API", () => {
test("conditional respose type (meta)", async () => { test("conditional respose type (meta)", async () => {
const cli = new Misskey.api.APIClient({ const cli = new Misskey.api.APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -35,7 +35,7 @@ describe("API", () => {
test("conditional respose type (users/show)", async () => { test("conditional respose type (users/show)", async () => {
const cli = new Misskey.api.APIClient({ const cli = new Misskey.api.APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });

View file

@ -3,7 +3,7 @@ import * as Misskey from "../src";
describe("Streaming", () => { describe("Streaming", () => {
test("emit type", async () => { test("emit type", async () => {
const stream = new Misskey.Stream("https://firefish.test", { const stream = new Misskey.Stream("https://iceshrimp.test", {
token: "TOKEN", token: "TOKEN",
}); });
const mainChannel = stream.useChannel("main"); const mainChannel = stream.useChannel("main");
@ -13,7 +13,7 @@ describe("Streaming", () => {
}); });
test("params type", async () => { test("params type", async () => {
const stream = new Misskey.Stream("https://firefish.test", { const stream = new Misskey.Stream("https://iceshrimp.test", {
token: "TOKEN", token: "TOKEN",
}); });
// TODO: 「stream.useChannel の第二引数として受け入れる型が // TODO: 「stream.useChannel の第二引数として受け入れる型が

View file

@ -20,7 +20,7 @@ describe("API", () => {
fetchMock.resetMocks(); fetchMock.resetMocks();
fetchMock.mockResponse(async (req) => { fetchMock.mockResponse(async (req) => {
const body = await req.json(); const body = await req.json();
if (req.method === "POST" && req.url === "https://firefish.test/api/i") { if (req.method === "POST" && req.url === "https://iceshrimp.test/api/i") {
if (body.i === "TOKEN") { if (body.i === "TOKEN") {
return JSON.stringify({ id: "foo" }); return JSON.stringify({ id: "foo" });
} else { } else {
@ -32,7 +32,7 @@ describe("API", () => {
}); });
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -43,7 +43,7 @@ describe("API", () => {
}); });
expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({
url: "https://firefish.test/api/i", url: "https://iceshrimp.test/api/i",
method: "POST", method: "POST",
body: { i: "TOKEN" }, body: { i: "TOKEN" },
}); });
@ -55,7 +55,7 @@ describe("API", () => {
const body = await req.json(); const body = await req.json();
if ( if (
req.method === "POST" && req.method === "POST" &&
req.url === "https://firefish.test/api/notes/show" req.url === "https://iceshrimp.test/api/notes/show"
) { ) {
if (body.i === "TOKEN" && body.noteId === "aaaaa") { if (body.i === "TOKEN" && body.noteId === "aaaaa") {
return JSON.stringify({ id: "foo" }); return JSON.stringify({ id: "foo" });
@ -68,7 +68,7 @@ describe("API", () => {
}); });
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -79,7 +79,7 @@ describe("API", () => {
}); });
expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({
url: "https://firefish.test/api/notes/show", url: "https://iceshrimp.test/api/notes/show",
method: "POST", method: "POST",
body: { i: "TOKEN", noteId: "aaaaa" }, body: { i: "TOKEN", noteId: "aaaaa" },
}); });
@ -90,7 +90,7 @@ describe("API", () => {
fetchMock.mockResponse(async (req) => { fetchMock.mockResponse(async (req) => {
if ( if (
req.method === "POST" && req.method === "POST" &&
req.url === "https://firefish.test/api/reset-password" req.url === "https://iceshrimp.test/api/reset-password"
) { ) {
return { status: 204 }; return { status: 204 };
} else { } else {
@ -99,7 +99,7 @@ describe("API", () => {
}); });
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -111,7 +111,7 @@ describe("API", () => {
expect(res).toEqual(null); expect(res).toEqual(null);
expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({ expect(getFetchCall(fetchMock.mock.calls[0])).toEqual({
url: "https://firefish.test/api/reset-password", url: "https://iceshrimp.test/api/reset-password",
method: "POST", method: "POST",
body: { i: "TOKEN", token: "aaa", password: "aaa" }, body: { i: "TOKEN", token: "aaa", password: "aaa" },
}); });
@ -121,7 +121,7 @@ describe("API", () => {
fetchMock.resetMocks(); fetchMock.resetMocks();
fetchMock.mockResponse(async (req) => { fetchMock.mockResponse(async (req) => {
const body = await req.json(); const body = await req.json();
if (req.method === "POST" && req.url === "https://firefish.test/api/i") { if (req.method === "POST" && req.url === "https://iceshrimp.test/api/i") {
if (typeof body.i === "string") { if (typeof body.i === "string") {
return JSON.stringify({ id: "foo" }); return JSON.stringify({ id: "foo" });
} else { } else {
@ -143,7 +143,7 @@ describe("API", () => {
try { try {
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -172,7 +172,7 @@ describe("API", () => {
try { try {
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -189,7 +189,7 @@ describe("API", () => {
try { try {
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });
@ -210,7 +210,7 @@ describe("API", () => {
try { try {
const cli = new APIClient({ const cli = new APIClient({
origin: "https://firefish.test", origin: "https://iceshrimp.test",
credential: "TOKEN", credential: "TOKEN",
}); });

View file

@ -3,8 +3,8 @@ import Stream from "../src/streaming";
describe("Streaming", () => { describe("Streaming", () => {
test("useChannel", async () => { test("useChannel", async () => {
const server = new WS("wss://firefish.test/streaming"); const server = new WS("wss://iceshrimp.test/streaming");
const stream = new Stream("https://firefish.test", { token: "TOKEN" }); const stream = new Stream("https://iceshrimp.test", { token: "TOKEN" });
const mainChannelReceived: any[] = []; const mainChannelReceived: any[] = [];
const main = stream.useChannel("main"); const main = stream.useChannel("main");
main.on("meUpdated", (payload) => { main.on("meUpdated", (payload) => {
@ -44,8 +44,8 @@ describe("Streaming", () => {
}); });
test("useChannel with parameters", async () => { test("useChannel with parameters", async () => {
const server = new WS("wss://firefish.test/streaming"); const server = new WS("wss://iceshrimp.test/streaming");
const stream = new Stream("https://firefish.test", { token: "TOKEN" }); const stream = new Stream("https://iceshrimp.test", { token: "TOKEN" });
const messagingChannelReceived: any[] = []; const messagingChannelReceived: any[] = [];
const messaging = stream.useChannel("messaging", { otherparty: "aaa" }); const messaging = stream.useChannel("messaging", { otherparty: "aaa" });
messaging.on("message", (payload) => { messaging.on("message", (payload) => {
@ -86,8 +86,8 @@ describe("Streaming", () => {
}); });
test("ちゃんとチャンネルごとにidが異なる", async () => { test("ちゃんとチャンネルごとにidが異なる", async () => {
const server = new WS("wss://firefish.test/streaming"); const server = new WS("wss://iceshrimp.test/streaming");
const stream = new Stream("https://firefish.test", { token: "TOKEN" }); const stream = new Stream("https://iceshrimp.test", { token: "TOKEN" });
stream.useChannel("messaging", { otherparty: "aaa" }); stream.useChannel("messaging", { otherparty: "aaa" });
stream.useChannel("messaging", { otherparty: "bbb" }); stream.useChannel("messaging", { otherparty: "bbb" });
@ -111,8 +111,8 @@ describe("Streaming", () => {
}); });
test("Connection#send", async () => { test("Connection#send", async () => {
const server = new WS("wss://firefish.test/streaming"); const server = new WS("wss://iceshrimp.test/streaming");
const stream = new Stream("https://firefish.test", { token: "TOKEN" }); const stream = new Stream("https://iceshrimp.test", { token: "TOKEN" });
const messaging = stream.useChannel("messaging", { otherparty: "aaa" }); const messaging = stream.useChannel("messaging", { otherparty: "aaa" });
messaging.send("read", { id: "aaa" }); messaging.send("read", { id: "aaa" });
@ -136,8 +136,8 @@ describe("Streaming", () => {
}); });
test("Connection#dispose", async () => { test("Connection#dispose", async () => {
const server = new WS("wss://firefish.test/streaming"); const server = new WS("wss://iceshrimp.test/streaming");
const stream = new Stream("https://firefish.test", { token: "TOKEN" }); const stream = new Stream("https://iceshrimp.test", { token: "TOKEN" });
const mainChannelReceived: any[] = []; const mainChannelReceived: any[] = [];
const main = stream.useChannel("main"); const main = stream.useChannel("main");
main.on("meUpdated", (payload) => { main.on("meUpdated", (payload) => {

View file

@ -44,7 +44,7 @@ module.exports = {
), ),
_ENV_: JSON.stringify(process.env.NODE_ENV), _ENV_: JSON.stringify(process.env.NODE_ENV),
_DEV_: !isProduction, _DEV_: !isProduction,
_PERF_PREFIX_: JSON.stringify("Firefish:"), _PERF_PREFIX_: JSON.stringify("IceShrimp:"),
}), }),
], ],
}; };

View file

@ -1,5 +1,5 @@
{ {
"version": "1.0.0", "version": "1.0.0",
"notes": "Welcome to Firefish!", "notes": "Welcome to Iceshrimp!",
"screenshots": [] "screenshots": []
} }