@codecademy/workshop-client

Client for workshop backend

Usage no npm install needed!

<script type="module">
  import codecademyWorkshopClient from 'https://cdn.skypack.dev/@codecademy/workshop-client';
</script>

README

Workshop JavaScript Client Library

The Workshop Client library is installed in Codecademy web clients and provides access from those clients to code execution services. Workshop manages a persistent websocket connection allowing clients to sync user code, execute that code in a variety of server environments, run terminal commands, and perform other code management and execution actions.

Testing changes locally

  1. Check out both this repo and the Codecademy repo
  2. Run yarn link in the workshop-client directory
  3. In the Codecademy repo, run yarn link @codecademy/workshop-client
  4. Run (or re-run) yarn start in the Codecademy repo
  5. Verify that you can connect to the LE in your local branch

Starting a session

To start a workshop session, create a client instance and connect to workshop.

import WorkshopSession from '@codecademy/workshop-client';

let session = new WorkshopSession({
  protocol: 'https',
  host: 'workshop-04.codecademy.com', // for PropellerV2
  apiBase: 'effective-lamp.cc-propeller.cloud', // for ContainerAPI
  userId: 'some-user-id',
  workspaceSlug: 'my-workspace',
  encryptedKey: 'encrypted-key',
});

session
  .initialize()
  .then(() => {
    // Ready to use
  })
  .catch(error => {
    // Something went wrong
  });

Calling services

services.workspace

upload

api/v1/workspace/upload/

session.services.workspace.upload(this.state.workspace)
  .then(() => { ... })
  .catch((error) => { ... })

download

api/v1/workspace/download/

session.services.workspace.download()
  .then((workspace) => { ... })
  .catch((error) => { ... })

services.eval

run

api/v1/eval/run/

session.services.eval.run('src/script.rb')
  .then((result) => {
    // result has stdout, stderr, and exitStatus props
  })
  .catch((error) => { ... })

Publishing the package

This package is automatically published when the version number changes

  • merge your PR into main
  • create a new PR that updates the version of the package in package.json. Base the version bump on all of the changes that will be added in this version.
  • merge the version PR into main
  • check the actions to see when the package is published