mirror of
https://iceshrimp.dev/iceshrimp/iceshrimp
synced 2024-11-27 06:18:06 +09:00
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:
parent
e3131e9b11
commit
91b8b7b76b
@ -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.
|
||||||
|
@ -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
|
||||||
|
2
.weblate
2
.weblate
@ -1,3 +1,3 @@
|
|||||||
[weblate]
|
[weblate]
|
||||||
url = https://hosted.weblate.org/api/
|
url = https://hosted.weblate.org/api/
|
||||||
translation = firefish/locales
|
translation = iceshrimp/locales
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
2
COPYING
2
COPYING
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
#
|
#
|
||||||
|
@ -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` | |
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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 }}
|
||||||
|
@ -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 }}
|
||||||
|
@ -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 }}
|
||||||
|
@ -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 }}
|
||||||
|
@ -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 }}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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:
|
||||||
|
@ -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).
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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!
|
||||||
|
@ -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.
|
||||||
|
@ -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";
|
||||||
|
@ -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/)
|
||||||
|
@ -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)
BIN
packages/backend/assets/splash.svg
(Stored with Git LFS)
Binary file not shown.
@ -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(_) => {
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
|
@ -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({
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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) => {
|
||||||
|
@ -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",
|
||||||
|
@ -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) => {
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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) {
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ img {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#firefish_app {
|
#iceshrimp_app {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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, ${
|
||||||
|
@ -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",
|
||||||
|
@ -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");
|
||||||
|
@ -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,
|
||||||
|
@ -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",
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -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>
|
||||||
|
@ -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";
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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:",
|
||||||
);
|
);
|
||||||
|
@ -215,7 +215,7 @@ definePageMetadata(
|
|||||||
}
|
}
|
||||||
|
|
||||||
.fcuexfpr {
|
.fcuexfpr {
|
||||||
#firefish_app > :not(.wallpaper) & {
|
#iceshrimp_app > :not(.wallpaper) & {
|
||||||
background: var(--bg);
|
background: var(--bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -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
|
||||||
|
@ -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",
|
||||||
|
@ -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");
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -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',
|
||||||
|
|
||||||
|
@ -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',
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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 の第二引数として受け入れる型が
|
||||||
|
@ -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",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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) => {
|
||||||
|
@ -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:"),
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"notes": "Welcome to Firefish!",
|
"notes": "Welcome to Iceshrimp!",
|
||||||
"screenshots": []
|
"screenshots": []
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user