@enactprotocol/api 2.0.0 → 2.0.2
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/attestations.d.ts +253 -0
- package/dist/attestations.d.ts.map +1 -0
- package/dist/attestations.js +326 -0
- package/dist/attestations.js.map +1 -0
- package/dist/auth.d.ts +169 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +196 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +111 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +251 -0
- package/dist/client.js.map +1 -0
- package/dist/download.d.ts +172 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +154 -0
- package/dist/download.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/publish.d.ts +177 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +174 -0
- package/dist/publish.js.map +1 -0
- package/dist/search.d.ts +76 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +66 -0
- package/dist/search.js.map +1 -0
- package/dist/trust.d.ts +123 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +152 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +84 -0
- package/dist/utils.js.map +1 -0
- package/package.json +1 -1
package/dist/client.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enact Registry API Client
|
|
3
|
+
* Core HTTP client for interacting with the Enact registry
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Default registry URL
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_REGISTRY_URL = "https://siikwkfgsmouioodghho.supabase.co/functions/v1";
|
|
9
|
+
/**
|
|
10
|
+
* API request error
|
|
11
|
+
*/
|
|
12
|
+
export class ApiRequestError extends Error {
|
|
13
|
+
/** HTTP status code */
|
|
14
|
+
status;
|
|
15
|
+
/** API error code */
|
|
16
|
+
code;
|
|
17
|
+
/** Original error response */
|
|
18
|
+
response;
|
|
19
|
+
constructor(message, status, code, response) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "ApiRequestError";
|
|
22
|
+
this.status = status;
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.response = response;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse rate limit headers from response
|
|
29
|
+
*/
|
|
30
|
+
function parseRateLimitHeaders(headers) {
|
|
31
|
+
const limit = headers.get("X-RateLimit-Limit");
|
|
32
|
+
const remaining = headers.get("X-RateLimit-Remaining");
|
|
33
|
+
const reset = headers.get("X-RateLimit-Reset");
|
|
34
|
+
if (limit && remaining && reset) {
|
|
35
|
+
return {
|
|
36
|
+
limit: Number.parseInt(limit, 10),
|
|
37
|
+
remaining: Number.parseInt(remaining, 10),
|
|
38
|
+
reset: Number.parseInt(reset, 10),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Enact Registry API Client
|
|
45
|
+
*/
|
|
46
|
+
export class EnactApiClient {
|
|
47
|
+
baseUrl;
|
|
48
|
+
timeout;
|
|
49
|
+
maxRetries;
|
|
50
|
+
userAgent;
|
|
51
|
+
authToken;
|
|
52
|
+
constructor(options = {}) {
|
|
53
|
+
this.baseUrl = options.baseUrl ?? DEFAULT_REGISTRY_URL;
|
|
54
|
+
this.timeout = options.timeout ?? 30000;
|
|
55
|
+
this.maxRetries = options.retries ?? 3;
|
|
56
|
+
this.userAgent = options.userAgent ?? "enact-cli/0.1.0";
|
|
57
|
+
this.authToken = options.authToken;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set authentication token
|
|
61
|
+
*/
|
|
62
|
+
setAuthToken(token) {
|
|
63
|
+
this.authToken = token;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get current authentication token
|
|
67
|
+
*/
|
|
68
|
+
getAuthToken() {
|
|
69
|
+
return this.authToken;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the base URL for the registry
|
|
73
|
+
*/
|
|
74
|
+
getBaseUrl() {
|
|
75
|
+
return this.baseUrl;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the user agent string
|
|
79
|
+
*/
|
|
80
|
+
getUserAgent() {
|
|
81
|
+
return this.userAgent;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if client is authenticated
|
|
85
|
+
*/
|
|
86
|
+
isAuthenticated() {
|
|
87
|
+
return this.authToken !== undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Build headers for a request
|
|
91
|
+
*/
|
|
92
|
+
buildHeaders(contentType) {
|
|
93
|
+
const headers = new Headers();
|
|
94
|
+
headers.set("User-Agent", this.userAgent);
|
|
95
|
+
headers.set("Accept", "application/json");
|
|
96
|
+
if (contentType) {
|
|
97
|
+
headers.set("Content-Type", contentType);
|
|
98
|
+
}
|
|
99
|
+
if (this.authToken) {
|
|
100
|
+
headers.set("Authorization", `Bearer ${this.authToken}`);
|
|
101
|
+
// Supabase Edge Functions also need the apikey header
|
|
102
|
+
headers.set("apikey", this.authToken);
|
|
103
|
+
}
|
|
104
|
+
return headers;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Make an HTTP request with retry logic
|
|
108
|
+
*/
|
|
109
|
+
async request(method, path, options = {}) {
|
|
110
|
+
const url = `${this.baseUrl}${path}`;
|
|
111
|
+
const retryCount = options.retryCount ?? 0;
|
|
112
|
+
const controller = new AbortController();
|
|
113
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
114
|
+
try {
|
|
115
|
+
const response = await fetch(url, {
|
|
116
|
+
method,
|
|
117
|
+
headers: this.buildHeaders(options.contentType),
|
|
118
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
119
|
+
signal: controller.signal,
|
|
120
|
+
});
|
|
121
|
+
clearTimeout(timeoutId);
|
|
122
|
+
const rateLimit = parseRateLimitHeaders(response.headers);
|
|
123
|
+
// Handle rate limiting with retry
|
|
124
|
+
if (response.status === 429 && retryCount < this.maxRetries) {
|
|
125
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
126
|
+
const delay = retryAfter ? Number.parseInt(retryAfter, 10) * 1000 : 1000 * (retryCount + 1);
|
|
127
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
128
|
+
return this.request(method, path, { ...options, retryCount: retryCount + 1 });
|
|
129
|
+
}
|
|
130
|
+
// Handle error responses
|
|
131
|
+
if (!response.ok) {
|
|
132
|
+
let errorData;
|
|
133
|
+
try {
|
|
134
|
+
errorData = (await response.json());
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Response body might not be JSON
|
|
138
|
+
}
|
|
139
|
+
const code = errorData?.error?.code ?? "unknown";
|
|
140
|
+
const message = errorData?.error?.message ?? `HTTP ${response.status}`;
|
|
141
|
+
throw new ApiRequestError(message, response.status, code, errorData);
|
|
142
|
+
}
|
|
143
|
+
// Handle 204 No Content
|
|
144
|
+
if (response.status === 204) {
|
|
145
|
+
return {
|
|
146
|
+
data: undefined,
|
|
147
|
+
status: response.status,
|
|
148
|
+
rateLimit,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Parse JSON response
|
|
152
|
+
let data;
|
|
153
|
+
try {
|
|
154
|
+
const text = await response.text();
|
|
155
|
+
if (!text || text.trim() === "") {
|
|
156
|
+
throw new ApiRequestError("Server returned empty response", response.status, "empty_response");
|
|
157
|
+
}
|
|
158
|
+
data = JSON.parse(text);
|
|
159
|
+
}
|
|
160
|
+
catch (parseError) {
|
|
161
|
+
if (parseError instanceof ApiRequestError) {
|
|
162
|
+
throw parseError;
|
|
163
|
+
}
|
|
164
|
+
throw new ApiRequestError("Server returned invalid JSON response", response.status, "invalid_json");
|
|
165
|
+
}
|
|
166
|
+
return { data, status: response.status, rateLimit };
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
clearTimeout(timeoutId);
|
|
170
|
+
// Handle network errors with retry
|
|
171
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
172
|
+
if (retryCount < this.maxRetries) {
|
|
173
|
+
const delay = 1000 * (retryCount + 1);
|
|
174
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
175
|
+
return this.request(method, path, { ...options, retryCount: retryCount + 1 });
|
|
176
|
+
}
|
|
177
|
+
throw new ApiRequestError("Request timeout", 0, "timeout");
|
|
178
|
+
}
|
|
179
|
+
// Re-throw ApiRequestErrors
|
|
180
|
+
if (error instanceof ApiRequestError) {
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
// Wrap other errors
|
|
184
|
+
throw new ApiRequestError(error instanceof Error ? error.message : "Unknown error", 0, "network_error");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* GET request
|
|
189
|
+
*/
|
|
190
|
+
async get(path) {
|
|
191
|
+
return this.request("GET", path);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* POST request
|
|
195
|
+
*/
|
|
196
|
+
async post(path, body) {
|
|
197
|
+
return this.request("POST", path, {
|
|
198
|
+
body,
|
|
199
|
+
contentType: "application/json",
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* PUT request
|
|
204
|
+
*/
|
|
205
|
+
async put(path, body) {
|
|
206
|
+
return this.request("PUT", path, {
|
|
207
|
+
body,
|
|
208
|
+
contentType: "application/json",
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* DELETE request
|
|
213
|
+
*/
|
|
214
|
+
async delete(path) {
|
|
215
|
+
return this.request("DELETE", path);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Download a file (returns raw response for streaming)
|
|
219
|
+
*/
|
|
220
|
+
async download(path) {
|
|
221
|
+
const url = `${this.baseUrl}${path}`;
|
|
222
|
+
const controller = new AbortController();
|
|
223
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout * 10); // Longer timeout for downloads
|
|
224
|
+
try {
|
|
225
|
+
const response = await fetch(url, {
|
|
226
|
+
method: "GET",
|
|
227
|
+
headers: this.buildHeaders(),
|
|
228
|
+
signal: controller.signal,
|
|
229
|
+
});
|
|
230
|
+
clearTimeout(timeoutId);
|
|
231
|
+
if (!response.ok) {
|
|
232
|
+
throw new ApiRequestError(`Download failed: HTTP ${response.status}`, response.status, "download_error");
|
|
233
|
+
}
|
|
234
|
+
return response;
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
clearTimeout(timeoutId);
|
|
238
|
+
if (error instanceof ApiRequestError) {
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
throw new ApiRequestError(error instanceof Error ? error.message : "Download failed", 0, "download_error");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Create a new API client instance
|
|
247
|
+
*/
|
|
248
|
+
export function createApiClient(options) {
|
|
249
|
+
return new EnactApiClient(options);
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool download functionality
|
|
3
|
+
* Implements bundle download and tool info retrieval
|
|
4
|
+
*/
|
|
5
|
+
import type { EnactApiClient } from "./client";
|
|
6
|
+
/**
|
|
7
|
+
* Download options
|
|
8
|
+
*/
|
|
9
|
+
export interface DownloadOptions {
|
|
10
|
+
/** Tool name (e.g., "alice/utils/greeter") */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Tool version (e.g., "1.2.0") */
|
|
13
|
+
version: string;
|
|
14
|
+
/** Verify bundle hash after download */
|
|
15
|
+
verify?: boolean | undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Download result
|
|
19
|
+
*/
|
|
20
|
+
export interface DownloadResult {
|
|
21
|
+
/** Downloaded bundle data */
|
|
22
|
+
data: ArrayBuffer;
|
|
23
|
+
/** Bundle hash (sha256) */
|
|
24
|
+
hash: string;
|
|
25
|
+
/** Content length in bytes */
|
|
26
|
+
size: number;
|
|
27
|
+
/** Content type */
|
|
28
|
+
contentType: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Tool info (metadata) v2
|
|
32
|
+
*/
|
|
33
|
+
export interface ToolInfo {
|
|
34
|
+
/** Tool name */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Tool description */
|
|
37
|
+
description: string;
|
|
38
|
+
/** Tool tags */
|
|
39
|
+
tags: string[];
|
|
40
|
+
/** SPDX license */
|
|
41
|
+
license: string;
|
|
42
|
+
/** Author info */
|
|
43
|
+
author: {
|
|
44
|
+
username: string;
|
|
45
|
+
avatarUrl?: string | undefined;
|
|
46
|
+
};
|
|
47
|
+
/** Repository URL */
|
|
48
|
+
repository?: string | undefined;
|
|
49
|
+
/** Creation timestamp */
|
|
50
|
+
createdAt: Date;
|
|
51
|
+
/** Last update timestamp */
|
|
52
|
+
updatedAt: Date;
|
|
53
|
+
/** Latest version */
|
|
54
|
+
latestVersion: string;
|
|
55
|
+
/** All available versions (paginated) */
|
|
56
|
+
versions: Array<{
|
|
57
|
+
version: string;
|
|
58
|
+
publishedAt: Date;
|
|
59
|
+
downloads: number;
|
|
60
|
+
bundleHash: string;
|
|
61
|
+
yanked: boolean;
|
|
62
|
+
}>;
|
|
63
|
+
/** Total number of versions */
|
|
64
|
+
versionsTotal: number;
|
|
65
|
+
/** Total downloads */
|
|
66
|
+
totalDownloads: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Version-specific tool info v2
|
|
70
|
+
*/
|
|
71
|
+
export interface ToolVersionInfo {
|
|
72
|
+
/** Tool name */
|
|
73
|
+
name: string;
|
|
74
|
+
/** Version */
|
|
75
|
+
version: string;
|
|
76
|
+
/** Description */
|
|
77
|
+
description: string;
|
|
78
|
+
/** License */
|
|
79
|
+
license: string;
|
|
80
|
+
/** Whether yanked */
|
|
81
|
+
yanked: boolean;
|
|
82
|
+
/** Yank reason */
|
|
83
|
+
yankReason?: string | undefined;
|
|
84
|
+
/** Replacement version */
|
|
85
|
+
yankReplacement?: string | undefined;
|
|
86
|
+
/** Yanked timestamp */
|
|
87
|
+
yankedAt?: Date | undefined;
|
|
88
|
+
/** Full manifest */
|
|
89
|
+
manifest: Record<string, unknown>;
|
|
90
|
+
/** Bundle info */
|
|
91
|
+
bundle: {
|
|
92
|
+
hash: string;
|
|
93
|
+
size: number;
|
|
94
|
+
downloadUrl: string;
|
|
95
|
+
};
|
|
96
|
+
/** Attestations */
|
|
97
|
+
attestations: Array<{
|
|
98
|
+
auditor: string;
|
|
99
|
+
auditorProvider: string;
|
|
100
|
+
signedAt: Date;
|
|
101
|
+
rekorLogId: string;
|
|
102
|
+
verified: boolean;
|
|
103
|
+
}>;
|
|
104
|
+
/** Published by */
|
|
105
|
+
publishedBy: {
|
|
106
|
+
username: string;
|
|
107
|
+
avatarUrl?: string | undefined;
|
|
108
|
+
};
|
|
109
|
+
/** Publication timestamp */
|
|
110
|
+
publishedAt: Date;
|
|
111
|
+
/** Download count */
|
|
112
|
+
downloads: number;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get tool metadata
|
|
116
|
+
*
|
|
117
|
+
* @param client - API client instance
|
|
118
|
+
* @param name - Tool name (e.g., "alice/utils/greeter")
|
|
119
|
+
* @returns Tool metadata
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* const info = await getToolInfo(client, "alice/utils/greeter");
|
|
124
|
+
* console.log(info.latestVersion);
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export declare function getToolInfo(client: EnactApiClient, name: string): Promise<ToolInfo>;
|
|
128
|
+
/**
|
|
129
|
+
* Get version-specific tool information
|
|
130
|
+
*
|
|
131
|
+
* @param client - API client instance
|
|
132
|
+
* @param name - Tool name
|
|
133
|
+
* @param version - Tool version
|
|
134
|
+
* @returns Version-specific tool info
|
|
135
|
+
*/
|
|
136
|
+
export declare function getToolVersion(client: EnactApiClient, name: string, version: string): Promise<ToolVersionInfo>;
|
|
137
|
+
/**
|
|
138
|
+
* Get attestations for a tool version
|
|
139
|
+
*
|
|
140
|
+
* @param client - API client instance
|
|
141
|
+
* @param name - Tool name
|
|
142
|
+
* @param version - Tool version
|
|
143
|
+
* @returns Attestation list
|
|
144
|
+
*/
|
|
145
|
+
export declare function getAttestations(client: EnactApiClient, name: string, version: string): Promise<Array<{
|
|
146
|
+
auditor: string;
|
|
147
|
+
auditorProvider: string;
|
|
148
|
+
signedAt: Date;
|
|
149
|
+
rekorLogId: string;
|
|
150
|
+
verified: boolean;
|
|
151
|
+
}>>;
|
|
152
|
+
/**
|
|
153
|
+
* Download a tool bundle (v2 with yank handling)
|
|
154
|
+
*
|
|
155
|
+
* @param client - API client instance
|
|
156
|
+
* @param options - Download options
|
|
157
|
+
* @returns Downloaded bundle data with metadata
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const result = await downloadBundle(client, {
|
|
162
|
+
* name: "alice/utils/greeter",
|
|
163
|
+
* version: "1.2.0",
|
|
164
|
+
* verify: true
|
|
165
|
+
* });
|
|
166
|
+
* await Bun.write("bundle.tar.gz", result.data);
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export declare function downloadBundle(client: EnactApiClient, options: DownloadOptions & {
|
|
170
|
+
acknowledgeYanked?: boolean;
|
|
171
|
+
}): Promise<DownloadResult>;
|
|
172
|
+
//# sourceMappingURL=download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IACF,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,yBAAyB;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,4BAA4B;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,IAAI,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC,CAAC;IACH,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,kBAAkB;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,mBAAmB;IACnB,YAAY,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,IAAI,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,mBAAmB;IACnB,WAAW,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IACF,4BAA4B;IAC5B,WAAW,EAAE,IAAI,CAAC;IAClB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAkED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAGzF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CACR,KAAK,CAAC;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CACH,CASA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,GAAG;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzD,OAAO,CAAC,cAAc,CAAC,CA2BzB"}
|
package/dist/download.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool download functionality
|
|
3
|
+
* Implements bundle download and tool info retrieval
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert raw tool metadata to ToolInfo
|
|
7
|
+
*/
|
|
8
|
+
function toToolInfo(raw) {
|
|
9
|
+
return {
|
|
10
|
+
name: raw.name,
|
|
11
|
+
description: raw.description,
|
|
12
|
+
tags: raw.tags,
|
|
13
|
+
license: raw.license,
|
|
14
|
+
author: {
|
|
15
|
+
username: raw.author.username,
|
|
16
|
+
avatarUrl: raw.author.avatar_url,
|
|
17
|
+
},
|
|
18
|
+
repository: raw.repository,
|
|
19
|
+
createdAt: new Date(raw.created_at),
|
|
20
|
+
updatedAt: new Date(raw.updated_at),
|
|
21
|
+
latestVersion: raw.latest_version,
|
|
22
|
+
versions: raw.versions.map((v) => ({
|
|
23
|
+
version: v.version,
|
|
24
|
+
publishedAt: new Date(v.published_at),
|
|
25
|
+
downloads: v.downloads,
|
|
26
|
+
bundleHash: v.bundle_hash,
|
|
27
|
+
yanked: v.yanked,
|
|
28
|
+
})),
|
|
29
|
+
versionsTotal: raw.versions_total,
|
|
30
|
+
totalDownloads: raw.total_downloads,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Convert raw version details to ToolVersionInfo
|
|
35
|
+
*/
|
|
36
|
+
function toToolVersionInfo(raw) {
|
|
37
|
+
return {
|
|
38
|
+
name: raw.name,
|
|
39
|
+
version: raw.version,
|
|
40
|
+
description: raw.description,
|
|
41
|
+
license: raw.license,
|
|
42
|
+
yanked: raw.yanked,
|
|
43
|
+
yankReason: raw.yank_reason,
|
|
44
|
+
yankReplacement: raw.yank_replacement,
|
|
45
|
+
yankedAt: raw.yanked_at ? new Date(raw.yanked_at) : undefined,
|
|
46
|
+
manifest: raw.manifest,
|
|
47
|
+
bundle: {
|
|
48
|
+
hash: raw.bundle.hash,
|
|
49
|
+
size: raw.bundle.size,
|
|
50
|
+
downloadUrl: raw.bundle.download_url,
|
|
51
|
+
},
|
|
52
|
+
attestations: raw.attestations.map((a) => ({
|
|
53
|
+
auditor: a.auditor,
|
|
54
|
+
auditorProvider: a.auditor_provider,
|
|
55
|
+
signedAt: new Date(a.signed_at),
|
|
56
|
+
rekorLogId: a.rekor_log_id,
|
|
57
|
+
verified: a.verification?.verified ?? false,
|
|
58
|
+
})),
|
|
59
|
+
publishedBy: {
|
|
60
|
+
username: raw.published_by.username,
|
|
61
|
+
avatarUrl: raw.published_by.avatar_url,
|
|
62
|
+
},
|
|
63
|
+
publishedAt: new Date(raw.published_at),
|
|
64
|
+
downloads: raw.downloads,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get tool metadata
|
|
69
|
+
*
|
|
70
|
+
* @param client - API client instance
|
|
71
|
+
* @param name - Tool name (e.g., "alice/utils/greeter")
|
|
72
|
+
* @returns Tool metadata
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const info = await getToolInfo(client, "alice/utils/greeter");
|
|
77
|
+
* console.log(info.latestVersion);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export async function getToolInfo(client, name) {
|
|
81
|
+
const response = await client.get(`/tools/${name}`);
|
|
82
|
+
return toToolInfo(response.data);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get version-specific tool information
|
|
86
|
+
*
|
|
87
|
+
* @param client - API client instance
|
|
88
|
+
* @param name - Tool name
|
|
89
|
+
* @param version - Tool version
|
|
90
|
+
* @returns Version-specific tool info
|
|
91
|
+
*/
|
|
92
|
+
export async function getToolVersion(client, name, version) {
|
|
93
|
+
const response = await client.get(`/tools/${name}/versions/${version}`);
|
|
94
|
+
return toToolVersionInfo(response.data);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get attestations for a tool version
|
|
98
|
+
*
|
|
99
|
+
* @param client - API client instance
|
|
100
|
+
* @param name - Tool name
|
|
101
|
+
* @param version - Tool version
|
|
102
|
+
* @returns Attestation list
|
|
103
|
+
*/
|
|
104
|
+
export async function getAttestations(client, name, version) {
|
|
105
|
+
const response = await client.get(`/tools/${name}/versions/${version}`);
|
|
106
|
+
return response.data.attestations.map((a) => ({
|
|
107
|
+
auditor: a.auditor,
|
|
108
|
+
auditorProvider: a.auditor_provider,
|
|
109
|
+
signedAt: new Date(a.signed_at),
|
|
110
|
+
rekorLogId: a.rekor_log_id,
|
|
111
|
+
verified: a.verification?.verified ?? false,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Download a tool bundle (v2 with yank handling)
|
|
116
|
+
*
|
|
117
|
+
* @param client - API client instance
|
|
118
|
+
* @param options - Download options
|
|
119
|
+
* @returns Downloaded bundle data with metadata
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* const result = await downloadBundle(client, {
|
|
124
|
+
* name: "alice/utils/greeter",
|
|
125
|
+
* version: "1.2.0",
|
|
126
|
+
* verify: true
|
|
127
|
+
* });
|
|
128
|
+
* await Bun.write("bundle.tar.gz", result.data);
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export async function downloadBundle(client, options) {
|
|
132
|
+
const { name, version, acknowledgeYanked } = options;
|
|
133
|
+
// Build query params for yanked version acknowledgment
|
|
134
|
+
const params = acknowledgeYanked ? "?acknowledge_yanked=true" : "";
|
|
135
|
+
const response = await client.download(`/tools/${name}/versions/${version}/download${params}`);
|
|
136
|
+
const data = await response.arrayBuffer();
|
|
137
|
+
const contentType = response.headers.get("Content-Type") ?? "application/gzip";
|
|
138
|
+
const size = data.byteLength;
|
|
139
|
+
// Extract hash from ETag or compute it
|
|
140
|
+
let hash = response.headers.get("ETag")?.replace(/"/g, "") ?? "";
|
|
141
|
+
// If verify is true and we need to compute hash, do it
|
|
142
|
+
if (options.verify && !hash.startsWith("sha256:")) {
|
|
143
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
144
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
145
|
+
hash = `sha256:${hashArray.map((b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
data,
|
|
149
|
+
hash,
|
|
150
|
+
size,
|
|
151
|
+
contentType,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @enactprotocol/api - Registry API client for Enact tools (v2)
|
|
3
|
+
*
|
|
4
|
+
* This package provides HTTP client functionality for interacting with
|
|
5
|
+
* the Enact registry v2, including:
|
|
6
|
+
* - OAuth authentication
|
|
7
|
+
* - Tool search and discovery
|
|
8
|
+
* - Bundle download with yank handling
|
|
9
|
+
* - Tool publishing (multipart upload)
|
|
10
|
+
* - Attestation management
|
|
11
|
+
* - Trust configuration
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
export declare const VERSION = "0.2.0";
|
|
16
|
+
export * from "./types";
|
|
17
|
+
export { EnactApiClient, createApiClient } from "./client";
|
|
18
|
+
export type { ApiClientOptions } from "./client";
|
|
19
|
+
export { searchTools } from "./search";
|
|
20
|
+
export type { SearchOptions, SearchResult, SearchResponse } from "./search";
|
|
21
|
+
export { downloadBundle, getToolInfo, getToolVersion, getAttestations } from "./download";
|
|
22
|
+
export type { DownloadOptions, DownloadResult, ToolInfo, ToolVersionInfo } from "./download";
|
|
23
|
+
export { publishTool, createBundle, submitAttestation, yankVersion, unyankVersion, deleteTool, } from "./publish";
|
|
24
|
+
export type { PublishOptions, PublishResult, BundleInfo, SubmitAttestationOptions, AttestationResult, } from "./publish";
|
|
25
|
+
export { initiateLogin, exchangeCodeForToken, refreshAccessToken, getCurrentUser, authenticate, logout, getAuthStatus, getUserProfile, submitFeedback, } from "./auth";
|
|
26
|
+
export type { AuthResult, AuthStatus } from "./auth";
|
|
27
|
+
export { getAttestations as getAttestationList, submitAttestation as submitAttestationToRegistry, revokeAttestation, hasAttestation, getAttestationBundle, verifyAttestationLocally, verifyAllAttestations, hasTrustedAttestation, } from "./attestations";
|
|
28
|
+
export type { AttestationListResponse, VerifiedAuditor } from "./attestations";
|
|
29
|
+
export { getUserTrust, updateMyTrust, addTrustedAuditor, removeTrustedAuditor, userTrustsAuditor, getMyTrustedAuditors, } from "./trust";
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAM/B,cAAc,SAAS,CAAC;AAMxB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1F,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAM7F,OAAO,EACL,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAMnB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,MAAM,EACN,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMrD,OAAO,EACL,eAAe,IAAI,kBAAkB,EACrC,iBAAiB,IAAI,2BAA2B,EAChD,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAM/E,OAAO,EACL,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|