@suveren/gateway 0.7.6 → 0.8.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 (161) hide show
  1. package/content/integrations/mollie.json +103 -28
  2. package/dist/mcp-server/http.mjs +228 -118
  3. package/dist/ui/assets/{index-CsrM6RQr.js → index-BFnSVa9N.js} +22 -22
  4. package/dist/ui/index.html +1 -1
  5. package/node_modules/@hap/core/dist/index.d.mts +29 -6
  6. package/node_modules/@hap/core/dist/index.d.ts +29 -6
  7. package/node_modules/@hap/core/dist/index.js +54 -8
  8. package/node_modules/@hap/core/dist/index.mjs +53 -8
  9. package/node_modules/@hap/core/package.json +2 -1
  10. package/node_modules/@hap/core/src/frame.ts +115 -14
  11. package/node_modules/@hap/core/src/gatekeeper.ts +26 -0
  12. package/node_modules/@hap/core/src/types.ts +7 -1
  13. package/node_modules/@types/node/README.md +1 -1
  14. package/node_modules/@types/node/buffer.buffer.d.ts +5 -0
  15. package/node_modules/@types/node/crypto.d.ts +0 -2
  16. package/node_modules/@types/node/dgram.d.ts +119 -4
  17. package/node_modules/@types/node/ffi.d.ts +1 -1
  18. package/node_modules/@types/node/fs/promises.d.ts +61 -65
  19. package/node_modules/@types/node/fs.d.ts +86 -76
  20. package/node_modules/@types/node/http.d.ts +1 -1
  21. package/node_modules/@types/node/http2.d.ts +2 -2
  22. package/node_modules/@types/node/index.d.ts +1 -0
  23. package/node_modules/@types/node/inspector.d.ts +2 -1
  24. package/node_modules/@types/node/net.d.ts +108 -16
  25. package/node_modules/@types/node/package.json +2 -2
  26. package/node_modules/@types/node/quic.d.ts +37 -11
  27. package/node_modules/@types/node/stream/iter.d.ts +4 -4
  28. package/node_modules/@types/node/tls.d.ts +24 -0
  29. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  30. package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  31. package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  32. package/node_modules/@types/node/tty.d.ts +4 -3
  33. package/node_modules/@types/node/vfs.d.ts +210 -0
  34. package/node_modules/@types/node/vm.d.ts +1 -1
  35. package/node_modules/express-rate-limit/dist/index.cjs +6 -3
  36. package/node_modules/express-rate-limit/dist/index.d.cts +11 -0
  37. package/node_modules/express-rate-limit/dist/index.d.mts +11 -0
  38. package/node_modules/express-rate-limit/dist/index.d.ts +11 -0
  39. package/node_modules/express-rate-limit/dist/index.mjs +6 -3
  40. package/node_modules/express-rate-limit/{license.md → license} +7 -6
  41. package/node_modules/express-rate-limit/package.json +5 -5
  42. package/node_modules/express-rate-limit/readme.md +1 -0
  43. package/node_modules/fast-uri/index.js +20 -5
  44. package/node_modules/fast-uri/lib/utils.js +8 -1
  45. package/node_modules/fast-uri/package.json +1 -1
  46. package/node_modules/fast-uri/test/component-safe-serialization.test.js +58 -0
  47. package/node_modules/fast-uri/test/ipv6-validation.test.js +34 -0
  48. package/node_modules/ip-address/README.md +92 -82
  49. package/node_modules/ip-address/dist/common.d.ts +20 -0
  50. package/node_modules/ip-address/dist/common.js +36 -0
  51. package/node_modules/ip-address/dist/common.js.map +1 -1
  52. package/node_modules/ip-address/dist/ipv4.d.ts +50 -0
  53. package/node_modules/ip-address/dist/ipv4.js +75 -0
  54. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  55. package/node_modules/ip-address/dist/ipv6.d.ts +79 -10
  56. package/node_modules/ip-address/dist/ipv6.js +120 -30
  57. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  58. package/node_modules/ip-address/dist/v4/constants.d.ts +12 -0
  59. package/node_modules/ip-address/dist/v4/constants.js +40 -1
  60. package/node_modules/ip-address/dist/v4/constants.js.map +1 -1
  61. package/node_modules/ip-address/dist/v6/constants.d.ts +14 -0
  62. package/node_modules/ip-address/dist/v6/constants.js +47 -1
  63. package/node_modules/ip-address/dist/v6/constants.js.map +1 -1
  64. package/node_modules/ip-address/package.json +1 -1
  65. package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -16
  66. package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +6 -17
  67. package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -16
  68. package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +11 -34
  69. package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +7 -16
  70. package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +15 -35
  71. package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -8
  72. package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +5 -5
  73. package/node_modules/jose/dist/types/jwks/local.d.ts +6 -10
  74. package/node_modules/jose/dist/types/jwks/remote.d.ts +13 -24
  75. package/node_modules/jose/dist/types/jws/compact/sign.d.ts +5 -10
  76. package/node_modules/jose/dist/types/jws/compact/verify.d.ts +9 -18
  77. package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +7 -16
  78. package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +9 -18
  79. package/node_modules/jose/dist/types/jws/general/sign.d.ts +11 -21
  80. package/node_modules/jose/dist/types/jws/general/verify.d.ts +9 -18
  81. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +10 -20
  82. package/node_modules/jose/dist/types/jwt/encrypt.d.ts +6 -13
  83. package/node_modules/jose/dist/types/jwt/sign.d.ts +5 -6
  84. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +9 -14
  85. package/node_modules/jose/dist/types/jwt/verify.d.ts +9 -19
  86. package/node_modules/jose/dist/types/key/export.d.ts +4 -4
  87. package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +6 -8
  88. package/node_modules/jose/dist/types/key/generate_secret.d.ts +4 -11
  89. package/node_modules/jose/dist/types/key/import.d.ts +10 -17
  90. package/node_modules/jose/dist/types/types.d.ts +44 -84
  91. package/node_modules/jose/dist/types/util/base64url.d.ts +2 -2
  92. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +3 -10
  93. package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -4
  94. package/node_modules/jose/dist/types/util/errors.d.ts +26 -53
  95. package/node_modules/jose/dist/webapi/index.js +70 -32
  96. package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +7 -8
  97. package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +42 -48
  98. package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +14 -14
  99. package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +53 -64
  100. package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +38 -49
  101. package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +121 -169
  102. package/node_modules/jose/dist/webapi/jwk/embedded.js +30 -32
  103. package/node_modules/jose/dist/webapi/jwk/thumbprint.js +54 -70
  104. package/node_modules/jose/dist/webapi/jwks/local.js +47 -64
  105. package/node_modules/jose/dist/webapi/jwks/remote.js +88 -136
  106. package/node_modules/jose/dist/webapi/jws/compact/sign.js +21 -21
  107. package/node_modules/jose/dist/webapi/jws/compact/verify.js +7 -8
  108. package/node_modules/jose/dist/webapi/jws/flattened/sign.js +29 -31
  109. package/node_modules/jose/dist/webapi/jws/flattened/verify.js +21 -24
  110. package/node_modules/jose/dist/webapi/jws/general/sign.js +61 -72
  111. package/node_modules/jose/dist/webapi/jws/general/verify.js +45 -69
  112. package/node_modules/jose/dist/webapi/jwt/decrypt.js +13 -20
  113. package/node_modules/jose/dist/webapi/jwt/encrypt.js +57 -70
  114. package/node_modules/jose/dist/webapi/jwt/sign.js +17 -16
  115. package/node_modules/jose/dist/webapi/jwt/unsecured.js +32 -40
  116. package/node_modules/jose/dist/webapi/jwt/verify.js +12 -14
  117. package/node_modules/jose/dist/webapi/key/export.js +32 -37
  118. package/node_modules/jose/dist/webapi/key/generate_key_pair.js +40 -48
  119. package/node_modules/jose/dist/webapi/key/generate_secret.js +35 -40
  120. package/node_modules/jose/dist/webapi/key/import.js +52 -56
  121. package/node_modules/jose/dist/webapi/lib/asn1.js +130 -169
  122. package/node_modules/jose/dist/webapi/lib/base64.js +18 -20
  123. package/node_modules/jose/dist/webapi/lib/buffer_utils.js +34 -38
  124. package/node_modules/jose/dist/webapi/lib/content_encryption.js +79 -115
  125. package/node_modules/jose/dist/webapi/lib/crypto_key.js +24 -25
  126. package/node_modules/jose/dist/webapi/lib/deflate.js +45 -47
  127. package/node_modules/jose/dist/webapi/lib/helpers.js +40 -37
  128. package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +10 -24
  129. package/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -15
  130. package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +106 -93
  131. package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +207 -230
  132. package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +104 -138
  133. package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +17 -18
  134. package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +9 -16
  135. package/node_modules/jose/dist/webapi/lib/jws_algorithms.js +62 -61
  136. package/node_modules/jose/dist/webapi/lib/jws_sign.js +50 -75
  137. package/node_modules/jose/dist/webapi/lib/jws_verify.js +80 -125
  138. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +123 -209
  139. package/node_modules/jose/dist/webapi/lib/key.js +84 -136
  140. package/node_modules/jose/dist/webapi/lib/key_algorithm.js +13 -8
  141. package/node_modules/jose/dist/webapi/lib/key_descriptor.js +8 -6
  142. package/node_modules/jose/dist/webapi/lib/key_management.js +200 -231
  143. package/node_modules/jose/dist/webapi/lib/key_options.js +7 -5
  144. package/node_modules/jose/dist/webapi/lib/options.js +55 -68
  145. package/node_modules/jose/dist/webapi/lib/signing.js +18 -22
  146. package/node_modules/jose/dist/webapi/lib/type_checks.js +26 -29
  147. package/node_modules/jose/dist/webapi/util/base64url.js +26 -35
  148. package/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -31
  149. package/node_modules/jose/dist/webapi/util/decode_protected_header.js +18 -23
  150. package/node_modules/jose/dist/webapi/util/errors.js +94 -84
  151. package/node_modules/jose/package.json +17 -81
  152. package/package.json +2 -2
  153. package/profiles/calendar/0.5.profile.json +190 -0
  154. package/profiles/charge/0.5.profile.json +210 -0
  155. package/profiles/customers/0.7.profile.json +157 -0
  156. package/profiles/deploy/0.9.profile.json +176 -0
  157. package/profiles/email/0.6.profile.json +208 -0
  158. package/profiles/index.json +9 -1
  159. package/profiles/publish/0.5.profile.json +186 -0
  160. package/profiles/purchase/0.5.profile.json +231 -0
  161. package/profiles/records/0.5.profile.json +117 -0
