sealbridge 0.4.2 → 0.5.0

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.
Files changed (115) hide show
  1. package/README.ja.md +4 -2
  2. package/README.md +6 -2
  3. package/dist/cli/dist/accept.d.ts +2 -1
  4. package/dist/cli/dist/accept.js +18 -7
  5. package/dist/cli/dist/accept.js.map +1 -1
  6. package/dist/cli/dist/index.js +46 -13
  7. package/dist/cli/dist/index.js.map +1 -1
  8. package/dist/cli/dist/invite-links.d.ts +14 -0
  9. package/dist/cli/dist/invite-links.js +263 -0
  10. package/dist/cli/dist/invite-links.js.map +1 -0
  11. package/dist/cli/dist/invite-output.d.ts +1 -1
  12. package/dist/cli/dist/invite-output.js +3 -2
  13. package/dist/cli/dist/invite-output.js.map +1 -1
  14. package/dist/cli/dist/network.js +16 -23
  15. package/dist/cli/dist/network.js.map +1 -1
  16. package/dist/cli/dist/receipt.d.ts +12 -2
  17. package/dist/cli/dist/receipt.js +6 -5
  18. package/dist/cli/dist/receipt.js.map +1 -1
  19. package/dist/cli/dist/sdk.d.ts +6 -4
  20. package/dist/cli/dist/sdk.js +3 -2
  21. package/dist/cli/dist/sdk.js.map +1 -1
  22. package/dist/examples/two-owner-demo/dist/run-demo.js +3 -1
  23. package/dist/examples/two-owner-demo/dist/run-demo.js.map +1 -1
  24. package/dist/package.json +1 -1
  25. package/dist/packages/core/dist/context-grant.d.ts +13 -0
  26. package/dist/packages/core/dist/context-grant.js +65 -0
  27. package/dist/packages/core/dist/context-grant.js.map +1 -0
  28. package/dist/packages/core/dist/delegation.d.ts +17 -0
  29. package/dist/packages/core/dist/delegation.js +126 -0
  30. package/dist/packages/core/dist/delegation.js.map +1 -0
  31. package/dist/packages/core/dist/edge.d.ts +2 -0
  32. package/dist/packages/core/dist/edge.js +2 -0
  33. package/dist/packages/core/dist/edge.js.map +1 -1
  34. package/dist/packages/core/dist/index.d.ts +4 -0
  35. package/dist/packages/core/dist/index.js +4 -0
  36. package/dist/packages/core/dist/index.js.map +1 -1
  37. package/dist/packages/core/dist/invite-link.d.ts +72 -0
  38. package/dist/packages/core/dist/invite-link.js +225 -0
  39. package/dist/packages/core/dist/invite-link.js.map +1 -0
  40. package/dist/packages/core/dist/invite-sas.d.ts +7 -0
  41. package/dist/packages/core/dist/invite-sas.js +15 -0
  42. package/dist/packages/core/dist/invite-sas.js.map +1 -0
  43. package/dist/packages/core/dist/relay-auth.d.ts +1 -1
  44. package/dist/packages/core/dist/relay-auth.js +1 -1
  45. package/dist/packages/core/dist/relay-auth.js.map +1 -1
  46. package/dist/packages/core/dist/schema.d.ts +1 -1
  47. package/dist/packages/core/dist/schema.js +4 -0
  48. package/dist/packages/core/dist/schema.js.map +1 -1
  49. package/dist/packages/core/dist/types.d.ts +52 -0
  50. package/dist/packages/ledger/dist/index.d.ts +70 -2
  51. package/dist/packages/ledger/dist/index.js +404 -26
  52. package/dist/packages/ledger/dist/index.js.map +1 -1
  53. package/dist/packages/relay/dist/fetch.js +4 -0
  54. package/dist/packages/relay/dist/fetch.js.map +1 -1
  55. package/dist/packages/relay/dist/invites.d.ts +42 -0
  56. package/dist/packages/relay/dist/invites.js +347 -0
  57. package/dist/packages/relay/dist/invites.js.map +1 -0
  58. package/dist/packages/relay/dist/worker.d.ts +3 -0
  59. package/dist/packages/relay/dist/worker.js +21 -0
  60. package/dist/packages/relay/dist/worker.js.map +1 -1
  61. package/dist/packages/runtime/dist/a2a.js +1 -1
  62. package/dist/packages/runtime/dist/adapter.d.ts +1 -0
  63. package/dist/packages/runtime/dist/approval-providers.d.ts +4 -0
  64. package/dist/packages/runtime/dist/approval-providers.js +3 -0
  65. package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
  66. package/dist/packages/runtime/dist/connection-persistence.d.ts +1 -1
  67. package/dist/packages/runtime/dist/context-grant-audit.d.ts +8 -0
  68. package/dist/packages/runtime/dist/context-grant-audit.js +41 -0
  69. package/dist/packages/runtime/dist/context-grant-audit.js.map +1 -0
  70. package/dist/packages/runtime/dist/delegation.d.ts +37 -0
  71. package/dist/packages/runtime/dist/delegation.js +125 -0
  72. package/dist/packages/runtime/dist/delegation.js.map +1 -0
  73. package/dist/packages/runtime/dist/gateway.d.ts +1 -0
  74. package/dist/packages/runtime/dist/gateway.js.map +1 -1
  75. package/dist/packages/runtime/dist/index.d.ts +2 -0
  76. package/dist/packages/runtime/dist/index.js +2 -0
  77. package/dist/packages/runtime/dist/index.js.map +1 -1
  78. package/dist/packages/runtime/dist/mcp-server.js +22 -8
  79. package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
  80. package/dist/packages/runtime/dist/mcp-tool-catalog.js +44 -5
  81. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
  82. package/dist/packages/runtime/dist/session-audit.d.ts +6 -1
  83. package/dist/packages/runtime/dist/session-audit.js +35 -4
  84. package/dist/packages/runtime/dist/session-audit.js.map +1 -1
  85. package/dist/packages/runtime/dist/session.d.ts +21 -1
  86. package/dist/packages/runtime/dist/session.js +427 -62
  87. package/dist/packages/runtime/dist/session.js.map +1 -1
  88. package/dist/packages/runtime/dist/task-journal.d.ts +10 -1
  89. package/dist/packages/runtime/dist/task-journal.js +26 -1
  90. package/dist/packages/runtime/dist/task-journal.js.map +1 -1
  91. package/dist/packages/runtime/dist/verifier.d.ts +5 -2
  92. package/dist/packages/runtime/dist/verifier.js +14 -4
  93. package/dist/packages/runtime/dist/verifier.js.map +1 -1
  94. package/dist/spec/audit-entry.schema.json +25 -1
  95. package/dist/spec/audit-evidence.schema.json +179 -0
  96. package/dist/spec/audit-file-record.schema.json +177 -0
  97. package/dist/spec/audit-interruption.schema.json +110 -0
  98. package/dist/spec/context-grant-audit-payload.schema.json +24 -0
  99. package/dist/spec/context-grant.schema.json +146 -0
  100. package/dist/spec/delegation-attachment.schema.json +167 -0
  101. package/dist/spec/delegation-link.schema.json +141 -0
  102. package/dist/spec/examples/context-pooling/approval_redelegation/sample-delegation-attachment.json +413 -0
  103. package/dist/spec/examples/context-pooling/hand_over/sample-context-grant.json +18 -0
  104. package/dist/spec/examples/context-pooling/hand_over/sample-task-manifest.0.2.0.json +94 -0
  105. package/dist/spec/examples/context-pooling/sample-context-grant-audit-payload.json +4 -0
  106. package/dist/spec/examples/context-pooling/view_only/sample-context-grant.json +18 -0
  107. package/dist/spec/examples/context-pooling/view_only/sample-task-manifest.0.2.0.json +94 -0
  108. package/dist/spec/examples/sample-audit-evidence.json +138 -0
  109. package/dist/spec/examples/sample-audit-file-record.json +31 -0
  110. package/dist/spec/examples/sample-audit-interruption.json +29 -0
  111. package/dist/spec/task-manifest.0.2.0.schema.json +87 -1
  112. package/docs/context-grants.md +221 -0
  113. package/docs/sdk.ja.md +4 -0
  114. package/docs/sdk.md +4 -0
  115. package/package.json +3 -2
