@secondlayer/sdk 1.0.1 → 3.0.0-alpha.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 +0 -33
- package/dist/index.d.ts +6 -216
- package/dist/index.js +4 -209
- package/dist/index.js.map +4 -6
- package/dist/subgraphs/index.d.ts +0 -210
- package/dist/subgraphs/index.js +1 -206
- package/dist/subgraphs/index.js.map +4 -6
- package/package.json +3 -12
- package/dist/marketplace/index.d.ts +0 -52
- package/dist/marketplace/index.js +0 -157
- package/dist/marketplace/index.js.map +0 -12
- package/dist/workflows/index.d.ts +0 -191
- package/dist/workflows/index.js +0 -244
- package/dist/workflows/index.js.map +0 -12
package/README.md
CHANGED
|
@@ -41,39 +41,6 @@ const rows = await sl.subgraphs.queryTable("my-subgraph", "transfers", {
|
|
|
41
41
|
const result = await sl.subgraphs.deploy({ name, sources, schema, handlerCode });
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
## Workflows
|
|
45
|
-
|
|
46
|
-
Deploy and manage automated workflows.
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
// List
|
|
50
|
-
const { workflows } = await sl.workflows.list();
|
|
51
|
-
|
|
52
|
-
// Get
|
|
53
|
-
const detail = await sl.workflows.get("whale-alerts");
|
|
54
|
-
|
|
55
|
-
// Deploy
|
|
56
|
-
const result = await sl.workflows.deploy({
|
|
57
|
-
name: "whale-alerts",
|
|
58
|
-
trigger: { type: "event", filter: { type: "stx_transfer" } },
|
|
59
|
-
handlerCode: "...",
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Trigger manually
|
|
63
|
-
const { runId } = await sl.workflows.trigger("whale-alerts", { threshold: 100000 });
|
|
64
|
-
|
|
65
|
-
// Pause / Resume / Delete
|
|
66
|
-
await sl.workflows.pause("whale-alerts");
|
|
67
|
-
await sl.workflows.resume("whale-alerts");
|
|
68
|
-
await sl.workflows.delete("whale-alerts");
|
|
69
|
-
|
|
70
|
-
// List runs
|
|
71
|
-
const { runs } = await sl.workflows.listRuns("whale-alerts", { status: "completed", limit: 10 });
|
|
72
|
-
|
|
73
|
-
// Get run details
|
|
74
|
-
const run = await sl.workflows.getRun("run-id");
|
|
75
|
-
```
|
|
76
|
-
|
|
77
44
|
## Error Handling
|
|
78
45
|
|
|
79
46
|
```typescript
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReindexResponse, SubgraphDetail, SubgraphGapsResponse, SubgraphQueryParams, SubgraphSummary } from "@secondlayer/shared/schemas";
|
|
2
|
+
import { DeploySubgraphRequest, DeploySubgraphResponse } from "@secondlayer/shared/schemas/subgraphs";
|
|
3
|
+
import { InferSubgraphClient } from "@secondlayer/subgraphs";
|
|
2
4
|
interface SecondLayerOptions {
|
|
3
5
|
/** Base URL of the Secondlayer API (trailing slashes are stripped). */
|
|
4
6
|
baseUrl: string;
|
|
@@ -15,42 +17,6 @@ declare abstract class BaseClient {
|
|
|
15
17
|
static authHeaders(apiKey?: string): Record<string, string>;
|
|
16
18
|
protected request<T>(method: string, path: string, body?: unknown): Promise<T>;
|
|
17
19
|
}
|
|
18
|
-
interface MarketplaceBrowseOptions {
|
|
19
|
-
tags?: string[];
|
|
20
|
-
search?: string;
|
|
21
|
-
sort?: "recent" | "popular" | "name";
|
|
22
|
-
limit?: number;
|
|
23
|
-
offset?: number;
|
|
24
|
-
}
|
|
25
|
-
declare class Marketplace extends BaseClient {
|
|
26
|
-
browse(opts?: MarketplaceBrowseOptions): Promise<{
|
|
27
|
-
data: MarketplaceSubgraphSummary[]
|
|
28
|
-
meta: {
|
|
29
|
-
total: number
|
|
30
|
-
limit: number
|
|
31
|
-
offset: number
|
|
32
|
-
}
|
|
33
|
-
}>;
|
|
34
|
-
get(name: string): Promise<MarketplaceSubgraphDetail>;
|
|
35
|
-
creator(slug: string): Promise<CreatorProfile>;
|
|
36
|
-
fork(name: string, newName?: string): Promise<{
|
|
37
|
-
action: string
|
|
38
|
-
subgraphId: string
|
|
39
|
-
name: string
|
|
40
|
-
forkedFrom: string
|
|
41
|
-
}>;
|
|
42
|
-
queryTable(name: string, table: string, params?: SubgraphQueryParams): Promise<{
|
|
43
|
-
data: unknown[]
|
|
44
|
-
meta: {
|
|
45
|
-
total: number
|
|
46
|
-
limit: number
|
|
47
|
-
offset: number
|
|
48
|
-
}
|
|
49
|
-
}>;
|
|
50
|
-
}
|
|
51
|
-
import { ReindexResponse, SubgraphDetail, SubgraphGapsResponse, SubgraphQueryParams as SubgraphQueryParams2, SubgraphSummary } from "@secondlayer/shared/schemas";
|
|
52
|
-
import { DeploySubgraphRequest, DeploySubgraphResponse } from "@secondlayer/shared/schemas/subgraphs";
|
|
53
|
-
import { InferSubgraphClient } from "@secondlayer/subgraphs";
|
|
54
20
|
interface SubgraphSource {
|
|
55
21
|
name: string;
|
|
56
22
|
version: string;
|
|
@@ -103,8 +69,8 @@ declare class Subgraphs extends BaseClient {
|
|
|
103
69
|
bundle(data: {
|
|
104
70
|
code: string
|
|
105
71
|
}): Promise<BundleSubgraphResponse>;
|
|
106
|
-
queryTable(name: string, table: string, params?:
|
|
107
|
-
queryTableCount(name: string, table: string, params?:
|
|
72
|
+
queryTable(name: string, table: string, params?: SubgraphQueryParams): Promise<unknown[]>;
|
|
73
|
+
queryTableCount(name: string, table: string, params?: SubgraphQueryParams): Promise<{
|
|
108
74
|
count: number
|
|
109
75
|
}>;
|
|
110
76
|
/**
|
|
@@ -126,184 +92,8 @@ declare class Subgraphs extends BaseClient {
|
|
|
126
92
|
private createTableClient;
|
|
127
93
|
}
|
|
128
94
|
import { InferSubgraphClient as InferSubgraphClient2 } from "@secondlayer/subgraphs";
|
|
129
|
-
import { WorkflowRun, WorkflowRunStatus } from "@secondlayer/workflows";
|
|
130
|
-
interface WorkflowSource {
|
|
131
|
-
name: string;
|
|
132
|
-
version: string;
|
|
133
|
-
sourceCode: string | null;
|
|
134
|
-
readOnly: boolean;
|
|
135
|
-
reason?: string;
|
|
136
|
-
updatedAt: string;
|
|
137
|
-
}
|
|
138
|
-
interface WorkflowStepEvent {
|
|
139
|
-
id: string;
|
|
140
|
-
stepIndex: number;
|
|
141
|
-
stepId: string;
|
|
142
|
-
stepType: string;
|
|
143
|
-
status: string;
|
|
144
|
-
output?: unknown;
|
|
145
|
-
error: string | null;
|
|
146
|
-
retryCount: number;
|
|
147
|
-
aiTokensUsed: number;
|
|
148
|
-
startedAt: string | null;
|
|
149
|
-
completedAt: string | null;
|
|
150
|
-
durationMs: number | null;
|
|
151
|
-
ts: string;
|
|
152
|
-
}
|
|
153
|
-
interface WorkflowRunDoneEvent {
|
|
154
|
-
runId: string;
|
|
155
|
-
status: string;
|
|
156
|
-
error?: string | null;
|
|
157
|
-
completedAt?: string | null;
|
|
158
|
-
}
|
|
159
|
-
type WorkflowTailEvent = {
|
|
160
|
-
type: "step"
|
|
161
|
-
step: WorkflowStepEvent
|
|
162
|
-
} | {
|
|
163
|
-
type: "done"
|
|
164
|
-
done: WorkflowRunDoneEvent
|
|
165
|
-
} | {
|
|
166
|
-
type: "heartbeat"
|
|
167
|
-
ts: string
|
|
168
|
-
} | {
|
|
169
|
-
type: "timeout"
|
|
170
|
-
message: string
|
|
171
|
-
};
|
|
172
|
-
interface DeployDryRunResponse {
|
|
173
|
-
valid: boolean;
|
|
174
|
-
validation?: {
|
|
175
|
-
name: string
|
|
176
|
-
triggerType: string
|
|
177
|
-
};
|
|
178
|
-
bundleSize: number;
|
|
179
|
-
error?: string;
|
|
180
|
-
}
|
|
181
|
-
interface DeployResponse {
|
|
182
|
-
action: "created" | "updated";
|
|
183
|
-
workflowId: string;
|
|
184
|
-
version: string;
|
|
185
|
-
message: string;
|
|
186
|
-
}
|
|
187
|
-
interface BundleWorkflowResponse {
|
|
188
|
-
ok: true;
|
|
189
|
-
name: string;
|
|
190
|
-
trigger: Record<string, unknown>;
|
|
191
|
-
handlerCode: string;
|
|
192
|
-
sourceCode: string;
|
|
193
|
-
retries: Record<string, unknown> | null;
|
|
194
|
-
timeout: number | null;
|
|
195
|
-
bundleSize: number;
|
|
196
|
-
}
|
|
197
|
-
interface WorkflowSummary {
|
|
198
|
-
name: string;
|
|
199
|
-
status: "active" | "paused";
|
|
200
|
-
triggerType: "event" | "schedule" | "manual";
|
|
201
|
-
createdAt: string;
|
|
202
|
-
updatedAt: string;
|
|
203
|
-
}
|
|
204
|
-
interface WorkflowDetail extends WorkflowSummary {
|
|
205
|
-
trigger: Record<string, unknown>;
|
|
206
|
-
retries?: {
|
|
207
|
-
maxAttempts?: number
|
|
208
|
-
backoffMs?: number
|
|
209
|
-
};
|
|
210
|
-
timeout?: number;
|
|
211
|
-
totalRuns: number;
|
|
212
|
-
lastRunAt: string | null;
|
|
213
|
-
}
|
|
214
|
-
interface WorkflowRunSummary {
|
|
215
|
-
id: string;
|
|
216
|
-
workflowName: string;
|
|
217
|
-
status: WorkflowRunStatus;
|
|
218
|
-
duration: number;
|
|
219
|
-
aiTokensUsed: number;
|
|
220
|
-
triggeredAt: string;
|
|
221
|
-
completedAt: string | null;
|
|
222
|
-
}
|
|
223
|
-
declare class Workflows extends BaseClient {
|
|
224
|
-
deploy(data: {
|
|
225
|
-
name: string
|
|
226
|
-
trigger: Record<string, unknown>
|
|
227
|
-
handlerCode: string
|
|
228
|
-
sourceCode?: string
|
|
229
|
-
expectedVersion?: string
|
|
230
|
-
retries?: Record<string, unknown>
|
|
231
|
-
timeout?: number
|
|
232
|
-
clientRequestId?: string
|
|
233
|
-
} & {
|
|
234
|
-
dryRun?: false
|
|
235
|
-
}): Promise<DeployResponse>;
|
|
236
|
-
deploy(data: {
|
|
237
|
-
name: string
|
|
238
|
-
trigger: Record<string, unknown>
|
|
239
|
-
handlerCode: string
|
|
240
|
-
sourceCode?: string
|
|
241
|
-
expectedVersion?: string
|
|
242
|
-
retries?: Record<string, unknown>
|
|
243
|
-
timeout?: number
|
|
244
|
-
dryRun: true
|
|
245
|
-
}): Promise<DeployDryRunResponse>;
|
|
246
|
-
getSource(name: string): Promise<WorkflowSource>;
|
|
247
|
-
/**
|
|
248
|
-
* Bundle a TypeScript workflow source on the server. Used by the web chat
|
|
249
|
-
* authoring loop so Vercel's serverless runtime doesn't have to run esbuild.
|
|
250
|
-
* CLI and MCP still bundle locally — this method is for clients that can't
|
|
251
|
-
* install `@secondlayer/bundler` directly (e.g. browser tooling, edge
|
|
252
|
-
* functions).
|
|
253
|
-
*/
|
|
254
|
-
bundle(data: {
|
|
255
|
-
code: string
|
|
256
|
-
}): Promise<BundleWorkflowResponse>;
|
|
257
|
-
pauseAll(): Promise<{
|
|
258
|
-
paused: number
|
|
259
|
-
workflows: Array<{
|
|
260
|
-
name: string
|
|
261
|
-
version: string
|
|
262
|
-
status: string
|
|
263
|
-
}>
|
|
264
|
-
}>;
|
|
265
|
-
cancelRun(runId: string): Promise<{
|
|
266
|
-
runId: string
|
|
267
|
-
status: string
|
|
268
|
-
cancelled: boolean
|
|
269
|
-
completedAt?: string
|
|
270
|
-
message?: string
|
|
271
|
-
}>;
|
|
272
|
-
rollback(name: string, toVersion?: string): Promise<{
|
|
273
|
-
action: "rolled-back"
|
|
274
|
-
name: string
|
|
275
|
-
fromVersion: string
|
|
276
|
-
restoredFromVersion: string
|
|
277
|
-
version: string
|
|
278
|
-
}>;
|
|
279
|
-
/**
|
|
280
|
-
* Subscribe to a workflow run's server-sent event stream. Resolves when the
|
|
281
|
-
* run completes, times out, or the signal is aborted. Throws on HTTP errors
|
|
282
|
-
* opening the stream.
|
|
283
|
-
*/
|
|
284
|
-
streamRun(name: string, runId: string, onEvent: (event: WorkflowTailEvent) => void, signal?: AbortSignal): Promise<void>;
|
|
285
|
-
list(): Promise<{
|
|
286
|
-
workflows: WorkflowSummary[]
|
|
287
|
-
}>;
|
|
288
|
-
get(name: string): Promise<WorkflowDetail>;
|
|
289
|
-
trigger(name: string, input?: Record<string, unknown>): Promise<{
|
|
290
|
-
runId: string
|
|
291
|
-
}>;
|
|
292
|
-
pause(name: string): Promise<void>;
|
|
293
|
-
resume(name: string): Promise<void>;
|
|
294
|
-
delete(name: string): Promise<void>;
|
|
295
|
-
listRuns(name: string, params?: {
|
|
296
|
-
status?: WorkflowRunStatus
|
|
297
|
-
limit?: number
|
|
298
|
-
}): Promise<{
|
|
299
|
-
runs: WorkflowRunSummary[]
|
|
300
|
-
}>;
|
|
301
|
-
getRun(runId: string): Promise<WorkflowRun>;
|
|
302
|
-
}
|
|
303
95
|
declare class SecondLayer extends BaseClient {
|
|
304
96
|
readonly subgraphs: Subgraphs;
|
|
305
|
-
readonly marketplace: Marketplace;
|
|
306
|
-
readonly workflows: Workflows;
|
|
307
97
|
constructor(options?: Partial<SecondLayerOptions>);
|
|
308
98
|
}
|
|
309
99
|
/**
|
|
@@ -383,4 +173,4 @@ declare class VersionConflictError extends ApiError {
|
|
|
383
173
|
* ```
|
|
384
174
|
*/
|
|
385
175
|
declare function verifyWebhookSignature(rawBody: string, signatureHeader: string, secret: string, toleranceSeconds?: number): boolean;
|
|
386
|
-
export { verifyWebhookSignature, getSubgraph, VersionConflictError, Subgraphs, SecondLayerOptions, SecondLayer,
|
|
176
|
+
export { verifyWebhookSignature, getSubgraph, VersionConflictError, Subgraphs, SecondLayerOptions, SecondLayer, ApiError };
|
package/dist/index.js
CHANGED
|
@@ -93,62 +93,6 @@ class BaseClient {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
// src/marketplace/client.ts
|
|
97
|
-
function buildMarketplaceQuery(opts) {
|
|
98
|
-
const qs = new URLSearchParams;
|
|
99
|
-
if (opts.tags?.length)
|
|
100
|
-
qs.set("tags", opts.tags.join(","));
|
|
101
|
-
if (opts.search)
|
|
102
|
-
qs.set("search", opts.search);
|
|
103
|
-
if (opts.sort)
|
|
104
|
-
qs.set("_sort", opts.sort);
|
|
105
|
-
if (opts.limit !== undefined)
|
|
106
|
-
qs.set("_limit", String(opts.limit));
|
|
107
|
-
if (opts.offset !== undefined)
|
|
108
|
-
qs.set("_offset", String(opts.offset));
|
|
109
|
-
const str = qs.toString();
|
|
110
|
-
return str ? `?${str}` : "";
|
|
111
|
-
}
|
|
112
|
-
function buildSubgraphQueryString(params) {
|
|
113
|
-
const qs = new URLSearchParams;
|
|
114
|
-
if (params.sort)
|
|
115
|
-
qs.set("_sort", params.sort);
|
|
116
|
-
if (params.order)
|
|
117
|
-
qs.set("_order", params.order);
|
|
118
|
-
if (params.limit !== undefined)
|
|
119
|
-
qs.set("_limit", String(params.limit));
|
|
120
|
-
if (params.offset !== undefined)
|
|
121
|
-
qs.set("_offset", String(params.offset));
|
|
122
|
-
if (params.fields)
|
|
123
|
-
qs.set("_fields", params.fields);
|
|
124
|
-
if (params.filters) {
|
|
125
|
-
for (const [key, value] of Object.entries(params.filters)) {
|
|
126
|
-
qs.set(key, String(value));
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const str = qs.toString();
|
|
130
|
-
return str ? `?${str}` : "";
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
class Marketplace extends BaseClient {
|
|
134
|
-
async browse(opts = {}) {
|
|
135
|
-
return this.request("GET", `/api/marketplace/subgraphs${buildMarketplaceQuery(opts)}`);
|
|
136
|
-
}
|
|
137
|
-
async get(name) {
|
|
138
|
-
return this.request("GET", `/api/marketplace/subgraphs/${name}`);
|
|
139
|
-
}
|
|
140
|
-
async creator(slug) {
|
|
141
|
-
return this.request("GET", `/api/marketplace/creators/${slug}`);
|
|
142
|
-
}
|
|
143
|
-
async fork(name, newName) {
|
|
144
|
-
return this.request("POST", `/api/marketplace/subgraphs/${name}/fork`, {
|
|
145
|
-
newName
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
async queryTable(name, table, params = {}) {
|
|
149
|
-
return this.request("GET", `/api/marketplace/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
96
|
// src/subgraphs/serialize.ts
|
|
153
97
|
var SYSTEM_COLUMN_MAP = {
|
|
154
98
|
_blockHeight: "_block_height",
|
|
@@ -191,7 +135,7 @@ function resolveOrderByColumn(col) {
|
|
|
191
135
|
}
|
|
192
136
|
|
|
193
137
|
// src/subgraphs/client.ts
|
|
194
|
-
function
|
|
138
|
+
function buildSubgraphQueryString(params) {
|
|
195
139
|
const qs = new URLSearchParams;
|
|
196
140
|
if (params.sort)
|
|
197
141
|
qs.set("_sort", params.sort);
|
|
@@ -252,11 +196,11 @@ class Subgraphs extends BaseClient {
|
|
|
252
196
|
return this.request("POST", "/api/subgraphs/bundle", data);
|
|
253
197
|
}
|
|
254
198
|
async queryTable(name, table, params = {}) {
|
|
255
|
-
const result = await this.request("GET", `/api/subgraphs/${name}/${table}${
|
|
199
|
+
const result = await this.request("GET", `/api/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`);
|
|
256
200
|
return Array.isArray(result) ? result : result.data;
|
|
257
201
|
}
|
|
258
202
|
async queryTableCount(name, table, params = {}) {
|
|
259
|
-
return this.request("GET", `/api/subgraphs/${name}/${table}/count${
|
|
203
|
+
return this.request("GET", `/api/subgraphs/${name}/${table}/count${buildSubgraphQueryString(params)}`);
|
|
260
204
|
}
|
|
261
205
|
typed(def) {
|
|
262
206
|
const result = {};
|
|
@@ -304,160 +248,12 @@ class Subgraphs extends BaseClient {
|
|
|
304
248
|
};
|
|
305
249
|
}
|
|
306
250
|
}
|
|
307
|
-
// src/workflows/client.ts
|
|
308
|
-
function parseSseChunk(raw) {
|
|
309
|
-
let event = "message";
|
|
310
|
-
const dataLines = [];
|
|
311
|
-
for (const line of raw.split(`
|
|
312
|
-
`)) {
|
|
313
|
-
if (line.startsWith("event:")) {
|
|
314
|
-
event = line.slice(6).trim();
|
|
315
|
-
} else if (line.startsWith("data:")) {
|
|
316
|
-
dataLines.push(line.slice(5).trimStart());
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
if (dataLines.length === 0)
|
|
320
|
-
return null;
|
|
321
|
-
const data = dataLines.join(`
|
|
322
|
-
`);
|
|
323
|
-
try {
|
|
324
|
-
const parsed = JSON.parse(data);
|
|
325
|
-
switch (event) {
|
|
326
|
-
case "step":
|
|
327
|
-
return { type: "step", step: parsed };
|
|
328
|
-
case "done":
|
|
329
|
-
return { type: "done", done: parsed };
|
|
330
|
-
case "heartbeat":
|
|
331
|
-
return {
|
|
332
|
-
type: "heartbeat",
|
|
333
|
-
ts: typeof parsed === "string" ? parsed : String(parsed)
|
|
334
|
-
};
|
|
335
|
-
case "timeout":
|
|
336
|
-
return {
|
|
337
|
-
type: "timeout",
|
|
338
|
-
message: parsed.message ?? "timeout"
|
|
339
|
-
};
|
|
340
|
-
default:
|
|
341
|
-
return null;
|
|
342
|
-
}
|
|
343
|
-
} catch {
|
|
344
|
-
return null;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
class Workflows extends BaseClient {
|
|
349
|
-
async deploy(data) {
|
|
350
|
-
try {
|
|
351
|
-
return await this.request("POST", "/api/workflows", data);
|
|
352
|
-
} catch (err) {
|
|
353
|
-
if (err instanceof ApiError && err.status === 409) {
|
|
354
|
-
const body = err.body;
|
|
355
|
-
if (body?.currentVersion && body.expectedVersion) {
|
|
356
|
-
throw new VersionConflictError(body.currentVersion, body.expectedVersion, err.message);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
throw err;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
async getSource(name) {
|
|
363
|
-
return this.request("GET", `/api/workflows/${name}/source`);
|
|
364
|
-
}
|
|
365
|
-
async bundle(data) {
|
|
366
|
-
return this.request("POST", "/api/workflows/bundle", data);
|
|
367
|
-
}
|
|
368
|
-
async pauseAll() {
|
|
369
|
-
return this.request("POST", "/api/workflows/pause-all");
|
|
370
|
-
}
|
|
371
|
-
async cancelRun(runId) {
|
|
372
|
-
return this.request("POST", `/api/workflows/runs/${runId}/cancel`);
|
|
373
|
-
}
|
|
374
|
-
async rollback(name, toVersion) {
|
|
375
|
-
return this.request("POST", `/api/workflows/${name}/rollback`, toVersion ? { toVersion } : {});
|
|
376
|
-
}
|
|
377
|
-
async streamRun(name, runId, onEvent, signal) {
|
|
378
|
-
const url = `${this.baseUrl}/api/workflows/${name}/runs/${runId}/stream`;
|
|
379
|
-
const headers = {
|
|
380
|
-
Accept: "text/event-stream",
|
|
381
|
-
"x-sl-origin": this.origin
|
|
382
|
-
};
|
|
383
|
-
if (this.apiKey) {
|
|
384
|
-
headers.Authorization = `Bearer ${this.apiKey}`;
|
|
385
|
-
}
|
|
386
|
-
const res = await fetch(url, { headers, signal });
|
|
387
|
-
if (!res.ok || !res.body) {
|
|
388
|
-
throw new ApiError(res.status, `Failed to open workflow run stream (HTTP ${res.status})`);
|
|
389
|
-
}
|
|
390
|
-
const reader = res.body.pipeThrough(new TextDecoderStream).getReader();
|
|
391
|
-
let buffer = "";
|
|
392
|
-
while (true) {
|
|
393
|
-
const { value, done } = await reader.read();
|
|
394
|
-
if (done)
|
|
395
|
-
break;
|
|
396
|
-
buffer += value;
|
|
397
|
-
let sep = buffer.indexOf(`
|
|
398
|
-
|
|
399
|
-
`);
|
|
400
|
-
while (sep !== -1) {
|
|
401
|
-
const chunk = buffer.slice(0, sep);
|
|
402
|
-
buffer = buffer.slice(sep + 2);
|
|
403
|
-
const parsed = parseSseChunk(chunk);
|
|
404
|
-
if (parsed) {
|
|
405
|
-
onEvent(parsed);
|
|
406
|
-
if (parsed.type === "done" || parsed.type === "timeout") {
|
|
407
|
-
await reader.cancel().catch(() => {
|
|
408
|
-
return;
|
|
409
|
-
});
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
sep = buffer.indexOf(`
|
|
414
|
-
|
|
415
|
-
`);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
async list() {
|
|
420
|
-
return this.request("GET", "/api/workflows");
|
|
421
|
-
}
|
|
422
|
-
async get(name) {
|
|
423
|
-
return this.request("GET", `/api/workflows/${name}`);
|
|
424
|
-
}
|
|
425
|
-
async trigger(name, input) {
|
|
426
|
-
return this.request("POST", `/api/workflows/${name}/trigger`, input ? { input } : undefined);
|
|
427
|
-
}
|
|
428
|
-
async pause(name) {
|
|
429
|
-
return this.request("POST", `/api/workflows/${name}/pause`);
|
|
430
|
-
}
|
|
431
|
-
async resume(name) {
|
|
432
|
-
return this.request("POST", `/api/workflows/${name}/resume`);
|
|
433
|
-
}
|
|
434
|
-
async delete(name) {
|
|
435
|
-
return this.request("DELETE", `/api/workflows/${name}`);
|
|
436
|
-
}
|
|
437
|
-
async listRuns(name, params) {
|
|
438
|
-
const qs = new URLSearchParams;
|
|
439
|
-
if (params?.status)
|
|
440
|
-
qs.set("status", params.status);
|
|
441
|
-
if (params?.limit !== undefined)
|
|
442
|
-
qs.set("limit", String(params.limit));
|
|
443
|
-
const query = qs.toString();
|
|
444
|
-
return this.request("GET", `/api/workflows/${name}/runs${query ? `?${query}` : ""}`);
|
|
445
|
-
}
|
|
446
|
-
async getRun(runId) {
|
|
447
|
-
return this.request("GET", `/api/workflows/runs/${runId}`);
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
251
|
// src/client.ts
|
|
452
252
|
class SecondLayer extends BaseClient {
|
|
453
253
|
subgraphs;
|
|
454
|
-
marketplace;
|
|
455
|
-
workflows;
|
|
456
254
|
constructor(options = {}) {
|
|
457
255
|
super(options);
|
|
458
256
|
this.subgraphs = new Subgraphs(options);
|
|
459
|
-
this.marketplace = new Marketplace(options);
|
|
460
|
-
this.workflows = new Workflows(options);
|
|
461
257
|
}
|
|
462
258
|
}
|
|
463
259
|
|
|
@@ -482,9 +278,8 @@ export {
|
|
|
482
278
|
VersionConflictError,
|
|
483
279
|
Subgraphs,
|
|
484
280
|
SecondLayer,
|
|
485
|
-
Marketplace,
|
|
486
281
|
ApiError
|
|
487
282
|
};
|
|
488
283
|
|
|
489
|
-
//# debugId=
|
|
284
|
+
//# debugId=1B497BDD0B6E9C0964756E2164756E21
|
|
490
285
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/errors.ts", "../src/base.ts", "../src/
|
|
3
|
+
"sources": ["../src/errors.ts", "../src/base.ts", "../src/subgraphs/serialize.ts", "../src/subgraphs/client.ts", "../src/client.ts", "../src/subgraphs/get-subgraph.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) {\n\t\tsuper(message);\n\t\tthis.name = \"ApiError\";\n\t}\n}\n\n/**\n * Thrown by {@link Workflows.deploy} when the server rejects a deploy because the\n * provided `expectedVersion` does not match the current 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
6
|
"import { ApiError } from \"./errors.ts\";\n\nexport interface SecondLayerOptions {\n\t/** Base URL of the Secondlayer API (trailing slashes are stripped). */\n\tbaseUrl: string;\n\t/** Bearer token for authenticated requests. */\n\tapiKey?: string;\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 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\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} catch {\n\t\t\t\tif (errorBody) message = errorBody;\n\t\t\t}\n\t\t\tthrow new ApiError(response.status, message, parsedBody);\n\t\t}\n\n\t\tif (response.status === 204) {\n\t\t\treturn undefined as T;\n\t\t}\n\n\t\treturn response.json() as Promise<T>;\n\t}\n}\n",
|
|
7
|
-
"import type {\n\tCreatorProfile,\n\tMarketplaceSubgraphDetail,\n\tMarketplaceSubgraphSummary,\n\tSubgraphQueryParams,\n} from \"@secondlayer/shared/schemas\";\nimport { BaseClient } from \"../base.ts\";\n\nexport interface MarketplaceBrowseOptions {\n\ttags?: string[];\n\tsearch?: string;\n\tsort?: \"recent\" | \"popular\" | \"name\";\n\tlimit?: number;\n\toffset?: number;\n}\n\nfunction buildMarketplaceQuery(opts: MarketplaceBrowseOptions): string {\n\tconst qs = new URLSearchParams();\n\tif (opts.tags?.length) qs.set(\"tags\", opts.tags.join(\",\"));\n\tif (opts.search) qs.set(\"search\", opts.search);\n\tif (opts.sort) qs.set(\"_sort\", opts.sort);\n\tif (opts.limit !== undefined) qs.set(\"_limit\", String(opts.limit));\n\tif (opts.offset !== undefined) qs.set(\"_offset\", String(opts.offset));\n\tconst str = qs.toString();\n\treturn str ? `?${str}` : \"\";\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\nexport class Marketplace extends BaseClient {\n\tasync browse(\n\t\topts: MarketplaceBrowseOptions = {},\n\t): Promise<{\n\t\tdata: MarketplaceSubgraphSummary[];\n\t\tmeta: { total: number; limit: number; offset: number };\n\t}> {\n\t\treturn this.request(\"GET\", `/api/marketplace/subgraphs${buildMarketplaceQuery(opts)}`);\n\t}\n\n\tasync get(name: string): Promise<MarketplaceSubgraphDetail> {\n\t\treturn this.request(\"GET\", `/api/marketplace/subgraphs/${name}`);\n\t}\n\n\tasync creator(slug: string): Promise<CreatorProfile> {\n\t\treturn this.request(\"GET\", `/api/marketplace/creators/${slug}`);\n\t}\n\n\tasync fork(\n\t\tname: string,\n\t\tnewName?: string,\n\t): Promise<{\n\t\taction: string;\n\t\tsubgraphId: string;\n\t\tname: string;\n\t\tforkedFrom: string;\n\t}> {\n\t\treturn this.request(\"POST\", `/api/marketplace/subgraphs/${name}/fork`, {\n\t\t\tnewName,\n\t\t});\n\t}\n\n\tasync queryTable(\n\t\tname: string,\n\t\ttable: string,\n\t\tparams: SubgraphQueryParams = {},\n\t): Promise<{\n\t\tdata: unknown[];\n\t\tmeta: { total: number; limit: number; offset: number };\n\t}> {\n\t\treturn this.request(\n\t\t\t\"GET\",\n\t\t\t`/api/marketplace/subgraphs/${name}/${table}${buildSubgraphQueryString(params)}`,\n\t\t);\n\t}\n}\n",
|
|
8
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",
|
|
9
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\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\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 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(name: string): Promise<{ message: string }> {\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"POST\",\n\t\t\t`/api/subgraphs/${name}/stop`,\n\t\t);\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(name: string): Promise<{ message: string }> {\n\t\treturn this.request<{ message: string }>(\n\t\t\t\"DELETE\",\n\t\t\t`/api/subgraphs/${name}`,\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 [col, dir] = entries[0]!;\n\t\t\t\t\t\tsort = resolveOrderByColumn(col);\n\t\t\t\t\t\torder = dir ?? \"asc\";\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",
|
|
10
|
-
"import
|
|
11
|
-
"import { BaseClient } from \"./base.ts\";\nimport type { SecondLayerOptions } from \"./base.ts\";\nimport { Marketplace } from \"./marketplace/client.ts\";\nimport { Subgraphs } from \"./subgraphs/client.ts\";\nimport { Workflows } from \"./workflows/client.ts\";\n\nexport class SecondLayer extends BaseClient {\n\treadonly subgraphs: Subgraphs;\n\treadonly marketplace: Marketplace;\n\treadonly workflows: Workflows;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t\tthis.subgraphs = new Subgraphs(options);\n\t\tthis.marketplace = new Marketplace(options);\n\t\tthis.workflows = new Workflows(options);\n\t}\n}\n",
|
|
9
|
+
"import { BaseClient } from \"./base.ts\";\nimport type { SecondLayerOptions } from \"./base.ts\";\nimport { Subgraphs } from \"./subgraphs/client.ts\";\n\nexport class SecondLayer extends BaseClient {\n\treadonly subgraphs: Subgraphs;\n\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t\tthis.subgraphs = new Subgraphs(options);\n\t}\n}\n",
|
|
12
10
|
"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",
|
|
13
11
|
"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"
|
|
14
12
|
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "1B497BDD0B6E9C0964756E2164756E21",
|
|
17
15
|
"names": []
|
|
18
16
|
}
|