@flarcos/arazzo-sdk 0.1.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 (51) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +252 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +212 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/generated/open-payments-client.d.ts +283 -0
  8. package/dist/generated/open-payments-client.d.ts.map +1 -0
  9. package/dist/generated/open-payments-client.js +1588 -0
  10. package/dist/generated/open-payments-client.js.map +1 -0
  11. package/dist/generator/codegen.d.ts +32 -0
  12. package/dist/generator/codegen.d.ts.map +1 -0
  13. package/dist/generator/codegen.js +127 -0
  14. package/dist/generator/codegen.js.map +1 -0
  15. package/dist/generator/templates.d.ts +27 -0
  16. package/dist/generator/templates.d.ts.map +1 -0
  17. package/dist/generator/templates.js +154 -0
  18. package/dist/generator/templates.js.map +1 -0
  19. package/dist/generator/type-mapper.d.ts +35 -0
  20. package/dist/generator/type-mapper.d.ts.map +1 -0
  21. package/dist/generator/type-mapper.js +145 -0
  22. package/dist/generator/type-mapper.js.map +1 -0
  23. package/dist/index.d.ts +23 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +22 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/parser/arazzo-parser.d.ts +38 -0
  28. package/dist/parser/arazzo-parser.d.ts.map +1 -0
  29. package/dist/parser/arazzo-parser.js +162 -0
  30. package/dist/parser/arazzo-parser.js.map +1 -0
  31. package/dist/parser/types.d.ts +115 -0
  32. package/dist/parser/types.d.ts.map +1 -0
  33. package/dist/parser/types.js +10 -0
  34. package/dist/parser/types.js.map +1 -0
  35. package/dist/runtime/expression-resolver.d.ts +59 -0
  36. package/dist/runtime/expression-resolver.d.ts.map +1 -0
  37. package/dist/runtime/expression-resolver.js +180 -0
  38. package/dist/runtime/expression-resolver.js.map +1 -0
  39. package/dist/runtime/http-client.d.ts +47 -0
  40. package/dist/runtime/http-client.d.ts.map +1 -0
  41. package/dist/runtime/http-client.js +126 -0
  42. package/dist/runtime/http-client.js.map +1 -0
  43. package/dist/runtime/types.d.ts +109 -0
  44. package/dist/runtime/types.d.ts.map +1 -0
  45. package/dist/runtime/types.js +7 -0
  46. package/dist/runtime/types.js.map +1 -0
  47. package/dist/runtime/workflow-executor.d.ts +33 -0
  48. package/dist/runtime/workflow-executor.d.ts.map +1 -0
  49. package/dist/runtime/workflow-executor.js +506 -0
  50. package/dist/runtime/workflow-executor.js.map +1 -0
  51. package/package.json +57 -0
