@getstackrun/sdk 0.1.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.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +65 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/services/agents.d.ts +18 -0
- package/dist/services/agents.d.ts.map +1 -0
- package/dist/services/agents.js +28 -0
- package/dist/services/agents.js.map +1 -0
- package/dist/services/credentials.d.ts +9 -0
- package/dist/services/credentials.d.ts.map +1 -0
- package/dist/services/credentials.js +13 -0
- package/dist/services/credentials.js.map +1 -0
- package/dist/services/delivery-methods.d.ts +23 -0
- package/dist/services/delivery-methods.d.ts.map +1 -0
- package/dist/services/delivery-methods.js +25 -0
- package/dist/services/delivery-methods.js.map +1 -0
- package/dist/services/dropoffs.d.ts +15 -0
- package/dist/services/dropoffs.d.ts.map +1 -0
- package/dist/services/dropoffs.js +25 -0
- package/dist/services/dropoffs.js.map +1 -0
- package/dist/services/identity.d.ts +24 -0
- package/dist/services/identity.d.ts.map +1 -0
- package/dist/services/identity.js +42 -0
- package/dist/services/identity.js.map +1 -0
- package/dist/services/notifications.d.ts +27 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +31 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/services/passports.d.ts +42 -0
- package/dist/services/passports.d.ts.map +1 -0
- package/dist/services/passports.js +59 -0
- package/dist/services/passports.js.map +1 -0
- package/dist/services/proxy.d.ts +9 -0
- package/dist/services/proxy.d.ts.map +1 -0
- package/dist/services/proxy.js +13 -0
- package/dist/services/proxy.js.map +1 -0
- package/dist/services/security-events.d.ts +22 -0
- package/dist/services/security-events.d.ts.map +1 -0
- package/dist/services/security-events.js +20 -0
- package/dist/services/security-events.js.map +1 -0
- package/dist/services/services.d.ts +24 -0
- package/dist/services/services.d.ts.map +1 -0
- package/dist/services/services.js +34 -0
- package/dist/services/services.js.map +1 -0
- package/dist/services/skills.d.ts +40 -0
- package/dist/services/skills.d.ts.map +1 -0
- package/dist/services/skills.js +83 -0
- package/dist/services/skills.js.map +1 -0
- package/dist/services/team.d.ts +18 -0
- package/dist/services/team.d.ts.map +1 -0
- package/dist/services/team.js +22 -0
- package/dist/services/team.js.map +1 -0
- package/dist/types.d.ts +361 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/verify-offline.d.ts +70 -0
- package/dist/verify-offline.d.ts.map +1 -0
- package/dist/verify-offline.js +61 -0
- package/dist/verify-offline.js.map +1 -0
- package/package.json +63 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
export interface Agent {
|
|
2
|
+
id: string;
|
|
3
|
+
operator_id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string | null;
|
|
6
|
+
status: 'active' | 'suspended';
|
|
7
|
+
credential_access: 'full' | 'proxy_only';
|
|
8
|
+
created_at: string;
|
|
9
|
+
updated_at: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RegisterAgentInput {
|
|
12
|
+
name: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
credential_access?: 'full' | 'proxy_only';
|
|
15
|
+
}
|
|
16
|
+
export interface UpdateAgentInput {
|
|
17
|
+
name?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
status?: 'active' | 'suspended';
|
|
20
|
+
credential_access?: 'full' | 'proxy_only';
|
|
21
|
+
}
|
|
22
|
+
export interface IssuedPassport {
|
|
23
|
+
token: string;
|
|
24
|
+
jti: string;
|
|
25
|
+
expires_at: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IssuePassportInput {
|
|
28
|
+
agent_id: string;
|
|
29
|
+
scopes?: string[];
|
|
30
|
+
ttl_seconds?: number;
|
|
31
|
+
session_id?: string;
|
|
32
|
+
intent_description?: string;
|
|
33
|
+
intent_services?: string[];
|
|
34
|
+
accountability?: 'logged' | 'enforced';
|
|
35
|
+
}
|
|
36
|
+
export interface DelegatePassportInput {
|
|
37
|
+
parent_token: string;
|
|
38
|
+
child_agent_id: string;
|
|
39
|
+
scopes?: string[];
|
|
40
|
+
ttl_seconds?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface VerifyPassportResult {
|
|
43
|
+
valid: boolean;
|
|
44
|
+
jti: string;
|
|
45
|
+
agent_id: string;
|
|
46
|
+
expires_at: string;
|
|
47
|
+
claims: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface ActivePassport {
|
|
50
|
+
jti: string;
|
|
51
|
+
agent_id: string;
|
|
52
|
+
session_id: string | null;
|
|
53
|
+
delegation_depth: number;
|
|
54
|
+
parent_passport_id: string | null;
|
|
55
|
+
issued_at: string;
|
|
56
|
+
expires_at: string;
|
|
57
|
+
}
|
|
58
|
+
export interface Service {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
provider: string;
|
|
62
|
+
category: string;
|
|
63
|
+
available: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface ServiceConnection {
|
|
66
|
+
id: string;
|
|
67
|
+
operator_id: string;
|
|
68
|
+
service_id: string;
|
|
69
|
+
provider: string;
|
|
70
|
+
status: string;
|
|
71
|
+
verification_status: string | null;
|
|
72
|
+
verified_at: string | null;
|
|
73
|
+
proxy_enabled: boolean;
|
|
74
|
+
connected_by: string | null;
|
|
75
|
+
created_at: string;
|
|
76
|
+
}
|
|
77
|
+
export interface ConnectServiceInput {
|
|
78
|
+
service_id: string;
|
|
79
|
+
provider: string;
|
|
80
|
+
credential: string;
|
|
81
|
+
scopes?: string[];
|
|
82
|
+
}
|
|
83
|
+
export interface ConnectCustomServiceInput {
|
|
84
|
+
name: string;
|
|
85
|
+
description?: string;
|
|
86
|
+
credential: string | Record<string, string>;
|
|
87
|
+
scopes?: string[];
|
|
88
|
+
}
|
|
89
|
+
export interface GrantAgentAccessInput {
|
|
90
|
+
agent_id: string;
|
|
91
|
+
connection_id: string;
|
|
92
|
+
scopes?: string[];
|
|
93
|
+
}
|
|
94
|
+
export interface CredentialResult {
|
|
95
|
+
provider: string;
|
|
96
|
+
credential?: string;
|
|
97
|
+
credentials?: Record<string, string>;
|
|
98
|
+
}
|
|
99
|
+
export interface Dropoff {
|
|
100
|
+
id: string;
|
|
101
|
+
operator_id: string;
|
|
102
|
+
from_agent: string;
|
|
103
|
+
to_agent: string;
|
|
104
|
+
schema: Record<string, unknown>;
|
|
105
|
+
status: string;
|
|
106
|
+
ttl_seconds: number;
|
|
107
|
+
created_at: string;
|
|
108
|
+
expires_at: string;
|
|
109
|
+
}
|
|
110
|
+
export interface CreateDropoffInput {
|
|
111
|
+
from_agent: string;
|
|
112
|
+
to_agent: string;
|
|
113
|
+
schema: Record<string, unknown>;
|
|
114
|
+
ttl_seconds?: number;
|
|
115
|
+
}
|
|
116
|
+
export interface Skill {
|
|
117
|
+
id: string;
|
|
118
|
+
operator_id: string;
|
|
119
|
+
agent_id: string | null;
|
|
120
|
+
name: string;
|
|
121
|
+
description: string;
|
|
122
|
+
tags: string[];
|
|
123
|
+
input_schema: Record<string, unknown>;
|
|
124
|
+
output_schema: Record<string, unknown>;
|
|
125
|
+
trust_level_required: string;
|
|
126
|
+
status: string;
|
|
127
|
+
execution_mode: string;
|
|
128
|
+
credential_mode: string;
|
|
129
|
+
price_per_invocation: number;
|
|
130
|
+
invocation_count: number;
|
|
131
|
+
average_rating: number | null;
|
|
132
|
+
rating_count: number;
|
|
133
|
+
created_at: string;
|
|
134
|
+
updated_at: string;
|
|
135
|
+
}
|
|
136
|
+
export interface PublishSkillInput {
|
|
137
|
+
name: string;
|
|
138
|
+
description: string;
|
|
139
|
+
tags?: string[];
|
|
140
|
+
input_schema: Record<string, unknown>;
|
|
141
|
+
output_schema: Record<string, unknown>;
|
|
142
|
+
trust_level_required?: string;
|
|
143
|
+
agent_id?: string;
|
|
144
|
+
execution_mode?: 'open' | 'sealed' | 'source';
|
|
145
|
+
llm_enabled?: boolean;
|
|
146
|
+
llm_model?: string;
|
|
147
|
+
llm_config?: Record<string, unknown>;
|
|
148
|
+
execution_runtime?: 'javascript' | 'python' | 'none';
|
|
149
|
+
execution_script?: string;
|
|
150
|
+
required_credentials?: Array<{
|
|
151
|
+
provider: string;
|
|
152
|
+
scopes?: string[];
|
|
153
|
+
}>;
|
|
154
|
+
credential_mode?: 'none' | 'buyer_provides' | 'seller_provides' | 'both';
|
|
155
|
+
price_per_invocation?: number;
|
|
156
|
+
}
|
|
157
|
+
export interface BrowseSkillsQuery {
|
|
158
|
+
query?: string;
|
|
159
|
+
tags?: string;
|
|
160
|
+
trust_level?: string;
|
|
161
|
+
status?: string;
|
|
162
|
+
limit?: string;
|
|
163
|
+
offset?: string;
|
|
164
|
+
}
|
|
165
|
+
export interface SkillInvocation {
|
|
166
|
+
id: string;
|
|
167
|
+
skill_id: string;
|
|
168
|
+
status: string;
|
|
169
|
+
output?: unknown;
|
|
170
|
+
error?: {
|
|
171
|
+
code: string;
|
|
172
|
+
message: string;
|
|
173
|
+
};
|
|
174
|
+
expires_at: string;
|
|
175
|
+
created_at: string;
|
|
176
|
+
started_at?: string;
|
|
177
|
+
completed_at?: string;
|
|
178
|
+
llm_tokens_input?: number;
|
|
179
|
+
llm_tokens_output?: number;
|
|
180
|
+
execution_duration_ms?: number;
|
|
181
|
+
}
|
|
182
|
+
export interface InvokeSkillInput {
|
|
183
|
+
agent_id: string;
|
|
184
|
+
input: Record<string, unknown>;
|
|
185
|
+
passport_id?: string;
|
|
186
|
+
}
|
|
187
|
+
export interface SkillRequest {
|
|
188
|
+
id: string;
|
|
189
|
+
operator_id: string;
|
|
190
|
+
description: string;
|
|
191
|
+
desired_input_schema: Record<string, unknown> | null;
|
|
192
|
+
desired_output_schema: Record<string, unknown> | null;
|
|
193
|
+
max_price_cents: number | null;
|
|
194
|
+
tags: string[];
|
|
195
|
+
status: string;
|
|
196
|
+
created_at: string;
|
|
197
|
+
}
|
|
198
|
+
export interface PostSkillRequestInput {
|
|
199
|
+
description: string;
|
|
200
|
+
desired_input_schema?: Record<string, unknown>;
|
|
201
|
+
desired_output_schema?: Record<string, unknown>;
|
|
202
|
+
max_price_cents?: number;
|
|
203
|
+
tags?: string[];
|
|
204
|
+
}
|
|
205
|
+
export interface IdentitySettings {
|
|
206
|
+
identity_claim_ttl: '30d' | '90d' | '180d' | '1y';
|
|
207
|
+
identity_claim_inheritance: 'auto' | 'opt_in';
|
|
208
|
+
identity_auto_revoke: boolean;
|
|
209
|
+
}
|
|
210
|
+
export interface UpdateIdentitySettingsInput {
|
|
211
|
+
identity_claim_ttl?: '30d' | '90d' | '180d' | '1y';
|
|
212
|
+
identity_claim_inheritance?: 'auto' | 'opt_in';
|
|
213
|
+
identity_auto_revoke?: boolean;
|
|
214
|
+
}
|
|
215
|
+
export interface IdentityProvider {
|
|
216
|
+
key: string;
|
|
217
|
+
name: string;
|
|
218
|
+
layers: string[];
|
|
219
|
+
assurance: string;
|
|
220
|
+
description: string;
|
|
221
|
+
}
|
|
222
|
+
export interface IdentityClaim {
|
|
223
|
+
id: string;
|
|
224
|
+
operator_id: string;
|
|
225
|
+
provider_key: string;
|
|
226
|
+
layer: string;
|
|
227
|
+
claim_type: string;
|
|
228
|
+
claim_ref: string;
|
|
229
|
+
assurance_level: string;
|
|
230
|
+
verified_at: string;
|
|
231
|
+
expires_at: string | null;
|
|
232
|
+
}
|
|
233
|
+
export interface InitiateVerificationInput {
|
|
234
|
+
provider_key: string;
|
|
235
|
+
requested_claims?: string[];
|
|
236
|
+
return_url?: string;
|
|
237
|
+
}
|
|
238
|
+
export interface VerificationResult {
|
|
239
|
+
session_ref: string;
|
|
240
|
+
authorization_url?: string;
|
|
241
|
+
status: string;
|
|
242
|
+
}
|
|
243
|
+
export interface TeamMember {
|
|
244
|
+
id: string;
|
|
245
|
+
operator_id: string;
|
|
246
|
+
email: string;
|
|
247
|
+
name: string | null;
|
|
248
|
+
role: 'admin' | 'member';
|
|
249
|
+
status: 'invited' | 'active' | 'revoked';
|
|
250
|
+
allowed_connections: string[] | null;
|
|
251
|
+
created_at: string;
|
|
252
|
+
}
|
|
253
|
+
export interface InviteMemberInput {
|
|
254
|
+
email: string;
|
|
255
|
+
name?: string;
|
|
256
|
+
role?: 'admin' | 'member';
|
|
257
|
+
allowed_connections?: string[];
|
|
258
|
+
}
|
|
259
|
+
export interface UpdateMemberInput {
|
|
260
|
+
role?: 'admin' | 'member';
|
|
261
|
+
allowed_connections?: string[];
|
|
262
|
+
}
|
|
263
|
+
export interface DeliveryMethod {
|
|
264
|
+
id: string;
|
|
265
|
+
operator_id: string;
|
|
266
|
+
channel_type: 'email' | 'sms' | 'webhook';
|
|
267
|
+
destination: string;
|
|
268
|
+
verified: boolean;
|
|
269
|
+
webhook_secret?: string | null;
|
|
270
|
+
created_at: string;
|
|
271
|
+
}
|
|
272
|
+
export interface AddDeliveryMethodInput {
|
|
273
|
+
channel_type: 'email' | 'sms' | 'webhook';
|
|
274
|
+
destination: string;
|
|
275
|
+
}
|
|
276
|
+
export interface NotificationRule {
|
|
277
|
+
id: string;
|
|
278
|
+
operator_id: string;
|
|
279
|
+
destination_ids: string[];
|
|
280
|
+
events: string[];
|
|
281
|
+
min_severity: string;
|
|
282
|
+
delivery_methods?: DeliveryMethod[];
|
|
283
|
+
created_at: string;
|
|
284
|
+
}
|
|
285
|
+
export interface CreateNotificationRuleInput {
|
|
286
|
+
destination_ids: string[];
|
|
287
|
+
events: string[];
|
|
288
|
+
min_severity?: string;
|
|
289
|
+
}
|
|
290
|
+
export interface UpdateNotificationRuleInput {
|
|
291
|
+
destination_ids?: string[];
|
|
292
|
+
events?: string[];
|
|
293
|
+
min_severity?: string;
|
|
294
|
+
}
|
|
295
|
+
/** @deprecated Use DeliveryMethod + NotificationRule instead */
|
|
296
|
+
export interface NotificationChannel {
|
|
297
|
+
id: string;
|
|
298
|
+
operator_id: string;
|
|
299
|
+
channel_type: 'email' | 'sms' | 'webhook';
|
|
300
|
+
destination: string;
|
|
301
|
+
events: string[];
|
|
302
|
+
min_severity: string;
|
|
303
|
+
verified: boolean;
|
|
304
|
+
created_at: string;
|
|
305
|
+
}
|
|
306
|
+
/** @deprecated Use AddDeliveryMethodInput + CreateNotificationRuleInput instead */
|
|
307
|
+
export interface CreateNotificationChannelInput {
|
|
308
|
+
channel_type: 'email' | 'sms' | 'webhook';
|
|
309
|
+
destination: string;
|
|
310
|
+
events?: string[];
|
|
311
|
+
min_severity?: string;
|
|
312
|
+
}
|
|
313
|
+
export interface SecurityEvent {
|
|
314
|
+
id: string;
|
|
315
|
+
operator_id: string;
|
|
316
|
+
agent_id: string | null;
|
|
317
|
+
passport_jti: string | null;
|
|
318
|
+
signal_type: string;
|
|
319
|
+
severity: string;
|
|
320
|
+
message: string;
|
|
321
|
+
metadata: Record<string, unknown> | null;
|
|
322
|
+
resolved: boolean;
|
|
323
|
+
resolved_at: string | null;
|
|
324
|
+
created_at: string;
|
|
325
|
+
}
|
|
326
|
+
export interface AuditEntry {
|
|
327
|
+
id: string;
|
|
328
|
+
operator_id: string;
|
|
329
|
+
agent_id: string | null;
|
|
330
|
+
layer: string;
|
|
331
|
+
action: string;
|
|
332
|
+
outcome: string;
|
|
333
|
+
duration_ms: number | null;
|
|
334
|
+
created_at: string;
|
|
335
|
+
}
|
|
336
|
+
export interface ProxyRequest {
|
|
337
|
+
provider: string;
|
|
338
|
+
method: string;
|
|
339
|
+
url: string;
|
|
340
|
+
headers?: Record<string, string>;
|
|
341
|
+
body?: unknown;
|
|
342
|
+
}
|
|
343
|
+
export interface ProxyResponse {
|
|
344
|
+
status: number;
|
|
345
|
+
headers: Record<string, string>;
|
|
346
|
+
body: unknown;
|
|
347
|
+
}
|
|
348
|
+
export interface CheckpointInput {
|
|
349
|
+
agent_id: string;
|
|
350
|
+
summary: string;
|
|
351
|
+
actions_taken?: string[];
|
|
352
|
+
credentials_used?: string[];
|
|
353
|
+
}
|
|
354
|
+
export interface CheckoutInput {
|
|
355
|
+
agent_id: string;
|
|
356
|
+
summary: string;
|
|
357
|
+
actions_taken?: string[];
|
|
358
|
+
credentials_used?: string[];
|
|
359
|
+
services_accessed?: string[];
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type JWK } from 'jose';
|
|
2
|
+
/**
|
|
3
|
+
* Decoded claims returned on successful offline verification. Shape
|
|
4
|
+
* matches the JWT issued by `@stack/api`, namespaced under `stk`.
|
|
5
|
+
*/
|
|
6
|
+
export interface VerifiedPassportClaims {
|
|
7
|
+
jti: string;
|
|
8
|
+
sub: string;
|
|
9
|
+
iss: string;
|
|
10
|
+
aud: string | string[];
|
|
11
|
+
iat: number;
|
|
12
|
+
exp: number;
|
|
13
|
+
stk: {
|
|
14
|
+
operator_id: string;
|
|
15
|
+
agent_id: string;
|
|
16
|
+
agent_name: string;
|
|
17
|
+
services: Array<{
|
|
18
|
+
service_id: string;
|
|
19
|
+
service_name: string;
|
|
20
|
+
scopes: string[];
|
|
21
|
+
credential_ref: string;
|
|
22
|
+
constraints?: unknown;
|
|
23
|
+
}>;
|
|
24
|
+
identity_claims: unknown[];
|
|
25
|
+
delegation_depth: number;
|
|
26
|
+
parent_passport_id?: string;
|
|
27
|
+
session_id: string;
|
|
28
|
+
accountability?: 'enforced' | 'logged' | 'standard';
|
|
29
|
+
intent_summary?: string;
|
|
30
|
+
intent_services?: string[];
|
|
31
|
+
checkpoint_interval?: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface VerifyOfflineOptions {
|
|
35
|
+
/**
|
|
36
|
+
* JWKS source. Exactly one of:
|
|
37
|
+
* - `jwksUrl` — a URL to `/v1/.well-known/jwks.json`; keys are
|
|
38
|
+
* fetched once and cached per process.
|
|
39
|
+
* - `publicJwk` — a pre-fetched public key for fully air-gapped
|
|
40
|
+
* verification (no network at verify time, ever).
|
|
41
|
+
*/
|
|
42
|
+
jwksUrl?: string;
|
|
43
|
+
publicJwk?: JWK;
|
|
44
|
+
/**
|
|
45
|
+
* Expected token issuer. Defaults to the STACK issuer used by the
|
|
46
|
+
* reference API (`getstack.run`). Override if you run a self-hosted
|
|
47
|
+
* deployment.
|
|
48
|
+
*/
|
|
49
|
+
issuer?: string;
|
|
50
|
+
/** Expected audience. Defaults to the passport audience. */
|
|
51
|
+
audience?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Verify a STACK passport using only the public signing key.
|
|
55
|
+
*
|
|
56
|
+
* This function never calls the STACK API for revocation, freshness, or
|
|
57
|
+
* any other status. It is strictly cryptographic: signature, issuer,
|
|
58
|
+
* audience, and expiry.
|
|
59
|
+
*
|
|
60
|
+
* For downstream services that need to reject revoked passports, combine
|
|
61
|
+
* this with a short-window cache against `/v1/passports/verify` (which
|
|
62
|
+
* does consult the revocation store). This split lets high-frequency
|
|
63
|
+
* paths stay offline while still honoring explicit revocations.
|
|
64
|
+
*
|
|
65
|
+
* @throws on any failure — invalid signature, wrong issuer/audience,
|
|
66
|
+
* expired, or malformed JWT. The caller should treat any throw as a
|
|
67
|
+
* rejected passport.
|
|
68
|
+
*/
|
|
69
|
+
export declare function verifyPassportOffline(token: string, options: VerifyOfflineOptions): Promise<VerifiedPassportClaims>;
|
|
70
|
+
//# sourceMappingURL=verify-offline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-offline.d.ts","sourceRoot":"","sources":["../src/verify-offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC;YACrB,MAAM,EAAE,MAAM,EAAE,CAAC;YACjB,cAAc,EAAE,MAAM,CAAC;YACvB,WAAW,CAAC,EAAE,OAAO,CAAC;SACvB,CAAC,CAAC;QACH,eAAe,EAAE,OAAO,EAAE,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;QACpD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAkCjC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jwtVerify, createRemoteJWKSet, importJWK } from 'jose';
|
|
2
|
+
const DEFAULT_ISSUER = 'getstack.run';
|
|
3
|
+
const DEFAULT_AUDIENCE = 'stack:passport';
|
|
4
|
+
// Cache remote JWKS resolvers per URL so repeat verifies share the key cache.
|
|
5
|
+
const remoteJwksCache = new Map();
|
|
6
|
+
function getRemoteJwks(url) {
|
|
7
|
+
let cached = remoteJwksCache.get(url);
|
|
8
|
+
if (!cached) {
|
|
9
|
+
cached = createRemoteJWKSet(new URL(url));
|
|
10
|
+
remoteJwksCache.set(url, cached);
|
|
11
|
+
}
|
|
12
|
+
return cached;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Verify a STACK passport using only the public signing key.
|
|
16
|
+
*
|
|
17
|
+
* This function never calls the STACK API for revocation, freshness, or
|
|
18
|
+
* any other status. It is strictly cryptographic: signature, issuer,
|
|
19
|
+
* audience, and expiry.
|
|
20
|
+
*
|
|
21
|
+
* For downstream services that need to reject revoked passports, combine
|
|
22
|
+
* this with a short-window cache against `/v1/passports/verify` (which
|
|
23
|
+
* does consult the revocation store). This split lets high-frequency
|
|
24
|
+
* paths stay offline while still honoring explicit revocations.
|
|
25
|
+
*
|
|
26
|
+
* @throws on any failure — invalid signature, wrong issuer/audience,
|
|
27
|
+
* expired, or malformed JWT. The caller should treat any throw as a
|
|
28
|
+
* rejected passport.
|
|
29
|
+
*/
|
|
30
|
+
export async function verifyPassportOffline(token, options) {
|
|
31
|
+
if (!options.jwksUrl && !options.publicJwk) {
|
|
32
|
+
throw new Error('verifyPassportOffline: supply either jwksUrl or publicJwk');
|
|
33
|
+
}
|
|
34
|
+
if (options.jwksUrl && options.publicJwk) {
|
|
35
|
+
throw new Error('verifyPassportOffline: pass only one of jwksUrl or publicJwk');
|
|
36
|
+
}
|
|
37
|
+
const verifyOpts = {
|
|
38
|
+
issuer: options.issuer ?? DEFAULT_ISSUER,
|
|
39
|
+
audience: options.audience ?? DEFAULT_AUDIENCE,
|
|
40
|
+
algorithms: ['EdDSA'],
|
|
41
|
+
};
|
|
42
|
+
// Split the call so each overload resolves cleanly. jwtVerify has
|
|
43
|
+
// separate signatures for a static key vs a GetKey function, and the
|
|
44
|
+
// union of the two doesn't narrow in a single call site.
|
|
45
|
+
const { payload } = options.publicJwk
|
|
46
|
+
? await jwtVerify(token, await importJWK(options.publicJwk, 'EdDSA'), verifyOpts)
|
|
47
|
+
: await jwtVerify(token, getRemoteJwks(options.jwksUrl), verifyOpts);
|
|
48
|
+
if (!payload.jti || !payload.sub || !payload.iss || !payload.aud) {
|
|
49
|
+
throw new Error('verifyPassportOffline: token missing required claims');
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
jti: payload.jti,
|
|
53
|
+
sub: payload.sub,
|
|
54
|
+
iss: payload.iss,
|
|
55
|
+
aud: payload.aud,
|
|
56
|
+
iat: payload.iat,
|
|
57
|
+
exp: payload.exp,
|
|
58
|
+
stk: payload['stk'],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=verify-offline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-offline.js","sourceRoot":"","sources":["../src/verify-offline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAY,MAAM,MAAM,CAAC;AAuD1E,MAAM,cAAc,GAAG,cAAc,CAAC;AACtC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C,8EAA8E;AAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiD,CAAC;AAEjF,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,OAA6B;IAE7B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,cAAc;QACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB;QAC9C,UAAU,EAAE,CAAC,OAAO,CAAC;KACtB,CAAC;IAEF,kEAAkE;IAClE,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS;QACnC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC;QACjF,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;IAExE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAI;QACjB,GAAG,EAAE,OAAO,CAAC,GAAI;QACjB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAkC;KACrD,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@getstackrun/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Official JavaScript/TypeScript SDK for STACK — runtime security layer for AI agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"default": "./dist/index.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"main": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"clean": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true});fs.rmSync('.turbo',{recursive:true,force:true})\"",
|
|
24
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"stack",
|
|
28
|
+
"getstack",
|
|
29
|
+
"ai-agents",
|
|
30
|
+
"agent-security",
|
|
31
|
+
"mcp",
|
|
32
|
+
"passports",
|
|
33
|
+
"identity",
|
|
34
|
+
"skills",
|
|
35
|
+
"revocation",
|
|
36
|
+
"audit",
|
|
37
|
+
"eddsa",
|
|
38
|
+
"jwt"
|
|
39
|
+
],
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"homepage": "https://getstack.run",
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git+https://github.com/getstack-run/stack.git",
|
|
45
|
+
"directory": "packages/sdk"
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"email": "support@getstack.run"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18"
|
|
52
|
+
},
|
|
53
|
+
"sideEffects": false,
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"jose": "^6.2.2"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"typescript": "^5.8.0"
|
|
62
|
+
}
|
|
63
|
+
}
|