diff --git a/sst-env.d.ts b/sst-env.d.ts --- a/sst-env.d.ts +++ b/sst-env.d.ts @@ -6,6 +6,12 @@ declare module "sst" { export interface Resource { + "DbCli": { + "authToken": string + "databaseName": string + "type": "sst.sst.Linkable" + "url": string + } "MyWeb": { "type": "sst.aws.Nextjs" "url": string diff --git a/sst.config.ts b/sst.config.ts --- a/sst.config.ts +++ b/sst.config.ts @@ -11,7 +11,7 @@ protect: ["production"].includes(input?.stage), home: "aws", providers: { - "turso-jpedroh": { + "turso": { package: "@sst-provider/turso-jpedroh", version: "1.2.0", apiToken: turso_api_token, @@ -20,6 +20,37 @@ }; }, async run() { - new sst.aws.Nextjs("MyWeb"); + const appDatabase = new turso.Database("AppDatabase", { + organizationName: "jackschu", + name: "aetherlist", + group: "aetherlist", + }, { + protect: true, + }); + + const appDatabaseToken = new turso.DatabaseToken("AppDatabaseToken", { + organizationName: "jackschu", + databaseName: appDatabase.name, + authorization: "full-access", + }); + + const dbCli = new sst.Linkable("DbCli", { + properties: { + url: $interpolate`libsql://${appDatabase.hostname}`, + authToken: appDatabaseToken.jwt, + databaseName: appDatabase.name, + }, + }); + + const web = new sst.aws.Nextjs("MyWeb", { + link: [dbCli], + }); + + return { + webUrl: web.url, + databaseName: appDatabase.name, + databaseHostname: appDatabase.hostname, + databaseUrl: $interpolate`libsql://${appDatabase.hostname}`, + }; }, }); diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml --- a/secrets/secrets.yaml +++ b/secrets/secrets.yaml @@ -1,4 +1,4 @@ -TURSO_API_KEY: ENC[AES256_GCM,data:7vRTi/vmtTD6UubPxJm2E++B/Vz0igtQoyo1doEv9lAr0ds0fT2JKjoS9JNLIMw9GmhMglkFPOvgozW/Vb1XazUWIykGz8nz2QhrqkWjRDvMRPvPdQsVNta4ecHXo4eHCd5vy4oUd+ERmLVXO9ktpadV0rJbsoejNgq9hY7+vDHItltQqLs32OMOaJu27JbWl20CcGqq6Q5XRh4xS3ssTWdalF6S50aIeyOZiGQjoVUs6Kum2e61x+BrcT+bSGjYUinCzlx5/5aDfHAD4NlMS4s1u08sNEvnWhcsi0aChwStM5CGkVKeZd8pvcWCyFTFVOAOSwFPCVSe+XXWTV2tz2PzZDQg0Epj8YFK9SkXgHFipehazcVJRw==,iv:rDI+SrbeePhOqViKgzbvilH6ooG1OgMJU7jDxiO+vrE=,tag:qaaJsVh8r4eiDZiVJ5Jc8w==,type:str] +TURSO_API_KEY: ENC[AES256_GCM,data:WxT8ZFNWWgQrldPEKTm6V9QNkOMqWgcvkLRznsaoOyoZiH6k0gxLxXNUOpsn1ukO/8B6FNm1sNgqQPJrZ/xyFSWuGLZ+f3O2/JA/yWYg4orJToeGwVy0VmpmX8ES4643cm+5Nbn5LYLPvcPBVro2ZKUJvXmlZXEpczhbBGqYuIpCweXz2Hjx4cFCVx+94dlYlws4Z4blWfjVNeE/m/JZsp2EUFTbQGvXO9mZO5+UxMOOziEUv3IPm+HS7/JOOPBsDCuAgb7XsNN9NgLaBd5iYy2wQpGbM1qlJPHuH+qTchhoR5e6kBKiu+YyxsiR2FlMdKzejJ4LwM9Nn/uoRk67wDp2PViRlpUTp00NDYeHGS5FORFvC2z4ATdAftHfigeA77BukUQ4z6GxIc6FeTCyoVZbjvxnC8mQG29Xu3CWISBGyeEIkEMatlcUIsVpXuKd6j4yGXlxUgzeezhmg6WS8ex7gcXqpOxKgzTVC5CjBgx9hWd7eamMyUP6zCUICUl+L4qUHY8LyyZ+msI7lpaI70wgeySYCmQelUMPGTwuhf2fHFhn53AZLqtuOM1aGd3/rtevEDFnAuW7YquQY4HL34Ip8rBPYMa9LMwlC26lihiEF6CSyIV9CqMoJNY=,iv:vI3kJXk6+WOuc7MpEJ8fJ5GYmrYHWlCq1rGwYeu9ekE=,tag:rhxChKcKQlg285/5YbOFLA==,type:str] sops: age: - enc: | @@ -28,7 +28,7 @@ pyhTh7HIOggpfaNb795OTDsZjmepPdcLEahwtrX9kAtmucNmGn5Udw== -----END AGE ENCRYPTED FILE----- recipient: age1s9cnewc9avvl4zcwl2pw9c85vsszcfxsh8grh5ydu97jvx9zc5ssqly8sr - lastmodified: "2026-06-04T03:25:31Z" - mac: ENC[AES256_GCM,data:NtZChDqU7cE2YXVjE/RpPvemNl4dHeIGGDhiwO5axwzN235iC+pWVnaTgWSf62SwvlXhJgIzLjJHenyMCXAJREmT4xN1Y/47SQjjUT4IptDSW0VwwCx/tq58IM2Bes3RE2LWShQonMXvV5wYlljIMOtrF7pdioDYWIr6WHUoaak=,iv:zwa+Sz852Wyn1thXvntXreW1MKRC4DTPv9wQs0ju/Lw=,tag:+cQMlAWXIKsE4ZO10Z4uYA==,type:str] + lastmodified: "2026-06-04T03:56:37Z" + mac: ENC[AES256_GCM,data:SHDug/J0pT9/62KZiNPHyHsRGfdCE5wiaRxvRbeB38iP+Y7iSj20XdQ8t0yE8uAILCh93JpopEmFT1hGfW0gcvVOqnmnZYIKYlh5uTagXoCn3sI+7vEzEnvYYi0HeR4dUV/eGrnxo7FaG985H0L7BAyrfEtcFFN5kzCga/O4f8k=,iv:El9VC2k92BIHJQ+nAfMIJfq2wdgm7gNUFd26A3zHwks=,tag:E4Yny7P75vFRBOlg//RHMQ==,type:str] unencrypted_suffix: _unencrypted version: 3.13.1