mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-04 05:37:10 +00:00
Ship OpenFleet contracts and the OpenWall draft proposal (#177)
* feat: add OpenFleet membership and CoinPay rental contracts * Propose OpenWall broadcasts and direct messaging contracts * release: prepare OpenFleet and OpenWall public contracts * fix: use tested npm for compatible CLI installs
This commit is contained in:
parent
a333726a1e
commit
45c7629953
35 changed files with 2021 additions and 12 deletions
|
|
@ -3,7 +3,7 @@
|
|||
Canonical JSON Schemas (draft 2020-12) for the LogicSRC open coordination
|
||||
standards, maintained by Profullstack, Inc.
|
||||
|
||||
Two schema families ship from this package:
|
||||
Schema families include:
|
||||
|
||||
- **LogicSRC core** — `logicsrc-*.schema.json`: tasks, agents, runs, events,
|
||||
plugins, connected accounts, email messages, social posts.
|
||||
|
|
@ -11,6 +11,13 @@ Two schema families ship from this package:
|
|||
contract for CLI tools and AI agents (ads, placements, requests, responses,
|
||||
impressions, clicks, campaigns). See `docs/agentad.md` in the repo;
|
||||
[cl1s.tech](https://github.com/profullstack/cl1s.tech) is the reference network.
|
||||
- **OpenWall draft** — `openwall-message` and `openwall-receipt` exports define
|
||||
sender-side audience jobs and private delivery events. Fixtures are in
|
||||
`fixtures/openwall`. See `docs/openwall.md` for consent, routing, and runtime
|
||||
requirements beyond structural validation; no OpenWall delivery runtime ships.
|
||||
- **OpenFleet draft** — the `openfleet` export describes fleets of OpenAgent
|
||||
profiles and OpenSwarm file-key references, with metadata and CoinPay rental
|
||||
offers. `@logicsrc/validators` also checks membership and rental references.
|
||||
|
||||
## Install
|
||||
|
||||
|
|
|
|||
86
packages/schemas/fixtures/openfleet/mixed.json
Normal file
86
packages/schemas/fixtures/openfleet/mixed.json
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
{
|
||||
"type": "logicsrc.openfleet",
|
||||
"version": "0.1",
|
||||
"id": "https://example.com/fleets/research",
|
||||
"name": "Research and distribution fleet",
|
||||
"owner_did": "operator.coinpay",
|
||||
"description": "An analyst agent and an encrypted reference-data swarm, offered together or separately.",
|
||||
"updated_at": "2026-09-13T12:00:00Z",
|
||||
"availability": "available",
|
||||
"tags": [
|
||||
"research",
|
||||
"distribution"
|
||||
],
|
||||
"capabilities": [
|
||||
"analysis",
|
||||
"paid-seeding"
|
||||
],
|
||||
"metadata": {
|
||||
"region": "eu-west",
|
||||
"support_url": "https://example.com/support"
|
||||
},
|
||||
"members": [
|
||||
{
|
||||
"kind": "openagent",
|
||||
"id": "analyst.coinpay",
|
||||
"url": "https://example.com/agents/analyst.json",
|
||||
"name": "Analyst",
|
||||
"role": "analysis",
|
||||
"metadata": {
|
||||
"languages": [
|
||||
"en"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "openswarm",
|
||||
"id": "ed25519:0d87e09c7fea3ad6ba6c2f3e027ea47f5b245452899910948470906704c5295d",
|
||||
"url": "https://example.com/swarms/references/manifest.json",
|
||||
"name": "Reference corpus",
|
||||
"role": "reference-data"
|
||||
}
|
||||
],
|
||||
"rentals": [
|
||||
{
|
||||
"id": "fleet-hourly",
|
||||
"scope": {
|
||||
"kind": "fleet"
|
||||
},
|
||||
"rate": {
|
||||
"amount": "25.000000",
|
||||
"currency": "USD",
|
||||
"unit": "hour"
|
||||
},
|
||||
"minimum_units": 1,
|
||||
"maximum_units": 24,
|
||||
"terms_url": "https://example.com/rental-terms",
|
||||
"payment": {
|
||||
"provider": "coinpay",
|
||||
"payee_did": "operator.coinpay",
|
||||
"checkout_url": "https://example.com/rentals/research"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "analyst-task",
|
||||
"scope": {
|
||||
"kind": "members",
|
||||
"members": [
|
||||
{
|
||||
"kind": "openagent",
|
||||
"id": "analyst.coinpay"
|
||||
}
|
||||
]
|
||||
},
|
||||
"rate": {
|
||||
"amount": "5.500000",
|
||||
"currency": "USD",
|
||||
"unit": "task"
|
||||
},
|
||||
"payment": {
|
||||
"provider": "coinpay",
|
||||
"payee_did": "operator.coinpay",
|
||||
"checkout_url": "https://example.com/rentals/analyst"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
16
packages/schemas/fixtures/openwall/announcement.json
Normal file
16
packages/schemas/fixtures/openwall/announcement.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"openwall": "0.1-draft",
|
||||
"id": "urn:uuid:5bb154dd-edb3-47b7-8fc6-4cb65a19a9f8",
|
||||
"sender": "did:web:ops.example",
|
||||
"createdAt": "2026-09-13T12:00:00Z",
|
||||
"expiresAt": "2026-09-20T12:00:00Z",
|
||||
"visibility": "public",
|
||||
"topic": "releases",
|
||||
"audience": {
|
||||
"kind": "public"
|
||||
},
|
||||
"content": {
|
||||
"mediaType": "text/plain",
|
||||
"text": "Version 1.2 is available."
|
||||
}
|
||||
}
|
||||
27
packages/schemas/fixtures/openwall/broadcast.json
Normal file
27
packages/schemas/fixtures/openwall/broadcast.json
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"openwall": "0.1-draft",
|
||||
"id": "urn:uuid:94d908df-2876-48f1-bec8-c931f5c847d4",
|
||||
"sender": "did:web:ops.example",
|
||||
"createdAt": "2026-09-13T12:00:00Z",
|
||||
"expiresAt": "2026-09-13T12:10:00Z",
|
||||
"visibility": "private",
|
||||
"topic": "maintenance",
|
||||
"audience": {
|
||||
"kind": "relationships",
|
||||
"selectors": [
|
||||
{
|
||||
"source": "https://dev.example/contacts",
|
||||
"actor": "did:web:ops.example",
|
||||
"groups": [
|
||||
"users"
|
||||
],
|
||||
"scope": "https://dev.example/workspaces/main"
|
||||
}
|
||||
],
|
||||
"exclude": []
|
||||
},
|
||||
"content": {
|
||||
"mediaType": "text/plain",
|
||||
"text": "SERVER NOTICE\nMaintenance starts in 10 minutes.\nPlease save your work and pause running jobs."
|
||||
}
|
||||
}
|
||||
17
packages/schemas/fixtures/openwall/direct.json
Normal file
17
packages/schemas/fixtures/openwall/direct.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"openwall": "0.1-draft",
|
||||
"id": "urn:uuid:07b2b83e-27f6-4d59-bdfa-cdcd42548678",
|
||||
"sender": "did:web:ops.example",
|
||||
"createdAt": "2026-09-13T12:00:00Z",
|
||||
"expiresAt": "2026-09-13T12:10:00Z",
|
||||
"visibility": "private",
|
||||
"topic": "maintenance",
|
||||
"audience": {
|
||||
"kind": "direct",
|
||||
"recipient": "did:web:ada.example"
|
||||
},
|
||||
"content": {
|
||||
"mediaType": "text/plain",
|
||||
"text": "Ready when you are."
|
||||
}
|
||||
}
|
||||
13
packages/schemas/fixtures/openwall/receipt-accepted.json
Normal file
13
packages/schemas/fixtures/openwall/receipt-accepted.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"openwall": "0.1-draft",
|
||||
"id": "urn:uuid:963f9109-803f-4f0c-8506-10c70ec47ee6",
|
||||
"messageId": "urn:uuid:94d908df-2876-48f1-bec8-c931f5c847d4",
|
||||
"recipient": "did:web:ada.example",
|
||||
"sequence": 3,
|
||||
"state": "accepted",
|
||||
"at": "2026-09-13T12:00:03Z",
|
||||
"attempt": 1,
|
||||
"route": "https://chat.example",
|
||||
"providerMessageId": "provider-msg-123",
|
||||
"deliveryId": "urn:uuid:db925d64-4e1a-4e5a-83c1-e37b68aa5eef"
|
||||
}
|
||||
14
packages/schemas/fixtures/openwall/receipt-retrying.json
Normal file
14
packages/schemas/fixtures/openwall/receipt-retrying.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"openwall": "0.1-draft",
|
||||
"id": "urn:uuid:211bb615-90e1-4773-b7c0-49d59d7cd6bc",
|
||||
"messageId": "urn:uuid:94d908df-2876-48f1-bec8-c931f5c847d4",
|
||||
"recipient": "did:web:ada.example",
|
||||
"sequence": 3,
|
||||
"state": "retrying",
|
||||
"at": "2026-09-13T12:00:03Z",
|
||||
"attempt": 1,
|
||||
"route": "https://chat.example",
|
||||
"reason": "rate-limited",
|
||||
"nextAttemptAt": "2026-09-13T12:01:00Z",
|
||||
"deliveryId": "urn:uuid:db925d64-4e1a-4e5a-83c1-e37b68aa5eef"
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@logicsrc/schemas",
|
||||
"version": "0.1.0",
|
||||
"description": "LogicSRC JSON schemas for tasks, agents, runs, events, plugins, the AgentAd ad standard, the OpenOntology knowledge contracts, the OpenContext context plane, and the OpenCreds credential vault.",
|
||||
"version": "0.1.1",
|
||||
"description": "LogicSRC JSON schemas for tasks, agents, runs, events, plugins, the AgentAd ad standard, the OpenOntology knowledge contracts, the OpenContext context plane, the OpenCreds credential vault, OpenFleet membership and rental offers, and the OpenWall messaging proposal.",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"repository": {
|
||||
|
|
@ -22,6 +22,7 @@
|
|||
"ontology",
|
||||
"opencontext",
|
||||
"opencreds",
|
||||
"openfleet",
|
||||
"openontology",
|
||||
"password-manager",
|
||||
"standards",
|
||||
|
|
@ -64,6 +65,7 @@
|
|||
"./opencreds-item": "./schemas/logicsrc-opencreds-item.schema.json",
|
||||
"./opencreds-manifest": "./schemas/logicsrc-opencreds-manifest.schema.json",
|
||||
"./opencreds-vault-meta": "./schemas/logicsrc-opencreds-vault-meta.schema.json",
|
||||
"./openfleet": "./schemas/logicsrc-openfleet.schema.json",
|
||||
"./openontology-action": "./schemas/logicsrc-openontology-action.schema.json",
|
||||
"./openontology-approval": "./schemas/logicsrc-openontology-approval.schema.json",
|
||||
"./openontology-changeset": "./schemas/logicsrc-openontology-changeset.schema.json",
|
||||
|
|
@ -83,6 +85,8 @@
|
|||
"./openontology-review": "./schemas/logicsrc-openontology-review.schema.json",
|
||||
"./openontology-source": "./schemas/logicsrc-openontology-source.schema.json",
|
||||
"./openprd-prd": "./schemas/openprd-prd.schema.json",
|
||||
"./openwall-message": "./schemas/logicsrc-openwall-message.schema.json",
|
||||
"./openwall-receipt": "./schemas/logicsrc-openwall-receipt.schema.json",
|
||||
"./plugin": "./schemas/logicsrc-plugin.schema.json",
|
||||
"./pull-request": "./schemas/logicsrc-pull-request.schema.json",
|
||||
"./repo": "./schemas/logicsrc-repo.schema.json",
|
||||
|
|
|
|||
323
packages/schemas/schemas/logicsrc-openfleet.schema.json
Normal file
323
packages/schemas/schemas/logicsrc-openfleet.schema.json
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.logicsrc.com/logicsrc-openfleet.schema.json",
|
||||
"title": "OpenFleet",
|
||||
"description": "A fleet of OpenAgent profiles and/or OpenSwarm swarms with explicit CoinPay rental offers.",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"type",
|
||||
"version",
|
||||
"id",
|
||||
"name",
|
||||
"owner_did",
|
||||
"members"
|
||||
],
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "logicsrc.openfleet"
|
||||
},
|
||||
"version": {
|
||||
"const": "0.1"
|
||||
},
|
||||
"id": {
|
||||
"$ref": "#/$defs/httpsUrl"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 120
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"owner_did": {
|
||||
"$ref": "https://schemas.logicsrc.com/logicsrc-agent.schema.json#/$defs/did"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"availability": {
|
||||
"enum": [
|
||||
"available",
|
||||
"busy",
|
||||
"offline",
|
||||
"unknown"
|
||||
]
|
||||
},
|
||||
"tags": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"capabilities": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object"
|
||||
},
|
||||
"members": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"$ref": "#/$defs/member"
|
||||
}
|
||||
},
|
||||
"rentals": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/rental"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"httpsUrl": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^https://"
|
||||
},
|
||||
"memberReference": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"id"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "openagent"
|
||||
},
|
||||
"id": {
|
||||
"$ref": "https://schemas.logicsrc.com/logicsrc-agent.schema.json#/$defs/did"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"id"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "openswarm"
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"pattern": "^ed25519:[0-9a-f]{64}$"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"member": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"id",
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "openagent"
|
||||
},
|
||||
"id": {
|
||||
"$ref": "https://schemas.logicsrc.com/logicsrc-agent.schema.json#/$defs/did"
|
||||
},
|
||||
"url": {
|
||||
"$ref": "#/$defs/httpsUrl"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"id",
|
||||
"url"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "openswarm"
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"pattern": "^ed25519:[0-9a-f]{64}$"
|
||||
},
|
||||
"url": {
|
||||
"$ref": "#/$defs/httpsUrl"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"scope": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "fleet"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"kind",
|
||||
"members"
|
||||
],
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "members"
|
||||
},
|
||||
"members": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"$ref": "#/$defs/memberReference"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"rental": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"scope",
|
||||
"rate",
|
||||
"payment"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/scope"
|
||||
},
|
||||
"rate": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"amount",
|
||||
"currency",
|
||||
"unit"
|
||||
],
|
||||
"properties": {
|
||||
"amount": {
|
||||
"type": "string",
|
||||
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
||||
"description": "Non-negative USD decimal string with exactly six fractional digits; never a JSON number."
|
||||
},
|
||||
"currency": {
|
||||
"const": "USD"
|
||||
},
|
||||
"unit": {
|
||||
"enum": [
|
||||
"hour",
|
||||
"day",
|
||||
"month",
|
||||
"task"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"minimum_units": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 9007199254740991
|
||||
},
|
||||
"maximum_units": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 9007199254740991
|
||||
},
|
||||
"valid_from": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"valid_until": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"terms_url": {
|
||||
"$ref": "#/$defs/httpsUrl"
|
||||
},
|
||||
"payment": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"provider",
|
||||
"payee_did",
|
||||
"checkout_url"
|
||||
],
|
||||
"properties": {
|
||||
"provider": {
|
||||
"const": "coinpay"
|
||||
},
|
||||
"payee_did": {
|
||||
"$ref": "https://schemas.logicsrc.com/logicsrc-agent.schema.json#/$defs/did"
|
||||
},
|
||||
"checkout_url": {
|
||||
"$ref": "#/$defs/httpsUrl"
|
||||
}
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
246
packages/schemas/schemas/logicsrc-openwall-message.schema.json
Normal file
246
packages/schemas/schemas/logicsrc-openwall-message.schema.json
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.logicsrc.com/logicsrc-openwall-message.schema.json",
|
||||
"title": "OpenWall Message (0.1 draft)",
|
||||
"description": "Private sender-side job document. Structural validation does not authorize delivery or enforce the semantic rules in docs/openwall.md.",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"openwall",
|
||||
"id",
|
||||
"sender",
|
||||
"createdAt",
|
||||
"expiresAt",
|
||||
"visibility",
|
||||
"topic",
|
||||
"audience",
|
||||
"content"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"openwall": {
|
||||
"const": "0.1-draft"
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
||||
},
|
||||
"sender": {
|
||||
"$ref": "#/$defs/identity"
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"notBefore": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"expiresAt": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"visibility": {
|
||||
"enum": [
|
||||
"private",
|
||||
"public"
|
||||
]
|
||||
},
|
||||
"topic": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
||||
},
|
||||
"audience": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/$defs/relationships"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/direct"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/public"
|
||||
}
|
||||
]
|
||||
},
|
||||
"content": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"mediaType",
|
||||
"text"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"mediaType": {
|
||||
"const": "text/plain"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 4000
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"visibility": {
|
||||
"const": "public"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"audience": {
|
||||
"$ref": "#/$defs/public"
|
||||
}
|
||||
}
|
||||
},
|
||||
"else": {
|
||||
"properties": {
|
||||
"audience": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "#/$defs/relationships"
|
||||
},
|
||||
{
|
||||
"$ref": "#/$defs/direct"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"$defs": {
|
||||
"identity": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^(did:|https://)",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"selector": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"source",
|
||||
"actor",
|
||||
"groups"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"source": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^https://",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"actor": {
|
||||
"$ref": "#/$defs/identity"
|
||||
},
|
||||
"groups": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 4,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"enum": [
|
||||
"connections",
|
||||
"followers",
|
||||
"following",
|
||||
"users"
|
||||
]
|
||||
}
|
||||
},
|
||||
"scope": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^https://",
|
||||
"maxLength": 2048
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"groups": {
|
||||
"contains": {
|
||||
"const": "users"
|
||||
},
|
||||
"type": "array"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"scope"
|
||||
],
|
||||
"properties": {
|
||||
"scope": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"relationships": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"kind",
|
||||
"selectors"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "relationships"
|
||||
},
|
||||
"selectors": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 32,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$ref": "#/$defs/selector"
|
||||
}
|
||||
},
|
||||
"exclude": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"$ref": "#/$defs/identity"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"direct": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"kind",
|
||||
"recipient"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "direct"
|
||||
},
|
||||
"recipient": {
|
||||
"$ref": "#/$defs/identity"
|
||||
}
|
||||
}
|
||||
},
|
||||
"public": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"kind"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "public"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
229
packages/schemas/schemas/logicsrc-openwall-receipt.schema.json
Normal file
229
packages/schemas/schemas/logicsrc-openwall-receipt.schema.json
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.logicsrc.com/logicsrc-openwall-receipt.schema.json",
|
||||
"title": "OpenWall Receipt (0.1 draft)",
|
||||
"description": "Private coordinator event. Authenticity, event ordering and valid state transitions require runtime checks.",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"openwall",
|
||||
"id",
|
||||
"messageId",
|
||||
"deliveryId",
|
||||
"recipient",
|
||||
"sequence",
|
||||
"state",
|
||||
"at",
|
||||
"attempt"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"openwall": {
|
||||
"const": "0.1-draft"
|
||||
},
|
||||
"id": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
||||
},
|
||||
"messageId": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
||||
},
|
||||
"recipient": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^(did:|https://)",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"sequence": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"state": {
|
||||
"enum": [
|
||||
"queued",
|
||||
"sending",
|
||||
"retrying",
|
||||
"accepted",
|
||||
"delivered",
|
||||
"read",
|
||||
"unknown",
|
||||
"failed",
|
||||
"expired",
|
||||
"cancelled"
|
||||
]
|
||||
},
|
||||
"at": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"attempt": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 8
|
||||
},
|
||||
"route": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^https://",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"providerMessageId": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 2048
|
||||
},
|
||||
"reason": {
|
||||
"enum": [
|
||||
"not-permitted",
|
||||
"identity-unverified",
|
||||
"unsupported",
|
||||
"rate-limited",
|
||||
"provider-failure",
|
||||
"acceptance-unknown",
|
||||
"retry-exhausted",
|
||||
"deadline-passed",
|
||||
"sender-cancelled"
|
||||
]
|
||||
},
|
||||
"nextAttemptAt": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"deliveryId": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"const": "retrying"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"nextAttemptAt",
|
||||
"reason"
|
||||
],
|
||||
"properties": {
|
||||
"nextAttemptAt": {},
|
||||
"reason": {}
|
||||
}
|
||||
},
|
||||
"else": {
|
||||
"not": {
|
||||
"required": [
|
||||
"nextAttemptAt"
|
||||
],
|
||||
"properties": {
|
||||
"nextAttemptAt": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"enum": [
|
||||
"failed",
|
||||
"unknown",
|
||||
"expired",
|
||||
"cancelled"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"reason"
|
||||
],
|
||||
"properties": {
|
||||
"reason": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"enum": [
|
||||
"sending",
|
||||
"retrying",
|
||||
"accepted",
|
||||
"delivered",
|
||||
"read",
|
||||
"unknown"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"route"
|
||||
],
|
||||
"properties": {
|
||||
"attempt": {
|
||||
"minimum": 1,
|
||||
"type": "integer"
|
||||
},
|
||||
"route": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"const": "unknown"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"reason": {
|
||||
"const": "acceptance-unknown"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"const": "expired"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"reason": {
|
||||
"const": "deadline-passed"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"state": {
|
||||
"const": "cancelled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"reason": {
|
||||
"const": "sender-cancelled"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue