From 7c79591eaae44c41a04dc039b9a9d44d7ac161bf Mon Sep 17 00:00:00 2001 From: amay077 Date: Sun, 5 May 2024 15:07:32 +0900 Subject: [PATCH] =?UTF-8?q?bluesky=20=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 92 ++++++++++++++++ package.json | 3 + src/lib/BlueSkyConnection.svelte | 84 +++++++++++++++ src/lib/MainContent.svelte | 168 ++++++++++++++++++++++-------- src/lib/MastodonConnection.svelte | 94 +++++++++++------ src/lib/func.ts | 41 ++++++++ 6 files changed, 410 insertions(+), 72 deletions(-) create mode 100644 src/lib/BlueSkyConnection.svelte create mode 100644 src/lib/func.ts diff --git a/package-lock.json b/package-lock.json index 0f36850..1a24d72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "vite-project", "version": "0.0.0", + "dependencies": { + "@atproto/api": "^0.12.7" + }, "devDependencies": { "@popperjs/core": "^2.11.8", "@sveltejs/vite-plugin-svelte": "^3.1.0", @@ -33,6 +36,56 @@ "node": ">=6.0.0" } }, + "node_modules/@atproto/api": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.12.7.tgz", + "integrity": "sha512-WHPX+rO8K24Mb3gMofUz7v8GLtTrVUzq9ZfUOxqP/tqDIlYPWEWc5ess6B8joIP0jYLZCyYakLV6giinXjpE6Q==", + "dependencies": { + "@atproto/common-web": "^0.3.0", + "@atproto/lexicon": "^0.4.0", + "@atproto/syntax": "^0.3.0", + "@atproto/xrpc": "^0.5.0", + "multiformats": "^9.9.0", + "tlds": "^1.234.0" + } + }, + "node_modules/@atproto/common-web": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.3.0.tgz", + "integrity": "sha512-67VnV6JJyX+ZWyjV7xFQMypAgDmjVaR9ZCuU/QW+mqlqI7fex2uL4Fv+7/jHadgzhuJHVd6OHOvNn0wR5WZYtA==", + "dependencies": { + "graphemer": "^1.4.0", + "multiformats": "^9.9.0", + "uint8arrays": "3.0.0", + "zod": "^3.21.4" + } + }, + "node_modules/@atproto/lexicon": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.0.tgz", + "integrity": "sha512-RvCBKdSI4M8qWm5uTNz1z3R2yIvIhmOsMuleOj8YR6BwRD+QbtUBy3l+xQ7iXf4M5fdfJFxaUNa6Ty0iRwdKqQ==", + "dependencies": { + "@atproto/common-web": "^0.3.0", + "@atproto/syntax": "^0.3.0", + "iso-datestring-validator": "^2.2.2", + "multiformats": "^9.9.0", + "zod": "^3.21.4" + } + }, + "node_modules/@atproto/syntax": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.0.tgz", + "integrity": "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA==" + }, + "node_modules/@atproto/xrpc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.5.0.tgz", + "integrity": "sha512-swu+wyOLvYW4l3n+VAuJbHcPcES+tin2Lsrp8Bw5aIXIICiuFn1YMFlwK9JwVUzTH21Py1s1nHEjr4CJeElJog==", + "dependencies": { + "@atproto/lexicon": "^0.4.0", + "zod": "^3.21.4" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -1127,6 +1180,11 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, "node_modules/immutable": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", @@ -1216,6 +1274,11 @@ "@types/estree": "*" } }, + "node_modules/iso-datestring-validator": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", + "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -1325,6 +1388,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -1758,6 +1826,14 @@ } } }, + "node_modules/tlds": { + "version": "1.252.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz", + "integrity": "sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==", + "bin": { + "tlds": "bin.js" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1789,6 +1865,14 @@ "node": ">=14.17" } }, + "node_modules/uint8arrays": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, "node_modules/vite": { "version": "5.2.11", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", @@ -1863,6 +1947,14 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true + }, + "node_modules/zod": { + "version": "3.23.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.6.tgz", + "integrity": "sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 45d88dd..2485542 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,8 @@ "tslib": "^2.6.0", "typescript": "^5.0.2", "vite": "^5.0.0" + }, + "dependencies": { + "@atproto/api": "^0.12.7" } } diff --git a/src/lib/BlueSkyConnection.svelte b/src/lib/BlueSkyConnection.svelte new file mode 100644 index 0000000..394584e --- /dev/null +++ b/src/lib/BlueSkyConnection.svelte @@ -0,0 +1,84 @@ + + + + +
{ + expandedBlueSky = !expandedBlueSky; + }}> +
BlueSky
+ {#if !expandedBlueSky} + + + + {:else} + + + + {/if} +
+ {#if expandedBlueSky} +
+ {#if postSettings != null} +
+ 接続済み + +
+ {:else} +
+
+ 1.ユーザーIDとアプリパスワードを入力 +
+ +
+
+ + +
+
+
+ {/if} +
+ {/if} + diff --git a/src/lib/MainContent.svelte b/src/lib/MainContent.svelte index 2081871..3a2ba4c 100644 --- a/src/lib/MainContent.svelte +++ b/src/lib/MainContent.svelte @@ -1,18 +1,31 @@ @@ -112,31 +201,17 @@ loading.. {:else} -
- - - -
{ - expandedMastodon = !expandedMastodon; - }}> -
Mastodon
- {#if !expandedMastodon} - - - - {:else} - - - - {/if} +
+
+ +
- {#if expandedMastodon} -
- +
+ +
+ +
- {/if}
@@ -158,17 +233,24 @@ - - {#if (mastodonAccessToken?.length ?? 0) > 0} - {/if} +
{/if}
diff --git a/src/lib/MastodonConnection.svelte b/src/lib/MastodonConnection.svelte index 0fc9c10..da68521 100644 --- a/src/lib/MastodonConnection.svelte +++ b/src/lib/MastodonConnection.svelte @@ -1,10 +1,17 @@ -{#if (mastodonAccessToken?.length ?? 0) > 0} -
- 接続済み - -
-{:else} -
-
- 1.Mastodon サーバーに接続 -
- - -
+
+ + + +
{ + expandedMastodon = !expandedMastodon; + }}> +
Mastodon
+ {#if !expandedMastodon} + + + + {:else} + + + + {/if}
-
- 2.認証コードを貼り付けて設定 -
- - + {#if expandedMastodon} +
+ + {#if postSettings != null} +
+ 接続済み + +
+ {:else} +
+
+ 1.Mastodon サーバーに接続 +
+ + +
+
+
+ 2.認証コードを貼り付けて設定 +
+ + +
+
+ {/if} + +
+ {/if}
-{/if} + diff --git a/src/lib/func.ts b/src/lib/func.ts new file mode 100644 index 0000000..4d2b13e --- /dev/null +++ b/src/lib/func.ts @@ -0,0 +1,41 @@ +export type SettingDataMastodon = { + type: 'mastodon', + title: 'Mastodon', + enabled: boolean, + server: string, + access_token_response: { + access_token: string, + token_type: string, + scope: string, + created_at: number, + } +}; + +export type SettingDataBluesky = { + type: 'bluesky', + title: 'BlueSky', + enabled: boolean, + data: { + user: string, + password: string, + } +}; +export type SettingData = SettingDataMastodon | SettingDataBluesky; + +export type SettingType = SettingData['type']; + +export type SettingDataType = T extends 'mastodon' ? SettingDataMastodon : SettingDataBluesky; + +export function savePostSetting(data: SettingData) { + localStorage.setItem(`sci_setting_${data.type}`, JSON.stringify(data)); +} + +export function loadPostSetting(type: T): SettingDataType | null{ + const text = localStorage.getItem(`sci_setting_${type}`); + if ((text?.length ?? 0) <= 0 ) return null; + return JSON.parse(text!); +} + +export function deletePostSetting(type: SettingType) { + localStorage.removeItem(`sci_setting_${type}`); +}