@@ -0,0 +1,506 @@
1
+ /**
2
+ * Workflow Executor
3
+ *
4
+ * Executes a parsed Arazzo workflow at runtime with:
5
+ *
6
+ * 1. **Dynamic token passing** — Captures access tokens from grant steps
7
+ * and automatically injects them as Authorization headers in subsequent
8
+ * resource server calls.
9
+ *
10
+ * 2. **Interactive grant handling** — When a step returns an interact.redirect,
11
+ * the executor pauses and calls the user-provided InteractionHandler to
12
+ * obtain consent, then resumes the grant continuation.
13
+ *
14
+ * 3. **Dynamic server URL resolution** — When a wallet address resolution step
15
+ * returns authServer/resourceServer URLs, the executor dynamically updates
16
+ * the server URL map for subsequent steps.
17
+ */
18
+ import { splitOperationId } from '../parser/arazzo-parser.js';
19
+ import { resolveExpression, resolveDeep, } from './expression-resolver.js';
20
+ import { FetchHttpClient } from './http-client.js';
21
+ export class WorkflowExecutionError extends Error {
22
+ workflowId;
23
+ stepId;
24
+ constructor(message, workflowId, stepId) {
25
+ super(`[WorkflowExecutor] ${workflowId}${stepId ? `.${stepId}` : ''}: ${message}`);
26
+ this.workflowId = workflowId;
27
+ this.stepId = stepId;
28
+ this.name = 'WorkflowExecutionError';
29
+ }
30
+ }
31
+ /**
32
+ * Execute an Arazzo workflow.
33
+ *
34
+ * @param workflow - The parsed workflow object
35
+ * @param options - Execution options including inputs, server URLs, and auth
36
+ * @returns The workflow result with all outputs and step details
37
+ */
38
+ export async function executeWorkflow(workflow, options) {
39
+ const startTime = Date.now();
40
+ const httpClient = options.httpClient || new FetchHttpClient(options.authProvider);
41
+ // Build execution context
42
+ const context = {
43
+ inputs: options.inputs,
44
+ steps: {},
45
+ };
46
+ // Initialize mutable execution state
47
+ const state = {
48
+ serverUrls: { ...options.serverUrls },
49
+ currentToken: null,
50
+ tokenHistory: new Map(),
51
+ };
52
+ const stepResults = [];
53
+ try {
54
+ // Execute each step sequentially
55
+ for (const step of workflow.steps) {
56
+ const stepResult = await executeStep(step, workflow.workflowId, context, options, state, httpClient);
57
+ stepResults.push(stepResult);
58
+ // Store step result in context for subsequent expression resolution
59
+ context.steps[step.stepId] = stepResult;
60
+ // ─── Feature 1: Capture tokens from grant step outputs ───
61
+ captureTokens(stepResult, state, options);
62
+ // ─── Feature 3: Capture dynamic server URLs ───
63
+ captureDynamicServerUrls(stepResult, state, options);
64
+ // ─── Feature 2: Handle interactive grants ───
65
+ if (hasInteractionRedirect(stepResult)) {
66
+ await handleInteraction(step, stepResult, workflow.workflowId, context, options, state, httpClient, stepResults);
67
+ }
68
+ // Call afterStep hook
69
+ if (options.hooks?.afterStep) {
70
+ await options.hooks.afterStep(step.stepId, stepResult);
71
+ }
72
+ // Check if step failed
73
+ if (!stepResult.success) {
74
+ return {
75
+ workflowId: workflow.workflowId,
76
+ success: false,
77
+ outputs: {},
78
+ steps: stepResults,
79
+ duration: Date.now() - startTime,
80
+ error: `Step "${step.stepId}" failed with status ${stepResult.response.status}`,
81
+ };
82
+ }
83
+ }
84
+ // Resolve workflow-level outputs
85
+ const outputs = resolveWorkflowOutputs(workflow, context);
86
+ return {
87
+ workflowId: workflow.workflowId,
88
+ success: true,
89
+ outputs,
90
+ steps: stepResults,
91
+ duration: Date.now() - startTime,
92
+ };
93
+ }
94
+ catch (error) {
95
+ const errorMessage = error instanceof Error ? error.message : String(error);
96
+ return {
97
+ workflowId: workflow.workflowId,
98
+ success: false,
99
+ outputs: {},
100
+ steps: stepResults,
101
+ duration: Date.now() - startTime,
102
+ error: errorMessage,
103
+ };
104
+ }
105
+ }
106
+ // ═══════════════════════════════════════════════════════════════════════════
107
+ // Feature 1: Dynamic Token Passing
108
+ // ═══════════════════════════════════════════════════════════════════════════
109
+ /**
110
+ * Token output naming convention in Open Payments Arazzo workflows:
111
+ *
112
+ * incomingPaymentAccessToken → used for create-incoming-payment
113
+ * quoteAccessToken → used for create-quote
114
+ * outgoingPaymentAccessToken → used for create-outgoing-payment
115
+ * continueAccessToken → used for post-continue
116
+ * accessToken → generic (used for list/get operations)
117
+ *
118
+ * The executor captures ANY output whose key ends with "AccessToken" or
119
+ * equals "accessToken" and stores it as the current auth token for the
120
+ * next resource server request.
121
+ */
122
+ const TOKEN_OUTPUT_PATTERNS = [
123
+ /AccessToken$/, // e.g., incomingPaymentAccessToken
124
+ /^accessToken$/, // generic accessToken
125
+ ];
126
+ function captureTokens(stepResult, state, options) {
127
+ for (const [key, value] of Object.entries(stepResult.outputs)) {
128
+ if (typeof value === 'string' && isTokenOutput(key)) {
129
+ state.currentToken = value;
130
+ state.tokenHistory.set(key, value);
131
+ // Notify via hook
132
+ if (options.hooks?.onTokenAcquired) {
133
+ options.hooks.onTokenAcquired(stepResult.stepId, value, key);
134
+ }
135
+ }
136
+ }
137
+ }
138
+ function isTokenOutput(key) {
139
+ return TOKEN_OUTPUT_PATTERNS.some((pattern) => pattern.test(key));
140
+ }
141
+ // ═══════════════════════════════════════════════════════════════════════════
142
+ // Feature 2: Interactive Grant Handling
143
+ // ═══════════════════════════════════════════════════════════════════════════
144
+ /**
145
+ * Detects if a step's response contains an interactive grant redirect.
146
+ * In Open Payments, this means the response has `interact.redirect`.
147
+ */
148
+ function hasInteractionRedirect(stepResult) {
149
+ const body = stepResult.response.body;
150
+ if (!body || typeof body !== 'object')
151
+ return false;
152
+ const interact = body.interact;
153
+ return !!(interact && typeof interact.redirect === 'string');
154
+ }
155
+ /**
156
+ * Handle an interactive grant by:
157
+ * 1. Extracting redirect URL and continuation details
158
+ * 2. Calling the user's InteractionHandler
159
+ * 3. The interact_ref is stored so the NEXT step (continue grant)
160
+ * can use it in its request body
161
+ */
162
+ async function handleInteraction(step, stepResult, workflowId, context, options, state, _httpClient, _stepResults) {
163
+ const body = stepResult.response.body;
164
+ const interact = body.interact;
165
+ const continueInfo = body.continue;
166
+ const redirectUrl = interact.redirect;
167
+ const continueUri = continueInfo?.uri;
168
+ const continueAccessTokenObj = continueInfo?.access_token;
169
+ const continueAccessToken = continueAccessTokenObj?.value;
170
+ const continueWait = continueInfo?.wait;
171
+ const finishNonce = interact.finish;
172
+ const interactionContext = {
173
+ redirectUrl,
174
+ continueUri,
175
+ continueAccessToken,
176
+ finishNonce,
177
+ continueWait,
178
+ stepId: step.stepId,
179
+ };
180
+ // Store interaction context on the step result
181
+ stepResult.interaction = interactionContext;
182
+ // Store the continue token for the next step
183
+ if (continueAccessToken) {
184
+ state.currentToken = continueAccessToken;
185
+ state.tokenHistory.set('continueAccessToken', continueAccessToken);
186
+ }
187
+ if (!options.interactionHandler) {
188
+ throw new WorkflowExecutionError(`Step "${step.stepId}" requires user interaction (redirect to ${redirectUrl}) ` +
189
+ `but no interactionHandler was provided. Pass an interactionHandler in the ` +
190
+ `workflow execution options to handle interactive grants.`, workflowId, step.stepId);
191
+ }
192
+ // Call the user's handler and get the interact_ref
193
+ const interactRef = await options.interactionHandler(interactionContext);
194
+ // Store the interact_ref in the step outputs so the next step
195
+ // (continue grant) can reference it via $steps.{stepId}.outputs.interactRef
196
+ stepResult.outputs.interactRef = interactRef;
197
+ // Also update in the context
198
+ if (context.steps[step.stepId]) {
199
+ context.steps[step.stepId].outputs.interactRef = interactRef;
200
+ }
201
+ }
202
+ // ═══════════════════════════════════════════════════════════════════════════
203
+ // Feature 3: Dynamic Server URL Resolution
204
+ // ═══════════════════════════════════════════════════════════════════════════
205
+ /**
206
+ * When a wallet address resolution step returns authServer and
207
+ * resourceServer URLs, dynamically update the server URL map.
208
+ *
209
+ * This handles the Open Payments pattern where:
210
+ * - Step 1: GET wallet address → returns authServer + resourceServer
211
+ * - Step 2+: Use the discovered URLs for subsequent requests
212
+ */
213
+ const SERVER_OUTPUT_PATTERNS = {
214
+ // Output keys that map to source description names
215
+ authServer: 'authServer',
216
+ recipientAuthServer: 'authServer',
217
+ senderAuthServer: 'authServer',
218
+ resourceServer: 'resourceServer',
219
+ recipientResourceServer: 'resourceServer',
220
+ senderResourceServer: 'resourceServer',
221
+ };
222
+ function captureDynamicServerUrls(stepResult, state, options) {
223
+ const resolved = {};
224
+ for (const [key, value] of Object.entries(stepResult.outputs)) {
225
+ if (typeof value === 'string' && key in SERVER_OUTPUT_PATTERNS) {
226
+ const sourceName = SERVER_OUTPUT_PATTERNS[key];
227
+ state.serverUrls[sourceName] = value;
228
+ resolved[sourceName] = value;
229
+ }
230
+ }
231
+ if (Object.keys(resolved).length > 0 && options.hooks?.onServerResolved) {
232
+ options.hooks.onServerResolved(stepResult.stepId, resolved);
233
+ }
234
+ }
235
+ // ═══════════════════════════════════════════════════════════════════════════
236
+ // Step Execution
237
+ // ═══════════════════════════════════════════════════════════════════════════
238
+ async function executeStep(step, workflowId, context, options, state, httpClient) {
239
+ const stepStart = Date.now();
240
+ // Build the HTTP request from the step definition
241
+ const request = buildRequest(step, workflowId, context, state);
242
+ // ─── Inject auth token ───
243
+ // If we have a current token and this is a resource server or auth continue call,
244
+ // inject it as the Authorization header
245
+ if (state.currentToken && !request.headers['Authorization']) {
246
+ const [sourceName, operationName] = splitOperationId(step.operationId || '');
247
+ // Inject token for resource server calls and auth continuation calls
248
+ if (sourceName === 'resourceServer' ||
249
+ operationName === 'post-continue' ||
250
+ operationName === 'post-token' ||
251
+ operationName === 'delete-token' ||
252
+ operationName === 'delete-continue') {
253
+ request.headers['Authorization'] = `GNAP ${state.currentToken}`;
254
+ }
255
+ }
256
+ // Call beforeStep hook
257
+ if (options.hooks?.beforeStep) {
258
+ await options.hooks.beforeStep(step.stepId, request);
259
+ }
260
+ try {
261
+ // Execute HTTP request
262
+ const response = await httpClient.execute(request);
263
+ // Update context with current response for expression resolution
264
+ context.currentResponse = {
265
+ status: response.status,
266
+ headers: response.headers,
267
+ body: response.body,
268
+ };
269
+ context.currentRequest = {
270
+ url: request.url,
271
+ method: request.method,
272
+ };
273
+ // Evaluate success criteria
274
+ const success = evaluateSuccessCriteria(step, context);
275
+ // Resolve step outputs
276
+ const outputs = resolveStepOutputs(step, context);
277
+ return {
278
+ stepId: step.stepId,
279
+ request,
280
+ response,
281
+ outputs,
282
+ success,
283
+ duration: Date.now() - stepStart,
284
+ };
285
+ }
286
+ catch (error) {
287
+ if (options.hooks?.onStepError) {
288
+ await options.hooks.onStepError(step.stepId, error instanceof Error ? error : new Error(String(error)));
289
+ }
290
+ throw new WorkflowExecutionError(`HTTP request failed: ${error instanceof Error ? error.message : error}`, workflowId, step.stepId);
291
+ }
292
+ }
293
+ // ═══════════════════════════════════════════════════════════════════════════
294
+ // Request Building
295
+ // ═══════════════════════════════════════════════════════════════════════════
296
+ function buildRequest(step, workflowId, context, state) {
297
+ if (!step.operationId) {
298
+ throw new WorkflowExecutionError('Only operationId-based steps are currently supported', workflowId, step.stepId);
299
+ }
300
+ const [sourceName, operationName] = splitOperationId(step.operationId);
301
+ // Use dynamically resolved server URLs
302
+ const baseUrl = state.serverUrls[sourceName];
303
+ if (!baseUrl) {
304
+ throw new WorkflowExecutionError(`No server URL configured for source "${sourceName}". ` +
305
+ `Available: [${Object.keys(state.serverUrls).join(', ')}]`, workflowId, step.stepId);
306
+ }
307
+ // Build URL from operation name
308
+ const { url, method } = resolveOperationUrl(baseUrl, operationName, step, context);
309
+ // Build headers
310
+ const headers = {
311
+ 'Content-Type': 'application/json',
312
+ Accept: 'application/json',
313
+ };
314
+ // Apply parameter-based headers
315
+ if (step.parameters) {
316
+ for (const param of step.parameters) {
317
+ if (param.in === 'header') {
318
+ const value = resolveExpression(String(param.value), context);
319
+ headers[param.name] = String(value);
320
+ }
321
+ }
322
+ }
323
+ // Build request body
324
+ let body;
325
+ if (step.requestBody?.payload) {
326
+ body = resolveDeep(step.requestBody.payload, context);
327
+ // ─── Feature 2: Replace interact_ref placeholder ───
328
+ // If the body contains the placeholder string, replace it with the
329
+ // actual interact_ref from the previous step's outputs
330
+ body = replaceInteractRefPlaceholder(body, context);
331
+ }
332
+ return { url, method, headers, body };
333
+ }
334
+ /**
335
+ * Replace the `{interact_ref_from_redirect}` placeholder in request bodies
336
+ * with the actual interact_ref obtained from the interaction handler.
337
+ */
338
+ function replaceInteractRefPlaceholder(body, context) {
339
+ if (typeof body === 'string') {
340
+ if (body === '{interact_ref_from_redirect}') {
341
+ // Find the interact_ref from any previous step's outputs
342
+ for (const stepResult of Object.values(context.steps)) {
343
+ if (stepResult.outputs.interactRef) {
344
+ return stepResult.outputs.interactRef;
345
+ }
346
+ }
347
+ }
348
+ return body;
349
+ }
350
+ if (Array.isArray(body)) {
351
+ return body.map((item) => replaceInteractRefPlaceholder(item, context));
352
+ }
353
+ if (body !== null && typeof body === 'object') {
354
+ const replaced = {};
355
+ for (const [key, val] of Object.entries(body)) {
356
+ replaced[key] = replaceInteractRefPlaceholder(val, context);
357
+ }
358
+ return replaced;
359
+ }
360
+ return body;
361
+ }
362
+ /**
363
+ * Maps an Arazzo operationId to an HTTP method and URL path.
364
+ * Uses Open Payments naming conventions.
365
+ */
366
+ function resolveOperationUrl(baseUrl, operationName, step, context) {
367
+ // Operation name to HTTP method + path mapping
368
+ const operationMap = {
369
+ // Wallet Address
370
+ 'get-wallet-address': { method: 'GET', path: '/' },
371
+ // Incoming Payments
372
+ 'create-incoming-payment': { method: 'POST', path: '/incoming-payments' },
373
+ 'list-incoming-payments': { method: 'GET', path: '/incoming-payments' },
374
+ 'get-incoming-payment': { method: 'GET', path: '/incoming-payments/{id}' },
375
+ 'complete-incoming-payment': {
376
+ method: 'POST',
377
+ path: '/incoming-payments/{id}/complete',
378
+ },
379
+ // Outgoing Payments
380
+ 'create-outgoing-payment': { method: 'POST', path: '/outgoing-payments' },
381
+ 'list-outgoing-payments': { method: 'GET', path: '/outgoing-payments' },
382
+ 'get-outgoing-payment': {
383
+ method: 'GET',
384
+ path: '/outgoing-payments/{id}',
385
+ },
386
+ // Quotes
387
+ 'create-quote': { method: 'POST', path: '/quotes' },
388
+ 'get-quote': { method: 'GET', path: '/quotes/{id}' },
389
+ // Auth (GNAP)
390
+ 'post-request': { method: 'POST', path: '/' },
391
+ 'post-continue': { method: 'POST', path: '/continue/{id}' },
392
+ 'delete-continue': { method: 'DELETE', path: '/continue/{id}' },
393
+ 'post-token': { method: 'POST', path: '/token/{id}' },
394
+ 'delete-token': { method: 'DELETE', path: '/token/{id}' },
395
+ };
396
+ const mapping = operationMap[operationName];
397
+ if (!mapping) {
398
+ throw new Error(`Unknown operation "${operationName}". Add it to the operation map.`);
399
+ }
400
+ let path = mapping.path;
401
+ // Resolve path parameters
402
+ if (step.parameters) {
403
+ for (const param of step.parameters) {
404
+ if (param.in === 'path') {
405
+ const value = resolveExpression(String(param.value), context);
406
+ path = path.replace(`{${param.name}}`, encodeURIComponent(String(value)));
407
+ }
408
+ }
409
+ }
410
+ // Resolve query parameters
411
+ const queryParams = [];
412
+ if (step.parameters) {
413
+ for (const param of step.parameters) {
414
+ if (param.in === 'query') {
415
+ const value = resolveExpression(String(param.value), context);
416
+ if (value !== undefined && value !== null) {
417
+ queryParams.push(`${encodeURIComponent(param.name)}=${encodeURIComponent(String(value))}`);
418
+ }
419
+ }
420
+ }
421
+ }
422
+ const cleanBase = baseUrl.replace(/\/+$/, '');
423
+ const cleanPath = path === '/' ? '' : path;
424
+ let url = `${cleanBase}${cleanPath}`;
425
+ if (queryParams.length > 0) {
426
+ url += `?${queryParams.join('&')}`;
427
+ }
428
+ return { url, method: mapping.method };
429
+ }
430
+ // ═══════════════════════════════════════════════════════════════════════════
431
+ // Success Criteria Evaluation
432
+ // ═══════════════════════════════════════════════════════════════════════════
433
+ function evaluateSuccessCriteria(step, context) {
434
+ if (!step.successCriteria || step.successCriteria.length === 0) {
435
+ const status = context.currentResponse?.status ?? 0;
436
+ return status >= 200 && status < 300;
437
+ }
438
+ return step.successCriteria.every((criterion) => {
439
+ return evaluateCondition(criterion.condition, context);
440
+ });
441
+ }
442
+ function evaluateCondition(condition, context) {
443
+ const match = condition.match(/^(\$[.\w]+)\s*(==|!=|>=|<=|>|<)\s*(.+)$/);
444
+ if (!match) {
445
+ return true;
446
+ }
447
+ const [, leftExpr, operator, rightRaw] = match;
448
+ const leftValue = resolveExpression(leftExpr, context);
449
+ const rightValue = parseConditionValue(rightRaw.trim());
450
+ switch (operator) {
451
+ case '==':
452
+ return leftValue == rightValue;
453
+ case '!=':
454
+ return leftValue != rightValue;
455
+ case '>=':
456
+ return Number(leftValue) >= Number(rightValue);
457
+ case '<=':
458
+ return Number(leftValue) <= Number(rightValue);
459
+ case '>':
460
+ return Number(leftValue) > Number(rightValue);
461
+ case '<':
462
+ return Number(leftValue) < Number(rightValue);
463
+ default:
464
+ return true;
465
+ }
466
+ }
467
+ function parseConditionValue(raw) {
468
+ if (/^\d+$/.test(raw)) {
469
+ return Number(raw);
470
+ }
471
+ if (raw === 'true')
472
+ return true;
473
+ if (raw === 'false')
474
+ return false;
475
+ if (raw === 'null')
476
+ return null;
477
+ if ((raw.startsWith('"') && raw.endsWith('"')) ||
478
+ (raw.startsWith("'") && raw.endsWith("'"))) {
479
+ return raw.slice(1, -1);
480
+ }
481
+ return raw;
482
+ }
483
+ // ═══════════════════════════════════════════════════════════════════════════
484
+ // Output Resolution
485
+ // ═══════════════════════════════════════════════════════════════════════════
486
+ function resolveStepOutputs(step, context) {
487
+ if (!step.outputs) {
488
+ return {};
489
+ }
490
+ const outputs = {};
491
+ for (const [key, expression] of Object.entries(step.outputs)) {
492
+ outputs[key] = resolveExpression(expression, context);
493
+ }
494
+ return outputs;
495
+ }
496
+ function resolveWorkflowOutputs(workflow, context) {
497
+ if (!workflow.outputs) {
498
+ return {};
499
+ }
500
+ const outputs = {};
501
+ for (const [key, expression] of Object.entries(workflow.outputs)) {
502
+ outputs[key] = resolveExpression(expression, context);
503
+ }
504
+ return outputs;
505
+ }
506
+ //# sourceMappingURL=workflow-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/runtime/workflow-executor.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@flarcos/arazzo-sdk",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Parse Arazzo 1.0.1 workflow specifications and generate typed TypeScript SDKs for Open Payments API workflows",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "arazzo-sdk": "dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "CHANGELOG.md"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest",
20
+ "generate": "node dist/cli.js generate --input ../arazzo/*.arazzo.yaml --output src/generated/",
21
+ "validate": "node dist/cli.js validate --input ../arazzo/*.arazzo.yaml",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "arazzo",
26
+ "openapi",
27
+ "open-payments",
28
+ "interledger",
29
+ "gnap",
30
+ "sdk-generator",
31
+ "workflow",
32
+ "codegen"
33
+ ],
34
+ "author": "flarcos",
35
+ "license": "Apache-2.0",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/flarcos/interledger"
39
+ },
40
+ "homepage": "https://github.com/flarcos/interledger/tree/main/arazzo-sdk",
41
+ "bugs": {
42
+ "url": "https://github.com/flarcos/interledger/issues"
43
+ },
44
+ "dependencies": {
45
+ "@flarcos/kiota-authentication-gnap": "^0.1.0",
46
+ "yaml": "^2.6.0",
47
+ "glob": "^11.0.0"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "typescript": "^5.5.0",
52
+ "vitest": "^4.1.2"
53
+ },
54
+ "engines": {
55
+ "node": ">=18.0.0"
56
+ }
57
+ }