@@ -0,0 +1,176 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/deploy@0.9",
3
+ "name": "Deploy",
4
+ "version": "0.9",
5
+ "description": "Authority to make an already-built version live. Successor to deploy@0.6, which gated 'build and deploy this commit'; this gates the act of putting something in front of real users, because building is not consequential and going live is. The action is a RELEASE: it activates bytes that already exist, so the human can look at the artifact before approving and no rebuild can diverge from what was approved. Host-agnostic — the artifact identifier is a Vercel deployment id, a container image digest, an Azure slot — named by the connector manifest, never here.",
6
+ "boundsSchema": {
7
+ "actionTypes": [
8
+ "release"
9
+ ],
10
+ "keyOrder": [
11
+ "profile",
12
+ "release_daily_max",
13
+ "rollback_allowed"
14
+ ],
15
+ "fields": {
16
+ "profile": {
17
+ "type": "string",
18
+ "required": true
19
+ },
20
+ "release_daily_max": {
21
+ "type": "number",
22
+ "required": true,
23
+ "displayName": "Times per day something may go live",
24
+ "description": "How often the agent may make a build live for real users. Counted by the Authority Server, so a compromised gateway cannot exceed it. Building a preview is NOT counted: previews harm nobody, and charging them against this limit would exhaust it before anything reached anyone.",
25
+ "unit": "count",
26
+ "boundType": {
27
+ "kind": "cumulative_count",
28
+ "window": "daily"
29
+ },
30
+ "appliesTo": [
31
+ "release"
32
+ ]
33
+ },
34
+ "rollback_allowed": {
35
+ "type": "string",
36
+ "required": true,
37
+ "displayName": "May put a previous version back live",
38
+ "description": "Whether the agent may promote a PREVIOUS artifact back to live. Its own action type: reverting carries different risk from releasing, and the artifact being restored was approved for a moment that has passed.",
39
+ "enum": [
40
+ "yes",
41
+ "no"
42
+ ],
43
+ "boundType": {
44
+ "kind": "enum",
45
+ "values": [
46
+ "yes",
47
+ "no"
48
+ ]
49
+ }
50
+ }
51
+ }
52
+ },
53
+ "contextSchema": {
54
+ "keyOrder": [
55
+ "allowed_repos",
56
+ "allowed_environments",
57
+ "allowed_workflows",
58
+ "allowed_branches"
59
+ ],
60
+ "fields": {
61
+ "allowed_repos": {
62
+ "type": "string",
63
+ "required": true,
64
+ "displayName": "Allowed repositories",
65
+ "description": "Repositories the agent may deploy from, e.g. humanagencyprotocol/hap",
66
+ "constraint": {
67
+ "type": "string",
68
+ "enforceable": [
69
+ "subset"
70
+ ]
71
+ }
72
+ },
73
+ "allowed_environments": {
74
+ "type": "string",
75
+ "required": true,
76
+ "displayName": "Allowed environments",
77
+ "description": "Deployment targets the agent may reach. Deliberately NOT an enum: hosts disagree — GitHub uses names you define, Vercel has production and preview, Netlify has deploy-preview and branch-deploy. The connector discovers the real list.",
78
+ "constraint": {
79
+ "type": "string",
80
+ "enforceable": [
81
+ "subset"
82
+ ]
83
+ }
84
+ },
85
+ "allowed_workflows": {
86
+ "type": "string",
87
+ "required": true,
88
+ "displayName": "Allowed pipelines",
89
+ "description": "Named pipelines the agent may run, e.g. deploy.yml. Scoping by pipeline rather than by 'deploy' means adding CI later — a migration, an infrastructure apply — is an edit to this list, not a new profile. The limit of this approach: the grant knows a pipeline is permitted, not what it does. The name has to carry that meaning to the human signing.",
90
+ "constraint": {
91
+ "type": "string",
92
+ "enforceable": [
93
+ "subset"
94
+ ]
95
+ }
96
+ },
97
+ "allowed_branches": {
98
+ "type": "string",
99
+ "required": false,
100
+ "displayName": "Allowed branches",
101
+ "description": "Branches a deployable commit may come from. Optional: a host with no branch concept leaves it empty.",
102
+ "constraint": {
103
+ "type": "string",
104
+ "enforceable": [
105
+ "subset"
106
+ ]
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "executionContextSchema": {
112
+ "fields": {
113
+ "action_type": {
114
+ "source": "static",
115
+ "description": "release or rollback — declared by the manifest, never taken from an agent argument",
116
+ "required": true,
117
+ "constraint": {
118
+ "type": "string",
119
+ "enforceable": [
120
+ "equals"
121
+ ]
122
+ }
123
+ },
124
+ "allowed_repos": {
125
+ "source": "declared",
126
+ "description": "Repository this action targets, checked against the authorized set",
127
+ "required": true,
128
+ "constraint": {
129
+ "type": "string",
130
+ "enforceable": [
131
+ "subset"
132
+ ]
133
+ }
134
+ },
135
+ "allowed_environments": {
136
+ "source": "declared",
137
+ "description": "Environment this action targets, checked against the authorized set. Recorded in the receipt, so the proof names where the release went.",
138
+ "required": true,
139
+ "constraint": {
140
+ "type": "string",
141
+ "enforceable": [
142
+ "subset"
143
+ ]
144
+ }
145
+ },
146
+ "allowed_workflows": {
147
+ "source": "declared",
148
+ "description": "Pipeline this action runs, checked against the authorized set. Recorded in the receipt, so the proof names what ran.",
149
+ "required": true,
150
+ "constraint": {
151
+ "type": "string",
152
+ "enforceable": [
153
+ "subset"
154
+ ]
155
+ }
156
+ }
157
+ }
158
+ },
159
+ "requiredGates": [
160
+ "bounds",
161
+ "intent",
162
+ "commitment",
163
+ "decision_owner"
164
+ ],
165
+ "ttl": {
166
+ "default": 2592000,
167
+ "max": 31536000
168
+ },
169
+ "retention_minimum": 7776000,
170
+ "content_binding": {
171
+ "version": "1",
172
+ "kind": "text"
173
+ },
174
+ "receipt_lookup": true,
175
+ "whatsNew": "Binds the source commit the build came from, not only the artifact address. A released page can show its commit but never its own deployment URL, so this is what lets a reader tie the page they are on to the approval that put it there."
176
+ }
@@ -0,0 +1,208 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/email@0.6",
3
+ "name": "Email",
4
+ "version": "0.6",
5
+ "description": "Email authority — governs sending, drafting, and reading email via Gmail",
6
+ "whatsNew": "Binds the recipients to the receipt, not only the message body — an approved message can no longer be delivered to someone else without breaking the proof.",
7
+ "boundsSchema": {
8
+ "actionTypes": [
9
+ "delete",
10
+ "send"
11
+ ],
12
+ "keyOrder": [
13
+ "profile",
14
+ "recipient_max",
15
+ "send_daily_max",
16
+ "read_max_age_days",
17
+ "read_daily_max"
18
+ ],
19
+ "fields": {
20
+ "profile": {
21
+ "type": "string",
22
+ "required": true
23
+ },
24
+ "recipient_max": {
25
+ "type": "number",
26
+ "required": false,
27
+ "displayName": "Recipients per email",
28
+ "description": "Maximum recipients per email",
29
+ "unit": "count",
30
+ "boundType": {
31
+ "kind": "per_transaction",
32
+ "of": "recipient_count"
33
+ },
34
+ "paths": [
35
+ "email-send",
36
+ "email-draft"
37
+ ]
38
+ },
39
+ "send_daily_max": {
40
+ "type": "number",
41
+ "required": false,
42
+ "displayName": "Daily send limit",
43
+ "description": "Maximum emails sent or drafted per day",
44
+ "unit": "count",
45
+ "boundType": {
46
+ "kind": "cumulative_count",
47
+ "window": "daily"
48
+ },
49
+ "paths": [
50
+ "email-send",
51
+ "email-draft"
52
+ ],
53
+ "appliesTo": [
54
+ "send"
55
+ ]
56
+ },
57
+ "read_max_age_days": {
58
+ "type": "number",
59
+ "required": false,
60
+ "displayName": "Max email age (days)",
61
+ "description": "Maximum age in days for email search. Enforced locally by the Gatekeeper, never by the Authority Server: reads carry no receipt, so no signed check ever reads this value. Set it on the integration instead, where it is live-editable. Kept in the schema as the fallback for grants issued before that setting existed.",
62
+ "unit": "days",
63
+ "enforcedBy": "gatekeeper",
64
+ "boundType": {
65
+ "kind": "per_transaction",
66
+ "of": "read_age_days"
67
+ },
68
+ "paths": [
69
+ "email-read"
70
+ ]
71
+ },
72
+ "read_daily_max": {
73
+ "type": "number",
74
+ "required": false,
75
+ "displayName": "Daily read limit",
76
+ "description": "Not currently enforced: reads carry no receipt, so no component counts them. Hidden from the authorization editor until enforcement exists.",
77
+ "unit": "count",
78
+ "boundType": {
79
+ "kind": "cumulative_count",
80
+ "window": "daily"
81
+ },
82
+ "paths": [
83
+ "email-read"
84
+ ],
85
+ "enforced": false,
86
+ "appliesTo": []
87
+ }
88
+ }
89
+ },
90
+ "contextSchema": {
91
+ "keyOrder": [
92
+ "allowed_recipients",
93
+ "allowed_domains"
94
+ ],
95
+ "fields": {
96
+ "allowed_recipients": {
97
+ "type": "string",
98
+ "required": false,
99
+ "displayName": "Allowed recipients",
100
+ "format": "email",
101
+ "description": "Comma-separated list of allowed email addresses",
102
+ "constraint": {
103
+ "type": "string",
104
+ "enforceable": [
105
+ "subset"
106
+ ],
107
+ "requiredFor": [
108
+ "send"
109
+ ]
110
+ }
111
+ },
112
+ "allowed_domains": {
113
+ "type": "string",
114
+ "required": false,
115
+ "displayName": "Allowed domains",
116
+ "format": "domain",
117
+ "description": "Comma-separated list of allowed recipient domains (e.g. acme.com,partner.org)",
118
+ "constraint": {
119
+ "type": "string",
120
+ "enforceable": [
121
+ "subset"
122
+ ],
123
+ "requiredFor": [
124
+ "send"
125
+ ]
126
+ }
127
+ }
128
+ }
129
+ },
130
+ "executionContextSchema": {
131
+ "fields": {
132
+ "recipient_count": {
133
+ "source": "declared",
134
+ "description": "Number of recipients in this email",
135
+ "required": true,
136
+ "constraint": {
137
+ "type": "number",
138
+ "enforceable": [
139
+ "max"
140
+ ]
141
+ }
142
+ },
143
+ "allowed_recipients": {
144
+ "source": "declared",
145
+ "description": "Comma-separated recipient addresses from this call (checked against context)",
146
+ "required": false,
147
+ "constraint": {
148
+ "type": "string",
149
+ "enforceable": [
150
+ "subset"
151
+ ]
152
+ }
153
+ },
154
+ "allowed_domains": {
155
+ "source": "declared",
156
+ "description": "Comma-separated unique recipient domains from this call (checked against context)",
157
+ "required": false,
158
+ "constraint": {
159
+ "type": "string",
160
+ "enforceable": [
161
+ "subset"
162
+ ]
163
+ }
164
+ },
165
+ "send_count_daily": {
166
+ "source": "cumulative",
167
+ "cumulativeField": "_count",
168
+ "window": "daily",
169
+ "description": "Running daily send/draft count (resolved from execution log)",
170
+ "required": true,
171
+ "constraint": {
172
+ "type": "number",
173
+ "enforceable": [
174
+ "max"
175
+ ]
176
+ }
177
+ }
178
+ }
179
+ },
180
+ "requiredGates": [
181
+ "bounds",
182
+ "intent",
183
+ "commitment",
184
+ "decision_owner"
185
+ ],
186
+ "ttl": {
187
+ "default": 86400,
188
+ "max": 31536000
189
+ },
190
+ "retention_minimum": 7776000,
191
+ "content_binding": {
192
+ "version": "2",
193
+ "kind": "jcs",
194
+ "fields": [
195
+ "to",
196
+ "cc",
197
+ "subject",
198
+ "body"
199
+ ],
200
+ "required_fields": [
201
+ "to",
202
+ "body"
203
+ ],
204
+ "appliesTo": [
205
+ "send"
206
+ ]
207
+ }
208
+ }
@@ -13,6 +13,14 @@
13
13
  "github.com/humanagencyprotocol/hap-profiles/records@0.4": "records/0.4.profile.json",
14
14
  "github.com/humanagencyprotocol/hap-profiles/deploy@0.6": "deploy/0.6.profile.json",
15
15
  "github.com/humanagencyprotocol/hap-profiles/deploy@0.7": "deploy/0.7.profile.json",
16
- "github.com/humanagencyprotocol/hap-profiles/deploy@0.8": "deploy/0.8.profile.json"
16
+ "github.com/humanagencyprotocol/hap-profiles/deploy@0.8": "deploy/0.8.profile.json",
17
+ "github.com/humanagencyprotocol/hap-profiles/calendar@0.5": "calendar/0.5.profile.json",
18
+ "github.com/humanagencyprotocol/hap-profiles/records@0.5": "records/0.5.profile.json",
19
+ "github.com/humanagencyprotocol/hap-profiles/publish@0.5": "publish/0.5.profile.json",
20
+ "github.com/humanagencyprotocol/hap-profiles/purchase@0.5": "purchase/0.5.profile.json",
21
+ "github.com/humanagencyprotocol/hap-profiles/email@0.6": "email/0.6.profile.json",
22
+ "github.com/humanagencyprotocol/hap-profiles/customers@0.7": "customers/0.7.profile.json",
23
+ "github.com/humanagencyprotocol/hap-profiles/deploy@0.9": "deploy/0.9.profile.json",
24
+ "github.com/humanagencyprotocol/hap-profiles/charge@0.5": "charge/0.5.profile.json"
17
25
  }
18
26
  }
