►
Description
Today on the stream we looked at a solution for using the (now deprecated) functionality of the Electron Remote package by utilizing the IPC that Electron provides. Later we go through an exercise where we diff the raw database for Insomnia's internals. Fun stuff!
A weekly stream focused on Insomnia's open source community.
Join us on the #stream channel over on the Insomnia community slack: https://chat.insomnia.rest
A
B
A
B
A
Yeah
that
that's
a
pretty
common
saying
I
mean
you
hear
it
in
movies
all
the
time.
A
B
Story
there
I
can
tell
well
welcome
everyone
to
the
stream.
This
is
oh
boy.
I
should
start
counting.
This
is
probably
the
17th
or
18th
we've
been
doing
this
since
february.
You
can
join
us
on
insomnia.rest,
so
you
go
to
chat.insomnia.rest
and
you'll
pull
up
a
slack.
Workspace
form
you've
seen
them
before,
and
you
just
fill
out
that
and
you
get
access
to
it's
free
and
open
and
everything
and
you
can
come
on
the
stream
and
the
way
that
works
is
there's
one.
Once
you
go
there
pinned
to
a
stream
channel.
B
I
can
just
show
you,
because
I
have
it
open
here.
So
there's
like
a
stream
channel.
That's
where
I
posted
this
is
me
posting
just
a
few
minutes
ago.
Anything
that's
happening
on
the
stream
and
what
you
can
do
is
get
access
from
there.
This
is
an
open
document.
I
guess
you
can
see
it
in
my
url
bar
here
too,
if
you
wanted,
but
you
can
see
the
planning
document
that
we
have
for
the
insomnia
stream,
and
this
is
important
because
everything
we
do
about
the
stream
is
done
in
the
open.
B
So
everything
from
like
the
rationales
for
what
the
time
is
that
we
picked
to
do
this,
how
long
it
should
be
equipment
that
you
need.
You
know
so
forth,
where
the
stream
happens,
logins
all
that
other
stuff.
Obviously,
if
you're,
not
at
kong,
you
don't
have
access
to
the
logins,
but
everything
that
you
could
have
is
there,
and
I
think
that
we
realized
just
before
this
call
that
there
is
there's
another
thing.
B
So
there's
like
a
priority
list
and
the
priority
list
is
anybody
that
comes
on
live
is
first
priority.
So
if
you
have
a
question
you'd
like
to
come
on,
this
is
the
time
for
you
to
come
and
ask
your
question
second
priority:
is
we
look
at
anything
with
the
the
stream
label
on
github
and
the
third
priority
is
kind
of
like
random
github
triaging
we've
done
that
before
actually
in
reverse
order
and
it's
really
been
fun,
and
I
actually
hope
we'll
do
more
of
that.
B
Our
product
manager
wills
came
on
and
I
think
it
was
really
effective
and
we
did
get
some
things
merged
because
of
that
we
have.
You
know
like
many
open
source
projects.
We
have
a
lot
of
issues
that
are
open
and
like
these
two
that
are
up
the
top
here,
have
not
been
responded
to
by
anyone
and
are
unverified
in
bug
reports.
We
really
should
take
a
look
at
that
kind
of
stuff.
B
So
that's
the
attitude
is
that
we
make
this
time
so
before
the
stream
philippe
and
I
were
looking
here-
and
we
saw
that
somebody-
somebody
asked
this
question
here.
Christian
ego
asked
a
very
good
question
about
electron,
and
then
that
was
on
thursday
and
then
yesterday
no
one
responded.
So
how
many
days
is
that
one
two
three
four
five
days
and
that's
not
good.
B
So
what
I'd
like
to
add
here?
Third
third
priority.
B
Is
this
gonna
make
it
like?
Is
this
gonna
make
it
really
overflow
or
something
you
know
what?
Let's
just
say,
insomnia
community
slack,
look
for
any
questions.
B
Great,
so
that's
that's
what
we
did
and
then
there's
two
third
priorities:
sorry
random
triaging,
you're
now
lower
in
the
ranks,
so
we're
gonna
we're
gonna
kind
of
proceed.
We're
gonna
go
out
order
today,
just
because
we
were
looking
at
it
and
I
think
now
we
can
start
there's
nothing
else,
really
to
say
yeah,
okay.
So
what
are
we
gonna
say
really.
A
I
was
gonna
say
I.
I
suspect
that
that
slack
message
is
related
to
the
electron
remote
ticket
that
we
also
have
open
on
earth.
B
Yeah
this
thing,
so,
let's,
let's
read
about
what
what
this
is,
so
you
used
to
be
able
to
do
this
thing,
which
is
what
the
person
is
trying
to
do
used
to
be
able
to
from
electron.
You
would
call
remote
and
then
you
would
get
stuff
out.
So
that's
what
they're
doing
right,
they're
saying
electron.remote.dialog
so
in
the
example
in
the
code
here
it's
browser
window,
but
you
know
they're
pulling
dialogue
and
what
they're
seeing
is,
cannot
read
property
of
undefined
reading
dialogue,
so
remote
is
undefined,
and
why
is
that?
B
It's
because
we're
using
this
package
electron,
slash
remote.
Let's
read
up
here
for
just
a
little
bit
of
briefing,
so
it's
an
electron
module
that
bridges
javascript
objects
from
the
main
process
to
the
render
process.
So
an
electron
there's
two
processes
going
on
one
that
does
the
front
end
like
browser
stuff
that
renders
your
app
and
another
one
that
runs
node
and
another
one.
Like
the
main.
It's
called
the
main
process
in
the
background
that
does
all
the
the
dirty
work
for
file
access
and
you
name
it
lots
of
stuff.
B
So
this
lets
you
access
main
process,
only
objects
as
if
they
were
available
in
the
render
process-
and
you
wouldn't
wouldn't
you
guess
it-
there's
a
lot
of
subtle
pitfalls,
a
lot
of
problems
with
doing
this
almost
always
a
better
way
to
invoke
your
task.
For
example,
ipc
render
that
invoke
conserve
com,
many
common
use
cases.
B
So
you
know
ipc
is
inter-process
communication,
so
there's
like
a
bridge
and
over
that
bridge,
there's
it's
like
a
hole
that
you
poke
through
on
both
sides
that
that
the
renderer
can
send
information
to
the
main
thread
and
the
main
consent
information
to
the
render
process.
So
they
have
some
kind
of
communication
into
process
communication.
B
That
is
what
that
is
what
it
stands
for
right.
I
don't
want
to
be
well
yeah.
I
think
it
is
so
anywho
oops
shouldn't
have
deleted
that.
Do
you
have
any
hints,
or
do
you
have
any
ideas
about
how
they
could
do
this
phillipe.
A
There
was
a
comment
on
that
on
the
the
ticket
that
folks
reported.
Let's
find
that
as
well
with
someone
suggesting
a
workaround,
I
think.
B
Hell
yeah
I'll,
take
a
look
at
this
later
today.
That
was
five
days
ago
found
a
workaround
for
our
applications.
Webview
tag
is
enabled
which
allows
for
navigation
events.
It
bypasses
x-frame
options
and
allows
me
to
get
the
data
I'm
looking
for
for
a
redirection.
My
code
can
be
found
here:
insomnia
plug-in
valorent
man.
I
wish
I
knew
more
about
the
plug-ins
that
people
are
building.
I
have
such
a
surface
level.
I
know
the
names
of
a
lot
of
them,
but
I
haven't
looked
at
a
lot
of
them
yeah
that
one
is
used.
A
It's
like
counter-strike,
but
made
for
made
by
the
folks
that
made
a
league
of
legends.
Why.
B
A
B
While
my
plugin
is
working
again,
I
would
still
appreciate
enabling
the
modules
I
can
better
control
cookies.
Currently
I
cannot
view
or
forcefully
invalidate
third
party
or
http
only
cookies.
Oh
that's
kind
of
an
interesting
interesting
point.
So
is
this
the
same
person
that
was
asking
on
christian
ego,
cr
tech,
doodle?
B
Oh
somebody
said:
oh
somebody
joined
who's.
This
hey
jack,
how's
it
going
jack,
wait
the
perfect
person
to
are
you.
Did
you
see
yeah?
I
was
watching.
B
Right,
please
save
us
from
our
from
our
flailing
okay.
C
So,
in
this
case,
what
we
want
to
do
is
avoid
enabling
the
remote
module,
as
as
noted
in
the
electron,
slash
remote
package.
It's
a
huge
trip
hazard
lots
of
pitfalls.
It's
a
security
problem,
so
we're
not
gonna
do
that,
but
what
we're
gonna
try
to
do
instead
is
expose
ipc
bridge
methods
for
the
things
people
want
to
do
so
in
that
the
thing
on
the
community
slack,
I
think
they
wanted
to
use
dialogue
to
do
yeah.
C
C
C
And
you
can
pass
any
options
you
want
to
it.
They
just
have
to
use
ipc,
render.invoke
or
window.show
site,
save
dialogue,
which
is
okay.
B
One
second
one:
second,
I
didn't
catch
that
last
part.
You
said,
but
I
wanna
I
wanna,
find
this
file
so
that
I
can
ask
them
so
it's
called
preload.
What's
going
on
here,
t
pre,
oops,
preload
yeah
that
one.
C
Yeah,
so
these
are
the
ones
we
have
today
and
they're
all
exposed
in
the
app
under
the
window,
so
they
get
injected
into
windows
window..
The
convention
I've
used
is
to
mimic
the
electron
api,
the
old
one,
so
it's
got
window.dialog
rather
than
remote.dialog
window.app
rather
than
remote.app,
etc.
But
then
there's
a
but
then
I've
used
main
to
define
any
of
our
custom
ones
that
didn't
fit
in
the
electron
api.
B
Main
okay,
window.main
restart.
I
didn't
know
that
that's
really
interesting,
so
I
can
do
okay
hold
on
so
I
can
come
into
insomnia
and
I
can
say
window.may
oops.
B
And
like
the
dialogue
hi,
I'm
sure
that's
not
how
it
works
window,
dot,
dialogue,
it's
a
it's.
B
C
B
C
B
C
Yeah
I
mean,
I
think,
without
future
plug-in
kind
of
revisits.
We
will
certainly
need
to
be
expanding.
The
surface
area
of
that
I
all
I
did
was
cover
the
stuff
we
were
already
using
in
our
internal
app.
B
Yeah,
so
we
should
put
I
kind
of
want
to
leave
this
wait
a
second.
I
just
pulled
up
the
link
for
the
stream
hold
on.
Do
we
not
start
the
stream
june
14th.
B
B
Well,
I
definitely
just
so.
People
can
see
what
it
looks
like
to
do
an
infinite
loop
here
with
the
videos.
It
sure
shows
me
that
this
stuff
is
working,
but
I
guess
we're
gonna
have
to
just
do
twitch
today.
Why
would
it
well
anywho?
I
don't
know,
there's
a
problem
with
restream
it
didn't
it
didn't,
get
it
waiting
for
kong.
Do
you
think
if
I
end
the
stream
and
then
start
again,
it
will.
B
Right,
I
don't
know
if
it
saves
the
recording.
Maybe
we
can
get
a
trial
for
ping
gg.
We
can
use
trial
for
being
gg.
We
could
okay
all
right.
Well,
I
don't
know
I
don't
know.
What's
the
best
move
to
make
about
that?
Well,
can
we
can
ask,
we
can
ask
victor
or
someone
who
does
streaming?
I
guess
he's
the
only
one
at
congo
also.
Does
this
man,
I
don't
like
one,
but
it
did
work
on
twitch.
You
said.
B
Okay,
well
twitch,
it
is.
Let
me
see
if
I
can.
Okay,
sorry,
sorry,
everyone
watching
this
is
like
very
boring.
I
realized
but
kind
of
a
problem.
If
it
doesn't
work,
hey
looks
like
youtube:
isn't
working,
please
head
on
over
to
twitch?
B
B
B
Why
I'm
not
okay?
Well,
I
you
know
it's
working
somewhere.
I
don't
know
let's
just
let's
just
keep
going.
I
suppose.
Okay,
so
take
a
look
at
this.
B
You
know
we're
going
to
add
stuff
to
preload.js
and
we're
going
to
talk
over
the
ipc
bridge
and
that's
the
method
by
which
we
will
expose
this
stuff.
Is
that
was
that
correct
yeah?
What
would
you
think
about
adding
this
stuff
to
the
plugin
api
directly,
instead
of
putting
it
on
window.
C
Well,
the
guidance
is
to
do
it.
This
way
I
mean
to
put
it
on
window.
The
guidance
is
definitely
to
put
it
on
window.
That's
what
context
bridge
will
do
when
we,
if
we
switch
context,
isolation
on
see
this
this
this
preload
currently
doesn't
run
in
a
sandbox,
and
it
has
access
to
a
lot
of
stuff,
but
the
future,
I
think
by
electron
20
it
is,
it
will
be
forced
to
run
in
a
sandbox,
and
although
I
don't
think
we
have
to
turn
context,
isolation
on
them,
it
won't
have
node.js
access.
C
There's
a
lot
of
complexities
and
angles
to
look
at
this
thing.
I
mentioned
a
couple
there
that
were
just
on
the
top
of
my
mind.
They
weren't
directly
related
to
a
question,
though,
so
this
this
file
is
kind
of
a
hacky
work
around
to
inject
stuff
into
the
window,
because
that's
where
it
will
end
up
if
we
use
context
isolation,
so
yeah.
We
can,
however,
like
try
and
find
ways
to
type
this
to
make
it
clearer
what
I've.
B
C
Options
for
everything
always
destructuring-
you
know
named
arguments
and
using
using
send
sync
when
the
electron
api
was
a
blocking
sync
call,
that's
what
that
would
do
using
send
when
it's
fire
and
forget
and
using
invoke
when
it's
a
promise.
C
So
I
I
match
the
exact
behavior
of
the
electronic
api
with
the
other
ones.
I've
tried
to
use
promises
for
all
of
them,
except
when
we
don't
care
if
they
finish
or
because
we
don't
know
like
in
the
history
of
send.
This
is
kind
of
opinionated.
So
I
took
a
sample
of
lots
of
other
preloads
from
lots
of
other
projects,
and
this
was
the
best
one.
I
could
find.
B
Gotcha
gotcha,
that's
cool
cool
and
the
expose
in
maine
world
is
from
electron.
C
B
That's
really
funny
that
reminds
me:
there's
a
there's
a
use
well,
anyway,
I'll
find
it
off
on
the
side.
There's
a
there's
a
funny,
there's
a
really
good,
like
haskell
video
on
side
effects
that
uses
like
that
makes
the
point.
This
is
not
just
this
one
video
but
like
every
change
that
you
can
make
is
a
side
effect
in
the
world.
B
So
let
me
see
if
I
can
find
it
here,
I'll
put
it
in
the
chat,
but
anyway
there's
this
haskell
streamer
that
I
watch
and
it's
a
really
funny.
It's
a
really!
I'm
not
gonna,
find
it
that's!
Okay,
all
right!
Well,
we
can
keep
going.
Then
I
think
thank
you
for
the
explanation
and
thank
you
for
responding
on
this
previously
felipe.
Do
you
guys
think
there's
anything
else
to
do
here?
We
can.
We
can
move
along.
C
We
can
move
along
for
now.
I
think
we
probably
want
to
come
back
to
this
soon
and
and
talk
about
like
what
kind
of
what
better
guidance
we
could
provide
people
about
where
to
look
and
about
what
we
should
be
doing
next.
B
B
Yeah
exactly
yeah,
we
would
go
to
exactly
yep
misc.
I
think
it's
called
misc
that.
C
B
Is
the
file
where
we?
This
is
the
file
where
we
add
stuff,
I
think,
to
the
plugin
api
or
is
it?
Is
it
like
index?
Okay,
right,
it's
index
so
like
yeah,
we
would
add
it
well
create
install!
Oh
context.
Sorry,
sorry,
sorry,
it's
plugin
context.
B
Yeah,
like
this
kind
of
thing.
We
would
add
it
here,
not
here
exactly
well
anyway,
it
doesn't
matter.
We
would
add
it
as
an
option
that
they
would
be
able
to
get
access
to
and
then
from
from
there.
It
could
also
be
on
window
yeah
like
you're
saying,
and
we
could
literally
get
it
from
window
to
put
it
into
the
plugin
api.
So
the
only
benefit
that
that
has
really
is
well.
It's
a
pretty
big
benefit
is
that
it's
documented
and
it's
typed
and
yeah.
C
We
could
have
it
there
yeah.
We
probably
we
probably
want
to
take
a
couple
cues
from
vs
code
and
hyper.
They
they're
the
the
two
other
kind
of
maturish
plug-in
systems
that
perhaps.
B
B
Great
well
always
good
to
be
in
the
open
source,
and
hopefully
we
can
help
someone
after
us
all
right.
Well
great.
I
think
that
does
it
for
that,
it's
still
open,
but
anyway
did
you
guys
have
any
things
that
you
knew
of
that
we
should
look
at
pronto
or
should
we
do
the
do
the
thing
we
do.
B
Yeah,
nothing
happened
on
it
in
the
last
week.
I
think
we
found,
I
think
the
this
guy
was
saying
he
was
gonna.
Look
at
the
stream.
This
is
a
week
ago
and
and
take
a
look
at
some
work.
We
gave
him
some
feedback
of
some
things
that
you
know
that
didn't
work
and
yeah.
I
think
he's
gonna
look
into
it,
so
this
one
can
pause
for
just
a
moment,
but
we
should
come
back
to
it
sometime.
B
Maybe
we
can
do
this
one
today.
This
has
not
been
responded
to
and
nobody
said
anything.
What
do
you
guys
think.
B
No
objections,
yeah.
B
I
mean
I
guess
I
can
search
it
like
that
remote
fix.
I
don't
really
use
this
filter
very
much.
I
probably
should
because
look
how
easy
that
was
all
right.
This
was
merged.
First
problem,
let's,
let's
go
oh
boy!
B
A
A
B
What
do
you
mean
I
merged?
It
was
there's
a
merge
commit
instead
of
a
rebase,
so
this
is
the
change.
So
is
this
a
this
is
a
pretty
small
change.
Maybe
we
can
get
through
this
here
today.
Let
me
try
to
rebase
it
independent
of
the
merge,
commit
and
see
if
that
will
just
solve
our
problems.
So
we
want
to
rebase
off
of
here.
B
A
B
So
delete
the
file,
but
then
there's
nothing
to
change.
So,
let's
just
for
lack
of
better
way
to
do
this.
It's
like
10
lines
of
code,
I'm
just
gonna
grab
it.
So
I'm
on
his.
Let's
go
back
to
his
branch
here.
B
B
B
So
we
have
it
here
and,
and
then
there
works,
this
is
like
195
or
so.
Okay,
195.
B
B
Yep,
that's
the
same
place.
Okay,
so
let's
read:
it
always
generate
base
environment
id
ensuring
not
to
create
another
one.
So
what
is
the?
What
is
the
fix
here?
Let
me
finish:
okay,
okay.
Okay,
let
me
finish
this
you're,
the
culprit
felipe
okay,
so
such
as
life
such
as
so
I'm
gonna,
grab
his
email
and
like
get
get
information
publicly
available,
don't
worry
and
we
are
going
to
get
okay,
so
we
can
commit
what
was
the
commit
message
he
used
always
generate
base
environment
id
when
importing
get.
B
B
World,
what
is
I
don't
have
this
in
my
history,
it's
like
git,
commit
and
then
author,
something
like
that.
B
Command
author
and
then
yep
no
item,
okay,
so
there's
two
things
and
then
author
a-u-t-h-o-r,
then
we
put
his
thing
in
there
and
then
no
edit
great.
So
it
doesn't
really
matter
by
the
way
just
for
anyone
who's
interested.
If
you
merge
a
pr
all
that
matters
for
attribution
is
the
commit
of
the
merge.
So
if
I
had
not
done
the
thing
that
I
just
did,
it
would
still
attribute
the
pr
to
this
person,
but
people
don't
always
know
that.
B
I
think
actually,
this
guy
does
because
he's
contributed
a
couple
times
before
quite
a
few
times
before,
but
I
try
to
just
always
do
that
step
because
it's
more
friendly
and
it's
like
less
because,
like
people
have
said
before
to
me
on
insomnia,
like
hey
what
the
hell
you
took
my
commits
away-
and
you
know
you
committed
my
stuff
and
it's
like.
Don't
don't
worry,
but
this
is
nicer,
so
I'm
gonna
make
sure
the
upstream
is
set
to
his
yeah.
It's
it
is
set
to
his
thing.
B
B
It's
like
missing
a
noun
here
will
be
possible
to
import
an
existing
into
an
existing
collection.
Modifying
the
export
file
without
losing
the
exported
environments
closes
this.
Let's
see
this
great
to
have
a
test
that
we
write
for
this,
so
we
broke
environments.
Oh,
I
didn't
know
that
I
respond
here.
Okay,
apparently
I
didn't
know
that
tried
to
reproduce
this,
but
was
unable
okay.
Well,
at
least
I
did
that
thanks
for
having
a
look
debug
it
a
lot.
It
was
nothing
with
the
normal
import
exports.
My
initial
assumption
was
wrong.
B
I
have
a
plug-in
which
is
exporting
the
project.
Saving
this
file,
creating
a
new
request
collection,
taking
that
workspace
id
of
the
request
collection,
replacing
the
old
workspace
id
in
the
exported
file
with
the
new
one
and
importing
leads
to
the
fact
that
the
environment,
the
environments
are
not
shown
anymore.
Only
on
this.
Only
in
the
switch
boy
there's
a
lot
to
unpack
there.
This
is
the
same
problem
with
older
insomnia
versions.
I
don't
understand
why
it's
only
happening
here.
B
He
did
a
screen
recording
oh
wow,
up
under
responded,
so
this
must
have
been
a
while
ago.
He
doesn't
have
access
to
view
the
recording.
B
So
what
was
the
determination
here
and
then
philippe
jumped
in
howard
should
approach.
Fixing
this
one
hand
supporting
manual
changes
to
the
exporter
file
is,
is
edge
casing,
on
the
other
hand,
replacing
a
set
of
ids
in
a
controlled
way,
as
in
these
reproductions
shouldn't
cause
this
unexpected
behavior,
oh
boy,
this
looks
like
this
is
gonna
need,
like
I'm,
gonna
need
to
start
drinking
coffee
started
debugging
this
using
the
example
file,
provided.
B
This
is
what
I
find
doing
this
trick
to
export.
The
file
ends
up
creating
two
base:
environments
for
the
design,
a
designated
workspace,
so
the
two
environments
imported
by
the
procedure.
Our
procedure
are
shadowed
by
the
one
generated
when
creating
the
workspace
through
the
ui.
Let
me
know
if
I
can
work
on
this
okay,
and
that
was
jan,
that
was
in
january.
Okay.
A
C
Can
I
try
to
clarify,
because
it's
a
lot,
like
you
say,
there's
a
lot
to
unpack.
I
try
to
clarify
what
the
problem
is
and
see.
If
it
sounds
right
well,
at
high
level,
it
seems
related
to
the
way
that
we
import,
where
we
merge
things
like.
If
you
export
a
thing
and
then
try
to
re-import
it,
it
will
try
to.
It
will
be
merged
into
the
thing
you
exported
from
right.
C
So
I'm
understanding
it
correctly
and
it
seems
like
what's
going
wrong-
is
that
if
you
do
change
one
of
those
ids,
the
the
parent-child
relationship
between
the
workspace
and
the
environment
gets
lost.
B
So
how
would
we
reproduce
without
looking
at
the
stuff
that
we
see
in
the
thing
so
far?
How
would
we
reproduce
this,
then
we
would
create
a
workspace
with
with
a
base
environment.
B
Okay,
let's
try
get
I'm
sorry,
not
good
npm
run
app
start.
Is
that
what
it
is?
B
B
Okay,
there's
like
a
linux
problem
I
have
to
solve.
I
hope
this
doesn't
become
a
problem
all
day
today,
the
stream
it's
been
touch
and
go
mostly
go,
but
some
touches,
so
I'm
gonna
do
inspect
element
just
to
get
this
guy
open.
I
wish
we
had
the
f12.
I
never
remember
what,
because
in
the
browser,
I
just
do
f12
to
open
the
def
tools,
but
for
us
it's
ctrl
alt
I,
which
is
also
working
in
the
browser
but
anywho.
B
B
B
C
B
B
And
then
yeah
we
can
just
go
to
there
and
then
get
in
it
and
then
paste
it
and
then
get
commit
or
is
it
like?
I
have
to
do
a
or
something
to
stage
get
stage
there.
B
Data
import
from
file
and
it's
going
to
open
my
thing
here.
We
go:
okay,
see
one
workspace:
one
environment,
cookie,
jar,
api,
spec,
request,
unit,
test,
suite,
okay,
not
very
helpful,
because
a
lot
of
those
were
empty,
but
whatever
so
now,
I'm
gonna
go
grab
again.
I'm
gonna
grab
the
insomnia
app
dr
oh,
this
is
not
gonna
work.
The
way
I
thought
it
would,
but
anyway,
I'm
gonna
delete
that
I'm
gonna
put
this
one
here
and
I'm
gonna
go
get
stage
everything
and
test
two
yeah
and
I
wanna
see
the
diff
now.
B
So
we
can
close
insomnia
get
cracking.
Can
I
do
get
cracking
from
here?
B
B
It
didn't
do
what
I
expected,
but
that's
fine,
open.
Okay,
let
me
pull
this
over
here.
B
Dot,
config
insomnia
app
fun,
okay,
so
here
we
are
and
here's
the
diff
ready.
So
this
was
added.
Api
spec
was
added
with
the
same
stuff,
but
it
has
a
different
modified
time.
I
bet
you,
no,
it
doesn't
so
duplicated
with
the
same
ids,
very
interesting,
cookie,
jar,
same
environment,
so
there's
another
environment
added
the
same
exact
stuff.
B
This
is
any
db
nonsense
that
we're
sifting
through
here.
Let
me
make
this
in
line
view,
since
we're
just.
C
I
think
this
is
what
that
that
fixed
line
is
with
the
nadb.
You
know
it
has
this
way
of
fixing
errors,
this
method,
maybe
that
this
is
what
it
does.
It
removes
shapes
yeah.
B
It
deduplicates,
so
I
bet
you:
okay,
okay,
you
know
how
we
can
test
that
we
can
test
that
by
going
to
grab
it
now.
Since
I
closed
the
app
do
this
and
I
post
paste
it
back
we're
going
to
see
a
working
set
that
is
going
to
have
yeah
it
removed
now
we're
getting
real
deep,
but
that's
okay.
It
has
a
single
singleton,
cookie,
singleton,
lock
singleton
socket,
so
it
removed
those
locks
for
its
internal
processes.
B
Okay,
but
the
thing
that
we
really
care
about
is
the
environment
right.
So
in
the
environment
we
notice.
The
idea
is
the
same,
like
everything
is
the
same:
let's
compare
that,
but
it's
not
the
same
as
this
base,
one
which
also
points
at
that
same.
Let's
see
how
all
three
of
these
point
at
the
same
workspace.
B
So
that's
what's
kind
of
interesting.
The
thing
that's
different
is
the
data
property
order,
that's
kind
of
weird,
so
let's
start
insomnia
again
and
see
and
see
what
we
find
appstart
great.
B
C
B
B
Once
it
starts,
I'm
going
to
grab
this
insomnia
app,
folder
and
and
put
it
back
in
and
see
if
there's
any
diff
for
the
database.
I
wish
we
had
a
smarter
way
to
do
this,
but
this
is
the
way
the
way
I've
done
it
before
in
a
pinch-
and
this
is
the
way
I'm
doing
it
now
so
get
cracking
dot
should
have
all
my
stuff
there,
but
we
probably
could
have
done
better
to
so.
We
can
get
rid
of
this
cache.
B
B
C
C
B
So
that's
why,
like,
for
example,
I've
brought
up
this
point
before
like
if
I
type
a
here
like,
let's
go
look
we
can
just
see
it
live
because
that's
how
this
works.
Let's,
let's
look
at
api
spec,
so
I'm
gonna
open
this
and
I'm
gonna
open
it
over
here.
So
I'm
gonna
type.
Let's
let's
put
this
on
the
side
here
or
actually
I'm
in
linux,
so
I
can
have
it
forced
to
be
keep
above
others,
okay,
great.
B
So
I
can
just
say
b
and
we
want
to
enable
auto
reload,
so
b,
c
d,
e,
f,
so
notice
what's
happening
here
that
in
every
case,
look
at
this
contents
line.
Okay,
a
a
b
abc
abcd,
abcde
abcdef.
B
If
I
close
insomnia
and
then
I
I
open
it
again,
if
it's
probably
not
going
to
work
this
time.
But
if
I
open
it
again.
B
And
this
is
the
way
any
db
works
internally.
It's
nothing
to
do
like
we,
it's
not
behavior
that
we
kind
of
set
out
to
to
do
no.
C
But
we
could
work
around
it
by
checking
for
these
ids
in
the
collection
before
couldn't
we?
No
no
is
it
just.
B
These
are
right
for
another
day,
these
are
rights.
What
do
you
mean
how
we
do
rights.
C
Rights
is
in,
like
upsets
yeah.
C
B
Well,
there's
a
flush
that
happens
every
30
minutes.
So
if
we
go
to
database
flush,
let's
look,
I
can
show
you
real,
quick.
The
word
every
here
minutes
database
dot,
flush
changes,
so
there
is
code
somewhere
in
here
where
every
once
in
a
while,
every
few
minutes,
flush
changes,
millies
buffer
changes,
millies,
okay,
buffer
changes
indefinitely.
C
B
Right
yeah
buffer
changes
yeah,
but
there
is,
there
is
code
that
will
I
don't.
I
forget
where
I
don't
know.
C
B
C
B
I
would
expect
this
code
to
be
inside
of
repair
based
environments.
Is
it
no
it's
not
even
in
the
same
remotely
same
place
so
because
this
has
to
do
with
imports.
Let's
read
this
code
now
that
we've
looked
around
so
if
it's
a
if
it's
a
if
it's
an
environment
and
the
parent
id
is,
is,
though,
is
a
workspace?
B
Okay,
so
workspace
id
key.
So
where
does
where
does
that
come
from
workspace
id
key.
B
B
B
B
B
Otherwise,
so
we
know
that
it's
an
environment
so
either
the
environment
is
going
to
be
this
base
one
so
because
that
we're
gonna,
I
guess,
come
through
and
regenerate
later.
That
would
be
my
understanding
because
we're
probably
collecting
these
yeah
generate
ids
yeah,
so
we're
going
to
be
collecting
those
later
or.
B
C
I
don't
understand
this
comment
always
generate
an
id
ensuring
not
to
create
another
one
but
we're
generating
an
id.
Why
would
we.
B
So
so
a
base
environment
does
this
help
so
always
generate
base
environment
id
ensuring
not
to
create
another
one.
So
what
it
was
doing
before
was
probably
just
switching.
It
was
probably
creating
this
id
yeah.
I
still
don't
boy.
This
is
so
deep
into
the
weeds
that
it's
very
difficult
to.
Let's
look
at
the
one
thing
I
think
we
could
do.
That
would
be
helpful.
Let
me
grab
it.
Let's
look
at
the
environment
at
the
spec
that
was
created,
so
let
me
pull
it
here
and
then
format.
B
Okay,
so
we
have
a
here's,
here's
the
structure
right.
We
can
forget
about
the
cookie
jar
and
the
api
spec,
I'm
just
going
to
delete
these.
We
don't
care
about
the
unit
test
suite
either
okay,
so
we
have
a
request.
B
C
B
Another,
what
let
me
write
this
so
that
I'm
not
crazy,
because
I
want
to
just
we
have
a
workspace
wait
workspace.
It
has
a
request
and
it
has
an
environment.
B
B
B
You
know
something
like
that:
we're
gonna
fix
this
they're
not
to
stay
like
this,
but
it's
like
if
the
workspace,
if
the
parent
id
so
we
use
these
these
constants
when
we
haven't
created
an
id
yet
so
we're
saying
if
the
parent
id
of
the
works
of
the
of
the
environment
is
a
workspace
that
doesn't
exist
yet
or
why
don't
we
do?
Why?
Don't
we
do
this
instead
of
coupling
these,
because
this
is
getting
if.
B
So
we
let's
note
these,
so
it's
like
set
the
environment.
B
B
Id
already
exists
and
matches
don't
set
the
already.
B
B
C
B
Yeah,
okay!
Well,
we
we
tried,
I
mean
I'll
I'll,
take
note.
Well,
I
don't
know
if
it's
going
to
record
on
youtube
or
not,
we
might
not
be
able
to
post
to
what
we're
doing
right
now,
but
it
will
on
twitch
for
a
couple
days
anyway.
On
twitch
will
work,
but
yeah
things
be
complicated
is
were.
Is
the
answer
to
the
question.
B
C
B
Yeah,
and
what
scares
me
is
that
we
have
all
this
logic
that
is
so
deeply
deeply
dependent
on
how
any
db
works.
However,
nadb
doesn't
have
any
idea
about
the
relationships
between
our
objects,
like
this
thing
with
parent
id
is
completely
manufactured
by
us,
but
you
know
what
that
is.
That's,
like
a
foreign
key
constraint.
I
mean
this
is
like
we're:
creating
a
hierarchy
of
objects,
but
it's
on,
like
we
wrote
a
database
on
top
of
a
database
like
we
wrote
our
own
syncing
and
like
hierarchy
logic
on
top
of
any
db
normalization.
B
Right,
so,
in
order
to
do
that,
it
takes
quite
a
lot
of
you
know
that
diagram
that
I
draw
I
drew
down
here
or
whatever
is
very
synthetic.
It
doesn't
really
exist
and
there's
nothing
in
the
data
in
the
data
itself
that
enforces
that
there's
no,
you
can
put
anything
anywhere.
You
want
and
that's
why
this
is
so
scary
to
work
on,
because,
like
look
what
we
hit
here,
it's
like
there
is
a
situation
somewhere
in
this
code
where
an
environment
is
gonna,
have
a
parent
that
is
an
environment.
B
C
B
I
don't
know,
maybe
we
don't
really
have
time
to
really
got
three
minutes.
We
don't
have
time.
Maybe
we
can
look
at
like
one
little
thing
philippe,
do
you
have
any
sleep
around
stuff?
Oh
he.
B
All
right,
I
think,
maybe
then
it's
good.
We
cut
it
at
that,
thanks
for
joining
everyone,
sorry
that
we
had
trouble
with
youtube,
but
that's
the
first
time
we've
ever
had.
I
was
boasting
about
how
many
weeks
we've
been
doing
this
and
then
didn't
work,
but
thanks
for
coming
everyone
and
we'll
see
you
next
week,
bye.