AT Protocol module for Open Web Desktop
at main 2.5 kB view raw
1import { 2 defineNuxtModule, 3 addPlugin, 4 createResolver, 5 addImportsDir, 6 installModule, 7} from '@nuxt/kit' 8import { getAtprotoDesktopOwner } from './runtime/utils/utilAtprotoDesktop' 9import { AtpAgent } from '@atproto/api' 10 11const { resolve } = createResolver(import.meta.url) 12 13export 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 _nuxt.options.build.transpile.push('@atproto/api') 32 33 // retrieve owd owner profile from atproto 34 35 if (!_nuxt.options.atproto) { 36 _nuxt.options.atproto = { 37 serviceEndpoint: { 38 private: 'https://bsky.social', 39 public: 'https://public.api.bsky.app' 40 }, 41 oauth: { 42 clientMetadata: { 43 remote: '', 44 local: { 45 client_id: 'https://nuxt-atproto.pages.dev/client-metadata.json', 46 client_name: 'nuxt-atproto', 47 client_uri: 'https://nuxt-atproto.pages.dev', 48 logo_uri: 'https://nuxt-atproto.pages.dev/logo.png', 49 tos_uri: 'https://nuxt-atproto.pages.dev', 50 policy_uri: 'https://nuxt-atproto.pages.dev', 51 redirect_uris: ['https://nuxt-atproto.pages.dev'], 52 scope: "atproto transition:generic", 53 grant_types: ["authorization_code", "refresh_token"], 54 response_types: ["code"], 55 token_endpoint_auth_method: 'none', 56 application_type: 'web', 57 dpop_bound_access_tokens: true 58 } 59 }, 60 signInOptions: { 61 state: '', 62 prompt: 'login', 63 scope: 'atproto', 64 ui_locales: 'en', 65 }, 66 }, 67 debug: true, 68 } 69 } 70 71 options.owner.profile = await getAtprotoDesktopOwner( 72 new AtpAgent({ 73 service: _nuxt.options.atproto.serviceEndpoint.public, 74 }), 75 options.owner.did, 76 ) 77 78 // set runtime config 79 _nuxt.options.runtimeConfig.public.atprotoDesktop = options 80 81 { 82 // import data 83 addImportsDir(resolve('./runtime/composables')) 84 addImportsDir(resolve('./runtime/stores')) 85 addPlugin({ 86 src: resolve('./runtime/plugin'), 87 mode: 'client', 88 }) 89 } 90 }, 91})