Compare commits
	
		
			36 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3658f19d98 | ||
| 
						 | 
					e213c2e844 | ||
| 
						 | 
					dd86397e85 | ||
| 
						 | 
					6d33b366f8 | ||
| 
						 | 
					33c22b5f3e | ||
| 
						 | 
					16c7ef41fb | ||
| 
						 | 
					6e50579f9f | ||
| 
						 | 
					08ff4926c7 | ||
| 
						 | 
					a7015e6f09 | ||
| 
						 | 
					fd4ec81bcb | ||
| 
						 | 
					9c33e6eef7 | ||
| 
						 | 
					9f7cdb4bc7 | ||
| 
						 | 
					daa0ca72a7 | ||
| 
						 | 
					67fc39b8db | ||
| 
						 | 
					45c457b8b3 | ||
| 
						 | 
					ec3be7e4d3 | ||
| 
						 | 
					f8e6f3cc73 | ||
| 
						 | 
					7f5d189528 | ||
| 
						 | 
					ff9a074ab6 | ||
| 
						 | 
					91f4ec3747 | ||
| 
						 | 
					41c2aed7dc | ||
| 
						 | 
					b8360313e8 | ||
| 
						 | 
					403b82277c | ||
| 
						 | 
					433505df48 | ||
| 
						 | 
					090f8eff67 | ||
| 
						 | 
					395fe7eb4b | ||
| 
						 | 
					c8935b32f8 | ||
| 
						 | 
					ebb687cde4 | ||
| 
						 | 
					e47a8bf666 | ||
| 
						 | 
					408d54f2eb | ||
| 
						 | 
					f9b5d92176 | ||
| 
						 | 
					61dfa6d598 | ||
| 
						 | 
					5abe05d572 | ||
| 
						 | 
					7722fc4d3f | ||
| 
						 | 
					6a379b463f | ||
| 
						 | 
					c03b70c949 | 
							
								
								
									
										12
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							@@ -14,12 +14,12 @@ jobs:
 | 
				
			|||||||
    - uses: actions/checkout@v2
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        submodules: true
 | 
					        submodules: true
 | 
				
			||||||
    - uses: actions/setup-node@v1
 | 
					    - uses: actions/setup-node@v3
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        node-version: 12.x
 | 
					        node-version: 16.x
 | 
				
			||||||
    - uses: actions/cache@v2
 | 
					        cache: 'yarn'
 | 
				
			||||||
      with:
 | 
					        cache-dependency-path: |
 | 
				
			||||||
        path: '**/node_modules'
 | 
					          packages/backend/yarn.lock
 | 
				
			||||||
        key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
 | 
					          packages/client/yarn.lock
 | 
				
			||||||
    - run: yarn install
 | 
					    - run: yarn install
 | 
				
			||||||
    - run: yarn lint
 | 
					    - run: yarn lint
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							@@ -33,9 +33,13 @@ jobs:
 | 
				
			|||||||
      with:
 | 
					      with:
 | 
				
			||||||
        submodules: true
 | 
					        submodules: true
 | 
				
			||||||
    - name: Use Node.js ${{ matrix.node-version }}
 | 
					    - name: Use Node.js ${{ matrix.node-version }}
 | 
				
			||||||
      uses: actions/setup-node@v1
 | 
					      uses: actions/setup-node@v3
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        node-version: ${{ matrix.node-version }}
 | 
					        node-version: ${{ matrix.node-version }}
 | 
				
			||||||
 | 
					        cache: 'yarn'
 | 
				
			||||||
 | 
					        cache-dependency-path: |
 | 
				
			||||||
 | 
					          packages/backend/yarn.lock
 | 
				
			||||||
 | 
					          packages/client/yarn.lock
 | 
				
			||||||
    - name: Install dependencies
 | 
					    - name: Install dependencies
 | 
				
			||||||
      run: yarn install
 | 
					      run: yarn install
 | 
				
			||||||
    - name: Check yarn.lock
 | 
					    - name: Check yarn.lock
 | 
				
			||||||
@@ -80,13 +84,13 @@ jobs:
 | 
				
			|||||||
    #- uses: browser-actions/setup-firefox@latest
 | 
					    #- uses: browser-actions/setup-firefox@latest
 | 
				
			||||||
    #  if: ${{ matrix.browser == 'firefox' }}
 | 
					    #  if: ${{ matrix.browser == 'firefox' }}
 | 
				
			||||||
    - name: Use Node.js ${{ matrix.node-version }}
 | 
					    - name: Use Node.js ${{ matrix.node-version }}
 | 
				
			||||||
      uses: actions/setup-node@v1
 | 
					      uses: actions/setup-node@v3
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        node-version: ${{ matrix.node-version }}
 | 
					        node-version: ${{ matrix.node-version }}
 | 
				
			||||||
    - uses: actions/cache@v2
 | 
					        cache: 'yarn'
 | 
				
			||||||
      with:
 | 
					        cache-dependency-path: |
 | 
				
			||||||
        path: '**/node_modules'
 | 
					          packages/backend/yarn.lock
 | 
				
			||||||
        key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
 | 
					          packages/client/yarn.lock
 | 
				
			||||||
    - name: Install dependencies
 | 
					    - name: Install dependencies
 | 
				
			||||||
      run: yarn install
 | 
					      run: yarn install
 | 
				
			||||||
    - name: Check yarn.lock
 | 
					    - name: Check yarn.lock
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,6 +10,33 @@
 | 
				
			|||||||
