gateproof 0.2.2 → 0.5.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.
Files changed (98) hide show
  1. package/README.md +1396 -320
  2. package/dist/cloudflare/index.d.ts +4 -6
  3. package/dist/cloudflare/index.d.ts.map +1 -1
  4. package/dist/cloudflare/index.js +9 -43
  5. package/dist/cloudflare/index.js.map +1 -1
  6. package/dist/index.d.ts +263 -66
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1327 -204
  9. package/dist/index.js.map +1 -1
  10. package/package.json +18 -40
  11. package/dist/act.d.ts +0 -33
  12. package/dist/act.d.ts.map +0 -1
  13. package/dist/act.js +0 -25
  14. package/dist/act.js.map +0 -1
  15. package/dist/action-executors.d.ts +0 -22
  16. package/dist/action-executors.d.ts.map +0 -1
  17. package/dist/action-executors.js +0 -135
  18. package/dist/action-executors.js.map +0 -1
  19. package/dist/assert.d.ts +0 -39
  20. package/dist/assert.d.ts.map +0 -1
  21. package/dist/assert.js +0 -88
  22. package/dist/assert.js.map +0 -1
  23. package/dist/cli/gateproof.d.ts +0 -3
  24. package/dist/cli/gateproof.d.ts.map +0 -1
  25. package/dist/cli/gateproof.js +0 -472
  26. package/dist/cli/gateproof.js.map +0 -1
  27. package/dist/cloudflare/analytics.d.ts +0 -9
  28. package/dist/cloudflare/analytics.d.ts.map +0 -1
  29. package/dist/cloudflare/analytics.js +0 -98
  30. package/dist/cloudflare/analytics.js.map +0 -1
  31. package/dist/cloudflare/cli-stream.d.ts +0 -7
  32. package/dist/cloudflare/cli-stream.d.ts.map +0 -1
  33. package/dist/cloudflare/cli-stream.js +0 -85
  34. package/dist/cloudflare/cli-stream.js.map +0 -1
  35. package/dist/cloudflare/polling-backend.d.ts +0 -18
  36. package/dist/cloudflare/polling-backend.d.ts.map +0 -1
  37. package/dist/cloudflare/polling-backend.js +0 -53
  38. package/dist/cloudflare/polling-backend.js.map +0 -1
  39. package/dist/cloudflare/workers-logs.d.ts +0 -9
  40. package/dist/cloudflare/workers-logs.d.ts.map +0 -1
  41. package/dist/cloudflare/workers-logs.js +0 -51
  42. package/dist/cloudflare/workers-logs.js.map +0 -1
  43. package/dist/constants.d.ts +0 -11
  44. package/dist/constants.d.ts.map +0 -1
  45. package/dist/constants.js +0 -11
  46. package/dist/constants.js.map +0 -1
  47. package/dist/http-backend.d.ts +0 -23
  48. package/dist/http-backend.d.ts.map +0 -1
  49. package/dist/http-backend.js +0 -124
  50. package/dist/http-backend.js.map +0 -1
  51. package/dist/observe.d.ts +0 -26
  52. package/dist/observe.d.ts.map +0 -1
  53. package/dist/observe.js +0 -84
  54. package/dist/observe.js.map +0 -1
  55. package/dist/prd/define-prd.d.ts +0 -7
  56. package/dist/prd/define-prd.d.ts.map +0 -1
  57. package/dist/prd/define-prd.js +0 -8
  58. package/dist/prd/define-prd.js.map +0 -1
  59. package/dist/prd/index.d.ts +0 -5
  60. package/dist/prd/index.d.ts.map +0 -1
  61. package/dist/prd/index.js +0 -4
  62. package/dist/prd/index.js.map +0 -1
  63. package/dist/prd/runner.d.ts +0 -22
  64. package/dist/prd/runner.d.ts.map +0 -1
  65. package/dist/prd/runner.js +0 -221
  66. package/dist/prd/runner.js.map +0 -1
  67. package/dist/prd/scope-check.d.ts +0 -28
  68. package/dist/prd/scope-check.d.ts.map +0 -1
  69. package/dist/prd/scope-check.js +0 -135
  70. package/dist/prd/scope-check.js.map +0 -1
  71. package/dist/prd/types.d.ts +0 -22
  72. package/dist/prd/types.d.ts.map +0 -1
  73. package/dist/prd/types.js +0 -2
  74. package/dist/prd/types.js.map +0 -1
  75. package/dist/provider.d.ts +0 -6
  76. package/dist/provider.d.ts.map +0 -1
  77. package/dist/provider.js +0 -2
  78. package/dist/provider.js.map +0 -1
  79. package/dist/report.d.ts +0 -67
  80. package/dist/report.d.ts.map +0 -1
  81. package/dist/report.js +0 -51
  82. package/dist/report.js.map +0 -1
  83. package/dist/test-helpers.d.ts +0 -12
  84. package/dist/test-helpers.d.ts.map +0 -1
  85. package/dist/test-helpers.js +0 -33
  86. package/dist/test-helpers.js.map +0 -1
  87. package/dist/types.d.ts +0 -41
  88. package/dist/types.d.ts.map +0 -1
  89. package/dist/types.js +0 -2
  90. package/dist/types.js.map +0 -1
  91. package/dist/utils.d.ts +0 -22
  92. package/dist/utils.d.ts.map +0 -1
  93. package/dist/utils.js +0 -49
  94. package/dist/utils.js.map +0 -1
  95. package/dist/validation.d.ts +0 -6
  96. package/dist/validation.d.ts.map +0 -1
  97. package/dist/validation.js +0 -38
  98. package/dist/validation.js.map +0 -1
