BrowserProviderJobCreateResult browser-provider.job-create-result@1

Generated at from openvibe-contracts v0.177.0 and openvibe-sdk v0.44.0.

Version
1.0.0
Owner
run
Visibility
internal
Status
planned
Compatibility
backward
Decision
ADR-034
Schema
https://openvibe.network/contracts/browser-provider/job-create-result.v1.json

browser-provider.job-create-result@1 (PLANNED; plan T14 R4a, ADR-034): an external managed-browser provider's answer to OpenVibe.Run's job POST (browser-provider.job-create-request@1): 201 { job, created: true } when it accepted a new job, 200 { job, created: false } for an idempotent repeat of an id it already holds (the first job's state, nothing started twice). JOB is browser-provider.job-state@1 and Run validates it before adopting any of it. A refused POST answers a problem instead (4xx; 5xx is retried by Run on its next tick), never this contract. For the later calls, GET <provider>/jobs/:id answers browser-provider.job-state@1 and POST <provider>/jobs/:id/cancel answers it too; a 404 on either means the provider does not know the job.

Fields

FieldTypeRequiredDescriptionConstraints
jobbrowser-provider.job-stateyes
createdbooleanyesTrue when this POST created the job (201); false for an idempotent repeat (200).

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: created-queued
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "queued",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null
  },
  "created": true
}
Valid: created-succeeded
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "succeeded",
    "started_ms": 1790935200250,
    "finished_ms": 1790935202600,
    "wall_ms": 2350,
    "exit_reason": "exited",
    "exit_code": 0,
    "result": {
      "title": "Example Domain"
    },
    "stdout": {
      "text": "loaded\ndone\n",
      "first_seq": 1,
      "last_seq": 2,
      "truncated": false
    }
  },
  "created": false
}
Valid: repeat-running
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "running",
    "started_ms": 1790935200250,
    "finished_ms": null,
    "wall_ms": 1200,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": {
      "text": "loaded\n",
      "first_seq": 1,
      "last_seq": 1,
      "truncated": false
    }
  },
  "created": false
}
Rejected: created-string
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "queued",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null
  },
  "created": "yes"
}
Rejected: extra-top-level
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "queued",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null
  },
  "created": true,
  "sent": true
}
Rejected: job-extra-field
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "queued",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null,
    "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ"
  },
  "created": true
}
Rejected: missing-created
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "queued",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null
  }
}
Rejected: unknown-state
{
  "job": {
    "id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
    "state": "placed",
    "started_ms": null,
    "finished_ms": null,
    "wall_ms": 0,
    "exit_reason": null,
    "exit_code": null,
    "result": null,
    "stdout": null
  },
  "created": true
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('browser-provider.job-create-result@1', value);   // { valid, errors: [{ path, message }] }