├── .env.sample ├── .gitignore ├── favicon.ico ├── images ├── better_screenshot_2.png ├── fetching_data.png ├── github.svg ├── hourglass-solid.svg ├── netlify.svg ├── sanityicon.png ├── signing_up.png ├── twitter.svg └── working_screenshot.png ├── index.html ├── lib.js ├── netlify.toml ├── netlify └── functions │ ├── create-note │ ├── create-note.js │ ├── package-lock.json │ └── package.json │ ├── delete-note │ └── delete-note.js │ ├── identity-signup │ └── identity-signup.js │ └── user-notes │ ├── package-lock.json │ ├── package.json │ └── user-notes.js ├── package-lock.json ├── package.json ├── readme.md └── style.css /.env.sample: -------------------------------------------------------------------------------- 1 | SANITY_PROJECT="abc123" 2 | SANITY_TOKEN="abcdefghijklmnopqrstuvwxyz1234567890" 3 | SANITY_DATASET="production" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Local Netlify folder 3 | .netlify 4 | dist 5 | .env 6 | node_modules 7 | notes.md 8 | netlify/functions/auth-fetch-example 9 | netlify/functions/protected-function-example 10 | netlify/functions/sanity-create-example 11 | netlify/functions/sanity-groq-example -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/favicon.ico -------------------------------------------------------------------------------- /images/better_screenshot_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/images/better_screenshot_2.png -------------------------------------------------------------------------------- /images/fetching_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/images/fetching_data.png -------------------------------------------------------------------------------- /images/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/hourglass-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/netlify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /images/sanityicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/images/sanityicon.png -------------------------------------------------------------------------------- /images/signing_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/images/signing_up.png -------------------------------------------------------------------------------- /images/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/working_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bacalj/netlify-auth-sanity-data/bb91f01504e5b3c60ef15a94801e2cc88b2c9b35/images/working_screenshot.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Netlify Auth & Sanity Data 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 |
15 | 16 |

Authenticate with Netlify

17 |
18 | 19 |
20 | *You really can sign up and create notes if you want to.
All users and data will be deleted automatically every few days. 21 |
22 |
23 | 24 |
25 | 26 |

Read & Write to Sanity

27 | 28 |
29 |
30 | login on the left to access your data 31 |
32 |
33 | 34 |
35 | 36 | 37 |
    38 | 39 |
