@stellar-agent-services/protocol 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +14 -2
- package/dist/canonical-json.d.ts +18 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +86 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/errors.d.ts +85 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +46 -0
- package/dist/errors.js.map +1 -0
- package/dist/headers.d.ts +15 -0
- package/dist/headers.d.ts.map +1 -0
- package/dist/headers.js +29 -0
- package/dist/headers.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs.d.ts +62 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +66 -0
- package/dist/jobs.js.map +1 -0
- package/dist/manifest.d.ts +95 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +144 -0
- package/dist/manifest.js.map +1 -0
- package/dist/networks.d.ts +19 -0
- package/dist/networks.d.ts.map +1 -0
- package/dist/networks.js +33 -0
- package/dist/networks.js.map +1 -0
- package/dist/receipts.d.ts +112 -0
- package/dist/receipts.d.ts.map +1 -0
- package/dist/receipts.js +35 -0
- package/dist/receipts.js.map +1 -0
- package/dist/standard.d.ts +25 -0
- package/dist/standard.d.ts.map +1 -0
- package/dist/standard.js +29 -0
- package/dist/standard.js.map +1 -0
- package/dist/strkey.d.ts +7 -0
- package/dist/strkey.d.ts.map +1 -0
- package/dist/strkey.js +56 -0
- package/dist/strkey.js.map +1 -0
- package/dist/validation-request.d.ts +32 -0
- package/dist/validation-request.d.ts.map +1 -0
- package/dist/validation-request.js +29 -0
- package/dist/validation-request.js.map +1 -0
- package/package.json +37 -4
- package/schemas/manifest.schema.json +272 -0
- package/schemas/validation-request.schema.json +43 -0
- package/schemas/verification-receipt.schema.json +149 -0
- package/test-vectors/README.md +45 -0
- package/test-vectors/binding-hash.json +64 -0
- package/test-vectors/canonical-json.json +94 -0
- package/test-vectors/challenges.json +245 -0
- package/test-vectors/headers.json +37 -0
- package/test-vectors/job-states.json +39 -0
- package/test-vectors/manifests.json +1322 -0
- package/test-vectors/problems.json +15 -0
- package/test-vectors/validation-requests.json +98 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Error codes from provider-standard.md §6. `problems` maps each HTTP error code to its status and whether the response carries Retry-After. `jobFailures` lists the codes a failed job's `error.code` may take.",
|
|
3
|
+
"problems": {
|
|
4
|
+
"invalid_request": { "status": 400, "retryAfter": false },
|
|
5
|
+
"invalid_input": { "status": 400, "retryAfter": false },
|
|
6
|
+
"service_not_found": { "status": 404, "retryAfter": false },
|
|
7
|
+
"job_not_found": { "status": 404, "retryAfter": false },
|
|
8
|
+
"request_in_progress": { "status": 409, "retryAfter": true },
|
|
9
|
+
"payload_too_large": { "status": 413, "retryAfter": false },
|
|
10
|
+
"idempotency_key_reused": { "status": 422, "retryAfter": false },
|
|
11
|
+
"rate_limited": { "status": 429, "retryAfter": true },
|
|
12
|
+
"unavailable": { "status": 503, "retryAfter": true }
|
|
13
|
+
},
|
|
14
|
+
"jobFailures": ["service_failed", "output_invalid", "timeout", "payment_failed"]
|
|
15
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Validation request documents (docs/verification.md). requestHash is the lowercase hex SHA-256 of the RFC 8785 canonical JSON of `document`, and requestUri is \"data:application/json;base64,\" followed by those same bytes in base64 (RFC 4648 §4, padded). `canonical` shows the bytes. Each `invalid` case applies `patch` (RFC 6902) to the first case's document, and fails the validation request JSON Schema.",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"name": "the example in verification.md",
|
|
6
|
+
"document": {
|
|
7
|
+
"standard": "stellar-agent-services/provider@1",
|
|
8
|
+
"type": "validation-request",
|
|
9
|
+
"agentId": 42,
|
|
10
|
+
"network": "stellar:testnet",
|
|
11
|
+
"manifest": { "url": "https://api.example.com/.well-known/stellar-agent-services.json" },
|
|
12
|
+
"validator": "GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU",
|
|
13
|
+
"requestedAt": "2026-10-26T10:00:00Z"
|
|
14
|
+
},
|
|
15
|
+
"canonical": "{\"agentId\":42,\"manifest\":{\"url\":\"https://api.example.com/.well-known/stellar-agent-services.json\"},\"network\":\"stellar:testnet\",\"requestedAt\":\"2026-10-26T10:00:00Z\",\"standard\":\"stellar-agent-services/provider@1\",\"type\":\"validation-request\",\"validator\":\"GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU\"}",
|
|
16
|
+
"requestHash": "da09f810e3a7d9a7d858f6ecc2848bc94352d248a4be859b37660d22f9415a23",
|
|
17
|
+
"requestUri": "data:application/json;base64,eyJhZ2VudElkIjo0MiwibWFuaWZlc3QiOnsidXJsIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vLndlbGwta25vd24vc3RlbGxhci1hZ2VudC1zZXJ2aWNlcy5qc29uIn0sIm5ldHdvcmsiOiJzdGVsbGFyOnRlc3RuZXQiLCJyZXF1ZXN0ZWRBdCI6IjIwMjYtMTAtMjZUMTA6MDA6MDBaIiwic3RhbmRhcmQiOiJzdGVsbGFyLWFnZW50LXNlcnZpY2VzL3Byb3ZpZGVyQDEiLCJ0eXBlIjoidmFsaWRhdGlvbi1yZXF1ZXN0IiwidmFsaWRhdG9yIjoiR0JaU0JBU0JGTVY1UkdLUFJJUENCNVFRVkFKMzVJWEtNVEYyQTI3NjZNT0E0WkhRN01MU0lQWFUifQ=="
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "key order does not matter",
|
|
21
|
+
"document": {
|
|
22
|
+
"requestedAt": "2026-10-26T10:00:00Z",
|
|
23
|
+
"validator": "GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU",
|
|
24
|
+
"manifest": { "url": "https://api.example.com/.well-known/stellar-agent-services.json" },
|
|
25
|
+
"network": "stellar:testnet",
|
|
26
|
+
"agentId": 42,
|
|
27
|
+
"type": "validation-request",
|
|
28
|
+
"standard": "stellar-agent-services/provider@1"
|
|
29
|
+
},
|
|
30
|
+
"canonical": "{\"agentId\":42,\"manifest\":{\"url\":\"https://api.example.com/.well-known/stellar-agent-services.json\"},\"network\":\"stellar:testnet\",\"requestedAt\":\"2026-10-26T10:00:00Z\",\"standard\":\"stellar-agent-services/provider@1\",\"type\":\"validation-request\",\"validator\":\"GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU\"}",
|
|
31
|
+
"requestHash": "da09f810e3a7d9a7d858f6ecc2848bc94352d248a4be859b37660d22f9415a23",
|
|
32
|
+
"requestUri": "data:application/json;base64,eyJhZ2VudElkIjo0MiwibWFuaWZlc3QiOnsidXJsIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vLndlbGwta25vd24vc3RlbGxhci1hZ2VudC1zZXJ2aWNlcy5qc29uIn0sIm5ldHdvcmsiOiJzdGVsbGFyOnRlc3RuZXQiLCJyZXF1ZXN0ZWRBdCI6IjIwMjYtMTAtMjZUMTA6MDA6MDBaIiwic3RhbmRhcmQiOiJzdGVsbGFyLWFnZW50LXNlcnZpY2VzL3Byb3ZpZGVyQDEiLCJ0eXBlIjoidmFsaWRhdGlvbi1yZXF1ZXN0IiwidmFsaWRhdG9yIjoiR0JaU0JBU0JGTVY1UkdLUFJJUENCNVFRVkFKMzVJWEtNVEYyQTI3NjZNT0E0WkhRN01MU0lQWFUifQ=="
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "the same instant with milliseconds is another request: hash the document as sent",
|
|
36
|
+
"document": {
|
|
37
|
+
"standard": "stellar-agent-services/provider@1",
|
|
38
|
+
"type": "validation-request",
|
|
39
|
+
"agentId": 42,
|
|
40
|
+
"network": "stellar:testnet",
|
|
41
|
+
"manifest": { "url": "https://api.example.com/.well-known/stellar-agent-services.json" },
|
|
42
|
+
"validator": "GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU",
|
|
43
|
+
"requestedAt": "2026-10-26T10:00:00.000Z"
|
|
44
|
+
},
|
|
45
|
+
"canonical": "{\"agentId\":42,\"manifest\":{\"url\":\"https://api.example.com/.well-known/stellar-agent-services.json\"},\"network\":\"stellar:testnet\",\"requestedAt\":\"2026-10-26T10:00:00.000Z\",\"standard\":\"stellar-agent-services/provider@1\",\"type\":\"validation-request\",\"validator\":\"GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU\"}",
|
|
46
|
+
"requestHash": "e907d58e3935ea1ee06632896f141c3bfd6c82f95d81a4392bacf44a77923ea4",
|
|
47
|
+
"requestUri": "data:application/json;base64,eyJhZ2VudElkIjo0MiwibWFuaWZlc3QiOnsidXJsIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vLndlbGwta25vd24vc3RlbGxhci1hZ2VudC1zZXJ2aWNlcy5qc29uIn0sIm5ldHdvcmsiOiJzdGVsbGFyOnRlc3RuZXQiLCJyZXF1ZXN0ZWRBdCI6IjIwMjYtMTAtMjZUMTA6MDA6MDAuMDAwWiIsInN0YW5kYXJkIjoic3RlbGxhci1hZ2VudC1zZXJ2aWNlcy9wcm92aWRlckAxIiwidHlwZSI6InZhbGlkYXRpb24tcmVxdWVzdCIsInZhbGlkYXRvciI6IkdCWlNCQVNCRk1WNVJHS1BSSVBDQjVRUVZBSjM1SVhLTVRGMkEyNzY2TU9BNFpIUTdNTFNJUFhVIn0="
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "a request on pubnet, for a manifest at a path of its own",
|
|
51
|
+
"document": {
|
|
52
|
+
"standard": "stellar-agent-services/provider@1",
|
|
53
|
+
"type": "validation-request",
|
|
54
|
+
"agentId": 7,
|
|
55
|
+
"network": "stellar:pubnet",
|
|
56
|
+
"manifest": { "url": "https://agents.example.org/translate/manifest.json" },
|
|
57
|
+
"validator": "GBH3JLK366N4L5XCLJRCYLE6K6K3PUWBBEOLNBJMLORSKUNR5WY2IRKZ",
|
|
58
|
+
"requestedAt": "2026-11-02T08:30:15.250+03:00"
|
|
59
|
+
},
|
|
60
|
+
"canonical": "{\"agentId\":7,\"manifest\":{\"url\":\"https://agents.example.org/translate/manifest.json\"},\"network\":\"stellar:pubnet\",\"requestedAt\":\"2026-11-02T08:30:15.250+03:00\",\"standard\":\"stellar-agent-services/provider@1\",\"type\":\"validation-request\",\"validator\":\"GBH3JLK366N4L5XCLJRCYLE6K6K3PUWBBEOLNBJMLORSKUNR5WY2IRKZ\"}",
|
|
61
|
+
"requestHash": "80ff768c544ccf2fca83c1d7ddd12fa7b2f1956841b792e508e5e3d9c7076da0",
|
|
62
|
+
"requestUri": "data:application/json;base64,eyJhZ2VudElkIjo3LCJtYW5pZmVzdCI6eyJ1cmwiOiJodHRwczovL2FnZW50cy5leGFtcGxlLm9yZy90cmFuc2xhdGUvbWFuaWZlc3QuanNvbiJ9LCJuZXR3b3JrIjoic3RlbGxhcjpwdWJuZXQiLCJyZXF1ZXN0ZWRBdCI6IjIwMjYtMTEtMDJUMDg6MzA6MTUuMjUwKzAzOjAwIiwic3RhbmRhcmQiOiJzdGVsbGFyLWFnZW50LXNlcnZpY2VzL3Byb3ZpZGVyQDEiLCJ0eXBlIjoidmFsaWRhdGlvbi1yZXF1ZXN0IiwidmFsaWRhdG9yIjoiR0JIM0pMSzM2Nk40TDVYQ0xKUkNZTEU2SzZLM1BVV0JCRU9MTkJKTUxPUlNLVU5SNVdZMklSS1oifQ=="
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "unknown fields are hashed too, as UTF-8",
|
|
66
|
+
"document": {
|
|
67
|
+
"standard": "stellar-agent-services/provider@1",
|
|
68
|
+
"type": "validation-request",
|
|
69
|
+
"agentId": 42,
|
|
70
|
+
"network": "stellar:testnet",
|
|
71
|
+
"manifest": { "url": "https://api.example.com/.well-known/stellar-agent-services.json" },
|
|
72
|
+
"validator": "GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU",
|
|
73
|
+
"requestedAt": "2026-10-26T10:00:00Z",
|
|
74
|
+
"note": "Doğrulama isteği 🌍"
|
|
75
|
+
},
|
|
76
|
+
"canonical": "{\"agentId\":42,\"manifest\":{\"url\":\"https://api.example.com/.well-known/stellar-agent-services.json\"},\"network\":\"stellar:testnet\",\"note\":\"Doğrulama isteği 🌍\",\"requestedAt\":\"2026-10-26T10:00:00Z\",\"standard\":\"stellar-agent-services/provider@1\",\"type\":\"validation-request\",\"validator\":\"GBZSBASBFMV5RGKPRIPCB5QQVAJ35IXKMTF2A2766MOA4ZHQ7MLSIPXU\"}",
|
|
77
|
+
"requestHash": "393342c8c2e18374ce458f4ea5eeeba82014e912652a52ed2ab6101d96774b41",
|
|
78
|
+
"requestUri": "data:application/json;base64,eyJhZ2VudElkIjo0MiwibWFuaWZlc3QiOnsidXJsIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vLndlbGwta25vd24vc3RlbGxhci1hZ2VudC1zZXJ2aWNlcy5qc29uIn0sIm5ldHdvcmsiOiJzdGVsbGFyOnRlc3RuZXQiLCJub3RlIjoiRG/En3J1bGFtYSBpc3RlxJ9pIPCfjI0iLCJyZXF1ZXN0ZWRBdCI6IjIwMjYtMTAtMjZUMTA6MDA6MDBaIiwic3RhbmRhcmQiOiJzdGVsbGFyLWFnZW50LXNlcnZpY2VzL3Byb3ZpZGVyQDEiLCJ0eXBlIjoidmFsaWRhdGlvbi1yZXF1ZXN0IiwidmFsaWRhdG9yIjoiR0JaU0JBU0JGTVY1UkdLUFJJUENCNVFRVkFKMzVJWEtNVEYyQTI3NjZNT0E0WkhRN01MU0lQWFUifQ=="
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"invalid": [
|
|
82
|
+
{ "name": "no type", "patch": [{ "op": "remove", "path": "/type" }] },
|
|
83
|
+
{ "name": "another type", "patch": [{ "op": "replace", "path": "/type", "value": "verification-receipt" }] },
|
|
84
|
+
{ "name": "another major version", "patch": [{ "op": "replace", "path": "/standard", "value": "stellar-agent-services/provider@2" }] },
|
|
85
|
+
{ "name": "an agent id above u32", "patch": [{ "op": "replace", "path": "/agentId", "value": 4294967296 }] },
|
|
86
|
+
{ "name": "a negative agent id", "patch": [{ "op": "replace", "path": "/agentId", "value": -1 }] },
|
|
87
|
+
{ "name": "an agent id as a string", "patch": [{ "op": "replace", "path": "/agentId", "value": "42" }] },
|
|
88
|
+
{ "name": "a network the standard does not name", "patch": [{ "op": "replace", "path": "/network", "value": "stellar:futurenet" }] },
|
|
89
|
+
{ "name": "the manifest as a bare URL", "patch": [{ "op": "replace", "path": "/manifest", "value": "https://api.example.com/.well-known/stellar-agent-services.json" }] },
|
|
90
|
+
{ "name": "a manifest without a URL", "patch": [{ "op": "replace", "path": "/manifest", "value": {} }] },
|
|
91
|
+
{ "name": "a manifest served over http://", "patch": [{ "op": "replace", "path": "/manifest/url", "value": "http://api.example.com/.well-known/stellar-agent-services.json" }] },
|
|
92
|
+
{ "name": "a manifest URL with a space", "patch": [{ "op": "replace", "path": "/manifest/url", "value": "https://api.example.com/my manifest.json" }] },
|
|
93
|
+
{ "name": "a validator that is a contract", "patch": [{ "op": "replace", "path": "/validator", "value": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA" }] },
|
|
94
|
+
{ "name": "no validator", "patch": [{ "op": "remove", "path": "/validator" }] },
|
|
95
|
+
{ "name": "a time that is not RFC 3339", "patch": [{ "op": "replace", "path": "/requestedAt", "value": "26.10.2026 10:00" }] },
|
|
96
|
+
{ "name": "no requestedAt", "patch": [{ "op": "remove", "path": "/requestedAt" }] }
|
|
97
|
+
]
|
|
98
|
+
}
|