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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
job | browser-provider.job-state | yes | ||
created | boolean | yes | True 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 }] }