@secondlayer/sdk 3.5.3 → 3.6.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/README.md +1 -10
- package/dist/index.d.ts +0 -24
- package/dist/index.js +34 -72
- package/dist/index.js.map +5 -5
- package/dist/subgraphs/index.d.ts +0 -24
- package/dist/subgraphs/index.js +34 -72
- package/dist/subgraphs/index.js.map +5 -5
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -172,16 +172,7 @@ for await (const transfer of sl.index.ftTransfers.walk({
|
|
|
172
172
|
|
|
173
173
|
Deploy and query app-specific L3 tables.
|
|
174
174
|
|
|
175
|
-
Subgraphs and subscriptions live on
|
|
176
|
-
|
|
177
|
-
If you already know your tenant URL (OSS, staging, or a custom routing setup), skip the lookup with `tenantBaseUrl`:
|
|
178
|
-
|
|
179
|
-
```typescript
|
|
180
|
-
const sl = new SecondLayer({
|
|
181
|
-
apiKey: "sk-sl_...",
|
|
182
|
-
tenantBaseUrl: "https://myslug.api.secondlayer.tools", // optional
|
|
183
|
-
});
|
|
184
|
-
```
|
|
175
|
+
Subgraphs and subscriptions live on the platform API alongside Streams and Index. Authenticate with your `sk-sl_*` key — no extra setup, no tenant URL.
|
|
185
176
|
|
|
186
177
|
```typescript
|
|
187
178
|
// List
|
package/dist/index.d.ts
CHANGED
|
@@ -8,12 +8,6 @@ interface SecondLayerOptions {
|
|
|
8
8
|
baseUrl: string;
|
|
9
9
|
/** Bearer token for authenticated requests. */
|
|
10
10
|
apiKey?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Explicit tenant API base URL — bypass the auto-resolution that calls
|
|
13
|
-
* `/api/tenants/me` on first tenant-resource request. Use when you already
|
|
14
|
-
* know your tenant URL (OSS, staging, or any custom routing setup).
|
|
15
|
-
*/
|
|
16
|
-
tenantBaseUrl?: string;
|
|
17
11
|
/** Fetch implementation. Tests and edge runtimes can provide their own. */
|
|
18
12
|
fetchImpl?: FetchLike;
|
|
19
13
|
/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */
|
|
@@ -23,28 +17,10 @@ declare abstract class BaseClient {
|
|
|
23
17
|
protected baseUrl: string;
|
|
24
18
|
protected apiKey?: string;
|
|
25
19
|
protected origin: "cli" | "mcp" | "session";
|
|
26
|
-
protected tenantBaseUrlOverride?: string;
|
|
27
|
-
private _tenantBaseUrlPromise;
|
|
28
20
|
constructor(options?: Partial<SecondLayerOptions>);
|
|
29
21
|
static authHeaders(apiKey?: string): Record<string, string>;
|
|
30
22
|
protected request<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
31
|
-
protected requestAt<T>(baseUrl: string, method: string, path: string, body?: unknown): Promise<T>;
|
|
32
23
|
protected requestText(method: string, path: string, body?: unknown): Promise<string>;
|
|
33
|
-
/**
|
|
34
|
-
* Resolve and cache the tenant API base URL for tenant-resource calls
|
|
35
|
-
* (subgraphs, subscriptions). On the platform API, those routes are not
|
|
36
|
-
* mounted — they live on per-tenant containers at
|
|
37
|
-
* `https://<slug>.api.secondlayer.tools`. This method asks
|
|
38
|
-
* `/api/tenants/me` (against the platform baseUrl) for the apiUrl that
|
|
39
|
-
* belongs to the authenticated account.
|
|
40
|
-
*
|
|
41
|
-
* The result is cached on the client instance. Failures are NOT cached, so
|
|
42
|
-
* a flaky platform call doesn't permanently break the SDK.
|
|
43
|
-
*/
|
|
44
|
-
protected getTenantBaseUrl(): Promise<string>;
|
|
45
|
-
private resolveTenantBaseUrl;
|
|
46
|
-
protected requestAtTenant<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
47
|
-
protected requestTextAtTenant(method: string, path: string, body?: unknown): Promise<string>;
|
|
48
24
|
private fetchResponse;
|
|
49
25
|
}
|
|
50
26
|
interface SubgraphSource {
|
package/dist/index.js
CHANGED
|
@@ -30,13 +30,10 @@ class BaseClient {
|
|
|
30
30
|
baseUrl;
|
|
31
31
|
apiKey;
|
|
32
32
|
origin;
|
|
33
|
-
tenantBaseUrlOverride;
|
|
34
|
-
_tenantBaseUrlPromise = null;
|
|
35
33
|
constructor(options = {}) {
|
|
36
34
|
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
37
35
|
this.apiKey = options.apiKey;
|
|
38
36
|
this.origin = options.origin ?? "cli";
|
|
39
|
-
this.tenantBaseUrlOverride = options.tenantBaseUrl?.replace(/\/+$/, "");
|
|
40
37
|
}
|
|
41
38
|
static authHeaders(apiKey) {
|
|
42
39
|
const headers = {
|
|
@@ -48,53 +45,18 @@ class BaseClient {
|
|
|
48
45
|
return headers;
|
|
49
46
|
}
|
|
50
47
|
async request(method, path, body) {
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
async requestAt(baseUrl, method, path, body) {
|
|
54
|
-
const response = await this.fetchResponse(baseUrl, method, path, body);
|
|
48
|
+
const response = await this.fetchResponse(method, path, body);
|
|
55
49
|
if (response.status === 204) {
|
|
56
50
|
return;
|
|
57
51
|
}
|
|
58
52
|
return response.json();
|
|
59
53
|
}
|
|
60
54
|
async requestText(method, path, body) {
|
|
61
|
-
const response = await this.fetchResponse(
|
|
62
|
-
return response.text();
|
|
63
|
-
}
|
|
64
|
-
getTenantBaseUrl() {
|
|
65
|
-
if (this.tenantBaseUrlOverride) {
|
|
66
|
-
return Promise.resolve(this.tenantBaseUrlOverride);
|
|
67
|
-
}
|
|
68
|
-
if (!this._tenantBaseUrlPromise) {
|
|
69
|
-
this._tenantBaseUrlPromise = this.resolveTenantBaseUrl().catch((err) => {
|
|
70
|
-
this._tenantBaseUrlPromise = null;
|
|
71
|
-
throw err;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return this._tenantBaseUrlPromise;
|
|
75
|
-
}
|
|
76
|
-
async resolveTenantBaseUrl() {
|
|
77
|
-
const body = await this.request("GET", "/api/tenants/me");
|
|
78
|
-
const tenant = body.tenant;
|
|
79
|
-
if (tenant.suspendedAt) {
|
|
80
|
-
throw new ApiError(403, `Tenant ${tenant.slug} is suspended${tenant.limitReason ? `: ${tenant.limitReason}` : ""}.`, body, "TENANT_SUSPENDED");
|
|
81
|
-
}
|
|
82
|
-
if (!tenant.apiUrl) {
|
|
83
|
-
throw new ApiError(404, "No tenant API URL available for this account. Provision a tenant at https://secondlayer.tools/platform.", body, "NO_TENANT");
|
|
84
|
-
}
|
|
85
|
-
return tenant.apiUrl.replace(/\/+$/, "");
|
|
86
|
-
}
|
|
87
|
-
async requestAtTenant(method, path, body) {
|
|
88
|
-
const tenantUrl = await this.getTenantBaseUrl();
|
|
89
|
-
return this.requestAt(tenantUrl, method, path, body);
|
|
90
|
-
}
|
|
91
|
-
async requestTextAtTenant(method, path, body) {
|
|
92
|
-
const tenantUrl = await this.getTenantBaseUrl();
|
|
93
|
-
const response = await this.fetchResponse(tenantUrl, method, path, body);
|
|
55
|
+
const response = await this.fetchResponse(method, path, body);
|
|
94
56
|
return response.text();
|
|
95
57
|
}
|
|
96
|
-
async fetchResponse(
|
|
97
|
-
const url = `${baseUrl}${path}`;
|
|
58
|
+
async fetchResponse(method, path, body) {
|
|
59
|
+
const url = `${this.baseUrl}${path}`;
|
|
98
60
|
const headers = BaseClient.authHeaders(this.apiKey);
|
|
99
61
|
headers["x-sl-origin"] = this.origin;
|
|
100
62
|
let response;
|
|
@@ -105,7 +67,7 @@ class BaseClient {
|
|
|
105
67
|
body: body ? JSON.stringify(body) : undefined
|
|
106
68
|
});
|
|
107
69
|
} catch {
|
|
108
|
-
throw new ApiError(0, `Cannot reach API at ${baseUrl}. Check your connection or try again.`);
|
|
70
|
+
throw new ApiError(0, `Cannot reach API at ${this.baseUrl}. Check your connection or try again.`);
|
|
109
71
|
}
|
|
110
72
|
if (!response.ok) {
|
|
111
73
|
if (response.status === 401) {
|
|
@@ -117,7 +79,7 @@ class BaseClient {
|
|
|
117
79
|
throw new ApiError(429, msg);
|
|
118
80
|
}
|
|
119
81
|
if (response.status >= 500) {
|
|
120
|
-
throw new ApiError(response.status, `Server error. Try again or check status at ${baseUrl}/health`);
|
|
82
|
+
throw new ApiError(response.status, `Server error. Try again or check status at ${this.baseUrl}/health`);
|
|
121
83
|
}
|
|
122
84
|
const errorBody = await response.text();
|
|
123
85
|
let message = `HTTP ${response.status}`;
|
|
@@ -217,28 +179,28 @@ function buildSpecQueryString(options) {
|
|
|
217
179
|
|
|
218
180
|
class Subgraphs extends BaseClient {
|
|
219
181
|
async list() {
|
|
220
|
-
return this.
|
|
182
|
+
return this.request("GET", "/api/subgraphs");
|
|
221
183
|
}
|
|
222
184
|
async get(name) {
|
|
223
|
-
return this.
|
|
185
|
+
return this.request("GET", `/api/subgraphs/${name}`);
|
|
224
186
|
}
|
|
225
187
|
async openapi(name, options) {
|
|
226
|
-
return this.
|
|
188
|
+
return this.request("GET", `/api/subgraphs/${name}/openapi.json${buildSpecQueryString(options)}`);
|
|
227
189
|
}
|
|
228
190
|
async schema(name, options) {
|
|
229
|
-
return this.
|
|
191
|
+
return this.request("GET", `/api/subgraphs/${name}/schema.json${buildSpecQueryString(options)}`);
|
|
230
192
|
}
|
|
231
193
|
async markdown(name, options) {
|
|
232
|
-
return this.
|
|
194
|
+
return this.requestText("GET", `/api/subgraphs/${name}/docs.md${buildSpecQueryString(options)}`);
|
|
233
195
|
}
|
|
234
196
|
async reindex(name, options) {
|
|
235
|
-
return this.
|
|
197
|
+
return this.request("POST", `/api/subgraphs/${name}/reindex`, options);
|
|
236
198
|
}
|
|
237
199
|
async stop(name) {
|
|
238
|
-
return this.
|
|
200
|
+
return this.request("POST", `/api/subgraphs/${name}/stop`);
|
|
239
201
|
}
|
|
240
202
|
async backfill(name, options) {
|
|
241
|
-
return this.
|
|
203
|
+
return this.request("POST", `/api/subgraphs/${name}/backfill`, options);
|
|
242
204
|
}
|
|
243
205
|
async gaps(name, opts) {
|
|
244
206
|
const qs = new URLSearchParams;
|
|
@@ -249,27 +211,27 @@ class Subgraphs extends BaseClient {
|
|
|
249
211
|
if (opts?.resolved !== undefined)
|
|
250
212
|
qs.set("resolved", String(opts.resolved));
|
|
251
213
|
const query = qs.toString();
|
|
252
|
-
return this.
|
|
214
|
+
return this.request("GET", `/api/subgraphs/${name}/gaps${query ? `?${query}` : ""}`);
|
|
253
215
|
}
|
|
254
216
|
async delete(name, options) {
|
|
255
217
|
const qs = options?.force ? "?force=true" : "";
|
|
256
|
-
return this.
|
|
218
|
+
return this.request("DELETE", `/api/subgraphs/${name}${qs}`);
|
|
257
219
|
}
|
|
258
220
|
async deploy(data) {
|
|
259
|
-
return this.
|
|
221
|
+
return this.request("POST", "/api/subgraphs", data);
|
|
260
222
|
}
|
|
261
223
|
async getSource(name) {
|
|
262
|
-
return this.
|
|
224
|
+
return this.request("GET", `/api/subgraphs/${name}/source`);
|
|
263
225
|
}
|
|
264
226
|
async bundle(data) {
|
|
265
|
-
return this.
|
|
227
|
+
return this.request("POST", "/api/subgraphs/bundle", data);
|
|
266
228
|
}
|
|
267
229
|
async queryTable(name, table, params = {}) {
|
|
268
|
-
const result = await this.
|
|
230
|
+
const result = await this.request("GET", `/api/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`);
|
|
269
231
|
return Array.isArray(result) ? result : result.data;
|
|
270
232
|
}
|
|
271
233
|
async queryTableCount(name, table, params = {}) {
|
|
272
|
-
return this.
|
|
234
|
+
return this.request("GET", `/api/subgraphs/${name}/${table}/count${buildSubgraphQueryString(params)}`);
|
|
273
235
|
}
|
|
274
236
|
typed(def) {
|
|
275
237
|
const result = {};
|
|
@@ -692,40 +654,40 @@ function createStreamsClient(options) {
|
|
|
692
654
|
// src/subscriptions/client.ts
|
|
693
655
|
class Subscriptions extends BaseClient {
|
|
694
656
|
async list() {
|
|
695
|
-
return this.
|
|
657
|
+
return this.request("GET", "/api/subscriptions");
|
|
696
658
|
}
|
|
697
659
|
async get(id) {
|
|
698
|
-
return this.
|
|
660
|
+
return this.request("GET", `/api/subscriptions/${id}`);
|
|
699
661
|
}
|
|
700
662
|
async create(input) {
|
|
701
|
-
return this.
|
|
663
|
+
return this.request("POST", "/api/subscriptions", input);
|
|
702
664
|
}
|
|
703
665
|
async update(id, patch) {
|
|
704
|
-
return this.
|
|
666
|
+
return this.request("PATCH", `/api/subscriptions/${id}`, patch);
|
|
705
667
|
}
|
|
706
668
|
async pause(id) {
|
|
707
|
-
return this.
|
|
669
|
+
return this.request("POST", `/api/subscriptions/${id}/pause`);
|
|
708
670
|
}
|
|
709
671
|
async resume(id) {
|
|
710
|
-
return this.
|
|
672
|
+
return this.request("POST", `/api/subscriptions/${id}/resume`);
|
|
711
673
|
}
|
|
712
674
|
async delete(id) {
|
|
713
|
-
return this.
|
|
675
|
+
return this.request("DELETE", `/api/subscriptions/${id}`);
|
|
714
676
|
}
|
|
715
677
|
async rotateSecret(id) {
|
|
716
|
-
return this.
|
|
678
|
+
return this.request("POST", `/api/subscriptions/${id}/rotate-secret`);
|
|
717
679
|
}
|
|
718
680
|
async recentDeliveries(id) {
|
|
719
|
-
return this.
|
|
681
|
+
return this.request("GET", `/api/subscriptions/${id}/deliveries`);
|
|
720
682
|
}
|
|
721
683
|
async replay(id, range) {
|
|
722
|
-
return this.
|
|
684
|
+
return this.request("POST", `/api/subscriptions/${id}/replay`, range);
|
|
723
685
|
}
|
|
724
686
|
async dead(id) {
|
|
725
|
-
return this.
|
|
687
|
+
return this.request("GET", `/api/subscriptions/${id}/dead`);
|
|
726
688
|
}
|
|
727
689
|
async requeueDead(id, outboxId) {
|
|
728
|
-
return this.
|
|
690
|
+
return this.request("POST", `/api/subscriptions/${id}/dead/${outboxId}/requeue`);
|
|
729
691
|
}
|
|
730
692
|
}
|
|
731
693
|
|
|
@@ -916,5 +878,5 @@ export {
|
|
|
916
878
|
ApiError
|
|
917
879
|
};
|
|
918
880
|
|
|
919
|
-
//# debugId=
|
|
881
|
+
//# debugId=1037187C55F7F02E64756E2164756E21
|
|
920
882
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
"sources": ["../src/errors.ts", "../src/base.ts", "../src/subgraphs/serialize.ts", "../src/subgraphs/client.ts", "../src/index-api/client.ts", "../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/subscriptions/client.ts", "../src/client.ts", "../src/subgraphs/get-subgraph.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/streams/types.ts", "../src/webhooks.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Error thrown by {@link SecondLayer} when an API request fails.\n * Includes the HTTP status code for programmatic error handling.\n *\n * @example\n * ```ts\n * try {\n * await client.subgraphs.get(\"my-subgraph\");\n * } catch (err) {\n * if (err instanceof ApiError && err.status === 404) {\n * console.log(\"Subgraph not found\");\n * }\n * }\n * ```\n */\nexport class ApiError extends Error {\n\tconstructor(\n\t\t/** HTTP status code (0 for network errors). */\n\t\tpublic status: number,\n\t\tmessage: string,\n\t\t/** Raw response body (parsed JSON if possible) — preserved for callers that need error details. */\n\t\tpublic body?: unknown,\n\t\t/** Stable machine-readable code from the API's `{error, code}` error envelope. */\n\t\tpublic code?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ApiError\";\n\t}\n}\n\n/**\n * Thrown on optimistic-concurrency conflict when a deploy supplies an\n * `expectedVersion` that no longer matches the server's stored version.\n */\nexport class VersionConflictError extends ApiError {\n\tconstructor(\n\t\tpublic currentVersion: string,\n\t\tpublic expectedVersion: string,\n\t\tmessage = `Version conflict: expected ${expectedVersion}, current ${currentVersion}`,\n\t) {\n\t\tsuper(409, message, { currentVersion, expectedVersion });\n\t\tthis.name = \"VersionConflictError\";\n\t}\n}\n",
|
|
6
|
-
"import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t
|
|
6
|
+
"import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t/** Fetch implementation. Tests and edge runtimes can provide their own. */\n\tfetchImpl?: FetchLike;\n\t/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */\n\torigin?: \"cli\" | \"mcp\" | \"session\";\n}\n\nconst DEFAULT_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport abstract class BaseClient {\n\tprotected baseUrl: string;\n\tprotected apiKey?: string;\n\tprotected origin: \"cli\" | \"mcp\" | \"session\";\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tthis.apiKey = options.apiKey;\n\t\tthis.origin = options.origin ?? \"cli\";\n\t}\n\n\tstatic authHeaders(apiKey?: string): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (apiKey) {\n\t\t\theaders.Authorization = `Bearer ${apiKey}`;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\tif (response.status === 204) {\n\t\t\treturn undefined as T;\n\t\t}\n\t\treturn response.json() as Promise<T>;\n\t}\n\n\tprotected async requestText(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<string> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\treturn response.text();\n\t}\n\n\tprivate async fetchResponse(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<Response> {\n\t\tconst url = `${this.baseUrl}${path}`;\n\t\tconst headers = BaseClient.authHeaders(this.apiKey);\n\t\theaders[\"x-sl-origin\"] = this.origin;\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await fetch(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new ApiError(\n\t\t\t\t0,\n\t\t\t\t`Cannot reach API at ${this.baseUrl}. Check your connection or try again.`,\n\t\t\t);\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tif (response.status === 401) {\n\t\t\t\tthrow new ApiError(401, \"API key invalid or expired.\");\n\t\t\t}\n\n\t\t\tif (response.status === 429) {\n\t\t\t\tconst retryAfter = response.headers.get(\"Retry-After\");\n\t\t\t\tconst msg = retryAfter\n\t\t\t\t\t? `Rate limited. Wait ${retryAfter} seconds.`\n\t\t\t\t\t: \"Rate limited. Try again later.\";\n\t\t\t\tthrow new ApiError(429, msg);\n\t\t\t}\n\n\t\t\tif (response.status >= 500) {\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\tresponse.status,\n\t\t\t\t\t`Server error. Try again or check status at ${this.baseUrl}/health`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst errorBody = await response.text();\n\t\t\tlet message = `HTTP ${response.status}`;\n\t\t\tlet parsedBody: unknown = errorBody;\n\t\t\tlet code: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst json = JSON.parse(errorBody);\n\t\t\t\tparsedBody = json;\n\t\t\t\tconst err = json.error ?? json.message;\n\t\t\t\tif (typeof err === \"string\") {\n\t\t\t\t\tmessage = err;\n\t\t\t\t} else if (err && typeof err === \"object\") {\n\t\t\t\t\tmessage = JSON.stringify(err);\n\t\t\t\t}\n\t\t\t\tif (typeof json.code === \"string\") {\n\t\t\t\t\tcode = json.code;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (errorBody) message = errorBody;\n\t\t\t}\n\t\t\tthrow new ApiError(response.status, message, parsedBody, code);\n\t\t}\n\n\t\treturn response;\n\t}\n}\n",
|
|
7
7
|
"/**\n * Maps camelCase system column names (with or without `_` prefix) to the\n * actual snake_case DB column names used in query params.\n */\nconst SYSTEM_COLUMN_MAP: Record<string, string> = {\n\t// underscore-prefixed camelCase (canonical row shape)\n\t_blockHeight: \"_block_height\",\n\t_txId: \"_tx_id\",\n\t_createdAt: \"_created_at\",\n\t_id: \"_id\",\n\t// no-prefix aliases\n\tblockHeight: \"_block_height\",\n\ttxId: \"_tx_id\",\n\tcreatedAt: \"_created_at\",\n\tid: \"_id\",\n};\n\nfunction resolveColumn(col: string): string {\n\treturn SYSTEM_COLUMN_MAP[col] ?? col;\n}\n\n/**\n * Serializes a WhereInput object into the flat filter map expected by\n * SubgraphQueryParams.filters (and the REST API query string).\n *\n * Scalar values → `{ column: \"value\" }`\n * Comparison objects → `{ \"column.gte\": \"100\", \"column.lt\": \"200\" }`\n * System column aliases → `blockHeight` / `_blockHeight` both → `_block_height`\n */\nexport function serializeWhere(\n\twhere: Record<string, unknown>,\n): Record<string, string> {\n\tconst filters: Record<string, string> = {};\n\n\tfor (const [column, value] of Object.entries(where)) {\n\t\tif (value === null || value === undefined) continue;\n\n\t\tconst col = resolveColumn(column);\n\n\t\tif (typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\tconst ops = value as Record<string, unknown>;\n\t\t\tfor (const [op, opValue] of Object.entries(ops)) {\n\t\t\t\tif (opValue === null || opValue === undefined) continue;\n\t\t\t\tif (op === \"eq\") {\n\t\t\t\t\tfilters[col] = String(opValue);\n\t\t\t\t} else if ([\"neq\", \"gt\", \"gte\", \"lt\", \"lte\"].includes(op)) {\n\t\t\t\t\tfilters[`${col}.${op}`] = String(opValue);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfilters[col] = String(value);\n\t\t}\n\t}\n\n\treturn filters;\n}\n\n/**\n * Resolves an orderBy column name (either alias or canonical) to the DB column name.\n */\nexport function resolveOrderByColumn(col: string): string {\n\treturn resolveColumn(col);\n}\n",
|
|
8
|
-
"import type {\n\tReindexResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tFindManyOptions,\n\tInferSubgraphClient,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient } from \"../base.ts\";\nimport { resolveOrderByColumn, serializeWhere } from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tversion: string | null;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nfunction buildSubgraphQueryString(params: SubgraphQueryParams): string {\n\tconst qs = new URLSearchParams();\n\tif (params.sort) qs.set(\"_sort\", params.sort);\n\tif (params.order) qs.set(\"_order\", params.order);\n\tif (params.limit !== undefined) qs.set(\"_limit\", String(params.limit));\n\tif (params.offset !== undefined) qs.set(\"_offset\", String(params.offset));\n\tif (params.fields) qs.set(\"_fields\", params.fields);\n\tif (params.filters) {\n\t\tfor (const [key, value] of Object.entries(params.filters)) {\n\t\t\tqs.set(key, String(value));\n\t\t}\n\t}\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\tconst qs = new URLSearchParams();\n\tif (options?.serverUrl) qs.set(\"server\", options.serverUrl);\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.
|
|
8
|
+
"import type {\n\tReindexResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tFindManyOptions,\n\tInferSubgraphClient,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient } from \"../base.ts\";\nimport { resolveOrderByColumn, serializeWhere } from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tversion: string | null;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nfunction buildSubgraphQueryString(params: SubgraphQueryParams): string {\n\tconst qs = new URLSearchParams();\n\tif (params.sort) qs.set(\"_sort\", params.sort);\n\tif (params.order) qs.set(\"_order\", params.order);\n\tif (params.limit !== undefined) qs.set(\"_limit\", String(params.limit));\n\tif (params.offset !== undefined) qs.set(\"_offset\", String(params.offset));\n\tif (params.fields) qs.set(\"_fields\", params.fields);\n\tif (params.filters) {\n\t\tfor (const [key, value] of Object.entries(params.filters)) {\n\t\t\tqs.set(key, String(value));\n\t\t}\n\t}\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\tconst qs = new URLSearchParams();\n\tif (options?.serverUrl) qs.set(\"server\", options.serverUrl);\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.request<{ data: SubgraphSummary[] }>(\"GET\", \"/api/subgraphs\");\n\t}\n\n\tasync get(name: string): Promise<SubgraphDetail> {\n\t\treturn this.request<SubgraphDetail>(\"GET\", `/api/subgraphs/${name}`);\n\t}\n\n\tasync openapi(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<Record<string, unknown>> {\n\t\treturn this.request<Record<string, unknown>>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/openapi.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync schema(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<SubgraphAgentSchema> {\n\t\treturn this.request<SubgraphAgentSchema>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/schema.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync markdown(name: string, options?: SubgraphSpecOptions): Promise<string> {\n\t\treturn this.requestText(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/docs.md${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync reindex(\n\t\tname: string,\n\t\toptions?: { fromBlock?: number; toBlock?: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${name}/reindex`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync stop(\n\t\tname: string,\n\t): Promise<{ message: string; operationId?: string; status?: string }> {\n\t\treturn this.request<{\n\t\t\tmessage: string;\n\t\t\toperationId?: string;\n\t\t\tstatus?: string;\n\t\t}>(\"POST\", `/api/subgraphs/${name}/stop`);\n\t}\n\n\tasync backfill(\n\t\tname: string,\n\t\toptions: { fromBlock: number; toBlock: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${name}/backfill`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync gaps(\n\t\tname: string,\n\t\topts?: { limit?: number; offset?: number; resolved?: boolean },\n\t): Promise<SubgraphGapsResponse> {\n\t\tconst qs = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) qs.set(\"_limit\", String(opts.limit));\n\t\tif (opts?.offset !== undefined) qs.set(\"_offset\", String(opts.offset));\n\t\tif (opts?.resolved !== undefined) qs.set(\"resolved\", String(opts.resolved));\n\t\tconst query = qs.toString();\n\t\treturn this.request<SubgraphGapsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/gaps${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tasync delete(\n\t\tname: string,\n\t\toptions?: { force?: boolean },\n\t): Promise<{ message: string }> {\n\t\tconst qs = options?.force ? \"?force=true\" : \"\";\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subgraphs/${name}${qs}`,\n\t\t);\n\t}\n\n\tasync deploy(data: DeploySubgraphRequest): Promise<DeploySubgraphResponse> {\n\t\treturn this.request<DeploySubgraphResponse>(\"POST\", \"/api/subgraphs\", data);\n\t}\n\n\tasync getSource(name: string): Promise<SubgraphSource> {\n\t\treturn this.request<SubgraphSource>(\"GET\", `/api/subgraphs/${name}/source`);\n\t}\n\n\t/**\n\t * Bundle a TypeScript subgraph source on the server. Used by the web chat\n\t * authoring loop so Vercel's serverless runtime doesn't have to run esbuild.\n\t */\n\tasync bundle(data: { code: string }): Promise<BundleSubgraphResponse> {\n\t\treturn this.request<BundleSubgraphResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subgraphs/bundle\",\n\t\t\tdata,\n\t\t);\n\t}\n\n\tasync queryTable(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphQueryParams = {},\n\t): Promise<unknown[]> {\n\t\tconst result = await this.request<{ data: unknown[] } | unknown[]>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`,\n\t\t);\n\t\treturn Array.isArray(result) ? result : result.data;\n\t}\n\n\tasync queryTableCount(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphQueryParams = {},\n\t): Promise<{ count: number }> {\n\t\treturn this.request<{ count: number }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/${table}/count${buildSubgraphQueryString(params)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n\t * Row types are inferred from the subgraph's schema literal types.\n\t *\n\t * @example\n\t * ```ts\n\t * import mySubgraph from './subgraphs/my-token-subgraph'\n\t * const client = sl.subgraphs.typed(mySubgraph)\n\t * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n\t * // rows: InferTableRow<typeof mySubgraph.schema.transfers>[]\n\t * ```\n\t */\n\ttyped<T extends { name: string; schema: Record<string, unknown> }>(\n\t\tdef: T,\n\t): InferSubgraphClient<T> {\n\t\tconst result: Record<string, unknown> = {};\n\n\t\tfor (const tableName of Object.keys(def.schema)) {\n\t\t\tresult[tableName] = this.createTableClient(def.name, tableName);\n\t\t}\n\n\t\treturn result as InferSubgraphClient<T>;\n\t}\n\n\tprivate createTableClient(subgraphName: string, tableName: string) {\n\t\tconst self = this;\n\n\t\treturn {\n\t\t\tasync findMany<TRow>(\n\t\t\t\toptions: FindManyOptions<TRow> = {},\n\t\t\t): Promise<TRow[]> {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tlet sort: string | undefined;\n\t\t\t\tlet order: string | undefined;\n\t\t\t\tif (options.orderBy) {\n\t\t\t\t\tconst entries = Object.entries(options.orderBy) as [\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\"asc\" | \"desc\",\n\t\t\t\t\t][];\n\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\tif (entries.length > 1) {\n\t\t\t\t\t\t\tconst extra = entries\n\t\t\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t\t\t.map(([col]) => col)\n\t\t\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`orderBy supports only one column; remove extra keys: ${extra}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst first = entries[0];\n\t\t\t\t\t\tif (first) {\n\t\t\t\t\t\t\tconst [col, dir] = first;\n\t\t\t\t\t\t\tsort = resolveOrderByColumn(col);\n\t\t\t\t\t\t\torder = dir ?? \"asc\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst params: SubgraphQueryParams = {\n\t\t\t\t\tsort,\n\t\t\t\t\torder,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\toffset: options.offset,\n\t\t\t\t\tfields: options.fields?.join(\",\"),\n\t\t\t\t\tfilters,\n\t\t\t\t};\n\n\t\t\t\treturn self.queryTable(subgraphName, tableName, params) as Promise<\n\t\t\t\t\tTRow[]\n\t\t\t\t>;\n\t\t\t},\n\n\t\t\tasync count<TRow>(where?: WhereInput<TRow>): Promise<number> {\n\t\t\t\tconst filters = where\n\t\t\t\t\t? serializeWhere(where as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.queryTableCount(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t});\n\t\t\t\treturn result.count;\n\t\t\t},\n\t\t};\n\t}\n}\n",
|
|
9
9
|
"import { BaseClient } from \"../base.ts\";\nimport type { SecondLayerOptions } from \"../base.ts\";\n\nexport type IndexTip = {\n\tblock_height: number;\n\tlag_seconds: number;\n};\n\nexport type FtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransfersEnvelope = {\n\tevents: FtTransfer[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Reserved envelope field. v1 currently always emits [].\n\treorgs: never[];\n};\n\nexport type FtTransfersListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type FtTransfersWalkParams = Omit<FtTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type NftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type NftTransfersEnvelope = {\n\tevents: NftTransfer[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Reserved envelope field. v1 currently always emits [].\n\treorgs: never[];\n};\n\nexport type NftTransfersListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type NftTransfersWalkParams = Omit<NftTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nfunction firstWalkFromHeight(params: {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n}): number | undefined {\n\tif (params.fromHeight !== undefined) return params.fromHeight;\n\tif (params.cursor || params.fromCursor) return undefined;\n\treturn 0;\n}\n\nexport class Index extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\treadonly ftTransfers: {\n\t\tlist: (params?: FtTransfersListParams) => Promise<FtTransfersEnvelope>;\n\t\twalk: (params?: FtTransfersWalkParams) => AsyncIterable<FtTransfer>;\n\t} = {\n\t\tlist: (params: FtTransfersListParams = {}): Promise<FtTransfersEnvelope> =>\n\t\t\tthis.listFtTransfers(params),\n\t\twalk: (params: FtTransfersWalkParams = {}): AsyncIterable<FtTransfer> =>\n\t\t\tthis.walkFtTransfers(params),\n\t};\n\n\treadonly nftTransfers: {\n\t\tlist: (params?: NftTransfersListParams) => Promise<NftTransfersEnvelope>;\n\t\twalk: (params?: NftTransfersWalkParams) => AsyncIterable<NftTransfer>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: NftTransfersListParams = {},\n\t\t): Promise<NftTransfersEnvelope> => this.listNftTransfers(params),\n\t\twalk: (params: NftTransfersWalkParams = {}): AsyncIterable<NftTransfer> =>\n\t\t\tthis.walkNftTransfers(params),\n\t};\n\n\tprivate async listFtTransfers(\n\t\tparams: FtTransfersListParams = {},\n\t): Promise<FtTransfersEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_cursor\", params.fromCursor);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tappendSearchParam(searchParams, \"sender\", params.sender);\n\t\tappendSearchParam(searchParams, \"recipient\", params.recipient);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\n\t\tconst query = searchParams.toString();\n\t\treturn this.request<FtTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/ft-transfers${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tprivate async listNftTransfers(\n\t\tparams: NftTransfersListParams = {},\n\t): Promise<NftTransfersEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_cursor\", params.fromCursor);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tappendSearchParam(searchParams, \"asset_identifier\", params.assetIdentifier);\n\t\tappendSearchParam(searchParams, \"sender\", params.sender);\n\t\tappendSearchParam(searchParams, \"recipient\", params.recipient);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\n\t\tconst query = searchParams.toString();\n\t\treturn this.request<NftTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/nft-transfers${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tprivate async *walkFtTransfers(\n\t\tparams: FtTransfersWalkParams = {},\n\t): AsyncGenerator<FtTransfer> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listFtTransfers({\n\t\t\t\t...params,\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tfor (const event of envelope.events) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield event;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\t!nextCursor ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.events.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n\n\tprivate async *walkNftTransfers(\n\t\tparams: NftTransfersWalkParams = {},\n\t): AsyncGenerator<NftTransfer> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listNftTransfers({\n\t\t\t\t...params,\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tfor (const event of envelope.events) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield event;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\t!nextCursor ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.events.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n}\n",
|
|
10
10
|
"import type {\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n} from \"./types.ts\";\n\ntype StreamsEventsFetchParams = {\n\tcursor?: string | null;\n\tlimit: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\nexport async function defaultSleep(\n\tms: number,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tif (signal?.aborted) return;\n\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tif (!signal) return;\n\t\tsignal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nexport async function consumeStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tconst returnedCursor = await opts.onBatch(envelope.events, envelope);\n\t\tconst nextCursor = returnedCursor ?? envelope.next_cursor;\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n\nexport async function* streamStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsEvent> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tfor (const event of envelope.events) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tyield event;\n\t\t}\n\n\t\tconst nextCursor = envelope.next_cursor;\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (emptyPolls >= maxEmptyPolls || pages >= maxPages) return;\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn;\n\t}\n}\n",
|
|
11
11
|
"export class AuthError extends Error {\n\treadonly status = 401;\n\n\tconstructor(message = \"API key invalid or expired.\") {\n\t\tsuper(message);\n\t\tthis.name = \"AuthError\";\n\t}\n}\n\nexport class RateLimitError extends Error {\n\treadonly status = 429;\n\n\tconstructor(\n\t\tmessage = \"Rate limited. Try again later.\",\n\t\treadonly retryAfter?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RateLimitError\";\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ValidationError\";\n\t}\n}\n\nexport class StreamsServerError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StreamsServerError\";\n\t}\n}\n",
|
|
12
12
|
"import {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tValidationError,\n} from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsStreamParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n} from \"./types.ts\";\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n\tconst text = await response.text();\n\tif (text.length === 0) return undefined;\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn text;\n\t}\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n\tif (body && typeof body === \"object\") {\n\t\tconst record = body as Record<string, unknown>;\n\t\tconst message = record.error ?? record.message;\n\t\tif (typeof message === \"string\" && message.length > 0) return message;\n\t}\n\tif (typeof body === \"string\" && body.length > 0) return body;\n\treturn fallback;\n}\n\nasync function mapStreamsError(response: Response): Promise<never> {\n\tconst body = await responseBody(response);\n\n\tif (response.status === 401) {\n\t\tthrow new AuthError(errorMessage(body, \"API key invalid or expired.\"));\n\t}\n\n\tif (response.status === 429) {\n\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\t\tthrow new RateLimitError(\n\t\t\terrorMessage(body, \"Rate limited. Try again later.\"),\n\t\t\tretryAfter,\n\t\t);\n\t}\n\n\tif (response.status >= 500) {\n\t\tthrow new StreamsServerError(\n\t\t\terrorMessage(body, `Streams server returned ${response.status}.`),\n\t\t\tresponse.status,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tthrow new ValidationError(\n\t\terrorMessage(body, `Streams request returned ${response.status}.`),\n\t\tresponse.status,\n\t\tbody,\n\t);\n}\n\nexport function createStreamsClient(\n\toptions: CreateStreamsClientOptions,\n): StreamsClient {\n\tconst baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_STREAMS_BASE_URL);\n\tconst fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));\n\n\tasync function request<T>(path: string): Promise<T> {\n\t\tconst response = await fetchImpl(`${baseUrl}${path}`, {\n\t\t\theaders: { Authorization: `Bearer ${options.apiKey}` },\n\t\t});\n\t\tif (!response.ok) await mapStreamsError(response);\n\t\treturn (await response.json()) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tcontractId,\n\t}) => {\n\t\treturn listEvents({ cursor, limit, types, contractId });\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tif (params.types?.length) {\n\t\t\tsearchParams.set(\"types\", params.types.join(\",\"));\n\t\t}\n\n\t\tconst query = searchParams.toString();\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tevents: {\n\t\t\tlist: listEvents,\n\t\t\tbyTxId(txId: string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/events/${encodeURIComponent(txId)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tconsume(params: StreamsEventsConsumeParams) {\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\tmode: params.mode,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t\tonBatch: params.onBatch,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t});\n\t\t\t},\n\t\t\tstream(params: StreamsEventsStreamParams = {}) {\n\t\t\t\treturn streamStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tblocks: {\n\t\t\tevents(heightOrHash: number | string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/blocks/${encodeURIComponent(String(heightOrHash))}/events`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\treorgs: {\n\t\t\tlist(params: StreamsReorgsListParams) {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tappendSearchParam(searchParams, \"since\", params.since);\n\t\t\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\t\t\tconst query = searchParams.toString();\n\t\t\t\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${query ? `?${query}` : \"\"}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcanonical(height: number) {\n\t\t\treturn request<StreamsCanonicalBlock>(`/v1/streams/canonical/${height}`);\n\t\t},\n\t\ttip() {\n\t\t\treturn request<StreamsTip>(\"/v1/streams/tip\");\n\t\t},\n\t};\n}\n",
|
|
13
|
-
"import type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\nimport { BaseClient } from \"../base.ts\";\n\nexport type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionFormat,\n\tSubscriptionRuntime,\n\tSubscriptionStatus,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\n\nexport class Subscriptions extends BaseClient {\n\tasync list(): Promise<{ data: SubscriptionSummary[] }> {\n\t\treturn this.
|
|
13
|
+
"import type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\nimport { BaseClient } from \"../base.ts\";\n\nexport type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionFormat,\n\tSubscriptionRuntime,\n\tSubscriptionStatus,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\n\nexport class Subscriptions extends BaseClient {\n\tasync list(): Promise<{ data: SubscriptionSummary[] }> {\n\t\treturn this.request<{ data: SubscriptionSummary[] }>(\n\t\t\t\"GET\",\n\t\t\t\"/api/subscriptions\",\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t);\n\t}\n\n\tasync create(\n\t\tinput: CreateSubscriptionRequest,\n\t): Promise<CreateSubscriptionResponse> {\n\t\treturn this.request<CreateSubscriptionResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subscriptions\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\tasync update(\n\t\tid: string,\n\t\tpatch: UpdateSubscriptionRequest,\n\t): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"PATCH\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t\tpatch,\n\t\t);\n\t}\n\n\tasync pause(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/pause`,\n\t\t);\n\t}\n\n\tasync resume(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/resume`,\n\t\t);\n\t}\n\n\tasync delete(id: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t);\n\t}\n\n\tasync rotateSecret(id: string): Promise<RotateSecretResponse> {\n\t\treturn this.request<RotateSecretResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/rotate-secret`,\n\t\t);\n\t}\n\n\tasync recentDeliveries(id: string): Promise<{ data: DeliveryRow[] }> {\n\t\treturn this.request<{ data: DeliveryRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}/deliveries`,\n\t\t);\n\t}\n\n\tasync replay(\n\t\tid: string,\n\t\trange: { fromBlock: number; toBlock: number },\n\t): Promise<ReplayResult> {\n\t\treturn this.request<ReplayResult>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/replay`,\n\t\t\trange,\n\t\t);\n\t}\n\n\tasync dead(id: string): Promise<{ data: DeadRow[] }> {\n\t\treturn this.request<{ data: DeadRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}/dead`,\n\t\t);\n\t}\n\n\tasync requeueDead(id: string, outboxId: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/dead/${outboxId}/requeue`,\n\t\t);\n\t}\n}\n",
|
|
14
14
|
"import { BaseClient } from \"./base.ts\";\nimport type { SecondLayerOptions } from \"./base.ts\";\nimport { Index } from \"./index-api/client.ts\";\nimport { createStreamsClient } from \"./streams/client.ts\";\nimport type { StreamsClient } from \"./streams/types.ts\";\nimport { Subgraphs } from \"./subgraphs/client.ts\";\nimport { Subscriptions } from \"./subscriptions/client.ts\";\n\nexport class SecondLayer extends BaseClient {\n\treadonly streams: StreamsClient;\n\treadonly index: Index;\n\treadonly subgraphs: Subgraphs;\n\treadonly subscriptions: Subscriptions;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t\tthis.streams = createStreamsClient({\n\t\t\tapiKey: options.apiKey ?? \"\",\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t});\n\t\tthis.index = new Index(options);\n\t\tthis.subgraphs = new Subgraphs(options);\n\t\tthis.subscriptions = new Subscriptions(options);\n\t}\n}\n",
|
|
15
15
|
"import type { InferSubgraphClient } from \"@secondlayer/subgraphs\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport { SecondLayer } from \"../client.ts\";\nimport { Subgraphs } from \"./client.ts\";\n\n/**\n * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n *\n * Accepts a plain options object, a `SecondLayer` instance, or a `Subgraphs` instance.\n *\n * @example\n * ```ts\n * import mySubgraph from './subgraphs/my-subgraph'\n * import { getSubgraph } from '@secondlayer/sdk'\n *\n * const client = getSubgraph(mySubgraph, { apiKey: 'sl_...' })\n * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n * ```\n */\nexport function getSubgraph<\n\tT extends { name: string; schema: Record<string, unknown> },\n>(\n\tdef: T,\n\toptions: Partial<SecondLayerOptions> | SecondLayer | Subgraphs = {},\n): InferSubgraphClient<T> {\n\tif (options instanceof Subgraphs) {\n\t\treturn options.typed(def);\n\t}\n\tif (options instanceof SecondLayer) {\n\t\treturn options.subgraphs.typed(def);\n\t}\n\treturn new Subgraphs(options).typed(def);\n}\n",
|
|
16
16
|
"import type { StreamsEvent } from \"./types.ts\";\n\nexport type FtTransferPayload = {\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransferEvent = StreamsEvent & {\n\tevent_type: \"ft_transfer\";\n\tpayload: FtTransferPayload;\n};\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nfunction requireString(\n\tpayload: Record<string, unknown>,\n\tfield: keyof FtTransferPayload,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`ft_transfer payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nfunction parseAssetIdentifier(assetIdentifier: string): {\n\tcontract_id: string;\n\ttoken_name: string | null;\n} {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(\"ft_transfer payload has malformed asset_identifier\");\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(payload, \"asset_identifier\");\n\tconst sender = requireString(payload, \"sender\");\n\tconst recipient = requireString(payload, \"recipient\");\n\tconst amount = requireString(payload, \"amount\");\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(\"ft_transfer payload has malformed amount\");\n\t}\n\n\tconst { contract_id, token_name } = parseAssetIdentifier(assetIdentifier);\n\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: event.event_type,\n\t\tdecoded_payload: {\n\t\t\tasset_identifier: assetIdentifier,\n\t\t\tcontract_id: event.contract_id ?? contract_id,\n\t\t\ttoken_name,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tamount,\n\t\t},\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"export const STREAMS_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type StreamsEventType = (typeof STREAMS_EVENT_TYPES)[number];\n\nexport type StreamsEventPayload = Record<string, unknown>;\n\nexport type StreamsEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: StreamsEventType;\n\tcontract_id: string | null;\n\tpayload: StreamsEventPayload;\n\tts: string;\n};\n\nexport type StreamsTip = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tlag_seconds: number;\n};\n\nexport type StreamsCanonicalBlock = {\n\tblock_height: number;\n\tindex_block_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tis_canonical: true;\n};\n\nexport type StreamsReorg = {\n\tdetected_at: string;\n\tfork_point_height: number;\n\torphaned_range: { from: string; to: string };\n\tnew_canonical_tip: string;\n};\n\nexport type StreamsEventsEnvelope = {\n\tevents: StreamsEvent[];\n\tnext_cursor: string | null;\n\ttip: StreamsTip;\n\treorgs: StreamsReorg[];\n};\n\nexport type StreamsEventsListEnvelope = Omit<\n\tStreamsEventsEnvelope,\n\t\"next_cursor\"\n>;\n\nexport type StreamsReorgsListParams = {\n\tsince: string;\n\tlimit?: number;\n};\n\nexport type StreamsReorgsListEnvelope = {\n\treorgs: StreamsReorg[];\n\tnext_since: string | null;\n};\n\nexport type StreamsEventsListParams = {\n\tcursor?: string | null;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tlimit?: number;\n};\n\nexport type StreamsEventsStreamParams = {\n\tfromCursor?: string | null;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeParams = {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tbatchSize?: number;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type StreamsEventsConsumeResult = {\n\tcursor: string | null;\n\tpages: number;\n\temptyPolls: number;\n};\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport type StreamsClient = {\n\tevents: {\n\t\tlist(params?: StreamsEventsListParams): Promise<StreamsEventsEnvelope>;\n\t\tbyTxId(txId: string): Promise<StreamsEventsListEnvelope>;\n\t\t/**\n\t\t * Pull pages from Streams and call `onBatch` after each page.\n\t\t *\n\t\t * Use `consume` for indexers and ETL jobs that own checkpointing. Return\n\t\t * the checkpoint cursor from `onBatch`. Default `mode: \"tail\"` keeps\n\t\t * polling when caught up; `mode: \"bounded\"` exits on the first empty page.\n\t\t * The consumer also exits when `maxPages`, `maxEmptyPolls`, or `signal`\n\t\t * stops it.\n\t\t */\n\t\tconsume(\n\t\t\tparams: StreamsEventsConsumeParams,\n\t\t): Promise<StreamsEventsConsumeResult>;\n\t\t/**\n\t\t * Follow Streams as an async iterator.\n\t\t *\n\t\t * Use `stream` for live processors and watch-style apps. It tails\n\t\t * indefinitely by default and stops when its `AbortSignal`, `maxPages`, or\n\t\t * `maxEmptyPolls` stops it.\n\t\t */\n\t\tstream(params?: StreamsEventsStreamParams): AsyncIterable<StreamsEvent>;\n\t};\n\tblocks: {\n\t\tevents(heightOrHash: number | string): Promise<StreamsEventsListEnvelope>;\n\t};\n\treorgs: {\n\t\tlist(params: StreamsReorgsListParams): Promise<StreamsReorgsListEnvelope>;\n\t};\n\tcanonical(height: number): Promise<StreamsCanonicalBlock>;\n\ttip(): Promise<StreamsTip>;\n};\n",
|
|
19
19
|
"import { verifySignatureHeader } from \"@secondlayer/shared/crypto/hmac\";\n\nexport { verifySignatureHeader };\n\n/**\n * Verify a webhook delivery signature from Secondlayer.\n *\n * Every delivery includes an `x-secondlayer-signature` header in the format\n * `t=<timestamp>,v1=<hmac>`. This function verifies the HMAC and checks\n * the timestamp is within the tolerance window (default 5 minutes).\n *\n * @param rawBody - The raw request body as a string (not parsed JSON)\n * @param signatureHeader - The value of the `x-secondlayer-signature` header\n * @param secret - Your signing secret\n * @param toleranceSeconds - Max age of signature in seconds (default 300)\n * @returns true if the signature is valid\n *\n * @example\n * ```ts\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", (req, res) => {\n * const sig = req.headers[\"x-secondlayer-signature\"];\n * const raw = JSON.stringify(req.body);\n * if (!verifyWebhookSignature(raw, sig, process.env.SIGNING_SECRET!)) {\n * return res.status(401).send(\"Invalid signature\");\n * }\n * // Process the event...\n * });\n * ```\n */\nexport function verifyWebhookSignature(\n\trawBody: string,\n\tsignatureHeader: string,\n\tsecret: string,\n\ttoleranceSeconds = 300,\n): boolean {\n\treturn verifySignatureHeader(\n\t\trawBody,\n\t\tsignatureHeader,\n\t\tsecret,\n\t\ttoleranceSeconds,\n\t);\n}\n"
|
|
20
20
|
],
|
|
21
|
-
"mappings": "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",
|
|
22
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "1037187C55F7F02E64756E2164756E21",
|
|
23
23
|
"names": []
|
|
24
24
|
}
|
|
@@ -8,12 +8,6 @@ interface SecondLayerOptions {
|
|
|
8
8
|
baseUrl: string;
|
|
9
9
|
/** Bearer token for authenticated requests. */
|
|
10
10
|
apiKey?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Explicit tenant API base URL — bypass the auto-resolution that calls
|
|
13
|
-
* `/api/tenants/me` on first tenant-resource request. Use when you already
|
|
14
|
-
* know your tenant URL (OSS, staging, or any custom routing setup).
|
|
15
|
-
*/
|
|
16
|
-
tenantBaseUrl?: string;
|
|
17
11
|
/** Fetch implementation. Tests and edge runtimes can provide their own. */
|
|
18
12
|
fetchImpl?: FetchLike;
|
|
19
13
|
/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */
|
|
@@ -23,28 +17,10 @@ declare abstract class BaseClient {
|
|
|
23
17
|
protected baseUrl: string;
|
|
24
18
|
protected apiKey?: string;
|
|
25
19
|
protected origin: "cli" | "mcp" | "session";
|
|
26
|
-
protected tenantBaseUrlOverride?: string;
|
|
27
|
-
private _tenantBaseUrlPromise;
|
|
28
20
|
constructor(options?: Partial<SecondLayerOptions>);
|
|
29
21
|
static authHeaders(apiKey?: string): Record<string, string>;
|
|
30
22
|
protected request<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
31
|
-
protected requestAt<T>(baseUrl: string, method: string, path: string, body?: unknown): Promise<T>;
|
|
32
23
|
protected requestText(method: string, path: string, body?: unknown): Promise<string>;
|
|
33
|
-
/**
|
|
34
|
-
* Resolve and cache the tenant API base URL for tenant-resource calls
|
|
35
|
-
* (subgraphs, subscriptions). On the platform API, those routes are not
|
|
36
|
-
* mounted — they live on per-tenant containers at
|
|
37
|
-
* `https://<slug>.api.secondlayer.tools`. This method asks
|
|
38
|
-
* `/api/tenants/me` (against the platform baseUrl) for the apiUrl that
|
|
39
|
-
* belongs to the authenticated account.
|
|
40
|
-
*
|
|
41
|
-
* The result is cached on the client instance. Failures are NOT cached, so
|
|
42
|
-
* a flaky platform call doesn't permanently break the SDK.
|
|
43
|
-
*/
|
|
44
|
-
protected getTenantBaseUrl(): Promise<string>;
|
|
45
|
-
private resolveTenantBaseUrl;
|
|
46
|
-
protected requestAtTenant<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
47
|
-
protected requestTextAtTenant(method: string, path: string, body?: unknown): Promise<string>;
|
|
48
24
|
private fetchResponse;
|
|
49
25
|
}
|
|
50
26
|
interface SubgraphSource {
|
package/dist/subgraphs/index.js
CHANGED
|
@@ -30,13 +30,10 @@ class BaseClient {
|
|
|
30
30
|
baseUrl;
|
|
31
31
|
apiKey;
|
|
32
32
|
origin;
|
|
33
|
-
tenantBaseUrlOverride;
|
|
34
|
-
_tenantBaseUrlPromise = null;
|
|
35
33
|
constructor(options = {}) {
|
|
36
34
|
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
37
35
|
this.apiKey = options.apiKey;
|
|
38
36
|
this.origin = options.origin ?? "cli";
|
|
39
|
-
this.tenantBaseUrlOverride = options.tenantBaseUrl?.replace(/\/+$/, "");
|
|
40
37
|
}
|
|
41
38
|
static authHeaders(apiKey) {
|
|
42
39
|
const headers = {
|
|
@@ -48,53 +45,18 @@ class BaseClient {
|
|
|
48
45
|
return headers;
|
|
49
46
|
}
|
|
50
47
|
async request(method, path, body) {
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
async requestAt(baseUrl, method, path, body) {
|
|
54
|
-
const response = await this.fetchResponse(baseUrl, method, path, body);
|
|
48
|
+
const response = await this.fetchResponse(method, path, body);
|
|
55
49
|
if (response.status === 204) {
|
|
56
50
|
return;
|
|
57
51
|
}
|
|
58
52
|
return response.json();
|
|
59
53
|
}
|
|
60
54
|
async requestText(method, path, body) {
|
|
61
|
-
const response = await this.fetchResponse(
|
|
62
|
-
return response.text();
|
|
63
|
-
}
|
|
64
|
-
getTenantBaseUrl() {
|
|
65
|
-
if (this.tenantBaseUrlOverride) {
|
|
66
|
-
return Promise.resolve(this.tenantBaseUrlOverride);
|
|
67
|
-
}
|
|
68
|
-
if (!this._tenantBaseUrlPromise) {
|
|
69
|
-
this._tenantBaseUrlPromise = this.resolveTenantBaseUrl().catch((err) => {
|
|
70
|
-
this._tenantBaseUrlPromise = null;
|
|
71
|
-
throw err;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return this._tenantBaseUrlPromise;
|
|
75
|
-
}
|
|
76
|
-
async resolveTenantBaseUrl() {
|
|
77
|
-
const body = await this.request("GET", "/api/tenants/me");
|
|
78
|
-
const tenant = body.tenant;
|
|
79
|
-
if (tenant.suspendedAt) {
|
|
80
|
-
throw new ApiError(403, `Tenant ${tenant.slug} is suspended${tenant.limitReason ? `: ${tenant.limitReason}` : ""}.`, body, "TENANT_SUSPENDED");
|
|
81
|
-
}
|
|
82
|
-
if (!tenant.apiUrl) {
|
|
83
|
-
throw new ApiError(404, "No tenant API URL available for this account. Provision a tenant at https://secondlayer.tools/platform.", body, "NO_TENANT");
|
|
84
|
-
}
|
|
85
|
-
return tenant.apiUrl.replace(/\/+$/, "");
|
|
86
|
-
}
|
|
87
|
-
async requestAtTenant(method, path, body) {
|
|
88
|
-
const tenantUrl = await this.getTenantBaseUrl();
|
|
89
|
-
return this.requestAt(tenantUrl, method, path, body);
|
|
90
|
-
}
|
|
91
|
-
async requestTextAtTenant(method, path, body) {
|
|
92
|
-
const tenantUrl = await this.getTenantBaseUrl();
|
|
93
|
-
const response = await this.fetchResponse(tenantUrl, method, path, body);
|
|
55
|
+
const response = await this.fetchResponse(method, path, body);
|
|
94
56
|
return response.text();
|
|
95
57
|
}
|
|
96
|
-
async fetchResponse(
|
|
97
|
-
const url = `${baseUrl}${path}`;
|
|
58
|
+
async fetchResponse(method, path, body) {
|
|
59
|
+
const url = `${this.baseUrl}${path}`;
|
|
98
60
|
const headers = BaseClient.authHeaders(this.apiKey);
|
|
99
61
|
headers["x-sl-origin"] = this.origin;
|
|
100
62
|
let response;
|
|
@@ -105,7 +67,7 @@ class BaseClient {
|
|
|
105
67
|
body: body ? JSON.stringify(body) : undefined
|
|
106
68
|
});
|
|
107
69
|
} catch {
|
|
108
|
-
throw new ApiError(0, `Cannot reach API at ${baseUrl}. Check your connection or try again.`);
|
|
70
|
+
throw new ApiError(0, `Cannot reach API at ${this.baseUrl}. Check your connection or try again.`);
|
|
109
71
|
}
|
|
110
72
|
if (!response.ok) {
|
|
111
73
|
if (response.status === 401) {
|
|
@@ -117,7 +79,7 @@ class BaseClient {
|
|
|
117
79
|
throw new ApiError(429, msg);
|
|
118
80
|
}
|
|
119
81
|
if (response.status >= 500) {
|
|
120
|
-
throw new ApiError(response.status, `Server error. Try again or check status at ${baseUrl}/health`);
|
|
82
|
+
throw new ApiError(response.status, `Server error. Try again or check status at ${this.baseUrl}/health`);
|
|
121
83
|
}
|
|
122
84
|
const errorBody = await response.text();
|
|
123
85
|
let message = `HTTP ${response.status}`;
|
|
@@ -217,28 +179,28 @@ function buildSpecQueryString(options) {
|
|
|
217
179
|
|
|
218
180
|
class Subgraphs extends BaseClient {
|
|
219
181
|
async list() {
|
|
220
|
-
return this.
|
|
182
|
+
return this.request("GET", "/api/subgraphs");
|
|
221
183
|
}
|
|
222
184
|
async get(name) {
|
|
223
|
-
return this.
|
|
185
|
+
return this.request("GET", `/api/subgraphs/${name}`);
|
|
224
186
|
}
|
|
225
187
|
async openapi(name, options) {
|
|
226
|
-
return this.
|
|
188
|
+
return this.request("GET", `/api/subgraphs/${name}/openapi.json${buildSpecQueryString(options)}`);
|
|
227
189
|
}
|
|
228
190
|
async schema(name, options) {
|
|
229
|
-
return this.
|
|
191
|
+
return this.request("GET", `/api/subgraphs/${name}/schema.json${buildSpecQueryString(options)}`);
|
|
230
192
|
}
|
|
231
193
|
async markdown(name, options) {
|
|
232
|
-
return this.
|
|
194
|
+
return this.requestText("GET", `/api/subgraphs/${name}/docs.md${buildSpecQueryString(options)}`);
|
|
233
195
|
}
|
|
234
196
|
async reindex(name, options) {
|
|
235
|
-
return this.
|
|
197
|
+
return this.request("POST", `/api/subgraphs/${name}/reindex`, options);
|
|
236
198
|
}
|
|
237
199
|
async stop(name) {
|
|
238
|
-
return this.
|
|
200
|
+
return this.request("POST", `/api/subgraphs/${name}/stop`);
|
|
239
201
|
}
|
|
240
202
|
async backfill(name, options) {
|
|
241
|
-
return this.
|
|
203
|
+
return this.request("POST", `/api/subgraphs/${name}/backfill`, options);
|
|
242
204
|
}
|
|
243
205
|
async gaps(name, opts) {
|
|
244
206
|
const qs = new URLSearchParams;
|
|
@@ -249,27 +211,27 @@ class Subgraphs extends BaseClient {
|
|
|
249
211
|
if (opts?.resolved !== undefined)
|
|
250
212
|
qs.set("resolved", String(opts.resolved));
|
|
251
213
|
const query = qs.toString();
|
|
252
|
-
return this.
|
|
214
|
+
return this.request("GET", `/api/subgraphs/${name}/gaps${query ? `?${query}` : ""}`);
|
|
253
215
|
}
|
|
254
216
|
async delete(name, options) {
|
|
255
217
|
const qs = options?.force ? "?force=true" : "";
|
|
256
|
-
return this.
|
|
218
|
+
return this.request("DELETE", `/api/subgraphs/${name}${qs}`);
|
|
257
219
|
}
|
|
258
220
|
async deploy(data) {
|
|
259
|
-
return this.
|
|
221
|
+
return this.request("POST", "/api/subgraphs", data);
|
|
260
222
|
}
|
|
261
223
|
async getSource(name) {
|
|
262
|
-
return this.
|
|
224
|
+
return this.request("GET", `/api/subgraphs/${name}/source`);
|
|
263
225
|
}
|
|
264
226
|
async bundle(data) {
|
|
265
|
-
return this.
|
|
227
|
+
return this.request("POST", "/api/subgraphs/bundle", data);
|
|
266
228
|
}
|
|
267
229
|
async queryTable(name, table, params = {}) {
|
|
268
|
-
const result = await this.
|
|
230
|
+
const result = await this.request("GET", `/api/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`);
|
|
269
231
|
return Array.isArray(result) ? result : result.data;
|
|
270
232
|
}
|
|
271
233
|
async queryTableCount(name, table, params = {}) {
|
|
272
|
-
return this.
|
|
234
|
+
return this.request("GET", `/api/subgraphs/${name}/${table}/count${buildSubgraphQueryString(params)}`);
|
|
273
235
|
}
|
|
274
236
|
typed(def) {
|
|
275
237
|
const result = {};
|
|
@@ -692,40 +654,40 @@ function createStreamsClient(options) {
|
|
|
692
654
|
// src/subscriptions/client.ts
|
|
693
655
|
class Subscriptions extends BaseClient {
|
|
694
656
|
async list() {
|
|
695
|
-
return this.
|
|
657
|
+
return this.request("GET", "/api/subscriptions");
|
|
696
658
|
}
|
|
697
659
|
async get(id) {
|
|
698
|
-
return this.
|
|
660
|
+
return this.request("GET", `/api/subscriptions/${id}`);
|
|
699
661
|
}
|
|
700
662
|
async create(input) {
|
|
701
|
-
return this.
|
|
663
|
+
return this.request("POST", "/api/subscriptions", input);
|
|
702
664
|
}
|
|
703
665
|
async update(id, patch) {
|
|
704
|
-
return this.
|
|
666
|
+
return this.request("PATCH", `/api/subscriptions/${id}`, patch);
|
|
705
667
|
}
|
|
706
668
|
async pause(id) {
|
|
707
|
-
return this.
|
|
669
|
+
return this.request("POST", `/api/subscriptions/${id}/pause`);
|
|
708
670
|
}
|
|
709
671
|
async resume(id) {
|
|
710
|
-
return this.
|
|
672
|
+
return this.request("POST", `/api/subscriptions/${id}/resume`);
|
|
711
673
|
}
|
|
712
674
|
async delete(id) {
|
|
713
|
-
return this.
|
|
675
|
+
return this.request("DELETE", `/api/subscriptions/${id}`);
|
|
714
676
|
}
|
|
715
677
|
async rotateSecret(id) {
|
|
716
|
-
return this.
|
|
678
|
+
return this.request("POST", `/api/subscriptions/${id}/rotate-secret`);
|
|
717
679
|
}
|
|
718
680
|
async recentDeliveries(id) {
|
|
719
|
-
return this.
|
|
681
|
+
return this.request("GET", `/api/subscriptions/${id}/deliveries`);
|
|
720
682
|
}
|
|
721
683
|
async replay(id, range) {
|
|
722
|
-
return this.
|
|
684
|
+
return this.request("POST", `/api/subscriptions/${id}/replay`, range);
|
|
723
685
|
}
|
|
724
686
|
async dead(id) {
|
|
725
|
-
return this.
|
|
687
|
+
return this.request("GET", `/api/subscriptions/${id}/dead`);
|
|
726
688
|
}
|
|
727
689
|
async requeueDead(id, outboxId) {
|
|
728
|
-
return this.
|
|
690
|
+
return this.request("POST", `/api/subscriptions/${id}/dead/${outboxId}/requeue`);
|
|
729
691
|
}
|
|
730
692
|
}
|
|
731
693
|
|
|
@@ -763,5 +725,5 @@ export {
|
|
|
763
725
|
Subgraphs
|
|
764
726
|
};
|
|
765
727
|
|
|
766
|
-
//# debugId=
|
|
728
|
+
//# debugId=A3C5099B870B5FCE64756E2164756E21
|
|
767
729
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
"sources": ["../src/errors.ts", "../src/base.ts", "../src/subgraphs/serialize.ts", "../src/subgraphs/client.ts", "../src/index-api/client.ts", "../src/streams/consumer.ts", "../src/streams/errors.ts", "../src/streams/client.ts", "../src/subscriptions/client.ts", "../src/client.ts", "../src/subgraphs/get-subgraph.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Error thrown by {@link SecondLayer} when an API request fails.\n * Includes the HTTP status code for programmatic error handling.\n *\n * @example\n * ```ts\n * try {\n * await client.subgraphs.get(\"my-subgraph\");\n * } catch (err) {\n * if (err instanceof ApiError && err.status === 404) {\n * console.log(\"Subgraph not found\");\n * }\n * }\n * ```\n */\nexport class ApiError extends Error {\n\tconstructor(\n\t\t/** HTTP status code (0 for network errors). */\n\t\tpublic status: number,\n\t\tmessage: string,\n\t\t/** Raw response body (parsed JSON if possible) — preserved for callers that need error details. */\n\t\tpublic body?: unknown,\n\t\t/** Stable machine-readable code from the API's `{error, code}` error envelope. */\n\t\tpublic code?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ApiError\";\n\t}\n}\n\n/**\n * Thrown on optimistic-concurrency conflict when a deploy supplies an\n * `expectedVersion` that no longer matches the server's stored version.\n */\nexport class VersionConflictError extends ApiError {\n\tconstructor(\n\t\tpublic currentVersion: string,\n\t\tpublic expectedVersion: string,\n\t\tmessage = `Version conflict: expected ${expectedVersion}, current ${currentVersion}`,\n\t) {\n\t\tsuper(409, message, { currentVersion, expectedVersion });\n\t\tthis.name = \"VersionConflictError\";\n\t}\n}\n",
|
|
6
|
-
"import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t
|
|
6
|
+
"import { ApiError } from \"./errors.ts\";\n\nexport type FetchLike = (\n\tinput: string | URL | Request,\n\tinit?: RequestInit,\n) => Promise<Response>;\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer platform API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\n\t/** Fetch implementation. Tests and edge runtimes can provide their own. */\n\tfetchImpl?: FetchLike;\n\t/** Deploy origin label sent as `x-sl-origin` (telemetry). Defaults to `cli`. */\n\torigin?: \"cli\" | \"mcp\" | \"session\";\n}\n\nconst DEFAULT_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport abstract class BaseClient {\n\tprotected baseUrl: string;\n\tprotected apiKey?: string;\n\tprotected origin: \"cli\" | \"mcp\" | \"session\";\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tthis.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tthis.apiKey = options.apiKey;\n\t\tthis.origin = options.origin ?? \"cli\";\n\t}\n\n\tstatic authHeaders(apiKey?: string): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t};\n\t\tif (apiKey) {\n\t\t\theaders.Authorization = `Bearer ${apiKey}`;\n\t\t}\n\t\treturn headers;\n\t}\n\n\tprotected async request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<T> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\tif (response.status === 204) {\n\t\t\treturn undefined as T;\n\t\t}\n\t\treturn response.json() as Promise<T>;\n\t}\n\n\tprotected async requestText(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<string> {\n\t\tconst response = await this.fetchResponse(method, path, body);\n\t\treturn response.text();\n\t}\n\n\tprivate async fetchResponse(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tbody?: unknown,\n\t): Promise<Response> {\n\t\tconst url = `${this.baseUrl}${path}`;\n\t\tconst headers = BaseClient.authHeaders(this.apiKey);\n\t\theaders[\"x-sl-origin\"] = this.origin;\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\tresponse = await fetch(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tbody: body ? JSON.stringify(body) : undefined,\n\t\t\t});\n\t\t} catch {\n\t\t\tthrow new ApiError(\n\t\t\t\t0,\n\t\t\t\t`Cannot reach API at ${this.baseUrl}. Check your connection or try again.`,\n\t\t\t);\n\t\t}\n\n\t\tif (!response.ok) {\n\t\t\tif (response.status === 401) {\n\t\t\t\tthrow new ApiError(401, \"API key invalid or expired.\");\n\t\t\t}\n\n\t\t\tif (response.status === 429) {\n\t\t\t\tconst retryAfter = response.headers.get(\"Retry-After\");\n\t\t\t\tconst msg = retryAfter\n\t\t\t\t\t? `Rate limited. Wait ${retryAfter} seconds.`\n\t\t\t\t\t: \"Rate limited. Try again later.\";\n\t\t\t\tthrow new ApiError(429, msg);\n\t\t\t}\n\n\t\t\tif (response.status >= 500) {\n\t\t\t\tthrow new ApiError(\n\t\t\t\t\tresponse.status,\n\t\t\t\t\t`Server error. Try again or check status at ${this.baseUrl}/health`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst errorBody = await response.text();\n\t\t\tlet message = `HTTP ${response.status}`;\n\t\t\tlet parsedBody: unknown = errorBody;\n\t\t\tlet code: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst json = JSON.parse(errorBody);\n\t\t\t\tparsedBody = json;\n\t\t\t\tconst err = json.error ?? json.message;\n\t\t\t\tif (typeof err === \"string\") {\n\t\t\t\t\tmessage = err;\n\t\t\t\t} else if (err && typeof err === \"object\") {\n\t\t\t\t\tmessage = JSON.stringify(err);\n\t\t\t\t}\n\t\t\t\tif (typeof json.code === \"string\") {\n\t\t\t\t\tcode = json.code;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (errorBody) message = errorBody;\n\t\t\t}\n\t\t\tthrow new ApiError(response.status, message, parsedBody, code);\n\t\t}\n\n\t\treturn response;\n\t}\n}\n",
|
|
7
7
|
"/**\n * Maps camelCase system column names (with or without `_` prefix) to the\n * actual snake_case DB column names used in query params.\n */\nconst SYSTEM_COLUMN_MAP: Record<string, string> = {\n\t// underscore-prefixed camelCase (canonical row shape)\n\t_blockHeight: \"_block_height\",\n\t_txId: \"_tx_id\",\n\t_createdAt: \"_created_at\",\n\t_id: \"_id\",\n\t// no-prefix aliases\n\tblockHeight: \"_block_height\",\n\ttxId: \"_tx_id\",\n\tcreatedAt: \"_created_at\",\n\tid: \"_id\",\n};\n\nfunction resolveColumn(col: string): string {\n\treturn SYSTEM_COLUMN_MAP[col] ?? col;\n}\n\n/**\n * Serializes a WhereInput object into the flat filter map expected by\n * SubgraphQueryParams.filters (and the REST API query string).\n *\n * Scalar values → `{ column: \"value\" }`\n * Comparison objects → `{ \"column.gte\": \"100\", \"column.lt\": \"200\" }`\n * System column aliases → `blockHeight` / `_blockHeight` both → `_block_height`\n */\nexport function serializeWhere(\n\twhere: Record<string, unknown>,\n): Record<string, string> {\n\tconst filters: Record<string, string> = {};\n\n\tfor (const [column, value] of Object.entries(where)) {\n\t\tif (value === null || value === undefined) continue;\n\n\t\tconst col = resolveColumn(column);\n\n\t\tif (typeof value === \"object\" && !Array.isArray(value)) {\n\t\t\tconst ops = value as Record<string, unknown>;\n\t\t\tfor (const [op, opValue] of Object.entries(ops)) {\n\t\t\t\tif (opValue === null || opValue === undefined) continue;\n\t\t\t\tif (op === \"eq\") {\n\t\t\t\t\tfilters[col] = String(opValue);\n\t\t\t\t} else if ([\"neq\", \"gt\", \"gte\", \"lt\", \"lte\"].includes(op)) {\n\t\t\t\t\tfilters[`${col}.${op}`] = String(opValue);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfilters[col] = String(value);\n\t\t}\n\t}\n\n\treturn filters;\n}\n\n/**\n * Resolves an orderBy column name (either alias or canonical) to the DB column name.\n */\nexport function resolveOrderByColumn(col: string): string {\n\treturn resolveColumn(col);\n}\n",
|
|
8
|
-
"import type {\n\tReindexResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tFindManyOptions,\n\tInferSubgraphClient,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient } from \"../base.ts\";\nimport { resolveOrderByColumn, serializeWhere } from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tversion: string | null;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nfunction buildSubgraphQueryString(params: SubgraphQueryParams): string {\n\tconst qs = new URLSearchParams();\n\tif (params.sort) qs.set(\"_sort\", params.sort);\n\tif (params.order) qs.set(\"_order\", params.order);\n\tif (params.limit !== undefined) qs.set(\"_limit\", String(params.limit));\n\tif (params.offset !== undefined) qs.set(\"_offset\", String(params.offset));\n\tif (params.fields) qs.set(\"_fields\", params.fields);\n\tif (params.filters) {\n\t\tfor (const [key, value] of Object.entries(params.filters)) {\n\t\t\tqs.set(key, String(value));\n\t\t}\n\t}\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\tconst qs = new URLSearchParams();\n\tif (options?.serverUrl) qs.set(\"server\", options.serverUrl);\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.
|
|
8
|
+
"import type {\n\tReindexResponse,\n\tSubgraphDetail,\n\tSubgraphGapsResponse,\n\tSubgraphQueryParams,\n\tSubgraphSummary,\n} from \"@secondlayer/shared/schemas\";\nimport type {\n\tDeploySubgraphRequest,\n\tDeploySubgraphResponse,\n} from \"@secondlayer/shared/schemas/subgraphs\";\nimport type {\n\tSubgraphAgentSchema,\n\tSubgraphSpecOptions,\n} from \"@secondlayer/shared/subgraphs/spec\";\nimport type {\n\tFindManyOptions,\n\tInferSubgraphClient,\n\tWhereInput,\n} from \"@secondlayer/subgraphs\";\nimport { BaseClient } from \"../base.ts\";\nimport { resolveOrderByColumn, serializeWhere } from \"./serialize.ts\";\n\nexport interface SubgraphSource {\n\tname: string;\n\tversion: string;\n\tsourceCode: string | null;\n\treadOnly: boolean;\n\treason?: string;\n\tupdatedAt: string;\n}\n\nexport interface BundleSubgraphResponse {\n\tok: true;\n\tname: string;\n\tversion: string | null;\n\tdescription: string | null;\n\tsources: Record<string, Record<string, unknown>>;\n\tschema: Record<string, unknown>;\n\thandlerCode: string;\n\tsourceCode: string;\n\tbundleSize: number;\n}\n\nfunction buildSubgraphQueryString(params: SubgraphQueryParams): string {\n\tconst qs = new URLSearchParams();\n\tif (params.sort) qs.set(\"_sort\", params.sort);\n\tif (params.order) qs.set(\"_order\", params.order);\n\tif (params.limit !== undefined) qs.set(\"_limit\", String(params.limit));\n\tif (params.offset !== undefined) qs.set(\"_offset\", String(params.offset));\n\tif (params.fields) qs.set(\"_fields\", params.fields);\n\tif (params.filters) {\n\t\tfor (const [key, value] of Object.entries(params.filters)) {\n\t\t\tqs.set(key, String(value));\n\t\t}\n\t}\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nfunction buildSpecQueryString(options?: SubgraphSpecOptions): string {\n\tconst qs = new URLSearchParams();\n\tif (options?.serverUrl) qs.set(\"server\", options.serverUrl);\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\n}\n\nexport class Subgraphs extends BaseClient {\n\tasync list(): Promise<{ data: SubgraphSummary[] }> {\n\t\treturn this.request<{ data: SubgraphSummary[] }>(\"GET\", \"/api/subgraphs\");\n\t}\n\n\tasync get(name: string): Promise<SubgraphDetail> {\n\t\treturn this.request<SubgraphDetail>(\"GET\", `/api/subgraphs/${name}`);\n\t}\n\n\tasync openapi(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<Record<string, unknown>> {\n\t\treturn this.request<Record<string, unknown>>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/openapi.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync schema(\n\t\tname: string,\n\t\toptions?: SubgraphSpecOptions,\n\t): Promise<SubgraphAgentSchema> {\n\t\treturn this.request<SubgraphAgentSchema>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/schema.json${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync markdown(name: string, options?: SubgraphSpecOptions): Promise<string> {\n\t\treturn this.requestText(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/docs.md${buildSpecQueryString(options)}`,\n\t\t);\n\t}\n\n\tasync reindex(\n\t\tname: string,\n\t\toptions?: { fromBlock?: number; toBlock?: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${name}/reindex`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync stop(\n\t\tname: string,\n\t): Promise<{ message: string; operationId?: string; status?: string }> {\n\t\treturn this.request<{\n\t\t\tmessage: string;\n\t\t\toperationId?: string;\n\t\t\tstatus?: string;\n\t\t}>(\"POST\", `/api/subgraphs/${name}/stop`);\n\t}\n\n\tasync backfill(\n\t\tname: string,\n\t\toptions: { fromBlock: number; toBlock: number },\n\t): Promise<ReindexResponse> {\n\t\treturn this.request<ReindexResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${name}/backfill`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\tasync gaps(\n\t\tname: string,\n\t\topts?: { limit?: number; offset?: number; resolved?: boolean },\n\t): Promise<SubgraphGapsResponse> {\n\t\tconst qs = new URLSearchParams();\n\t\tif (opts?.limit !== undefined) qs.set(\"_limit\", String(opts.limit));\n\t\tif (opts?.offset !== undefined) qs.set(\"_offset\", String(opts.offset));\n\t\tif (opts?.resolved !== undefined) qs.set(\"resolved\", String(opts.resolved));\n\t\tconst query = qs.toString();\n\t\treturn this.request<SubgraphGapsResponse>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/gaps${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tasync delete(\n\t\tname: string,\n\t\toptions?: { force?: boolean },\n\t): Promise<{ message: string }> {\n\t\tconst qs = options?.force ? \"?force=true\" : \"\";\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subgraphs/${name}${qs}`,\n\t\t);\n\t}\n\n\tasync deploy(data: DeploySubgraphRequest): Promise<DeploySubgraphResponse> {\n\t\treturn this.request<DeploySubgraphResponse>(\"POST\", \"/api/subgraphs\", data);\n\t}\n\n\tasync getSource(name: string): Promise<SubgraphSource> {\n\t\treturn this.request<SubgraphSource>(\"GET\", `/api/subgraphs/${name}/source`);\n\t}\n\n\t/**\n\t * Bundle a TypeScript subgraph source on the server. Used by the web chat\n\t * authoring loop so Vercel's serverless runtime doesn't have to run esbuild.\n\t */\n\tasync bundle(data: { code: string }): Promise<BundleSubgraphResponse> {\n\t\treturn this.request<BundleSubgraphResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subgraphs/bundle\",\n\t\t\tdata,\n\t\t);\n\t}\n\n\tasync queryTable(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphQueryParams = {},\n\t): Promise<unknown[]> {\n\t\tconst result = await this.request<{ data: unknown[] } | unknown[]>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`,\n\t\t);\n\t\treturn Array.isArray(result) ? result : result.data;\n\t}\n\n\tasync queryTableCount(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphQueryParams = {},\n\t): Promise<{ count: number }> {\n\t\treturn this.request<{ count: number }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subgraphs/${name}/${table}/count${buildSubgraphQueryString(params)}`,\n\t\t);\n\t}\n\n\t/**\n\t * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n\t * Row types are inferred from the subgraph's schema literal types.\n\t *\n\t * @example\n\t * ```ts\n\t * import mySubgraph from './subgraphs/my-token-subgraph'\n\t * const client = sl.subgraphs.typed(mySubgraph)\n\t * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n\t * // rows: InferTableRow<typeof mySubgraph.schema.transfers>[]\n\t * ```\n\t */\n\ttyped<T extends { name: string; schema: Record<string, unknown> }>(\n\t\tdef: T,\n\t): InferSubgraphClient<T> {\n\t\tconst result: Record<string, unknown> = {};\n\n\t\tfor (const tableName of Object.keys(def.schema)) {\n\t\t\tresult[tableName] = this.createTableClient(def.name, tableName);\n\t\t}\n\n\t\treturn result as InferSubgraphClient<T>;\n\t}\n\n\tprivate createTableClient(subgraphName: string, tableName: string) {\n\t\tconst self = this;\n\n\t\treturn {\n\t\t\tasync findMany<TRow>(\n\t\t\t\toptions: FindManyOptions<TRow> = {},\n\t\t\t): Promise<TRow[]> {\n\t\t\t\tconst filters = options.where\n\t\t\t\t\t? serializeWhere(options.where as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tlet sort: string | undefined;\n\t\t\t\tlet order: string | undefined;\n\t\t\t\tif (options.orderBy) {\n\t\t\t\t\tconst entries = Object.entries(options.orderBy) as [\n\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\"asc\" | \"desc\",\n\t\t\t\t\t][];\n\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\tif (entries.length > 1) {\n\t\t\t\t\t\t\tconst extra = entries\n\t\t\t\t\t\t\t\t.slice(1)\n\t\t\t\t\t\t\t\t.map(([col]) => col)\n\t\t\t\t\t\t\t\t.join(\", \");\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`orderBy supports only one column; remove extra keys: ${extra}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst first = entries[0];\n\t\t\t\t\t\tif (first) {\n\t\t\t\t\t\t\tconst [col, dir] = first;\n\t\t\t\t\t\t\tsort = resolveOrderByColumn(col);\n\t\t\t\t\t\t\torder = dir ?? \"asc\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst params: SubgraphQueryParams = {\n\t\t\t\t\tsort,\n\t\t\t\t\torder,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\toffset: options.offset,\n\t\t\t\t\tfields: options.fields?.join(\",\"),\n\t\t\t\t\tfilters,\n\t\t\t\t};\n\n\t\t\t\treturn self.queryTable(subgraphName, tableName, params) as Promise<\n\t\t\t\t\tTRow[]\n\t\t\t\t>;\n\t\t\t},\n\n\t\t\tasync count<TRow>(where?: WhereInput<TRow>): Promise<number> {\n\t\t\t\tconst filters = where\n\t\t\t\t\t? serializeWhere(where as Record<string, unknown>)\n\t\t\t\t\t: undefined;\n\n\t\t\t\tconst result = await self.queryTableCount(subgraphName, tableName, {\n\t\t\t\t\tfilters,\n\t\t\t\t});\n\t\t\t\treturn result.count;\n\t\t\t},\n\t\t};\n\t}\n}\n",
|
|
9
9
|
"import { BaseClient } from \"../base.ts\";\nimport type { SecondLayerOptions } from \"../base.ts\";\n\nexport type IndexTip = {\n\tblock_height: number;\n\tlag_seconds: number;\n};\n\nexport type FtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransfersEnvelope = {\n\tevents: FtTransfer[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Reserved envelope field. v1 currently always emits [].\n\treorgs: never[];\n};\n\nexport type FtTransfersListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type FtTransfersWalkParams = Omit<FtTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type NftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type NftTransfersEnvelope = {\n\tevents: NftTransfer[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Reserved envelope field. v1 currently always emits [].\n\treorgs: never[];\n};\n\nexport type NftTransfersListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type NftTransfersWalkParams = Omit<NftTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nfunction firstWalkFromHeight(params: {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n}): number | undefined {\n\tif (params.fromHeight !== undefined) return params.fromHeight;\n\tif (params.cursor || params.fromCursor) return undefined;\n\treturn 0;\n}\n\nexport class Index extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\treadonly ftTransfers: {\n\t\tlist: (params?: FtTransfersListParams) => Promise<FtTransfersEnvelope>;\n\t\twalk: (params?: FtTransfersWalkParams) => AsyncIterable<FtTransfer>;\n\t} = {\n\t\tlist: (params: FtTransfersListParams = {}): Promise<FtTransfersEnvelope> =>\n\t\t\tthis.listFtTransfers(params),\n\t\twalk: (params: FtTransfersWalkParams = {}): AsyncIterable<FtTransfer> =>\n\t\t\tthis.walkFtTransfers(params),\n\t};\n\n\treadonly nftTransfers: {\n\t\tlist: (params?: NftTransfersListParams) => Promise<NftTransfersEnvelope>;\n\t\twalk: (params?: NftTransfersWalkParams) => AsyncIterable<NftTransfer>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: NftTransfersListParams = {},\n\t\t): Promise<NftTransfersEnvelope> => this.listNftTransfers(params),\n\t\twalk: (params: NftTransfersWalkParams = {}): AsyncIterable<NftTransfer> =>\n\t\t\tthis.walkNftTransfers(params),\n\t};\n\n\tprivate async listFtTransfers(\n\t\tparams: FtTransfersListParams = {},\n\t): Promise<FtTransfersEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_cursor\", params.fromCursor);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tappendSearchParam(searchParams, \"sender\", params.sender);\n\t\tappendSearchParam(searchParams, \"recipient\", params.recipient);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\n\t\tconst query = searchParams.toString();\n\t\treturn this.request<FtTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/ft-transfers${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tprivate async listNftTransfers(\n\t\tparams: NftTransfersListParams = {},\n\t): Promise<NftTransfersEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_cursor\", params.fromCursor);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tappendSearchParam(searchParams, \"asset_identifier\", params.assetIdentifier);\n\t\tappendSearchParam(searchParams, \"sender\", params.sender);\n\t\tappendSearchParam(searchParams, \"recipient\", params.recipient);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\n\t\tconst query = searchParams.toString();\n\t\treturn this.request<NftTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/nft-transfers${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\tprivate async *walkFtTransfers(\n\t\tparams: FtTransfersWalkParams = {},\n\t): AsyncGenerator<FtTransfer> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listFtTransfers({\n\t\t\t\t...params,\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tfor (const event of envelope.events) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield event;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\t!nextCursor ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.events.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n\n\tprivate async *walkNftTransfers(\n\t\tparams: NftTransfersWalkParams = {},\n\t): AsyncGenerator<NftTransfer> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listNftTransfers({\n\t\t\t\t...params,\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tfor (const event of envelope.events) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield event;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\t!nextCursor ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.events.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n}\n",
|
|
10
10
|
"import type {\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n} from \"./types.ts\";\n\ntype StreamsEventsFetchParams = {\n\tcursor?: string | null;\n\tlimit: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\nexport async function defaultSleep(\n\tms: number,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tif (signal?.aborted) return;\n\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tif (!signal) return;\n\t\tsignal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nexport async function consumeStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t) => Promise<string | null | undefined> | string | null | undefined;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tconst returnedCursor = await opts.onBatch(envelope.events, envelope);\n\t\tconst nextCursor = returnedCursor ?? envelope.next_cursor;\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n\nexport async function* streamStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tcontractId?: string;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsEvent> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tcontractId: opts.contractId,\n\t\t});\n\t\tpages++;\n\n\t\tfor (const event of envelope.events) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tyield event;\n\t\t}\n\n\t\tconst nextCursor = envelope.next_cursor;\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (emptyPolls >= maxEmptyPolls || pages >= maxPages) return;\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn;\n\t}\n}\n",
|
|
11
11
|
"export class AuthError extends Error {\n\treadonly status = 401;\n\n\tconstructor(message = \"API key invalid or expired.\") {\n\t\tsuper(message);\n\t\tthis.name = \"AuthError\";\n\t}\n}\n\nexport class RateLimitError extends Error {\n\treadonly status = 429;\n\n\tconstructor(\n\t\tmessage = \"Rate limited. Try again later.\",\n\t\treadonly retryAfter?: string,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RateLimitError\";\n\t}\n}\n\nexport class ValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"ValidationError\";\n\t}\n}\n\nexport class StreamsServerError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\treadonly status: number,\n\t\treadonly body?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"StreamsServerError\";\n\t}\n}\n",
|
|
12
12
|
"import {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tValidationError,\n} from \"./errors.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsStreamParams,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n} from \"./types.ts\";\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\n\nfunction appendSearchParam(\n\tparams: URLSearchParams,\n\tname: string,\n\tvalue: number | string | null | undefined,\n): void {\n\tif (value === undefined || value === null) return;\n\tparams.set(name, String(value));\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n\tconst text = await response.text();\n\tif (text.length === 0) return undefined;\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn text;\n\t}\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n\tif (body && typeof body === \"object\") {\n\t\tconst record = body as Record<string, unknown>;\n\t\tconst message = record.error ?? record.message;\n\t\tif (typeof message === \"string\" && message.length > 0) return message;\n\t}\n\tif (typeof body === \"string\" && body.length > 0) return body;\n\treturn fallback;\n}\n\nasync function mapStreamsError(response: Response): Promise<never> {\n\tconst body = await responseBody(response);\n\n\tif (response.status === 401) {\n\t\tthrow new AuthError(errorMessage(body, \"API key invalid or expired.\"));\n\t}\n\n\tif (response.status === 429) {\n\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\t\tthrow new RateLimitError(\n\t\t\terrorMessage(body, \"Rate limited. Try again later.\"),\n\t\t\tretryAfter,\n\t\t);\n\t}\n\n\tif (response.status >= 500) {\n\t\tthrow new StreamsServerError(\n\t\t\terrorMessage(body, `Streams server returned ${response.status}.`),\n\t\t\tresponse.status,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tthrow new ValidationError(\n\t\terrorMessage(body, `Streams request returned ${response.status}.`),\n\t\tresponse.status,\n\t\tbody,\n\t);\n}\n\nexport function createStreamsClient(\n\toptions: CreateStreamsClientOptions,\n): StreamsClient {\n\tconst baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_STREAMS_BASE_URL);\n\tconst fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));\n\n\tasync function request<T>(path: string): Promise<T> {\n\t\tconst response = await fetchImpl(`${baseUrl}${path}`, {\n\t\t\theaders: { Authorization: `Bearer ${options.apiKey}` },\n\t\t});\n\t\tif (!response.ok) await mapStreamsError(response);\n\t\treturn (await response.json()) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tcontractId,\n\t}) => {\n\t\treturn listEvents({ cursor, limit, types, contractId });\n\t};\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\tconst searchParams = new URLSearchParams();\n\t\tappendSearchParam(searchParams, \"cursor\", params.cursor);\n\t\tappendSearchParam(searchParams, \"from_height\", params.fromHeight);\n\t\tappendSearchParam(searchParams, \"to_height\", params.toHeight);\n\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\tappendSearchParam(searchParams, \"contract_id\", params.contractId);\n\t\tif (params.types?.length) {\n\t\t\tsearchParams.set(\"types\", params.types.join(\",\"));\n\t\t}\n\n\t\tconst query = searchParams.toString();\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${query ? `?${query}` : \"\"}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tevents: {\n\t\t\tlist: listEvents,\n\t\t\tbyTxId(txId: string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/events/${encodeURIComponent(txId)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tconsume(params: StreamsEventsConsumeParams) {\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\tmode: params.mode,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t\tonBatch: params.onBatch,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t});\n\t\t\t},\n\t\t\tstream(params: StreamsEventsStreamParams = {}) {\n\t\t\t\treturn streamStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tblocks: {\n\t\t\tevents(heightOrHash: number | string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/blocks/${encodeURIComponent(String(heightOrHash))}/events`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\treorgs: {\n\t\t\tlist(params: StreamsReorgsListParams) {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tappendSearchParam(searchParams, \"since\", params.since);\n\t\t\t\tappendSearchParam(searchParams, \"limit\", params.limit);\n\t\t\t\tconst query = searchParams.toString();\n\t\t\t\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${query ? `?${query}` : \"\"}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tcanonical(height: number) {\n\t\t\treturn request<StreamsCanonicalBlock>(`/v1/streams/canonical/${height}`);\n\t\t},\n\t\ttip() {\n\t\t\treturn request<StreamsTip>(\"/v1/streams/tip\");\n\t\t},\n\t};\n}\n",
|
|
13
|
-
"import type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\nimport { BaseClient } from \"../base.ts\";\n\nexport type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionFormat,\n\tSubscriptionRuntime,\n\tSubscriptionStatus,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\n\nexport class Subscriptions extends BaseClient {\n\tasync list(): Promise<{ data: SubscriptionSummary[] }> {\n\t\treturn this.
|
|
13
|
+
"import type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\nimport { BaseClient } from \"../base.ts\";\n\nexport type {\n\tCreateSubscriptionRequest,\n\tCreateSubscriptionResponse,\n\tDeadRow,\n\tDeliveryRow,\n\tReplayResult,\n\tRotateSecretResponse,\n\tSubscriptionDetail,\n\tSubscriptionFormat,\n\tSubscriptionRuntime,\n\tSubscriptionStatus,\n\tSubscriptionSummary,\n\tUpdateSubscriptionRequest,\n} from \"@secondlayer/shared/schemas/subscriptions\";\n\nexport class Subscriptions extends BaseClient {\n\tasync list(): Promise<{ data: SubscriptionSummary[] }> {\n\t\treturn this.request<{ data: SubscriptionSummary[] }>(\n\t\t\t\"GET\",\n\t\t\t\"/api/subscriptions\",\n\t\t);\n\t}\n\n\tasync get(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t);\n\t}\n\n\tasync create(\n\t\tinput: CreateSubscriptionRequest,\n\t): Promise<CreateSubscriptionResponse> {\n\t\treturn this.request<CreateSubscriptionResponse>(\n\t\t\t\"POST\",\n\t\t\t\"/api/subscriptions\",\n\t\t\tinput,\n\t\t);\n\t}\n\n\tasync update(\n\t\tid: string,\n\t\tpatch: UpdateSubscriptionRequest,\n\t): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"PATCH\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t\tpatch,\n\t\t);\n\t}\n\n\tasync pause(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/pause`,\n\t\t);\n\t}\n\n\tasync resume(id: string): Promise<SubscriptionDetail> {\n\t\treturn this.request<SubscriptionDetail>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/resume`,\n\t\t);\n\t}\n\n\tasync delete(id: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subscriptions/${id}`,\n\t\t);\n\t}\n\n\tasync rotateSecret(id: string): Promise<RotateSecretResponse> {\n\t\treturn this.request<RotateSecretResponse>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/rotate-secret`,\n\t\t);\n\t}\n\n\tasync recentDeliveries(id: string): Promise<{ data: DeliveryRow[] }> {\n\t\treturn this.request<{ data: DeliveryRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}/deliveries`,\n\t\t);\n\t}\n\n\tasync replay(\n\t\tid: string,\n\t\trange: { fromBlock: number; toBlock: number },\n\t): Promise<ReplayResult> {\n\t\treturn this.request<ReplayResult>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/replay`,\n\t\t\trange,\n\t\t);\n\t}\n\n\tasync dead(id: string): Promise<{ data: DeadRow[] }> {\n\t\treturn this.request<{ data: DeadRow[] }>(\n\t\t\t\"GET\",\n\t\t\t`/api/subscriptions/${id}/dead`,\n\t\t);\n\t}\n\n\tasync requeueDead(id: string, outboxId: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\n\t\t\t\"POST\",\n\t\t\t`/api/subscriptions/${id}/dead/${outboxId}/requeue`,\n\t\t);\n\t}\n}\n",
|
|
14
14
|
"import { BaseClient } from \"./base.ts\";\nimport type { SecondLayerOptions } from \"./base.ts\";\nimport { Index } from \"./index-api/client.ts\";\nimport { createStreamsClient } from \"./streams/client.ts\";\nimport type { StreamsClient } from \"./streams/types.ts\";\nimport { Subgraphs } from \"./subgraphs/client.ts\";\nimport { Subscriptions } from \"./subscriptions/client.ts\";\n\nexport class SecondLayer extends BaseClient {\n\treadonly streams: StreamsClient;\n\treadonly index: Index;\n\treadonly subgraphs: Subgraphs;\n\treadonly subscriptions: Subscriptions;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t\tthis.streams = createStreamsClient({\n\t\t\tapiKey: options.apiKey ?? \"\",\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t});\n\t\tthis.index = new Index(options);\n\t\tthis.subgraphs = new Subgraphs(options);\n\t\tthis.subscriptions = new Subscriptions(options);\n\t}\n}\n",
|
|
15
15
|
"import type { InferSubgraphClient } from \"@secondlayer/subgraphs\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport { SecondLayer } from \"../client.ts\";\nimport { Subgraphs } from \"./client.ts\";\n\n/**\n * Returns a typed client for a subgraph defined with `defineSubgraph()`.\n *\n * Accepts a plain options object, a `SecondLayer` instance, or a `Subgraphs` instance.\n *\n * @example\n * ```ts\n * import mySubgraph from './subgraphs/my-subgraph'\n * import { getSubgraph } from '@secondlayer/sdk'\n *\n * const client = getSubgraph(mySubgraph, { apiKey: 'sl_...' })\n * const rows = await client.transfers.findMany({ where: { sender: 'SP...' } })\n * ```\n */\nexport function getSubgraph<\n\tT extends { name: string; schema: Record<string, unknown> },\n>(\n\tdef: T,\n\toptions: Partial<SecondLayerOptions> | SecondLayer | Subgraphs = {},\n): InferSubgraphClient<T> {\n\tif (options instanceof Subgraphs) {\n\t\treturn options.typed(def);\n\t}\n\tif (options instanceof SecondLayer) {\n\t\treturn options.subgraphs.typed(def);\n\t}\n\treturn new Subgraphs(options).typed(def);\n}\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "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",
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "A3C5099B870B5FCE64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/sdk",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"prepublishOnly": "bun run build"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@secondlayer/shared": "^6.
|
|
32
|
+
"@secondlayer/shared": "^6.3.4",
|
|
33
33
|
"@secondlayer/subgraphs": "^2.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|