├── .gitignore ├── LICENSE ├── README.md ├── lib ├── module.js └── plugin.js ├── package-lock.json ├── package.json └── types └── index.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Nuxt Club 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @nuxtclub/supabase 2 | 3 | ## Setup 4 | 5 | 1. Add `@nuxtclub/supabase` dependency to your project 6 | 7 | ```bash 8 | npm i -D @nuxtclub/supabase 9 | ``` 10 | 11 | 2. Add `@nuxtclub/supabase` to the `buildModules` section of `nuxt.config.js` 12 | 13 | :warning: If you are using Nuxt **< v2.9** you have to install the module as a `dependency` (No `--dev` or `--save-dev` flags) and use `modules` section in `nuxt.config.js` instead of `buildModules`. 14 | 15 | ```javascript 16 | export default { 17 | buildModules: [ 18 | [ 19 | '@nuxtclub/supabase', 20 | { 21 | /* module options */ 22 | }, 23 | ], 24 | ], 25 | } 26 | ``` 27 | 28 | ## Using top level options 29 | 30 | ```javascript 31 | export default { 32 | buildModules: ['@nuxtclub/supabase'], 33 | supabase: { 34 | /* module options */ 35 | }, 36 | } 37 | ``` 38 | 39 | # Typescript support 40 | 41 | Add the types to your `"types"` array in `tsconfig.json` after the `@nuxt/types` entry. 42 | 43 | :warning: Use `@nuxt/vue-app` instead of `@nuxt/types` for nuxt < 2.9. 44 | 45 | ```json 46 | { 47 | "compilerOptions": { 48 | "types": ["@nuxt/types", "@nuxtclub/supabase"] 49 | } 50 | } 51 | ``` 52 | 53 | ## Configuration 54 | 55 | To start using Supabase in your project you should place the URL and the public API KEY of your Supabase project. 56 | 57 | You can find this data on the administration panel of your project > Settings > API. 58 | 59 | Be sure to copy your **public key**, not your private key. 60 | 61 | ```javascript 62 | export default { 63 | supabase: { 64 | url: 'YOUR_SUPABASE_URL', 65 | key: 'YOUR_SUPABASE_KEY', 66 | }, 67 | } 68 | ``` 69 | 70 | ## Usage 71 | 72 | This module will inject $supabase in the context of your application. 73 | 74 | Using $supabase you can access to the SupabaseClient object of the [Supabase Client for JavaScript](https://supabase.io/docs/reference/javascript/supabase-client). 75 | 76 | ### Shortcuts 77 | 78 | This module also inject $supaAuth & $supaStorage that are nothing more than a shorcut for $supabase.auth and $supabase.storage. 79 | 80 | ## Examples 81 | 82 | ### Fetching data 83 | 84 | ```vue 85 | 95 | 96 | 105 | ``` 106 | 107 | ### Authentication: 108 | 109 | Create a page to **sign in**: 110 | 111 | ```vue 112 | 113 | 120 | 121 | 147 | ``` 148 | 149 | To make the **sign up** page copy the same code and change the `signIn` function by `signUp`. 150 | 151 | Create a Middleware to protect your routes: 152 | 153 | ```javascript 154 | // ~/middleware/authenticated.js 155 | export default ({ $supabase, redirect }) => { 156 | if (!$supabase.auth.session()) { 157 | return redirect('/sign-in') 158 | } 159 | } 160 | ``` 161 | 162 | Protect the home page using previously created middleware. 163 | 164 | ```vue 165 | 166 | 172 | 173 | 189 | ``` 190 | 191 | Learn more about Supabase [here](https://supabase.io/docs/reference/javascript/supabase-client). 192 | -------------------------------------------------------------------------------- /lib/module.js: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | 3 | export default function (moduleOptions) { 4 | const options = Object.assign({}, this.options.supabase, moduleOptions) 5 | 6 | this.nuxt.options.build.transpile.push( 7 | '@supabase/supabase-js', 8 | '@supabase/gotrue-js', 9 | '@supabase/postgrest-js', 10 | '@supabase/realtime-js', 11 | '@supabase/storage-js' 12 | ) 13 | 14 | this.addPlugin({ 15 | src: path.resolve(__dirname, 'plugin.js'), 16 | options: { 17 | ...options, 18 | options: options, 19 | }, 20 | }) 21 | } 22 | 23 | module.exports.meta = require('../package.json') 24 | -------------------------------------------------------------------------------- /lib/plugin.js: -------------------------------------------------------------------------------- 1 | import { createClient } from '@supabase/supabase-js' 2 | 3 | export default function (_, inject) { 4 | const client = createClient('<%= options.url %>', '<%= options.key %>') 5 | inject('supabase', client) 6 | 7 | const auth = client.auth 8 | inject('supaAuth', auth) 9 | 10 | const storage = client.storage 11 | inject('supaStorage', storage) 12 | } 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuxtclub/supabase", 3 | "version": "1.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@nuxtclub/supabase", 9 | "version": "1.0.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@supabase/supabase-js": "^1.7.6" 13 | } 14 | }, 15 | "node_modules/@supabase/gotrue-js": { 16 | "version": "1.17.0", 17 | "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.17.0.tgz", 18 | "integrity": "sha512-c+GSSoW+PIT3/r7TnBdc4gPjtWDutO/2ROafSKUFl39Pb8aHIUbUvzK9sjuedaaLKH7bV8VefuRy2L8c0BUAzg==", 19 | "dependencies": { 20 | "cross-fetch": "^3.0.6" 21 | } 22 | }, 23 | "node_modules/@supabase/postgrest-js": { 24 | "version": "0.33.0", 25 | "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.33.0.tgz", 26 | "integrity": "sha512-og6Evdkan7Qp6+tOch7Pyq+ZWMnrCQtPHWwPpsN5A3iYQSro2yn21Yvazs9qAFoWAeTGNkuTOVpShT5Mbc9WcQ==", 27 | "dependencies": { 28 | "cross-fetch": "^3.0.6" 29 | } 30 | }, 31 | "node_modules/@supabase/realtime-js": { 32 | "version": "1.1.2", 33 | "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.1.2.tgz", 34 | "integrity": "sha512-YNFiWF0T9+IuZZgswzHbGb7/O1eWJSwXvi0WlbARHTIcYBu4GQQXBdVWdFdG4bTLMS3L4K2qHpvMP91QYSasMw==", 35 | "dependencies": { 36 | "@types/websocket": "^1.0.3", 37 | "websocket": "^1.0.34" 38 | } 39 | }, 40 | "node_modules/@supabase/storage-js": { 41 | "version": "1.4.0", 42 | "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.4.0.tgz", 43 | "integrity": "sha512-7+SGyXOgdhtz8qHzXo64HiS66PT/y4F8YFNMtXqYOu1LjHh0YwtOgpPLDA8obiSsNVwZiKwpgBJkz4LHG1YvRQ==", 44 | "dependencies": { 45 | "cross-fetch": "^3.1.0" 46 | } 47 | }, 48 | "node_modules/@supabase/supabase-js": { 49 | "version": "1.21.0", 50 | "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.21.0.tgz", 51 | "integrity": "sha512-SJgRQCdHRpnnuXVCb7X8XA/u2S4oo1Jdn92eLBl0QaUKGhREFHk2x4XlJZA9bJNzAhby9eQZ56FCtBrUda2CRQ==", 52 | "dependencies": { 53 | "@supabase/gotrue-js": "^1.17.0", 54 | "@supabase/postgrest-js": "^0.33.0", 55 | "@supabase/realtime-js": "^1.1.1", 56 | "@supabase/storage-js": "^1.4.0" 57 | } 58 | }, 59 | "node_modules/@types/node": { 60 | "version": "16.4.11", 61 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.11.tgz", 62 | "integrity": "sha512-nWSFUbuNiPKJEe1IViuodSI+9cM+vpM8SWF/O6dJK7wmGRNq55U7XavJHrlRrPkSMuUZUFzg1xaZ1B+ZZCrRWw==" 63 | }, 64 | "node_modules/@types/websocket": { 65 | "version": "1.0.4", 66 | "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", 67 | "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", 68 | "dependencies": { 69 | "@types/node": "*" 70 | } 71 | }, 72 | "node_modules/bufferutil": { 73 | "version": "4.0.3", 74 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", 75 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", 76 | "hasInstallScript": true, 77 | "dependencies": { 78 | "node-gyp-build": "^4.2.0" 79 | } 80 | }, 81 | "node_modules/cross-fetch": { 82 | "version": "3.1.4", 83 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", 84 | "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", 85 | "dependencies": { 86 | "node-fetch": "2.6.1" 87 | } 88 | }, 89 | "node_modules/d": { 90 | "version": "1.0.1", 91 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 92 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 93 | "dependencies": { 94 | "es5-ext": "^0.10.50", 95 | "type": "^1.0.1" 96 | } 97 | }, 98 | "node_modules/debug": { 99 | "version": "2.6.9", 100 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 101 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 102 | "dependencies": { 103 | "ms": "2.0.0" 104 | } 105 | }, 106 | "node_modules/es5-ext": { 107 | "version": "0.10.53", 108 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 109 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", 110 | "dependencies": { 111 | "es6-iterator": "~2.0.3", 112 | "es6-symbol": "~3.1.3", 113 | "next-tick": "~1.0.0" 114 | } 115 | }, 116 | "node_modules/es6-iterator": { 117 | "version": "2.0.3", 118 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 119 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 120 | "dependencies": { 121 | "d": "1", 122 | "es5-ext": "^0.10.35", 123 | "es6-symbol": "^3.1.1" 124 | } 125 | }, 126 | "node_modules/es6-symbol": { 127 | "version": "3.1.3", 128 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 129 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 130 | "dependencies": { 131 | "d": "^1.0.1", 132 | "ext": "^1.1.2" 133 | } 134 | }, 135 | "node_modules/ext": { 136 | "version": "1.4.0", 137 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", 138 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", 139 | "dependencies": { 140 | "type": "^2.0.0" 141 | } 142 | }, 143 | "node_modules/ext/node_modules/type": { 144 | "version": "2.5.0", 145 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", 146 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" 147 | }, 148 | "node_modules/is-typedarray": { 149 | "version": "1.0.0", 150 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 151 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 152 | }, 153 | "node_modules/ms": { 154 | "version": "2.0.0", 155 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 156 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 157 | }, 158 | "node_modules/next-tick": { 159 | "version": "1.0.0", 160 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 161 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 162 | }, 163 | "node_modules/node-fetch": { 164 | "version": "2.6.1", 165 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 166 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 167 | "engines": { 168 | "node": "4.x || >=6.0.0" 169 | } 170 | }, 171 | "node_modules/node-gyp-build": { 172 | "version": "4.2.3", 173 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", 174 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==", 175 | "bin": { 176 | "node-gyp-build": "bin.js", 177 | "node-gyp-build-optional": "optional.js", 178 | "node-gyp-build-test": "build-test.js" 179 | } 180 | }, 181 | "node_modules/type": { 182 | "version": "1.2.0", 183 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 184 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 185 | }, 186 | "node_modules/typedarray-to-buffer": { 187 | "version": "3.1.5", 188 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 189 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 190 | "dependencies": { 191 | "is-typedarray": "^1.0.0" 192 | } 193 | }, 194 | "node_modules/utf-8-validate": { 195 | "version": "5.0.5", 196 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.5.tgz", 197 | "integrity": "sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==", 198 | "hasInstallScript": true, 199 | "dependencies": { 200 | "node-gyp-build": "^4.2.0" 201 | } 202 | }, 203 | "node_modules/websocket": { 204 | "version": "1.0.34", 205 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", 206 | "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", 207 | "dependencies": { 208 | "bufferutil": "^4.0.1", 209 | "debug": "^2.2.0", 210 | "es5-ext": "^0.10.50", 211 | "typedarray-to-buffer": "^3.1.5", 212 | "utf-8-validate": "^5.0.2", 213 | "yaeti": "^0.0.6" 214 | }, 215 | "engines": { 216 | "node": ">=4.0.0" 217 | } 218 | }, 219 | "node_modules/yaeti": { 220 | "version": "0.0.6", 221 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 222 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", 223 | "engines": { 224 | "node": ">=0.10.32" 225 | } 226 | } 227 | }, 228 | "dependencies": { 229 | "@supabase/gotrue-js": { 230 | "version": "1.17.0", 231 | "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.17.0.tgz", 232 | "integrity": "sha512-c+GSSoW+PIT3/r7TnBdc4gPjtWDutO/2ROafSKUFl39Pb8aHIUbUvzK9sjuedaaLKH7bV8VefuRy2L8c0BUAzg==", 233 | "requires": { 234 | "cross-fetch": "^3.0.6" 235 | } 236 | }, 237 | "@supabase/postgrest-js": { 238 | "version": "0.33.0", 239 | "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.33.0.tgz", 240 | "integrity": "sha512-og6Evdkan7Qp6+tOch7Pyq+ZWMnrCQtPHWwPpsN5A3iYQSro2yn21Yvazs9qAFoWAeTGNkuTOVpShT5Mbc9WcQ==", 241 | "requires": { 242 | "cross-fetch": "^3.0.6" 243 | } 244 | }, 245 | "@supabase/realtime-js": { 246 | "version": "1.1.2", 247 | "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.1.2.tgz", 248 | "integrity": "sha512-YNFiWF0T9+IuZZgswzHbGb7/O1eWJSwXvi0WlbARHTIcYBu4GQQXBdVWdFdG4bTLMS3L4K2qHpvMP91QYSasMw==", 249 | "requires": { 250 | "@types/websocket": "^1.0.3", 251 | "websocket": "^1.0.34" 252 | } 253 | }, 254 | "@supabase/storage-js": { 255 | "version": "1.4.0", 256 | "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.4.0.tgz", 257 | "integrity": "sha512-7+SGyXOgdhtz8qHzXo64HiS66PT/y4F8YFNMtXqYOu1LjHh0YwtOgpPLDA8obiSsNVwZiKwpgBJkz4LHG1YvRQ==", 258 | "requires": { 259 | "cross-fetch": "^3.1.0" 260 | } 261 | }, 262 | "@supabase/supabase-js": { 263 | "version": "1.21.0", 264 | "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.21.0.tgz", 265 | "integrity": "sha512-SJgRQCdHRpnnuXVCb7X8XA/u2S4oo1Jdn92eLBl0QaUKGhREFHk2x4XlJZA9bJNzAhby9eQZ56FCtBrUda2CRQ==", 266 | "requires": { 267 | "@supabase/gotrue-js": "^1.17.0", 268 | "@supabase/postgrest-js": "^0.33.0", 269 | "@supabase/realtime-js": "^1.1.1", 270 | "@supabase/storage-js": "^1.4.0" 271 | } 272 | }, 273 | "@types/node": { 274 | "version": "16.4.11", 275 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.11.tgz", 276 | "integrity": "sha512-nWSFUbuNiPKJEe1IViuodSI+9cM+vpM8SWF/O6dJK7wmGRNq55U7XavJHrlRrPkSMuUZUFzg1xaZ1B+ZZCrRWw==" 277 | }, 278 | "@types/websocket": { 279 | "version": "1.0.4", 280 | "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", 281 | "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", 282 | "requires": { 283 | "@types/node": "*" 284 | } 285 | }, 286 | "bufferutil": { 287 | "version": "4.0.3", 288 | "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz", 289 | "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==", 290 | "requires": { 291 | "node-gyp-build": "^4.2.0" 292 | } 293 | }, 294 | "cross-fetch": { 295 | "version": "3.1.4", 296 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", 297 | "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", 298 | "requires": { 299 | "node-fetch": "2.6.1" 300 | } 301 | }, 302 | "d": { 303 | "version": "1.0.1", 304 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 305 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 306 | "requires": { 307 | "es5-ext": "^0.10.50", 308 | "type": "^1.0.1" 309 | } 310 | }, 311 | "debug": { 312 | "version": "2.6.9", 313 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 314 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 315 | "requires": { 316 | "ms": "2.0.0" 317 | } 318 | }, 319 | "es5-ext": { 320 | "version": "0.10.53", 321 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", 322 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", 323 | "requires": { 324 | "es6-iterator": "~2.0.3", 325 | "es6-symbol": "~3.1.3", 326 | "next-tick": "~1.0.0" 327 | } 328 | }, 329 | "es6-iterator": { 330 | "version": "2.0.3", 331 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 332 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 333 | "requires": { 334 | "d": "1", 335 | "es5-ext": "^0.10.35", 336 | "es6-symbol": "^3.1.1" 337 | } 338 | }, 339 | "es6-symbol": { 340 | "version": "3.1.3", 341 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 342 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 343 | "requires": { 344 | "d": "^1.0.1", 345 | "ext": "^1.1.2" 346 | } 347 | }, 348 | "ext": { 349 | "version": "1.4.0", 350 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", 351 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", 352 | "requires": { 353 | "type": "^2.0.0" 354 | }, 355 | "dependencies": { 356 | "type": { 357 | "version": "2.5.0", 358 | "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", 359 | "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" 360 | } 361 | } 362 | }, 363 | "is-typedarray": { 364 | "version": "1.0.0", 365 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 366 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 367 | }, 368 | "ms": { 369 | "version": "2.0.0", 370 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 371 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 372 | }, 373 | "next-tick": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 376 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 377 | }, 378 | "node-fetch": { 379 | "version": "2.6.1", 380 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 381 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 382 | }, 383 | "node-gyp-build": { 384 | "version": "4.2.3", 385 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz", 386 | "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==" 387 | }, 388 | "type": { 389 | "version": "1.2.0", 390 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 391 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" 392 | }, 393 | "typedarray-to-buffer": { 394 | "version": "3.1.5", 395 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 396 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 397 | "requires": { 398 | "is-typedarray": "^1.0.0" 399 | } 400 | }, 401 | "utf-8-validate": { 402 | "version": "5.0.5", 403 | "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.5.tgz", 404 | "integrity": "sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ==", 405 | "requires": { 406 | "node-gyp-build": "^4.2.0" 407 | } 408 | }, 409 | "websocket": { 410 | "version": "1.0.34", 411 | "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", 412 | "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", 413 | "requires": { 414 | "bufferutil": "^4.0.1", 415 | "debug": "^2.2.0", 416 | "es5-ext": "^0.10.50", 417 | "typedarray-to-buffer": "^3.1.5", 418 | "utf-8-validate": "^5.0.2", 419 | "yaeti": "^0.0.6" 420 | } 421 | }, 422 | "yaeti": { 423 | "version": "0.0.6", 424 | "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", 425 | "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" 426 | } 427 | } 428 | } 429 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nuxtclub/supabase", 3 | "author": "Lautaro Pereyra ", 4 | "license": "MIT", 5 | "description": "An easy way to integrate Supabase with NuxtJS", 6 | "version": "1.2.1", 7 | "keywords": [ 8 | "nuxt", 9 | "supabase", 10 | "module" 11 | ], 12 | "main": "lib/module.js", 13 | "files": [ 14 | "lib", 15 | "types/*.d.ts" 16 | ], 17 | "types": "types/index.d.ts", 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/nuxtclub/supabase.git" 21 | }, 22 | "bugs": "https://github.com/nuxtclub/supabase/issues", 23 | "dependencies": { 24 | "@supabase/supabase-js": "^1.21.0" 25 | }, 26 | "publishConfig": { 27 | "access": "public" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | import { SupabaseClient } from '@supabase/supabase-js' 2 | import { SupabaseAuthClient } from '@supabase/supabase-js/dist/main/lib/SupabaseAuthClient' 3 | import { SupabaseStorageClient } from '@supabase/storage-js/dist/main/SupabaseStorageClient' 4 | 5 | interface SupabaseConfig { 6 | url: string 7 | key: string 8 | } 9 | 10 | declare module '@nuxt/types/config/index' { 11 | interface NuxtOptions { 12 | supabase: SupabaseConfig 13 | } 14 | } 15 | 16 | declare module '@nuxt/vue-app' { 17 | interface Context { 18 | $supabase: SupabaseClient 19 | $supaAuth: SupabaseAuthClient 20 | $supaStorage: SupabaseStorageClient 21 | } 22 | } 23 | 24 | declare module '#app' { 25 | interface NuxtApp { 26 | $supabase: SupabaseClient 27 | $supaAuth: SupabaseAuthClient 28 | $supaStorage: SupabaseStorageClient 29 | } 30 | } 31 | 32 | declare module 'nuxt3' { 33 | interface NuxtApp { 34 | $supabase: SupabaseClient 35 | $supaAuth: SupabaseAuthClient 36 | $supaStorage: SupabaseStorageClient 37 | } 38 | } 39 | 40 | declare module '@nuxt/types' { 41 | interface Context { 42 | $supabase: SupabaseClient 43 | $supaAuth: SupabaseAuthClient 44 | $supaStorage: SupabaseStorageClient 45 | } 46 | } 47 | 48 | declare module 'vue/types/vue' { 49 | interface Vue { 50 | $supabase: SupabaseClient 51 | $supaAuth: SupabaseAuthClient 52 | $supaStorage: SupabaseStorageClient 53 | } 54 | } 55 | 56 | declare module 'vuex/types/index' { 57 | interface Store { 58 | $supabase: SupabaseClient 59 | $supaAuth: SupabaseAuthClient 60 | $supaStorage: SupabaseStorageClient 61 | } 62 | } 63 | --------------------------------------------------------------------------------