ai-workflows 2.1.3 → 2.4.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 (188) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +14 -1
  3. package/README.md +2 -0
  4. package/dist/barrier.d.ts +6 -0
  5. package/dist/barrier.d.ts.map +1 -1
  6. package/dist/barrier.js +45 -7
  7. package/dist/barrier.js.map +1 -1
  8. package/dist/cascade-context.d.ts.map +1 -1
  9. package/dist/cascade-context.js +25 -25
  10. package/dist/cascade-context.js.map +1 -1
  11. package/dist/cascade-executor.d.ts.map +1 -1
  12. package/dist/cascade-executor.js +1 -1
  13. package/dist/cascade-executor.js.map +1 -1
  14. package/dist/context.d.ts.map +1 -1
  15. package/dist/context.js +23 -7
  16. package/dist/context.js.map +1 -1
  17. package/dist/cron-parser.d.ts +65 -0
  18. package/dist/cron-parser.d.ts.map +1 -0
  19. package/dist/cron-parser.js +294 -0
  20. package/dist/cron-parser.js.map +1 -0
  21. package/dist/cron-scheduler.d.ts +117 -0
  22. package/dist/cron-scheduler.d.ts.map +1 -0
  23. package/dist/cron-scheduler.js +176 -0
  24. package/dist/cron-scheduler.js.map +1 -0
  25. package/dist/database-context.d.ts +184 -0
  26. package/dist/database-context.d.ts.map +1 -0
  27. package/dist/database-context.js +428 -0
  28. package/dist/database-context.js.map +1 -0
  29. package/dist/digital-objects-adapter.d.ts +159 -0
  30. package/dist/digital-objects-adapter.d.ts.map +1 -0
  31. package/dist/digital-objects-adapter.js +229 -0
  32. package/dist/digital-objects-adapter.js.map +1 -0
  33. package/dist/durable-execution-cloudflare.d.ts +427 -0
  34. package/dist/durable-execution-cloudflare.d.ts.map +1 -0
  35. package/dist/durable-execution-cloudflare.js +510 -0
  36. package/dist/durable-execution-cloudflare.js.map +1 -0
  37. package/dist/durable-execution.d.ts +482 -0
  38. package/dist/durable-execution.d.ts.map +1 -0
  39. package/dist/durable-execution.js +594 -0
  40. package/dist/durable-execution.js.map +1 -0
  41. package/dist/durable-workflow.d.ts +176 -0
  42. package/dist/durable-workflow.d.ts.map +1 -0
  43. package/dist/durable-workflow.js +552 -0
  44. package/dist/durable-workflow.js.map +1 -0
  45. package/dist/graph/topological-sort.d.ts.map +1 -1
  46. package/dist/graph/topological-sort.js +5 -5
  47. package/dist/graph/topological-sort.js.map +1 -1
  48. package/dist/index.d.ts +4 -0
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +15 -0
  51. package/dist/index.js.map +1 -1
  52. package/dist/logger.d.ts +101 -0
  53. package/dist/logger.d.ts.map +1 -0
  54. package/dist/logger.js +115 -0
  55. package/dist/logger.js.map +1 -0
  56. package/dist/on.d.ts.map +1 -1
  57. package/dist/on.js +3 -3
  58. package/dist/on.js.map +1 -1
  59. package/dist/runtime.d.ts +169 -0
  60. package/dist/runtime.d.ts.map +1 -0
  61. package/dist/runtime.js +275 -0
  62. package/dist/runtime.js.map +1 -0
  63. package/dist/send.d.ts.map +1 -1
  64. package/dist/send.js +4 -3
  65. package/dist/send.js.map +1 -1
  66. package/dist/telemetry.d.ts +150 -0
  67. package/dist/telemetry.d.ts.map +1 -0
  68. package/dist/telemetry.js +388 -0
  69. package/dist/telemetry.js.map +1 -0
  70. package/dist/timer-registry.d.ts +25 -0
  71. package/dist/timer-registry.d.ts.map +1 -1
  72. package/dist/timer-registry.js +42 -8
  73. package/dist/timer-registry.js.map +1 -1
  74. package/dist/types.d.ts +17 -6
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js +1 -1
  77. package/dist/types.js.map +1 -1
  78. package/dist/worker/durable-step.d.ts +481 -0
  79. package/dist/worker/durable-step.d.ts.map +1 -0
  80. package/dist/worker/durable-step.js +606 -0
  81. package/dist/worker/durable-step.js.map +1 -0
  82. package/dist/worker/index.d.ts +106 -0
  83. package/dist/worker/index.d.ts.map +1 -0
  84. package/dist/worker/index.js +124 -0
  85. package/dist/worker/index.js.map +1 -0
  86. package/dist/worker/state-adapter.d.ts +230 -0
  87. package/dist/worker/state-adapter.d.ts.map +1 -0
  88. package/dist/worker/state-adapter.js +409 -0
  89. package/dist/worker/state-adapter.js.map +1 -0
  90. package/dist/worker/topological-executor.d.ts +282 -0
  91. package/dist/worker/topological-executor.d.ts.map +1 -0
  92. package/dist/worker/topological-executor.js +396 -0
  93. package/dist/worker/topological-executor.js.map +1 -0
  94. package/dist/worker/workflow-builder.d.ts +286 -0
  95. package/dist/worker/workflow-builder.d.ts.map +1 -0
  96. package/dist/worker/workflow-builder.js +565 -0
  97. package/dist/worker/workflow-builder.js.map +1 -0
  98. package/dist/worker.d.ts +800 -0
  99. package/dist/worker.d.ts.map +1 -0
  100. package/dist/worker.js +2428 -0
  101. package/dist/worker.js.map +1 -0
  102. package/dist/workflow-builder.d.ts +287 -0
  103. package/dist/workflow-builder.d.ts.map +1 -0
  104. package/dist/workflow-builder.js +762 -0
  105. package/dist/workflow-builder.js.map +1 -0
  106. package/dist/workflow.d.ts +14 -30
  107. package/dist/workflow.d.ts.map +1 -1
  108. package/dist/workflow.js +132 -292
  109. package/dist/workflow.js.map +1 -1
  110. package/examples/01-ecommerce-order-pipeline.ts +358 -0
  111. package/examples/02-content-moderation-cascade.ts +454 -0
  112. package/examples/03-scheduled-reporting-dependencies.ts +479 -0
  113. package/examples/04-database-persistence.ts +518 -0
  114. package/examples/README.md +173 -0
  115. package/package.json +30 -13
  116. package/src/__tests__/digital-objects-adapter.test.ts +274 -0
  117. package/src/__tests__/durable-workflow.test.ts +297 -0
  118. package/src/barrier.ts +48 -7
  119. package/src/cascade-context.ts +36 -29
  120. package/src/cascade-executor.ts +3 -2
  121. package/src/context.ts +41 -12
  122. package/src/cron-parser.ts +347 -0
  123. package/src/cron-scheduler.ts +239 -0
  124. package/src/database-context.ts +658 -0
  125. package/src/digital-objects-adapter.ts +351 -0
  126. package/src/durable-execution-cloudflare.ts +855 -0
  127. package/src/durable-execution.ts +1042 -0
  128. package/src/durable-workflow.ts +717 -0
  129. package/src/graph/topological-sort.ts +6 -8
  130. package/src/index.ts +69 -0
  131. package/src/logger.ts +148 -0
  132. package/src/on.ts +8 -9
  133. package/src/runtime.ts +436 -0
  134. package/src/send.ts +4 -5
  135. package/src/telemetry.ts +577 -0
  136. package/src/timer-registry.ts +44 -10
  137. package/src/types.ts +32 -17
  138. package/src/worker/durable-step.ts +976 -0
  139. package/src/worker/index.ts +216 -0
  140. package/src/worker/state-adapter.ts +589 -0
  141. package/src/worker/topological-executor.ts +625 -0
  142. package/src/worker/workflow-builder.ts +871 -0
  143. package/src/worker.ts +2906 -0
  144. package/src/workflow-builder.ts +1068 -0
  145. package/src/workflow.ts +188 -351
  146. package/test/barrier-join.test.ts +32 -24
  147. package/test/cascade-executor.test.ts +9 -16
  148. package/test/cron-parser.test.ts +314 -0
  149. package/test/cron-scheduler.test.ts +291 -0
  150. package/test/database-context.test.ts +770 -0
  151. package/test/db-provider-adapter.test.ts +862 -0
  152. package/test/durable-execution-cloudflare.test.ts +606 -0
  153. package/test/durable-execution-in-process.test.ts +286 -0
  154. package/test/durable-execution.test.ts +247 -0
  155. package/test/e2e/workflow-scenarios.e2e.test.ts +1039 -0
  156. package/test/integration.test.ts +442 -0
  157. package/test/rpc-surface.test.ts +946 -0
  158. package/test/runtime.test.ts +262 -0
  159. package/test/schedule-timer-cleanup.test.ts +30 -21
  160. package/test/send-race-conditions.test.ts +30 -40
  161. package/test/worker/durable-cascade.test.ts +1117 -0
  162. package/test/worker/durable-step.test.ts +723 -0
  163. package/test/worker/topological-executor.test.ts +1240 -0
  164. package/test/worker/workflow-builder.test.ts +1067 -0
  165. package/test/worker.test.ts +608 -0
  166. package/test/workflow-builder.test.ts +1670 -0
  167. package/test/workflow-cron.test.ts +256 -0
  168. package/test/workflow-state-adapter.test.ts +923 -0
  169. package/test/workflow.test.ts +25 -22
  170. package/tsconfig.json +3 -1
  171. package/vitest.config.ts +38 -1
  172. package/vitest.workers.config.ts +44 -0
  173. package/wrangler.jsonc +22 -0
  174. package/.turbo/turbo-test.log +0 -169
  175. package/LICENSE +0 -21
  176. package/src/context.js +0 -83
  177. package/src/every.js +0 -267
  178. package/src/index.js +0 -71
  179. package/src/on.js +0 -79
  180. package/src/send.js +0 -111
  181. package/src/types.js +0 -4
  182. package/src/workflow.js +0 -455
  183. package/test/context.test.js +0 -116
  184. package/test/every.test.js +0 -282
  185. package/test/on.test.js +0 -80
  186. package/test/send.test.js +0 -89
  187. package/test/workflow.test.js +0 -224
  188. package/vitest.config.js +0 -7
