@mondaydotcomorg/atp-runtime 0.17.14

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 (137) hide show
  1. package/README.md +389 -0
  2. package/dist/approval/handler.d.ts +12 -0
  3. package/dist/approval/handler.d.ts.map +1 -0
  4. package/dist/approval/handler.js +17 -0
  5. package/dist/approval/handler.js.map +1 -0
  6. package/dist/approval/index.d.ts +17 -0
  7. package/dist/approval/index.d.ts.map +1 -0
  8. package/dist/approval/index.js +94 -0
  9. package/dist/approval/index.js.map +1 -0
  10. package/dist/approval/types.d.ts +21 -0
  11. package/dist/approval/types.d.ts.map +1 -0
  12. package/dist/approval/types.js +5 -0
  13. package/dist/approval/types.js.map +1 -0
  14. package/dist/cache/backends.d.ts +39 -0
  15. package/dist/cache/backends.d.ts.map +1 -0
  16. package/dist/cache/backends.js +167 -0
  17. package/dist/cache/backends.js.map +1 -0
  18. package/dist/cache/index.d.ts +32 -0
  19. package/dist/cache/index.d.ts.map +1 -0
  20. package/dist/cache/index.js +103 -0
  21. package/dist/cache/index.js.map +1 -0
  22. package/dist/cache/types.d.ts +20 -0
  23. package/dist/cache/types.d.ts.map +1 -0
  24. package/dist/cache/types.js +2 -0
  25. package/dist/cache/types.js.map +1 -0
  26. package/dist/embedding/index.d.ts +39 -0
  27. package/dist/embedding/index.d.ts.map +1 -0
  28. package/dist/embedding/index.js +162 -0
  29. package/dist/embedding/index.js.map +1 -0
  30. package/dist/embedding/types.d.ts +28 -0
  31. package/dist/embedding/types.d.ts.map +1 -0
  32. package/dist/embedding/types.js +5 -0
  33. package/dist/embedding/types.js.map +1 -0
  34. package/dist/embedding/utils.d.ts +11 -0
  35. package/dist/embedding/utils.d.ts.map +1 -0
  36. package/dist/embedding/utils.js +30 -0
  37. package/dist/embedding/utils.js.map +1 -0
  38. package/dist/embedding/vector-store.d.ts +64 -0
  39. package/dist/embedding/vector-store.d.ts.map +1 -0
  40. package/dist/embedding/vector-store.js +142 -0
  41. package/dist/embedding/vector-store.js.map +1 -0
  42. package/dist/index.d.ts +18 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +17 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/llm/callback.d.ts +13 -0
  47. package/dist/llm/callback.d.ts.map +1 -0
  48. package/dist/llm/callback.js +19 -0
  49. package/dist/llm/callback.js.map +1 -0
  50. package/dist/llm/index.d.ts +29 -0
  51. package/dist/llm/index.d.ts.map +1 -0
  52. package/dist/llm/index.js +118 -0
  53. package/dist/llm/index.js.map +1 -0
  54. package/dist/llm/replay.d.ts +47 -0
  55. package/dist/llm/replay.d.ts.map +1 -0
  56. package/dist/llm/replay.js +114 -0
  57. package/dist/llm/replay.js.map +1 -0
  58. package/dist/llm/types.d.ts +24 -0
  59. package/dist/llm/types.d.ts.map +1 -0
  60. package/dist/llm/types.js +2 -0
  61. package/dist/llm/types.js.map +1 -0
  62. package/dist/log/index.d.ts +12 -0
  63. package/dist/log/index.d.ts.map +1 -0
  64. package/dist/log/index.js +166 -0
  65. package/dist/log/index.js.map +1 -0
  66. package/dist/log/types.d.ts +19 -0
  67. package/dist/log/types.d.ts.map +1 -0
  68. package/dist/log/types.js +5 -0
  69. package/dist/log/types.js.map +1 -0
  70. package/dist/metadata/decorators.d.ts +27 -0
  71. package/dist/metadata/decorators.d.ts.map +1 -0
  72. package/dist/metadata/decorators.js +38 -0
  73. package/dist/metadata/decorators.js.map +1 -0
  74. package/dist/metadata/generated.d.ts +18 -0
  75. package/dist/metadata/generated.d.ts.map +1 -0
  76. package/dist/metadata/generated.js +290 -0
  77. package/dist/metadata/generated.js.map +1 -0
  78. package/dist/metadata/index.d.ts +11 -0
  79. package/dist/metadata/index.d.ts.map +1 -0
  80. package/dist/metadata/index.js +45 -0
  81. package/dist/metadata/index.js.map +1 -0
  82. package/dist/metadata/types.d.ts +22 -0
  83. package/dist/metadata/types.d.ts.map +1 -0
  84. package/dist/metadata/types.js +6 -0
  85. package/dist/metadata/types.js.map +1 -0
  86. package/dist/pause/index.d.ts +11 -0
  87. package/dist/pause/index.d.ts.map +1 -0
  88. package/dist/pause/index.js +15 -0
  89. package/dist/pause/index.js.map +1 -0
  90. package/dist/pause/types.d.ts +46 -0
  91. package/dist/pause/types.d.ts.map +1 -0
  92. package/dist/pause/types.js +57 -0
  93. package/dist/pause/types.js.map +1 -0
  94. package/dist/progress/index.d.ts +19 -0
  95. package/dist/progress/index.d.ts.map +1 -0
  96. package/dist/progress/index.js +61 -0
  97. package/dist/progress/index.js.map +1 -0
  98. package/dist/progress/types.d.ts +7 -0
  99. package/dist/progress/types.d.ts.map +1 -0
  100. package/dist/progress/types.js +2 -0
  101. package/dist/progress/types.js.map +1 -0
  102. package/dist/registry.d.ts +16 -0
  103. package/dist/registry.d.ts.map +1 -0
  104. package/dist/registry.js +16 -0
  105. package/dist/registry.js.map +1 -0
  106. package/dist/utils.d.ts +11 -0
  107. package/dist/utils.d.ts.map +1 -0
  108. package/dist/utils.js +31 -0
  109. package/dist/utils.js.map +1 -0
  110. package/package.json +51 -0
  111. package/src/approval/handler.ts +26 -0
  112. package/src/approval/index.ts +95 -0
  113. package/src/approval/types.ts +23 -0
  114. package/src/cache/backends.ts +196 -0
  115. package/src/cache/index.ts +74 -0
  116. package/src/cache/types.ts +20 -0
  117. package/src/embedding/index.ts +153 -0
  118. package/src/embedding/types.ts +31 -0
  119. package/src/embedding/utils.ts +34 -0
  120. package/src/embedding/vector-store.ts +164 -0
  121. package/src/index.ts +35 -0
  122. package/src/llm/callback.ts +24 -0
  123. package/src/llm/index.ts +121 -0
  124. package/src/llm/replay.ts +141 -0
  125. package/src/llm/types.ts +29 -0
  126. package/src/log/index.ts +167 -0
  127. package/src/log/types.ts +21 -0
  128. package/src/metadata/decorators.ts +44 -0
  129. package/src/metadata/generated.ts +293 -0
  130. package/src/metadata/index.ts +61 -0
  131. package/src/metadata/types.ts +24 -0
  132. package/src/pause/index.ts +28 -0
  133. package/src/pause/types.ts +57 -0
  134. package/src/progress/index.ts +50 -0
  135. package/src/progress/types.ts +6 -0
  136. package/src/registry.ts +22 -0
  137. package/src/utils.ts +37 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * AUTO-GENERATED - DO NOT EDIT