@@ -0,0 +1,186 @@
1
+ {
2
+ "id": "github.com/humanagencyprotocol/hap-profiles/publish@0.5",
3
+ "name": "Content Publishing",
4
+ "version": "0.5",
5
+ "description": "Publishing authority — governs posting public content to social media, blogs, and other platforms",
6
+ "boundsSchema": {
7
+ "actionTypes": [
8
+ "delete",
9
+ "post"
10
+ ],
11
+ "keyOrder": [
12
+ "profile",
13
+ "post_daily_max",
14
+ "post_monthly_max"
15
+ ],
16
+ "fields": {
17
+ "profile": {
18
+ "type": "string",
19
+ "required": true
20
+ },
21
+ "post_daily_max": {
22
+ "type": "number",
23
+ "required": true,
24
+ "displayName": "Daily post limit",
25
+ "description": "Maximum posts published per day",
26
+ "unit": "count",
27
+ "boundType": {
28
+ "kind": "cumulative_count",
29
+ "window": "daily"
30
+ },
31
+ "appliesTo": [
32
+ "post"
33
+ ]
34
+ },
35
+ "post_monthly_max": {
36
+ "type": "number",
37
+ "required": true,
38
+ "displayName": "Monthly post limit",
39
+ "description": "Maximum posts published per month",
40
+ "unit": "count",
41
+ "boundType": {
42
+ "kind": "cumulative_count",
43
+ "window": "monthly"
44
+ },
45
+ "appliesTo": [
46
+ "post"
47
+ ]
48
+ }
49
+ }
50
+ },
51
+ "contextSchema": {
52
+ "keyOrder": [
53
+ "allowed_platforms",
54
+ "content_type",
55
+ "audience"
56
+ ],
57
+ "fields": {
58
+ "allowed_platforms": {
59
+ "type": "string",
60
+ "required": true,
61
+ "displayName": "Platforms",
62
+ "description": "Authorized publishing platforms",
63
+ "enum": [
64
+ "linkedin"
65
+ ],
66
+ "constraint": {
67
+ "type": "string",
68
+ "enforceable": [
69
+ "subset"
70
+ ]
71
+ }
72
+ },
73
+ "content_type": {
74
+ "type": "string",
75
+ "required": true,
76
+ "displayName": "Content types",
77
+ "description": "Authorized content formats",
78
+ "enum": [
79
+ "text",
80
+ "image",
81
+ "article"
82
+ ],
83
+ "constraint": {
84
+ "type": "string",
85
+ "enforceable": [
86
+ "subset"
87
+ ]
88
+ }
89
+ },
90
+ "audience": {
91
+ "type": "string",
92
+ "required": true,
93
+ "displayName": "Audience",
94
+ "description": "Authorized audience visibility",
95
+ "enum": [
96
+ "public",
97
+ "connections"
98
+ ],
99
+ "constraint": {
100
+ "type": "string",
101
+ "enforceable": [
102
+ "subset"
103
+ ]
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "executionContextSchema": {
109
+ "fields": {
110
+ "allowed_platforms": {
111
+ "source": "declared",
112
+ "description": "Platform being published to (checked against authorized platforms)",
113
+ "required": true,
114
+ "constraint": {
115
+ "type": "string",
116
+ "enforceable": [
117
+ "subset"
118
+ ]
119
+ }
120
+ },
121
+ "content_type": {
122
+ "source": "declared",
123
+ "description": "Content format being published",
124
+ "required": true,
125
+ "constraint": {
126
+ "type": "string",
127
+ "enforceable": [
128
+ "subset"
129
+ ]
130
+ }
131
+ },
132
+ "audience": {
133
+ "source": "declared",
134
+ "description": "Audience visibility for this post",
135
+ "required": true,
136
+ "constraint": {
137
+ "type": "string",
138
+ "enforceable": [
139
+ "subset"
140
+ ]
141
+ }
142
+ },
143
+ "post_count_daily": {
144
+ "source": "cumulative",
145
+ "cumulativeField": "_count",
146
+ "window": "daily",
147
+ "description": "Running daily post count (resolved from execution log)",
148
+ "required": true,
149
+ "constraint": {
150
+ "type": "number",
151
+ "enforceable": [
152
+ "max"
153
+ ]
154
+ }
155
+ },
156
+ "post_count_monthly": {
157
+ "source": "cumulative",
158
+ "cumulativeField": "_count",
159
+ "window": "monthly",
160
+ "description": "Running monthly post count (resolved from execution log)",
161
+ "required": true,
162
+ "constraint": {
163
+ "type": "number",
164
+ "enforceable": [
165
+ "max"
166
+ ]
167
+ }
168
+ }
169
+ }
170
+ },
171
+ "requiredGates": [
172
+ "bounds",
173
+ "intent",
174
+ "commitment",
175
+ "decision_owner"
176
+ ],
177
+ "ttl": {
178
+ "default": 86400,
179
+ "max": 31536000
180
+ },
181
+ "retention_minimum": 7776000,
182
+ "content_binding": {
183
+ "version": "1",
184
+ "kind": "text"
185
+ }
186
+ }