Realtime: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдордИ 2020  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: supabase/realtime

рдЕрд░реЗ,

рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ JS рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред (рдЬреЗрдПрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ)
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

import { Socket } = '@supabase/realtime-js'

const REALTIME_URL = process.env.REALTIME_URL || 'http://localhost:4000'

var socket = new Socket(REALTIME_URL)
socket.connect()

// Listen to only INSERTS on the 'users' table in the 'public' schema
var allChanges = this.socket.channel('realtime:public:users')
  .join()
  .on('INSERT', payload => { console.log('Update received!', payload) })

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

const { Socket } = require('@supabase/realtime-js'); // related to node/browser difference?

const REALTIME_URL = process.env.REALTIME_URL || 'http://localhost:4000/socket' // "/socket" had to be added

var socket = new Socket(REALTIME_URL) 
socket.connect()

var allChanges = socket.channel('realtime:public:users') // removed "this." here (related to node/browser difference?)
  .join()
  .channel // added ".channel" because "join()" returns Push object
  .on('INSERT', payload => { console.log('Record inserted!', payload) })

рдорд╣рд╛рди рд▓рд┐рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрдВред рд╣рдо рдЕрднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг/рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдкрд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╢реЗрд╖ рди рд╣реЛ

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ @рд░реЗрдЯреЗрдВрдбреЛ ! рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рддрдХ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

// related to node/browser difference?

рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реАред рд╢реАрд░реНрд╖ рдкрд░ рдЙрджрд╛рд╣рд░рдг "рдмреНрд░рд╛рдЙрдЬрд╝рд░" рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рдиреАрдЪреЗ рд╡рд╛рд▓рд╛ "рд╕рд░реНрд╡рд░" рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╣реИред

рдЬреЗрдПрд╕ рдХреЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЯреАрдХ рдирд╣реАрдВ) рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ: рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЫреЛрдЯреЗ рдПрдирд┐рдореЗрд╢рди) рдореЗрдВ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдлрд┐рд░ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рдкреВрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рд▓рдЧреЗред

рдлрд┐рд░ рдЧреВрдЧрд▓ рдиреЗ рд╕реЛрдЪрд╛.. рд╢рд╛рдпрдж рд╣рдо рдЗрд╕ рдЬреЗрдПрд╕ рдХреЛ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рд░реНрдл рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд╣реАрдВ? рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдиреЛрдбрдЬ рдХрд╛ "рд╕рдмрд╕реЗрдЯ" рдмрдирд╛рдпрд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ "рдЗрдВрдЬрди" рдмрдирд╛рдпрд╛ рдЬреЛ рдЗрд╕реЗ v8 рдирд╛рдо рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдерд╛ред

рд▓реЗрдХрд┐рди NodeJS рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди "рдмреЛрд▓реА" рдирд╣реАрдВ рд╣реИред (рдХреЙрдордирдЬреЗрдПрд╕ рдмрдирд╛рдо рдПрдПрдордбреА рдмрдирд╛рдо рдпреВрдПрдордбреА рджреЗрдЦреЗрдВред) рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдореМрдЬреВрдж рд╣реИрдВред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди JS рдмреЛрд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ JS рдХрд╛ "рдЕрдиреБрд╡рд╛рдж" рдХрд░рддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рднреА рддрд░рд╣ - рдЖрдкрдиреЗ рдЗрд╕реЗ Node . рдХреЗ рд▓рд┐рдП require('@supabase/realtime-js'); рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрд╛ рд╣реИ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ node-js рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ /examples рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд▓реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ join() рдФрд░ on(...) рдХреЗ рдмреАрдЪ рдореЗрдВ ".channel" рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдиреЛрдб.рдЬреЗрдПрд╕/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдВрддрд░ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред
рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .join() рдЪреИрдирд▓ рдХреЗ рдмрдЬрд╛рдп рдкреБрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореМрдЬреВрджрд╛ рд░реЗрдкреЛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдлреЛрд░реНрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрджрд┐ рдпрд╣ рдирд┐рдЬреА рд╣реИ рддреЛ рдХреЛрдИ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдбреЗрдореЛ рдмрдирд╛рдЙрдВрдЧрд╛

рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдорд┐рд▓рд╛:
https://gist.github.com/retendo/3e2ddb90a29dfd0f5a2ab81729c7ed29