@@ -1,472 +0,0 @@
1
- #!/usr/bin/env node
2
- import { existsSync } from "node:fs";
3
- import { readFile, writeFile } from "node:fs/promises";
4
- import { stdin, stdout } from "node:process";
5
- function printHelp() {
6
- const text = [
7
- "gateproof",
8
- "",
9
- "Subcommands:",
10
- " prdts Generate a prd.ts from story descriptions",
11
- "",
12
- "Usage:",
13
- " npx gateproof prdts --in stories.txt --out prd.ts",
14
- " echo \"User can sign up\" | npx gateproof prdts --stdout",
15
- "",
16
- "Options (prdts):",
17
- " -i, --in <path> Input file with one story per line",
18
- " -o, --out <path> Output file path (default: ./prd.ts)",
19
- " --stdout Print the generated prd.ts to stdout",
20
- " --endpoint <url> API base URL (default: https://opencode.ai/zen/v1)",
21
- " --model <id> Model id (default: big-pickle)",
22
- " --api-key <key> API key (or set OPENCODE_ZEN_API_KEY)",
23
- " --overwrite Overwrite output file if it exists",
24
- " -h, --help Show help",
25
- ].join("\n");
26
- stdout.write(`${text}\n`);
27
- }
28
- function parseArgs(argv) {
29
- const args = {
30
- endpoint: "https://opencode.ai/zen/v1",
31
- model: "big-pickle",
32
- stdout: false,
33
- overwrite: false,
34
- };
35
- if (argv.length > 0 && !argv[0].startsWith("-")) {
36
- args.subcommand = argv.shift();
37
- }
38
- for (let i = 0; i < argv.length; i++) {
39
- const arg = argv[i];
40
- switch (arg) {
41
- case "--in":
42
- case "-i":
43
- args.inputPath = argv[++i];
44
- break;
45
- case "--out":
46
- case "-o":
47
- args.outputPath = argv[++i];
48
- break;
49
- case "--endpoint":
50
- args.endpoint = argv[++i];
51
- break;
52
- case "--model":
53
- args.model = argv[++i];
54
- break;
55
- case "--api-key":
56
- args.apiKey = argv[++i];
57
- break;
58
- case "--stdout":
59
- args.stdout = true;
60
- break;
61
- case "--overwrite":
62
- args.overwrite = true;
63
- break;
64
- case "--help":
65
- case "-h":
66
- printHelp();
67
- process.exit(0);
68
- default:
69
- if (arg && arg.startsWith("-")) {
70
- throw new Error(`Unknown flag: ${arg}`);
71
- }
72
- }
73
- }
74
- return args;
75
- }
76
- async function readStdin() {
77
- return new Promise((resolve, reject) => {
78
- let data = "";
79
- stdin.setEncoding("utf8");
80
- stdin.on("data", (chunk) => {
81
- data += chunk;
82
- });
83
- stdin.on("end", () => resolve(data));
84
- stdin.on("error", reject);
85
- });
86
- }
87
- async function getDescriptions(inputPath) {
88
- if (inputPath) {
89
- return readFile(inputPath, "utf8");
90
- }
91
- if (stdin.isTTY) {
92
- process.stderr.write("Paste story descriptions, then press Ctrl-D.\n");
93
- }
94
- return readStdin();
95
- }
96
- function stripCodeFences(text) {
97
- return text.replace(/```(?:json|ts|typescript)?/g, "").replace(/```/g, "").trim();
98
- }
99
- function extractJson(text) {
100
- const cleaned = stripCodeFences(text);
101
- try {
102
- return JSON.parse(cleaned);
103
- }
104
- catch {
105
- // Try to extract the first JSON object or array.
106
- const objectStart = cleaned.indexOf("{");
107
- const objectEnd = cleaned.lastIndexOf("}");
108
- if (objectStart !== -1 && objectEnd !== -1 && objectEnd > objectStart) {
109
- try {
110
- return JSON.parse(cleaned.slice(objectStart, objectEnd + 1));
111
- }
112
- catch {
113
- // continue
114
- }
115
- }
116
- const arrayStart = cleaned.indexOf("[");
117
- const arrayEnd = cleaned.lastIndexOf("]");
118
- if (arrayStart !== -1 && arrayEnd !== -1 && arrayEnd > arrayStart) {
119
- return JSON.parse(cleaned.slice(arrayStart, arrayEnd + 1));
120
- }
121
- throw new Error("Model response did not contain valid JSON.");
122
- }
123
- }
124
- function normalizePrd(input) {
125
- if (Array.isArray(input)) {
126
- return { stories: input };
127
- }
128
- if (input && typeof input === "object" && "prd" in input) {
129
- const prdValue = input.prd;
130
- if (prdValue && typeof prdValue === "object") {
131
- return prdValue;
132
- }
133
- }
134
- if (!input || typeof input !== "object")
135
- return input;
136
- const root = input;
137
- if (!Array.isArray(root.stories))
138
- return input;
139
- const normalizedStories = root.stories.map((story) => {
140
- if (!story || typeof story !== "object")
141
- return story;
142
- const s = story;
143
- const gateImplementation = s.gateImplementation ?? s.gateImplementationCode ?? s.gateImplementation_code;
144
- const dependsOn = s.dependsOn ?? s.depends_on;
145
- return {
146
- ...s,
147
- gateImplementation,
148
- dependsOn,
149
- };
150
- });
151
- return { ...root, stories: normalizedStories };
152
- }
153
- function coercePrd(input) {
154
- const normalized = normalizePrd(input);
155
- if (!normalized || typeof normalized !== "object") {
156
- throw new Error("PRD output must be an object.");
157
- }
158
- const storiesValue = normalized.stories;
159
- if (!Array.isArray(storiesValue)) {
160
- throw new Error("PRD output must include stories[].");
161
- }
162
- const stories = storiesValue.map((story, index) => {
163
- if (!story || typeof story !== "object") {
164
- throw new Error(`stories[${index}] must be an object.`);
165
- }
166
- const s = story;
167
- const id = s.id;
168
- const title = s.title;
169
- const gateImplementation = s.gateImplementation;
170
- const dependsOn = s.dependsOn;
171
- if (typeof id !== "string" || id.length === 0) {
172
- throw new Error(`stories[${index}].id must be a non-empty string.`);
173
- }
174
- if (typeof title !== "string" || title.length === 0) {
175
- throw new Error(`stories[${index}].title must be a non-empty string.`);
176
- }
177
- let code;
178
- if (typeof gateImplementation === "string") {
179
- code = gateImplementation;
180
- }
181
- else if (gateImplementation && typeof gateImplementation === "object") {
182
- const codeValue = gateImplementation.code;
183
- if (typeof codeValue === "string")
184
- code = codeValue;
185
- }
186
- if (!code) {
187
- throw new Error(`stories[${index}].gateImplementation.code must be a string.`);
188
- }
189
- let dependsOnArray;
190
- if (dependsOn !== undefined) {
191
- if (!Array.isArray(dependsOn)) {
192
- throw new Error(`stories[${index}].dependsOn must be an array of strings.`);
193
- }
194
- for (const dep of dependsOn) {
195
- if (typeof dep !== "string" || dep.length === 0) {
196
- throw new Error(`stories[${index}].dependsOn must be an array of strings.`);
197
- }
198
- }
199
- dependsOnArray = dependsOn;
200
- }
201
- return {
202
- id,
203
- title,
204
- gateImplementation: { code },
205
- ...(dependsOnArray ? { dependsOn: dependsOnArray } : {}),
206
- };
207
- });
208
- return { stories };
209
- }
210
- function buildPrompt(promptText) {
211
- return `Transform the following product prompt into a structured PRD object with inline gate implementations.
212
-
213
- Prompt:
214
- ${promptText}
215
-
216
- Requirements:
217
- 1. Generate kebab-case IDs for each story (e.g., "user-signup", "email-verification")
218
- 2. Create clear, descriptive titles
219
- 3. For each story, generate a complete gate implementation in the gateImplementation.code field
220
- 4. Gate implementations should:
221
- - Use createHttpObserveResource or createEmptyObserveResource for observation
222
- - Include appropriate Act actions (Act.wait, Act.browser, etc.)
223
- - Include Assert.custom or Assert.noErrors assertions
224
- - Be self-contained and runnable
225
- - Match the story's intent (e.g., if story is about API health, gate should check API endpoint)
226
- 5. Infer dependencies from the prompt (e.g., if a story mentions "depends on signup", add "user-signup" to dependsOn)
227
- 6. If dependencies are mentioned in natural language, map them to the appropriate story IDs
228
-
229
- For gate implementations, use this EXACT pattern (return the gate spec directly):
230
- \`\`\`
231
- import { Gate, Act, Assert, createHttpObserveResource, createEmptyObserveResource } from "gateproof";
232
-
233
- export function run() {
234
- return {
235
- name: "story-id",
236
- observe: createHttpObserveResource({ url: API_URL + "/endpoint", pollInterval: 500 }),
237
- act: [Act.wait(500)],
238
- assert: [
239
- Assert.custom("check_name", async (logs) => {
240
- const httpLog = logs.find(l => l.stage === "http");
241
- return httpLog?.status === "success";
242
- })
243
- ],
244
- stop: { idleMs: 1000, maxMs: 10000 }
245
- };
246
- }
247
- \`\`\`
248
-
249
- IMPORTANT: The gateImplementation.code field must contain COMPLETE, runnable TypeScript code that:
250
- - Imports necessary functions from "gateproof"
251
- - Exports a function called "run" that returns a gate spec object
252
- - Uses the configuration variables (API_URL, TEST_URL) defined at the top
253
- - Includes proper assertions that match the story's intent
254
-
255
- Return ONLY JSON in this shape (no markdown):
256
- {
257
- "stories": [
258
- {
259
- "id": "story-id",
260
- "title": "Story title",
261
- "gateImplementation": { "code": "TypeScript code string" },
262
- "dependsOn": ["optional-story-id"]
263
- }
264
- ]
265
- }`;
266
- }
267
- async function requestPrd(endpoint, model, apiKey, descriptions) {
268
- const response = await fetch(`${endpoint.replace(/\/$/, "")}/chat/completions`, {
269
- method: "POST",
270
- headers: {
271
- "Content-Type": "application/json",
272
- Authorization: `Bearer ${apiKey}`,
273
- },
274
- body: JSON.stringify({
275
- model,
276
- temperature: 0.2,
277
- max_tokens: 3200,
278
- messages: [
279
- {
280
- role: "user",
281
- content: buildPrompt(descriptions),
282
- },
283
- ],
284
- }),
285
- });
286
- if (!response.ok) {
287
- const text = await response.text();
288
- throw new Error(`Opencode request failed (${response.status}): ${text}`);
289
- }
290
- const data = (await response.json());
291
- const content = data.choices?.[0]?.message?.content;
292
- if (!content) {
293
- throw new Error("Opencode response did not include content.");
294
- }
295
- const json = extractJson(content);
296
- return coercePrd(json);
297
- }
298
- function formatPrdFile(prd) {
299
- const gateMap = prd.stories.map((story) => {
300
- const functionName = story.id.replace(/-/g, "_");
301
- let gateCode = story.gateImplementation.code;
302
- gateCode = gateCode.replace(/export\s+function\s+run\s*\(\)/g, `function ${functionName}Gate()`);
303
- gateCode = gateCode.replace(/export\s+/g, "");
304
- if (!gateCode.includes("return {")) {
305
- gateCode = gateCode.replace(/function\s+\w+Gate\(\)\s*\{/, `function ${functionName}Gate() {\n return`);
306
- }
307
- return { story, functionName, gateCode };
308
- });
309
- const gateFunctions = gateMap
310
- .map(({ story, gateCode }) => {
311
- return `// Gate: ${story.title}
312
- ${gateCode}
313
- `;
314
- })
315
- .join("\n");
316
- const gateMapObject = gateMap
317
- .map(({ story, functionName }) => {
318
- return ` "${story.id}": ${functionName}Gate,`;
319
- })
320
- .join("\n");
321
- return `#!/usr/bin/env bun
322
- /**
323
- * gateproof PRD - Single File
324
- *
325
- * Complete PRD with inline gate implementations.
326
- * Add your API keys/config at the top and run: bun run prd.ts
327
- */
328
-
329
- // ============================================================================
330
- // CONFIGURATION
331
- // ============================================================================
332
- const API_URL = process.env.API_URL || "https://your-api.com";
333
- const TEST_URL = process.env.TEST_URL || "http://localhost:3000";
334
-
335
- // ============================================================================
336
- // GATE IMPLEMENTATIONS
337
- // ============================================================================
338
-
339
- import { Gate, Act, Assert, createHttpObserveResource, createEmptyObserveResource } from "gateproof";
340
-
341
- ${gateFunctions}
342
-
343
- // ============================================================================
344
- // PRD DEFINITION & EXECUTION
345
- // ============================================================================
346
-
347
- const stories = [
348
- ${prd.stories
349
- .map((story) => {
350
- return ` {
351
- id: "${story.id}",
352
- title: "${story.title}",${story.dependsOn ? `\n dependsOn: [${story.dependsOn.map((id) => `"${id}"`).join(", ")}],` : ""}
353
- }`;
354
- })
355
- .join(",\n")}
356
- ];
357
-
358
- const gates: Record<string, () => ReturnType<typeof Gate.run> extends Promise<infer T> ? T : never> = {
359
- ${gateMapObject}
360
- };
361
-
362
- async function runPrd() {
363
- const byId = new Map(stories.map((s) => [s.id, s]));
364
- const executed = new Set<string>();
365
- const visiting = new Set<string>();
366
-
367
- function visit(id: string): string[] {
368
- if (visiting.has(id)) {
369
- throw new Error(\`Dependency cycle detected: \${id}\`);
370
- }
371
- if (executed.has(id)) {
372
- return [];
373
- }
374
-
375
- visiting.add(id);
376
- const story = byId.get(id);
377
- if (!story) {
378
- throw new Error(\`Unknown story: \${id}\`);
379
- }
380
-
381
- const order: string[] = [];
382
- for (const depId of story.dependsOn || []) {
383
- order.push(...visit(depId));
384
- }
385
-
386
- visiting.delete(id);
387
- executed.add(id);
388
- order.push(id);
389
- return order;
390
- }
391
-
392
- const executionOrder = stories.flatMap((s) => visit(s.id));
393
- const uniqueOrder = Array.from(new Set(executionOrder));
394
-
395
- for (const storyId of uniqueOrder) {
396
- const story = byId.get(storyId);
397
- if (!story) continue;
398
-
399
- console.log(\`\\n--- \${story.id}: \${story.title}\`);
400
- const gateFn = gates[storyId];
401
- if (!gateFn) {
402
- throw new Error(\`No gate implementation for story: \${storyId}\`);
403
- }
404
-
405
- const gateSpec = gateFn();
406
- const result = await Gate.run(gateSpec);
407
-
408
- if (result.status !== "success") {
409
- console.error(\`\\n❌ PRD failed at: \${story.id} - \${story.title}\`);
410
- if (result.error) {
411
- console.error(\`Error: \${result.error.message}\`);
412
- }
413
- process.exit(1);
414
- }
415
- }
416
-
417
- console.log("\\n✅ All PRD stories passed!");
418
- }
419
-
420
- if (import.meta.main) {
421
- runPrd().catch((error) => {
422
- console.error("Fatal error:", error);
423
- process.exit(1);
424
- });
425
- }
426
- `;
427
- }
428
- async function runPrdts(args) {
429
- const descriptions = (await getDescriptions(args.inputPath)).trim();
430
- if (!descriptions) {
431
- throw new Error("No story descriptions found.");
432
- }
433
- const apiKey = args.apiKey ?? process.env.OPENCODE_ZEN_API_KEY;
434
- if (!apiKey) {
435
- throw new Error("Missing OPENCODE_ZEN_API_KEY. Pass --api-key or set OPENCODE_ZEN_API_KEY.");
436
- }
437
- const prd = await requestPrd(args.endpoint, args.model, apiKey, descriptions);
438
- const prdFile = formatPrdFile(prd);
439
- if (args.stdout) {
440
- stdout.write(prdFile);
441
- return;
442
- }
443
- const outputPath = args.outputPath ?? "prd.ts";
444
- if (existsSync(outputPath) && !args.overwrite) {
445
- throw new Error(`Refusing to overwrite ${outputPath}. Use --overwrite to replace it.`);
446
- }
447
- await writeFile(outputPath, prdFile, "utf8");
448
- stdout.write(`✅ Wrote ${outputPath}\n`);
449
- }
450
- async function main() {
451
- try {
452
- const args = parseArgs(process.argv.slice(2));
453
- if (!args.subcommand || args.subcommand === "help") {
454
- printHelp();
455
- process.exit(0);
456
- }
457
- switch (args.subcommand) {
458
- case "prdts":
459
- await runPrdts(args);
460
- break;
461
- default:
462
- throw new Error(`Unknown subcommand: ${args.subcommand}`);
463
- }
464
- }
465
- catch (error) {
466
- const message = error instanceof Error ? error.message : String(error);
467
- stdout.write(`❌ ${message}\n`);
468
- process.exit(1);
469
- }
470
- }
471
- void main();
472
- //# sourceMappingURL=gateproof.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gateproof.js","sourceRoot":"","sources":["../../src/cli/gateproof.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { type Backend } from "../observe";
2
- export interface AnalyticsConfig {
3
- accountId: string;
4
- apiToken: string;
5
- dataset: string;
6
- pollInterval?: number;
7
- }
8
- export declare function createAnalyticsBackend(config: AnalyticsConfig): Backend;
9
- //# sourceMappingURL=analytics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/cloudflare/analytics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgD,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAGxF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgBD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GACtB,OAAO,CA+GT"}
@@ -1,98 +0,0 @@
1
- import { Effect, Schedule, Ref } from "effect";
2
- import { createObservabilityError } from "../observe";
3
- import { createPollingBackend } from "./polling-backend";
4
- export function createAnalyticsBackend(config) {
5
- const cacheRef = Ref.unsafeMake(new Map());
6
- const CACHE_TTL = 5000;
7
- const lastRequestRef = Ref.unsafeMake(0);
8
- const MIN_REQUEST_INTERVAL = 100;
9
- const fetchRows = (lastTimestamp) => {
10
- const cacheKey = `${config.dataset}:${lastTimestamp}`;
11
- return Effect.gen(function* () {
12
- const cache = yield* Ref.get(cacheRef);
13
- const cached = cache.get(cacheKey);
14
- const now = Date.now();
15
- if (cached && (now - cached.timestamp) < CACHE_TTL) {
16
- return cached.data;
17
- }
18
- const query = `SELECT blob1 AS requestId, blob2 AS stage, blob3 AS action, blob4 AS status, blob5 AS durableObjectId, blob6 AS containerId, blob7 AS errorTag, blob8 AS errorMessage, blob9 AS data, double1 AS durationMs, double2 AS timestamp FROM ${config.dataset} WHERE double2 > ${lastTimestamp} ORDER BY double2 ASC LIMIT 100`;
19
- const response = yield* Effect.tryPromise({
20
- try: async () => {
21
- return await fetch(`https://api.cloudflare.com/client/v4/accounts/${config.accountId}/analytics_engine/sql`, {
22
- method: "POST",
23
- headers: {
24
- Authorization: `Bearer ${config.apiToken}`,
25
- "Content-Type": "text/plain"
26
- },
27
- body: query
28
- });
29
- },
30
- catch: (e) => createObservabilityError(e)
31
- }).pipe(Effect.timeout("30 seconds"), Effect.retry(Schedule.exponential("100 millis").pipe(Schedule.compose(Schedule.recurs(3)))), Effect.catchTag("TimeoutException", (e) => Effect.fail(createObservabilityError(e))));
32
- if (!response.ok) {
33
- yield* Effect.fail(createObservabilityError(new Error(`API request failed: ${response.status}`)));
34
- }
35
- const data = yield* Effect.tryPromise({
36
- try: async () => (await response.json()),
37
- catch: (e) => createObservabilityError(e)
38
- });
39
- const rows = data.result && Array.isArray(data.result) ? data.result : [];
40
- yield* Ref.update(cacheRef, (cache) => {
41
- const newCache = new Map(cache);
42
- newCache.set(cacheKey, { data: rows, timestamp: now });
43
- if (newCache.size > 100) {
44
- const entries = Array.from(newCache.entries());
45
- entries.sort((a, b) => b[1].timestamp - a[1].timestamp);
46
- return new Map(entries.slice(0, 100));
47
- }
48
- return newCache;
49
- });
50
- return rows;
51
- });
52
- };
53
- const parseRow = (row) => {
54
- if (!row.timestamp || !row.requestId)
55
- return null;
56
- return {
57
- requestId: row.requestId,
58
- timestamp: new Date(row.timestamp).toISOString(),
59
- stage: (row.stage || "worker"),
60
- action: row.action || "unknown",
61
- status: (row.status || "info"),
62
- ...(row.durableObjectId && { durableObjectId: row.durableObjectId }),
63
- ...(row.containerId && { containerId: row.containerId }),
64
- ...(row.errorTag && {
65
- error: {
66
- tag: row.errorTag,
67
- message: row.errorMessage || ""
68
- }
69
- }),
70
- ...(row.data && (() => {
71
- try {
72
- return { data: JSON.parse(row.data) };
73
- }
74
- catch {
75
- return {};
76
- }
77
- })()),
78
- ...(row.durationMs !== undefined && { durationMs: row.durationMs })
79
- };
80
- };
81
- const backend = {
82
- fetchData: fetchRows,
83
- processData(rows, lastTimestamp) {
84
- const logs = [];
85
- let newTimestamp = lastTimestamp;
86
- for (const row of rows) {
87
- const log = parseRow(row);
88
- if (log) {
89
- logs.push(log);
90
- newTimestamp = Math.max(newTimestamp, row.timestamp || newTimestamp);
91
- }
92
- }
93
- return { logs, newTimestamp };
94
- }
95
- };
96
- return createPollingBackend({ pollInterval: config.pollInterval ?? 1000 }, backend);
97
- }
98
- //# sourceMappingURL=analytics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/cloudflare/analytics.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type Backend } from "../observe";
2
- export interface CliStreamConfig {
3
- accountId?: string;
4
- workerName?: string;
5
- }
6
- export declare function createCliStreamBackend(config: CliStreamConfig): Backend;
7
- //# sourceMappingURL=cli-stream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-stream.d.ts","sourceRoot":"","sources":["../../src/cloudflare/cli-stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0E,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAElH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GACtB,OAAO,CAiFT"}