+1
-1
README.md
+1
-1
README.md
···
13
Refer to the [nuxt-atproto](https://www.npmjs.com/package/nuxt-atproto))) documentation for more details and options.
14
15
## Features
16
- Provides ATProto agent and OAuth client integration
17
- Generates `client-metadata.json` on the fly in `/public`
18
- Fetches the Open Web Desktop client account host
···
83
## License
84
85
This module is released under the [MIT License](LICENSE).
86
-
···
13
Refer to the [nuxt-atproto](https://www.npmjs.com/package/nuxt-atproto))) documentation for more details and options.
14
15
## Features
16
+
17
- Provides ATProto agent and OAuth client integration
18
- Generates `client-metadata.json` on the fly in `/public`
19
- Fetches the Open Web Desktop client account host
···
84
## License
85
86
This module is released under the [MIT License](LICENSE).
+44
-37
module.ts
+44
-37
module.ts
···
1
-
import {defineNuxtModule, addPlugin, createResolver, addImportsDir, installModule} from '@nuxt/kit'
2
-
import {getAtprotoDesktopOwner} from "./runtime/utils/utilAtprotoDesktop";
3
-
import {AtpAgent} from "@atproto/api";
4
5
-
const {resolve} = createResolver(import.meta.url)
6
7
export default defineNuxtModule({
8
-
meta: {
9
-
name: 'owd-module-atproto',
10
-
configKey: 'atprotoDesktop',
11
},
12
-
defaults: {
13
-
owner: {
14
-
did: 'did:plc:iaf5ejdchj6nydfxmcrq5rm6',
15
-
},
16
-
name: {
17
-
title: 'atproto',
18
-
affix: 'OS'
19
-
},
20
},
21
-
async setup(options: AtprotoDesktopOptions, _nuxt) {
22
-
await installModule('nuxt-atproto')
23
24
-
// configure aliases
25
-
26
-
_nuxt.options.alias ||= {}
27
-
28
-
_nuxt.options.alias['@owdproject/module-atproto'] = resolve(__dirname, '.')
29
30
-
// set runtime config
31
-
_nuxt.options.runtimeConfig.public.atprotoDesktop = options
32
33
-
// retrieve owd owner profile from atproto
34
35
-
_nuxt.options.runtimeConfig.public.atprotoDesktop.owner.profile = await getAtprotoDesktopOwner(
36
-
new AtpAgent({
37
-
service: _nuxt.options.atproto.serviceEndpoint.public,
38
-
}),
39
-
_nuxt.options.runtimeConfig.public.atprotoDesktop.owner.did
40
-
)
41
42
-
{
43
44
-
// import data
45
-
addImportsDir(resolve('./runtime/composables'))
46
-
addImportsDir(resolve('./runtime/stores'))
47
-
addPlugin(resolve('./runtime/plugin'))
48
49
-
}
50
}
51
})
···
1
+
import {
2
+
defineNuxtModule,
3
+
addPlugin,
4
+
createResolver,
5
+
addImportsDir,
6
+
installModule,
7
+
} from '@nuxt/kit'
8
+
import { getAtprotoDesktopOwner } from './runtime/utils/utilAtprotoDesktop'
9
+
import { AtpAgent } from '@atproto/api'
10
11
+
const { resolve } = createResolver(import.meta.url)
12
13
export default defineNuxtModule({
14
+
meta: {
15
+
name: 'owd-module-atproto',
16
+
configKey: 'atprotoDesktop',
17
+
},
18
+
defaults: {
19
+
owner: {
20
+
did: 'did:plc:iaf5ejdchj6nydfxmcrq5rm6',
21
},
22
+
name: {
23
+
title: 'atproto',
24
+
affix: 'OS',
25
},
26
+
},
27
+
async setup(options: AtprotoDesktopOptions, _nuxt) {
28
+
await installModule('nuxt-atproto')
29
30
+
// configure aliases
31
32
+
_nuxt.options.alias ||= {}
33
34
+
_nuxt.options.alias['@owdproject/module-atproto'] = resolve(__dirname, '.')
35
36
+
// retrieve owd owner profile from atproto
37
38
+
options.owner.profile = await getAtprotoDesktopOwner(
39
+
new AtpAgent({
40
+
service: _nuxt.options.atproto.serviceEndpoint.public,
41
+
}),
42
+
options.owner.did,
43
+
)
44
45
+
// set runtime config
46
+
_nuxt.options.runtimeConfig.public.atprotoDesktop = options
47
48
+
{
49
+
// import data
50
+
addImportsDir(resolve('./runtime/composables'))
51
+
addImportsDir(resolve('./runtime/stores'))
52
+
addPlugin({
53
+
src: resolve('./runtime/plugin'),
54
+
mode: 'client',
55
+
})
56
}
57
+
},
58
})
+1
-1
package.json
+1
-1
package.json
+21
-21
runtime/plugin.ts
+21
-21
runtime/plugin.ts
···
1
-
import {useAtprotoAccountStore} from "./stores/storeAtprotoAccount";
2
-
import {defineNuxtPlugin} from "nuxt/app"
3
import { useAtproto } from '#imports'
4
5
export default defineNuxtPlugin({
6
-
name: 'owd-plugin-atproto',
7
-
parallel: true,
8
-
async setup(nuxtApp) {
9
-
const atprotoAccountStore = useAtprotoAccountStore()
10
-
// handle oauth callback + session restore
11
12
-
nuxtApp.hook('app:mounted', async () => {
13
-
const atproto = useAtproto()
14
15
-
if (atproto.agent.account) {
16
-
atprotoAccountStore.setAccountState('fetching', true)
17
18
-
await atproto.agent.public
19
-
.getProfile({
20
-
actor: atproto.agent.account.assertDid
21
-
})
22
-
.then((profile) => {
23
-
atprotoAccountStore.setAccount(profile.data)
24
-
})
25
-
}
26
-
})
27
-
}
28
})
···
1
+
import { useAtprotoAccountStore } from './stores/storeAtprotoAccount'
2
+
import { defineNuxtPlugin } from 'nuxt/app'
3
import { useAtproto } from '#imports'
4
5
export default defineNuxtPlugin({
6
+
name: 'owd-plugin-atproto',
7
+
parallel: true,
8
+
async setup(nuxtApp) {
9
+
const atprotoAccountStore = useAtprotoAccountStore()
10
+
// handle oauth callback + session restore
11
12
+
nuxtApp.hook('app:mounted', async () => {
13
+
const atproto = useAtproto()
14
15
+
if (atproto.agent.account) {
16
+
atprotoAccountStore.setAccountState('fetching', true)
17
18
+
await atproto.agent.public
19
+
.getProfile({
20
+
actor: atproto.agent.account.assertDid,
21
+
})
22
+
.then((profile) => {
23
+
atprotoAccountStore.setAccount(profile.data)
24
+
})
25
+
}
26
+
})
27
+
},
28
})
+37
-34
runtime/stores/storeAtprotoAccount.ts
+37
-34
runtime/stores/storeAtprotoAccount.ts
···
1
-
import {defineStore} from "pinia"
2
-
import {ref, reactive, computed} from "@vue/reactivity"
3
-
import {useRuntimeConfig} from "nuxt/app"
4
5
-
export const useAtprotoAccountStore = defineStore('owd/atproto/account', () => {
6
const runtimeConfig = useRuntimeConfig()
7
8
-
const session = ref<any|undefined>()
9
-
const account = ref<any|undefined>()
10
-
const handleResolver = ref<string>(runtimeConfig.public.atproto.serviceEndpoint.private)
11
12
const state = reactive<{
13
-
fetching: boolean
14
}>({
15
-
fetching: false,
16
})
17
18
const isAccountLogged = computed(() => {
19
-
return !!account.value
20
})
21
22
const handleResolverHostname = computed(() => {
23
-
return new URL(handleResolver.value).hostname
24
})
25
26
function setAccount(value: any | undefined) {
27
-
account.value = value
28
-
state.fetching = false
29
}
30
31
-
function setAccountState(
32
-
key: 'fetching',
33
-
value: boolean
34
-
) {
35
-
state[key] = value
36
}
37
38
function reset() {
39
-
session.value = undefined
40
-
account.value = undefined
41
}
42
43
return {
44
-
session,
45
-
account,
46
-
handleResolver,
47
-
handleResolverHostname,
48
-
state,
49
-
isAccountLogged,
50
-
setAccount,
51
-
setAccountState,
52
-
reset,
53
}
54
-
}, {
55
persistedState: {
56
-
persist: true,
57
-
includePaths: ['handleResolver']
58
-
}
59
-
})
···
1
+
import { defineStore } from 'pinia'
2
+
import { ref, reactive, computed } from '@vue/reactivity'
3
+
import { useRuntimeConfig } from 'nuxt/app'
4
5
+
export const useAtprotoAccountStore = defineStore(
6
+
'owd/atproto/account',
7
+
() => {
8
const runtimeConfig = useRuntimeConfig()
9
10
+
const session = ref<any | undefined>()
11
+
const account = ref<any | undefined>()
12
+
const handleResolver = ref<string>(
13
+
runtimeConfig.public.atproto.serviceEndpoint.private,
14
+
)
15
16
const state = reactive<{
17
+
fetching: boolean
18
}>({
19
+
fetching: false,
20
})
21
22
const isAccountLogged = computed(() => {
23
+
return !!account.value
24
})
25
26
const handleResolverHostname = computed(() => {
27
+
return new URL(handleResolver.value).hostname
28
})
29
30
function setAccount(value: any | undefined) {
31
+
account.value = value
32
+
state.fetching = false
33
}
34
35
+
function setAccountState(key: 'fetching', value: boolean) {
36
+
state[key] = value
37
}
38
39
function reset() {
40
+
session.value = undefined
41
+
account.value = undefined
42
}
43
44
return {
45
+
session,
46
+
account,
47
+
handleResolver,
48
+
handleResolverHostname,
49
+
state,
50
+
isAccountLogged,
51
+
setAccount,
52
+
setAccountState,
53
+
reset,
54
}
55
+
},
56
+
{
57
persistedState: {
58
+
persist: true,
59
+
includePaths: ['handleResolver'],
60
+
},
61
+
},
62
+
)
+5
-5
runtime/utils/utilAtprotoDesktop.ts
+5
-5
runtime/utils/utilAtprotoDesktop.ts
+4
-4
runtime/utils/utilRoute.ts
+4
-4
runtime/utils/utilRoute.ts
···
1
export function routeAtprotoOS(path?: string) {
2
-
return `https://github.com/atproto-os` + path
3
}
4
5
export function routeBluesky(path?: string) {
6
-
return `https://bsky.app` + path
7
}
8
9
export function routeBlueskyProfile(handle: string) {
10
-
return routeBluesky(`/profile/${handle}`)
11
-
}
···
1
export function routeAtprotoOS(path?: string) {
2
+
return 'https://github.com/atproto-os' + path
3
}
4
5
export function routeBluesky(path?: string) {
6
+
return 'https://bsky.app' + path
7
}
8
9
export function routeBlueskyProfile(handle: string) {
10
+
return routeBluesky(`/profile/${handle}`)
11
+
}
+10
-10
types/index.d.ts
+10
-10
types/index.d.ts