рдпрд╣ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдЯ рдкрде рдЪреИрдирд▓ рдкрде рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕реЙрдХреЗрдЯ.рдЪреИрдирд▓ ('рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛') -> рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╕реЙрдХреЗрдЯ.рдЪреИрдирд▓ (' ') -> рдЯреВрдЯрд╛ рд╣реБрдЖрд╕реЙрдХреЗрдЯ.рдЪреИрдирд▓ ('рд░реАрдпрд▓рдЯрд╛рдЗрдо: ') -> рдЯреВрдЯрд╛ рд╣реБрдЖ
рд╕реЙрдХреЗрдЯ.рдЪреИрдирд▓ ('рд░реАрдпрд▓рдЯрд╛рдЗрдо: рдкрдмреНрд▓рд┐рдХ:*') -> рдЯреВрдЯрд╛ рд╣реБрдЖ

рд╕реЙрдХреЗрдЯ.рдЪреИрдирд▓ ('рд░реАрдпрд▓рдЯрд╛рдЗрдо: рдкрдмреНрд▓рд┐рдХ') рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрд╕ рдЕрдВрддрд┐рдо рдХреЛрд▓рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред

рдЕрд░реЗ @retendo рдЗрдирдХрдВрдкрдиреАрдбреЛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ - рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдм рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдиреЛрдбрдЬ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХрд▓ рд╕реБрдмрд╣ рддрдХ рдореЗрд░рд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

FYI рдХрд░реЗрдВ: рдпреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

socket.channel('') -> broken
socket.channel('realtime:') -> broken
socket.channel('realtime:public:*') -> broken (see realtime:public below)

рд▓реЗрдХрд┐рди рдпреЗ рдЪрд╛рд╣рд┐рдП

socket.channel('realtime:*') -> listen to changes in the database
socket.channel('realtime:public') -> listen to changes in the public schema
socket.channel('realtime:public:users') -> listen to changes in the users table

рд╡рд┐рднрд┐рдиреНрди "рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд░реЛрдВ" рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП "рдЪрд╛рд▓реВ" рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред рдЕрдкрдиреЗ рд╕рд╛рд░ рдореЗрдВ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

// INSERTS
socket.channel('realtime:public')
  .join()
  .channel
  .on('INSERT', payload => {});

// UPDATES
socket.channel('realtime:public')
  .join()
  .channel
  .on('UPDATE', payload => {});

// DELETES
socket.channel('realtime:public')
  .join()
  .channel
  .on('DELETE', payload => {});

// ALL 
socket.channel('realtime:public')
  .join()
  .channel
  .on('*', payload => {});

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдереЛрдбрд╝реА рдорджрдж рдорд┐рд▓реЗрдЧреАрдВ! рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ - рдкреНрд░реЙрдХреНрд╕реА рдмрдирд╛рдирд╛ (рд╢рд╛рдпрдж рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП?)

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд╕реЙрдХреЗрдЯ рдПрдкреАрдЖрдИ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХреБрдЫ рдкреЗрд▓реЛрдб рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред

рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЗ рд▓рд┐рдП @retendo рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреБрдбрд╝рдиреЗ () рдФрд░ рдСрди (...) рдХреЗ рдмреАрдЪ рдореЗрдВ ".рдЪреИрдирд▓" рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдФрд░ рдореЗрд░реЗ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦреЗрдВ :

рдореВрд▓ рд░реВрдк рд╕реЗ socket.channel() рдЪреИрдирд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ socket.channel.join() рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдШрдЯрдирд╛ рджреЗрддрд╛ рд╣реИред рддреЛ рдЖрдк join рдИрд╡реЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреИрдирд▓ рдХреЛ "рдПрдХреНрд╕реЗрд╕" рдХрд░ рд░рд╣реЗ рдереЗред

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдЕрдкрдбреЗрдЯ рд░рдЦреЗрдВ - рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕реЗ examples рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдпрд╣ рд╕рдордЭ рдЖрддрд╛ рд╣реИред рдореВрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдзрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдЬрдВрдЬреАрд░ рдореЗрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд▓реЗрдХрд┐рди рдЖрдкрдХреА рджреВрд╕рд░реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░реЙрдХреНрд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрд╕реНрд╡реАрд░ рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рди рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХрд╛ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рд╕реАрдзреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдореЗрдВред рд╣рдо рдЕрднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг/рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдкрд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╢реЗрд╖ рди рд╣реЛ

рдЕрднреА рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lacoprof picture lacoprof  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

awalias picture awalias  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kiwicopple picture kiwicopple  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

awalias picture awalias  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kwakwaversal picture kwakwaversal  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