40 |
41 |
42 | 43 | 44 |
45 |
46 | 47 |
48 | 59 |
60 | 61 | 62 | 63 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /lib.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Renders notes in the DOM. 3 | * @param {Array} arr array of note objects 4 | * promised by fetch in {@function netlify/functions/user-notes} 5 | */ 6 | 7 | function renderNotes(arr){ 8 | 9 | document.getElementById("notes").innerHTML = "" 10 | 11 | let notes = arr.filter((n) => n.title.length > 0 ) 12 | 13 | notes.forEach(obj => { 14 | 15 | let newItem = document.createElement('li'); 16 | newItem.id = obj.id 17 | 18 | let newButton = document.createElement('button'); 19 | newButton.addEventListener('click', deleteUserNote) 20 | newButton.innerHTML = '×'; 21 | newButton.setAttribute('data-delete-id', obj.id) 22 | 23 | newItem.appendChild(newButton) 24 | newItem.appendChild(document.createTextNode(obj.title)); 25 | 26 | document.getElementById("notes").appendChild(newItem); 27 | }); 28 | } 29 | 30 | /** 31 | * Takes text value from DOM input 32 | * and sends it to {@function netlify/functions/create-note} with token 33 | * If ok calls {@function renderNotes} otherwise alerts error 34 | * Zeros out DOM input 35 | */ 36 | async function createUserNote(){ 37 | 38 | showAnimation() 39 | 40 | let noteText = document.getElementById('new-note').value.replace(/[^\w\s!?]/g,''); 41 | 42 | if (netlifyIdentity.currentUser() !== null){ 43 | 44 | await fetch(`/.netlify/functions/create-note?note=${noteText}`, { 45 | headers: { 46 | Authorization: `Bearer ${theToken()}` 47 | } 48 | }).then((r) => { 49 | 50 | removeAnimation() 51 | 52 | if (r.ok){ 53 | getAndRenderUserNotes() 54 | } 55 | if (!r.ok){ 56 | alert('Something is messed up. You could try logging out and back in.') 57 | } 58 | }) 59 | } 60 | 61 | document.getElementById('new-note').value = '' 62 | } 63 | 64 | /** 65 | * Orders the getting and rendering 66 | * of the users notes by calling 67 | * {@function netlify/functions/user-notes} and 68 | * passes result to {@function renderNotes} 69 | */ 70 | async function getAndRenderUserNotes(){ 71 | 72 | if (netlifyIdentity.currentUser() !== null){ 73 | 74 | await fetch(`/.netlify/functions/user-notes`, { 75 | headers: { 76 | Authorization: `Bearer ${theToken()}` 77 | } 78 | }) 79 | .then((response) => { 80 | return response.json() 81 | }).then((data) => { 82 | //console.log(data) 83 | renderNotes(data) 84 | }) 85 | 86 | } 87 | } 88 | 89 | 90 | async function deleteUserNote(e){ 91 | 92 | showAnimation(e) 93 | 94 | const deleteMe = e.target.dataset.deleteId 95 | 96 | if (netlifyIdentity.currentUser() !== null){ 97 | 98 | await fetch(`/.netlify/functions/delete-note?id=${deleteMe}`, { 99 | headers: { 100 | Authorization: `Bearer ${theToken()}` 101 | } 102 | }).then((r) => { 103 | 104 | removeAnimation() 105 | 106 | if (r.ok){ 107 | getAndRenderUserNotes() 108 | } 109 | if (!r.ok){ 110 | alert('Something is messed up. You could try logging out and back in.') 111 | } 112 | }) 113 | } 114 | } 115 | 116 | function theToken(){ 117 | if (netlifyIdentity.currentUser() !== null){ 118 | const localUser = JSON.parse(localStorage.getItem('gotrue.user')) 119 | return localUser.token.access_token 120 | } else { 121 | return false 122 | } 123 | } 124 | 125 | function showAnimation(){ 126 | document.getElementById('animation').style.display = "grid" 127 | } 128 | 129 | function removeAnimation(){ 130 | document.getElementById('animation').style.display = "none" 131 | } 132 | 133 | window.netlifyIdentity.on('init', () => { 134 | console.log('netlifyIdentity local object ready') 135 | }) 136 | 137 | window.netlifyIdentity.on('login', (u) => { 138 | console.log('logging in a user, giving them a token, here they are: ') 139 | console.log(u) 140 | applyBodyClass('logged-in') 141 | getAndRenderUserNotes() 142 | }) 143 | 144 | window.netlifyIdentity.on('logout', () => { 145 | console.log('user logged out') 146 | applyBodyClass('logged-out') 147 | }) 148 | 149 | applyBodyClass = (str) => { 150 | document.querySelector('body').className = '' 151 | document.querySelector('body').classList.add(str) 152 | } 153 | 154 | window.addEventListener('DOMContentLoaded', (event) => { 155 | removeAnimation() 156 | }); -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | # example netlify.toml 2 | [build] 3 | command = "# no build command" 4 | functions = "netlify/functions" 5 | publish = "." 6 | 7 | ## Uncomment to use this redirect for Single Page Applications like create-react-app. 8 | ## Not needed for static site generators. 9 | #[[redirects]] 10 | # from = "/*" 11 | # to = "/index.html" 12 | # status = 200 13 | 14 | ## (optional) Settings for Netlify Dev 15 | ## https://github.com/netlify/cli/blob/main/docs/netlify-dev.md#project-detection 16 | #[dev] 17 | # command = "yarn start" # Command to start your dev server 18 | # port = 3000 # Port that the dev server will be listening on 19 | # publish = "dist" # Folder with the static content for _redirect file 20 | 21 | ## more info on configuring this file: https://www.netlify.com/docs/netlify-toml-reference/ 22 | -------------------------------------------------------------------------------- /netlify/functions/create-note/create-note.js: -------------------------------------------------------------------------------- 1 | const process = require('process') 2 | 3 | const sanityClient = require('@sanity/client') 4 | 5 | const client = sanityClient({ 6 | projectId: process.env.SANITY_PROJECT, 7 | dataset: process.env.SANITY_DATASET, 8 | token: process.env.SANITY_TOKEN, 9 | apiVersion: '2022-01-01', 10 | useCdn: false, 11 | }) 12 | 13 | const handler = async (event, context) => { 14 | 15 | const noteText = event.queryStringParameters.note 16 | const uId = context.clientContext.user.sub 17 | const uRoles = context.clientContext.user.app_metadata.roles 18 | 19 | /* no user, no go */ 20 | if (!uId) { 21 | console.log('No user!') 22 | return { 23 | statusCode: 401, 24 | body: JSON.stringify({ 25 | data: 'no go', 26 | }), 27 | } 28 | } 29 | 30 | /* no basic role, no go */ 31 | if (uRoles[0] !== 'basic') { 32 | console.log('No basic role!') 33 | return { 34 | statusCode: 401, 35 | body: JSON.stringify({ 36 | data: 'no go', 37 | }), 38 | } 39 | } 40 | 41 | const newNote = { 42 | _type: 'note', 43 | title: noteText, 44 | belongsTo: { 45 | _type: 'reference', 46 | _ref: uId 47 | } 48 | } 49 | 50 | try { 51 | 52 | const result = await client.create(newNote).then((res) => { 53 | console.log('RESULT FROM SANITY: ', res) 54 | }) 55 | 56 | return { 57 | statusCode: 200, 58 | headers: { 'Content-Type': 'application/json' }, 59 | body: JSON.stringify(result) 60 | } 61 | } 62 | 63 | catch (error) { 64 | console.log(error) 65 | return { 66 | headers: { 'Content-Type': 'application/json' }, 67 | statusCode: 500, 68 | body: error.responseBody || JSON.stringify({ error: 'An error occurred' }), 69 | } 70 | } 71 | } 72 | 73 | module.exports = { handler } -------------------------------------------------------------------------------- /netlify/functions/create-note/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sanity-create", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "sanity-create", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@sanity/client": "^0.147.3" 13 | } 14 | }, 15 | "node_modules/@sanity/client": { 16 | "version": "0.147.3", 17 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-0.147.3.tgz", 18 | "integrity": "sha512-wXWL1mPyQZB+1te2KPtSX2zQ0rc+/Ol4DsQYUQ7gY0N/ESWXqLuD14ixWAkLNGy1SbK3ZDLuTrGOstpb7va+Gw==", 19 | "dependencies": { 20 | "@sanity/eventsource": "0.147.0", 21 | "@sanity/generate-help-url": "0.147.0", 22 | "@sanity/observable": "0.147.0", 23 | "deep-assign": "^2.0.0", 24 | "get-it": "^5.0.0", 25 | "make-error": "^1.3.0", 26 | "object-assign": "^4.1.1" 27 | } 28 | }, 29 | "node_modules/@sanity/eventsource": { 30 | "version": "0.147.0", 31 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-0.147.0.tgz", 32 | "integrity": "sha512-06XsHijSkIyz39Pkx/nNKOVDwXhLtUoYx98WirCUF3TdRt8tGQ6W/GCOSufcv4RdyQRi1d8FRwBS+kE3lxf5Fg==", 33 | "dependencies": { 34 | "eventsource": "^1.0.6", 35 | "eventsource-polyfill": "^0.9.6" 36 | } 37 | }, 38 | "node_modules/@sanity/generate-help-url": { 39 | "version": "0.147.0", 40 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.147.0.tgz", 41 | "integrity": "sha512-jf0PWK7dpSSJUI0zJdh+PFUODmsP5dS6P9iYv/ufhyYzmD+2iV7YCpA6weNhsmNGnil2+CTj6Eg43tSKxiClRA==" 42 | }, 43 | "node_modules/@sanity/observable": { 44 | "version": "0.147.0", 45 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-0.147.0.tgz", 46 | "integrity": "sha512-sQZD1fyEP8HxW3wIT9M90myg1yp4BcMr3/Q9Cu+D3ubIliTFIefi3z0WetQwEvUNq0SQE99242a+lhDFmcmTEg==", 47 | "dependencies": { 48 | "object-assign": "^4.1.1", 49 | "rxjs": "^6.5.3" 50 | } 51 | }, 52 | "node_modules/@sanity/timed-out": { 53 | "version": "4.0.2", 54 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 55 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==", 56 | "engines": { 57 | "node": ">=0.10.0" 58 | } 59 | }, 60 | "node_modules/capture-stack-trace": { 61 | "version": "1.0.1", 62 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 63 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", 64 | "engines": { 65 | "node": ">=0.10.0" 66 | } 67 | }, 68 | "node_modules/core-util-is": { 69 | "version": "1.0.3", 70 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 71 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 72 | }, 73 | "node_modules/create-error-class": { 74 | "version": "3.0.2", 75 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 76 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 77 | "dependencies": { 78 | "capture-stack-trace": "^1.0.0" 79 | }, 80 | "engines": { 81 | "node": ">=0.10.0" 82 | } 83 | }, 84 | "node_modules/debug": { 85 | "version": "2.6.9", 86 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 87 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 88 | "dependencies": { 89 | "ms": "2.0.0" 90 | } 91 | }, 92 | "node_modules/decompress-response": { 93 | "version": "3.3.0", 94 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 95 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 96 | "dependencies": { 97 | "mimic-response": "^1.0.0" 98 | }, 99 | "engines": { 100 | "node": ">=4" 101 | } 102 | }, 103 | "node_modules/deep-assign": { 104 | "version": "2.0.0", 105 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 106 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 107 | "dependencies": { 108 | "is-obj": "^1.0.0" 109 | }, 110 | "engines": { 111 | "node": ">=0.10.0" 112 | } 113 | }, 114 | "node_modules/eventsource": { 115 | "version": "1.1.0", 116 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 117 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 118 | "dependencies": { 119 | "original": "^1.0.0" 120 | }, 121 | "engines": { 122 | "node": ">=0.12.0" 123 | } 124 | }, 125 | "node_modules/eventsource-polyfill": { 126 | "version": "0.9.6", 127 | "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", 128 | "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=" 129 | }, 130 | "node_modules/follow-redirects": { 131 | "version": "1.14.5", 132 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", 133 | "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", 134 | "funding": [ 135 | { 136 | "type": "individual", 137 | "url": "https://github.com/sponsors/RubenVerborgh" 138 | } 139 | ], 140 | "engines": { 141 | "node": ">=4.0" 142 | }, 143 | "peerDependenciesMeta": { 144 | "debug": { 145 | "optional": true 146 | } 147 | } 148 | }, 149 | "node_modules/form-urlencoded": { 150 | "version": "2.0.9", 151 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 152 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 153 | }, 154 | "node_modules/from2": { 155 | "version": "2.3.0", 156 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 157 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 158 | "dependencies": { 159 | "inherits": "^2.0.1", 160 | "readable-stream": "^2.0.0" 161 | } 162 | }, 163 | "node_modules/get-it": { 164 | "version": "5.0.5", 165 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.0.5.tgz", 166 | "integrity": "sha512-P5McakQI/9611hP0cYqyF0VlhxQj49ok21TvCbNEqBfsVVC/ZnmYPP91bky4N4/Oy1HmXFZ/CMh6CCH8nAgLpQ==", 167 | "dependencies": { 168 | "@sanity/timed-out": "^4.0.2", 169 | "create-error-class": "^3.0.2", 170 | "debug": "^2.6.8", 171 | "decompress-response": "^3.3.0", 172 | "follow-redirects": "^1.2.4", 173 | "form-urlencoded": "^2.0.7", 174 | "in-publish": "^2.0.0", 175 | "into-stream": "^3.1.0", 176 | "is-plain-object": "^2.0.4", 177 | "is-retry-allowed": "^1.1.0", 178 | "is-stream": "^1.1.0", 179 | "nano-pubsub": "^1.0.2", 180 | "object-assign": "^4.1.1", 181 | "parse-headers": "^2.0.1", 182 | "progress-stream": "^2.0.0", 183 | "same-origin": "^0.1.1", 184 | "simple-concat": "^1.0.0", 185 | "tunnel-agent": "^0.6.0", 186 | "url-parse": "^1.1.9" 187 | }, 188 | "engines": { 189 | "node": ">=8.0.0" 190 | } 191 | }, 192 | "node_modules/in-publish": { 193 | "version": "2.0.1", 194 | "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", 195 | "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", 196 | "bin": { 197 | "in-install": "in-install.js", 198 | "in-publish": "in-publish.js", 199 | "not-in-install": "not-in-install.js", 200 | "not-in-publish": "not-in-publish.js" 201 | } 202 | }, 203 | "node_modules/inherits": { 204 | "version": "2.0.4", 205 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 206 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 207 | }, 208 | "node_modules/into-stream": { 209 | "version": "3.1.0", 210 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 211 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 212 | "dependencies": { 213 | "from2": "^2.1.1", 214 | "p-is-promise": "^1.1.0" 215 | }, 216 | "engines": { 217 | "node": ">=4" 218 | } 219 | }, 220 | "node_modules/is-obj": { 221 | "version": "1.0.1", 222 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 223 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 224 | "engines": { 225 | "node": ">=0.10.0" 226 | } 227 | }, 228 | "node_modules/is-plain-object": { 229 | "version": "2.0.4", 230 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 231 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 232 | "dependencies": { 233 | "isobject": "^3.0.1" 234 | }, 235 | "engines": { 236 | "node": ">=0.10.0" 237 | } 238 | }, 239 | "node_modules/is-retry-allowed": { 240 | "version": "1.2.0", 241 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 242 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 243 | "engines": { 244 | "node": ">=0.10.0" 245 | } 246 | }, 247 | "node_modules/is-stream": { 248 | "version": "1.1.0", 249 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 250 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 251 | "engines": { 252 | "node": ">=0.10.0" 253 | } 254 | }, 255 | "node_modules/isarray": { 256 | "version": "1.0.0", 257 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 258 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 259 | }, 260 | "node_modules/isobject": { 261 | "version": "3.0.1", 262 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 263 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 264 | "engines": { 265 | "node": ">=0.10.0" 266 | } 267 | }, 268 | "node_modules/make-error": { 269 | "version": "1.3.6", 270 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 271 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 272 | }, 273 | "node_modules/mimic-response": { 274 | "version": "1.0.1", 275 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 276 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 277 | "engines": { 278 | "node": ">=4" 279 | } 280 | }, 281 | "node_modules/ms": { 282 | "version": "2.0.0", 283 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 284 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 285 | }, 286 | "node_modules/nano-pubsub": { 287 | "version": "1.0.2", 288 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 289 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 290 | }, 291 | "node_modules/object-assign": { 292 | "version": "4.1.1", 293 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 294 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 295 | "engines": { 296 | "node": ">=0.10.0" 297 | } 298 | }, 299 | "node_modules/original": { 300 | "version": "1.0.2", 301 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 302 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 303 | "dependencies": { 304 | "url-parse": "^1.4.3" 305 | } 306 | }, 307 | "node_modules/p-is-promise": { 308 | "version": "1.1.0", 309 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 310 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", 311 | "engines": { 312 | "node": ">=4" 313 | } 314 | }, 315 | "node_modules/parse-headers": { 316 | "version": "2.0.4", 317 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 318 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 319 | }, 320 | "node_modules/process-nextick-args": { 321 | "version": "2.0.1", 322 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 323 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 324 | }, 325 | "node_modules/progress-stream": { 326 | "version": "2.0.0", 327 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 328 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 329 | "dependencies": { 330 | "speedometer": "~1.0.0", 331 | "through2": "~2.0.3" 332 | } 333 | }, 334 | "node_modules/querystringify": { 335 | "version": "2.2.0", 336 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 337 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 338 | }, 339 | "node_modules/readable-stream": { 340 | "version": "2.3.7", 341 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 342 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 343 | "dependencies": { 344 | "core-util-is": "~1.0.0", 345 | "inherits": "~2.0.3", 346 | "isarray": "~1.0.0", 347 | "process-nextick-args": "~2.0.0", 348 | "safe-buffer": "~5.1.1", 349 | "string_decoder": "~1.1.1", 350 | "util-deprecate": "~1.0.1" 351 | } 352 | }, 353 | "node_modules/requires-port": { 354 | "version": "1.0.0", 355 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 356 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 357 | }, 358 | "node_modules/rxjs": { 359 | "version": "6.6.7", 360 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 361 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 362 | "dependencies": { 363 | "tslib": "^1.9.0" 364 | }, 365 | "engines": { 366 | "npm": ">=2.0.0" 367 | } 368 | }, 369 | "node_modules/safe-buffer": { 370 | "version": "5.1.2", 371 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 372 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 373 | }, 374 | "node_modules/same-origin": { 375 | "version": "0.1.1", 376 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 377 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 378 | }, 379 | "node_modules/simple-concat": { 380 | "version": "1.0.1", 381 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 382 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 383 | "funding": [ 384 | { 385 | "type": "github", 386 | "url": "https://github.com/sponsors/feross" 387 | }, 388 | { 389 | "type": "patreon", 390 | "url": "https://www.patreon.com/feross" 391 | }, 392 | { 393 | "type": "consulting", 394 | "url": "https://feross.org/support" 395 | } 396 | ] 397 | }, 398 | "node_modules/speedometer": { 399 | "version": "1.0.0", 400 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 401 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 402 | }, 403 | "node_modules/string_decoder": { 404 | "version": "1.1.1", 405 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 406 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 407 | "dependencies": { 408 | "safe-buffer": "~5.1.0" 409 | } 410 | }, 411 | "node_modules/through2": { 412 | "version": "2.0.5", 413 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 414 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 415 | "dependencies": { 416 | "readable-stream": "~2.3.6", 417 | "xtend": "~4.0.1" 418 | } 419 | }, 420 | "node_modules/tslib": { 421 | "version": "1.14.1", 422 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 423 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 424 | }, 425 | "node_modules/tunnel-agent": { 426 | "version": "0.6.0", 427 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 428 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 429 | "dependencies": { 430 | "safe-buffer": "^5.0.1" 431 | }, 432 | "engines": { 433 | "node": "*" 434 | } 435 | }, 436 | "node_modules/url-parse": { 437 | "version": "1.5.3", 438 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", 439 | "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", 440 | "dependencies": { 441 | "querystringify": "^2.1.1", 442 | "requires-port": "^1.0.0" 443 | } 444 | }, 445 | "node_modules/util-deprecate": { 446 | "version": "1.0.2", 447 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 448 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 449 | }, 450 | "node_modules/xtend": { 451 | "version": "4.0.2", 452 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 453 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 454 | "engines": { 455 | "node": ">=0.4" 456 | } 457 | } 458 | }, 459 | "dependencies": { 460 | "@sanity/client": { 461 | "version": "0.147.3", 462 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-0.147.3.tgz", 463 | "integrity": "sha512-wXWL1mPyQZB+1te2KPtSX2zQ0rc+/Ol4DsQYUQ7gY0N/ESWXqLuD14ixWAkLNGy1SbK3ZDLuTrGOstpb7va+Gw==", 464 | "requires": { 465 | "@sanity/eventsource": "0.147.0", 466 | "@sanity/generate-help-url": "0.147.0", 467 | "@sanity/observable": "0.147.0", 468 | "deep-assign": "^2.0.0", 469 | "get-it": "^5.0.0", 470 | "make-error": "^1.3.0", 471 | "object-assign": "^4.1.1" 472 | } 473 | }, 474 | "@sanity/eventsource": { 475 | "version": "0.147.0", 476 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-0.147.0.tgz", 477 | "integrity": "sha512-06XsHijSkIyz39Pkx/nNKOVDwXhLtUoYx98WirCUF3TdRt8tGQ6W/GCOSufcv4RdyQRi1d8FRwBS+kE3lxf5Fg==", 478 | "requires": { 479 | "eventsource": "^1.0.6", 480 | "eventsource-polyfill": "^0.9.6" 481 | } 482 | }, 483 | "@sanity/generate-help-url": { 484 | "version": "0.147.0", 485 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.147.0.tgz", 486 | "integrity": "sha512-jf0PWK7dpSSJUI0zJdh+PFUODmsP5dS6P9iYv/ufhyYzmD+2iV7YCpA6weNhsmNGnil2+CTj6Eg43tSKxiClRA==" 487 | }, 488 | "@sanity/observable": { 489 | "version": "0.147.0", 490 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-0.147.0.tgz", 491 | "integrity": "sha512-sQZD1fyEP8HxW3wIT9M90myg1yp4BcMr3/Q9Cu+D3ubIliTFIefi3z0WetQwEvUNq0SQE99242a+lhDFmcmTEg==", 492 | "requires": { 493 | "object-assign": "^4.1.1", 494 | "rxjs": "^6.5.3" 495 | } 496 | }, 497 | "@sanity/timed-out": { 498 | "version": "4.0.2", 499 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 500 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==" 501 | }, 502 | "capture-stack-trace": { 503 | "version": "1.0.1", 504 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 505 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 506 | }, 507 | "core-util-is": { 508 | "version": "1.0.3", 509 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 510 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 511 | }, 512 | "create-error-class": { 513 | "version": "3.0.2", 514 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 515 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 516 | "requires": { 517 | "capture-stack-trace": "^1.0.0" 518 | } 519 | }, 520 | "debug": { 521 | "version": "2.6.9", 522 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 523 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 524 | "requires": { 525 | "ms": "2.0.0" 526 | } 527 | }, 528 | "decompress-response": { 529 | "version": "3.3.0", 530 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 531 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 532 | "requires": { 533 | "mimic-response": "^1.0.0" 534 | } 535 | }, 536 | "deep-assign": { 537 | "version": "2.0.0", 538 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 539 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 540 | "requires": { 541 | "is-obj": "^1.0.0" 542 | } 543 | }, 544 | "eventsource": { 545 | "version": "1.1.0", 546 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 547 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 548 | "requires": { 549 | "original": "^1.0.0" 550 | } 551 | }, 552 | "eventsource-polyfill": { 553 | "version": "0.9.6", 554 | "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", 555 | "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=" 556 | }, 557 | "follow-redirects": { 558 | "version": "1.14.5", 559 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", 560 | "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" 561 | }, 562 | "form-urlencoded": { 563 | "version": "2.0.9", 564 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 565 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 566 | }, 567 | "from2": { 568 | "version": "2.3.0", 569 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 570 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 571 | "requires": { 572 | "inherits": "^2.0.1", 573 | "readable-stream": "^2.0.0" 574 | } 575 | }, 576 | "get-it": { 577 | "version": "5.0.5", 578 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.0.5.tgz", 579 | "integrity": "sha512-P5McakQI/9611hP0cYqyF0VlhxQj49ok21TvCbNEqBfsVVC/ZnmYPP91bky4N4/Oy1HmXFZ/CMh6CCH8nAgLpQ==", 580 | "requires": { 581 | "@sanity/timed-out": "^4.0.2", 582 | "create-error-class": "^3.0.2", 583 | "debug": "^2.6.8", 584 | "decompress-response": "^3.3.0", 585 | "follow-redirects": "^1.2.4", 586 | "form-urlencoded": "^2.0.7", 587 | "in-publish": "^2.0.0", 588 | "into-stream": "^3.1.0", 589 | "is-plain-object": "^2.0.4", 590 | "is-retry-allowed": "^1.1.0", 591 | "is-stream": "^1.1.0", 592 | "nano-pubsub": "^1.0.2", 593 | "object-assign": "^4.1.1", 594 | "parse-headers": "^2.0.1", 595 | "progress-stream": "^2.0.0", 596 | "same-origin": "^0.1.1", 597 | "simple-concat": "^1.0.0", 598 | "tunnel-agent": "^0.6.0", 599 | "url-parse": "^1.1.9" 600 | } 601 | }, 602 | "in-publish": { 603 | "version": "2.0.1", 604 | "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", 605 | "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" 606 | }, 607 | "inherits": { 608 | "version": "2.0.4", 609 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 610 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 611 | }, 612 | "into-stream": { 613 | "version": "3.1.0", 614 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 615 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 616 | "requires": { 617 | "from2": "^2.1.1", 618 | "p-is-promise": "^1.1.0" 619 | } 620 | }, 621 | "is-obj": { 622 | "version": "1.0.1", 623 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 624 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 625 | }, 626 | "is-plain-object": { 627 | "version": "2.0.4", 628 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 629 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 630 | "requires": { 631 | "isobject": "^3.0.1" 632 | } 633 | }, 634 | "is-retry-allowed": { 635 | "version": "1.2.0", 636 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 637 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 638 | }, 639 | "is-stream": { 640 | "version": "1.1.0", 641 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 642 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 643 | }, 644 | "isarray": { 645 | "version": "1.0.0", 646 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 647 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 648 | }, 649 | "isobject": { 650 | "version": "3.0.1", 651 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 652 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 653 | }, 654 | "make-error": { 655 | "version": "1.3.6", 656 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 657 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 658 | }, 659 | "mimic-response": { 660 | "version": "1.0.1", 661 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 662 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 663 | }, 664 | "ms": { 665 | "version": "2.0.0", 666 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 667 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 668 | }, 669 | "nano-pubsub": { 670 | "version": "1.0.2", 671 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 672 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 673 | }, 674 | "object-assign": { 675 | "version": "4.1.1", 676 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 677 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 678 | }, 679 | "original": { 680 | "version": "1.0.2", 681 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 682 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 683 | "requires": { 684 | "url-parse": "^1.4.3" 685 | } 686 | }, 687 | "p-is-promise": { 688 | "version": "1.1.0", 689 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 690 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" 691 | }, 692 | "parse-headers": { 693 | "version": "2.0.4", 694 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 695 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 696 | }, 697 | "process-nextick-args": { 698 | "version": "2.0.1", 699 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 700 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 701 | }, 702 | "progress-stream": { 703 | "version": "2.0.0", 704 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 705 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 706 | "requires": { 707 | "speedometer": "~1.0.0", 708 | "through2": "~2.0.3" 709 | } 710 | }, 711 | "querystringify": { 712 | "version": "2.2.0", 713 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 714 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 715 | }, 716 | "readable-stream": { 717 | "version": "2.3.7", 718 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 719 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 720 | "requires": { 721 | "core-util-is": "~1.0.0", 722 | "inherits": "~2.0.3", 723 | "isarray": "~1.0.0", 724 | "process-nextick-args": "~2.0.0", 725 | "safe-buffer": "~5.1.1", 726 | "string_decoder": "~1.1.1", 727 | "util-deprecate": "~1.0.1" 728 | } 729 | }, 730 | "requires-port": { 731 | "version": "1.0.0", 732 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 733 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 734 | }, 735 | "rxjs": { 736 | "version": "6.6.7", 737 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 738 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 739 | "requires": { 740 | "tslib": "^1.9.0" 741 | } 742 | }, 743 | "safe-buffer": { 744 | "version": "5.1.2", 745 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 746 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 747 | }, 748 | "same-origin": { 749 | "version": "0.1.1", 750 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 751 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 752 | }, 753 | "simple-concat": { 754 | "version": "1.0.1", 755 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 756 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" 757 | }, 758 | "speedometer": { 759 | "version": "1.0.0", 760 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 761 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 762 | }, 763 | "string_decoder": { 764 | "version": "1.1.1", 765 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 766 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 767 | "requires": { 768 | "safe-buffer": "~5.1.0" 769 | } 770 | }, 771 | "through2": { 772 | "version": "2.0.5", 773 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 774 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 775 | "requires": { 776 | "readable-stream": "~2.3.6", 777 | "xtend": "~4.0.1" 778 | } 779 | }, 780 | "tslib": { 781 | "version": "1.14.1", 782 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 783 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 784 | }, 785 | "tunnel-agent": { 786 | "version": "0.6.0", 787 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 788 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 789 | "requires": { 790 | "safe-buffer": "^5.0.1" 791 | } 792 | }, 793 | "url-parse": { 794 | "version": "1.5.3", 795 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", 796 | "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", 797 | "requires": { 798 | "querystringify": "^2.1.1", 799 | "requires-port": "^1.0.0" 800 | } 801 | }, 802 | "util-deprecate": { 803 | "version": "1.0.2", 804 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 805 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 806 | }, 807 | "xtend": { 808 | "version": "4.0.2", 809 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 810 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 811 | } 812 | } 813 | } 814 | -------------------------------------------------------------------------------- /netlify/functions/create-note/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sanity-create", 3 | "version": "1.0.0", 4 | "description": "netlify functions:create - Create documents in Sanity.io", 5 | "main": "sanity-create.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "netlify", 11 | "serverless", 12 | "js", 13 | "sanity" 14 | ], 15 | "author": "Sanity.io", 16 | "license": "MIT", 17 | "dependencies": { 18 | "@sanity/client": "^0.147.3" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /netlify/functions/delete-note/delete-note.js: -------------------------------------------------------------------------------- 1 | const process = require('process') 2 | 3 | const sanityClient = require('@sanity/client') 4 | 5 | const client = sanityClient({ 6 | projectId: process.env.SANITY_PROJECT, 7 | dataset: process.env.SANITY_DATASET, 8 | token: process.env.SANITY_TOKEN, 9 | apiVersion: '2022-01-01', 10 | useCdn: false, 11 | }) 12 | 13 | const handler = async (event, context) => { 14 | 15 | const deleteThisId = event.queryStringParameters.id 16 | const uId = context.clientContext.user.sub 17 | const uRoles = context.clientContext.user.app_metadata.roles 18 | 19 | /* no user, no go */ 20 | if (!uId) { 21 | console.log('No user!') 22 | return { 23 | statusCode: 401, 24 | body: JSON.stringify({ 25 | data: 'no go', 26 | }), 27 | } 28 | } 29 | 30 | /* no basic role, no go */ 31 | if (uRoles[0] !== 'basic') { 32 | console.log('No basic role!') 33 | return { 34 | statusCode: 401, 35 | body: JSON.stringify({ 36 | data: 'no go', 37 | }), 38 | } 39 | } 40 | 41 | try { 42 | 43 | const result = await client.delete(deleteThisId).then((res) => { 44 | console.log('RESULT FROM SANITY: ', res) 45 | }) 46 | 47 | return { 48 | statusCode: 200, 49 | headers: { 'Content-Type': 'application/json' }, 50 | body: JSON.stringify(result) 51 | } 52 | } 53 | 54 | catch (error) { 55 | console.log(error) 56 | return { 57 | headers: { 'Content-Type': 'application/json' }, 58 | statusCode: 500, 59 | body: error.responseBody || JSON.stringify({ error: 'An error occurred' }), 60 | } 61 | } 62 | } 63 | 64 | module.exports = { handler } -------------------------------------------------------------------------------- /netlify/functions/identity-signup/identity-signup.js: -------------------------------------------------------------------------------- 1 | const process = require('process') 2 | 3 | const sanityClient = require('@sanity/client') 4 | 5 | const client = sanityClient({ 6 | projectId: process.env.SANITY_PROJECT, 7 | dataset: process.env.SANITY_DATASET, 8 | token: process.env.SANITY_TOKEN, 9 | apiVersion: '2022-01-01', 10 | useCdn: false, 11 | }) 12 | 13 | const handler = async function (event) { 14 | const data = JSON.parse(event.body) 15 | const { user } = data 16 | 17 | /* 18 | prepare data to pass through to netlify as user is created 19 | */ 20 | const netlifyResponseBody = { 21 | 22 | app_metadata: { 23 | roles: ['basic'], 24 | app_other_thing: 'some app value' 25 | }, 26 | user_metadata: { 27 | ...user.user_metadata, 28 | user_other_thing: 'some user value' 29 | }, 30 | } 31 | 32 | /* 33 | create the user in sanity with the new users id as the sanity document id 34 | */ 35 | const doc = { 36 | _id: user.id, 37 | _type: 'webUser', 38 | email: user.email, 39 | fullName: user.user_metadata.full_name, 40 | } 41 | 42 | try { 43 | const result = await client.createIfNotExists(doc).then((res) => { 44 | console.log('SANITY RESPONSE: ', res) 45 | }) 46 | return { 47 | statusCode: 200, 48 | headers: { 'Content-Type': 'application/json' }, 49 | body: JSON.stringify(netlifyResponseBody), 50 | } 51 | } catch (error) { 52 | return { 53 | headers: { 'Content-Type': 'application/json' }, 54 | statusCode: 500, 55 | body: error.responseBody || JSON.stringify({ error: 'An error occurred' }), 56 | } 57 | } 58 | } 59 | 60 | module.exports = { handler } 61 | -------------------------------------------------------------------------------- /netlify/functions/user-notes/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sanity-groq", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "sanity-groq", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@sanity/client": "^0.147.3" 13 | } 14 | }, 15 | "node_modules/@sanity/client": { 16 | "version": "0.147.3", 17 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-0.147.3.tgz", 18 | "integrity": "sha512-wXWL1mPyQZB+1te2KPtSX2zQ0rc+/Ol4DsQYUQ7gY0N/ESWXqLuD14ixWAkLNGy1SbK3ZDLuTrGOstpb7va+Gw==", 19 | "dependencies": { 20 | "@sanity/eventsource": "0.147.0", 21 | "@sanity/generate-help-url": "0.147.0", 22 | "@sanity/observable": "0.147.0", 23 | "deep-assign": "^2.0.0", 24 | "get-it": "^5.0.0", 25 | "make-error": "^1.3.0", 26 | "object-assign": "^4.1.1" 27 | } 28 | }, 29 | "node_modules/@sanity/eventsource": { 30 | "version": "0.147.0", 31 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-0.147.0.tgz", 32 | "integrity": "sha512-06XsHijSkIyz39Pkx/nNKOVDwXhLtUoYx98WirCUF3TdRt8tGQ6W/GCOSufcv4RdyQRi1d8FRwBS+kE3lxf5Fg==", 33 | "dependencies": { 34 | "eventsource": "^1.0.6", 35 | "eventsource-polyfill": "^0.9.6" 36 | } 37 | }, 38 | "node_modules/@sanity/generate-help-url": { 39 | "version": "0.147.0", 40 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.147.0.tgz", 41 | "integrity": "sha512-jf0PWK7dpSSJUI0zJdh+PFUODmsP5dS6P9iYv/ufhyYzmD+2iV7YCpA6weNhsmNGnil2+CTj6Eg43tSKxiClRA==" 42 | }, 43 | "node_modules/@sanity/observable": { 44 | "version": "0.147.0", 45 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-0.147.0.tgz", 46 | "integrity": "sha512-sQZD1fyEP8HxW3wIT9M90myg1yp4BcMr3/Q9Cu+D3ubIliTFIefi3z0WetQwEvUNq0SQE99242a+lhDFmcmTEg==", 47 | "dependencies": { 48 | "object-assign": "^4.1.1", 49 | "rxjs": "^6.5.3" 50 | } 51 | }, 52 | "node_modules/@sanity/timed-out": { 53 | "version": "4.0.2", 54 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 55 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==", 56 | "engines": { 57 | "node": ">=0.10.0" 58 | } 59 | }, 60 | "node_modules/capture-stack-trace": { 61 | "version": "1.0.1", 62 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 63 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", 64 | "engines": { 65 | "node": ">=0.10.0" 66 | } 67 | }, 68 | "node_modules/core-util-is": { 69 | "version": "1.0.3", 70 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 71 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 72 | }, 73 | "node_modules/create-error-class": { 74 | "version": "3.0.2", 75 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 76 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 77 | "dependencies": { 78 | "capture-stack-trace": "^1.0.0" 79 | }, 80 | "engines": { 81 | "node": ">=0.10.0" 82 | } 83 | }, 84 | "node_modules/debug": { 85 | "version": "2.6.9", 86 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 87 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 88 | "dependencies": { 89 | "ms": "2.0.0" 90 | } 91 | }, 92 | "node_modules/decompress-response": { 93 | "version": "3.3.0", 94 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 95 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 96 | "dependencies": { 97 | "mimic-response": "^1.0.0" 98 | }, 99 | "engines": { 100 | "node": ">=4" 101 | } 102 | }, 103 | "node_modules/deep-assign": { 104 | "version": "2.0.0", 105 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 106 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 107 | "dependencies": { 108 | "is-obj": "^1.0.0" 109 | }, 110 | "engines": { 111 | "node": ">=0.10.0" 112 | } 113 | }, 114 | "node_modules/eventsource": { 115 | "version": "1.1.0", 116 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 117 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 118 | "dependencies": { 119 | "original": "^1.0.0" 120 | }, 121 | "engines": { 122 | "node": ">=0.12.0" 123 | } 124 | }, 125 | "node_modules/eventsource-polyfill": { 126 | "version": "0.9.6", 127 | "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", 128 | "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=" 129 | }, 130 | "node_modules/follow-redirects": { 131 | "version": "1.14.6", 132 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", 133 | "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", 134 | "funding": [ 135 | { 136 | "type": "individual", 137 | "url": "https://github.com/sponsors/RubenVerborgh" 138 | } 139 | ], 140 | "engines": { 141 | "node": ">=4.0" 142 | }, 143 | "peerDependenciesMeta": { 144 | "debug": { 145 | "optional": true 146 | } 147 | } 148 | }, 149 | "node_modules/form-urlencoded": { 150 | "version": "2.0.9", 151 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 152 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 153 | }, 154 | "node_modules/from2": { 155 | "version": "2.3.0", 156 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 157 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 158 | "dependencies": { 159 | "inherits": "^2.0.1", 160 | "readable-stream": "^2.0.0" 161 | } 162 | }, 163 | "node_modules/get-it": { 164 | "version": "5.2.1", 165 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.2.1.tgz", 166 | "integrity": "sha512-KDR5lTKmxKd/XyP3egZ8ieIdKLxKrQPKUFxk86MSoytGjxX4STigaFuwtFGmGx/lBPc1YSpi9wyuQJ5uP8WcRA==", 167 | "dependencies": { 168 | "@sanity/timed-out": "^4.0.2", 169 | "create-error-class": "^3.0.2", 170 | "debug": "^2.6.8", 171 | "decompress-response": "^3.3.0", 172 | "follow-redirects": "^1.2.4", 173 | "form-urlencoded": "^2.0.7", 174 | "into-stream": "^3.1.0", 175 | "is-plain-object": "^2.0.4", 176 | "is-retry-allowed": "^1.1.0", 177 | "is-stream": "^1.1.0", 178 | "nano-pubsub": "^1.0.2", 179 | "object-assign": "^4.1.1", 180 | "parse-headers": "^2.0.1", 181 | "progress-stream": "^2.0.0", 182 | "same-origin": "^0.1.1", 183 | "simple-concat": "^1.0.0", 184 | "tunnel-agent": "^0.6.0", 185 | "url-parse": "^1.1.9" 186 | }, 187 | "engines": { 188 | "node": ">=8.0.0" 189 | } 190 | }, 191 | "node_modules/inherits": { 192 | "version": "2.0.4", 193 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 194 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 195 | }, 196 | "node_modules/into-stream": { 197 | "version": "3.1.0", 198 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 199 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 200 | "dependencies": { 201 | "from2": "^2.1.1", 202 | "p-is-promise": "^1.1.0" 203 | }, 204 | "engines": { 205 | "node": ">=4" 206 | } 207 | }, 208 | "node_modules/is-obj": { 209 | "version": "1.0.1", 210 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 211 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 212 | "engines": { 213 | "node": ">=0.10.0" 214 | } 215 | }, 216 | "node_modules/is-plain-object": { 217 | "version": "2.0.4", 218 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 219 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 220 | "dependencies": { 221 | "isobject": "^3.0.1" 222 | }, 223 | "engines": { 224 | "node": ">=0.10.0" 225 | } 226 | }, 227 | "node_modules/is-retry-allowed": { 228 | "version": "1.2.0", 229 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 230 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 231 | "engines": { 232 | "node": ">=0.10.0" 233 | } 234 | }, 235 | "node_modules/is-stream": { 236 | "version": "1.1.0", 237 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 238 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 239 | "engines": { 240 | "node": ">=0.10.0" 241 | } 242 | }, 243 | "node_modules/isarray": { 244 | "version": "1.0.0", 245 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 246 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 247 | }, 248 | "node_modules/isobject": { 249 | "version": "3.0.1", 250 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 251 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 252 | "engines": { 253 | "node": ">=0.10.0" 254 | } 255 | }, 256 | "node_modules/make-error": { 257 | "version": "1.3.6", 258 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 259 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 260 | }, 261 | "node_modules/mimic-response": { 262 | "version": "1.0.1", 263 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 264 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 265 | "engines": { 266 | "node": ">=4" 267 | } 268 | }, 269 | "node_modules/ms": { 270 | "version": "2.0.0", 271 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 272 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 273 | }, 274 | "node_modules/nano-pubsub": { 275 | "version": "1.0.2", 276 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 277 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 278 | }, 279 | "node_modules/object-assign": { 280 | "version": "4.1.1", 281 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 282 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 283 | "engines": { 284 | "node": ">=0.10.0" 285 | } 286 | }, 287 | "node_modules/original": { 288 | "version": "1.0.2", 289 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 290 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 291 | "dependencies": { 292 | "url-parse": "^1.4.3" 293 | } 294 | }, 295 | "node_modules/p-is-promise": { 296 | "version": "1.1.0", 297 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 298 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", 299 | "engines": { 300 | "node": ">=4" 301 | } 302 | }, 303 | "node_modules/parse-headers": { 304 | "version": "2.0.4", 305 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 306 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 307 | }, 308 | "node_modules/process-nextick-args": { 309 | "version": "2.0.1", 310 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 311 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 312 | }, 313 | "node_modules/progress-stream": { 314 | "version": "2.0.0", 315 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 316 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 317 | "dependencies": { 318 | "speedometer": "~1.0.0", 319 | "through2": "~2.0.3" 320 | } 321 | }, 322 | "node_modules/querystringify": { 323 | "version": "2.2.0", 324 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 325 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 326 | }, 327 | "node_modules/readable-stream": { 328 | "version": "2.3.7", 329 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 330 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 331 | "dependencies": { 332 | "core-util-is": "~1.0.0", 333 | "inherits": "~2.0.3", 334 | "isarray": "~1.0.0", 335 | "process-nextick-args": "~2.0.0", 336 | "safe-buffer": "~5.1.1", 337 | "string_decoder": "~1.1.1", 338 | "util-deprecate": "~1.0.1" 339 | } 340 | }, 341 | "node_modules/requires-port": { 342 | "version": "1.0.0", 343 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 344 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 345 | }, 346 | "node_modules/rxjs": { 347 | "version": "6.6.7", 348 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 349 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 350 | "dependencies": { 351 | "tslib": "^1.9.0" 352 | }, 353 | "engines": { 354 | "npm": ">=2.0.0" 355 | } 356 | }, 357 | "node_modules/safe-buffer": { 358 | "version": "5.1.2", 359 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 360 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 361 | }, 362 | "node_modules/same-origin": { 363 | "version": "0.1.1", 364 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 365 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 366 | }, 367 | "node_modules/simple-concat": { 368 | "version": "1.0.1", 369 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 370 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 371 | "funding": [ 372 | { 373 | "type": "github", 374 | "url": "https://github.com/sponsors/feross" 375 | }, 376 | { 377 | "type": "patreon", 378 | "url": "https://www.patreon.com/feross" 379 | }, 380 | { 381 | "type": "consulting", 382 | "url": "https://feross.org/support" 383 | } 384 | ] 385 | }, 386 | "node_modules/speedometer": { 387 | "version": "1.0.0", 388 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 389 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 390 | }, 391 | "node_modules/string_decoder": { 392 | "version": "1.1.1", 393 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 394 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 395 | "dependencies": { 396 | "safe-buffer": "~5.1.0" 397 | } 398 | }, 399 | "node_modules/through2": { 400 | "version": "2.0.5", 401 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 402 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 403 | "dependencies": { 404 | "readable-stream": "~2.3.6", 405 | "xtend": "~4.0.1" 406 | } 407 | }, 408 | "node_modules/tslib": { 409 | "version": "1.14.1", 410 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 411 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 412 | }, 413 | "node_modules/tunnel-agent": { 414 | "version": "0.6.0", 415 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 416 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 417 | "dependencies": { 418 | "safe-buffer": "^5.0.1" 419 | }, 420 | "engines": { 421 | "node": "*" 422 | } 423 | }, 424 | "node_modules/url-parse": { 425 | "version": "1.5.4", 426 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", 427 | "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", 428 | "dependencies": { 429 | "querystringify": "^2.1.1", 430 | "requires-port": "^1.0.0" 431 | } 432 | }, 433 | "node_modules/util-deprecate": { 434 | "version": "1.0.2", 435 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 436 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 437 | }, 438 | "node_modules/xtend": { 439 | "version": "4.0.2", 440 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 441 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 442 | "engines": { 443 | "node": ">=0.4" 444 | } 445 | } 446 | }, 447 | "dependencies": { 448 | "@sanity/client": { 449 | "version": "0.147.3", 450 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-0.147.3.tgz", 451 | "integrity": "sha512-wXWL1mPyQZB+1te2KPtSX2zQ0rc+/Ol4DsQYUQ7gY0N/ESWXqLuD14ixWAkLNGy1SbK3ZDLuTrGOstpb7va+Gw==", 452 | "requires": { 453 | "@sanity/eventsource": "0.147.0", 454 | "@sanity/generate-help-url": "0.147.0", 455 | "@sanity/observable": "0.147.0", 456 | "deep-assign": "^2.0.0", 457 | "get-it": "^5.0.0", 458 | "make-error": "^1.3.0", 459 | "object-assign": "^4.1.1" 460 | } 461 | }, 462 | "@sanity/eventsource": { 463 | "version": "0.147.0", 464 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-0.147.0.tgz", 465 | "integrity": "sha512-06XsHijSkIyz39Pkx/nNKOVDwXhLtUoYx98WirCUF3TdRt8tGQ6W/GCOSufcv4RdyQRi1d8FRwBS+kE3lxf5Fg==", 466 | "requires": { 467 | "eventsource": "^1.0.6", 468 | "eventsource-polyfill": "^0.9.6" 469 | } 470 | }, 471 | "@sanity/generate-help-url": { 472 | "version": "0.147.0", 473 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-0.147.0.tgz", 474 | "integrity": "sha512-jf0PWK7dpSSJUI0zJdh+PFUODmsP5dS6P9iYv/ufhyYzmD+2iV7YCpA6weNhsmNGnil2+CTj6Eg43tSKxiClRA==" 475 | }, 476 | "@sanity/observable": { 477 | "version": "0.147.0", 478 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-0.147.0.tgz", 479 | "integrity": "sha512-sQZD1fyEP8HxW3wIT9M90myg1yp4BcMr3/Q9Cu+D3ubIliTFIefi3z0WetQwEvUNq0SQE99242a+lhDFmcmTEg==", 480 | "requires": { 481 | "object-assign": "^4.1.1", 482 | "rxjs": "^6.5.3" 483 | } 484 | }, 485 | "@sanity/timed-out": { 486 | "version": "4.0.2", 487 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 488 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==" 489 | }, 490 | "capture-stack-trace": { 491 | "version": "1.0.1", 492 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 493 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 494 | }, 495 | "core-util-is": { 496 | "version": "1.0.3", 497 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 498 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 499 | }, 500 | "create-error-class": { 501 | "version": "3.0.2", 502 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 503 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 504 | "requires": { 505 | "capture-stack-trace": "^1.0.0" 506 | } 507 | }, 508 | "debug": { 509 | "version": "2.6.9", 510 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 511 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 512 | "requires": { 513 | "ms": "2.0.0" 514 | } 515 | }, 516 | "decompress-response": { 517 | "version": "3.3.0", 518 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 519 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 520 | "requires": { 521 | "mimic-response": "^1.0.0" 522 | } 523 | }, 524 | "deep-assign": { 525 | "version": "2.0.0", 526 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 527 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 528 | "requires": { 529 | "is-obj": "^1.0.0" 530 | } 531 | }, 532 | "eventsource": { 533 | "version": "1.1.0", 534 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 535 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 536 | "requires": { 537 | "original": "^1.0.0" 538 | } 539 | }, 540 | "eventsource-polyfill": { 541 | "version": "0.9.6", 542 | "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", 543 | "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=" 544 | }, 545 | "follow-redirects": { 546 | "version": "1.14.6", 547 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", 548 | "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" 549 | }, 550 | "form-urlencoded": { 551 | "version": "2.0.9", 552 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 553 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 554 | }, 555 | "from2": { 556 | "version": "2.3.0", 557 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 558 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 559 | "requires": { 560 | "inherits": "^2.0.1", 561 | "readable-stream": "^2.0.0" 562 | } 563 | }, 564 | "get-it": { 565 | "version": "5.2.1", 566 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.2.1.tgz", 567 | "integrity": "sha512-KDR5lTKmxKd/XyP3egZ8ieIdKLxKrQPKUFxk86MSoytGjxX4STigaFuwtFGmGx/lBPc1YSpi9wyuQJ5uP8WcRA==", 568 | "requires": { 569 | "@sanity/timed-out": "^4.0.2", 570 | "create-error-class": "^3.0.2", 571 | "debug": "^2.6.8", 572 | "decompress-response": "^3.3.0", 573 | "follow-redirects": "^1.2.4", 574 | "form-urlencoded": "^2.0.7", 575 | "into-stream": "^3.1.0", 576 | "is-plain-object": "^2.0.4", 577 | "is-retry-allowed": "^1.1.0", 578 | "is-stream": "^1.1.0", 579 | "nano-pubsub": "^1.0.2", 580 | "object-assign": "^4.1.1", 581 | "parse-headers": "^2.0.1", 582 | "progress-stream": "^2.0.0", 583 | "same-origin": "^0.1.1", 584 | "simple-concat": "^1.0.0", 585 | "tunnel-agent": "^0.6.0", 586 | "url-parse": "^1.1.9" 587 | } 588 | }, 589 | "inherits": { 590 | "version": "2.0.4", 591 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 592 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 593 | }, 594 | "into-stream": { 595 | "version": "3.1.0", 596 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 597 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 598 | "requires": { 599 | "from2": "^2.1.1", 600 | "p-is-promise": "^1.1.0" 601 | } 602 | }, 603 | "is-obj": { 604 | "version": "1.0.1", 605 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 606 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 607 | }, 608 | "is-plain-object": { 609 | "version": "2.0.4", 610 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 611 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 612 | "requires": { 613 | "isobject": "^3.0.1" 614 | } 615 | }, 616 | "is-retry-allowed": { 617 | "version": "1.2.0", 618 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 619 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 620 | }, 621 | "is-stream": { 622 | "version": "1.1.0", 623 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 624 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 625 | }, 626 | "isarray": { 627 | "version": "1.0.0", 628 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 629 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 630 | }, 631 | "isobject": { 632 | "version": "3.0.1", 633 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 634 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 635 | }, 636 | "make-error": { 637 | "version": "1.3.6", 638 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 639 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 640 | }, 641 | "mimic-response": { 642 | "version": "1.0.1", 643 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 644 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 645 | }, 646 | "ms": { 647 | "version": "2.0.0", 648 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 649 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 650 | }, 651 | "nano-pubsub": { 652 | "version": "1.0.2", 653 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 654 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 655 | }, 656 | "object-assign": { 657 | "version": "4.1.1", 658 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 659 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 660 | }, 661 | "original": { 662 | "version": "1.0.2", 663 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 664 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 665 | "requires": { 666 | "url-parse": "^1.4.3" 667 | } 668 | }, 669 | "p-is-promise": { 670 | "version": "1.1.0", 671 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 672 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" 673 | }, 674 | "parse-headers": { 675 | "version": "2.0.4", 676 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 677 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 678 | }, 679 | "process-nextick-args": { 680 | "version": "2.0.1", 681 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 682 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 683 | }, 684 | "progress-stream": { 685 | "version": "2.0.0", 686 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 687 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 688 | "requires": { 689 | "speedometer": "~1.0.0", 690 | "through2": "~2.0.3" 691 | } 692 | }, 693 | "querystringify": { 694 | "version": "2.2.0", 695 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 696 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 697 | }, 698 | "readable-stream": { 699 | "version": "2.3.7", 700 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 701 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 702 | "requires": { 703 | "core-util-is": "~1.0.0", 704 | "inherits": "~2.0.3", 705 | "isarray": "~1.0.0", 706 | "process-nextick-args": "~2.0.0", 707 | "safe-buffer": "~5.1.1", 708 | "string_decoder": "~1.1.1", 709 | "util-deprecate": "~1.0.1" 710 | } 711 | }, 712 | "requires-port": { 713 | "version": "1.0.0", 714 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 715 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 716 | }, 717 | "rxjs": { 718 | "version": "6.6.7", 719 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 720 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 721 | "requires": { 722 | "tslib": "^1.9.0" 723 | } 724 | }, 725 | "safe-buffer": { 726 | "version": "5.1.2", 727 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 728 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 729 | }, 730 | "same-origin": { 731 | "version": "0.1.1", 732 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 733 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 734 | }, 735 | "simple-concat": { 736 | "version": "1.0.1", 737 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 738 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" 739 | }, 740 | "speedometer": { 741 | "version": "1.0.0", 742 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 743 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 744 | }, 745 | "string_decoder": { 746 | "version": "1.1.1", 747 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 748 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 749 | "requires": { 750 | "safe-buffer": "~5.1.0" 751 | } 752 | }, 753 | "through2": { 754 | "version": "2.0.5", 755 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 756 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 757 | "requires": { 758 | "readable-stream": "~2.3.6", 759 | "xtend": "~4.0.1" 760 | } 761 | }, 762 | "tslib": { 763 | "version": "1.14.1", 764 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 765 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 766 | }, 767 | "tunnel-agent": { 768 | "version": "0.6.0", 769 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 770 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 771 | "requires": { 772 | "safe-buffer": "^5.0.1" 773 | } 774 | }, 775 | "url-parse": { 776 | "version": "1.5.4", 777 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", 778 | "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", 779 | "requires": { 780 | "querystringify": "^2.1.1", 781 | "requires-port": "^1.0.0" 782 | } 783 | }, 784 | "util-deprecate": { 785 | "version": "1.0.2", 786 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 787 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 788 | }, 789 | "xtend": { 790 | "version": "4.0.2", 791 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 792 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 793 | } 794 | } 795 | } 796 | -------------------------------------------------------------------------------- /netlify/functions/user-notes/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sanity-groq", 3 | "version": "1.0.0", 4 | "description": "netlify functions:create - Query a Sanity.io dataset with GROQ", 5 | "main": "sanity-groq.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "netlify", 11 | "serverless", 12 | "js", 13 | "sanity", 14 | "GROQ" 15 | ], 16 | "author": "Sanity.io", 17 | "license": "MIT", 18 | "dependencies": { 19 | "@sanity/client": "^0.147.3" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /netlify/functions/user-notes/user-notes.js: -------------------------------------------------------------------------------- 1 | const process = require('process') 2 | 3 | const sanityClient = require('@sanity/client') 4 | 5 | const client = sanityClient({ 6 | projectId: process.env.SANITY_PROJECT, 7 | dataset: process.env.SANITY_DATASET, 8 | token: process.env.SANITY_TOKEN, 9 | apiVersion: '2022-01-01', 10 | useCdn: false, 11 | }) 12 | 13 | const handler = async (event, context) => { 14 | 15 | const uId = context.clientContext.user.sub 16 | const uRoles = context.clientContext.user.app_metadata.roles 17 | 18 | /* no user, no go */ 19 | if (!uId) { 20 | console.log('No user!') 21 | return { 22 | statusCode: 401, 23 | body: JSON.stringify({ 24 | data: 'no go', 25 | }), 26 | } 27 | } 28 | 29 | /* no basic role, no go */ 30 | if (uRoles[0] !== 'basic') { 31 | console.log('No basic role!') 32 | return { 33 | statusCode: 401, 34 | body: JSON.stringify({ 35 | data: 'no go', 36 | }), 37 | } 38 | } 39 | 40 | try { 41 | const query = `*[_type == "note" && references("${uId}")]{title, _updatedAt, _id}` 42 | 43 | let notes 44 | 45 | await client.fetch(query).then((r) => { 46 | notes = r.map((n) => { 47 | return { 48 | title: n.title, 49 | updated: n._updatedAt, 50 | id: n._id 51 | } 52 | }) 53 | }) 54 | 55 | return { 56 | statusCode: 200, 57 | headers: { 'Content-Type': 'application/json' }, 58 | body: JSON.stringify(notes), 59 | } 60 | } 61 | 62 | catch (error) { 63 | return { 64 | headers: { 'Content-Type': 'application/json' }, 65 | statusCode: 500, 66 | body: error.responseBody || JSON.stringify({ error: 'An error occurred' }), 67 | } 68 | } 69 | 70 | } 71 | 72 | module.exports = { handler } 73 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "authy-web", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "@sanity/client": "^2.23.2", 9 | "node-fetch": "^2.6.6" 10 | } 11 | }, 12 | "node_modules/@rexxars/eventsource-polyfill": { 13 | "version": "1.0.0", 14 | "resolved": "https://registry.npmjs.org/@rexxars/eventsource-polyfill/-/eventsource-polyfill-1.0.0.tgz", 15 | "integrity": "sha512-YnrybIoM9WFqmeK1D8p/gutqjJnmXCVFWAU3ucka9M7Dzpen3f2Dy4KsC6k1wDHrCtHQuUHHwZovh3i5UPDaZw==" 16 | }, 17 | "node_modules/@sanity/client": { 18 | "version": "2.23.2", 19 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-2.23.2.tgz", 20 | "integrity": "sha512-t0IbBYTLAWs5U3bi0pCcIcaQay6IakS+EVSoX6/zcGoEEgxj1KdLWx7ozXMPj9O/IGztRRifyNEWLkclazmqyQ==", 21 | "dependencies": { 22 | "@sanity/eventsource": "2.23.0", 23 | "@sanity/generate-help-url": "2.18.0", 24 | "@sanity/observable": "2.0.9", 25 | "deep-assign": "^2.0.0", 26 | "get-it": "^5.2.1", 27 | "make-error": "^1.3.0", 28 | "object-assign": "^4.1.1" 29 | } 30 | }, 31 | "node_modules/@sanity/eventsource": { 32 | "version": "2.23.0", 33 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-2.23.0.tgz", 34 | "integrity": "sha512-MpQoV8FqnwnfBPQ29qcI1WA6MPZI1Z8rACFky5yU/8hol/Vv9g38PJbvHsGXsDkDartRXN5Wx5OjFk2imG4QPQ==", 35 | "dependencies": { 36 | "@rexxars/eventsource-polyfill": "^1.0.0", 37 | "eventsource": "^1.0.6" 38 | } 39 | }, 40 | "node_modules/@sanity/generate-help-url": { 41 | "version": "2.18.0", 42 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-2.18.0.tgz", 43 | "integrity": "sha512-If8Qkw32LWPes16UzqwUsTLgfxF5d4ACdUvCLMl6grJc/5G8LKPAGCQUuA/d1F4W16yCJVV7Zv31HDRDXJSJkg==" 44 | }, 45 | "node_modules/@sanity/observable": { 46 | "version": "2.0.9", 47 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-2.0.9.tgz", 48 | "integrity": "sha512-IUpzsEbhOhofTBUu2tiQ4Ymbkmhr6oe4UC4Ds1khZ9Td4t4mzzPGmGQIr5SBEDawz0UD7ZgZAb4LeEzV3hUrtA==", 49 | "dependencies": { 50 | "object-assign": "^4.1.1", 51 | "rxjs": "^6.5.3" 52 | } 53 | }, 54 | "node_modules/@sanity/timed-out": { 55 | "version": "4.0.2", 56 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 57 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==", 58 | "engines": { 59 | "node": ">=0.10.0" 60 | } 61 | }, 62 | "node_modules/capture-stack-trace": { 63 | "version": "1.0.1", 64 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 65 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", 66 | "engines": { 67 | "node": ">=0.10.0" 68 | } 69 | }, 70 | "node_modules/core-util-is": { 71 | "version": "1.0.3", 72 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 73 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 74 | }, 75 | "node_modules/create-error-class": { 76 | "version": "3.0.2", 77 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 78 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 79 | "dependencies": { 80 | "capture-stack-trace": "^1.0.0" 81 | }, 82 | "engines": { 83 | "node": ">=0.10.0" 84 | } 85 | }, 86 | "node_modules/debug": { 87 | "version": "2.6.9", 88 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 89 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 90 | "dependencies": { 91 | "ms": "2.0.0" 92 | } 93 | }, 94 | "node_modules/decompress-response": { 95 | "version": "3.3.0", 96 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 97 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 98 | "dependencies": { 99 | "mimic-response": "^1.0.0" 100 | }, 101 | "engines": { 102 | "node": ">=4" 103 | } 104 | }, 105 | "node_modules/deep-assign": { 106 | "version": "2.0.0", 107 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 108 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 109 | "dependencies": { 110 | "is-obj": "^1.0.0" 111 | }, 112 | "engines": { 113 | "node": ">=0.10.0" 114 | } 115 | }, 116 | "node_modules/eventsource": { 117 | "version": "1.1.0", 118 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 119 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 120 | "dependencies": { 121 | "original": "^1.0.0" 122 | }, 123 | "engines": { 124 | "node": ">=0.12.0" 125 | } 126 | }, 127 | "node_modules/follow-redirects": { 128 | "version": "1.14.6", 129 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", 130 | "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", 131 | "funding": [ 132 | { 133 | "type": "individual", 134 | "url": "https://github.com/sponsors/RubenVerborgh" 135 | } 136 | ], 137 | "engines": { 138 | "node": ">=4.0" 139 | }, 140 | "peerDependenciesMeta": { 141 | "debug": { 142 | "optional": true 143 | } 144 | } 145 | }, 146 | "node_modules/form-urlencoded": { 147 | "version": "2.0.9", 148 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 149 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 150 | }, 151 | "node_modules/from2": { 152 | "version": "2.3.0", 153 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 154 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 155 | "dependencies": { 156 | "inherits": "^2.0.1", 157 | "readable-stream": "^2.0.0" 158 | } 159 | }, 160 | "node_modules/get-it": { 161 | "version": "5.2.1", 162 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.2.1.tgz", 163 | "integrity": "sha512-KDR5lTKmxKd/XyP3egZ8ieIdKLxKrQPKUFxk86MSoytGjxX4STigaFuwtFGmGx/lBPc1YSpi9wyuQJ5uP8WcRA==", 164 | "dependencies": { 165 | "@sanity/timed-out": "^4.0.2", 166 | "create-error-class": "^3.0.2", 167 | "debug": "^2.6.8", 168 | "decompress-response": "^3.3.0", 169 | "follow-redirects": "^1.2.4", 170 | "form-urlencoded": "^2.0.7", 171 | "into-stream": "^3.1.0", 172 | "is-plain-object": "^2.0.4", 173 | "is-retry-allowed": "^1.1.0", 174 | "is-stream": "^1.1.0", 175 | "nano-pubsub": "^1.0.2", 176 | "object-assign": "^4.1.1", 177 | "parse-headers": "^2.0.1", 178 | "progress-stream": "^2.0.0", 179 | "same-origin": "^0.1.1", 180 | "simple-concat": "^1.0.0", 181 | "tunnel-agent": "^0.6.0", 182 | "url-parse": "^1.1.9" 183 | }, 184 | "engines": { 185 | "node": ">=8.0.0" 186 | } 187 | }, 188 | "node_modules/inherits": { 189 | "version": "2.0.4", 190 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 191 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 192 | }, 193 | "node_modules/into-stream": { 194 | "version": "3.1.0", 195 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 196 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 197 | "dependencies": { 198 | "from2": "^2.1.1", 199 | "p-is-promise": "^1.1.0" 200 | }, 201 | "engines": { 202 | "node": ">=4" 203 | } 204 | }, 205 | "node_modules/is-obj": { 206 | "version": "1.0.1", 207 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 208 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 209 | "engines": { 210 | "node": ">=0.10.0" 211 | } 212 | }, 213 | "node_modules/is-plain-object": { 214 | "version": "2.0.4", 215 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 216 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 217 | "dependencies": { 218 | "isobject": "^3.0.1" 219 | }, 220 | "engines": { 221 | "node": ">=0.10.0" 222 | } 223 | }, 224 | "node_modules/is-retry-allowed": { 225 | "version": "1.2.0", 226 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 227 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 228 | "engines": { 229 | "node": ">=0.10.0" 230 | } 231 | }, 232 | "node_modules/is-stream": { 233 | "version": "1.1.0", 234 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 235 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 236 | "engines": { 237 | "node": ">=0.10.0" 238 | } 239 | }, 240 | "node_modules/isarray": { 241 | "version": "1.0.0", 242 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 243 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 244 | }, 245 | "node_modules/isobject": { 246 | "version": "3.0.1", 247 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 248 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 249 | "engines": { 250 | "node": ">=0.10.0" 251 | } 252 | }, 253 | "node_modules/make-error": { 254 | "version": "1.3.6", 255 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 256 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 257 | }, 258 | "node_modules/mimic-response": { 259 | "version": "1.0.1", 260 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 261 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 262 | "engines": { 263 | "node": ">=4" 264 | } 265 | }, 266 | "node_modules/ms": { 267 | "version": "2.0.0", 268 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 269 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 270 | }, 271 | "node_modules/nano-pubsub": { 272 | "version": "1.0.2", 273 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 274 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 275 | }, 276 | "node_modules/node-fetch": { 277 | "version": "2.6.6", 278 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", 279 | "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", 280 | "dependencies": { 281 | "whatwg-url": "^5.0.0" 282 | }, 283 | "engines": { 284 | "node": "4.x || >=6.0.0" 285 | } 286 | }, 287 | "node_modules/object-assign": { 288 | "version": "4.1.1", 289 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 290 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 291 | "engines": { 292 | "node": ">=0.10.0" 293 | } 294 | }, 295 | "node_modules/original": { 296 | "version": "1.0.2", 297 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 298 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 299 | "dependencies": { 300 | "url-parse": "^1.4.3" 301 | } 302 | }, 303 | "node_modules/p-is-promise": { 304 | "version": "1.1.0", 305 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 306 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", 307 | "engines": { 308 | "node": ">=4" 309 | } 310 | }, 311 | "node_modules/parse-headers": { 312 | "version": "2.0.4", 313 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 314 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 315 | }, 316 | "node_modules/process-nextick-args": { 317 | "version": "2.0.1", 318 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 319 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 320 | }, 321 | "node_modules/progress-stream": { 322 | "version": "2.0.0", 323 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 324 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 325 | "dependencies": { 326 | "speedometer": "~1.0.0", 327 | "through2": "~2.0.3" 328 | } 329 | }, 330 | "node_modules/querystringify": { 331 | "version": "2.2.0", 332 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 333 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 334 | }, 335 | "node_modules/readable-stream": { 336 | "version": "2.3.7", 337 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 338 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 339 | "dependencies": { 340 | "core-util-is": "~1.0.0", 341 | "inherits": "~2.0.3", 342 | "isarray": "~1.0.0", 343 | "process-nextick-args": "~2.0.0", 344 | "safe-buffer": "~5.1.1", 345 | "string_decoder": "~1.1.1", 346 | "util-deprecate": "~1.0.1" 347 | } 348 | }, 349 | "node_modules/requires-port": { 350 | "version": "1.0.0", 351 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 352 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 353 | }, 354 | "node_modules/rxjs": { 355 | "version": "6.6.7", 356 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 357 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 358 | "dependencies": { 359 | "tslib": "^1.9.0" 360 | }, 361 | "engines": { 362 | "npm": ">=2.0.0" 363 | } 364 | }, 365 | "node_modules/safe-buffer": { 366 | "version": "5.1.2", 367 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 368 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 369 | }, 370 | "node_modules/same-origin": { 371 | "version": "0.1.1", 372 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 373 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 374 | }, 375 | "node_modules/simple-concat": { 376 | "version": "1.0.1", 377 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 378 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 379 | "funding": [ 380 | { 381 | "type": "github", 382 | "url": "https://github.com/sponsors/feross" 383 | }, 384 | { 385 | "type": "patreon", 386 | "url": "https://www.patreon.com/feross" 387 | }, 388 | { 389 | "type": "consulting", 390 | "url": "https://feross.org/support" 391 | } 392 | ] 393 | }, 394 | "node_modules/speedometer": { 395 | "version": "1.0.0", 396 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 397 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 398 | }, 399 | "node_modules/string_decoder": { 400 | "version": "1.1.1", 401 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 402 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 403 | "dependencies": { 404 | "safe-buffer": "~5.1.0" 405 | } 406 | }, 407 | "node_modules/through2": { 408 | "version": "2.0.5", 409 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 410 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 411 | "dependencies": { 412 | "readable-stream": "~2.3.6", 413 | "xtend": "~4.0.1" 414 | } 415 | }, 416 | "node_modules/tr46": { 417 | "version": "0.0.3", 418 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 419 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 420 | }, 421 | "node_modules/tslib": { 422 | "version": "1.14.1", 423 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 424 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 425 | }, 426 | "node_modules/tunnel-agent": { 427 | "version": "0.6.0", 428 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 429 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 430 | "dependencies": { 431 | "safe-buffer": "^5.0.1" 432 | }, 433 | "engines": { 434 | "node": "*" 435 | } 436 | }, 437 | "node_modules/url-parse": { 438 | "version": "1.5.4", 439 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", 440 | "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", 441 | "dependencies": { 442 | "querystringify": "^2.1.1", 443 | "requires-port": "^1.0.0" 444 | } 445 | }, 446 | "node_modules/util-deprecate": { 447 | "version": "1.0.2", 448 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 449 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 450 | }, 451 | "node_modules/webidl-conversions": { 452 | "version": "3.0.1", 453 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 454 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 455 | }, 456 | "node_modules/whatwg-url": { 457 | "version": "5.0.0", 458 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 459 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 460 | "dependencies": { 461 | "tr46": "~0.0.3", 462 | "webidl-conversions": "^3.0.0" 463 | } 464 | }, 465 | "node_modules/xtend": { 466 | "version": "4.0.2", 467 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 468 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 469 | "engines": { 470 | "node": ">=0.4" 471 | } 472 | } 473 | }, 474 | "dependencies": { 475 | "@rexxars/eventsource-polyfill": { 476 | "version": "1.0.0", 477 | "resolved": "https://registry.npmjs.org/@rexxars/eventsource-polyfill/-/eventsource-polyfill-1.0.0.tgz", 478 | "integrity": "sha512-YnrybIoM9WFqmeK1D8p/gutqjJnmXCVFWAU3ucka9M7Dzpen3f2Dy4KsC6k1wDHrCtHQuUHHwZovh3i5UPDaZw==" 479 | }, 480 | "@sanity/client": { 481 | "version": "2.23.2", 482 | "resolved": "https://registry.npmjs.org/@sanity/client/-/client-2.23.2.tgz", 483 | "integrity": "sha512-t0IbBYTLAWs5U3bi0pCcIcaQay6IakS+EVSoX6/zcGoEEgxj1KdLWx7ozXMPj9O/IGztRRifyNEWLkclazmqyQ==", 484 | "requires": { 485 | "@sanity/eventsource": "2.23.0", 486 | "@sanity/generate-help-url": "2.18.0", 487 | "@sanity/observable": "2.0.9", 488 | "deep-assign": "^2.0.0", 489 | "get-it": "^5.2.1", 490 | "make-error": "^1.3.0", 491 | "object-assign": "^4.1.1" 492 | } 493 | }, 494 | "@sanity/eventsource": { 495 | "version": "2.23.0", 496 | "resolved": "https://registry.npmjs.org/@sanity/eventsource/-/eventsource-2.23.0.tgz", 497 | "integrity": "sha512-MpQoV8FqnwnfBPQ29qcI1WA6MPZI1Z8rACFky5yU/8hol/Vv9g38PJbvHsGXsDkDartRXN5Wx5OjFk2imG4QPQ==", 498 | "requires": { 499 | "@rexxars/eventsource-polyfill": "^1.0.0", 500 | "eventsource": "^1.0.6" 501 | } 502 | }, 503 | "@sanity/generate-help-url": { 504 | "version": "2.18.0", 505 | "resolved": "https://registry.npmjs.org/@sanity/generate-help-url/-/generate-help-url-2.18.0.tgz", 506 | "integrity": "sha512-If8Qkw32LWPes16UzqwUsTLgfxF5d4ACdUvCLMl6grJc/5G8LKPAGCQUuA/d1F4W16yCJVV7Zv31HDRDXJSJkg==" 507 | }, 508 | "@sanity/observable": { 509 | "version": "2.0.9", 510 | "resolved": "https://registry.npmjs.org/@sanity/observable/-/observable-2.0.9.tgz", 511 | "integrity": "sha512-IUpzsEbhOhofTBUu2tiQ4Ymbkmhr6oe4UC4Ds1khZ9Td4t4mzzPGmGQIr5SBEDawz0UD7ZgZAb4LeEzV3hUrtA==", 512 | "requires": { 513 | "object-assign": "^4.1.1", 514 | "rxjs": "^6.5.3" 515 | } 516 | }, 517 | "@sanity/timed-out": { 518 | "version": "4.0.2", 519 | "resolved": "https://registry.npmjs.org/@sanity/timed-out/-/timed-out-4.0.2.tgz", 520 | "integrity": "sha512-NBDKGj14g9Z+bopIvZcQKWCzJq5JSrdmzRR1CS+iyA3Gm8SnIWBfZa7I3mTg2X6Nu8LQXG0EPKXdOGozLS4i3w==" 521 | }, 522 | "capture-stack-trace": { 523 | "version": "1.0.1", 524 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 525 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 526 | }, 527 | "core-util-is": { 528 | "version": "1.0.3", 529 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 530 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 531 | }, 532 | "create-error-class": { 533 | "version": "3.0.2", 534 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 535 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 536 | "requires": { 537 | "capture-stack-trace": "^1.0.0" 538 | } 539 | }, 540 | "debug": { 541 | "version": "2.6.9", 542 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 543 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 544 | "requires": { 545 | "ms": "2.0.0" 546 | } 547 | }, 548 | "decompress-response": { 549 | "version": "3.3.0", 550 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 551 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 552 | "requires": { 553 | "mimic-response": "^1.0.0" 554 | } 555 | }, 556 | "deep-assign": { 557 | "version": "2.0.0", 558 | "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", 559 | "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", 560 | "requires": { 561 | "is-obj": "^1.0.0" 562 | } 563 | }, 564 | "eventsource": { 565 | "version": "1.1.0", 566 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", 567 | "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", 568 | "requires": { 569 | "original": "^1.0.0" 570 | } 571 | }, 572 | "follow-redirects": { 573 | "version": "1.14.6", 574 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", 575 | "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" 576 | }, 577 | "form-urlencoded": { 578 | "version": "2.0.9", 579 | "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", 580 | "integrity": "sha512-fWUzNiOnYa126vFAT6TFXd1mhJrvD8IqmQ9ilZPjkLYQfaRreBr5fIUoOpPlWtqaAG64nzoE7u5zSetifab9IA==" 581 | }, 582 | "from2": { 583 | "version": "2.3.0", 584 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 585 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 586 | "requires": { 587 | "inherits": "^2.0.1", 588 | "readable-stream": "^2.0.0" 589 | } 590 | }, 591 | "get-it": { 592 | "version": "5.2.1", 593 | "resolved": "https://registry.npmjs.org/get-it/-/get-it-5.2.1.tgz", 594 | "integrity": "sha512-KDR5lTKmxKd/XyP3egZ8ieIdKLxKrQPKUFxk86MSoytGjxX4STigaFuwtFGmGx/lBPc1YSpi9wyuQJ5uP8WcRA==", 595 | "requires": { 596 | "@sanity/timed-out": "^4.0.2", 597 | "create-error-class": "^3.0.2", 598 | "debug": "^2.6.8", 599 | "decompress-response": "^3.3.0", 600 | "follow-redirects": "^1.2.4", 601 | "form-urlencoded": "^2.0.7", 602 | "into-stream": "^3.1.0", 603 | "is-plain-object": "^2.0.4", 604 | "is-retry-allowed": "^1.1.0", 605 | "is-stream": "^1.1.0", 606 | "nano-pubsub": "^1.0.2", 607 | "object-assign": "^4.1.1", 608 | "parse-headers": "^2.0.1", 609 | "progress-stream": "^2.0.0", 610 | "same-origin": "^0.1.1", 611 | "simple-concat": "^1.0.0", 612 | "tunnel-agent": "^0.6.0", 613 | "url-parse": "^1.1.9" 614 | } 615 | }, 616 | "inherits": { 617 | "version": "2.0.4", 618 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 619 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 620 | }, 621 | "into-stream": { 622 | "version": "3.1.0", 623 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 624 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 625 | "requires": { 626 | "from2": "^2.1.1", 627 | "p-is-promise": "^1.1.0" 628 | } 629 | }, 630 | "is-obj": { 631 | "version": "1.0.1", 632 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 633 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" 634 | }, 635 | "is-plain-object": { 636 | "version": "2.0.4", 637 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 638 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 639 | "requires": { 640 | "isobject": "^3.0.1" 641 | } 642 | }, 643 | "is-retry-allowed": { 644 | "version": "1.2.0", 645 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 646 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 647 | }, 648 | "is-stream": { 649 | "version": "1.1.0", 650 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 651 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 652 | }, 653 | "isarray": { 654 | "version": "1.0.0", 655 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 656 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 657 | }, 658 | "isobject": { 659 | "version": "3.0.1", 660 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 661 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 662 | }, 663 | "make-error": { 664 | "version": "1.3.6", 665 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 666 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 667 | }, 668 | "mimic-response": { 669 | "version": "1.0.1", 670 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 671 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 672 | }, 673 | "ms": { 674 | "version": "2.0.0", 675 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 676 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 677 | }, 678 | "nano-pubsub": { 679 | "version": "1.0.2", 680 | "resolved": "https://registry.npmjs.org/nano-pubsub/-/nano-pubsub-1.0.2.tgz", 681 | "integrity": "sha1-NM53b3r5WZFbj3rP6N1rnGbzvek=" 682 | }, 683 | "node-fetch": { 684 | "version": "2.6.6", 685 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", 686 | "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", 687 | "requires": { 688 | "whatwg-url": "^5.0.0" 689 | } 690 | }, 691 | "object-assign": { 692 | "version": "4.1.1", 693 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 694 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 695 | }, 696 | "original": { 697 | "version": "1.0.2", 698 | "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", 699 | "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", 700 | "requires": { 701 | "url-parse": "^1.4.3" 702 | } 703 | }, 704 | "p-is-promise": { 705 | "version": "1.1.0", 706 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 707 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" 708 | }, 709 | "parse-headers": { 710 | "version": "2.0.4", 711 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", 712 | "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" 713 | }, 714 | "process-nextick-args": { 715 | "version": "2.0.1", 716 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 717 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 718 | }, 719 | "progress-stream": { 720 | "version": "2.0.0", 721 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-2.0.0.tgz", 722 | "integrity": "sha1-+sY6Cz0R3qy7CWmrzJOyFLzhntU=", 723 | "requires": { 724 | "speedometer": "~1.0.0", 725 | "through2": "~2.0.3" 726 | } 727 | }, 728 | "querystringify": { 729 | "version": "2.2.0", 730 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 731 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 732 | }, 733 | "readable-stream": { 734 | "version": "2.3.7", 735 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 736 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 737 | "requires": { 738 | "core-util-is": "~1.0.0", 739 | "inherits": "~2.0.3", 740 | "isarray": "~1.0.0", 741 | "process-nextick-args": "~2.0.0", 742 | "safe-buffer": "~5.1.1", 743 | "string_decoder": "~1.1.1", 744 | "util-deprecate": "~1.0.1" 745 | } 746 | }, 747 | "requires-port": { 748 | "version": "1.0.0", 749 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 750 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" 751 | }, 752 | "rxjs": { 753 | "version": "6.6.7", 754 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", 755 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", 756 | "requires": { 757 | "tslib": "^1.9.0" 758 | } 759 | }, 760 | "safe-buffer": { 761 | "version": "5.1.2", 762 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 763 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 764 | }, 765 | "same-origin": { 766 | "version": "0.1.1", 767 | "resolved": "https://registry.npmjs.org/same-origin/-/same-origin-0.1.1.tgz", 768 | "integrity": "sha1-wih9MZJXffUXrLvW0UUanDw5FPU=" 769 | }, 770 | "simple-concat": { 771 | "version": "1.0.1", 772 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 773 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" 774 | }, 775 | "speedometer": { 776 | "version": "1.0.0", 777 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", 778 | "integrity": "sha1-zWccsGdSwivKM3Di8zREC+T8YuI=" 779 | }, 780 | "string_decoder": { 781 | "version": "1.1.1", 782 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 783 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 784 | "requires": { 785 | "safe-buffer": "~5.1.0" 786 | } 787 | }, 788 | "through2": { 789 | "version": "2.0.5", 790 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 791 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 792 | "requires": { 793 | "readable-stream": "~2.3.6", 794 | "xtend": "~4.0.1" 795 | } 796 | }, 797 | "tr46": { 798 | "version": "0.0.3", 799 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 800 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 801 | }, 802 | "tslib": { 803 | "version": "1.14.1", 804 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 805 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 806 | }, 807 | "tunnel-agent": { 808 | "version": "0.6.0", 809 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 810 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 811 | "requires": { 812 | "safe-buffer": "^5.0.1" 813 | } 814 | }, 815 | "url-parse": { 816 | "version": "1.5.4", 817 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz", 818 | "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==", 819 | "requires": { 820 | "querystringify": "^2.1.1", 821 | "requires-port": "^1.0.0" 822 | } 823 | }, 824 | "util-deprecate": { 825 | "version": "1.0.2", 826 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 827 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 828 | }, 829 | "webidl-conversions": { 830 | "version": "3.0.1", 831 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 832 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 833 | }, 834 | "whatwg-url": { 835 | "version": "5.0.0", 836 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 837 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 838 | "requires": { 839 | "tr46": "~0.0.3", 840 | "webidl-conversions": "^3.0.0" 841 | } 842 | }, 843 | "xtend": { 844 | "version": "4.0.2", 845 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 846 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 847 | } 848 | } 849 | } 850 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@sanity/client": "^2.23.2", 4 | "node-fetch": "^2.6.6" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Netlify Auth & Sanity Data 2 | 3 | A bare minimum app that allows a Netlify identity user to sign up, log in, and securely read and write data scoped to their user in a private Sanity datastore. 4 | 5 | ![screenshot](/images/better_screenshot_2.png) 6 | 7 | This repo is *not* something you should fork to use for your next production project. It's just a thing I made to learn/demonstrate one way this can work. 8 | 9 | ## Outline of how it works 10 | 11 | ### Signing Up 12 | 13 | 1. Front End User signs up with [Netlify identity widget](https://github.com/netlify/netlify-identity-widget) and confirms their email 14 | 2. Front end user gets a token, and at the same time netlify sends the new user's id to Sanity. Sanity creates a document mapped to the Netlify user by id. 15 | 16 | ![signup diagram](/images/signing_up.png) 17 | 18 | ### Reading and Writing User-Scoped Data 19 | 20 | 1. Front End requests the users stuff, presenting token to netlify function 21 | 2. Netlify (with Sanity key in server-side ENV var) uses user info in token and queries Sanity for the user's data 22 | 3. Sanity sends the user's stuff back to a serverless function 23 | 4. The serverless function returns it to the browser 24 | 25 | ![fetching data diagram](/images/fetching_data.png) 26 | 27 | ### Some Details 28 | 29 | This is for demonstration purposes, so it has some slow, but simple-on-the-brain patterns like: 30 | 31 | - No frontend framework nor front-end compilation steps 32 | - Standard browser `fetch()` calls that only result in UI updates when the new data is really back from Sanity. 33 | - The npm stuff you see in the top-level directory is there for Netlify functions to access when this is deployed 34 | 35 | ## Where's the Sanity part? 36 | 37 | It's [this repo](https://github.com/bacalj/authy-studio) but there's not much to see. It's an out-of-the-box Sanity studio. The document schemas for the studio are pasted below for quick reference. 38 | 39 | ### note.js 40 | 41 | ```js 42 | 43 | import { MdNote } from 'react-icons/md' 44 | 45 | export default { 46 | name: 'note', 47 | title: 'Notes', 48 | type: 'document', 49 | icon: MdNote, 50 | fields: [ 51 | { 52 | name: 'title', 53 | title: 'Title', 54 | type: 'string', 55 | }, 56 | { 57 | name: 'belongsTo', 58 | title: 'User', 59 | type: 'reference', 60 | to: [ { type: 'webUser' } ] 61 | } 62 | ] 63 | } 64 | 65 | ``` 66 | 67 | ### webUser.js 68 | 69 | ```js 70 | 71 | 72 | import { MdNote } from 'react-icons/md' 73 | 74 | export default { 75 | name: 'note', 76 | title: 'Notes', 77 | type: 'document', 78 | icon: MdNote, 79 | fields: [ 80 | { 81 | name: 'title', 82 | title: 'Title', 83 | type: 'string', 84 | }, 85 | { 86 | name: 'belongsTo', 87 | title: 'User', 88 | type: 'reference', 89 | to: [ { type: 'webUser' } ] 90 | } 91 | ], 92 | preview: { 93 | select: { 94 | title: 'title', 95 | subtitle: 'belongsTo.email' 96 | } 97 | } 98 | } 99 | 100 | ``` 101 | 102 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Fuzzy+Bubbles&display=swap'); 2 | 3 | body { 4 | color:#1a0909; 5 | margin:0px; 6 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 7 | background-color: rgb(247, 246, 243); 8 | } 9 | 10 | .grid { 11 | display:grid; 12 | width:100%; 13 | grid-template-columns: 50% 50%; 14 | height: 100%; 15 | } 16 | 17 | .box, .log { 18 | padding:20px 30px 20px 40px; 19 | } 20 | 21 | .box > img { 22 | opacity: .5; 23 | height: 50px; 24 | display: inline-block; 25 | } 26 | 27 | a { 28 | color: #1a0909; 29 | } 30 | 31 | li { 32 | list-style: none; 33 | } 34 | 35 | ul { 36 | padding:0px; 37 | } 38 | 39 | body.logged-out h2.sanity-title { 40 | color: silver; 41 | } 42 | 43 | body.logged-in .sanity-no-go { 44 | display:none; 45 | } 46 | 47 | body.logged-out .sanity-operations { 48 | display:none; 49 | } 50 | 51 | .sanity-no-go { 52 | border:4px dashed silver; 53 | border-radius: 6px; 54 | height: 300px; 55 | display:grid; 56 | } 57 | 58 | .sanity-no-go > div { 59 | align-self: center; 60 | justify-self: center; 61 | } 62 | 63 | .sanity-operations input { 64 | background-color: white; 65 | border:1px solid #6B6B6B; 66 | padding:4px; 67 | border-radius: 1px; 68 | width:200px; 69 | } 70 | 71 | button, .data-netlify a, #notes li { 72 | background-color: white; 73 | border:1px solid #6B6B6B; 74 | padding:4px 6px; 75 | border-radius: 3px; 76 | text-decoration: none; 77 | font-size:16px; 78 | } 79 | 80 | li > button { 81 | border:0px; 82 | margin-right:10px; 83 | font-size:16px; 84 | line-height:16px; 85 | } 86 | 87 | .data-netlify li { 88 | display: inline-block; 89 | margin-right:6px; 90 | margin-top:6px; 91 | } 92 | 93 | p, div, span, a { 94 | font-size:14px; 95 | } 96 | 97 | #notes li { 98 | margin-bottom:4px; 99 | } 100 | 101 | .sanity-operations button:hover { 102 | cursor:pointer; 103 | background-color: rgb(240, 200, 200); 104 | } 105 | 106 | .netlify a:hover { 107 | cursor: pointer; 108 | background-color: rgb(170, 200, 215); 109 | } 110 | 111 | #animation { 112 | position: absolute; 113 | top: 0; 114 | width: 100vw; 115 | height: 100vh; 116 | z-index:100000; 117 | background-color: rgba(100,100,100,.74); 118 | text-align:center; 119 | } 120 | 121 | #animation img { 122 | width:10%; 123 | margin: 0 auto; 124 | position: relative; 125 | top: 50%; 126 | transform: translateY(-50%); 127 | opacity: .5; 128 | animation: 2s rocking infinite ease-in-out 129 | } 130 | 131 | @keyframes rocking { 132 | 0% { 133 | transform: rotate(0deg) 134 | } 135 | 25% { 136 | transform: rotate(10deg) 137 | } 138 | 75% { 139 | transform: rotate(-10deg) 140 | } 141 | 100% { 142 | transform: rotate(0deg) 143 | } 144 | } 145 | 146 | footer { 147 | position: fixed; 148 | bottom: 0; 149 | text-align:center; 150 | width: 100%; 151 | padding:10px; 152 | } 153 | 154 | footer div { 155 | display: inline-block; 156 | padding:10px; 157 | } 158 | 159 | footer img { 160 | width:22px; 161 | } 162 | 163 | .nota { 164 | margin-top:60px; 165 | font-size: 11px; 166 | color:#1a0909; 167 | width:330px; 168 | } 169 | 170 | .netlify-identity-signup:after { 171 | content: "*"; 172 | width:20px; 173 | height:20px; 174 | } 175 | 176 | .sanity-link img { 177 | filter: grayscale(100%); 178 | opacity: 0.8; 179 | } --------------------------------------------------------------------------------