@@ -0,0 +1,110 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://acp-spec.local/schemas/v0.1/audit-interruption.schema.json",
4
+ "title": "audit-interruption",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "payload",
9
+ "signature"
10
+ ],
11
+ "properties": {
12
+ "payload": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": [
16
+ "type",
17
+ "formatVersion",
18
+ "taskId",
19
+ "actors",
20
+ "seq",
21
+ "prevEntryHash",
22
+ "acknowledgedPrefix",
23
+ "phase",
24
+ "reason",
25
+ "observedAt"
26
+ ],
27
+ "properties": {
28
+ "type": {
29
+ "const": "AuditInterruption"
30
+ },
31
+ "formatVersion": {
32
+ "const": 1
33
+ },
34
+ "taskId": {
35
+ "type": "string",
36
+ "minLength": 1
37
+ },
38
+ "actors": {
39
+ "type": "array",
40
+ "minItems": 2,
41
+ "maxItems": 2,
42
+ "items": {
43
+ "type": "string",
44
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
45
+ }
46
+ },
47
+ "seq": {
48
+ "type": "integer",
49
+ "minimum": 0,
50
+ "maximum": 9007199254740991
51
+ },
52
+ "prevEntryHash": {
53
+ "type": "string",
54
+ "pattern": "^sha256:[a-f0-9]{64}$"
55
+ },
56
+ "acknowledgedPrefix": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "required": [
60
+ "count",
61
+ "lastSeq",
62
+ "head",
63
+ "entriesDigest"
64
+ ],
65
+ "properties": {
66
+ "count": {
67
+ "type": "integer",
68
+ "minimum": 0,
69
+ "maximum": 9007199254740991
70
+ },
71
+ "lastSeq": {
72
+ "type": "integer",
73
+ "minimum": 0,
74
+ "maximum": 9007199254740991
75
+ },
76
+ "head": {
77
+ "type": "string",
78
+ "pattern": "^sha256:[a-f0-9]{64}$"
79
+ },
80
+ "entriesDigest": {
81
+ "type": "string",
82
+ "pattern": "^sha256:[a-f0-9]{64}$"
83
+ }
84
+ }
85
+ },
86
+ "phase": {
87
+ "enum": [
88
+ "OWNER_APPROVAL",
89
+ "ACCEPT_ACK_WAIT"
90
+ ]
91
+ },
92
+ "reason": {
93
+ "enum": [
94
+ "SESSION_TIMEOUT",
95
+ "WORKER_STOPPED",
96
+ "WORKER_RESTART_OBSERVED"
97
+ ]
98
+ },
99
+ "observedAt": {
100
+ "type": "string",
101
+ "format": "date-time",
102
+ "pattern": "Z$"
103
+ }
104
+ }
105
+ },
106
+ "signature": {
107
+ "$ref": "https://acp-spec.local/schemas/v0.1/audit-entry.schema.json#/properties/actorSignature"
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://acp-spec.local/schemas/v0.2/context-grant-audit-payload.schema.json",
4
+ "title": "ContextGrantAuditPayload",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "grantDigest",
9
+ "deliveryMode"
10
+ ],
11
+ "properties": {
12
+ "grantDigest": {
13
+ "type": "string",
14
+ "pattern": "^sha256:[a-f0-9]{64}$"
15
+ },
16
+ "deliveryMode": {
17
+ "enum": [
18
+ "view_only",
19
+ "hand_over",
20
+ "approval_redelegation"
21
+ ]
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,146 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://acp-spec.local/schemas/v0.2/context-grant.schema.json",
4
+ "title": "ContextGrant",
5
+ "description": "Context selection and retention declarations; CP5a approval_redelegation requires owner-approved child dispatch.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "deliveryMode",
10
+ "selectors",
11
+ "angle",
12
+ "expiresAt",
13
+ "maxBytes",
14
+ "retention"
15
+ ],
16
+ "properties": {
17
+ "deliveryMode": {
18
+ "enum": [
19
+ "view_only",
20
+ "approval_redelegation",
21
+ "hand_over"
22
+ ],
23
+ "default": "view_only"
24
+ },
25
+ "selectors": {
26
+ "type": "array",
27
+ "items": {
28
+ "type": "string",
29
+ "minLength": 1,
30
+ "pattern": "\\S"
31
+ },
32
+ "uniqueItems": true,
33
+ "minItems": 1
34
+ },
35
+ "fieldsAllowed": {
36
+ "type": "array",
37
+ "items": {
38
+ "type": "string",
39
+ "minLength": 1,
40
+ "pattern": "\\S"
41
+ },
42
+ "uniqueItems": true
43
+ },
44
+ "fieldsDenied": {
45
+ "type": "array",
46
+ "items": {
47
+ "type": "string",
48
+ "minLength": 1,
49
+ "pattern": "\\S"
50
+ },
51
+ "uniqueItems": true
52
+ },
53
+ "angle": {
54
+ "type": "string",
55
+ "minLength": 1,
56
+ "pattern": "\\S"
57
+ },
58
+ "expiresAt": {
59
+ "type": "string",
60
+ "format": "date-time"
61
+ },
62
+ "maxBytes": {
63
+ "type": "integer",
64
+ "minimum": 1,
65
+ "maximum": 65536
66
+ },
67
+ "retention": {
68
+ "enum": [
69
+ "ephemeral_view",
70
+ "keep_deliverable"
71
+ ]
72
+ },
73
+ "inputRetentionAllowed": {
74
+ "type": "boolean",
75
+ "default": false
76
+ },
77
+ "outputSchema": {
78
+ "type": "object"
79
+ }
80
+ },
81
+ "allOf": [
82
+ {
83
+ "if": {
84
+ "properties": {
85
+ "deliveryMode": {
86
+ "const": "view_only"
87
+ }
88
+ },
89
+ "required": [
90
+ "deliveryMode"
91
+ ]
92
+ },
93
+ "then": {
94
+ "properties": {
95
+ "retention": {
96
+ "const": "ephemeral_view"
97
+ },
98
+ "inputRetentionAllowed": {
99
+ "const": false
100
+ }
101
+ }
102
+ }
103
+ },
104
+ {
105
+ "if": {
106
+ "properties": {
107
+ "deliveryMode": {
108
+ "const": "hand_over"
109
+ }
110
+ },
111
+ "required": [
112
+ "deliveryMode"
113
+ ]
114
+ },
115
+ "then": {
116
+ "properties": {
117
+ "retention": {
118
+ "const": "keep_deliverable"
119
+ },
120
+ "inputRetentionAllowed": {
121
+ "const": false
122
+ }
123
+ }
124
+ }
125
+ },
126
+ {
127
+ "if": {
128
+ "properties": {
129
+ "deliveryMode": {
130
+ "const": "approval_redelegation"
131
+ }
132
+ },
133
+ "required": [
134
+ "deliveryMode"
135
+ ]
136
+ },
137
+ "then": {
138
+ "properties": {
139
+ "inputRetentionAllowed": {
140
+ "const": false
141
+ }
142
+ }
143
+ }
144
+ }
145
+ ]
146
+ }
@@ -0,0 +1,167 @@
1
+ {
2
+ "type": "object",
3
+ "additionalProperties": false,
4
+ "required": [
5
+ "parentContract",
6
+ "children"
7
+ ],
8
+ "properties": {
9
+ "parentContract": {
10
+ "$ref": "#/$defs/contract"
11
+ },
12
+ "children": {
13
+ "type": "array",
14
+ "minItems": 1,
15
+ "items": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": [
19
+ "link",
20
+ "childContract"
21
+ ],
22
+ "properties": {
23
+ "link": {
24
+ "$ref": "https://acp-spec.local/schemas/v0.2/delegation-link.schema.json"
25
+ },
26
+ "childContract": {
27
+ "$ref": "#/$defs/contract"
28
+ }
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
34
+ "$id": "https://acp-spec.local/schemas/v0.2/delegation-attachment.schema.json",
35
+ "title": "DelegationAttachment",
36
+ "$defs": {
37
+ "contract": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": [
41
+ "manifest",
42
+ "proposal",
43
+ "acceptance",
44
+ "contractDigest"
45
+ ],
46
+ "properties": {
47
+ "manifest": {
48
+ "$ref": "https://acp-spec.local/schemas/v0.2/task-manifest.schema.json"
49
+ },
50
+ "proposal": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": [
54
+ "payload",
55
+ "signature"
56
+ ],
57
+ "properties": {
58
+ "payload": {
59
+ "$ref": "https://acp-spec.local/schemas/v0.2/task-manifest.schema.json"
60
+ },
61
+ "signature": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": [
65
+ "signerDid",
66
+ "canonicalization",
67
+ "payloadDigest",
68
+ "signedAt",
69
+ "signature"
70
+ ],
71
+ "properties": {
72
+ "signerDid": {
73
+ "type": "string",
74
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
75
+ },
76
+ "canonicalization": {
77
+ "const": "RFC8785-JCS"
78
+ },
79
+ "payloadDigest": {
80
+ "type": "string",
81
+ "pattern": "^sha256:[a-f0-9]{64}$"
82
+ },
83
+ "signedAt": {
84
+ "type": "string",
85
+ "format": "date-time"
86
+ },
87
+ "signature": {
88
+ "type": "string",
89
+ "pattern": "^ed25519:[A-Za-z0-9_-]{86}$"
90
+ }
91
+ }
92
+ }
93
+ }
94
+ },
95
+ "acceptance": {
96
+ "type": "object",
97
+ "additionalProperties": false,
98
+ "required": [
99
+ "payload",
100
+ "signature"
101
+ ],
102
+ "properties": {
103
+ "payload": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": [
107
+ "type",
108
+ "manifestDigest",
109
+ "taskId"
110
+ ],
111
+ "properties": {
112
+ "type": {
113
+ "const": "ACCEPT"
114
+ },
115
+ "manifestDigest": {
116
+ "type": "string",
117
+ "pattern": "^sha256:[a-f0-9]{64}$"
118
+ },
119
+ "taskId": {
120
+ "type": "string",
121
+ "pattern": "^task_[a-zA-Z0-9_-]{8,64}$",
122
+ "description": "Globally unique task identifier."
123
+ }
124
+ }
125
+ },
126
+ "signature": {
127
+ "type": "object",
128
+ "additionalProperties": false,
129
+ "required": [
130
+ "signerDid",
131
+ "canonicalization",
132
+ "payloadDigest",
133
+ "signedAt",
134
+ "signature"
135
+ ],
136
+ "properties": {
137
+ "signerDid": {
138
+ "type": "string",
139
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
140
+ },
141
+ "canonicalization": {
142
+ "const": "RFC8785-JCS"
143
+ },
144
+ "payloadDigest": {
145
+ "type": "string",
146
+ "pattern": "^sha256:[a-f0-9]{64}$"
147
+ },
148
+ "signedAt": {
149
+ "type": "string",
150
+ "format": "date-time"
151
+ },
152
+ "signature": {
153
+ "type": "string",
154
+ "pattern": "^ed25519:[A-Za-z0-9_-]{86}$"
155
+ }
156
+ }
157
+ }
158
+ }
159
+ },
160
+ "contractDigest": {
161
+ "type": "string",
162
+ "pattern": "^sha256:[a-f0-9]{64}$"
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
@@ -0,0 +1,141 @@
1
+ {
2
+ "type": "object",
3
+ "additionalProperties": false,
4
+ "required": [
5
+ "payload",
6
+ "signature"
7
+ ],
8
+ "properties": {
9
+ "payload": {
10
+ "type": "object",
11
+ "additionalProperties": false,
12
+ "required": [
13
+ "type",
14
+ "parentTaskId",
15
+ "parentContractDigest",
16
+ "childTaskId",
17
+ "childContractDigest",
18
+ "delegatorOwnerDid",
19
+ "delegateeOwnerDid",
20
+ "depthRemaining",
21
+ "limits",
22
+ "issuedAt",
23
+ "prevLinkDigest"
24
+ ],
25
+ "properties": {
26
+ "type": {
27
+ "const": "DelegationLink"
28
+ },
29
+ "parentTaskId": {
30
+ "type": "string",
31
+ "pattern": "^task_[a-zA-Z0-9_-]{8,64}$",
32
+ "description": "Globally unique task identifier."
33
+ },
34
+ "parentContractDigest": {
35
+ "type": "string",
36
+ "pattern": "^sha256:[a-f0-9]{64}$"
37
+ },
38
+ "childTaskId": {
39
+ "type": "string",
40
+ "pattern": "^task_[a-zA-Z0-9_-]{8,64}$",
41
+ "description": "Globally unique task identifier."
42
+ },
43
+ "childContractDigest": {
44
+ "type": "string",
45
+ "pattern": "^sha256:[a-f0-9]{64}$"
46
+ },
47
+ "delegatorOwnerDid": {
48
+ "type": "string",
49
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
50
+ },
51
+ "delegateeOwnerDid": {
52
+ "type": "string",
53
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
54
+ },
55
+ "depthRemaining": {
56
+ "type": "integer",
57
+ "minimum": 0,
58
+ "maximum": 0
59
+ },
60
+ "limits": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": [
64
+ "deadline",
65
+ "expiresAt",
66
+ "budget",
67
+ "sandboxPolicy",
68
+ "verification",
69
+ "depthRemaining"
70
+ ],
71
+ "properties": {
72
+ "deadline": {
73
+ "type": "string",
74
+ "format": "date-time"
75
+ },
76
+ "expiresAt": {
77
+ "type": "string",
78
+ "format": "date-time"
79
+ },
80
+ "budget": {
81
+ "$ref": "https://acp-spec.local/schemas/v0.2/task-manifest.schema.json#/properties/budget"
82
+ },
83
+ "sandboxPolicy": {
84
+ "$ref": "https://acp-spec.local/schemas/v0.2/task-manifest.schema.json#/properties/sandboxPolicy"
85
+ },
86
+ "verification": {
87
+ "$ref": "https://acp-spec.local/schemas/v0.2/task-manifest.schema.json#/properties/verification"
88
+ },
89
+ "depthRemaining": {
90
+ "type": "integer",
91
+ "minimum": 0,
92
+ "maximum": 0
93
+ }
94
+ }
95
+ },
96
+ "issuedAt": {
97
+ "type": "string",
98
+ "format": "date-time"
99
+ },
100
+ "prevLinkDigest": {
101
+ "type": "null"
102
+ }
103
+ }
104
+ },
105
+ "signature": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "required": [
109
+ "signerDid",
110
+ "canonicalization",
111
+ "payloadDigest",
112
+ "signedAt",
113
+ "signature"
114
+ ],
115
+ "properties": {
116
+ "signerDid": {
117
+ "type": "string",
118
+ "pattern": "^did:key:z[1-9A-HJ-NP-Za-km-z]{32,128}$"
119
+ },
120
+ "canonicalization": {
121
+ "const": "RFC8785-JCS"
122
+ },
123
+ "payloadDigest": {
124
+ "type": "string",
125
+ "pattern": "^sha256:[a-f0-9]{64}$"
126
+ },
127
+ "signedAt": {
128
+ "type": "string",
129
+ "format": "date-time"
130
+ },
131
+ "signature": {
132
+ "type": "string",
133
+ "pattern": "^ed25519:[A-Za-z0-9_-]{86}$"
134
+ }
135
+ }
136
+ }
137
+ },
138
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
139
+ "$id": "https://acp-spec.local/schemas/v0.2/delegation-link.schema.json",
140
+ "title": "DelegationLink"
141
+ }