@hyperscale0/udl 2.6.1 → 3.0.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 (213) hide show
  1. package/CHANGELOG.md +2 -330
  2. package/LICENSING.md +1 -2
  3. package/README.md +3 -114
  4. package/TRADEMARKS.md +2 -2
  5. package/dist/diagnostics.d.ts +21 -201
  6. package/dist/diagnostics.d.ts.map +1 -1
  7. package/dist/diagnostics.js +29 -193
  8. package/dist/diagnostics.js.map +1 -1
  9. package/dist/evolution.d.ts +3 -132
  10. package/dist/evolution.d.ts.map +1 -1
  11. package/dist/evolution.js +29 -633
  12. package/dist/evolution.js.map +1 -1
  13. package/dist/finance.d.ts +5 -72
  14. package/dist/finance.d.ts.map +1 -1
  15. package/dist/finance.js +233 -737
  16. package/dist/finance.js.map +1 -1
  17. package/dist/index.d.ts +7 -18
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -12
  20. package/dist/index.js.map +1 -1
  21. package/dist/instrument-references.d.ts.map +1 -1
  22. package/dist/instrument-references.js +3 -2
  23. package/dist/instrument-references.js.map +1 -1
  24. package/dist/schema.d.ts +2079 -4564
  25. package/dist/schema.d.ts.map +1 -1
  26. package/dist/schema.js +270 -1609
  27. package/dist/schema.js.map +1 -1
  28. package/dist/validation.d.ts +8 -104
  29. package/dist/validation.d.ts.map +1 -1
  30. package/dist/validation.js +653 -3271
  31. package/dist/validation.js.map +1 -1
  32. package/docs/README.md +147 -14
  33. package/package.json +7 -11
  34. package/spec/README.md +151 -164
  35. package/spec/darb.udl.json +249 -0
  36. package/spec/udl.schema.json +4104 -3202
  37. package/src/diagnostics.ts +51 -246
  38. package/src/evolution.ts +39 -1045
  39. package/src/finance.ts +287 -1127
  40. package/src/index.ts +18 -142
  41. package/src/instrument-references.ts +3 -2
  42. package/src/schema.ts +285 -1843
  43. package/src/validation.ts +870 -5611
  44. package/conformance/README.md +0 -82
  45. package/conformance/evolution/action-contract.expected.json +0 -10
  46. package/conformance/evolution/action-contract.live.udl +0 -44
  47. package/conformance/evolution/action-contract.next.udl +0 -45
  48. package/conformance/evolution/product-identity.expected.json +0 -10
  49. package/conformance/evolution/product-identity.live.udl +0 -55
  50. package/conformance/evolution/product-identity.next.udl +0 -55
  51. package/conformance/evolution/version-required.expected.json +0 -10
  52. package/conformance/evolution/version-required.live.udl +0 -55
  53. package/conformance/evolution/version-required.next.udl +0 -58
  54. package/conformance/invalid/action-without-transition.expected.json +0 -10
  55. package/conformance/invalid/action-without-transition.udl +0 -60
  56. package/conformance/invalid/agent-description-too-long.expected.json +0 -10
  57. package/conformance/invalid/agent-description-too-long.udl +0 -57
  58. package/conformance/invalid/blank-title.expected.json +0 -10
  59. package/conformance/invalid/blank-title.udl +0 -54
  60. package/conformance/invalid/call-binds-results.expected.json +0 -10
  61. package/conformance/invalid/call-binds-results.udl +0 -314
  62. package/conformance/invalid/call-unknown-action.expected.json +0 -10
  63. package/conformance/invalid/call-unknown-action.udl +0 -314
  64. package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
  65. package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
  66. package/conformance/invalid/depth-budget.expected.json +0 -10
  67. package/conformance/invalid/depth-budget.udl +0 -49
  68. package/conformance/invalid/duplicate-subject.expected.json +0 -10
  69. package/conformance/invalid/duplicate-subject.udl +0 -230
  70. package/conformance/invalid/forged-effects.expected.json +0 -10
  71. package/conformance/invalid/forged-effects.udl +0 -76
  72. package/conformance/invalid/format-version.expected.json +0 -10
  73. package/conformance/invalid/format-version.udl +0 -54
  74. package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
  75. package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
  76. package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
  77. package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
  78. package/conformance/invalid/invalid-check-duration.expected.json +0 -10
  79. package/conformance/invalid/invalid-check-duration.udl +0 -219
  80. package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
  81. package/conformance/invalid/invalid-dial-anchor.udl +0 -219
  82. package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
  83. package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
  84. package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
  85. package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
  86. package/conformance/invalid/invalid-journeys.expected.json +0 -10
  87. package/conformance/invalid/invalid-journeys.udl +0 -77
  88. package/conformance/invalid/invalid-remainder.expected.json +0 -10
  89. package/conformance/invalid/invalid-remainder.udl +0 -220
  90. package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
  91. package/conformance/invalid/invalid-schema-keyword.udl +0 -220
  92. package/conformance/invalid/invalid-utf8.expected.json +0 -10
  93. package/conformance/invalid/invalid-utf8.udl +0 -1
  94. package/conformance/invalid/leaf-effect-mismatch.expected.json +0 -10
  95. package/conformance/invalid/leaf-effect-mismatch.udl +0 -314
  96. package/conformance/invalid/malformed-json.expected.json +0 -10
  97. package/conformance/invalid/malformed-json.udl +0 -1
  98. package/conformance/invalid/missing-create-action.expected.json +0 -10
  99. package/conformance/invalid/missing-create-action.udl +0 -48
  100. package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
  101. package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
  102. package/conformance/invalid/missing-exception-contract.expected.json +0 -14
  103. package/conformance/invalid/missing-exception-contract.udl +0 -2523
  104. package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
  105. package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
  106. package/conformance/invalid/not-an-object.expected.json +0 -10
  107. package/conformance/invalid/not-an-object.udl +0 -1
  108. package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
  109. package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
  110. package/conformance/invalid/piece-plan-without-partition.expected.json +0 -10
  111. package/conformance/invalid/piece-plan-without-partition.udl +0 -305
  112. package/conformance/invalid/private-action-independent-approval.expected.json +0 -10
  113. package/conformance/invalid/private-action-independent-approval.udl +0 -314
  114. package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
  115. package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
  116. package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
  117. package/conformance/invalid/quote-named-reference-gate.udl +0 -50
  118. package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
  119. package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
  120. package/conformance/invalid/unfund-order-not-reversed.expected.json +0 -10
  121. package/conformance/invalid/unfund-order-not-reversed.udl +0 -314
  122. package/conformance/invalid/unknown-key.expected.json +0 -10
  123. package/conformance/invalid/unknown-key.udl +0 -55
  124. package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
  125. package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
  126. package/conformance/invalid/unknown-required-field.expected.json +0 -10
  127. package/conformance/invalid/unknown-required-field.udl +0 -220
  128. package/conformance/invalid/unreachable-state.expected.json +0 -10
  129. package/conformance/invalid/unreachable-state.udl +0 -55
  130. package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
  131. package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
  132. package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
  133. package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
  134. package/conformance/valid/agent-description.expected.json +0 -6
  135. package/conformance/valid/agent-description.udl +0 -66
  136. package/conformance/valid/attested.expected.json +0 -6
  137. package/conformance/valid/attested.udl +0 -251
  138. package/conformance/valid/cards.expected.json +0 -6
  139. package/conformance/valid/cards.udl +0 -1579
  140. package/conformance/valid/commerce-escrow.expected.json +0 -6
  141. package/conformance/valid/commerce-escrow.udl +0 -1512
  142. package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
  143. package/conformance/valid/compiled-crowdfunding.udl +0 -1843
  144. package/conformance/valid/compiled-watch-club.expected.json +0 -6
  145. package/conformance/valid/compiled-watch-club.udl +0 -2486
  146. package/conformance/valid/complete-contract.expected.json +0 -6
  147. package/conformance/valid/complete-contract.udl +0 -218
  148. package/conformance/valid/effect-signatures.expected.json +0 -6
  149. package/conformance/valid/effect-signatures.udl +0 -75
  150. package/conformance/valid/hand-edited.expected.json +0 -6
  151. package/conformance/valid/hand-edited.udl +0 -1
  152. package/conformance/valid/insured-car-marketplace.expected.json +0 -6
  153. package/conformance/valid/insured-car-marketplace.udl +0 -1050
  154. package/conformance/valid/insured-travel.expected.json +0 -6
  155. package/conformance/valid/insured-travel.udl +0 -3469
  156. package/conformance/valid/minimal.expected.json +0 -6
  157. package/conformance/valid/minimal.udl +0 -62
  158. package/conformance/valid/piece-plan-calls.expected.json +0 -6
  159. package/conformance/valid/piece-plan-calls.udl +0 -314
  160. package/conformance/valid/protection.expected.json +0 -6
  161. package/conformance/valid/protection.udl +0 -1551
  162. package/conformance/valid/string-escaping.expected.json +0 -6
  163. package/conformance/valid/string-escaping.udl +0 -54
  164. package/conformance/valid/vocabulary.expected.json +0 -6
  165. package/conformance/valid/vocabulary.udl +0 -2012
  166. package/dist/allocation.d.ts +0 -60
  167. package/dist/allocation.d.ts.map +0 -1
  168. package/dist/allocation.js +0 -177
  169. package/dist/allocation.js.map +0 -1
  170. package/dist/check-profiles.d.ts +0 -57
  171. package/dist/check-profiles.d.ts.map +0 -1
  172. package/dist/check-profiles.js +0 -62
  173. package/dist/check-profiles.js.map +0 -1
  174. package/dist/distribution.d.ts +0 -15
  175. package/dist/distribution.d.ts.map +0 -1
  176. package/dist/distribution.js +0 -49
  177. package/dist/distribution.js.map +0 -1
  178. package/dist/effects.d.ts +0 -58
  179. package/dist/effects.d.ts.map +0 -1
  180. package/dist/effects.js +0 -1126
  181. package/dist/effects.js.map +0 -1
  182. package/dist/reference.d.ts +0 -3
  183. package/dist/reference.d.ts.map +0 -1
  184. package/dist/reference.js +0 -28
  185. package/dist/reference.js.map +0 -1
  186. package/dist/vocabulary.d.ts +0 -23
  187. package/dist/vocabulary.d.ts.map +0 -1
  188. package/dist/vocabulary.js +0 -1052
  189. package/dist/vocabulary.js.map +0 -1
  190. package/docs/funding-custody.md +0 -165
  191. package/docs/guide/01-a-document.md +0 -37
  192. package/docs/guide/02-money-steps.md +0 -23
  193. package/docs/guide/03-laws.md +0 -18
  194. package/docs/guide/04-fees-and-remainder.md +0 -36
  195. package/docs/guide/05-checks-updates-dials.md +0 -7
  196. package/docs/guide/06-effects.md +0 -11
  197. package/docs/guide/07-evolution.md +0 -11
  198. package/docs/guide/08-implementing.md +0 -13
  199. package/docs/guide/09-schedules-and-allocation.md +0 -132
  200. package/docs/llms-full.txt +0 -2008
  201. package/docs/llms.txt +0 -14
  202. package/docs/piece-plans.md +0 -148
  203. package/docs/reference/canonical.md +0 -16
  204. package/docs/reference/clauses.md +0 -1585
  205. package/docs/reference/cli.md +0 -24
  206. package/docs/reference/diagnostics.md +0 -38
  207. package/skills/udl/SKILL.md +0 -28
  208. package/src/allocation.ts +0 -259
  209. package/src/check-profiles.ts +0 -80
  210. package/src/distribution.ts +0 -61
  211. package/src/effects.ts +0 -1920
  212. package/src/reference.ts +0 -31
  213. package/src/vocabulary.ts +0 -1635
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL1003",
5
- "path": "$"
6
- }
7
- ],
8
- "summary": "Valid JSON that is not a UDL document.",
9
- "verdict": "invalid"
10
- }
@@ -1 +0,0 @@
1
- "a string"
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL5005",
5
- "path": "$.instruments[0].actions.settle.reconcile[0].evidence"
6
- }
7
- ],
8
- "summary": "Bank evidence for payouts: an instrument that owns a payout closes it against a debit statement line, never against the provider confirmation of our own instruction.",
9
- "verdict": "invalid"
10
- }
@@ -1,259 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "create",
6
- "instruct",
7
- "settle"
8
- ],
9
- "actions": {
10
- "create": {
11
- "moves": [],
12
- "publicAction": "createSupplierPayout",
13
- "steps": [],
14
- "summary": "Create a supplier payout"
15
- },
16
- "instruct": {
17
- "moves": [],
18
- "payout": {
19
- "amount": "fields.netPayable",
20
- "beneficiaryField": "supplierBeneficiaryId",
21
- "beneficiaryPartyField": "supplierAccountId",
22
- "capture": "payoutId",
23
- "currencyField": "currency",
24
- "sourceAccountField": "treasuryAccountId",
25
- "speed": "standard"
26
- },
27
- "publicAction": "instructSupplierPayout",
28
- "steps": [],
29
- "summary": "Instruct the payout to the supplier"
30
- },
31
- "settle": {
32
- "due": {
33
- "field": "settleBy"
34
- },
35
- "moves": [],
36
- "reconcile": [
37
- {
38
- "amount": "fields.netPayable",
39
- "capture": "settlementEvidenceId",
40
- "counterpartyRef": "payoutId",
41
- "currencyField": "currency",
42
- "direction": "debit",
43
- "evidence": "provider_confirmation",
44
- "exception": {
45
- "amountField": "unmatchedAmount",
46
- "childInstrumentId": "supplier_payout_break",
47
- "maxOpen": 1,
48
- "reasonField": "breakReason",
49
- "refField": "supplierPayoutId"
50
- },
51
- "match": {
52
- "dial": "settlement_tolerance",
53
- "law": "tolerance",
54
- "minorUnits": 100
55
- },
56
- "within": {
57
- "field": "settleBy"
58
- }
59
- }
60
- ],
61
- "steps": [],
62
- "summary": "Match the bank's debit against what the instruction promised"
63
- }
64
- },
65
- "description": "A payout the instrument owns end to end: one instruction, one expectation about the debit it will produce, and one break when the debit never matches",
66
- "dials": [
67
- {
68
- "key": "settlement_tolerance",
69
- "kind": "reconcile_tolerance",
70
- "maxMinorUnits": 500,
71
- "summary": "Largest difference between the instructed amount and the settled debit that still counts as matched.",
72
- "title": "Settlement tolerance"
73
- }
74
- ],
75
- "fields": {
76
- "currency": {
77
- "description": "ISO 4217 currency code",
78
- "maxLength": 3,
79
- "minLength": 3,
80
- "pattern": "^[A-Z]{3}$",
81
- "type": "string"
82
- },
83
- "netPayable": {
84
- "description": "Amount instructed to the supplier in minor units",
85
- "pattern": "^[1-9][0-9]{0,17}$",
86
- "type": "string"
87
- },
88
- "settleBy": {
89
- "description": "Instant the expectation stops waiting and the unmatched amount becomes a break",
90
- "format": "hyperscale-date-time",
91
- "type": "string"
92
- },
93
- "supplierAccountId": {
94
- "description": "The supplier account",
95
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
96
- "type": "string",
97
- "x-hyperscale-reference-filter": {
98
- "column": "role",
99
- "values": [
100
- "customer_balance"
101
- ]
102
- }
103
- },
104
- "supplierBeneficiaryId": {
105
- "description": "Beneficiary ID for the payout instruction",
106
- "pattern": "^ben_(sandbox|live)_[a-z0-9]{8,64}$",
107
- "type": "string"
108
- },
109
- "treasuryAccountId": {
110
- "description": "The treasury account the payout leaves",
111
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
112
- "type": "string",
113
- "x-hyperscale-reference-filter": {
114
- "column": "role",
115
- "values": [
116
- "customer_balance"
117
- ]
118
- }
119
- }
120
- },
121
- "id": "supplier_payout",
122
- "idPrefix": "sp",
123
- "lifecycle": {
124
- "initial": "created",
125
- "states": [
126
- "created",
127
- "instructed",
128
- "settled"
129
- ],
130
- "transitions": {
131
- "instruct": {
132
- "from": [
133
- "created"
134
- ],
135
- "to": "instructed"
136
- },
137
- "settle": {
138
- "from": [
139
- "instructed"
140
- ],
141
- "to": "settled"
142
- }
143
- }
144
- },
145
- "parties": {
146
- "beneficiary": "supplierAccountId",
147
- "payer": "treasuryAccountId"
148
- },
149
- "required": [
150
- "netPayable",
151
- "supplierAccountId",
152
- "supplierBeneficiaryId",
153
- "currency",
154
- "treasuryAccountId",
155
- "settleBy"
156
- ],
157
- "summary": "Payout from treasury to supplier that is not done until the bank agrees",
158
- "title": "Supplier payout"
159
- },
160
- {
161
- "actionOrder": [
162
- "create",
163
- "carry"
164
- ],
165
- "actions": {
166
- "carry": {
167
- "moves": [],
168
- "publicAction": "carrySupplierPayoutBreak",
169
- "requiresRefs": [
170
- {
171
- "field": "supplierPayoutId",
172
- "match": {
173
- "fields.currency": "fields.currency"
174
- },
175
- "statuses": [
176
- "instructed"
177
- ]
178
- }
179
- ],
180
- "steps": [],
181
- "summary": "Carry the break to whoever owns it"
182
- },
183
- "create": {
184
- "moves": [],
185
- "publicAction": "createSupplierPayoutBreak",
186
- "requiresRefs": [
187
- {
188
- "field": "supplierPayoutId",
189
- "match": {
190
- "fields.currency": "fields.currency"
191
- },
192
- "statuses": [
193
- "instructed"
194
- ]
195
- }
196
- ],
197
- "steps": [],
198
- "summary": "Raise a break against an instructed payout"
199
- }
200
- },
201
- "description": "One break raised when a payout expectation reached its window with no matching debit; it is carried, never silently dropped",
202
- "fields": {
203
- "breakReason": {
204
- "description": "Why the expectation went unmatched",
205
- "maxLength": 180,
206
- "minLength": 1,
207
- "type": "string"
208
- },
209
- "currency": {
210
- "description": "ISO 4217 currency code",
211
- "maxLength": 3,
212
- "minLength": 3,
213
- "pattern": "^[A-Z]{3}$",
214
- "type": "string"
215
- },
216
- "supplierPayoutId": {
217
- "description": "Payout whose expectation broke",
218
- "pattern": "^sp_(sandbox|live)_[a-z0-9]{8,64}$",
219
- "type": "string"
220
- },
221
- "unmatchedAmount": {
222
- "description": "Difference between the instructed amount and the evidence, in minor units",
223
- "pattern": "^[1-9][0-9]{0,17}$",
224
- "type": "string"
225
- }
226
- },
227
- "id": "supplier_payout_break",
228
- "idPrefix": "spbk",
229
- "lifecycle": {
230
- "initial": "created",
231
- "states": [
232
- "created",
233
- "carried"
234
- ],
235
- "transitions": {
236
- "carry": {
237
- "from": [
238
- "created"
239
- ],
240
- "to": "carried"
241
- }
242
- }
243
- },
244
- "required": [
245
- "breakReason",
246
- "currency",
247
- "unmatchedAmount",
248
- "supplierPayoutId"
249
- ],
250
- "summary": "Unmatched settlement expectation carried as its own row",
251
- "title": "Supplier payout Break"
252
- }
253
- ],
254
- "product": "supplier_settlement",
255
- "subjects": [],
256
- "title": "Supplier settlement",
257
- "udl": 1,
258
- "version": 1
259
- }
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL4002",
5
- "path": "$.instruments[0].piecePlan"
6
- }
7
- ],
8
- "summary": "A multi-piece plan must match a declared partition of its total.",
9
- "verdict": "invalid"
10
- }
@@ -1,305 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "create",
6
- "fund_piece",
7
- "payout_piece"
8
- ],
9
- "actions": {
10
- "create": {
11
- "moves": [],
12
- "steps": [],
13
- "summary": "Create watch instrument"
14
- },
15
- "fund_piece": {
16
- "calls": [
17
- {
18
- "action": "transfers.execute_fund",
19
- "bind": {
20
- "inst": "$instance",
21
- "p": "$piece"
22
- },
23
- "id": "call_fund"
24
- }
25
- ],
26
- "effects": {
27
- "moves": [
28
- {
29
- "signature": "moves.transfer.internal",
30
- "source": "fund_piece.call_fund.leaf_fund"
31
- }
32
- ]
33
- },
34
- "input": {
35
- "additionalProperties": false,
36
- "properties": {
37
- "pieceId": {
38
- "enum": [
39
- "p1",
40
- "p2"
41
- ],
42
- "type": "string"
43
- }
44
- },
45
- "required": [
46
- "pieceId"
47
- ],
48
- "type": "object"
49
- },
50
- "moves": [],
51
- "pieceStage": {
52
- "plan": "split_plan",
53
- "stage": "fund"
54
- },
55
- "steps": [],
56
- "summary": "Fund one piece in stage"
57
- },
58
- "payout_piece": {
59
- "calls": [
60
- {
61
- "action": "transfers.execute_release",
62
- "bind": {
63
- "inst": "$instance",
64
- "p": "$piece"
65
- },
66
- "id": "call_rel"
67
- }
68
- ],
69
- "effects": {
70
- "moves": [
71
- {
72
- "signature": "moves.transfer.internal",
73
- "source": "payout_piece.call_rel.leaf_rel"
74
- }
75
- ]
76
- },
77
- "input": {
78
- "additionalProperties": false,
79
- "properties": {
80
- "pieceId": {
81
- "enum": [
82
- "p1",
83
- "p2"
84
- ],
85
- "type": "string"
86
- }
87
- },
88
- "required": [
89
- "pieceId"
90
- ],
91
- "type": "object"
92
- },
93
- "moves": [],
94
- "pieceStage": {
95
- "plan": "split_plan",
96
- "stage": "release"
97
- },
98
- "steps": [],
99
- "summary": "Release piece"
100
- }
101
- },
102
- "actionLibrary": {
103
- "transfers": {
104
- "actionOrder": [
105
- "execute_fund",
106
- "execute_release"
107
- ],
108
- "actions": {
109
- "execute_fund": {
110
- "approval": "inherit",
111
- "calls": [],
112
- "leaves": [
113
- {
114
- "bind": {
115
- "amount": "$p.amount",
116
- "destinationAccountId": "$p.release_to",
117
- "sourceAccountId": "$inst.fields.buyerAccount"
118
- },
119
- "effects": [
120
- {
121
- "kind": "moves",
122
- "signature": "moves.transfer.internal"
123
- }
124
- ],
125
- "evidence": "bank transfer confirmation receipt",
126
- "id": "leaf_fund",
127
- "operation": "internal_transfer.create"
128
- }
129
- ],
130
- "order": [
131
- "leaf_fund"
132
- ],
133
- "parameters": {
134
- "inst": {
135
- "kind": "instance"
136
- },
137
- "p": {
138
- "kind": "piece"
139
- }
140
- },
141
- "principal": "api_key",
142
- "recovery": "local"
143
- },
144
- "execute_release": {
145
- "approval": "inherit",
146
- "calls": [],
147
- "leaves": [
148
- {
149
- "bind": {
150
- "amount": "$p.amount",
151
- "destinationAccountId": "$p.release_to",
152
- "sourceAccountId": "$inst.fields.escrowAccount"
153
- },
154
- "effects": [
155
- {
156
- "kind": "moves",
157
- "signature": "moves.transfer.internal"
158
- }
159
- ],
160
- "evidence": "release to payee confirmation",
161
- "id": "leaf_rel",
162
- "operation": "internal_transfer.create"
163
- }
164
- ],
165
- "order": [
166
- "leaf_rel"
167
- ],
168
- "parameters": {
169
- "inst": {
170
- "kind": "instance"
171
- },
172
- "p": {
173
- "kind": "piece"
174
- }
175
- },
176
- "principal": "api_key",
177
- "recovery": "local"
178
- }
179
- }
180
- }
181
- },
182
- "fields": {
183
- "buyerAccount": {
184
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
185
- "type": "string"
186
- },
187
- "currency": {
188
- "const": "USD",
189
- "pattern": "^[A-Z]{3}$",
190
- "type": "string"
191
- },
192
- "escrowAccount": {
193
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
194
- "type": "string"
195
- },
196
- "p1Amount": {
197
- "pattern": "^[1-9][0-9]{0,17}$",
198
- "type": "string",
199
- "x-hyperscale-currency": "USD"
200
- },
201
- "p1Refund": {
202
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
203
- "type": "string"
204
- },
205
- "p1Release": {
206
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
207
- "type": "string"
208
- },
209
- "p2Amount": {
210
- "pattern": "^[1-9][0-9]{0,17}$",
211
- "type": "string",
212
- "x-hyperscale-currency": "USD"
213
- },
214
- "p2Refund": {
215
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
216
- "type": "string"
217
- },
218
- "p2Release": {
219
- "pattern": "^acct_(sandbox|live)_[a-z0-9]{8,64}$",
220
- "type": "string"
221
- },
222
- "totalAmount": {
223
- "pattern": "^[1-9][0-9]{0,17}$",
224
- "type": "string",
225
- "x-hyperscale-currency": "USD"
226
- }
227
- },
228
- "id": "escrow_watch",
229
- "idPrefix": "ew",
230
- "lifecycle": {
231
- "initial": "draft",
232
- "states": [
233
- "draft",
234
- "funded",
235
- "released"
236
- ],
237
- "transitions": {
238
- "fund_piece": {
239
- "from": [
240
- "draft"
241
- ],
242
- "to": "funded"
243
- },
244
- "payout_piece": {
245
- "from": [
246
- "funded"
247
- ],
248
- "to": "released"
249
- }
250
- }
251
- },
252
- "piecePlan": {
253
- "fund_order": [
254
- "p1",
255
- "p2"
256
- ],
257
- "id": "split_plan",
258
- "pieces": [
259
- {
260
- "amount": "p1Amount",
261
- "id": "p1",
262
- "refund_to": "p1Refund",
263
- "release_to": "p1Release"
264
- },
265
- {
266
- "amount": "p2Amount",
267
- "id": "p2",
268
- "refund_to": "p2Refund",
269
- "release_to": "p2Release"
270
- }
271
- ],
272
- "refund_order": [
273
- "p1"
274
- ],
275
- "release_order": [
276
- "p1",
277
- "p2"
278
- ],
279
- "total": "totalAmount",
280
- "unfund_order": [
281
- "p2",
282
- "p1"
283
- ]
284
- },
285
- "required": [
286
- "totalAmount",
287
- "p1Amount",
288
- "p2Amount",
289
- "p1Release",
290
- "p1Refund",
291
- "p2Release",
292
- "p2Refund",
293
- "buyerAccount",
294
- "escrowAccount"
295
- ],
296
- "summary": "Escrow watch contract with piece plan",
297
- "title": "Escrow Watch"
298
- }
299
- ],
300
- "product": "escrow_watch",
301
- "subjects": [],
302
- "title": "Escrow Watch Document",
303
- "udl": 1,
304
- "version": 1
305
- }
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL2012",
5
- "path": "$.instruments[0].actionLibrary.transfers.actions.execute_fund.approval"
6
- }
7
- ],
8
- "summary": "A private action inherits the public action's approval; it cannot declare its own.",
9
- "verdict": "invalid"
10
- }