<StateChart @src={{chart}} @initial={{if (eq type 'oidc') 'provider' 'secret'}} as |State Guard Action dispatch state|>
  <Guard @name="isSecret" @cond={{action 'isSecret'}} />
  {{!-- This `or` can be completely removed post 1.10 as 1.10 has optional params with default values --}}
  {{#let (concat '/' (or nspace '') '/' dc) as |path|}}
    <State @matches="secret">
      <DataSource
        @src={{concat path '/token/self/' value}}
        @onchange={{action 'change'}}
        @onerror={{action onerror}}
      />
    </State>
    <State @matches="provider">
      <DataSource
        @src={{concat path '/oidc/provider/' value}}
        @onchange={{queue (action (mut provider) value="data") (action dispatch "SUCCESS")}}
        @onerror={{action onerror}}
      />
    </State>
    <State @matches="jwt">
      <JwtSource
        @src={{provider.AuthURL}}
        @onchange={{queue (action (mut jwt) value="data") (action dispatch "SUCCESS")}}
        @onerror={{action onerror}}
      />
    </State>
    <State @matches="token">
      <DataSource
        @src={{uri
          (concat path '/oidc/authorize/${provider}/${code}/${state}')
            (hash
              provider=provider.Name
              code=jwt.authorizationCode
              state=(or jwt.authorizationState '')
            )
        }}
        @onchange={{action 'change'}}
        @onerror={{action onerror}}
      />
    </State>
  {{/let}}
</StateChart>