@kya-os/contracts 1.5.4-canary.3 → 1.6.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/dist/agentshield-api/admin-schemas.d.ts +2 -8
- package/dist/agentshield-api/admin-schemas.js +0 -2
- package/dist/agentshield-api/admin-types.d.ts +0 -4
- package/dist/agentshield-api/index.d.ts +1 -1
- package/dist/agentshield-api/schemas.d.ts +150 -48
- package/dist/agentshield-api/schemas.js +32 -4
- package/dist/agentshield-api/types.d.ts +31 -4
- package/dist/audit/index.d.ts +193 -0
- package/dist/audit/index.js +100 -0
- package/dist/config/identity.d.ts +214 -2
- package/dist/config/identity.js +29 -0
- package/dist/config/index.d.ts +2 -1
- package/dist/config/tool-context.d.ts +34 -0
- package/dist/config/tool-context.js +13 -0
- package/dist/consent/schemas.d.ts +176 -79
- package/dist/consent/schemas.js +139 -66
- package/dist/dashboard-config/schemas.d.ts +1949 -693
- package/dist/handshake.d.ts +14 -14
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/tool-protection/index.d.ts +478 -2
- package/dist/tool-protection/index.js +89 -2
- package/dist/verifier/index.d.ts +1 -0
- package/dist/verifier/index.js +18 -0
- package/dist/well-known/index.d.ts +2 -2
- package/package.json +63 -120
package/dist/consent/schemas.js
CHANGED
|
@@ -20,58 +20,79 @@ const zod_1 = require("zod");
|
|
|
20
20
|
exports.consentBrandingSchema = zod_1.z.object({
|
|
21
21
|
primaryColor: zod_1.z
|
|
22
22
|
.string()
|
|
23
|
-
.regex(/^#[0-9A-Fa-f]{6}$/,
|
|
23
|
+
.regex(/^#[0-9A-Fa-f]{6}$/, "Must be a valid hex color (e.g., #0066CC)")
|
|
24
24
|
.optional(),
|
|
25
|
-
logoUrl: zod_1.z.string().url(
|
|
26
|
-
companyName: zod_1.z
|
|
27
|
-
|
|
25
|
+
logoUrl: zod_1.z.string().url("Must be a valid URL").optional(),
|
|
26
|
+
companyName: zod_1.z
|
|
27
|
+
.string()
|
|
28
|
+
.max(100, "Company name must be 100 characters or less")
|
|
29
|
+
.optional(),
|
|
30
|
+
theme: zod_1.z.enum(["light", "dark", "auto"]).optional(),
|
|
28
31
|
});
|
|
29
32
|
/**
|
|
30
33
|
* Consent Terms Schema
|
|
31
34
|
*/
|
|
32
35
|
exports.consentTermsSchema = zod_1.z.object({
|
|
33
|
-
text: zod_1.z
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
text: zod_1.z
|
|
37
|
+
.string()
|
|
38
|
+
.max(10000, "Terms text must be 10000 characters or less")
|
|
39
|
+
.optional(),
|
|
40
|
+
url: zod_1.z.string().url("Must be a valid URL").optional(),
|
|
41
|
+
version: zod_1.z
|
|
42
|
+
.string()
|
|
43
|
+
.max(50, "Version must be 50 characters or less")
|
|
44
|
+
.optional(),
|
|
36
45
|
required: zod_1.z.boolean().default(true),
|
|
37
46
|
});
|
|
38
47
|
/**
|
|
39
48
|
* Consent Custom Field Option Schema
|
|
40
49
|
*/
|
|
41
50
|
exports.consentCustomFieldOptionSchema = zod_1.z.object({
|
|
42
|
-
value: zod_1.z.string().max(100,
|
|
43
|
-
label: zod_1.z.string().max(100,
|
|
51
|
+
value: zod_1.z.string().max(100, "Option value must be 100 characters or less"),
|
|
52
|
+
label: zod_1.z.string().max(100, "Option label must be 100 characters or less"),
|
|
44
53
|
});
|
|
45
54
|
/**
|
|
46
55
|
* Consent Custom Field Schema
|
|
47
56
|
*/
|
|
48
|
-
exports.consentCustomFieldSchema = zod_1.z
|
|
57
|
+
exports.consentCustomFieldSchema = zod_1.z
|
|
58
|
+
.object({
|
|
49
59
|
name: zod_1.z
|
|
50
60
|
.string()
|
|
51
|
-
.min(1,
|
|
52
|
-
.max(50,
|
|
53
|
-
.regex(/^[a-zA-Z0-9_]+$/,
|
|
54
|
-
label: zod_1.z
|
|
55
|
-
|
|
61
|
+
.min(1, "Field name is required")
|
|
62
|
+
.max(50, "Field name must be 50 characters or less")
|
|
63
|
+
.regex(/^[a-zA-Z0-9_]+$/, "Field name must contain only letters, numbers, and underscores"),
|
|
64
|
+
label: zod_1.z
|
|
65
|
+
.string()
|
|
66
|
+
.min(1, "Field label is required")
|
|
67
|
+
.max(100, "Field label must be 100 characters or less"),
|
|
68
|
+
type: zod_1.z.enum(["text", "textarea", "checkbox", "select"]),
|
|
56
69
|
required: zod_1.z.boolean(),
|
|
57
|
-
placeholder: zod_1.z
|
|
70
|
+
placeholder: zod_1.z
|
|
71
|
+
.string()
|
|
72
|
+
.max(200, "Placeholder must be 200 characters or less")
|
|
73
|
+
.optional(),
|
|
58
74
|
options: zod_1.z
|
|
59
75
|
.array(exports.consentCustomFieldOptionSchema)
|
|
60
|
-
.min(1,
|
|
76
|
+
.min(1, "Select fields must have at least one option")
|
|
77
|
+
.optional(),
|
|
78
|
+
pattern: zod_1.z
|
|
79
|
+
.string()
|
|
80
|
+
.max(500, "Pattern must be 500 characters or less")
|
|
61
81
|
.optional(),
|
|
62
|
-
|
|
63
|
-
|
|
82
|
+
})
|
|
83
|
+
.refine((data) => {
|
|
64
84
|
// Select fields must have options
|
|
65
|
-
if (data.type ===
|
|
85
|
+
if (data.type === "select" &&
|
|
86
|
+
(!data.options || data.options.length === 0)) {
|
|
66
87
|
return false;
|
|
67
88
|
}
|
|
68
89
|
// Non-select fields should not have options
|
|
69
|
-
if (data.type !==
|
|
90
|
+
if (data.type !== "select" && data.options) {
|
|
70
91
|
return false;
|
|
71
92
|
}
|
|
72
93
|
return true;
|
|
73
94
|
}, {
|
|
74
|
-
message:
|
|
95
|
+
message: "Select fields must have options, and non-select fields must not have options",
|
|
75
96
|
});
|
|
76
97
|
/**
|
|
77
98
|
* OAuth Identity Schema
|
|
@@ -83,48 +104,89 @@ exports.oauthIdentitySchema = zod_1.z.object({
|
|
|
83
104
|
/**
|
|
84
105
|
* OAuth provider name (e.g., "google", "github", "microsoft")
|
|
85
106
|
*/
|
|
86
|
-
provider: zod_1.z
|
|
87
|
-
.
|
|
88
|
-
.
|
|
107
|
+
provider: zod_1.z
|
|
108
|
+
.string()
|
|
109
|
+
.min(1, "Provider is required")
|
|
110
|
+
.max(50, "Provider name must be 50 characters or less"),
|
|
89
111
|
/**
|
|
90
112
|
* OAuth subject identifier (unique user ID from provider)
|
|
91
113
|
* @example "123456789" (Google), "github-user-id" (GitHub)
|
|
92
114
|
*/
|
|
93
|
-
subject: zod_1.z
|
|
94
|
-
.
|
|
95
|
-
.
|
|
115
|
+
subject: zod_1.z
|
|
116
|
+
.string()
|
|
117
|
+
.min(1, "Subject is required")
|
|
118
|
+
.max(255, "Subject must be 255 characters or less"),
|
|
96
119
|
/**
|
|
97
120
|
* User's email address from OAuth provider (optional)
|
|
98
121
|
*/
|
|
99
|
-
email: zod_1.z
|
|
100
|
-
.
|
|
101
|
-
.
|
|
122
|
+
email: zod_1.z
|
|
123
|
+
.string()
|
|
124
|
+
.email("Must be a valid email address")
|
|
125
|
+
.max(255, "Email must be 255 characters or less")
|
|
102
126
|
.optional(),
|
|
103
127
|
/**
|
|
104
128
|
* User's display name from OAuth provider (optional)
|
|
105
129
|
*/
|
|
106
|
-
name: zod_1.z.string()
|
|
107
|
-
.max(255, 'Name must be 255 characters or less')
|
|
108
|
-
.optional(),
|
|
130
|
+
name: zod_1.z.string().max(255, "Name must be 255 characters or less").optional(),
|
|
109
131
|
});
|
|
110
132
|
/**
|
|
111
133
|
* Consent Page Config Schema
|
|
112
134
|
*/
|
|
113
|
-
exports.consentPageConfigSchema = zod_1.z
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
135
|
+
exports.consentPageConfigSchema = zod_1.z
|
|
136
|
+
.object({
|
|
137
|
+
tool: zod_1.z.string().min(1, "Tool name is required"),
|
|
138
|
+
toolDescription: zod_1.z
|
|
139
|
+
.string()
|
|
140
|
+
.max(500, "Tool description must be 500 characters or less"),
|
|
141
|
+
scopes: zod_1.z.array(zod_1.z.string()).min(0, "Scopes array cannot be negative"),
|
|
142
|
+
agentDid: zod_1.z.string().min(1, "Agent DID is required"),
|
|
143
|
+
sessionId: zod_1.z.string().min(1, "Session ID is required"),
|
|
144
|
+
projectId: zod_1.z.string().min(1, "Project ID is required"),
|
|
145
|
+
provider: zod_1.z.string().optional(), // Phase 2: OAuth provider name (e.g., "github", "google")
|
|
120
146
|
branding: exports.consentBrandingSchema.optional(),
|
|
121
147
|
terms: exports.consentTermsSchema.optional(),
|
|
122
148
|
customFields: zod_1.z
|
|
123
149
|
.array(exports.consentCustomFieldSchema)
|
|
124
|
-
.max(10,
|
|
150
|
+
.max(10, "Maximum 10 custom fields allowed")
|
|
125
151
|
.optional(),
|
|
126
|
-
serverUrl: zod_1.z.string().url(
|
|
152
|
+
serverUrl: zod_1.z.string().url("Server URL must be a valid URL"),
|
|
127
153
|
autoClose: zod_1.z.boolean().optional(),
|
|
154
|
+
/**
|
|
155
|
+
* Whether OAuth authorization is required immediately
|
|
156
|
+
* If true, the consent page will act as a landing page before redirecting
|
|
157
|
+
*/
|
|
158
|
+
oauthRequired: zod_1.z.boolean().optional(),
|
|
159
|
+
/**
|
|
160
|
+
* The OAuth authorization URL to redirect to
|
|
161
|
+
* Required if oauthRequired is true
|
|
162
|
+
*/
|
|
163
|
+
oauthUrl: zod_1.z
|
|
164
|
+
.union([
|
|
165
|
+
zod_1.z.string().url(),
|
|
166
|
+
zod_1.z.literal(""), // Allow empty string to catch it in refine with better error
|
|
167
|
+
])
|
|
168
|
+
.optional(),
|
|
169
|
+
})
|
|
170
|
+
.superRefine((data, ctx) => {
|
|
171
|
+
// If oauthRequired is true, oauthUrl must be provided and non-empty
|
|
172
|
+
if (data.oauthRequired === true) {
|
|
173
|
+
if (data.oauthUrl === undefined || data.oauthUrl === "") {
|
|
174
|
+
ctx.addIssue({
|
|
175
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
176
|
+
message: "oauthUrl is required when oauthRequired is true",
|
|
177
|
+
path: ["oauthUrl"],
|
|
178
|
+
});
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// If oauthUrl is provided (not undefined), it must be a valid URL (not empty)
|
|
183
|
+
if (data.oauthUrl !== undefined && data.oauthUrl === "") {
|
|
184
|
+
ctx.addIssue({
|
|
185
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
186
|
+
message: "oauthUrl must be a valid URL",
|
|
187
|
+
path: ["oauthUrl"],
|
|
188
|
+
});
|
|
189
|
+
}
|
|
128
190
|
});
|
|
129
191
|
/**
|
|
130
192
|
* Consent Approval Request Schema
|
|
@@ -136,23 +198,24 @@ exports.consentPageConfigSchema = zod_1.z.object({
|
|
|
136
198
|
* - user_did: Optional User DID for persistent identity (if already known)
|
|
137
199
|
*/
|
|
138
200
|
exports.consentApprovalRequestSchema = zod_1.z.object({
|
|
139
|
-
tool: zod_1.z.string().min(1,
|
|
140
|
-
scopes: zod_1.z.array(zod_1.z.string()).min(0,
|
|
141
|
-
agent_did: zod_1.z.string().min(1,
|
|
142
|
-
session_id: zod_1.z.string().min(1,
|
|
143
|
-
project_id: zod_1.z.string().min(1,
|
|
201
|
+
tool: zod_1.z.string().min(1, "Tool name is required"),
|
|
202
|
+
scopes: zod_1.z.array(zod_1.z.string()).min(0, "Scopes array cannot be negative"),
|
|
203
|
+
agent_did: zod_1.z.string().min(1, "Agent DID is required"),
|
|
204
|
+
session_id: zod_1.z.string().min(1, "Session ID is required"),
|
|
205
|
+
project_id: zod_1.z.string().min(1, "Project ID is required"),
|
|
144
206
|
termsAccepted: zod_1.z.boolean(),
|
|
145
|
-
termsVersion: zod_1.z
|
|
146
|
-
.
|
|
147
|
-
.
|
|
148
|
-
customFields: zod_1.z
|
|
149
|
-
.record(zod_1.z.union([zod_1.z.string(), zod_1.z.boolean()]))
|
|
207
|
+
termsVersion: zod_1.z
|
|
208
|
+
.string()
|
|
209
|
+
.max(50, "Terms version must be 50 characters or less")
|
|
150
210
|
.optional(),
|
|
211
|
+
customFields: zod_1.z.record(zod_1.z.union([zod_1.z.string(), zod_1.z.boolean()])).optional(),
|
|
151
212
|
// Phase 4: OAuth identity linking
|
|
152
213
|
/**
|
|
153
|
-
* OAuth provider identity information (optional
|
|
214
|
+
* OAuth provider identity information (optional)
|
|
154
215
|
* Used to link OAuth accounts to persistent User DIDs
|
|
155
|
-
*
|
|
216
|
+
*
|
|
217
|
+
* CRITICAL: Uses .nullish() to accept null, undefined, or OAuthIdentity
|
|
218
|
+
* This matches JSON parsing behavior where missing fields become null
|
|
156
219
|
*/
|
|
157
220
|
oauth_identity: exports.oauthIdentitySchema.nullish(),
|
|
158
221
|
/**
|
|
@@ -160,21 +223,24 @@ exports.consentApprovalRequestSchema = zod_1.z.object({
|
|
|
160
223
|
* If provided, represents the persistent User DID for this user
|
|
161
224
|
* Format: did:key:... or did:web:...
|
|
162
225
|
*/
|
|
163
|
-
user_did: zod_1.z
|
|
164
|
-
.
|
|
165
|
-
.
|
|
226
|
+
user_did: zod_1.z
|
|
227
|
+
.string()
|
|
228
|
+
.regex(/^did:/, "Must be a valid DID format (starting with did:)")
|
|
229
|
+
.max(500, "DID must be 500 characters or less")
|
|
166
230
|
.optional(),
|
|
167
231
|
});
|
|
168
232
|
/**
|
|
169
233
|
* Consent Approval Response Schema
|
|
170
234
|
*/
|
|
171
|
-
exports.consentApprovalResponseSchema = zod_1.z
|
|
235
|
+
exports.consentApprovalResponseSchema = zod_1.z
|
|
236
|
+
.object({
|
|
172
237
|
success: zod_1.z.boolean(),
|
|
173
238
|
delegation_id: zod_1.z.string().min(1).optional(),
|
|
174
239
|
delegation_token: zod_1.z.string().min(1).optional(),
|
|
175
240
|
error: zod_1.z.string().optional(),
|
|
176
241
|
error_code: zod_1.z.string().optional(),
|
|
177
|
-
})
|
|
242
|
+
})
|
|
243
|
+
.refine((data) => {
|
|
178
244
|
// If success is true, must have delegation_id and delegation_token
|
|
179
245
|
if (data.success) {
|
|
180
246
|
return !!data.delegation_id && !!data.delegation_token;
|
|
@@ -182,7 +248,7 @@ exports.consentApprovalResponseSchema = zod_1.z.object({
|
|
|
182
248
|
// If success is false, must have error or error_code
|
|
183
249
|
return !!data.error || !!data.error_code;
|
|
184
250
|
}, {
|
|
185
|
-
message:
|
|
251
|
+
message: "Successful responses must include delegation_id and delegation_token. Failed responses must include error or error_code",
|
|
186
252
|
});
|
|
187
253
|
/**
|
|
188
254
|
* Consent Config Schema
|
|
@@ -192,14 +258,21 @@ exports.consentConfigSchema = zod_1.z.object({
|
|
|
192
258
|
terms: exports.consentTermsSchema.optional(),
|
|
193
259
|
customFields: zod_1.z
|
|
194
260
|
.array(exports.consentCustomFieldSchema)
|
|
195
|
-
.max(10,
|
|
261
|
+
.max(10, "Maximum 10 custom fields allowed")
|
|
196
262
|
.optional(),
|
|
197
|
-
ui: zod_1.z
|
|
198
|
-
|
|
263
|
+
ui: zod_1.z
|
|
264
|
+
.object({
|
|
265
|
+
theme: zod_1.z.enum(["light", "dark", "auto"]).optional(),
|
|
199
266
|
popupEnabled: zod_1.z.boolean().optional(),
|
|
200
267
|
autoClose: zod_1.z.boolean().optional(),
|
|
201
|
-
autoCloseDelay: zod_1.z
|
|
202
|
-
|
|
268
|
+
autoCloseDelay: zod_1.z
|
|
269
|
+
.number()
|
|
270
|
+
.int()
|
|
271
|
+
.positive()
|
|
272
|
+
.max(60000, "Auto-close delay must be 60000ms or less")
|
|
273
|
+
.optional(),
|
|
274
|
+
})
|
|
275
|
+
.optional(),
|
|
203
276
|
});
|
|
204
277
|
/**
|
|
205
278
|
* Validation Helpers
|