3
+ * Generated by scripts/generate-metadata.ts
4
+ *
5
+ * Hybrid approach:
6
+ * - ts-json-schema-generator (OSS) for most types
7
+ * - ts-morph fallback for types OSS can't handle (generics)
8
+ */
9
+
10
+ import type { RuntimeAPIMetadata } from './types';
11
+
12
+ export const GENERATED_METADATA: RuntimeAPIMetadata[] = [
13
+ {
14
+ "name": "approval",
15
+ "description": "Approval API - Request explicit human approval for sensitive operations",
16
+ "methods": [
17
+ {
18
+ "name": "request",
19
+ "description": "Request approval from a human",
20
+ "params": [
21
+ {
22
+ "name": "message",
23
+ "type": "string",
24
+ "description": "The message to display to the user",
25
+ "optional": false
26
+ },
27
+ {
28
+ "name": "context",
29
+ "type": "Record<string, unknown>",
30
+ "description": "Optional context information about what needs approval",
31
+ "optional": true
32
+ }
33
+ ],
34
+ "returns": "Promise<ApprovalResponse>"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "name": "cache",
40
+ "description": "Cache API - Store and retrieve data with optional TTL",
41
+ "methods": [
42
+ {
43
+ "name": "get",
44
+ "description": "Get a value from cache by key",
45
+ "params": [
46
+ {
47
+ "name": "key",
48
+ "type": "string",
49
+ "description": "Cache key",
50
+ "optional": false
51
+ }
52
+ ],
53
+ "returns": "Promise<T | null>"
54
+ },
55
+ {
56
+ "name": "set",
57
+ "description": "Set a value in cache with optional TTL",
58
+ "params": [
59
+ {
60
+ "name": "key",
61
+ "type": "string",
62
+ "description": "Cache key",
63
+ "optional": false
64
+ },
65
+ {
66
+ "name": "value",
67
+ "type": "unknown",
68
+ "description": "Value to cache",
69
+ "optional": false
70
+ },
71
+ {
72
+ "name": "ttl",
73
+ "type": "number",
74
+ "description": "Time to live in seconds",
75
+ "optional": true
76
+ }
77
+ ],
78
+ "returns": "Promise<void>"
79
+ },
80
+ {
81
+ "name": "delete",
82
+ "description": "Delete a value from cache",
83
+ "params": [
84
+ {
85
+ "name": "key",
86
+ "type": "string",
87
+ "description": "Cache key to delete",
88
+ "optional": false
89
+ }
90
+ ],
91
+ "returns": "Promise<void>"
92
+ },
93
+ {
94
+ "name": "has",
95
+ "description": "Check if a key exists in cache",
96
+ "params": [
97
+ {
98
+ "name": "key",
99
+ "type": "string",
100
+ "description": "Cache key to check",
101
+ "optional": false
102
+ }
103
+ ],
104
+ "returns": "Promise<boolean>"
105
+ },
106
+ {
107
+ "name": "clear",
108
+ "description": "Clear all cache entries",
109
+ "params": [],
110
+ "returns": "Promise<void>"
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "name": "embedding",
116
+ "description": "Embedding API - Client-side embedding with server-side vector storage",
117
+ "methods": [
118
+ {
119
+ "name": "embed",
120
+ "description": "Request client to generate and store embeddings",
121
+ "params": [
122
+ {
123
+ "name": "input",
124
+ "type": "string | string[]",
125
+ "description": "Text(s) to embed",
126
+ "optional": false
127
+ },
128
+ {
129
+ "name": "metadata",
130
+ "type": "Record<string, unknown>",
131
+ "description": "Optional metadata to store with embeddings",
132
+ "optional": true
133
+ }
134
+ ],
135
+ "returns": "Promise<string | string[]>"
136
+ },
137
+ {
138
+ "name": "search",
139
+ "description": "Search stored embeddings by similarity",
140
+ "params": [
141
+ {
142
+ "name": "query",
143
+ "type": "string",
144
+ "description": "Search query text (will be embedded by client)",
145
+ "optional": false
146
+ },
147
+ {
148
+ "name": "options",
149
+ "type": "Omit<SearchOptions, 'query'>",
150
+ "description": "Search options (topK, minSimilarity, filter)",
151
+ "optional": true
152
+ }
153
+ ],
154
+ "returns": "Promise<SearchResult[]>"
155
+ },
156
+ {
157
+ "name": "similarity",
158
+ "description": "Calculate cosine similarity between two embedding vectors",
159
+ "params": [
160
+ {
161
+ "name": "embedding1",
162
+ "type": "number[]",
163
+ "description": "First embedding vector",
164
+ "optional": false
165
+ },
166
+ {
167
+ "name": "embedding2",
168
+ "type": "number[]",
169
+ "description": "Second embedding vector",
170
+ "optional": false
171
+ }
172
+ ],
173
+ "returns": "number"
174
+ },
175
+ {
176
+ "name": "getAll",
177
+ "description": "Get all stored embeddings",
178
+ "params": [],
179
+ "returns": "EmbeddingRecord[]"
180
+ },
181
+ {
182
+ "name": "count",
183
+ "description": "Get count of stored embeddings",
184
+ "params": [],
185
+ "returns": "number"
186
+ }
187
+ ]
188
+ },
189
+ {
190
+ "name": "llm",
191
+ "description": "LLM API - Large Language Model calls using client-provided LLM (requires client.provideLLM())",
192
+ "methods": [
193
+ {
194
+ "name": "call",
195
+ "description": "Make an LLM call with a prompt",
196
+ "params": [
197
+ {
198
+ "name": "options",
199
+ "type": "LLMCallOptions",
200
+ "description": "LLM call options including prompt",
201
+ "optional": false
202
+ }
203
+ ],
204
+ "returns": "Promise<string>"
205
+ },
206
+ {
207
+ "name": "extract",
208
+ "description": "Extract structured data from text using an LLM",
209
+ "params": [
210
+ {
211
+ "name": "options",
212
+ "type": "LLMExtractOptions",
213
+ "description": "Extraction options with JSON schema",
214
+ "optional": false
215
+ }
216
+ ],
217
+ "returns": "Promise<T>"
218
+ },
219
+ {
220
+ "name": "classify",
221
+ "description": "Classify text into one of the provided categories",
222
+ "params": [
223
+ {
224
+ "name": "options",
225
+ "type": "LLMClassifyOptions",
226
+ "description": "Classification options with categories",
227
+ "optional": false
228
+ }
229
+ ],
230
+ "returns": "Promise<string>"
231
+ }
232
+ ]
233
+ },
234
+ {
235
+ "name": "progress",
236
+ "description": "Progress API - Report execution progress to clients",
237
+ "methods": [
238
+ {
239
+ "name": "report",
240
+ "description": "Report progress with message and completion fraction",
241
+ "params": [
242
+ {
243
+ "name": "message",
244
+ "type": "string",
245
+ "description": "Progress message",
246
+ "optional": false
247
+ },
248
+ {
249
+ "name": "fraction",
250
+ "type": "number",
251
+ "description": "Completion fraction (0-1)",
252
+ "optional": false
253
+ }
254
+ ],
255
+ "returns": "void"
256
+ }
257
+ ]
258
+ }
259
+ ];
260
+
261
+ /**
262
+ * Type definitions extracted using ts-json-schema-generator
263
+ */
264
+ export const TYPE_REGISTRY = [
265
+ {
266
+ "name": "ApprovalResponse",
267
+ "definition": "export interface ApprovalResponse<T = unknown> {\n\tapproved: boolean;\n\tresponse?: T;\n\ttimestamp: number;\n}"
268
+ },
269
+ {
270
+ "name": "SearchOptions",
271
+ "definition": "interface SearchOptions {\n query: string;\n topK?: number;\n minSimilarity?: number;\n filter?: Record<string, unknown>;\n}"
272
+ },
273
+ {
274
+ "name": "SearchResult",
275
+ "definition": "interface SearchResult {\n id: string;\n text: string;\n similarity: number;\n metadata?: Record<string, unknown>;\n}"
276
+ },
277
+ {
278
+ "name": "EmbeddingRecord",
279
+ "definition": "interface EmbeddingRecord {\n id: string;\n text: string;\n embedding: number[];\n metadata?: Record<string, unknown>;\n}"
280
+ },
281
+ {
282
+ "name": "LLMCallOptions",
283
+ "definition": "interface LLMCallOptions {\n prompt: string;\n context?: Record<string, unknown>;\n model?: string;\n maxTokens?: number;\n temperature?: number;\n systemPrompt?: string;\n}"
284
+ },
285
+ {
286
+ "name": "LLMExtractOptions",
287
+ "definition": "interface LLMExtractOptions {\n prompt: string;\n context?: Record<string, unknown>;\n schema: unknown;\n}"
288
+ },
289
+ {
290
+ "name": "LLMClassifyOptions",
291
+ "definition": "interface LLMClassifyOptions {\n text: string;\n categories: string[];\n context?: Record<string, unknown>;\n}"
292
+ }
293
+ ];
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Metadata and Type Generation Utilities
3
+ */
4
+
5
+ export type { RuntimeAPIParam, RuntimeAPIMethod, RuntimeAPIMetadata } from './types.js';
6
+ export { RuntimeAPI, RuntimeMethod } from './decorators.js';
7
+
8
+ import type { RuntimeAPIMetadata } from './types.js';
9
+
10
+ /**
11
+ * Generates TypeScript definitions from runtime API metadata
12
+ */
13
+ export function generateRuntimeTypes(apis: RuntimeAPIMetadata[]): string {
14
+ let typescript = '// Runtime SDK\ndeclare const atp: {\n';
15
+
16
+ for (const api of apis) {
17
+ typescript += ` /**\n`;
18
+ for (const line of api.description.split('\n')) {
19
+ typescript += ` * ${line}\n`;
20
+ }
21
+ typescript += ` */\n`;
22
+
23
+ typescript += ` ${api.name}: {\n`;
24
+
25
+ for (const method of api.methods) {
26
+ typescript += ` /**\n`;
27
+ typescript += ` * ${method.description}\n`;
28
+
29
+ for (const param of method.params) {
30
+ if (param.description) {
31
+ typescript += ` * @param ${param.name} - ${param.description}\n`;
32
+ }
33
+ }
34
+
35
+ if (method.returns !== 'void') {
36
+ const returnDesc = method.returns.startsWith('Promise')
37
+ ? 'Promise resolving to result'
38
+ : 'Result value';
39
+ typescript += ` * @returns ${returnDesc}\n`;
40
+ }
41
+
42
+ typescript += ` */\n`;
43
+
44
+ const paramStrings = method.params.map((p) => {
45
+ const optional = p.optional ? '?' : '';
46
+ const type = p.type.includes('\n') ? p.type.replace(/\n/g, '\n ') : p.type;
47
+ return `${p.name}${optional}: ${type}`;
48
+ });
49
+
50
+ typescript += ` ${method.name}(${paramStrings.join(', ')}): ${method.returns};\n`;
51
+
52
+ typescript += `\n`;
53
+ }
54
+
55
+ typescript += ` };\n\n`;
56
+ }
57
+
58
+ typescript += '};\n\n';
59
+
60
+ return typescript;
61
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Common metadata interface for runtime APIs
3
+ * Each runtime module exports its metadata for the type generator
4
+ */
5
+
6
+ export interface RuntimeAPIParam {
7
+ name: string;
8
+ type: string;
9
+ description?: string;
10
+ optional?: boolean;
11
+ }
12
+
13
+ export interface RuntimeAPIMethod {
14
+ name: string;
15
+ description: string;
16
+ params: RuntimeAPIParam[];
17
+ returns: string;
18
+ }
19
+
20
+ export interface RuntimeAPIMetadata {
21
+ name: string;
22
+ description: string;
23
+ methods: RuntimeAPIMethod[];
24
+ }
@@ -0,0 +1,28 @@
1
+ import { PauseExecutionError, CallbackType } from './types.js';
2
+
3
+ export {
4
+ PauseExecutionError,
5
+ CallbackType,
6
+ LLMOperation,
7
+ EmbeddingOperation,
8
+ ApprovalOperation,
9
+ ToolOperation,
10
+ } from './types.js';
11
+
12
+ /**
13
+ * Helper to create pause error
14
+ */
15
+ export function pauseForCallback(
16
+ type: CallbackType,
17
+ operation: string,
18
+ payload: Record<string, unknown>
19
+ ): never {
20
+ throw new PauseExecutionError(type, operation, payload);
21
+ }
22
+
23
+ /**
24
+ * Check if error is a pause request
25
+ */
26
+ export function isPauseError(error: unknown): error is PauseExecutionError {
27
+ return error instanceof PauseExecutionError;
28
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Callback types that can pause execution
3
+ */
4
+ export enum CallbackType {
5
+ LLM = 'llm',
6
+ APPROVAL = 'approval',
7
+ EMBEDDING = 'embedding',
8
+ TOOL = 'tool',
9
+ }
10
+
11
+ /**
12
+ * LLM callback operations
13
+ */
14
+ export enum LLMOperation {
15
+ CALL = 'call',
16
+ EXTRACT = 'extract',
17
+ CLASSIFY = 'classify',
18
+ }
19
+
20
+ /**
21
+ * Embedding callback operations
22
+ */
23
+ export enum EmbeddingOperation {
24
+ EMBED = 'embed',
25
+ SEARCH = 'search',
26
+ }
27
+
28
+ /**
29
+ * Approval callback operations
30
+ */
31
+ export enum ApprovalOperation {
32
+ REQUEST = 'request',
33
+ }
34
+
35
+ /**
36
+ * Tool callback operations
37
+ */
38
+ export enum ToolOperation {
39
+ CALL = 'call',
40
+ }
41
+
42
+ /**
43
+ * Thrown when execution needs to pause for client callback
44
+ */
45
+ export class PauseExecutionError extends Error {
46
+ public readonly type: CallbackType;
47
+ public readonly operation: string;
48
+ public readonly payload: Record<string, unknown>;
49
+
50
+ constructor(type: CallbackType, operation: string, payload: Record<string, unknown>) {
51
+ super(`Execution paused: waiting for ${type}.${operation}`);
52
+ this.name = 'PauseExecutionError';
53
+ this.type = type;
54
+ this.operation = operation;
55
+ this.payload = payload;
56
+ }
57
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Progress API - Clean refactored version with decorators
3
+ *
4
+ * Benefits:
5
+ * - No duplication between implementation and metadata
6
+ * - Types auto-detected from TypeScript signatures
7
+ */
8
+ import { RuntimeAPI, RuntimeMethod } from '../metadata/decorators.js';
9
+ import type { ProgressCallback } from './types.js';
10
+
11
+ export type { ProgressCallback } from './types.js';
12
+
13
+ /**
14
+ * Global progress callback (set by executor)
15
+ */
16
+ let progressCallback: ProgressCallback | null = null;
17
+
18
+ /**
19
+ * Set the progress callback handler
20
+ */
21
+ export function setProgressCallback(callback: ProgressCallback | null): void {
22
+ progressCallback = callback;
23
+ }
24
+
25
+ /**
26
+ * Progress Runtime API
27
+ *
28
+ * Allows reporting execution progress to clients
29
+ */
30
+ @RuntimeAPI('progress', 'Progress API - Report execution progress to clients')
31
+ class ProgressAPI {
32
+ /**
33
+ * Report progress with message and completion fraction
34
+ */
35
+ @RuntimeMethod('Report progress with message and completion fraction', {
36
+ message: { description: 'Progress message' },
37
+ fraction: { description: 'Completion fraction (0-1)' },
38
+ })
39
+ report(message: string, fraction: number): void {
40
+ if (progressCallback) {
41
+ try {
42
+ progressCallback(message, fraction);
43
+ } catch (error) {
44
+ console.error('Progress callback error:', error);
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ export const progress = new ProgressAPI();
@@ -0,0 +1,6 @@
1
+ /**
2
+
3
+ /**
4
+ * Progress callback function type
5
+ */
6
+ export type ProgressCallback = (message: string, fraction: number) => void;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Runtime API Registry
3
+ *
4
+ */
5
+ import type { RuntimeAPIMetadata } from './metadata/index.js';
6
+ import { GENERATED_METADATA } from './metadata/generated.js';
7
+
8
+ /**
9
+ * Get all registered runtime APIs metadata
10
+ *
11
+ * This is generated at BUILD TIME by ts-morph, not at runtime
12
+ */
13
+ export function getAllAPIs(): RuntimeAPIMetadata[] {
14
+ return GENERATED_METADATA;
15
+ }
16
+
17
+ /**
18
+ * Get metadata for a specific API by name
19
+ */
20
+ export function getAPI(name: string): RuntimeAPIMetadata | undefined {
21
+ return GENERATED_METADATA.find((api) => api.name === name);
22
+ }
package/src/utils.ts ADDED
@@ -0,0 +1,37 @@
1
+ export interface RetryOptions {
2
+ maxAttempts: number;
3
+ delayMs: number;
4
+ }
5
+
6
+ export const utils = {
7
+ async sleep(ms: number): Promise<void> {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ },
10
+
11
+ async retry<T>(fn: () => Promise<T>, options: RetryOptions): Promise<T> {
12
+ let lastError: Error | undefined;
13
+ for (let attempt = 1; attempt <= options.maxAttempts; attempt++) {
14
+ try {
15
+ return await fn();
16
+ } catch (error) {
17
+ lastError = error as Error;
18
+ if (attempt < options.maxAttempts) {
19
+ await this.sleep(options.delayMs);
20
+ }
21
+ }
22
+ }
23
+ throw lastError;
24
+ },
25
+
26
+ async parallel<T>(tasks: Array<() => Promise<T>>): Promise<T[]> {
27
+ return Promise.all(tasks.map((task) => task()));
28
+ },
29
+
30
+ async sequence<T>(tasks: Array<() => Promise<T>>): Promise<T[]> {
31
+ const results: T[] = [];
32
+ for (const task of tasks) {
33
+ results.push(await task());
34
+ }
35
+ return results;
36
+ },
37
+ };