@@ -0,0 +1,159 @@
1
+ /**
2
+ * digital-objects adapter for ai-workflows
3
+ *
4
+ * Provides durable persistence for workflow state using digital-objects.
5
+ * Maps workflow concepts to digital-objects primitives:
6
+ * - Workflows -> Things
7
+ * - Workflow steps/events -> Actions
8
+ * - State changes -> Actions with data
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createMemoryProvider } from 'digital-objects'
13
+ * import { createDigitalObjectsAdapter } from 'ai-workflows'
14
+ *
15
+ * const provider = createMemoryProvider()
16
+ * const db = createDigitalObjectsAdapter(provider)
17
+ *
18
+ * const workflow = Workflow($ => {
19
+ * $.on.Customer.created(async (customer, $) => {
20
+ * await $.send('Email.welcome', { to: customer.email })
21
+ * })
22
+ * }, { db })
23
+ * ```
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ import type { DigitalObjectsProvider, Thing, Action, ActionStatusType } from 'digital-objects';
28
+ import type { DatabaseContext, ArtifactData } from './types.js';
29
+ /**
30
+ * Workflow instance data stored as a Thing
31
+ */
32
+ export interface WorkflowThingData {
33
+ name: string;
34
+ status: 'initializing' | 'running' | 'paused' | 'completed' | 'failed';
35
+ context: Record<string, unknown>;
36
+ registeredEvents: string[];
37
+ registeredSchedules: string[];
38
+ }
39
+ /**
40
+ * Event data stored in Actions
41
+ */
42
+ export interface EventActionData {
43
+ event: string;
44
+ data: unknown;
45
+ eventId: string;
46
+ }
47
+ /**
48
+ * Step/action data stored in Actions
49
+ */
50
+ export interface StepActionData {
51
+ stepName: string;
52
+ status: ActionStatusType;
53
+ tier?: 'code' | 'generative' | 'agentic' | 'human';
54
+ input?: unknown;
55
+ output?: unknown;
56
+ error?: string;
57
+ metadata?: Record<string, unknown>;
58
+ }
59
+ /**
60
+ * Artifact data stored as a Thing
61
+ */
62
+ export interface ArtifactThingData extends ArtifactData {
63
+ workflowId?: string;
64
+ }
65
+ /**
66
+ * Options for creating the digital-objects adapter
67
+ */
68
+ export interface DigitalObjectsAdapterOptions {
69
+ /**
70
+ * Workflow instance ID for tracking actions
71
+ * If provided, all actions will be associated with this workflow
72
+ */
73
+ workflowId?: string;
74
+ /**
75
+ * Whether to auto-define required nouns and verbs
76
+ * @default true
77
+ */
78
+ autoDefine?: boolean;
79
+ }
80
+ /**
81
+ * Extended DatabaseContext with digital-objects specific methods
82
+ */
83
+ export interface DigitalObjectsDatabaseContext extends DatabaseContext {
84
+ /**
85
+ * The underlying digital-objects provider
86
+ */
87
+ readonly provider: DigitalObjectsProvider;
88
+ /**
89
+ * The workflow instance ID (if set)
90
+ */
91
+ readonly workflowId?: string;
92
+ /**
93
+ * Get workflow state as a Thing
94
+ */
95
+ getWorkflow<T = WorkflowThingData>(id: string): Promise<Thing<T> | null>;
96
+ /**
97
+ * Update workflow state
98
+ */
99
+ updateWorkflow<T = WorkflowThingData>(id: string, data: Partial<T>): Promise<Thing<T>>;
100
+ /**
101
+ * List all actions for a workflow
102
+ */
103
+ listWorkflowActions<T = unknown>(workflowId: string): Promise<Action<T>[]>;
104
+ /**
105
+ * Query actions by verb
106
+ */
107
+ listActionsByVerb<T = unknown>(verb: string): Promise<Action<T>[]>;
108
+ }
109
+ /**
110
+ * Create a DatabaseContext adapter backed by digital-objects
111
+ *
112
+ * @param provider - The digital-objects provider (MemoryProvider, NS, etc.)
113
+ * @param options - Optional configuration
114
+ * @returns A DatabaseContext compatible with ai-workflows
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { createMemoryProvider } from 'digital-objects'
119
+ * import { createDigitalObjectsAdapter, Workflow } from 'ai-workflows'
120
+ *
121
+ * const provider = createMemoryProvider()
122
+ * const db = await createDigitalObjectsAdapter(provider)
123
+ *
124
+ * // Use with Workflow
125
+ * const workflow = Workflow($ => {
126
+ * $.on.Order.created(async (order, $) => {
127
+ * $.log('Order created:', order.id)
128
+ * })
129
+ * }, { db })
130
+ * ```
131
+ */
132
+ export declare function createDigitalObjectsAdapter(provider: DigitalObjectsProvider, options?: DigitalObjectsAdapterOptions): Promise<DigitalObjectsDatabaseContext>;
133
+ /**
134
+ * Synchronous factory that returns a partially initialized adapter.
135
+ * Use this when you need synchronous construction but can defer initialization.
136
+ *
137
+ * @param provider - The digital-objects provider
138
+ * @param options - Optional configuration
139
+ * @returns A function that initializes and returns the adapter
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const initAdapter = createDigitalObjectsAdapterSync(provider)
144
+ *
145
+ * // Later, when async is available
146
+ * const db = await initAdapter()
147
+ * ```
148
+ */
149
+ export declare function createDigitalObjectsAdapterSync(provider: DigitalObjectsProvider, options?: DigitalObjectsAdapterOptions): () => Promise<DigitalObjectsDatabaseContext>;
150
+ /**
151
+ * Create a simple DatabaseContext without the extended digital-objects methods.
152
+ * This is useful when you only need the basic DatabaseContext interface.
153
+ *
154
+ * @param provider - The digital-objects provider
155
+ * @param options - Optional configuration
156
+ * @returns A basic DatabaseContext
157
+ */
158
+ export declare function createSimpleAdapter(provider: DigitalObjectsProvider, options?: DigitalObjectsAdapterOptions): Promise<DatabaseContext>;
159
+ //# sourceMappingURL=digital-objects-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digital-objects-adapter.d.ts","sourceRoot":"","sources":["../src/digital-objects-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * digital-objects adapter for ai-workflows
3
+ *
4
+ * Provides durable persistence for workflow state using digital-objects.
5
+ * Maps workflow concepts to digital-objects primitives:
6
+ * - Workflows -> Things
7
+ * - Workflow steps/events -> Actions
8
+ * - State changes -> Actions with data
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createMemoryProvider } from 'digital-objects'
13
+ * import { createDigitalObjectsAdapter } from 'ai-workflows'
14
+ *
15
+ * const provider = createMemoryProvider()
16
+ * const db = createDigitalObjectsAdapter(provider)
17
+ *
18
+ * const workflow = Workflow($ => {
19
+ * $.on.Customer.created(async (customer, $) => {
20
+ * await $.send('Email.welcome', { to: customer.email })
21
+ * })
22
+ * }, { db })
23
+ * ```
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ /**
28
+ * Define workflow-specific nouns in the provider
29
+ */
30
+ async function defineWorkflowNouns(provider) {
31
+ // Check if already defined
32
+ const existing = await provider.getNoun('Workflow');
33
+ if (existing)
34
+ return;
35
+ await Promise.all([
36
+ provider.defineNoun({
37
+ name: 'Workflow',
38
+ description: 'Workflow instance with state and event handlers',
39
+ }),
40
+ provider.defineNoun({
41
+ name: 'Artifact',
42
+ description: 'Cached workflow artifact (AST, compiled code, etc.)',
43
+ }),
44
+ provider.defineNoun({
45
+ name: 'Schedule',
46
+ description: 'Scheduled task registration',
47
+ }),
48
+ provider.defineNoun({
49
+ name: 'Cascade',
50
+ description: 'Cascade execution context for tiered processing',
51
+ }),
52
+ ]);
53
+ }
54
+ /**
55
+ * Define workflow-specific verbs in the provider
56
+ */
57
+ async function defineWorkflowVerbs(provider) {
58
+ // Check if already defined
59
+ const existing = await provider.getVerb('emit');
60
+ if (existing)
61
+ return;
62
+ await Promise.all([
63
+ provider.defineVerb({
64
+ name: 'emit',
65
+ description: 'Emit an event',
66
+ }),
67
+ provider.defineVerb({
68
+ name: 'track',
69
+ description: 'Track a telemetry event (fire and forget)',
70
+ }),
71
+ provider.defineVerb({
72
+ name: 'execute',
73
+ description: 'Execute a workflow step',
74
+ }),
75
+ provider.defineVerb({
76
+ name: 'complete',
77
+ description: 'Mark an action as completed',
78
+ }),
79
+ provider.defineVerb({
80
+ name: 'fail',
81
+ description: 'Mark an action as failed',
82
+ }),
83
+ provider.defineVerb({
84
+ name: 'set',
85
+ description: 'Set a context value',
86
+ }),
87
+ provider.defineVerb({
88
+ name: 'step',
89
+ description: 'Record a cascade step',
90
+ }),
91
+ provider.defineVerb({
92
+ name: 'dependsOn',
93
+ description: 'Declare step dependency',
94
+ }),
95
+ provider.defineVerb({
96
+ name: 'escalate',
97
+ description: 'Escalate to next tier in cascade',
98
+ }),
99
+ provider.defineVerb({
100
+ name: 'transition',
101
+ description: 'Workflow state transition',
102
+ }),
103
+ ]);
104
+ }
105
+ /**
106
+ * Create a DatabaseContext adapter backed by digital-objects
107
+ *
108
+ * @param provider - The digital-objects provider (MemoryProvider, NS, etc.)
109
+ * @param options - Optional configuration
110
+ * @returns A DatabaseContext compatible with ai-workflows
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * import { createMemoryProvider } from 'digital-objects'
115
+ * import { createDigitalObjectsAdapter, Workflow } from 'ai-workflows'
116
+ *
117
+ * const provider = createMemoryProvider()
118
+ * const db = await createDigitalObjectsAdapter(provider)
119
+ *
120
+ * // Use with Workflow
121
+ * const workflow = Workflow($ => {
122
+ * $.on.Order.created(async (order, $) => {
123
+ * $.log('Order created:', order.id)
124
+ * })
125
+ * }, { db })
126
+ * ```
127
+ */
128
+ export async function createDigitalObjectsAdapter(provider, options = {}) {
129
+ const { workflowId, autoDefine = true } = options;
130
+ // Auto-define nouns and verbs if enabled
131
+ if (autoDefine) {
132
+ await defineWorkflowNouns(provider);
133
+ await defineWorkflowVerbs(provider);
134
+ }
135
+ const result = {
136
+ provider,
137
+ ...(workflowId !== undefined && { workflowId }),
138
+ async recordEvent(event, data) {
139
+ const eventId = crypto.randomUUID();
140
+ await provider.perform('emit', workflowId, undefined, {
141
+ event,
142
+ data,
143
+ eventId,
144
+ });
145
+ },
146
+ async createAction(action) {
147
+ const stepData = {
148
+ stepName: `${action.actor}.${action.action}.${action.object}`,
149
+ status: action.status ?? 'pending',
150
+ };
151
+ if (action.metadata) {
152
+ stepData.metadata = action.metadata;
153
+ }
154
+ await provider.perform(action.action, action.actor, action.object, stepData);
155
+ },
156
+ async completeAction(id, result) {
157
+ // Record completion as an action pointing to the original action
158
+ await provider.perform('complete', undefined, id, {
159
+ result,
160
+ completedAt: Date.now(),
161
+ });
162
+ },
163
+ async storeArtifact(artifact) {
164
+ const artifactData = {
165
+ ...artifact,
166
+ ...(workflowId && { workflowId }),
167
+ };
168
+ // Use artifact.key as the ID for easy retrieval
169
+ await provider.create('Artifact', artifactData, artifact.key);
170
+ },
171
+ async getArtifact(key) {
172
+ const thing = await provider.get(key);
173
+ return thing?.data?.content ?? null;
174
+ },
175
+ // Extended methods for digital-objects integration
176
+ async getWorkflow(id) {
177
+ return provider.get(id);
178
+ },
179
+ async updateWorkflow(id, data) {
180
+ return provider.update(id, data);
181
+ },
182
+ async listWorkflowActions(wfId) {
183
+ return provider.listActions({ subject: wfId });
184
+ },
185
+ async listActionsByVerb(verb) {
186
+ return provider.listActions({ verb });
187
+ },
188
+ };
189
+ return result;
190
+ }
191
+ /**
192
+ * Synchronous factory that returns a partially initialized adapter.
193
+ * Use this when you need synchronous construction but can defer initialization.
194
+ *
195
+ * @param provider - The digital-objects provider
196
+ * @param options - Optional configuration
197
+ * @returns A function that initializes and returns the adapter
198
+ *
199
+ * @example
200
+ * ```typescript
201
+ * const initAdapter = createDigitalObjectsAdapterSync(provider)
202
+ *
203
+ * // Later, when async is available
204
+ * const db = await initAdapter()
205
+ * ```
206
+ */
207
+ export function createDigitalObjectsAdapterSync(provider, options = {}) {
208
+ return () => createDigitalObjectsAdapter(provider, options);
209
+ }
210
+ /**
211
+ * Create a simple DatabaseContext without the extended digital-objects methods.
212
+ * This is useful when you only need the basic DatabaseContext interface.
213
+ *
214
+ * @param provider - The digital-objects provider
215
+ * @param options - Optional configuration
216
+ * @returns A basic DatabaseContext
217
+ */
218
+ export async function createSimpleAdapter(provider, options = {}) {
219
+ const fullAdapter = await createDigitalObjectsAdapter(provider, options);
220
+ // Return only the DatabaseContext interface
221
+ return {
222
+ recordEvent: fullAdapter.recordEvent.bind(fullAdapter),
223
+ createAction: fullAdapter.createAction.bind(fullAdapter),
224
+ completeAction: fullAdapter.completeAction.bind(fullAdapter),
225
+ storeArtifact: fullAdapter.storeArtifact.bind(fullAdapter),
226
+ getArtifact: fullAdapter.getArtifact.bind(fullAdapter),
227
+ };
228
+ }
229
+ //# sourceMappingURL=digital-objects-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digital-objects-adapter.js","sourceRoot":"","sources":["../src/digital-objects-adapter.ts"],"names":[],"mappings":"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"}