You should also include the user name that made the change.
 | 
					You should also include the user name that made the change.
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 12.110.1 (2022/04/23)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Bugfixes
 | 
				
			||||||
 | 
					- Fix GOP rendering @syuilo
 | 
				
			||||||
 | 
					- Improve performance of antenna, clip, and list @xianon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 12.110.0 (2022/04/11)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Improvements
 | 
				
			||||||
 | 
					- Improve webhook @syuilo
 | 
				
			||||||
 | 
					- Client: Show loading icon on splash screen @syuilo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Bugfixes
 | 
				
			||||||
 | 
					- API: parameter validation of users/show was wrong
 | 
				
			||||||
 | 
					- Federation: リモートインスタンスへのダイレクト投稿が届かない問題を修正 @syuilo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 12.109.2 (2022/04/03)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Bugfixes
 | 
				
			||||||
 | 
					- API: admin/update-meta was not working @syuilo
 | 
				
			||||||
 | 
					- Client: テーマを切り替えたり読み込んだりするとmeta[name="theme-color"]のcontentがundefinedになる問題を修正 @tamaina
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 12.109.1 (2022/04/02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Bugfixes
 | 
				
			||||||
 | 
					- API: Renoteが行えない問題を修正
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 12.109.0 (2022/04/02)
 | 
					## 12.109.0 (2022/04/02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Improvements
 | 
					### Improvements
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -908,6 +908,7 @@ _mfm:
 | 
				
			|||||||
  rainbow: "قوس قزح"
 | 
					  rainbow: "قوس قزح"
 | 
				
			||||||
  rainbowDescription: "اجعل المحتوى يظهر بألوان الطيف"
 | 
					  rainbowDescription: "اجعل المحتوى يظهر بألوان الطيف"
 | 
				
			||||||
  rotate: "تدوير"
 | 
					  rotate: "تدوير"
 | 
				
			||||||
 | 
					  rotateDescription: "يُدير المحتوى بزاوية معيّنة."
 | 
				
			||||||
_instanceTicker:
 | 
					_instanceTicker:
 | 
				
			||||||
  none: "لا تظهره بتاتًا"
 | 
					  none: "لا تظهره بتاتًا"
 | 
				
			||||||
  remote: "أظهر للمستخدمين البِعاد"
 | 
					  remote: "أظهر للمستخدمين البِعاد"
 | 
				
			||||||
@@ -1236,6 +1237,8 @@ _pages:
 | 
				
			|||||||
  font: "الخط"
 | 
					  font: "الخط"
 | 
				
			||||||
  fontSerif: "Serif"
 | 
					  fontSerif: "Serif"
 | 
				
			||||||
  fontSansSerif: "Sans Serif"
 | 
					  fontSansSerif: "Sans Serif"
 | 
				
			||||||
 | 
					  eyeCatchingImageSet: "عيّن صورة مصغّرة"
 | 
				
			||||||
 | 
					  eyeCatchingImageRemove: "احذف صورة مصغّرة"
 | 
				
			||||||
  chooseBlock: "إضافة كتلة"
 | 
					  chooseBlock: "إضافة كتلة"
 | 
				
			||||||
  selectType: "اختر النوع"
 | 
					  selectType: "اختر النوع"
 | 
				
			||||||
  enterVariableName: "أدخل اسم المتغيّر"
 | 
					  enterVariableName: "أدخل اسم المتغيّر"
 | 
				
			||||||
@@ -1496,6 +1499,7 @@ _notification:
 | 
				
			|||||||
    pollVote: "مصوِت شارك في الاستطلاع"
 | 
					    pollVote: "مصوِت شارك في الاستطلاع"
 | 
				
			||||||
    receiveFollowRequest: "طلبات المتابعة المتلقاة"
 | 
					    receiveFollowRequest: "طلبات المتابعة المتلقاة"
 | 
				
			||||||
    followRequestAccepted: "طلبات المتابعة المقبولة"
 | 
					    followRequestAccepted: "طلبات المتابعة المقبولة"
 | 
				
			||||||
 | 
					    groupInvited: "دعوات الفريق"
 | 
				
			||||||
    app: "إشعارات التطبيقات المرتبطة"
 | 
					    app: "إشعارات التطبيقات المرتبطة"
 | 
				
			||||||
_deck:
 | 
					_deck:
 | 
				
			||||||
  alwaysShowMainColumn: "أظهر العمود الرئيسي دائمًا"
 | 
					  alwaysShowMainColumn: "أظهر العمود الرئيسي دائمًا"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -832,6 +832,10 @@ size: "আকার"
 | 
				
			|||||||
numberOfColumn: "কলামের সংখ্যা"
 | 
					numberOfColumn: "কলামের সংখ্যা"
 | 
				
			||||||
searchByGoogle: "গুগল"
 | 
					searchByGoogle: "গুগল"
 | 
				
			||||||
indefinitely: "অনির্দিষ্ট"
 | 
					indefinitely: "অনির্দিষ্ট"
 | 
				
			||||||
 | 
					tenMinutes: "১০ মিনিট"
 | 
				
			||||||
 | 
					oneHour: "১ ঘণ্টা"
 | 
				
			||||||
 | 
					oneDay: "একদিন"
 | 
				
			||||||
 | 
					oneWeek: "এক সপ্তাহ"
 | 
				
			||||||
_emailUnavailable:
 | 
					_emailUnavailable:
 | 
				
			||||||
  used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
 | 
					  used: "এই ইমেইল ঠিকানাটি ইতোমধ্যে ব্যবহৃত হয়েছে"
 | 
				
			||||||
  format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
 | 
					  format: "এই ইমেল ঠিকানাটি সঠিকভাবে লিখা হয়নি"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1151
									
								
								locales/eo-UY.yml
									
									
									
									
									
								
							
							
						
						
									
										1151
									
								
								locales/eo-UY.yml
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -19,7 +19,6 @@ const languages = [
 | 
				
			|||||||
	'da-DK',
 | 
						'da-DK',
 | 
				
			||||||
	'de-DE',
 | 
						'de-DE',
 | 
				
			||||||
	'en-US',
 | 
						'en-US',
 | 
				
			||||||
	'eo-UY',
 | 
					 | 
				
			||||||
	'es-ES',
 | 
						'es-ES',
 | 
				
			||||||
	'fr-FR',
 | 
						'fr-FR',
 | 
				
			||||||
	'id-ID',
 | 
						'id-ID',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -481,13 +481,24 @@ showFeaturedNotesInTimeline: "Arată notele recomandate în cronologii"
 | 
				
			|||||||
objectStorage: "Object Storage"
 | 
					objectStorage: "Object Storage"
 | 
				
			||||||
useObjectStorage: "Folosește Object Storage"
 | 
					useObjectStorage: "Folosește Object Storage"
 | 
				
			||||||
objectStorageBaseUrl: "URL de bază"
 | 
					objectStorageBaseUrl: "URL de bază"
 | 
				
			||||||
 | 
					objectStorageBaseUrlDesc: "URL-ul este folosit pentru referință. Specifică URL-ul CDN-ului sau Proxy-ului tău dacă folosești unul. Pentru S3 folosește 'https://<bucket>.s3.amazonaws.com' și pentru GCS sau servicii echivalente folosește 'https://storage.googleapis.com/<bucket>', etc."
 | 
				
			||||||
objectStorageBucket: "Bucket"
 | 
					objectStorageBucket: "Bucket"
 | 
				
			||||||
objectStorageBucketDesc: "Te rog specifică numele bucket-ului furnizorului tău."
 | 
					objectStorageBucketDesc: "Te rog specifică numele bucket-ului furnizorului tău."
 | 
				
			||||||
objectStoragePrefix: "Prefix"
 | 
					objectStoragePrefix: "Prefix"
 | 
				
			||||||
objectStoragePrefixDesc: "Fișierele vor fi stocate sub directoare cu acest prefix."
 | 
					objectStoragePrefixDesc: "Fișierele vor fi stocate sub directoare cu acest prefix."
 | 
				
			||||||
objectStorageEndpoint: "Endpoint"
 | 
					objectStorageEndpoint: "Endpoint"
 | 
				
			||||||
 | 
					objectStorageEndpointDesc: "Lasă acest câmp gol dacă folosești AWS S3, dacă nu specifică endpoint-ul ca '<host>' sau '<host>:<port>', depinzând de ce serviciu folosești."
 | 
				
			||||||
objectStorageRegion: "Regiune"
 | 
					objectStorageRegion: "Regiune"
 | 
				
			||||||
 | 
					objectStorageRegionDesc: "Specifică o regiune precum 'xx-east-1'. Dacă serviciul tău nu face distincția între regiuni lasă acest câmp gol sau introdu 'us-east-1'."
 | 
				
			||||||
objectStorageUseSSL: "Folosește SSl"
 | 
					objectStorageUseSSL: "Folosește SSl"
 | 
				
			||||||
 | 
					objectStorageUseSSLDesc: "Oprește această opțiune dacă nu vei folosi HTTPS pentru conexiunile API-ului"
 | 
				
			||||||
 | 
					objectStorageUseProxy: "Conectează-te prin Proxy"
 | 
				
			||||||
 | 
					objectStorageUseProxyDesc: "Oprește această opțiune dacă vei nu folosi un Proxy pentru conexiunile API-ului"
 | 
				
			||||||
 | 
					objectStorageSetPublicRead: "Setează \"public-read\" pentru încărcare"
 | 
				
			||||||
 | 
					serverLogs: "Loguri server"
 | 
				
			||||||
 | 
					deleteAll: "Șterge tot"
 | 
				
			||||||
 | 
					showFixedPostForm: "Arată caseta de postare în vârful cronologie"
 | 
				
			||||||
 | 
					newNoteRecived: "Sunt note noi"
 | 
				
			||||||
sounds: "Sunete"
 | 
					sounds: "Sunete"
 | 
				
			||||||
listen: "Ascultă"
 | 
					listen: "Ascultă"
 | 
				
			||||||
none: "Nimic"
 | 
					none: "Nimic"
 | 
				
			||||||
@@ -522,12 +533,42 @@ removeAllFollowingDescription: "Asta va dez-urmări toate conturile din {host}.
 | 
				
			|||||||
userSuspended: "Acest utilizator a fost suspendat."
 | 
					userSuspended: "Acest utilizator a fost suspendat."
 | 
				
			||||||
userSilenced: "Acest utilizator a fost setat silențios."
 | 
					userSilenced: "Acest utilizator a fost setat silențios."
 | 
				
			||||||
yourAccountSuspendedTitle: "Acest cont a fost suspendat"
 | 
					yourAccountSuspendedTitle: "Acest cont a fost suspendat"
 | 
				
			||||||
 | 
					yourAccountSuspendedDescription: "Acest cont a fost suspendat din cauza încălcării termenilor de serviciu al serverului sau ceva similar. Contactează administratorul dacă ai dori să afli un motiv mai detaliat. Te rog nu crea un cont nou."
 | 
				
			||||||
 | 
					menu: "Meniu"
 | 
				
			||||||
 | 
					divider: "Separator"
 | 
				
			||||||
 | 
					addItem: "Adaugă element"
 | 
				
			||||||
 | 
					relays: "Relee"
 | 
				
			||||||
 | 
					addRelay: "Adaugă Releu"
 | 
				
			||||||
 | 
					inboxUrl: "URL-ul inbox-ului"
 | 
				
			||||||
 | 
					addedRelays: "Relee adăugate"
 | 
				
			||||||
 | 
					serviceworkerInfo: "Trebuie să fie activat pentru notificări push."
 | 
				
			||||||
 | 
					deletedNote: "Notă ștearsă"
 | 
				
			||||||
 | 
					invisibleNote: "Note ascunse"
 | 
				
			||||||
 | 
					enableInfiniteScroll: "Încarcă mai mult automat"
 | 
				
			||||||
 | 
					visibility: "Vizibilitate"
 | 
				
			||||||
 | 
					poll: "Sondaj"
 | 
				
			||||||
 | 
					useCw: "Ascunde conținutul"
 | 
				
			||||||
 | 
					enablePlayer: "Deschide player-ul video"
 | 
				
			||||||
 | 
					disablePlayer: "Închide player-ul video"
 | 
				
			||||||
 | 
					expandTweet: "Expandează tweet"
 | 
				
			||||||
 | 
					themeEditor: "Editor de teme"
 | 
				
			||||||
 | 
					description: "Descriere"
 | 
				
			||||||
 | 
					describeFile: "Adaugă titrări"
 | 
				
			||||||
 | 
					enterFileDescription: "Introdu titrările"
 | 
				
			||||||
 | 
					author: "Autor"
 | 
				
			||||||
 | 
					leaveConfirm: "Ai schimbări nesalvate. Vrei să renunți la ele?"
 | 
				
			||||||
 | 
					manage: "Gestionare"
 | 
				
			||||||
 | 
					plugins: "Pluginuri"
 | 
				
			||||||
 | 
					deck: "Deck"
 | 
				
			||||||
 | 
					undeck: "Părăsește Deck"
 | 
				
			||||||
 | 
					useBlurEffectForModal: "Folosește efect de blur pentru modale"
 | 
				
			||||||
smtpHost: "Gazdă"
 | 
					smtpHost: "Gazdă"
 | 
				
			||||||
smtpUser: "Nume de utilizator"
 | 
					smtpUser: "Nume de utilizator"
 | 
				
			||||||
smtpPass: "Parolă"
 | 
					smtpPass: "Parolă"
 | 
				
			||||||
clearCache: "Golește cache-ul"
 | 
					clearCache: "Golește cache-ul"
 | 
				
			||||||
info: "Despre"
 | 
					info: "Despre"
 | 
				
			||||||
user: "Utilizatori"
 | 
					user: "Utilizatori"
 | 
				
			||||||
 | 
					administration: "Gestionare"
 | 
				
			||||||
searchByGoogle: "Caută"
 | 
					searchByGoogle: "Caută"
 | 
				
			||||||
_email:
 | 
					_email:
 | 
				
			||||||
  _follow:
 | 
					  _follow:
 | 
				
			||||||
@@ -538,9 +579,11 @@ _mfm:
 | 
				
			|||||||
  emoji: "Emoji personalizat"
 | 
					  emoji: "Emoji personalizat"
 | 
				
			||||||
  search: "Caută"
 | 
					  search: "Caută"
 | 
				
			||||||
_theme:
 | 
					_theme:
 | 
				
			||||||
 | 
					  description: "Descriere"
 | 
				
			||||||
  keys:
 | 
					  keys:
 | 
				
			||||||
    mention: "Mențiune"
 | 
					    mention: "Mențiune"
 | 
				
			||||||
    renote: "Re-notează"
 | 
					    renote: "Re-notează"
 | 
				
			||||||
 | 
					    divider: "Separator"
 | 
				
			||||||
_sfx:
 | 
					_sfx:
 | 
				
			||||||
  note: "Note"
 | 
					  note: "Note"
 | 
				
			||||||
  notification: "Notificări"
 | 
					  notification: "Notificări"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -81,6 +81,8 @@ somethingHappened: "發生錯誤"
 | 
				
			|||||||
retry: "重試"
 | 
					retry: "重試"
 | 
				
			||||||
pageLoadError: "載入頁面失敗"
 | 
					pageLoadError: "載入頁面失敗"
 | 
				
			||||||
pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試"
 | 
					pageLoadErrorDescription: "這通常是因為網路錯誤或是瀏覽器快取殘留的原因。請先清除瀏覽器快取,稍後再重試"
 | 
				
			||||||
 | 
					serverIsDead: "伺服器沒有回應。請稍等片刻,然後重試。"
 | 
				
			||||||
 | 
					youShouldUpgradeClient: "請重新載入以使用新版本的客戶端顯示此頁面"
 | 
				
			||||||
enterListName: "輸入清單名稱"
 | 
					enterListName: "輸入清單名稱"
 | 
				
			||||||
privacy: "隱私"
 | 
					privacy: "隱私"
 | 
				
			||||||
makeFollowManuallyApprove: "手動審核追隨請求"
 | 
					makeFollowManuallyApprove: "手動審核追隨請求"
 | 
				
			||||||
@@ -104,6 +106,7 @@ clickToShow: "按一下以顯示"
 | 
				
			|||||||
sensitive: "敏感內容"
 | 
					sensitive: "敏感內容"
 | 
				
			||||||
add: "新增"
 | 
					add: "新增"
 | 
				
			||||||
reaction: "情感"
 | 
					reaction: "情感"
 | 
				
			||||||
 | 
					reactionSetting: "在選擇器中顯示反應"
 | 
				
			||||||
reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
 | 
					reactionSettingDescription2: "拖動以重新列序,點擊以刪除,按下 + 添加。"
 | 
				
			||||||
rememberNoteVisibility: "記住貼文可見性"
 | 
					rememberNoteVisibility: "記住貼文可見性"
 | 
				
			||||||
attachCancel: "移除附件"
 | 
					attachCancel: "移除附件"
 | 
				
			||||||
@@ -138,6 +141,7 @@ flagAsBot: "此使用者是機器人"
 | 
				
			|||||||
flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整Misskey內部系統將本帳戶識別為機器人"
 | 
					flagAsBotDescription: "如果本帳戶是由程式控制,請啟用此選項。啟用後,會作為標示幫助其他開發者防止機器人之間產生無限互動的行為,並會調整Misskey內部系統將本帳戶識別為機器人"
 | 
				
			||||||
flagAsCat: "此使用者是貓"
 | 
					flagAsCat: "此使用者是貓"
 | 
				
			||||||
flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
 | 
					flagAsCatDescription: "如果想將本帳戶標示為一隻貓,請開啟此標示"
 | 
				
			||||||
 | 
					flagShowTimelineReplies: "在時間軸上顯示貼文的回覆"
 | 
				
			||||||
autoAcceptFollowed: "自動追隨中使用者的追隨請求"
 | 
					autoAcceptFollowed: "自動追隨中使用者的追隨請求"
 | 
				
			||||||
addAccount: "添加帳戶"
 | 
					addAccount: "添加帳戶"
 | 
				
			||||||
loginFailed: "登入失敗"
 | 
					loginFailed: "登入失敗"
 | 
				
			||||||
@@ -599,6 +603,9 @@ reportAbuse: "檢舉"
 | 
				
			|||||||
reportAbuseOf: "檢舉{name}"
 | 
					reportAbuseOf: "檢舉{name}"
 | 
				
			||||||
fillAbuseReportDescription: "請填寫檢舉的詳細理由。可以的話,請附上針對的URL網址。"
 | 
					fillAbuseReportDescription: "請填寫檢舉的詳細理由。可以的話,請附上針對的URL網址。"
 | 
				
			||||||
abuseReported: "回報已送出。感謝您的報告。"
 | 
					abuseReported: "回報已送出。感謝您的報告。"
 | 
				
			||||||
 | 
					reporter: "檢舉者"
 | 
				
			||||||
 | 
					reporteeOrigin: "檢舉來源"
 | 
				
			||||||
 | 
					reporterOrigin: "檢舉者來源"
 | 
				
			||||||
send: "發送"
 | 
					send: "發送"
 | 
				
			||||||
abuseMarkAsResolved: "處理完畢"
 | 
					abuseMarkAsResolved: "處理完畢"
 | 
				
			||||||
openInNewTab: "在新分頁中開啟"
 | 
					openInNewTab: "在新分頁中開啟"
 | 
				
			||||||
@@ -734,6 +741,7 @@ postToGallery: "發佈到相簿"
 | 
				
			|||||||
gallery: "相簿"
 | 
					gallery: "相簿"
 | 
				
			||||||
recentPosts: "最新貼文"
 | 
					recentPosts: "最新貼文"
 | 
				
			||||||
popularPosts: "熱門的貼文"
 | 
					popularPosts: "熱門的貼文"
 | 
				
			||||||
 | 
					shareWithNote: "在貼文中分享"
 | 
				
			||||||
ads: "廣告"
 | 
					ads: "廣告"
 | 
				
			||||||
expiration: "期限"
 | 
					expiration: "期限"
 | 
				
			||||||
memo: "備忘錄"
 | 
					memo: "備忘錄"
 | 
				
			||||||
@@ -743,14 +751,35 @@ middle: "中"
 | 
				
			|||||||
low: "低"
 | 
					low: "低"
 | 
				
			||||||
emailNotConfiguredWarning: "沒有設定電子郵件地址"
 | 
					emailNotConfiguredWarning: "沒有設定電子郵件地址"
 | 
				
			||||||
ratio: "%"
 | 
					ratio: "%"
 | 
				
			||||||
 | 
					previewNoteText: "預覽文本"
 | 
				
			||||||
 | 
					customCss: "自定義 CSS"
 | 
				
			||||||
global: "公開"
 | 
					global: "公開"
 | 
				
			||||||
sent: "發送"
 | 
					sent: "發送"
 | 
				
			||||||
 | 
					received: "收取"
 | 
				
			||||||
 | 
					searchResult: "搜尋結果"
 | 
				
			||||||
hashtags: "#tag"
 | 
					hashtags: "#tag"
 | 
				
			||||||
 | 
					troubleshooting: "故障排除"
 | 
				
			||||||
 | 
					useBlurEffect: "在 UI 上使用模糊效果"
 | 
				
			||||||
 | 
					misskeyUpdated: "Misskey 更新完成!"
 | 
				
			||||||
 | 
					translate: "翻譯"
 | 
				
			||||||
 | 
					translatedFrom: "從 {x} 翻譯"
 | 
				
			||||||
 | 
					accountDeletionInProgress: "正在刪除帳戶"
 | 
				
			||||||
 | 
					pubSub: "Pub/Sub 帳戶"
 | 
				
			||||||
 | 
					resolved: "已解決"
 | 
				
			||||||
 | 
					unresolved: "未解決"
 | 
				
			||||||
 | 
					breakFollow: "移除追蹤者"
 | 
				
			||||||
hide: "隱藏"
 | 
					hide: "隱藏"
 | 
				
			||||||
 | 
					leaveGroupConfirm: "確定離開「{name}」?"
 | 
				
			||||||
 | 
					auto: "自動"
 | 
				
			||||||
searchByGoogle: "搜尋"
 | 
					searchByGoogle: "搜尋"
 | 
				
			||||||
indefinitely: "無期限"
 | 
					indefinitely: "無期限"
 | 
				
			||||||
_ffVisibility:
 | 
					_ffVisibility:
 | 
				
			||||||
  public: "發佈"
 | 
					  public: "發佈"
 | 
				
			||||||
 | 
					  private: "私密"
 | 
				
			||||||
 | 
					_signup:
 | 
				
			||||||
 | 
					  almostThere: "即將完成"
 | 
				
			||||||
 | 
					_accountDelete:
 | 
				
			||||||
 | 
					  inProgress: "正在刪除"
 | 
				
			||||||
_ad:
 | 
					_ad:
 | 
				
			||||||
  back: "返回"
 | 
					  back: "返回"
 | 
				
			||||||
  reduceFrequencyOfThisAd: "降低此廣告的頻率 "
 | 
					  reduceFrequencyOfThisAd: "降低此廣告的頻率 "
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	"name": "misskey",
 | 
						"name": "misskey",
 | 
				
			||||||
	"version": "12.109.0",
 | 
						"version": "12.110.1",
 | 
				
			||||||
	"codename": "indigo",
 | 
						"codename": "indigo",
 | 
				
			||||||
	"repository": {
 | 
						"repository": {
 | 
				
			||||||
		"type": "git",
 | 
							"type": "git",
 | 
				
			||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
		"js-yaml": "4.1.0"
 | 
							"js-yaml": "4.1.0"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"devDependencies": {
 | 
						"devDependencies": {
 | 
				
			||||||
		"@typescript-eslint/parser": "5.17.0",
 | 
							"@typescript-eslint/parser": "5.18.0",
 | 
				
			||||||
		"cross-env": "7.0.3",
 | 
							"cross-env": "7.0.3",
 | 
				
			||||||
		"cypress": "9.5.3",
 | 
							"cypress": "9.5.3",
 | 
				
			||||||
		"start-server-and-test": "1.14.0",
 | 
							"start-server-and-test": "1.14.0",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
	"scripts": {
 | 
						"scripts": {
 | 
				
			||||||
		"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
 | 
							"build": "tsc -p tsconfig.json || echo done. && tsc-alias -p tsconfig.json",
 | 
				
			||||||
		"watch": "node watch.mjs",
 | 
							"watch": "node watch.mjs",
 | 
				
			||||||
		"lint": "eslint --quiet src/**/*.ts",
 | 
							"lint": "eslint --quiet \"src/**/*.ts\"",
 | 
				
			||||||
		"mocha": "cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
 | 
							"mocha": "cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=\"./test/tsconfig.json\" mocha",
 | 
				
			||||||
		"test": "npm run mocha"
 | 
							"test": "npm run mocha"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
@@ -55,25 +55,24 @@
 | 
				
			|||||||
		"@types/redis": "4.0.11",
 | 
							"@types/redis": "4.0.11",
 | 
				
			||||||
		"@types/rename": "1.0.4",
 | 
							"@types/rename": "1.0.4",
 | 
				
			||||||
		"@types/sanitize-html": "2.6.2",
 | 
							"@types/sanitize-html": "2.6.2",
 | 
				
			||||||
		"@types/sharp": "0.30.0",
 | 
							"@types/sharp": "0.30.1",
 | 
				
			||||||
		"@types/sinonjs__fake-timers": "8.1.2",
 | 
							"@types/sinonjs__fake-timers": "8.1.2",
 | 
				
			||||||
		"@types/speakeasy": "2.0.7",
 | 
							"@types/speakeasy": "2.0.7",
 | 
				
			||||||
		"@types/throttle-debounce": "2.1.0",
 | 
					 | 
				
			||||||
		"@types/tinycolor2": "1.4.3",
 | 
							"@types/tinycolor2": "1.4.3",
 | 
				
			||||||
		"@types/tmp": "0.2.3",
 | 
							"@types/tmp": "0.2.3",
 | 
				
			||||||
		"@types/uuid": "8.3.4",
 | 
							"@types/uuid": "8.3.4",
 | 
				
			||||||
		"@types/web-push": "3.3.2",
 | 
							"@types/web-push": "3.3.2",
 | 
				
			||||||
		"@types/websocket": "1.0.5",
 | 
							"@types/websocket": "1.0.5",
 | 
				
			||||||
		"@types/ws": "8.5.3",
 | 
							"@types/ws": "8.5.3",
 | 
				
			||||||
		"@typescript-eslint/eslint-plugin": "5.17.0",
 | 
							"@typescript-eslint/eslint-plugin": "5.18.0",
 | 
				
			||||||
		"@typescript-eslint/parser": "5.17.0",
 | 
							"@typescript-eslint/parser": "5.18.0",
 | 
				
			||||||
		"@bull-board/koa": "3.10.2",
 | 
							"@bull-board/koa": "3.10.3",
 | 
				
			||||||
		"abort-controller": "3.0.0",
 | 
							"abort-controller": "3.0.0",
 | 
				
			||||||
		"ajv": "8.11.0",
 | 
							"ajv": "8.11.0",
 | 
				
			||||||
		"archiver": "5.3.0",
 | 
							"archiver": "5.3.0",
 | 
				
			||||||
		"autobind-decorator": "2.4.0",
 | 
							"autobind-decorator": "2.4.0",
 | 
				
			||||||
		"autwh": "0.1.0",
 | 
							"autwh": "0.1.0",
 | 
				
			||||||
		"aws-sdk": "2.1105.0",
 | 
							"aws-sdk": "2.1111.0",
 | 
				
			||||||
		"bcryptjs": "2.4.3",
 | 
							"bcryptjs": "2.4.3",
 | 
				
			||||||
		"blurhash": "1.1.5",
 | 
							"blurhash": "1.1.5",
 | 
				
			||||||
		"broadcast-channel": "4.10.0",
 | 
							"broadcast-channel": "4.10.0",
 | 
				
			||||||
@@ -89,8 +88,8 @@
 | 
				
			|||||||
		"date-fns": "2.28.0",
 | 
							"date-fns": "2.28.0",
 | 
				
			||||||
		"deep-email-validator": "0.1.21",
 | 
							"deep-email-validator": "0.1.21",
 | 
				
			||||||
		"escape-regexp": "0.0.1",
 | 
							"escape-regexp": "0.0.1",
 | 
				
			||||||
		"eslint": "8.12.0",
 | 
							"eslint": "8.13.0",
 | 
				
			||||||
		"eslint-plugin-import": "2.25.4",
 | 
							"eslint-plugin-import": "2.26.0",
 | 
				
			||||||
		"feed": "4.2.2",
 | 
							"feed": "4.2.2",
 | 
				
			||||||
		"file-type": "17.1.1",
 | 
							"file-type": "17.1.1",
 | 
				
			||||||
		"fluent-ffmpeg": "2.1.2",
 | 
							"fluent-ffmpeg": "2.1.2",
 | 
				
			||||||
@@ -145,7 +144,7 @@
 | 
				
			|||||||
		"rndstr": "1.0.0",
 | 
							"rndstr": "1.0.0",
 | 
				
			||||||
		"s-age": "1.1.2",
 | 
							"s-age": "1.1.2",
 | 
				
			||||||
		"sanitize-html": "2.7.0",
 | 
							"sanitize-html": "2.7.0",
 | 
				
			||||||
		"semver": "7.3.5",
 | 
							"semver": "7.3.6",
 | 
				
			||||||
		"sharp": "0.30.3",
 | 
							"sharp": "0.30.3",
 | 
				
			||||||
		"speakeasy": "2.0.0",
 | 
							"speakeasy": "2.0.0",
 | 
				
			||||||
		"strict-event-emitter-types": "2.0.0",
 | 
							"strict-event-emitter-types": "2.0.0",
 | 
				
			||||||
@@ -154,7 +153,6 @@
 | 
				
			|||||||
		"summaly": "2.5.0",
 | 
							"summaly": "2.5.0",
 | 
				
			||||||
		"syslog-pro": "1.0.0",
 | 
							"syslog-pro": "1.0.0",
 | 
				
			||||||
		"systeminformation": "5.11.9",
 | 
							"systeminformation": "5.11.9",
 | 
				
			||||||
		"throttle-debounce": "3.0.1",
 | 
					 | 
				
			||||||
		"tinycolor2": "1.4.2",
 | 
							"tinycolor2": "1.4.2",
 | 
				
			||||||
		"tmp": "0.2.1",
 | 
							"tmp": "0.2.1",
 | 
				
			||||||
		"ts-loader": "9.2.8",
 | 
							"ts-loader": "9.2.8",
 | 
				
			||||||
@@ -162,7 +160,7 @@
 | 
				
			|||||||
		"tsc-alias": "1.4.1",
 | 
							"tsc-alias": "1.4.1",
 | 
				
			||||||
		"tsconfig-paths": "3.14.1",
 | 
							"tsconfig-paths": "3.14.1",
 | 
				
			||||||
		"twemoji-parser": "14.0.0",
 | 
							"twemoji-parser": "14.0.0",
 | 
				
			||||||
		"typeorm": "0.3.4",
 | 
							"typeorm": "0.3.5",
 | 
				
			||||||
		"typescript": "4.6.3",
 | 
							"typescript": "4.6.3",
 | 
				
			||||||
		"ulid": "2.3.0",
 | 
							"ulid": "2.3.0",
 | 
				
			||||||
		"unzipper": "0.10.11",
 | 
							"unzipper": "0.10.11",
 | 
				
			||||||
@@ -173,7 +171,7 @@
 | 
				
			|||||||
		"xev": "2.0.1"
 | 
							"xev": "2.0.1"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"devDependencies": {
 | 
						"devDependencies": {
 | 
				
			||||||
		"@redocly/openapi-core": "1.0.0-beta.91",
 | 
							"@redocly/openapi-core": "1.0.0-beta.93",
 | 
				
			||||||
		"@types/fluent-ffmpeg": "2.1.20",
 | 
							"@types/fluent-ffmpeg": "2.1.20",
 | 
				
			||||||
		"cross-env": "7.0.3",
 | 
							"cross-env": "7.0.3",
 | 
				
			||||||
		"execa": "6.1.0"
 | 
							"execa": "6.1.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,7 +209,11 @@ export const db = new DataSource({
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function initDb() {
 | 
					export async function initDb() {
 | 
				
			||||||
	await db.connect();
 | 
						if (db.isInitialized) {
 | 
				
			||||||
 | 
							// nop
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							await db.connect();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function resetDb() {
 | 
					export async function resetDb() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,7 +42,8 @@ async function getCaptchaResponse(url: string, secret: string, response: string)
 | 
				
			|||||||
		headers: {
 | 
							headers: {
 | 
				
			||||||
			'User-Agent': config.userAgent,
 | 
								'User-Agent': config.userAgent,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		timeout: 10 * 1000,
 | 
							// TODO
 | 
				
			||||||
 | 
							//timeout: 10 * 1000,
 | 
				
			||||||
		agent: getAgentByUrl,
 | 
							agent: getAgentByUrl,
 | 
				
			||||||
	}).catch(e => {
 | 
						}).catch(e => {
 | 
				
			||||||
		throw `${e.message || e}`;
 | 
							throw `${e.message || e}`;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -120,9 +120,9 @@ export const httpsAgent = config.proxy
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
export function getAgentByUrl(url: URL, bypassProxy = false) {
 | 
					export function getAgentByUrl(url: URL, bypassProxy = false) {
 | 
				
			||||||
	if (bypassProxy || (config.proxyBypassHosts || []).includes(url.hostname)) {
 | 
						if (bypassProxy || (config.proxyBypassHosts || []).includes(url.hostname)) {
 | 
				
			||||||
		return url.protocol == 'http:' ? _http : _https;
 | 
							return url.protocol === 'http:' ? _http : _https;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		return url.protocol == 'http:' ? httpAgent : httpsAgent;
 | 
							return url.protocol === 'http:' ? httpAgent : httpsAgent;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ export const getNoteSummary = (note: Packed<'Note'>): string => {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ファイルが添付されているとき
 | 
						// ファイルが添付されているとき
 | 
				
			||||||
	if ((note.files || []).length != 0) {
 | 
						if ((note.files || []).length !== 0) {
 | 
				
			||||||
		summary += ` (📎${note.files!.length})`;
 | 
							summary += ` (📎${note.files!.length})`;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
 | 
					import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from 'typeorm';
 | 
				
			||||||
import { DriveFile } from './drive-file.js';
 | 
					 | 
				
			||||||
import { id } from '../id.js';
 | 
					import { id } from '../id.js';
 | 
				
			||||||
 | 
					import { DriveFile } from './drive-file.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Entity()
 | 
					@Entity()
 | 
				
			||||||
@Index(['usernameLower', 'host'], { unique: true })
 | 
					@Index(['usernameLower', 'host'], { unique: true })
 | 
				
			||||||
@@ -207,7 +207,7 @@ export class User {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	@Column('boolean', {
 | 
						@Column('boolean', {
 | 
				
			||||||
		default: false,
 | 
							default: false,
 | 
				
			||||||
		comment: 'Whether to show users replying to other users in the timeline'
 | 
							comment: 'Whether to show users replying to other users in the timeline',
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	public showTimelineReplies: boolean;
 | 
						public showTimelineReplies: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
import { EntityRepository, Repository, In, Not } from 'typeorm';
 | 
					import { EntityRepository, Repository, In, Not } from 'typeorm';
 | 
				
			||||||
import Ajv from 'ajv';
 | 
					import Ajv from 'ajv';
 | 
				
			||||||
import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
 | 
					import { User, ILocalUser, IRemoteUser } from '@/models/entities/user.js';
 | 
				
			||||||
import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances, DriveFiles } from '../index.js';
 | 
					 | 
				
			||||||
import config from '@/config/index.js';
 | 
					import config from '@/config/index.js';
 | 
				
			||||||
import { Packed } from '@/misc/schema.js';
 | 
					import { Packed } from '@/misc/schema.js';
 | 
				
			||||||
import { awaitAll, Promiseable } from '@/prelude/await-all.js';
 | 
					import { awaitAll, Promiseable } from '@/prelude/await-all.js';
 | 
				
			||||||
@@ -9,8 +8,9 @@ import { populateEmojis } from '@/misc/populate-emojis.js';
 | 
				
			|||||||
import { getAntennas } from '@/misc/antenna-cache.js';
 | 
					import { getAntennas } from '@/misc/antenna-cache.js';
 | 
				
			||||||
import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
 | 
					import { USER_ACTIVE_THRESHOLD, USER_ONLINE_THRESHOLD } from '@/const.js';
 | 
				
			||||||
import { Cache } from '@/misc/cache.js';
 | 
					import { Cache } from '@/misc/cache.js';
 | 
				
			||||||
import { Instance } from '../entities/instance.js';
 | 
					 | 
				
			||||||
import { db } from '@/db/postgre.js';
 | 
					import { db } from '@/db/postgre.js';
 | 
				
			||||||
 | 
					import { Instance } from '../entities/instance.js';
 | 
				
			||||||
 | 
					import { Notes, NoteUnreads, FollowRequests, Notifications, MessagingMessages, UserNotePinings, Followings, Blockings, Mutings, UserProfiles, UserSecurityKeys, UserGroupJoinings, Pages, Announcements, AnnouncementReads, Antennas, AntennaNotes, ChannelFollowings, Instances, DriveFiles } from '../index.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const userInstanceCache = new Cache<Instance | null>(1000 * 60 * 60 * 3);
 | 
					const userInstanceCache = new Cache<Instance | null>(1000 * 60 * 60 * 3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -112,7 +112,7 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
		const joinings = await UserGroupJoinings.findBy({ userId: userId });
 | 
							const joinings = await UserGroupJoinings.findBy({ userId: userId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const groupQs = Promise.all(joinings.map(j => MessagingMessages.createQueryBuilder('message')
 | 
							const groupQs = Promise.all(joinings.map(j => MessagingMessages.createQueryBuilder('message')
 | 
				
			||||||
			.where(`message.groupId = :groupId`, { groupId: j.userGroupId })
 | 
								.where('message.groupId = :groupId', { groupId: j.userGroupId })
 | 
				
			||||||
			.andWhere('message.userId != :userId', { userId: userId })
 | 
								.andWhere('message.userId != :userId', { userId: userId })
 | 
				
			||||||
			.andWhere('NOT (:userId = ANY(message.reads))', { userId: userId })
 | 
								.andWhere('NOT (:userId = ANY(message.reads))', { userId: userId })
 | 
				
			||||||
			.andWhere('message.createdAt > :joinedAt', { joinedAt: j.createdAt }) // 自分が加入する前の会話については、未読扱いしない
 | 
								.andWhere('message.createdAt > :joinedAt', { joinedAt: j.createdAt }) // 自分が加入する前の会話については、未読扱いしない
 | 
				
			||||||
@@ -204,8 +204,18 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
		);
 | 
							);
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	getAvatarUrl(user: User): string {
 | 
						async getAvatarUrl(user: User): Promise<string> {
 | 
				
			||||||
		// TODO: avatarIdがあるがavatarがない(JOINされてない)場合のハンドリング
 | 
							if (user.avatar) {
 | 
				
			||||||
 | 
								return DriveFiles.getPublicUrl(user.avatar, true) || this.getIdenticonUrl(user.id);
 | 
				
			||||||
 | 
							} else if (user.avatarId) {
 | 
				
			||||||
 | 
								const avatar = await DriveFiles.findOneByOrFail({ id: user.avatarId });
 | 
				
			||||||
 | 
								return DriveFiles.getPublicUrl(avatar, true) || this.getIdenticonUrl(user.id);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								return this.getIdenticonUrl(user.id);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						getAvatarUrlSync(user: User): string {
 | 
				
			||||||
		if (user.avatar) {
 | 
							if (user.avatar) {
 | 
				
			||||||
			return DriveFiles.getPublicUrl(user.avatar, true) || this.getIdenticonUrl(user.id);
 | 
								return DriveFiles.getPublicUrl(user.avatar, true) || this.getIdenticonUrl(user.id);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -223,7 +233,7 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
		options?: {
 | 
							options?: {
 | 
				
			||||||
			detail?: D,
 | 
								detail?: D,
 | 
				
			||||||
			includeSecrets?: boolean,
 | 
								includeSecrets?: boolean,
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
	): Promise<IsMeAndIsUserDetailed<ExpectsMe, D>> {
 | 
						): Promise<IsMeAndIsUserDetailed<ExpectsMe, D>> {
 | 
				
			||||||
		const opts = Object.assign({
 | 
							const opts = Object.assign({
 | 
				
			||||||
			detail: false,
 | 
								detail: false,
 | 
				
			||||||
@@ -274,7 +284,7 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
			name: user.name,
 | 
								name: user.name,
 | 
				
			||||||
			username: user.username,
 | 
								username: user.username,
 | 
				
			||||||
			host: user.host,
 | 
								host: user.host,
 | 
				
			||||||
			avatarUrl: this.getAvatarUrl(user),
 | 
								avatarUrl: this.getAvatarUrlSync(user),
 | 
				
			||||||
			avatarBlurhash: user.avatar?.blurhash || null,
 | 
								avatarBlurhash: user.avatar?.blurhash || null,
 | 
				
			||||||
			avatarColor: null, // 後方互換性のため
 | 
								avatarColor: null, // 後方互換性のため
 | 
				
			||||||
			isAdmin: user.isAdmin || falsy,
 | 
								isAdmin: user.isAdmin || falsy,
 | 
				
			||||||
@@ -283,7 +293,7 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
			isCat: user.isCat || falsy,
 | 
								isCat: user.isCat || falsy,
 | 
				
			||||||
			instance: user.host ? userInstanceCache.fetch(user.host,
 | 
								instance: user.host ? userInstanceCache.fetch(user.host,
 | 
				
			||||||
				() => Instances.findOneBy({ host: user.host! }),
 | 
									() => Instances.findOneBy({ host: user.host! }),
 | 
				
			||||||
				v => v != null
 | 
									v => v != null,
 | 
				
			||||||
			).then(instance => instance ? {
 | 
								).then(instance => instance ? {
 | 
				
			||||||
				name: instance.name,
 | 
									name: instance.name,
 | 
				
			||||||
				softwareName: instance.softwareName,
 | 
									softwareName: instance.softwareName,
 | 
				
			||||||
@@ -403,7 +413,7 @@ export const UserRepository = db.getRepository(User).extend({
 | 
				
			|||||||
		options?: {
 | 
							options?: {
 | 
				
			||||||
			detail?: D,
 | 
								detail?: D,
 | 
				
			||||||
			includeSecrets?: boolean,
 | 
								includeSecrets?: boolean,
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
	): Promise<IsUserDetailed<D>[]> {
 | 
						): Promise<IsUserDetailed<D>[]> {
 | 
				
			||||||
		return Promise.all(users.map(u => this.pack(u, me, options)));
 | 
							return Promise.all(users.map(u => this.pack(u, me, options)));
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
import httpSignature from 'http-signature';
 | 
					import httpSignature from 'http-signature';
 | 
				
			||||||
 | 
					import { v4 as uuid } from 'uuid';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import config from '@/config/index.js';
 | 
					import config from '@/config/index.js';
 | 
				
			||||||
import { envOption } from '../env.js';
 | 
					import { envOption } from '../env.js';
 | 
				
			||||||
@@ -16,7 +17,7 @@ import { getJobInfo } from './get-job-info.js';
 | 
				
			|||||||
import { systemQueue, dbQueue, deliverQueue, inboxQueue, objectStorageQueue, endedPollNotificationQueue, webhookDeliverQueue } from './queues.js';
 | 
					import { systemQueue, dbQueue, deliverQueue, inboxQueue, objectStorageQueue, endedPollNotificationQueue, webhookDeliverQueue } from './queues.js';
 | 
				
			||||||
import { ThinUser } from './types.js';
 | 
					import { ThinUser } from './types.js';
 | 
				
			||||||
import { IActivity } from '@/remote/activitypub/type.js';
 | 
					import { IActivity } from '@/remote/activitypub/type.js';
 | 
				
			||||||
import { Webhook } from '@/models/entities/webhook.js';
 | 
					import { Webhook, webhookEventTypes } from '@/models/entities/webhook.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function renderError(e: Error): any {
 | 
					function renderError(e: Error): any {
 | 
				
			||||||
	return {
 | 
						return {
 | 
				
			||||||
@@ -262,12 +263,16 @@ export function createCleanRemoteFilesJob() {
 | 
				
			|||||||
	});
 | 
						});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function webhookDeliver(webhook: Webhook, content: unknown) {
 | 
					export function webhookDeliver(webhook: Webhook, type: typeof webhookEventTypes[number], content: unknown) {
 | 
				
			||||||
	const data = {
 | 
						const data = {
 | 
				
			||||||
 | 
							type,
 | 
				
			||||||
		content,
 | 
							content,
 | 
				
			||||||
		webhookId: webhook.id,
 | 
							webhookId: webhook.id,
 | 
				
			||||||
 | 
							userId: webhook.userId,
 | 
				
			||||||
		to: webhook.url,
 | 
							to: webhook.url,
 | 
				
			||||||
		secret: webhook.secret,
 | 
							secret: webhook.secret,
 | 
				
			||||||
 | 
							createdAt: Date.now(),
 | 
				
			||||||
 | 
							eventId: uuid(),
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return webhookDeliverQueue.add(data, {
 | 
						return webhookDeliverQueue.add(data, {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,13 +8,9 @@ import config from '@/config/index.js';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const logger = new Logger('webhook');
 | 
					const logger = new Logger('webhook');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let latest: string | null = null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default async (job: Bull.Job<WebhookDeliverJobData>) => {
 | 
					export default async (job: Bull.Job<WebhookDeliverJobData>) => {
 | 
				
			||||||
	try {
 | 
						try {
 | 
				
			||||||
		if (latest !== (latest = JSON.stringify(job.data.content, null, 2))) {
 | 
							logger.debug(`delivering ${job.data.webhookId}`);
 | 
				
			||||||
			logger.debug(`delivering ${latest}`);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const res = await getResponse({
 | 
							const res = await getResponse({
 | 
				
			||||||
			url: job.data.to,
 | 
								url: job.data.to,
 | 
				
			||||||
@@ -25,7 +21,14 @@ export default async (job: Bull.Job<WebhookDeliverJobData>) => {
 | 
				
			|||||||
				'X-Misskey-Hook-Id': job.data.webhookId,
 | 
									'X-Misskey-Hook-Id': job.data.webhookId,
 | 
				
			||||||
				'X-Misskey-Hook-Secret': job.data.secret,
 | 
									'X-Misskey-Hook-Secret': job.data.secret,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			body: JSON.stringify(job.data.content),
 | 
								body: JSON.stringify({
 | 
				
			||||||
 | 
									hookId: job.data.webhookId,
 | 
				
			||||||
 | 
									userId: job.data.userId,
 | 
				
			||||||
 | 
									eventId: job.data.eventId,
 | 
				
			||||||
 | 
									createdAt: job.data.createdAt,
 | 
				
			||||||
 | 
									type: job.data.type,
 | 
				
			||||||
 | 
									body: job.data.content,
 | 
				
			||||||
 | 
								}),
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Webhooks.update({ id: job.data.webhookId }, {
 | 
							Webhooks.update({ id: job.data.webhookId }, {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,10 +48,14 @@ export type EndedPollNotificationJobData = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type WebhookDeliverJobData = {
 | 
					export type WebhookDeliverJobData = {
 | 
				
			||||||
 | 
						type: string;
 | 
				
			||||||
	content: unknown;
 | 
						content: unknown;
 | 
				
			||||||
	webhookId: Webhook['id'];
 | 
						webhookId: Webhook['id'];
 | 
				
			||||||
 | 
						userId: User['id'];
 | 
				
			||||||
	to: string;
 | 
						to: string;
 | 
				
			||||||
	secret: string;
 | 
						secret: string;
 | 
				
			||||||
 | 
						createdAt: number;
 | 
				
			||||||
 | 
						eventId: string;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type ThinUser = {
 | 
					export type ThinUser = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,7 +95,7 @@ function genSigningString(request: Request, includeHeaders: string[]) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function lcObjectKey(src: Record<string, string>) {
 | 
					function lcObjectKey(src: Record<string, string>) {
 | 
				
			||||||
	const dst: Record<string, string> = {};
 | 
						const dst: Record<string, string> = {};
 | 
				
			||||||
	for (const key of Object.keys(src).filter(x => x != '__proto__' && typeof src[x] === 'string')) dst[key.toLowerCase()] = src[key];
 | 
						for (const key of Object.keys(src).filter(x => x !== '__proto__' && typeof src[x] === 'string')) dst[key.toLowerCase()] = src[key];
 | 
				
			||||||
	return dst;
 | 
						return dst;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,15 +109,15 @@ export default class DeliverManager {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.recipes.filter((recipe): recipe is IDirectRecipe => {
 | 
							this.recipes.filter((recipe): recipe is IDirectRecipe =>
 | 
				
			||||||
			// followers recipes have already been processed
 | 
								// followers recipes have already been processed
 | 
				
			||||||
			isDirect(recipe)
 | 
								isDirect(recipe)
 | 
				
			||||||
			// check that shared inbox has not been added yet
 | 
								// check that shared inbox has not been added yet
 | 
				
			||||||
			&& !(recipe.to.sharedInbox && inboxes.has(recipe.to.sharedInbox))
 | 
								&& !(recipe.to.sharedInbox && inboxes.has(recipe.to.sharedInbox))
 | 
				
			||||||
			// check that they actually have an inbox
 | 
								// check that they actually have an inbox
 | 
				
			||||||
			&& recipe.to.inbox
 | 
								&& recipe.to.inbox != null,
 | 
				
			||||||
		})
 | 
							)
 | 
				
			||||||
		.forEach(recipe => inboxes.add(recipe.to.inbox));
 | 
							.forEach(recipe => inboxes.add(recipe.to.inbox!));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// deliver
 | 
							// deliver
 | 
				
			||||||
		for (const inbox of inboxes) {
 | 
							for (const inbox of inboxes) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@ export const performReadActivity = async (actor: CacheableRemoteUser, activity:
 | 
				
			|||||||
		return `skip: message not found`;
 | 
							return `skip: message not found`;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (actor.id != message.recipientId) {
 | 
						if (actor.id !== message.recipientId) {
 | 
				
			||||||
		return `skip: actor is not a message recipient`;
 | 
							return `skip: actor is not a message recipient`;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import unfollow from '@/services/following/delete.js';
 | 
					import unfollow from '@/services/following/delete.js';
 | 
				
			||||||
import cancelRequest from '@/services/following/requests/cancel.js';
 | 
					import cancelRequest from '@/services/following/requests/cancel.js';
 | 
				
			||||||
import {IAccept} from '../../type.js';
 | 
					import { IAccept } from '../../type.js';
 | 
				
			||||||
import { CacheableRemoteUser } from '@/models/entities/user.js';
 | 
					import { CacheableRemoteUser } from '@/models/entities/user.js';
 | 
				
			||||||
import { Followings } from '@/models/index.js';
 | 
					import { Followings } from '@/models/index.js';
 | 
				
			||||||
import DbResolver from '../../db-resolver.js';
 | 
					import DbResolver from '../../db-resolver.js';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,8 @@ export class LdSignature {
 | 
				
			|||||||
			headers: {
 | 
								headers: {
 | 
				
			||||||
				Accept: 'application/ld+json, application/json',
 | 
									Accept: 'application/ld+json, application/json',
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			timeout: this.loderTimeout,
 | 
								// TODO
 | 
				
			||||||
 | 
								//timeout: this.loderTimeout,
 | 
				
			||||||
			agent: u => u.protocol === 'http:' ? httpAgent : httpsAgent,
 | 
								agent: u => u.protocol === 'http:' ? httpAgent : httpsAgent,
 | 
				
			||||||
		}).then(res => {
 | 
							}).then(res => {
 | 
				
			||||||
			if (!res.ok) {
 | 
								if (!res.ok) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ export async function updateQuestion(value: any) {
 | 
				
			|||||||
		const oldCount = poll.votes[poll.choices.indexOf(choice)];
 | 
							const oldCount = poll.votes[poll.choices.indexOf(choice)];
 | 
				
			||||||
		const newCount = apChoices!.filter(ap => ap.name === choice)[0].replies!.totalItems;
 | 
							const newCount = apChoices!.filter(ap => ap.name === choice)[0].replies!.totalItems;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (oldCount != newCount) {
 | 
							if (oldCount !== newCount) {
 | 
				
			||||||
			changed = true;
 | 
								changed = true;
 | 
				
			||||||
			poll.votes[poll.choices.indexOf(choice)] = newCount;
 | 
								poll.votes[poll.choices.indexOf(choice)] = newCount;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ type IWebFinger = {
 | 
				
			|||||||
export default async function(query: string): Promise<IWebFinger> {
 | 
					export default async function(query: string): Promise<IWebFinger> {
 | 
				
			||||||
	const url = genUrl(query);
 | 
						const url = genUrl(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return await getJson(url, 'application/jrd+json, application/json');
 | 
						return await getJson(url, 'application/jrd+json, application/json') as IWebFinger;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function genUrl(query: string) {
 | 
					function genUrl(query: string) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,14 +121,14 @@ export function verifyLogin({
 | 
				
			|||||||
	signature: Buffer,
 | 
						signature: Buffer,
 | 
				
			||||||
	challenge: string
 | 
						challenge: string
 | 
				
			||||||
}) {
 | 
					}) {
 | 
				
			||||||
	if (clientData.type != 'webauthn.get') {
 | 
						if (clientData.type !== 'webauthn.get') {
 | 
				
			||||||
		throw new Error('type is not webauthn.get');
 | 
							throw new Error('type is not webauthn.get');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (hash(clientData.challenge).toString('hex') != challenge) {
 | 
						if (hash(clientData.challenge).toString('hex') !== challenge) {
 | 
				
			||||||
		throw new Error('challenge mismatch');
 | 
							throw new Error('challenge mismatch');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (clientData.origin != config.scheme + '://' + config.host) {
 | 
						if (clientData.origin !== config.scheme + '://' + config.host) {
 | 
				
			||||||
		throw new Error('origin mismatch');
 | 
							throw new Error('origin mismatch');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -148,11 +148,11 @@ export const procedures = {
 | 
				
			|||||||
		verify({ publicKey }: {publicKey: Map<number, Buffer>}) {
 | 
							verify({ publicKey }: {publicKey: Map<number, Buffer>}) {
 | 
				
			||||||
			const negTwo = publicKey.get(-2);
 | 
								const negTwo = publicKey.get(-2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!negTwo || negTwo.length != 32) {
 | 
								if (!negTwo || negTwo.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -2 key given');
 | 
									throw new Error('invalid or no -2 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			const negThree = publicKey.get(-3);
 | 
								const negThree = publicKey.get(-3);
 | 
				
			||||||
			if (!negThree || negThree.length != 32) {
 | 
								if (!negThree || negThree.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -3 key given');
 | 
									throw new Error('invalid or no -3 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -183,7 +183,7 @@ export const procedures = {
 | 
				
			|||||||
			rpIdHash: Buffer,
 | 
								rpIdHash: Buffer,
 | 
				
			||||||
			credentialId: Buffer,
 | 
								credentialId: Buffer,
 | 
				
			||||||
		}) {
 | 
							}) {
 | 
				
			||||||
			if (attStmt.alg != -7) {
 | 
								if (attStmt.alg !== -7) {
 | 
				
			||||||
				throw new Error('alg mismatch');
 | 
									throw new Error('alg mismatch');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -196,11 +196,11 @@ export const procedures = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const negTwo = publicKey.get(-2);
 | 
								const negTwo = publicKey.get(-2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!negTwo || negTwo.length != 32) {
 | 
								if (!negTwo || negTwo.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -2 key given');
 | 
									throw new Error('invalid or no -2 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			const negThree = publicKey.get(-3);
 | 
								const negThree = publicKey.get(-3);
 | 
				
			||||||
			if (!negThree || negThree.length != 32) {
 | 
								if (!negThree || negThree.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -3 key given');
 | 
									throw new Error('invalid or no -3 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -263,7 +263,7 @@ export const procedures = {
 | 
				
			|||||||
				.map((key: any) => PEMString(key))
 | 
									.map((key: any) => PEMString(key))
 | 
				
			||||||
				.concat([GSR2]);
 | 
									.concat([GSR2]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (getCertSubject(certificateChain[0]).CN != 'attest.android.com') {
 | 
								if (getCertSubject(certificateChain[0]).CN !== 'attest.android.com') {
 | 
				
			||||||
				throw new Error('invalid common name');
 | 
									throw new Error('invalid common name');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -283,11 +283,11 @@ export const procedures = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const negTwo = publicKey.get(-2);
 | 
								const negTwo = publicKey.get(-2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!negTwo || negTwo.length != 32) {
 | 
								if (!negTwo || negTwo.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -2 key given');
 | 
									throw new Error('invalid or no -2 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			const negThree = publicKey.get(-3);
 | 
								const negThree = publicKey.get(-3);
 | 
				
			||||||
			if (!negThree || negThree.length != 32) {
 | 
								if (!negThree || negThree.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -3 key given');
 | 
									throw new Error('invalid or no -3 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -332,11 +332,11 @@ export const procedures = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				const negTwo = publicKey.get(-2);
 | 
									const negTwo = publicKey.get(-2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!negTwo || negTwo.length != 32) {
 | 
									if (!negTwo || negTwo.length !== 32) {
 | 
				
			||||||
					throw new Error('invalid or no -2 key given');
 | 
										throw new Error('invalid or no -2 key given');
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				const negThree = publicKey.get(-3);
 | 
									const negThree = publicKey.get(-3);
 | 
				
			||||||
				if (!negThree || negThree.length != 32) {
 | 
									if (!negThree || negThree.length !== 32) {
 | 
				
			||||||
					throw new Error('invalid or no -3 key given');
 | 
										throw new Error('invalid or no -3 key given');
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -353,7 +353,7 @@ export const procedures = {
 | 
				
			|||||||
				// https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-ecdaa-algorithm-v2.0-id-20180227.html#ecdaa-verify-operation
 | 
									// https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-ecdaa-algorithm-v2.0-id-20180227.html#ecdaa-verify-operation
 | 
				
			||||||
				throw new Error('ECDAA-Verify is not supported');
 | 
									throw new Error('ECDAA-Verify is not supported');
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				if (attStmt.alg != -7) throw new Error('alg mismatch');
 | 
									if (attStmt.alg !== -7) throw new Error('alg mismatch');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				throw new Error('self attestation is not supported');
 | 
									throw new Error('self attestation is not supported');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -377,7 +377,7 @@ export const procedures = {
 | 
				
			|||||||
			credentialId: Buffer
 | 
								credentialId: Buffer
 | 
				
			||||||
		}) {
 | 
							}) {
 | 
				
			||||||
			const x5c: Buffer[] = attStmt.x5c;
 | 
								const x5c: Buffer[] = attStmt.x5c;
 | 
				
			||||||
			if (x5c.length != 1) {
 | 
								if (x5c.length !== 1) {
 | 
				
			||||||
				throw new Error('x5c length does not match expectation');
 | 
									throw new Error('x5c length does not match expectation');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -387,11 +387,11 @@ export const procedures = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const negTwo: Buffer = publicKey.get(-2);
 | 
								const negTwo: Buffer = publicKey.get(-2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!negTwo || negTwo.length != 32) {
 | 
								if (!negTwo || negTwo.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -2 key given');
 | 
									throw new Error('invalid or no -2 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			const negThree: Buffer = publicKey.get(-3);
 | 
								const negThree: Buffer = publicKey.get(-3);
 | 
				
			||||||
			if (!negThree || negThree.length != 32) {
 | 
								if (!negThree || negThree.length !== 32) {
 | 
				
			||||||
				throw new Error('invalid or no -3 key given');
 | 
									throw new Error('invalid or no -3 key given');
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ import { publishMainStream } from '@/services/stream.js';
 | 
				
			|||||||
export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
 | 
					export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
 | 
				
			||||||
	if (redirect) {
 | 
						if (redirect) {
 | 
				
			||||||
		//#region Cookie
 | 
							//#region Cookie
 | 
				
			||||||
		ctx.cookies.set('igi', user.token, {
 | 
							ctx.cookies.set('igi', user.token!, {
 | 
				
			||||||
			path: '/',
 | 
								path: '/',
 | 
				
			||||||
			// SEE: https://github.com/koajs/koa/issues/974
 | 
								// SEE: https://github.com/koajs/koa/issues/974
 | 
				
			||||||
			// When using a SSL proxy it should be configured to add the "X-Forwarded-Proto: https" header
 | 
								// When using a SSL proxy it should be configured to add the "X-Forwarded-Proto: https" header
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -397,12 +397,14 @@ export default define(meta, paramDef, async (ps, me) => {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	await db.transaction(async transactionalEntityManager => {
 | 
						await db.transaction(async transactionalEntityManager => {
 | 
				
			||||||
		const meta = await transactionalEntityManager.findOne(Meta, {
 | 
							const metas = await transactionalEntityManager.find(Meta, {
 | 
				
			||||||
			order: {
 | 
								order: {
 | 
				
			||||||
				id: 'DESC',
 | 
									id: 'DESC',
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const meta = metas[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (meta) {
 | 
							if (meta) {
 | 
				
			||||||
			await transactionalEntityManager.update(Meta, meta.id, set);
 | 
								await transactionalEntityManager.update(Meta, meta.id, set);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,13 +57,9 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		throw new ApiError(meta.errors.noSuchAntenna);
 | 
							throw new ApiError(meta.errors.noSuchAntenna);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const antennaQuery = AntennaNotes.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.noteId')
 | 
					 | 
				
			||||||
		.where('joining.antennaId = :antennaId', { antennaId: antenna.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'),
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'),
 | 
				
			||||||
			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
 | 
								ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
 | 
				
			||||||
		.andWhere(`note.id IN (${ antennaQuery.getQuery() })`)
 | 
							.innerJoin(AntennaNotes.metadata.targetName, 'antennaNote', 'antennaNote.noteId = note.id')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
@@ -75,7 +71,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(antennaQuery.getParameters());
 | 
							.andWhere('antennaNote.antennaId = :antennaId', { antennaId: antenna.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	generateVisibilityQuery(query, user);
 | 
						generateVisibilityQuery(query, user);
 | 
				
			||||||
	generateMutedUserQuery(query, user);
 | 
						generateMutedUserQuery(query, user);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,12 +57,8 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		throw new ApiError(meta.errors.noSuchClip);
 | 
							throw new ApiError(meta.errors.noSuchClip);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const clipQuery = ClipNotes.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.noteId')
 | 
					 | 
				
			||||||
		.where('joining.clipId = :clipId', { clipId: clip.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
				
			||||||
		.andWhere(`note.id IN (${ clipQuery.getQuery() })`)
 | 
							.innerJoin(ClipNotes.metadata.targetName, 'clipNote', 'clipNote.noteId = note.id')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
@@ -74,7 +70,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(clipQuery.getParameters());
 | 
							.andWhere('clipNote.clipId = :clipId', { clipId: clip.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (user) {
 | 
						if (user) {
 | 
				
			||||||
		generateVisibilityQuery(query, user);
 | 
							generateVisibilityQuery(query, user);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,6 @@ export const paramDef = {
 | 
				
			|||||||
} as const;
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// eslint-disable-next-line import/no-default-export
 | 
					// eslint-disable-next-line import/no-default-export
 | 
				
			||||||
// @ts-ignore
 | 
					 | 
				
			||||||
export default define(meta, paramDef, async (ps, user, _, file, cleanup) => {
 | 
					export default define(meta, paramDef, async (ps, user, _, file, cleanup) => {
 | 
				
			||||||
	// Get 'name' parameter
 | 
						// Get 'name' parameter
 | 
				
			||||||
	let name = ps.name || file.originalname;
 | 
						let name = ps.name || file.originalname;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,10 +50,10 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	const clientData = JSON.parse(ps.clientDataJSON);
 | 
						const clientData = JSON.parse(ps.clientDataJSON);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (clientData.type != 'webauthn.create') {
 | 
						if (clientData.type !== 'webauthn.create') {
 | 
				
			||||||
		throw new Error('not a creation attestation');
 | 
							throw new Error('not a creation attestation');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (clientData.origin != config.scheme + '://' + config.host) {
 | 
						if (clientData.origin !== config.scheme + '://' + config.host) {
 | 
				
			||||||
		throw new Error('origin mismatch');
 | 
							throw new Error('origin mismatch');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,7 +78,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
	const credentialId = authData.slice(55, 55 + credentialIdLength);
 | 
						const credentialId = authData.slice(55, 55 + credentialIdLength);
 | 
				
			||||||
	const publicKeyData = authData.slice(55 + credentialIdLength);
 | 
						const publicKeyData = authData.slice(55 + credentialIdLength);
 | 
				
			||||||
	const publicKey: Map<number, any> = await cborDecodeFirst(publicKeyData);
 | 
						const publicKey: Map<number, any> = await cborDecodeFirst(publicKeyData);
 | 
				
			||||||
	if (publicKey.get(3) != -7) {
 | 
						if (publicKey.get(3) !== -7) {
 | 
				
			||||||
		throw new Error('alg mismatch');
 | 
							throw new Error('alg mismatch');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		take: ps.limit,
 | 
							take: ps.limit,
 | 
				
			||||||
		skip: ps.offset,
 | 
							skip: ps.offset,
 | 
				
			||||||
		order: {
 | 
							order: {
 | 
				
			||||||
			id: ps.sort == 'asc' ? 1 : -1,
 | 
								id: ps.sort === 'asc' ? 1 : -1,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,19 +52,19 @@ export default define(meta, paramDef, async (ps) => {
 | 
				
			|||||||
		query.andWhere('note.userHost IS NULL');
 | 
							query.andWhere('note.userHost IS NULL');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps.reply != undefined) {
 | 
						if (ps.reply !== undefined) {
 | 
				
			||||||
		query.andWhere(ps.reply ? 'note.replyId IS NOT NULL' : 'note.replyId IS NULL');
 | 
							query.andWhere(ps.reply ? 'note.replyId IS NOT NULL' : 'note.replyId IS NULL');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps.renote != undefined) {
 | 
						if (ps.renote !== undefined) {
 | 
				
			||||||
		query.andWhere(ps.renote ? 'note.renoteId IS NOT NULL' : 'note.renoteId IS NULL');
 | 
							query.andWhere(ps.renote ? 'note.renoteId IS NOT NULL' : 'note.renoteId IS NULL');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps.withFiles != undefined) {
 | 
						if (ps.withFiles !== undefined) {
 | 
				
			||||||
		query.andWhere(ps.withFiles ? `note.fileIds != '{}'` : `note.fileIds = '{}'`);
 | 
							query.andWhere(ps.withFiles ? `note.fileIds != '{}'` : `note.fileIds = '{}'`);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ps.poll != undefined) {
 | 
						if (ps.poll !== undefined) {
 | 
				
			||||||
		query.andWhere(ps.poll ? 'note.hasPoll = TRUE' : 'note.hasPoll = FALSE');
 | 
							query.andWhere(ps.poll ? 'note.hasPoll = TRUE' : 'note.hasPoll = FALSE');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
			conversation.push(p);
 | 
								conversation.push(p);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (conversation.length == ps.limit) {
 | 
							if (conversation.length === ps.limit) {
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ import { Note } from '@/models/entities/note.js';
 | 
				
			|||||||
import { noteVisibilities } from '../../../../types.js';
 | 
					import { noteVisibilities } from '../../../../types.js';
 | 
				
			||||||
import { Channel } from '@/models/entities/channel.js';
 | 
					import { Channel } from '@/models/entities/channel.js';
 | 
				
			||||||
import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 | 
					import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
 | 
				
			||||||
 | 
					import { In } from 'typeorm';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const meta = {
 | 
					export const meta = {
 | 
				
			||||||
	tags: ['notes'],
 | 
						tags: ['notes'],
 | 
				
			||||||
@@ -152,6 +153,10 @@ export const paramDef = {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			required: ['poll'],
 | 
								required: ['poll'],
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// pure renote
 | 
				
			||||||
 | 
								required: ['renoteId'],
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
} as const;
 | 
					} as const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,19 +164,18 @@ export const paramDef = {
 | 
				
			|||||||
export default define(meta, paramDef, async (ps, user) => {
 | 
					export default define(meta, paramDef, async (ps, user) => {
 | 
				
			||||||
	let visibleUsers: User[] = [];
 | 
						let visibleUsers: User[] = [];
 | 
				
			||||||
	if (ps.visibleUserIds) {
 | 
						if (ps.visibleUserIds) {
 | 
				
			||||||
		visibleUsers = (await Promise.all(ps.visibleUserIds.map(id => Users.findOneBy({ id }))))
 | 
							visibleUsers = await Users.findBy({
 | 
				
			||||||
			.filter(x => x != null) as User[];
 | 
								id: In(ps.visibleUserIds),
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let files: DriveFile[] = [];
 | 
						let files: DriveFile[] = [];
 | 
				
			||||||
	const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
 | 
						const fileIds = ps.fileIds != null ? ps.fileIds : ps.mediaIds != null ? ps.mediaIds : null;
 | 
				
			||||||
	if (fileIds != null) {
 | 
						if (fileIds != null) {
 | 
				
			||||||
		files = (await Promise.all(fileIds.map(fileId =>
 | 
							files = await DriveFiles.findBy({
 | 
				
			||||||
			DriveFiles.findOneBy({
 | 
								userId: user.id,
 | 
				
			||||||
				id: fileId,
 | 
								id: In(fileIds),
 | 
				
			||||||
				userId: user.id,
 | 
							});
 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
		))).filter(file => file != null) as DriveFile[];
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	let renote: Note | null;
 | 
						let renote: Note | null;
 | 
				
			||||||
@@ -181,7 +185,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (renote == null) {
 | 
							if (renote == null) {
 | 
				
			||||||
			throw new ApiError(meta.errors.noSuchRenoteTarget);
 | 
								throw new ApiError(meta.errors.noSuchRenoteTarget);
 | 
				
			||||||
		} else if (renote.renoteId && !renote.text && !renote.fileIds) {
 | 
							} else if (renote.renoteId && !renote.text && !renote.fileIds && !renote.poll) {
 | 
				
			||||||
			throw new ApiError(meta.errors.cannotReRenote);
 | 
								throw new ApiError(meta.errors.cannotReRenote);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -204,10 +208,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (reply == null) {
 | 
							if (reply == null) {
 | 
				
			||||||
			throw new ApiError(meta.errors.noSuchReplyTarget);
 | 
								throw new ApiError(meta.errors.noSuchReplyTarget);
 | 
				
			||||||
		}
 | 
							} else if (reply.renoteId && !reply.text && !reply.fileIds && !renote.poll) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
		// 返信対象が引用でないRenoteだったらエラー
 | 
					 | 
				
			||||||
		if (reply.renoteId && !reply.text && !reply.fileIds) {
 | 
					 | 
				
			||||||
			throw new ApiError(meta.errors.cannotReplyToPureRenote);
 | 
								throw new ApiError(meta.errors.cannotReplyToPureRenote);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,7 +110,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (exist.length) {
 | 
						if (exist.length) {
 | 
				
			||||||
		if (poll.multiple) {
 | 
							if (poll.multiple) {
 | 
				
			||||||
			if (exist.some(x => x.choice == ps.choice)) {
 | 
								if (exist.some(x => x.choice === ps.choice)) {
 | 
				
			||||||
				throw new ApiError(meta.errors.alreadyVoted);
 | 
									throw new ApiError(meta.errors.alreadyVoted);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,7 +75,8 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
			Accept: 'application/json, */*',
 | 
								Accept: 'application/json, */*',
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		body: params,
 | 
							body: params,
 | 
				
			||||||
		timeout: 10000,
 | 
							// TODO
 | 
				
			||||||
 | 
							//timeout: 10000,
 | 
				
			||||||
		agent: getAgentByUrl,
 | 
							agent: getAgentByUrl,
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,12 +63,8 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//#region Construct query
 | 
						//#region Construct query
 | 
				
			||||||
	const listQuery = UserListJoinings.createQueryBuilder('joining')
 | 
					 | 
				
			||||||
		.select('joining.userId')
 | 
					 | 
				
			||||||
		.where('joining.userListId = :userListId', { userListId: list.id });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
						const query = makePaginationQuery(Notes.createQueryBuilder('note'), ps.sinceId, ps.untilId)
 | 
				
			||||||
		.andWhere(`note.userId IN (${ listQuery.getQuery() })`)
 | 
							.innerJoin(UserListJoinings.metadata.targetName, 'userListJoining', 'userListJoining.userId = note.userId')
 | 
				
			||||||
		.innerJoinAndSelect('note.user', 'user')
 | 
							.innerJoinAndSelect('note.user', 'user')
 | 
				
			||||||
		.leftJoinAndSelect('user.avatar', 'avatar')
 | 
							.leftJoinAndSelect('user.avatar', 'avatar')
 | 
				
			||||||
		.leftJoinAndSelect('user.banner', 'banner')
 | 
							.leftJoinAndSelect('user.banner', 'banner')
 | 
				
			||||||
@@ -80,7 +76,7 @@ export default define(meta, paramDef, async (ps, user) => {
 | 
				
			|||||||
		.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
							.leftJoinAndSelect('renote.user', 'renoteUser')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
							.leftJoinAndSelect('renoteUser.avatar', 'renoteUserAvatar')
 | 
				
			||||||
		.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
							.leftJoinAndSelect('renoteUser.banner', 'renoteUserBanner')
 | 
				
			||||||
		.setParameters(listQuery.getParameters());
 | 
							.andWhere('userListJoining.userListId = :userListId', { userListId: list.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	generateVisibilityQuery(query, user);
 | 
						generateVisibilityQuery(query, user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,9 +23,9 @@ export const meta = {
 | 
				
			|||||||
				items: {
 | 
									items: {
 | 
				
			||||||
					type: 'object',
 | 
										type: 'object',
 | 
				
			||||||
					ref: 'UserDetailed',
 | 
										ref: 'UserDetailed',
 | 
				
			||||||
				}
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		]
 | 
							],
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	errors: {
 | 
						errors: {
 | 
				
			||||||
@@ -70,7 +70,7 @@ export const paramDef = {
 | 
				
			|||||||
					description: 'The local host is represented with `null`.',
 | 
										description: 'The local host is represented with `null`.',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			required: ['username', 'host'],
 | 
								required: ['username'],
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
} as const;
 | 
					} as const;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,17 +24,17 @@ export default async (ctx: Koa.Context) => {
 | 
				
			|||||||
		ctx.body = { error };
 | 
							ctx.body = { error };
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (typeof username != 'string') {
 | 
						if (typeof username !== 'string') {
 | 
				
			||||||
		ctx.status = 400;
 | 
							ctx.status = 400;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (typeof password != 'string') {
 | 
						if (typeof password !== 'string') {
 | 
				
			||||||
		ctx.status = 400;
 | 
							ctx.status = 400;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (token != null && typeof token != 'string') {
 | 
						if (token != null && typeof token !== 'string') {
 | 
				
			||||||
		ctx.status = 400;
 | 
							ctx.status = 400;
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,23 +10,23 @@ import mount from 'koa-mount';
 | 
				
			|||||||
import koaLogger from 'koa-logger';
 | 
					import koaLogger from 'koa-logger';
 | 
				
			||||||
import * as slow from 'koa-slow';
 | 
					import * as slow from 'koa-slow';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import activityPub from './activitypub.js';
 | 
					import { IsNull } from 'typeorm';
 | 
				
			||||||
import nodeinfo from './nodeinfo.js';
 | 
					 | 
				
			||||||
import wellKnown from './well-known.js';
 | 
					 | 
				
			||||||
import config from '@/config/index.js';
 | 
					import config from '@/config/index.js';
 | 
				
			||||||
import apiServer from './api/index.js';
 | 
					 | 
				
			||||||
import fileServer from './file/index.js';
 | 
					 | 
				
			||||||
import proxyServer from './proxy/index.js';
 | 
					 | 
				
			||||||
import webServer from './web/index.js';
 | 
					 | 
				
			||||||
import Logger from '@/services/logger.js';
 | 
					import Logger from '@/services/logger.js';
 | 
				
			||||||
import { envOption } from '../env.js';
 | 
					 | 
				
			||||||
import { UserProfiles, Users } from '@/models/index.js';
 | 
					import { UserProfiles, Users } from '@/models/index.js';
 | 
				
			||||||
import { genIdenticon } from '@/misc/gen-identicon.js';
 | 
					import { genIdenticon } from '@/misc/gen-identicon.js';
 | 
				
			||||||
import { createTemp } from '@/misc/create-temp.js';
 | 
					import { createTemp } from '@/misc/create-temp.js';
 | 
				
			||||||
import { publishMainStream } from '@/services/stream.js';
 | 
					import { publishMainStream } from '@/services/stream.js';
 | 
				
			||||||
import * as Acct from '@/misc/acct.js';
 | 
					import * as Acct from '@/misc/acct.js';
 | 
				
			||||||
 | 
					import { envOption } from '../env.js';
 | 
				
			||||||
 | 
					import activityPub from './activitypub.js';
 | 
				
			||||||
 | 
					import nodeinfo from './nodeinfo.js';
 | 
				
			||||||
 | 
					import wellKnown from './well-known.js';
 | 
				
			||||||
 | 
					import apiServer from './api/index.js';
 | 
				
			||||||
 | 
					import fileServer from './file/index.js';
 | 
				
			||||||
 | 
					import proxyServer from './proxy/index.js';
 | 
				
			||||||
 | 
					import webServer from './web/index.js';
 | 
				
			||||||
import { initializeStreamingServer } from './api/streaming.js';
 | 
					import { initializeStreamingServer } from './api/streaming.js';
 | 
				
			||||||
import { IsNull } from 'typeorm';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const serverLogger = new Logger('server', 'gray', false);
 | 
					export const serverLogger = new Logger('server', 'gray', false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -81,7 +81,7 @@ router.get('/avatar/@:acct', async ctx => {
 | 
				
			|||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (user) {
 | 
						if (user) {
 | 
				
			||||||
		ctx.redirect(Users.getAvatarUrl(user));
 | 
							ctx.redirect(Users.getAvatarUrlSync(user));
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		ctx.redirect('/static-assets/user-unknown.png');
 | 
							ctx.redirect('/static-assets/user-unknown.png');
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
import { Feed } from 'feed';
 | 
					import { Feed } from 'feed';
 | 
				
			||||||
 | 
					import { In, IsNull } from 'typeorm';
 | 
				
			||||||
import config from '@/config/index.js';
 | 
					import config from '@/config/index.js';
 | 
				
			||||||
import { User } from '@/models/entities/user.js';
 | 
					import { User } from '@/models/entities/user.js';
 | 
				
			||||||
import { Notes, DriveFiles, UserProfiles } from '@/models/index.js';
 | 
					import { Notes, DriveFiles, UserProfiles, Users } from '@/models/index.js';
 | 
				
			||||||
import { In, IsNull } from 'typeorm';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function(user: User) {
 | 
					export default async function(user: User) {
 | 
				
			||||||
	const author = {
 | 
						const author = {
 | 
				
			||||||
@@ -29,7 +29,7 @@ export default async function(user: User) {
 | 
				
			|||||||
		generator: 'Misskey',
 | 
							generator: 'Misskey',
 | 
				
			||||||
		description: `${user.notesCount} Notes, ${profile.ffVisibility === 'public' ? user.followingCount : '?'} Following, ${profile.ffVisibility === 'public' ? user.followersCount : '?'} Followers${profile.description ? ` · ${profile.description}` : ''}`,
 | 
							description: `${user.notesCount} Notes, ${profile.ffVisibility === 'public' ? user.followingCount : '?'} Following, ${profile.ffVisibility === 'public' ? user.followersCount : '?'} Followers${profile.description ? ` · ${profile.description}` : ''}`,
 | 
				
			||||||
		link: author.link,
 | 
							link: author.link,
 | 
				
			||||||
		image: user.avatarUrl ? user.avatarUrl : undefined,
 | 
							image: await Users.getAvatarUrl(user),
 | 
				
			||||||
		feedLinks: {
 | 
							feedLinks: {
 | 
				
			||||||
			json: `${author.link}.json`,
 | 
								json: `${author.link}.json`,
 | 
				
			||||||
			atom: `${author.link}.atom`,
 | 
								atom: `${author.link}.atom`,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,20 +11,20 @@ import send from 'koa-send';
 | 
				
			|||||||
import favicon from 'koa-favicon';
 | 
					import favicon from 'koa-favicon';
 | 
				
			||||||
import views from 'koa-views';
 | 
					import views from 'koa-views';
 | 
				
			||||||
import { createBullBoard } from '@bull-board/api';
 | 
					import { createBullBoard } from '@bull-board/api';
 | 
				
			||||||
import { BullAdapter  } from '@bull-board/api/bullAdapter.js';
 | 
					import { BullAdapter } from '@bull-board/api/bullAdapter.js';
 | 
				
			||||||
import { KoaAdapter } from '@bull-board/koa';
 | 
					import { KoaAdapter } from '@bull-board/koa';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import packFeed from './feed.js';
 | 
					import { IsNull } from 'typeorm';
 | 
				
			||||||
import { fetchMeta } from '@/misc/fetch-meta.js';
 | 
					import { fetchMeta } from '@/misc/fetch-meta.js';
 | 
				
			||||||
import { genOpenapiSpec } from '../api/openapi/gen-spec.js';
 | 
					 | 
				
			||||||
import config from '@/config/index.js';
 | 
					import config from '@/config/index.js';
 | 
				
			||||||
import { Users, Notes, UserProfiles, Pages, Channels, Clips, GalleryPosts } from '@/models/index.js';
 | 
					import { Users, Notes, UserProfiles, Pages, Channels, Clips, GalleryPosts } from '@/models/index.js';
 | 
				
			||||||
import * as Acct from '@/misc/acct.js';
 | 
					import * as Acct from '@/misc/acct.js';
 | 
				
			||||||
import { getNoteSummary } from '@/misc/get-note-summary.js';
 | 
					import { getNoteSummary } from '@/misc/get-note-summary.js';
 | 
				
			||||||
 | 
					import { queues } from '@/queue/queues.js';
 | 
				
			||||||
 | 
					import { genOpenapiSpec } from '../api/openapi/gen-spec.js';
 | 
				
			||||||
import { urlPreviewHandler } from './url-preview.js';
 | 
					import { urlPreviewHandler } from './url-preview.js';
 | 
				
			||||||
import { manifestHandler } from './manifest.js';
 | 
					import { manifestHandler } from './manifest.js';
 | 
				
			||||||
import { queues } from '@/queue/queues.js';
 | 
					import packFeed from './feed.js';
 | 
				
			||||||
import { IsNull } from 'typeorm';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const _filename = fileURLToPath(import.meta.url);
 | 
					const _filename = fileURLToPath(import.meta.url);
 | 
				
			||||||
const _dirname = dirname(_filename);
 | 
					const _dirname = dirname(_filename);
 | 
				
			||||||
@@ -127,7 +127,7 @@ router.get('/twemoji/(.*)', async ctx => {
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.set('Content-Security-Policy', `default-src 'none'; style-src 'unsafe-inline'`);
 | 
						ctx.set('Content-Security-Policy', 'default-src \'none\'; style-src \'unsafe-inline\'');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	await send(ctx as any, path, {
 | 
						await send(ctx as any, path, {
 | 
				
			||||||
		root: `${_dirname}/../../../node_modules/@discordapp/twemoji/dist/svg/`,
 | 
							root: `${_dirname}/../../../node_modules/@discordapp/twemoji/dist/svg/`,
 | 
				
			||||||
@@ -235,6 +235,7 @@ router.get(['/@:user', '/@:user/:sub'], async (ctx, next) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		await ctx.render('user', {
 | 
							await ctx.render('user', {
 | 
				
			||||||
			user, profile, me,
 | 
								user, profile, me,
 | 
				
			||||||
 | 
								avatarUrl: await Users.getAvatarUrl(user),
 | 
				
			||||||
			sub: ctx.params.sub,
 | 
								sub: ctx.params.sub,
 | 
				
			||||||
			instanceName: meta.name || 'Misskey',
 | 
								instanceName: meta.name || 'Misskey',
 | 
				
			||||||
			icon: meta.iconUrl,
 | 
								icon: meta.iconUrl,
 | 
				
			||||||
@@ -274,6 +275,7 @@ router.get('/notes/:note', async (ctx, next) => {
 | 
				
			|||||||
		await ctx.render('note', {
 | 
							await ctx.render('note', {
 | 
				
			||||||
			note: _note,
 | 
								note: _note,
 | 
				
			||||||
			profile,
 | 
								profile,
 | 
				
			||||||
 | 
								avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: note.userId })),
 | 
				
			||||||
			// TODO: Let locale changeable by instance setting
 | 
								// TODO: Let locale changeable by instance setting
 | 
				
			||||||
			summary: getNoteSummary(_note),
 | 
								summary: getNoteSummary(_note),
 | 
				
			||||||
			instanceName: meta.name || 'Misskey',
 | 
								instanceName: meta.name || 'Misskey',
 | 
				
			||||||
@@ -315,6 +317,7 @@ router.get('/@:user/pages/:page', async (ctx, next) => {
 | 
				
			|||||||
		await ctx.render('page', {
 | 
							await ctx.render('page', {
 | 
				
			||||||
			page: _page,
 | 
								page: _page,
 | 
				
			||||||
			profile,
 | 
								profile,
 | 
				
			||||||
 | 
								avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: page.userId })),
 | 
				
			||||||
			instanceName: meta.name || 'Misskey',
 | 
								instanceName: meta.name || 'Misskey',
 | 
				
			||||||
			icon: meta.iconUrl,
 | 
								icon: meta.iconUrl,
 | 
				
			||||||
			themeColor: meta.themeColor,
 | 
								themeColor: meta.themeColor,
 | 
				
			||||||
@@ -346,6 +349,7 @@ router.get('/clips/:clip', async (ctx, next) => {
 | 
				
			|||||||
		await ctx.render('clip', {
 | 
							await ctx.render('clip', {
 | 
				
			||||||
			clip: _clip,
 | 
								clip: _clip,
 | 
				
			||||||
			profile,
 | 
								profile,
 | 
				
			||||||
 | 
								avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: clip.userId })),
 | 
				
			||||||
			instanceName: meta.name || 'Misskey',
 | 
								instanceName: meta.name || 'Misskey',
 | 
				
			||||||
			icon: meta.iconUrl,
 | 
								icon: meta.iconUrl,
 | 
				
			||||||
			themeColor: meta.themeColor,
 | 
								themeColor: meta.themeColor,
 | 
				
			||||||
@@ -370,6 +374,7 @@ router.get('/gallery/:post', async (ctx, next) => {
 | 
				
			|||||||
		await ctx.render('gallery-post', {
 | 
							await ctx.render('gallery-post', {
 | 
				
			||||||
			post: _post,
 | 
								post: _post,
 | 
				
			||||||
			profile,
 | 
								profile,
 | 
				
			||||||
 | 
								avatarUrl: await Users.getAvatarUrl(await Users.findOneByOrFail({ id: post.userId })),
 | 
				
			||||||
			instanceName: meta.name || 'Misskey',
 | 
								instanceName: meta.name || 'Misskey',
 | 
				
			||||||
			icon: meta.iconUrl,
 | 
								icon: meta.iconUrl,
 | 
				
			||||||
			themeColor: meta.themeColor,
 | 
								themeColor: meta.themeColor,
 | 
				
			||||||
@@ -434,7 +439,7 @@ router.get('/cli', async ctx => {
 | 
				
			|||||||
	});
 | 
						});
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const override = (source: string, target: string, depth: number = 0) =>
 | 
					const override = (source: string, target: string, depth = 0) =>
 | 
				
			||||||
	[, ...target.split('/').filter(x => x), ...source.split('/').filter(x => x).splice(depth)].join('/');
 | 
						[, ...target.split('/').filter(x => x), ...source.split('/').filter(x => x).splice(depth)].join('/');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get('/flush', async ctx => {
 | 
					router.get('/flush', async ctx => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,7 @@ html {
 | 
				
			|||||||
	transition: opacity 0.5s ease;
 | 
						transition: opacity 0.5s ease;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#splash > img {
 | 
					#splashIcon {
 | 
				
			||||||
	position: absolute;
 | 
						position: absolute;
 | 
				
			||||||
	top: 0;
 | 
						top: 0;
 | 
				
			||||||
	right: 0;
 | 
						right: 0;
 | 
				
			||||||
@@ -27,3 +27,48 @@ html {
 | 
				
			|||||||
	height: 64px;
 | 
						height: 64px;
 | 
				
			||||||
	pointer-events: none;
 | 
						pointer-events: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#splashSpinner {
 | 
				
			||||||
 | 
						position: absolute;
 | 
				
			||||||
 | 
						top: 0;
 | 
				
			||||||
 | 
						right: 0;
 | 
				
			||||||
 | 
						bottom: 0;
 | 
				
			||||||
 | 
						left: 0;
 | 
				
			||||||
 | 
						margin: auto;
 | 
				
			||||||
 | 
						display: inline-block;
 | 
				
			||||||
 | 
						width: 28px;
 | 
				
			||||||
 | 
						height: 28px;
 | 
				
			||||||
 | 
						transform: translateY(70px);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#splashSpinner:before,
 | 
				
			||||||
 | 
					#splashSpinner:after {
 | 
				
			||||||
 | 
						content: " ";
 | 
				
			||||||
 | 
						display: block;
 | 
				
			||||||
 | 
						box-sizing: border-box;
 | 
				
			||||||
 | 
						width: 28px;
 | 
				
			||||||
 | 
						height: 28px;
 | 
				
			||||||
 | 
						border-radius: 50%;
 | 
				
			||||||
 | 
						border: solid 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#splashSpinner:before {
 | 
				
			||||||
 | 
						border-color: currentColor;
 | 
				
			||||||
 | 
						opacity: 0.3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#splashSpinner:after {
 | 
				
			||||||
 | 
						position: absolute;
 | 
				
			||||||
 | 
						top: 0;
 | 
				
			||||||
 | 
						border-color: currentColor transparent transparent transparent;
 | 
				
			||||||
 | 
						animation: splashSpinner 0.5s linear infinite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@keyframes splashSpinner {
 | 
				
			||||||
 | 
						0% {
 | 
				
			||||||
 | 
							transform: rotate(0deg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						100% {
 | 
				
			||||||
 | 
							transform: rotate(360deg);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,5 +59,6 @@ html
 | 
				
			|||||||
			br
 | 
								br
 | 
				
			||||||
			| Please turn on your JavaScript
 | 
								| Please turn on your JavaScript
 | 
				
			||||||
		div#splash
 | 
							div#splash
 | 
				
			||||||
			img(src= icon || '/static-assets/splash.png')
 | 
								img#splashIcon(src= icon || '/static-assets/splash.png')
 | 
				
			||||||
 | 
								div#splashSpinner
 | 
				
			||||||
		block content
 | 
							block content
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,7 @@ block og
 | 
				
			|||||||
	meta(property='og:title'       content= title)
 | 
						meta(property='og:title'       content= title)
 | 
				
			||||||
	meta(property='og:description' content= clip.description)
 | 
						meta(property='og:description' content= clip.description)
 | 
				
			||||||
	meta(property='og:url'         content= url)
 | 
						meta(property='og:url'         content= url)
 | 
				
			||||||
	meta(property='og:image'       content= user.avatarUrl)
 | 
						meta(property='og:image'       content= avatarUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if profile.noCrawle
 | 
						if profile.noCrawle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ block og
 | 
				
			|||||||
	meta(property='og:title'       content= title)
 | 
						meta(property='og:title'       content= title)
 | 
				
			||||||
	meta(property='og:description' content= summary)
 | 
						meta(property='og:description' content= summary)
 | 
				
			||||||
	meta(property='og:url'         content= url)
 | 
						meta(property='og:url'         content= url)
 | 
				
			||||||
	meta(property='og:image'       content= user.avatarUrl)
 | 
						meta(property='og:image'       content= avatarUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if user.host || isRenote || profile.noCrawle
 | 
						if user.host || isRenote || profile.noCrawle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,7 @@ block og
 | 
				
			|||||||
	meta(property='og:title'       content= title)
 | 
						meta(property='og:title'       content= title)
 | 
				
			||||||
	meta(property='og:description' content= page.summary)
 | 
						meta(property='og:description' content= page.summary)
 | 
				
			||||||
	meta(property='og:url'         content= url)
 | 
						meta(property='og:url'         content= url)
 | 
				
			||||||
	meta(property='og:image'       content= page.eyeCatchingImage ? page.eyeCatchingImage.thumbnailUrl : user.avatarUrl)
 | 
						meta(property='og:image'       content= page.eyeCatchingImage ? page.eyeCatchingImage.thumbnailUrl : avatarUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if profile.noCrawle
 | 
						if profile.noCrawle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@ extends ./base
 | 
				
			|||||||
block vars
 | 
					block vars
 | 
				
			||||||
	- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
 | 
						- const title = user.name ? `${user.name} (@${user.username})` : `@${user.username}`;
 | 
				
			||||||
	- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
 | 
						- const url = `${config.url}/@${(user.host ? `${user.username}@${user.host}` : user.username)}`;
 | 
				
			||||||
	- const img = user.avatarUrl || null;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
block title
 | 
					block title
 | 
				
			||||||
	= `${title} | ${instanceName}`
 | 
						= `${title} | ${instanceName}`
 | 
				
			||||||
@@ -16,7 +15,7 @@ block og
 | 
				
			|||||||
	meta(property='og:title'       content= title)
 | 
						meta(property='og:title'       content= title)
 | 
				
			||||||
	meta(property='og:description' content= profile.description)
 | 
						meta(property='og:description' content= profile.description)
 | 
				
			||||||
	meta(property='og:url'         content= url)
 | 
						meta(property='og:url'         content= url)
 | 
				
			||||||
	meta(property='og:image'       content= img)
 | 
						meta(property='og:image'       content= avatarUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
block meta
 | 
					block meta
 | 
				
			||||||
	if user.host || profile.noCrawle
 | 
						if user.host || profile.noCrawle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,8 +65,7 @@ async function cancelRequest(follower: User, followee: User) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
								const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'unfollow', {
 | 
				
			||||||
					type: 'unfollow',
 | 
					 | 
				
			||||||
					user: packed,
 | 
										user: packed,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -118,8 +117,7 @@ async function unFollow(follower: User, followee: User) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
								const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'unfollow', {
 | 
				
			||||||
					type: 'unfollow',
 | 
					 | 
				
			||||||
					user: packed,
 | 
										user: packed,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ export async function uploadFromUrl({
 | 
				
			|||||||
	sensitive = false,
 | 
						sensitive = false,
 | 
				
			||||||
	force = false,
 | 
						force = false,
 | 
				
			||||||
	isLink = false,
 | 
						isLink = false,
 | 
				
			||||||
	comment = null
 | 
						comment = null,
 | 
				
			||||||
}: Args): Promise<DriveFile> {
 | 
					}: Args): Promise<DriveFile> {
 | 
				
			||||||
	let name = new URL(url).pathname.split('/').pop() || null;
 | 
						let name = new URL(url).pathname.split('/').pop() || null;
 | 
				
			||||||
	if (name == null || !DriveFiles.validateFileName(name)) {
 | 
						if (name == null || !DriveFiles.validateFileName(name)) {
 | 
				
			||||||
@@ -38,7 +38,7 @@ export async function uploadFromUrl({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// If the comment is same as the name, skip comment
 | 
						// If the comment is same as the name, skip comment
 | 
				
			||||||
	// (image.name is passed in when receiving attachment)
 | 
						// (image.name is passed in when receiving attachment)
 | 
				
			||||||
	if (comment !== null && name == comment) {
 | 
						if (comment !== null && name === comment) {
 | 
				
			||||||
		comment = null;
 | 
							comment = null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,7 +97,7 @@ async function fetchNodeinfo(instance: Instance): Promise<NodeInfo> {
 | 
				
			|||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					throw e.statusCode || e.message;
 | 
										throw e.statusCode || e.message;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			});
 | 
								}) as Record<string, unknown>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (wellknown.links == null || !Array.isArray(wellknown.links)) {
 | 
							if (wellknown.links == null || !Array.isArray(wellknown.links)) {
 | 
				
			||||||
			throw 'No wellknown links';
 | 
								throw 'No wellknown links';
 | 
				
			||||||
@@ -121,7 +121,7 @@ async function fetchNodeinfo(instance: Instance): Promise<NodeInfo> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		logger.succ(`Successfuly fetched nodeinfo of ${instance.host}`);
 | 
							logger.succ(`Successfuly fetched nodeinfo of ${instance.host}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return info;
 | 
							return info as NodeInfo;
 | 
				
			||||||
	} catch (e) {
 | 
						} catch (e) {
 | 
				
			||||||
		logger.error(`Failed to fetch nodeinfo of ${instance.host}: ${e}`);
 | 
							logger.error(`Failed to fetch nodeinfo of ${instance.host}: ${e}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -142,12 +142,12 @@ async function fetchDom(instance: Instance): Promise<DOMWindow['document']> {
 | 
				
			|||||||
	return doc;
 | 
						return doc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function fetchManifest(instance: Instance): Promise<Record<string, any> | null> {
 | 
					async function fetchManifest(instance: Instance): Promise<Record<string, unknown> | null> {
 | 
				
			||||||
	const url = 'https://' + instance.host;
 | 
						const url = 'https://' + instance.host;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const manifestUrl = url + '/manifest.json';
 | 
						const manifestUrl = url + '/manifest.json';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const manifest = await getJson(manifestUrl);
 | 
						const manifest = await getJson(manifestUrl) as Record<string, unknown>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return manifest;
 | 
						return manifest;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -167,7 +167,8 @@ async function fetchFaviconUrl(instance: Instance, doc: DOMWindow['document'] |
 | 
				
			|||||||
	const faviconUrl = url + '/favicon.ico';
 | 
						const faviconUrl = url + '/favicon.ico';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const favicon = await fetch(faviconUrl, {
 | 
						const favicon = await fetch(faviconUrl, {
 | 
				
			||||||
		timeout: 10000,
 | 
							// TODO
 | 
				
			||||||
 | 
							//timeout: 10000,
 | 
				
			||||||
		agent: getAgentByUrl,
 | 
							agent: getAgentByUrl,
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,8 +97,7 @@ export async function insertFollowingDoc(followee: { id: User['id']; host: User[
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('follow'));
 | 
								const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('follow'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'follow', {
 | 
				
			||||||
					type: 'follow',
 | 
					 | 
				
			||||||
					user: packed,
 | 
										user: packed,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -108,12 +107,11 @@ export async function insertFollowingDoc(followee: { id: User['id']; host: User[
 | 
				
			|||||||
	// Publish followed event
 | 
						// Publish followed event
 | 
				
			||||||
	if (Users.isLocalUser(followee)) {
 | 
						if (Users.isLocalUser(followee)) {
 | 
				
			||||||
		Users.pack(follower.id, followee).then(async packed => {
 | 
							Users.pack(follower.id, followee).then(async packed => {
 | 
				
			||||||
			publishMainStream(followee.id, 'followed', packed)
 | 
								publishMainStream(followee.id, 'followed', packed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const webhooks = (await getActiveWebhooks()).filter(x => x.userId === followee.id && x.on.includes('followed'));
 | 
								const webhooks = (await getActiveWebhooks()).filter(x => x.userId === followee.id && x.on.includes('followed'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'followed', {
 | 
				
			||||||
					type: 'followed',
 | 
					 | 
				
			||||||
					user: packed,
 | 
										user: packed,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,8 +38,7 @@ export default async function(follower: { id: User['id']; host: User['host']; ur
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
								const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'unfollow', {
 | 
				
			||||||
					type: 'unfollow',
 | 
					 | 
				
			||||||
					user: packed,
 | 
										user: packed,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -115,8 +115,7 @@ async function publishUnfollow(followee: Both, follower: Local) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
						const webhooks = (await getActiveWebhooks()).filter(x => x.userId === follower.id && x.on.includes('unfollow'));
 | 
				
			||||||
	for (const webhook of webhooks) {
 | 
						for (const webhook of webhooks) {
 | 
				
			||||||
		webhookDeliver(webhook, {
 | 
							webhookDeliver(webhook, 'unfollow', {
 | 
				
			||||||
			type: 'unfollow',
 | 
					 | 
				
			||||||
			user: packedFollowee,
 | 
								user: packedFollowee,
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -350,8 +350,7 @@ export default async (user: { id: User['id']; username: User['username']; host:
 | 
				
			|||||||
		getActiveWebhooks().then(webhooks => {
 | 
							getActiveWebhooks().then(webhooks => {
 | 
				
			||||||
			webhooks = webhooks.filter(x => x.userId === user.id && x.on.includes('note'));
 | 
								webhooks = webhooks.filter(x => x.userId === user.id && x.on.includes('note'));
 | 
				
			||||||
			for (const webhook of webhooks) {
 | 
								for (const webhook of webhooks) {
 | 
				
			||||||
				webhookDeliver(webhook, {
 | 
									webhookDeliver(webhook, 'note', {
 | 
				
			||||||
					type: 'note',
 | 
					 | 
				
			||||||
					note: noteObj,
 | 
										note: noteObj,
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -380,8 +379,7 @@ export default async (user: { id: User['id']; username: User['username']; host:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					const webhooks = (await getActiveWebhooks()).filter(x => x.userId === data.reply!.userId && x.on.includes('reply'));
 | 
										const webhooks = (await getActiveWebhooks()).filter(x => x.userId === data.reply!.userId && x.on.includes('reply'));
 | 
				
			||||||
					for (const webhook of webhooks) {
 | 
										for (const webhook of webhooks) {
 | 
				
			||||||
						webhookDeliver(webhook, {
 | 
											webhookDeliver(webhook, 'reply', {
 | 
				
			||||||
							type: 'reply',
 | 
					 | 
				
			||||||
							note: noteObj,
 | 
												note: noteObj,
 | 
				
			||||||
						});
 | 
											});
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -407,8 +405,7 @@ export default async (user: { id: User['id']; username: User['username']; host:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				const webhooks = (await getActiveWebhooks()).filter(x => x.userId === data.renote!.userId && x.on.includes('renote'));
 | 
									const webhooks = (await getActiveWebhooks()).filter(x => x.userId === data.renote!.userId && x.on.includes('renote'));
 | 
				
			||||||
				for (const webhook of webhooks) {
 | 
									for (const webhook of webhooks) {
 | 
				
			||||||
					webhookDeliver(webhook, {
 | 
										webhookDeliver(webhook, 'renote', {
 | 
				
			||||||
						type: 'renote',
 | 
					 | 
				
			||||||
						note: noteObj,
 | 
											note: noteObj,
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -650,8 +647,7 @@ async function createMentionedEvents(mentionedUsers: MinimumUser[], note: Note,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		const webhooks = (await getActiveWebhooks()).filter(x => x.userId === u.id && x.on.includes('mention'));
 | 
							const webhooks = (await getActiveWebhooks()).filter(x => x.userId === u.id && x.on.includes('mention'));
 | 
				
			||||||
		for (const webhook of webhooks) {
 | 
							for (const webhook of webhooks) {
 | 
				
			||||||
			webhookDeliver(webhook, {
 | 
								webhookDeliver(webhook, 'mention', {
 | 
				
			||||||
				type: 'mention',
 | 
					 | 
				
			||||||
				note: detailPackedNote,
 | 
									note: detailPackedNote,
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,20 +35,20 @@
 | 
				
			|||||||
    lodash "^4.17.19"
 | 
					    lodash "^4.17.19"
 | 
				
			||||||
    to-fast-properties "^2.0.0"
 | 
					    to-fast-properties "^2.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@bull-board/api@3.10.2":
 | 
					"@bull-board/api@3.10.3":
 | 
				
			||||||
  version "3.10.2"
 | 
					  version "3.10.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@bull-board/api/-/api-3.10.2.tgz#382450b703c671bb64eeb4d76f139b5e172d1fde"
 | 
					  resolved "https://registry.yarnpkg.com/@bull-board/api/-/api-3.10.3.tgz#c6aad9f5cfb3acbe02c57e823ee81c1ae575849d"
 | 
				
			||||||
  integrity sha512-jufgsRvAZpUoq/IbmNhwRPQKav6oFUTMjgq0Z200cvNgyFkVDexPhNKNrXdhxaKhBOass4CWvgyQQntDlvCaoQ==
 | 
					  integrity sha512-kV6EPwi9j71qBmozvDmtT01j986r4cFqNmBgq7HApYXW0G2U8Brmv0Ut0iMQZRc/X7aA5KYL3qXcEsriFnq+jw==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    redis-info "^3.0.8"
 | 
					    redis-info "^3.0.8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@bull-board/koa@3.10.2":
 | 
					"@bull-board/koa@3.10.3":
 | 
				
			||||||
  version "3.10.2"
 | 
					  version "3.10.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@bull-board/koa/-/koa-3.10.2.tgz#b50049355913eb049471169faec278d30bb44559"
 | 
					  resolved "https://registry.yarnpkg.com/@bull-board/koa/-/koa-3.10.3.tgz#b9f02629f96f056d6a038c3c58fc339d58e55abb"
 | 
				
			||||||
  integrity sha512-SJu+yoE/823sjif003X7030Cj8FmbQ+shUN3LPcUlQ9+0tIQ6ao0+FifJ4uhFnp1CN6FWpn+DCAf4vlC771PNQ==
 | 
					  integrity sha512-DK8m09MwcRwUR3tz3xI0iSK/Ih2huQ2MAWm8krYjO5deswP2yBaCWE4OtpiULLfVpf8z4zB3Oqa0xNJrKRHTOQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@bull-board/api" "3.10.2"
 | 
					    "@bull-board/api" "3.10.3"
 | 
				
			||||||
    "@bull-board/ui" "3.10.2"
 | 
					    "@bull-board/ui" "3.10.3"
 | 
				
			||||||
    ejs "^3.1.6"
 | 
					    ejs "^3.1.6"
 | 
				
			||||||
    koa "^2.13.1"
 | 
					    koa "^2.13.1"
 | 
				
			||||||
    koa-mount "^4.0.0"
 | 
					    koa-mount "^4.0.0"
 | 
				
			||||||
@@ -56,12 +56,12 @@
 | 
				
			|||||||
    koa-static "^5.0.0"
 | 
					    koa-static "^5.0.0"
 | 
				
			||||||
    koa-views "^7.0.1"
 | 
					    koa-views "^7.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@bull-board/ui@3.10.2":
 | 
					"@bull-board/ui@3.10.3":
 | 
				
			||||||
  version "3.10.2"
 | 
					  version "3.10.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@bull-board/ui/-/ui-3.10.2.tgz#ab6400b1cbd459604b9e8afeaef9e3cc235d1dd9"
 | 
					  resolved "https://registry.yarnpkg.com/@bull-board/ui/-/ui-3.10.3.tgz#b921199d42b32d8ddd9bbf0e35c25be0d64403e9"
 | 
				
			||||||
  integrity sha512-XFFbnJjZZDoMxntNdmgJoyTlEvMcCfNqeC/QPiqTJU0X/k0cxWDx36tw83PKjN+lKxPjzN/WNpTebYZPKV78Yg==
 | 
					  integrity sha512-6zYW3FqySg+4IKEeM1jt/5ixNVBKQjtZLG9W81ADVcHk8YceQ++7URWzDb8nQEct3rEW4bjR6nicVWNXMSN7Lw==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@bull-board/api" "3.10.2"
 | 
					    "@bull-board/api" "3.10.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@cspotcode/source-map-consumer@0.8.0":
 | 
					"@cspotcode/source-map-consumer@0.8.0":
 | 
				
			||||||
  version "0.8.0"
 | 
					  version "0.8.0"
 | 
				
			||||||
@@ -244,10 +244,10 @@
 | 
				
			|||||||
    require-from-string "^2.0.2"
 | 
					    require-from-string "^2.0.2"
 | 
				
			||||||
    uri-js "^4.2.2"
 | 
					    uri-js "^4.2.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@redocly/openapi-core@1.0.0-beta.91":
 | 
					"@redocly/openapi-core@1.0.0-beta.93":
 | 
				
			||||||
  version "1.0.0-beta.91"
 | 
					  version "1.0.0-beta.93"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.0.0-beta.91.tgz#58dbd8c3cad9ef82f2437c6bbeb6a14dd1bc537d"
 | 
					  resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.0.0-beta.93.tgz#882db8684598217f621adc7349288229253a0038"
 | 
				
			||||||
  integrity sha512-8RhZGn5jSoy3oZE0sAdXxhPPHrqKgy2JVJzLqjgX9LDjNf7cXOTYOXkXIkjv1tfZHFBV/H7c08rRLEdxnzn0dg==
 | 
					  integrity sha512-xQj7UnjPj3mKtkyRrm+bjzEoyo0CVNjGP4pV6BzQ0vgKf0Jqq7apFC703psyBH+JscYr7NKK1hPQU76ylhFDdg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@redocly/ajv" "^8.6.4"
 | 
					    "@redocly/ajv" "^8.6.4"
 | 
				
			||||||
    "@types/node" "^14.11.8"
 | 
					    "@types/node" "^14.11.8"
 | 
				
			||||||
@@ -785,10 +785,10 @@
 | 
				
			|||||||
    "@types/express-serve-static-core" "*"
 | 
					    "@types/express-serve-static-core" "*"
 | 
				
			||||||
    "@types/mime" "*"
 | 
					    "@types/mime" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/sharp@0.30.0":
 | 
					"@types/sharp@0.30.1":
 | 
				
			||||||
  version "0.30.0"
 | 
					  version "0.30.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.30.0.tgz#58cb016c8fdc558b4c5771ad1f3668336685c843"
 | 
					  resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.30.1.tgz#31bd128f2437e8fc31424eb23d8284aa127bfa8d"
 | 
				
			||||||
  integrity sha512-bZ0Y/JVlrOyqwlBMJ2taEgnwFavjLnyZmLOLecmOesuG5kR2Lx9b2fM4osgfVjLJi8UlE+t3R1JzRVMxF6MbfA==
 | 
					  integrity sha512-LxzQsKo2YtvA2DlqACNXmlbLGMVJCSU/HhV4N9RrStClUEf02iN+AakD/zUOpZkbo1OG+lHk2LeqoHedLwln2w==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -804,11 +804,6 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/throttle-debounce@2.1.0":
 | 
					 | 
				
			||||||
  version "2.1.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776"
 | 
					 | 
				
			||||||
  integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/tinycolor2@1.4.3":
 | 
					"@types/tinycolor2@1.4.3":
 | 
				
			||||||
  version "1.4.3"
 | 
					  version "1.4.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.3.tgz#ed4a0901f954b126e6a914b4839c77462d56e706"
 | 
					  resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.3.tgz#ed4a0901f954b126e6a914b4839c77462d56e706"
 | 
				
			||||||
@@ -850,14 +845,14 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/eslint-plugin@5.17.0":
 | 
					"@typescript-eslint/eslint-plugin@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz#950df411cec65f90d75d6320a03b2c98f6c3af7d"
 | 
				
			||||||
  integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==
 | 
					  integrity sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/type-utils" "5.17.0"
 | 
					    "@typescript-eslint/type-utils" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/utils" "5.17.0"
 | 
					    "@typescript-eslint/utils" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    functional-red-black-tree "^1.0.1"
 | 
					    functional-red-black-tree "^1.0.1"
 | 
				
			||||||
    ignore "^5.1.8"
 | 
					    ignore "^5.1.8"
 | 
				
			||||||
@@ -865,69 +860,69 @@
 | 
				
			|||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/parser@5.17.0":
 | 
					"@typescript-eslint/parser@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6"
 | 
				
			||||||
  integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==
 | 
					  integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/typescript-estree" "5.17.0"
 | 
					    "@typescript-eslint/typescript-estree" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/scope-manager@5.17.0":
 | 
					"@typescript-eslint/scope-manager@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505"
 | 
				
			||||||
  integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==
 | 
					  integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/type-utils@5.17.0":
 | 
					"@typescript-eslint/type-utils@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz#62dbfc8478abf36ba94a90ddf10be3cc8e471c74"
 | 
				
			||||||
  integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==
 | 
					  integrity sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/utils" "5.17.0"
 | 
					    "@typescript-eslint/utils" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/types@5.17.0":
 | 
					"@typescript-eslint/types@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e"
 | 
				
			||||||
  integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==
 | 
					  integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/typescript-estree@5.17.0":
 | 
					"@typescript-eslint/typescript-estree@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474"
 | 
				
			||||||
  integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==
 | 
					  integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    globby "^11.0.4"
 | 
					    globby "^11.0.4"
 | 
				
			||||||
    is-glob "^4.0.3"
 | 
					    is-glob "^4.0.3"
 | 
				
			||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/utils@5.17.0":
 | 
					"@typescript-eslint/utils@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.18.0.tgz#27fc84cf95c1a96def0aae31684cb43a37e76855"
 | 
				
			||||||
  integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==
 | 
					  integrity sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/json-schema" "^7.0.9"
 | 
					    "@types/json-schema" "^7.0.9"
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/typescript-estree" "5.17.0"
 | 
					    "@typescript-eslint/typescript-estree" "5.18.0"
 | 
				
			||||||
    eslint-scope "^5.1.1"
 | 
					    eslint-scope "^5.1.1"
 | 
				
			||||||
    eslint-utils "^3.0.0"
 | 
					    eslint-utils "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/visitor-keys@5.17.0":
 | 
					"@typescript-eslint/visitor-keys@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60"
 | 
				
			||||||
  integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==
 | 
					  integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    eslint-visitor-keys "^3.0.0"
 | 
					    eslint-visitor-keys "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@ungap/promise-all-settled@1.1.2":
 | 
					"@ungap/promise-all-settled@1.1.2":
 | 
				
			||||||
@@ -1271,10 +1266,10 @@ autwh@0.1.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    oauth "0.9.15"
 | 
					    oauth "0.9.15"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
aws-sdk@2.1105.0:
 | 
					aws-sdk@2.1111.0:
 | 
				
			||||||
  version "2.1105.0"
 | 
					  version "2.1111.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1105.0.tgz#3e63129f2aca254f1d6d5a1580b988bb786e98fa"
 | 
					  resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1111.0.tgz#02b1e5c530ef8140235ee7c48c710bb2dbd7dc84"
 | 
				
			||||||
  integrity sha512-YZ6IbKvtiw8noD/Iuyp3hXNX5NmhJ2xSU4598pZr55CfnIQ0oU5ZwtQqLPG8E07ouA363/moCYddIAVGYSkQ+A==
 | 
					  integrity sha512-WRyNcCckzmu1djTAWfR2r+BuI/PbuLrhG3oa+oH39v4NZ4EecYWFL1CoCPlC2kRUML4maSba5T4zlxjcNl7ELQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    buffer "4.9.2"
 | 
					    buffer "4.9.2"
 | 
				
			||||||
    events "1.1.1"
 | 
					    events "1.1.1"
 | 
				
			||||||
@@ -2650,32 +2645,32 @@ eslint-import-resolver-node@^0.3.6:
 | 
				
			|||||||
    debug "^3.2.7"
 | 
					    debug "^3.2.7"
 | 
				
			||||||
    resolve "^1.20.0"
 | 
					    resolve "^1.20.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-module-utils@^2.7.2:
 | 
					eslint-module-utils@^2.7.3:
 | 
				
			||||||
  version "2.7.2"
 | 
					  version "2.7.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
 | 
				
			||||||
  integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==
 | 
					  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    debug "^3.2.7"
 | 
					    debug "^3.2.7"
 | 
				
			||||||
    find-up "^2.1.0"
 | 
					    find-up "^2.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-plugin-import@2.25.4:
 | 
					eslint-plugin-import@2.26.0:
 | 
				
			||||||
  version "2.25.4"
 | 
					  version "2.26.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
 | 
				
			||||||
  integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
 | 
					  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    array-includes "^3.1.4"
 | 
					    array-includes "^3.1.4"
 | 
				
			||||||
    array.prototype.flat "^1.2.5"
 | 
					    array.prototype.flat "^1.2.5"
 | 
				
			||||||
    debug "^2.6.9"
 | 
					    debug "^2.6.9"
 | 
				
			||||||
    doctrine "^2.1.0"
 | 
					    doctrine "^2.1.0"
 | 
				
			||||||
    eslint-import-resolver-node "^0.3.6"
 | 
					    eslint-import-resolver-node "^0.3.6"
 | 
				
			||||||
    eslint-module-utils "^2.7.2"
 | 
					    eslint-module-utils "^2.7.3"
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
    is-core-module "^2.8.0"
 | 
					    is-core-module "^2.8.1"
 | 
				
			||||||
    is-glob "^4.0.3"
 | 
					    is-glob "^4.0.3"
 | 
				
			||||||
    minimatch "^3.0.4"
 | 
					    minimatch "^3.1.2"
 | 
				
			||||||
    object.values "^1.1.5"
 | 
					    object.values "^1.1.5"
 | 
				
			||||||
    resolve "^1.20.0"
 | 
					    resolve "^1.22.0"
 | 
				
			||||||
    tsconfig-paths "^3.12.0"
 | 
					    tsconfig-paths "^3.14.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-scope@^5.1.1:
 | 
					eslint-scope@^5.1.1:
 | 
				
			||||||
  version "5.1.1"
 | 
					  version "5.1.1"
 | 
				
			||||||
@@ -2715,10 +2710,10 @@ eslint-visitor-keys@^3.3.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
 | 
				
			||||||
  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 | 
					  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint@8.12.0:
 | 
					eslint@8.13.0:
 | 
				
			||||||
  version "8.12.0"
 | 
					  version "8.13.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e"
 | 
					  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7"
 | 
				
			||||||
  integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==
 | 
					  integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@eslint/eslintrc" "^1.2.1"
 | 
					    "@eslint/eslintrc" "^1.2.1"
 | 
				
			||||||
    "@humanwhocodes/config-array" "^0.9.2"
 | 
					    "@humanwhocodes/config-array" "^0.9.2"
 | 
				
			||||||
@@ -3777,10 +3772,10 @@ is-core-module@^2.2.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
is-core-module@^2.8.0:
 | 
					is-core-module@^2.8.1:
 | 
				
			||||||
  version "2.8.0"
 | 
					  version "2.8.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
 | 
					  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
 | 
				
			||||||
  integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==
 | 
					  integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4578,6 +4573,11 @@ lru-cache@^6.0.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    yallist "^4.0.0"
 | 
					    yallist "^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lru-cache@^7.4.0:
 | 
				
			||||||
 | 
					  version "7.8.1"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.8.1.tgz#68ee3f4807a57d2ba185b7fd90827d5c21ce82bb"
 | 
				
			||||||
 | 
					  integrity sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
luxon@^1.28.0:
 | 
					luxon@^1.28.0:
 | 
				
			||||||
  version "1.28.0"
 | 
					  version "1.28.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
 | 
					  resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
 | 
				
			||||||
@@ -4718,6 +4718,13 @@ minimatch@^3.0.4:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    brace-expansion "^1.1.7"
 | 
					    brace-expansion "^1.1.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minimatch@^3.1.2:
 | 
				
			||||||
 | 
					  version "3.1.2"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
 | 
				
			||||||
 | 
					  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    brace-expansion "^1.1.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6:
 | 
					minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6:
 | 
				
			||||||
  version "1.2.6"
 | 
					  version "1.2.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
 | 
					  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
 | 
				
			||||||
@@ -5419,7 +5426,7 @@ path-key@^4.0.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
 | 
					  resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
 | 
				
			||||||
  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
 | 
					  integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
path-parse@^1.0.6:
 | 
					path-parse@^1.0.6, path-parse@^1.0.7:
 | 
				
			||||||
  version "1.0.7"
 | 
					  version "1.0.7"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
 | 
					  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
 | 
				
			||||||
  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 | 
					  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 | 
				
			||||||
@@ -6075,6 +6082,15 @@ resolve@^1.15.1, resolve@^1.20.0:
 | 
				
			|||||||
    is-core-module "^2.2.0"
 | 
					    is-core-module "^2.2.0"
 | 
				
			||||||
    path-parse "^1.0.6"
 | 
					    path-parse "^1.0.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					resolve@^1.22.0:
 | 
				
			||||||
 | 
					  version "1.22.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
 | 
				
			||||||
 | 
					  integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    is-core-module "^2.8.1"
 | 
				
			||||||
 | 
					    path-parse "^1.0.7"
 | 
				
			||||||
 | 
					    supports-preserve-symlinks-flag "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
responselike@^2.0.0:
 | 
					responselike@^2.0.0:
 | 
				
			||||||
  version "2.0.0"
 | 
					  version "2.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
 | 
					  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
 | 
				
			||||||
@@ -6197,12 +6213,12 @@ seedrandom@3.0.5:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
 | 
					  resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
 | 
				
			||||||
  integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
 | 
					  integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
semver@7.3.5, semver@^7.3.5:
 | 
					semver@7.3.6:
 | 
				
			||||||
  version "7.3.5"
 | 
					  version "7.3.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
 | 
					  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b"
 | 
				
			||||||
  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
 | 
					  integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    lru-cache "^6.0.0"
 | 
					    lru-cache "^7.4.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
semver@^5.6.0:
 | 
					semver@^5.6.0:
 | 
				
			||||||
  version "5.7.1"
 | 
					  version "5.7.1"
 | 
				
			||||||
@@ -6216,6 +6232,13 @@ semver@^7.3.2, semver@^7.3.4:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    lru-cache "^6.0.0"
 | 
					    lru-cache "^6.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					semver@^7.3.5:
 | 
				
			||||||
 | 
					  version "7.3.5"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
 | 
				
			||||||
 | 
					  integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    lru-cache "^6.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
serialize-javascript@6.0.0:
 | 
					serialize-javascript@6.0.0:
 | 
				
			||||||
  version "6.0.0"
 | 
					  version "6.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
 | 
					  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
 | 
				
			||||||
@@ -6602,6 +6625,11 @@ supports-color@^7.1.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has-flag "^4.0.0"
 | 
					    has-flag "^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					supports-preserve-symlinks-flag@^1.0.0:
 | 
				
			||||||
 | 
					  version "1.0.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
 | 
				
			||||||
 | 
					  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
symbol-tree@^3.2.4:
 | 
					symbol-tree@^3.2.4:
 | 
				
			||||||
  version "3.2.4"
 | 
					  version "3.2.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
 | 
					  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
 | 
				
			||||||
@@ -6697,11 +6725,6 @@ thenify-all@^1.0.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    any-promise "^1.0.0"
 | 
					    any-promise "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
throttle-debounce@3.0.1:
 | 
					 | 
				
			||||||
  version "3.0.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
 | 
					 | 
				
			||||||
  integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
through@2:
 | 
					through@2:
 | 
				
			||||||
  version "2.3.8"
 | 
					  version "2.3.8"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 | 
					  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 | 
				
			||||||
@@ -6821,7 +6844,7 @@ tsc-alias@1.4.1:
 | 
				
			|||||||
    mylas "^2.1.4"
 | 
					    mylas "^2.1.4"
 | 
				
			||||||
    normalize-path "^3.0.0"
 | 
					    normalize-path "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsconfig-paths@3.14.1:
 | 
					tsconfig-paths@3.14.1, tsconfig-paths@^3.14.1:
 | 
				
			||||||
  version "3.14.1"
 | 
					  version "3.14.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
 | 
					  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
 | 
				
			||||||
  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
 | 
					  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
 | 
				
			||||||
@@ -6831,16 +6854,6 @@ tsconfig-paths@3.14.1:
 | 
				
			|||||||
    minimist "^1.2.6"
 | 
					    minimist "^1.2.6"
 | 
				
			||||||
    strip-bom "^3.0.0"
 | 
					    strip-bom "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsconfig-paths@^3.12.0:
 | 
					 | 
				
			||||||
  version "3.12.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
 | 
					 | 
				
			||||||
  integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/json5" "^0.0.29"
 | 
					 | 
				
			||||||
    json5 "^1.0.1"
 | 
					 | 
				
			||||||
    minimist "^1.2.0"
 | 
					 | 
				
			||||||
    strip-bom "^3.0.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tslib@^1.8.1:
 | 
					tslib@^1.8.1:
 | 
				
			||||||
  version "1.11.1"
 | 
					  version "1.11.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
 | 
					  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
 | 
				
			||||||
@@ -6939,10 +6952,10 @@ typedarray@^0.0.6:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
 | 
					  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
 | 
				
			||||||
  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
 | 
					  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typeorm@0.3.4:
 | 
					typeorm@0.3.5:
 | 
				
			||||||
  version "0.3.4"
 | 
					  version "0.3.5"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.4.tgz#6608f7efb15c40f3fa2863cefb45ff78a208c40c"
 | 
					  resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.5.tgz#8fe50d517de5ec6f4b38856ea0f180e4a60cf7e4"
 | 
				
			||||||
  integrity sha512-6v3HH12viDhIQwQDod/B0Plt1o7IYIVDxP7zwatD6fzN+IDdqTTinW/sWNw84Edpbhh2t7XILTaQEqj0NXFP/Q==
 | 
					  integrity sha512-KL4c8nQqouHaXs4m1J3xh7oXWqX4+A9poExbceLxBRtlavpJQYqiSnqt3JYGpy7Tl9vD5DG5DrmZrSslTkkW5Q==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@sqltools/formatter" "^1.2.2"
 | 
					    "@sqltools/formatter" "^1.2.2"
 | 
				
			||||||
    app-root-path "^3.0.0"
 | 
					    app-root-path "^3.0.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	"scripts": {
 | 
						"scripts": {
 | 
				
			||||||
		"watch": "webpack --watch",
 | 
							"watch": "webpack --watch",
 | 
				
			||||||
		"build": "webpack",
 | 
							"build": "webpack",
 | 
				
			||||||
		"lint": "eslint --quiet src/**/*.{ts,vue}"
 | 
							"lint": "eslint --quiet 'src/**/*.{ts,vue}'"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"resolutions": {
 | 
						"resolutions": {
 | 
				
			||||||
		"chokidar": "^3.3.1",
 | 
							"chokidar": "^3.3.1",
 | 
				
			||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		"@types/gulp": "4.0.9",
 | 
							"@types/gulp": "4.0.9",
 | 
				
			||||||
		"@types/gulp-rename": "2.0.1",
 | 
							"@types/gulp-rename": "2.0.1",
 | 
				
			||||||
		"@types/is-url": "1.2.30",
 | 
							"@types/is-url": "1.2.30",
 | 
				
			||||||
		"@types/katex": "0.11.1",
 | 
							"@types/katex": "0.14.0",
 | 
				
			||||||
		"@types/matter-js": "0.17.7",
 | 
							"@types/matter-js": "0.17.7",
 | 
				
			||||||
		"@types/mocha": "9.1.0",
 | 
							"@types/mocha": "9.1.0",
 | 
				
			||||||
		"@types/oauth": "0.9.1",
 | 
							"@types/oauth": "0.9.1",
 | 
				
			||||||
@@ -34,7 +34,7 @@
 | 
				
			|||||||
		"@types/webpack-stream": "3.2.12",
 | 
							"@types/webpack-stream": "3.2.12",
 | 
				
			||||||
		"@types/websocket": "1.0.5",
 | 
							"@types/websocket": "1.0.5",
 | 
				
			||||||
		"@types/ws": "8.5.3",
 | 
							"@types/ws": "8.5.3",
 | 
				
			||||||
		"@typescript-eslint/parser": "5.17.0",
 | 
							"@typescript-eslint/parser": "5.18.0",
 | 
				
			||||||
		"@vue/compiler-sfc": "3.2.31",
 | 
							"@vue/compiler-sfc": "3.2.31",
 | 
				
			||||||
		"abort-controller": "3.0.0",
 | 
							"abort-controller": "3.0.0",
 | 
				
			||||||
		"autobind-decorator": "2.4.0",
 | 
							"autobind-decorator": "2.4.0",
 | 
				
			||||||
@@ -49,11 +49,11 @@
 | 
				
			|||||||
		"compare-versions": "4.1.3",
 | 
							"compare-versions": "4.1.3",
 | 
				
			||||||
		"content-disposition": "0.5.4",
 | 
							"content-disposition": "0.5.4",
 | 
				
			||||||
		"css-loader": "6.7.1",
 | 
							"css-loader": "6.7.1",
 | 
				
			||||||
		"cssnano": "5.1.6",
 | 
							"cssnano": "5.1.7",
 | 
				
			||||||
		"date-fns": "2.28.0",
 | 
							"date-fns": "2.28.0",
 | 
				
			||||||
		"escape-regexp": "0.0.1",
 | 
							"escape-regexp": "0.0.1",
 | 
				
			||||||
		"eslint": "8.12.0",
 | 
							"eslint": "8.13.0",
 | 
				
			||||||
		"eslint-plugin-vue": "8.5.0",
 | 
							"eslint-plugin-vue": "8.6.0",
 | 
				
			||||||
		"eventemitter3": "4.0.7",
 | 
							"eventemitter3": "4.0.7",
 | 
				
			||||||
		"feed": "4.2.2",
 | 
							"feed": "4.2.2",
 | 
				
			||||||
		"glob": "7.2.0",
 | 
							"glob": "7.2.0",
 | 
				
			||||||
@@ -70,7 +70,7 @@
 | 
				
			|||||||
		"ms": "2.1.3",
 | 
							"ms": "2.1.3",
 | 
				
			||||||
		"nested-property": "4.0.0",
 | 
							"nested-property": "4.0.0",
 | 
				
			||||||
		"parse5": "6.0.1",
 | 
							"parse5": "6.0.1",
 | 
				
			||||||
		"photoswipe": "5.2.2",
 | 
							"photoswipe": "5.2.4",
 | 
				
			||||||
		"portscanner": "2.2.0",
 | 
							"portscanner": "2.2.0",
 | 
				
			||||||
		"postcss": "8.4.12",
 | 
							"postcss": "8.4.12",
 | 
				
			||||||
		"postcss-loader": "6.2.1",
 | 
							"postcss-loader": "6.2.1",
 | 
				
			||||||
@@ -85,7 +85,7 @@
 | 
				
			|||||||
		"reflect-metadata": "0.1.13",
 | 
							"reflect-metadata": "0.1.13",
 | 
				
			||||||
		"rndstr": "1.0.0",
 | 
							"rndstr": "1.0.0",
 | 
				
			||||||
		"s-age": "1.1.2",
 | 
							"s-age": "1.1.2",
 | 
				
			||||||
		"sass": "1.49.10",
 | 
							"sass": "1.50.0",
 | 
				
			||||||
		"sass-loader": "12.6.0",
 | 
							"sass-loader": "12.6.0",
 | 
				
			||||||
		"seedrandom": "3.0.5",
 | 
							"seedrandom": "3.0.5",
 | 
				
			||||||
		"strict-event-emitter-types": "2.0.0",
 | 
							"strict-event-emitter-types": "2.0.0",
 | 
				
			||||||
@@ -93,8 +93,8 @@
 | 
				
			|||||||
		"style-loader": "3.3.1",
 | 
							"style-loader": "3.3.1",
 | 
				
			||||||
		"syuilo-password-strength": "0.0.1",
 | 
							"syuilo-password-strength": "0.0.1",
 | 
				
			||||||
		"textarea-caret": "3.1.0",
 | 
							"textarea-caret": "3.1.0",
 | 
				
			||||||
		"three": "0.139.0",
 | 
							"three": "0.139.2",
 | 
				
			||||||
		"throttle-debounce": "3.0.1",
 | 
							"throttle-debounce": "4.0.0",
 | 
				
			||||||
		"tinycolor2": "1.4.2",
 | 
							"tinycolor2": "1.4.2",
 | 
				
			||||||
		"ts-loader": "9.2.8",
 | 
							"ts-loader": "9.2.8",
 | 
				
			||||||
		"tsc-alias": "1.5.0",
 | 
							"tsc-alias": "1.5.0",
 | 
				
			||||||
@@ -111,16 +111,16 @@
 | 
				
			|||||||
		"vue-style-loader": "4.1.3",
 | 
							"vue-style-loader": "4.1.3",
 | 
				
			||||||
		"vue-svg-loader": "0.17.0-beta.2",
 | 
							"vue-svg-loader": "0.17.0-beta.2",
 | 
				
			||||||
		"vuedraggable": "4.0.1",
 | 
							"vuedraggable": "4.0.1",
 | 
				
			||||||
		"webpack": "5.70.0",
 | 
							"webpack": "5.72.0",
 | 
				
			||||||
		"webpack-cli": "4.9.2",
 | 
							"webpack-cli": "4.9.2",
 | 
				
			||||||
		"websocket": "1.0.34",
 | 
							"websocket": "1.0.34",
 | 
				
			||||||
		"ws": "8.5.0"
 | 
							"ws": "8.5.0"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"devDependencies": {
 | 
						"devDependencies": {
 | 
				
			||||||
		"@typescript-eslint/eslint-plugin": "5.17.0",
 | 
							"@typescript-eslint/eslint-plugin": "5.18.0",
 | 
				
			||||||
		"cross-env": "7.0.3",
 | 
							"cross-env": "7.0.3",
 | 
				
			||||||
		"cypress": "9.5.3",
 | 
							"cypress": "9.5.3",
 | 
				
			||||||
		"eslint-plugin-import": "2.25.4",
 | 
							"eslint-plugin-import": "2.26.0",
 | 
				
			||||||
		"start-server-and-test": "1.14.0"
 | 
							"start-server-and-test": "1.14.0"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,7 @@ export async function addAccount(id: Account['id'], token: Account['token']) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function fetchAccount(token): Promise<Account> {
 | 
					function fetchAccount(token: string): Promise<Account> {
 | 
				
			||||||
	return new Promise((done, fail) => {
 | 
						return new Promise((done, fail) => {
 | 
				
			||||||
		// Fetch user
 | 
							// Fetch user
 | 
				
			||||||
		fetch(`${apiUrl}/i`, {
 | 
							fetch(`${apiUrl}/i`, {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,14 +51,14 @@ export function applyTheme(theme: Theme, persist = true) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (_theme.base) {
 | 
						if (_theme.base) {
 | 
				
			||||||
		const base = [lightTheme, darkTheme].find(x => x.id === _theme.base);
 | 
							const base = [lightTheme, darkTheme].find(x => x.id === _theme.base);
 | 
				
			||||||
		_theme.props = Object.assign({}, base.props, _theme.props);
 | 
							if (base) _theme.props = Object.assign({}, base.props, _theme.props);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const props = compile(_theme);
 | 
						const props = compile(_theme);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (const tag of document.head.children) {
 | 
						for (const tag of document.head.children) {
 | 
				
			||||||
		if (tag.tagName === 'META' && tag.getAttribute('name') === 'theme-color') {
 | 
							if (tag.tagName === 'META' && tag.getAttribute('name') === 'theme-color') {
 | 
				
			||||||
			tag.setAttribute('content', props['html']);
 | 
								tag.setAttribute('content', props['htmlThemeColor']);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -334,10 +334,10 @@
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
 | 
					  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
 | 
				
			||||||
  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
 | 
					  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/katex@0.11.1":
 | 
					"@types/katex@0.14.0":
 | 
				
			||||||
  version "0.11.1"
 | 
					  version "0.14.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.1.tgz#34de04477dcf79e2ef6c8d23b41a3d81f9ebeaf5"
 | 
					  resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.14.0.tgz#b84c0afc3218069a5ad64fe2a95321881021b5fe"
 | 
				
			||||||
  integrity sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==
 | 
					  integrity sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/matter-js@0.17.7":
 | 
					"@types/matter-js@0.17.7":
 | 
				
			||||||
  version "0.17.7"
 | 
					  version "0.17.7"
 | 
				
			||||||
@@ -538,14 +538,14 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/eslint-plugin@5.17.0":
 | 
					"@typescript-eslint/eslint-plugin@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz#950df411cec65f90d75d6320a03b2c98f6c3af7d"
 | 
				
			||||||
  integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==
 | 
					  integrity sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/type-utils" "5.17.0"
 | 
					    "@typescript-eslint/type-utils" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/utils" "5.17.0"
 | 
					    "@typescript-eslint/utils" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    functional-red-black-tree "^1.0.1"
 | 
					    functional-red-black-tree "^1.0.1"
 | 
				
			||||||
    ignore "^5.1.8"
 | 
					    ignore "^5.1.8"
 | 
				
			||||||
@@ -553,69 +553,69 @@
 | 
				
			|||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/parser@5.17.0":
 | 
					"@typescript-eslint/parser@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6"
 | 
				
			||||||
  integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==
 | 
					  integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/typescript-estree" "5.17.0"
 | 
					    "@typescript-eslint/typescript-estree" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/scope-manager@5.17.0":
 | 
					"@typescript-eslint/scope-manager@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505"
 | 
				
			||||||
  integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==
 | 
					  integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/type-utils@5.17.0":
 | 
					"@typescript-eslint/type-utils@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz#62dbfc8478abf36ba94a90ddf10be3cc8e471c74"
 | 
				
			||||||
  integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==
 | 
					  integrity sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/utils" "5.17.0"
 | 
					    "@typescript-eslint/utils" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/types@5.17.0":
 | 
					"@typescript-eslint/types@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e"
 | 
				
			||||||
  integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==
 | 
					  integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/typescript-estree@5.17.0":
 | 
					"@typescript-eslint/typescript-estree@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474"
 | 
				
			||||||
  integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==
 | 
					  integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    globby "^11.0.4"
 | 
					    globby "^11.0.4"
 | 
				
			||||||
    is-glob "^4.0.3"
 | 
					    is-glob "^4.0.3"
 | 
				
			||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/utils@5.17.0":
 | 
					"@typescript-eslint/utils@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.18.0.tgz#27fc84cf95c1a96def0aae31684cb43a37e76855"
 | 
				
			||||||
  integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==
 | 
					  integrity sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/json-schema" "^7.0.9"
 | 
					    "@types/json-schema" "^7.0.9"
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/typescript-estree" "5.17.0"
 | 
					    "@typescript-eslint/typescript-estree" "5.18.0"
 | 
				
			||||||
    eslint-scope "^5.1.1"
 | 
					    eslint-scope "^5.1.1"
 | 
				
			||||||
    eslint-utils "^3.0.0"
 | 
					    eslint-utils "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/visitor-keys@5.17.0":
 | 
					"@typescript-eslint/visitor-keys@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60"
 | 
				
			||||||
  integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==
 | 
					  integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    eslint-visitor-keys "^3.0.0"
 | 
					    eslint-visitor-keys "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@ungap/promise-all-settled@1.1.2":
 | 
					"@ungap/promise-all-settled@1.1.2":
 | 
				
			||||||
@@ -1772,10 +1772,10 @@ cssesc@^3.0.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
 | 
					  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
 | 
				
			||||||
  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
 | 
					  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cssnano-preset-default@^5.2.6:
 | 
					cssnano-preset-default@^5.2.7:
 | 
				
			||||||
  version "5.2.6"
 | 
					  version "5.2.7"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.6.tgz#3a2a17b7bccdbf27dbc6d4b9a8ae2c1f1720d50c"
 | 
					  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz#791e3603fb8f1b46717ac53b47e3c418e950f5f3"
 | 
				
			||||||
  integrity sha512-QwnYv/ZuNH0eWOxs3ME7w5uXXdWZKKXVGn1c6P877nPLl7SR8pAQQNe1CKbcPc+qpIbb2cq554Cv3QYG0MxTSQ==
 | 
					  integrity sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    css-declaration-sorter "^6.2.2"
 | 
					    css-declaration-sorter "^6.2.2"
 | 
				
			||||||
    cssnano-utils "^3.1.0"
 | 
					    cssnano-utils "^3.1.0"
 | 
				
			||||||
@@ -1786,7 +1786,7 @@ cssnano-preset-default@^5.2.6:
 | 
				
			|||||||
    postcss-discard-duplicates "^5.1.0"
 | 
					    postcss-discard-duplicates "^5.1.0"
 | 
				
			||||||
    postcss-discard-empty "^5.1.1"
 | 
					    postcss-discard-empty "^5.1.1"
 | 
				
			||||||
    postcss-discard-overridden "^5.1.0"
 | 
					    postcss-discard-overridden "^5.1.0"
 | 
				
			||||||
    postcss-merge-longhand "^5.1.3"
 | 
					    postcss-merge-longhand "^5.1.4"
 | 
				
			||||||
    postcss-merge-rules "^5.1.1"
 | 
					    postcss-merge-rules "^5.1.1"
 | 
				
			||||||
    postcss-minify-font-values "^5.1.0"
 | 
					    postcss-minify-font-values "^5.1.0"
 | 
				
			||||||
    postcss-minify-gradients "^5.1.1"
 | 
					    postcss-minify-gradients "^5.1.1"
 | 
				
			||||||
@@ -1812,12 +1812,12 @@ cssnano-utils@^3.1.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
 | 
					  resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861"
 | 
				
			||||||
  integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
 | 
					  integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cssnano@5.1.6:
 | 
					cssnano@5.1.7:
 | 
				
			||||||
  version "5.1.6"
 | 
					  version "5.1.7"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.6.tgz#8133722e93049ac5c284bbe5c32cbf7fc829ceca"
 | 
					  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.7.tgz#99858bef6c76c9240f0cdc9239570bc7db8368be"
 | 
				
			||||||
  integrity sha512-A7oX6Vxgpc/VzyKDTLEFpv6M0n06foVSWPAb+Xg0k6ikgSaI04SnGUKOQeBdvrXZCqhp3xdlii0cp+bUCgbCRQ==
 | 
					  integrity sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    cssnano-preset-default "^5.2.6"
 | 
					    cssnano-preset-default "^5.2.7"
 | 
				
			||||||
    lilconfig "^2.0.3"
 | 
					    lilconfig "^2.0.3"
 | 
				
			||||||
    yaml "^1.10.2"
 | 
					    yaml "^1.10.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2288,37 +2288,37 @@ eslint-import-resolver-node@^0.3.6:
 | 
				
			|||||||
    debug "^3.2.7"
 | 
					    debug "^3.2.7"
 | 
				
			||||||
    resolve "^1.20.0"
 | 
					    resolve "^1.20.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-module-utils@^2.7.2:
 | 
					eslint-module-utils@^2.7.3:
 | 
				
			||||||
  version "2.7.2"
 | 
					  version "2.7.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
 | 
				
			||||||
  integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==
 | 
					  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    debug "^3.2.7"
 | 
					    debug "^3.2.7"
 | 
				
			||||||
    find-up "^2.1.0"
 | 
					    find-up "^2.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-plugin-import@2.25.4:
 | 
					eslint-plugin-import@2.26.0:
 | 
				
			||||||
  version "2.25.4"
 | 
					  version "2.26.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
 | 
				
			||||||
  integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
 | 
					  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    array-includes "^3.1.4"
 | 
					    array-includes "^3.1.4"
 | 
				
			||||||
    array.prototype.flat "^1.2.5"
 | 
					    array.prototype.flat "^1.2.5"
 | 
				
			||||||
    debug "^2.6.9"
 | 
					    debug "^2.6.9"
 | 
				
			||||||
    doctrine "^2.1.0"
 | 
					    doctrine "^2.1.0"
 | 
				
			||||||
    eslint-import-resolver-node "^0.3.6"
 | 
					    eslint-import-resolver-node "^0.3.6"
 | 
				
			||||||
    eslint-module-utils "^2.7.2"
 | 
					    eslint-module-utils "^2.7.3"
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
    is-core-module "^2.8.0"
 | 
					    is-core-module "^2.8.1"
 | 
				
			||||||
    is-glob "^4.0.3"
 | 
					    is-glob "^4.0.3"
 | 
				
			||||||
    minimatch "^3.0.4"
 | 
					    minimatch "^3.1.2"
 | 
				
			||||||
    object.values "^1.1.5"
 | 
					    object.values "^1.1.5"
 | 
				
			||||||
    resolve "^1.20.0"
 | 
					    resolve "^1.22.0"
 | 
				
			||||||
    tsconfig-paths "^3.12.0"
 | 
					    tsconfig-paths "^3.14.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint-plugin-vue@8.5.0:
 | 
					eslint-plugin-vue@8.6.0:
 | 
				
			||||||
  version "8.5.0"
 | 
					  version "8.6.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.5.0.tgz#65832bba43ca713fa5da16bdfcf55d0095677f6f"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.6.0.tgz#fbdf0f13f8d208a4cba752bf54042661a1aec5c3"
 | 
				
			||||||
  integrity sha512-i1uHCTAKOoEj12RDvdtONWrGzjFm/djkzqfhmQ0d6M/W8KM81mhswd/z+iTZ0jCpdUedW3YRgcVfQ37/J4zoYQ==
 | 
					  integrity sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    eslint-utils "^3.0.0"
 | 
					    eslint-utils "^3.0.0"
 | 
				
			||||||
    natural-compare "^1.4.0"
 | 
					    natural-compare "^1.4.0"
 | 
				
			||||||
@@ -2371,10 +2371,10 @@ eslint-visitor-keys@^3.3.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
 | 
					  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
 | 
				
			||||||
  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 | 
					  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
eslint@8.12.0:
 | 
					eslint@8.13.0:
 | 
				
			||||||
  version "8.12.0"
 | 
					  version "8.13.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e"
 | 
					  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.13.0.tgz#6fcea43b6811e655410f5626cfcf328016badcd7"
 | 
				
			||||||
  integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==
 | 
					  integrity sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@eslint/eslintrc" "^1.2.1"
 | 
					    "@eslint/eslintrc" "^1.2.1"
 | 
				
			||||||
    "@humanwhocodes/config-array" "^0.9.2"
 | 
					    "@humanwhocodes/config-array" "^0.9.2"
 | 
				
			||||||
@@ -3243,10 +3243,10 @@ is-core-module@^2.2.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
is-core-module@^2.8.0:
 | 
					is-core-module@^2.8.1:
 | 
				
			||||||
  version "2.8.0"
 | 
					  version "2.8.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
 | 
					  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
 | 
				
			||||||
  integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==
 | 
					  integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has "^1.0.3"
 | 
					    has "^1.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3845,6 +3845,13 @@ minimatch@^3.0.4:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    brace-expansion "^1.1.7"
 | 
					    brace-expansion "^1.1.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minimatch@^3.1.2:
 | 
				
			||||||
 | 
					  version "3.1.2"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
 | 
				
			||||||
 | 
					  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    brace-expansion "^1.1.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
 | 
					minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
 | 
				
			||||||
  version "1.2.6"
 | 
					  version "1.2.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
 | 
					  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
 | 
				
			||||||
@@ -4235,7 +4242,7 @@ path-key@^3.0.0, path-key@^3.1.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
 | 
					  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
 | 
				
			||||||
  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
 | 
					  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
path-parse@^1.0.6:
 | 
					path-parse@^1.0.6, path-parse@^1.0.7:
 | 
				
			||||||
  version "1.0.7"
 | 
					  version "1.0.7"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
 | 
					  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
 | 
				
			||||||
  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 | 
					  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 | 
				
			||||||
@@ -4262,10 +4269,10 @@ performance-now@^2.1.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
 | 
					  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
 | 
				
			||||||
  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
 | 
					  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
photoswipe@5.2.2:
 | 
					photoswipe@5.2.4:
 | 
				
			||||||
  version "5.2.2"
 | 
					  version "5.2.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/photoswipe/-/photoswipe-5.2.2.tgz#3960b953c504a67d1b074f60a31229ada2ed5c07"
 | 
					  resolved "https://registry.yarnpkg.com/photoswipe/-/photoswipe-5.2.4.tgz#918fd64c6b41b6a693743e5d70ee1a59747f491d"
 | 
				
			||||||
  integrity sha512-es0AEX4zgzzcrr8ztdPWRODSARCLqCm/5H/aSwFtZwovokGtzBf/y/HXJxHMnNx6h4650DkKVIVFYILXJhmMhw==
 | 
					  integrity sha512-7p+VH7ELUnW9/3rCULCmyXcUCEuZwcsxvxPQYzR4wk3EaXcLCiINMCspc9Qq9AJYNsqYo1qGVL1y1Tch8uKAjw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
picocolors@^1.0.0:
 | 
					picocolors@^1.0.0:
 | 
				
			||||||
  version "1.0.0"
 | 
					  version "1.0.0"
 | 
				
			||||||
@@ -4356,10 +4363,10 @@ postcss-loader@6.2.1:
 | 
				
			|||||||
    klona "^2.0.5"
 | 
					    klona "^2.0.5"
 | 
				
			||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
postcss-merge-longhand@^5.1.3:
 | 
					postcss-merge-longhand@^5.1.4:
 | 
				
			||||||
  version "5.1.3"
 | 
					  version "5.1.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.3.tgz#a49e2be6237316e3b55e329e0a8da15d1f9f47ab"
 | 
					  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz#0f46f8753989a33260efc47de9a0cdc571f2ec5c"
 | 
				
			||||||
  integrity sha512-lX8GPGvZ0iGP/IboM7HXH5JwkXvXod1Rr8H8ixwiA372hArk0zP4ZcCy4z4Prg/bfNlbbTf0KCOjCF9kKnpP/w==
 | 
					  integrity sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    postcss-value-parser "^4.2.0"
 | 
					    postcss-value-parser "^4.2.0"
 | 
				
			||||||
    stylehacks "^5.1.0"
 | 
					    stylehacks "^5.1.0"
 | 
				
			||||||
@@ -4896,6 +4903,15 @@ resolve@^1.15.1, resolve@^1.20.0:
 | 
				
			|||||||
    is-core-module "^2.2.0"
 | 
					    is-core-module "^2.2.0"
 | 
				
			||||||
    path-parse "^1.0.6"
 | 
					    path-parse "^1.0.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					resolve@^1.22.0:
 | 
				
			||||||
 | 
					  version "1.22.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
 | 
				
			||||||
 | 
					  integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    is-core-module "^2.8.1"
 | 
				
			||||||
 | 
					    path-parse "^1.0.7"
 | 
				
			||||||
 | 
					    supports-preserve-symlinks-flag "^1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
resolve@^1.9.0:
 | 
					resolve@^1.9.0:
 | 
				
			||||||
  version "1.18.1"
 | 
					  version "1.18.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130"
 | 
					  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130"
 | 
				
			||||||
@@ -4984,10 +5000,10 @@ sass-loader@12.6.0:
 | 
				
			|||||||
    klona "^2.0.4"
 | 
					    klona "^2.0.4"
 | 
				
			||||||
    neo-async "^2.6.2"
 | 
					    neo-async "^2.6.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sass@1.49.10:
 | 
					sass@1.50.0:
 | 
				
			||||||
  version "1.49.10"
 | 
					  version "1.50.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.10.tgz#7b83cee0f03bbba443111b3f94944fde2b0c7a6b"
 | 
					  resolved "https://registry.yarnpkg.com/sass/-/sass-1.50.0.tgz#3e407e2ebc53b12f1e35ce45efb226ea6063c7c8"
 | 
				
			||||||
  integrity sha512-w37zfWJwKu4I78U4z63u1mmgoncq+v3iOB4yzQMPyAPVHHawaQSnu9C9ysGQnZEhW609jkcLioJcMCqm75JMdg==
 | 
					  integrity sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    chokidar ">=3.0.0 <4.0.0"
 | 
					    chokidar ">=3.0.0 <4.0.0"
 | 
				
			||||||
    immutable "^4.0.0"
 | 
					    immutable "^4.0.0"
 | 
				
			||||||
@@ -5349,6 +5365,11 @@ supports-color@^7.0.0, supports-color@^7.1.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    has-flag "^4.0.0"
 | 
					    has-flag "^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					supports-preserve-symlinks-flag@^1.0.0:
 | 
				
			||||||
 | 
					  version "1.0.0"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
 | 
				
			||||||
 | 
					  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svgo@^1.3.2:
 | 
					svgo@^1.3.2:
 | 
				
			||||||
  version "1.3.2"
 | 
					  version "1.3.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
 | 
					  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
 | 
				
			||||||
@@ -5443,15 +5464,15 @@ textarea-caret@3.1.0:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/textarea-caret/-/textarea-caret-3.1.0.tgz#5d5a35bb035fd06b2ff0e25d5359e97f2655087f"
 | 
					  resolved "https://registry.yarnpkg.com/textarea-caret/-/textarea-caret-3.1.0.tgz#5d5a35bb035fd06b2ff0e25d5359e97f2655087f"
 | 
				
			||||||
  integrity sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q==
 | 
					  integrity sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
three@0.139.0:
 | 
					three@0.139.2:
 | 
				
			||||||
  version "0.139.0"
 | 
					  version "0.139.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/three/-/three-0.139.0.tgz#4805eeb4cde85d8a82b6048088230f8ce5b75375"
 | 
					  resolved "https://registry.yarnpkg.com/three/-/three-0.139.2.tgz#b110799a15736df673b9293e31653a4ac73648dd"
 | 
				
			||||||
  integrity sha512-hZ4LkCjgoEM82WLaOVptDKGpB3SkEyuJP2OHe36AFO8hS2I6CrEiNanXj7wwR3wIPT7V5wi5Y5pFnncS5SVHgQ==
 | 
					  integrity sha512-gV7q7QY8rogu7HLFZR9cWnOQAUedUhu2WXAnpr2kdXZP9YDKsG/0ychwQvWkZN5PlNw9mv5MoCTin6zNTXoONg==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
throttle-debounce@3.0.1:
 | 
					throttle-debounce@4.0.0:
 | 
				
			||||||
  version "3.0.1"
 | 
					  version "4.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb"
 | 
					  resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-4.0.0.tgz#ec763b1c050c3a8f73eddd2e853a720893102a40"
 | 
				
			||||||
  integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==
 | 
					  integrity sha512-bO2OiH++k8Z3cTNZccOJRlxY5Sk3Tx3Kz6cQl3VY5pTRcEgqbPxwEKtrC00whFAo2jIBQlaH1ZG5mtfrBef3qw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
throttleit@^1.0.0:
 | 
					throttleit@^1.0.0:
 | 
				
			||||||
  version "1.0.0"
 | 
					  version "1.0.0"
 | 
				
			||||||
@@ -5522,7 +5543,7 @@ tsc-alias@1.5.0:
 | 
				
			|||||||
    mylas "^2.1.6"
 | 
					    mylas "^2.1.6"
 | 
				
			||||||
    normalize-path "^3.0.0"
 | 
					    normalize-path "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsconfig-paths@3.14.1:
 | 
					tsconfig-paths@3.14.1, tsconfig-paths@^3.14.1:
 | 
				
			||||||
  version "3.14.1"
 | 
					  version "3.14.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
 | 
					  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
 | 
				
			||||||
  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
 | 
					  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
 | 
				
			||||||
@@ -5532,16 +5553,6 @@ tsconfig-paths@3.14.1:
 | 
				
			|||||||
    minimist "^1.2.6"
 | 
					    minimist "^1.2.6"
 | 
				
			||||||
    strip-bom "^3.0.0"
 | 
					    strip-bom "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tsconfig-paths@^3.12.0:
 | 
					 | 
				
			||||||
  version "3.12.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
 | 
					 | 
				
			||||||
  integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/json5" "^0.0.29"
 | 
					 | 
				
			||||||
    json5 "^1.0.1"
 | 
					 | 
				
			||||||
    minimist "^1.2.0"
 | 
					 | 
				
			||||||
    strip-bom "^3.0.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
tslib@^1.8.1, tslib@^1.9.0:
 | 
					tslib@^1.8.1, tslib@^1.9.0:
 | 
				
			||||||
  version "1.11.1"
 | 
					  version "1.11.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
 | 
					  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
 | 
				
			||||||
@@ -5866,10 +5877,10 @@ webpack-sources@^3.2.3:
 | 
				
			|||||||
  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
 | 
					  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
 | 
				
			||||||
  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 | 
					  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
webpack@5.70.0:
 | 
					webpack@5.72.0:
 | 
				
			||||||
  version "5.70.0"
 | 
					  version "5.72.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.70.0.tgz#3461e6287a72b5e6e2f4872700bc8de0d7500e6d"
 | 
					  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.0.tgz#f8bc40d9c6bb489a4b7a8a685101d6022b8b6e28"
 | 
				
			||||||
  integrity sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==
 | 
					  integrity sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/eslint-scope" "^3.7.3"
 | 
					    "@types/eslint-scope" "^3.7.3"
 | 
				
			||||||
    "@types/estree" "^0.0.51"
 | 
					    "@types/estree" "^0.0.51"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								yarn.lock
									
									
									
									
									
								
							@@ -194,48 +194,48 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/parser@5.17.0":
 | 
					"@typescript-eslint/parser@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6"
 | 
				
			||||||
  integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==
 | 
					  integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/scope-manager" "5.17.0"
 | 
					    "@typescript-eslint/scope-manager" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/typescript-estree" "5.17.0"
 | 
					    "@typescript-eslint/typescript-estree" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/scope-manager@5.17.0":
 | 
					"@typescript-eslint/scope-manager@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505"
 | 
				
			||||||
  integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==
 | 
					  integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/types@5.17.0":
 | 
					"@typescript-eslint/types@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e"
 | 
				
			||||||
  integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==
 | 
					  integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/typescript-estree@5.17.0":
 | 
					"@typescript-eslint/typescript-estree@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474"
 | 
				
			||||||
  integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==
 | 
					  integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    "@typescript-eslint/visitor-keys" "5.17.0"
 | 
					    "@typescript-eslint/visitor-keys" "5.18.0"
 | 
				
			||||||
    debug "^4.3.2"
 | 
					    debug "^4.3.2"
 | 
				
			||||||
    globby "^11.0.4"
 | 
					    globby "^11.0.4"
 | 
				
			||||||
    is-glob "^4.0.3"
 | 
					    is-glob "^4.0.3"
 | 
				
			||||||
    semver "^7.3.5"
 | 
					    semver "^7.3.5"
 | 
				
			||||||
    tsutils "^3.21.0"
 | 
					    tsutils "^3.21.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@typescript-eslint/visitor-keys@5.17.0":
 | 
					"@typescript-eslint/visitor-keys@5.18.0":
 | 
				
			||||||
  version "5.17.0"
 | 
					  version "5.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128"
 | 
					  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60"
 | 
				
			||||||
  integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==
 | 
					  integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@typescript-eslint/types" "5.17.0"
 | 
					    "@typescript-eslint/types" "5.18.0"
 | 
				
			||||||
    eslint-visitor-keys "^3.0.0"
 | 
					    eslint-visitor-keys "^3.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
aggregate-error@^3.0.0:
 | 
					aggregate-error@^3.0.0:
 | 
				
			||||||
@@ -510,11 +510,11 @@ aws4@^1.8.0:
 | 
				
			|||||||
  integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
 | 
					  integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
axios@^0.21.1:
 | 
					axios@^0.21.1:
 | 
				
			||||||
  version "0.21.1"
 | 
					  version "0.21.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
 | 
					  resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
 | 
				
			||||||
  integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
 | 
					  integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    follow-redirects "^1.10.0"
 | 
					    follow-redirects "^1.14.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bach@^1.0.0:
 | 
					bach@^1.0.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
@@ -1617,10 +1617,10 @@ flush-write-stream@^1.0.2:
 | 
				
			|||||||
    inherits "^2.0.3"
 | 
					    inherits "^2.0.3"
 | 
				
			||||||
    readable-stream "^2.3.6"
 | 
					    readable-stream "^2.3.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
follow-redirects@^1.10.0:
 | 
					follow-redirects@^1.14.0:
 | 
				
			||||||
  version "1.14.8"
 | 
					  version "1.14.9"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
 | 
					  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
 | 
				
			||||||
  integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
 | 
					  integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for-in@^1.0.1, for-in@^1.0.2:
 | 
					for-in@^1.0.1, for-in@^1.0.2:
 | 
				
			||||||
  version "1.0.2"
 | 
					  version "1.0.2"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user