@dxos/functions 0.5.3-main.bbd33a9 → 0.5.3-main.bfb5bca

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 (37) hide show
  1. package/dist/lib/browser/{chunk-P3HPDHNI.mjs → chunk-4D4I3YMJ.mjs} +4 -4
  2. package/dist/lib/browser/{chunk-P3HPDHNI.mjs.map → chunk-4D4I3YMJ.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +145 -108
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/types.mjs +1 -1
  7. package/dist/lib/node/{chunk-KTLM3JNV.cjs → chunk-3UYUR5N5.cjs} +7 -7
  8. package/dist/lib/node/{chunk-KTLM3JNV.cjs.map → chunk-3UYUR5N5.cjs.map} +3 -3
  9. package/dist/lib/node/index.cjs +156 -119
  10. package/dist/lib/node/index.cjs.map +3 -3
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/types.cjs +5 -5
  13. package/dist/lib/node/types.cjs.map +1 -1
  14. package/dist/types/src/runtime/dev-server.d.ts.map +1 -1
  15. package/dist/types/src/testing/setup.d.ts.map +1 -1
  16. package/dist/types/src/trigger/trigger-registry.d.ts +2 -5
  17. package/dist/types/src/trigger/trigger-registry.d.ts.map +1 -1
  18. package/dist/types/src/trigger/type/subscription-trigger.d.ts.map +1 -1
  19. package/dist/types/src/trigger/type/timer-trigger.d.ts.map +1 -1
  20. package/dist/types/src/trigger/type/webhook-trigger.d.ts.map +1 -1
  21. package/dist/types/src/trigger/type/websocket-trigger.d.ts.map +1 -1
  22. package/dist/types/src/types.d.ts +15 -3
  23. package/dist/types/src/types.d.ts.map +1 -1
  24. package/package.json +14 -14
  25. package/schema/functions.json +5 -0
  26. package/src/runtime/dev-server.ts +3 -3
  27. package/src/runtime/scheduler.test.ts +14 -9
  28. package/src/runtime/scheduler.ts +7 -7
  29. package/src/testing/functions-integration.test.ts +1 -0
  30. package/src/testing/setup.ts +8 -10
  31. package/src/trigger/trigger-registry.test.ts +30 -13
  32. package/src/trigger/trigger-registry.ts +49 -39
  33. package/src/trigger/type/subscription-trigger.ts +13 -7
  34. package/src/trigger/type/timer-trigger.ts +4 -3
  35. package/src/trigger/type/webhook-trigger.ts +3 -2
  36. package/src/trigger/type/websocket-trigger.ts +4 -3
  37. package/src/types.ts +6 -3
@@ -29,17 +29,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
31
  DevServer: () => DevServer,
32
- FUNCTION_SCHEMA: () => import_chunk_KTLM3JNV.FUNCTION_SCHEMA,
33
- FunctionDef: () => import_chunk_KTLM3JNV.FunctionDef,
34
- FunctionManifestSchema: () => import_chunk_KTLM3JNV.FunctionManifestSchema,
32
+ FUNCTION_SCHEMA: () => import_chunk_3UYUR5N5.FUNCTION_SCHEMA,
33
+ FunctionDef: () => import_chunk_3UYUR5N5.FunctionDef,
34
+ FunctionManifestSchema: () => import_chunk_3UYUR5N5.FunctionManifestSchema,
35
35
  FunctionRegistry: () => FunctionRegistry,
36
- FunctionTrigger: () => import_chunk_KTLM3JNV.FunctionTrigger,
36
+ FunctionTrigger: () => import_chunk_3UYUR5N5.FunctionTrigger,
37
37
  Scheduler: () => Scheduler,
38
38
  TriggerRegistry: () => TriggerRegistry,
39
39
  subscriptionHandler: () => subscriptionHandler
40
40
  });
41
41
  module.exports = __toCommonJS(node_exports);
42
- var import_chunk_KTLM3JNV = require("./chunk-KTLM3JNV.cjs");
42
+ var import_chunk_3UYUR5N5 = require("./chunk-3UYUR5N5.cjs");
43
43
  var import_async = require("@dxos/async");
44
44
  var import_echo = require("@dxos/client/echo");
45
45
  var import_context = require("@dxos/context");
@@ -70,6 +70,7 @@ var import_log5 = require("@dxos/log");
70
70
  var import_util3 = require("@dxos/util");
71
71
  var import_types = require("@braneframe/types");
72
72
  var import_async5 = require("@dxos/async");
73
+ var import_echo3 = require("@dxos/client/echo");
73
74
  var import_echo_db = require("@dxos/echo-db");
74
75
  var import_log6 = require("@dxos/log");
75
76
  var import_cron = require("cron");
@@ -109,12 +110,12 @@ var FunctionRegistry = class extends import_context.Resource {
109
110
  if (!functions?.length) {
110
111
  return;
111
112
  }
112
- if (!space.db.graph.runtimeSchemaRegistry.hasSchema(import_chunk_KTLM3JNV.FunctionDef)) {
113
- space.db.graph.runtimeSchemaRegistry.registerSchema(import_chunk_KTLM3JNV.FunctionDef);
113
+ if (!space.db.graph.runtimeSchemaRegistry.hasSchema(import_chunk_3UYUR5N5.FunctionDef)) {
114
+ space.db.graph.runtimeSchemaRegistry.registerSchema(import_chunk_3UYUR5N5.FunctionDef);
114
115
  }
115
- const { objects: existing } = await space.db.query(import_echo.Filter.schema(import_chunk_KTLM3JNV.FunctionDef)).run();
116
+ const { objects: existing } = await space.db.query(import_echo.Filter.schema(import_chunk_3UYUR5N5.FunctionDef)).run();
116
117
  const { added } = (0, import_util.diff)(existing, functions, (a, b) => a.uri === b.uri);
117
- added.forEach((def) => space.db.add((0, import_echo.create)(import_chunk_KTLM3JNV.FunctionDef, def)));
118
+ added.forEach((def) => space.db.add((0, import_echo.create)(import_chunk_3UYUR5N5.FunctionDef, def)));
118
119
  }
119
120
  async _open() {
120
121
  import_log.log.info("opening...", void 0, {
@@ -134,7 +135,7 @@ var FunctionRegistry = class extends import_context.Resource {
134
135
  if (this._ctx.disposed) {
135
136
  break;
136
137
  }
137
- this._ctx.onDispose(space.db.query(import_echo.Filter.schema(import_chunk_KTLM3JNV.FunctionDef)).subscribe(({ objects }) => {
138
+ this._ctx.onDispose(space.db.query(import_echo.Filter.schema(import_chunk_3UYUR5N5.FunctionDef)).subscribe(({ objects }) => {
138
139
  const { added } = (0, import_util.diff)(registered, objects, (a, b) => a.uri === b.uri);
139
140
  if (added.length > 0) {
140
141
  registered.push(...added);
@@ -214,7 +215,7 @@ var DevServer = class {
214
215
  added
215
216
  }, {
216
217
  F: __dxlog_file3,
217
- L: 52,
218
+ L: 53,
218
219
  S: this,
219
220
  C: (f, a) => f(...a)
220
221
  });
@@ -228,7 +229,7 @@ var DevServer = class {
228
229
  get endpoint() {
229
230
  (0, import_invariant.invariant)(this._port, void 0, {
230
231
  F: __dxlog_file3,
231
- L: 63,
232
+ L: 64,
232
233
  S: this,
233
234
  A: [
234
235
  "this._port",
@@ -246,7 +247,7 @@ var DevServer = class {
246
247
  async start() {
247
248
  (0, import_invariant.invariant)(!this._server, void 0, {
248
249
  F: __dxlog_file3,
249
- L: 76,
250
+ L: 77,
250
251
  S: this,
251
252
  A: [
252
253
  "!this._server",
@@ -255,7 +256,7 @@ var DevServer = class {
255
256
  });
256
257
  import_log3.log.info("starting...", void 0, {
257
258
  F: __dxlog_file3,
258
- L: 77,
259
+ L: 78,
259
260
  S: this,
260
261
  C: (f, a) => f(...a)
261
262
  });
@@ -269,7 +270,7 @@ var DevServer = class {
269
270
  path: path2
270
271
  }, {
271
272
  F: __dxlog_file3,
272
- L: 87,
273
+ L: 88,
273
274
  S: this,
274
275
  C: (f, a) => f(...a)
275
276
  });
@@ -282,7 +283,7 @@ var DevServer = class {
282
283
  } catch (err) {
283
284
  import_log3.log.catch(err, void 0, {
284
285
  F: __dxlog_file3,
285
- L: 97,
286
+ L: 98,
286
287
  S: this,
287
288
  C: (f, a) => f(...a)
288
289
  });
@@ -307,7 +308,7 @@ var DevServer = class {
307
308
  endpoint
308
309
  }, {
309
310
  F: __dxlog_file3,
310
- L: 112,
311
+ L: 113,
311
312
  S: this,
312
313
  C: (f, a) => f(...a)
313
314
  });
@@ -322,7 +323,7 @@ var DevServer = class {
322
323
  port: this._port
323
324
  }, {
324
325
  F: __dxlog_file3,
325
- L: 123,
326
+ L: 124,
326
327
  S: this,
327
328
  C: (f, a) => f(...a)
328
329
  });
@@ -330,7 +331,7 @@ var DevServer = class {
330
331
  async stop() {
331
332
  (0, import_invariant.invariant)(this._server, void 0, {
332
333
  F: __dxlog_file3,
333
- L: 127,
334
+ L: 128,
334
335
  S: this,
335
336
  A: [
336
337
  "this._server",
@@ -339,7 +340,7 @@ var DevServer = class {
339
340
  });
340
341
  import_log3.log.info("stopping...", void 0, {
341
342
  F: __dxlog_file3,
342
- L: 128,
343
+ L: 129,
343
344
  S: this,
344
345
  C: (f, a) => f(...a)
345
346
  });
@@ -347,7 +348,7 @@ var DevServer = class {
347
348
  this._server.close(async () => {
348
349
  import_log3.log.info("server stopped", void 0, {
349
350
  F: __dxlog_file3,
350
- L: 132,
351
+ L: 133,
351
352
  S: this,
352
353
  C: (f, a) => f(...a)
353
354
  });
@@ -355,7 +356,7 @@ var DevServer = class {
355
356
  if (this._functionServiceRegistration) {
356
357
  (0, import_invariant.invariant)(this._client.services.services.FunctionRegistryService, void 0, {
357
358
  F: __dxlog_file3,
358
- L: 135,
359
+ L: 136,
359
360
  S: this,
360
361
  A: [
361
362
  "this._client.services.services.FunctionRegistryService",
@@ -369,7 +370,7 @@ var DevServer = class {
369
370
  registrationId: this._functionServiceRegistration
370
371
  }, {
371
372
  F: __dxlog_file3,
372
- L: 140,
373
+ L: 141,
373
374
  S: this,
374
375
  C: (f, a) => f(...a)
375
376
  });
@@ -386,7 +387,7 @@ var DevServer = class {
386
387
  this._server = void 0;
387
388
  import_log3.log.info("stopped", void 0, {
388
389
  F: __dxlog_file3,
389
- L: 154,
390
+ L: 155,
390
391
  S: this,
391
392
  C: (f, a) => f(...a)
392
393
  });
@@ -402,16 +403,16 @@ var DevServer = class {
402
403
  force
403
404
  }, {
404
405
  F: __dxlog_file3,
405
- L: 163,
406
+ L: 164,
406
407
  S: this,
407
408
  C: (f, a) => f(...a)
408
409
  });
409
410
  if (force) {
410
- Object.keys(import_chunk_KTLM3JNV.__require.cache).filter((key) => key.startsWith(filePath)).forEach((key) => {
411
- delete import_chunk_KTLM3JNV.__require.cache[key];
411
+ Object.keys(import_chunk_3UYUR5N5.__require.cache).filter((key) => key.startsWith(filePath)).forEach((key) => {
412
+ delete import_chunk_3UYUR5N5.__require.cache[key];
412
413
  });
413
414
  }
414
- const module2 = (0, import_chunk_KTLM3JNV.__require)(filePath);
415
+ const module2 = (0, import_chunk_3UYUR5N5.__require)(filePath);
415
416
  if (typeof module2.default !== "function") {
416
417
  throw new Error(`Handler must export default function: ${uri}`);
417
418
  }
@@ -423,7 +424,7 @@ var DevServer = class {
423
424
  async _safeUpdateRegistration() {
424
425
  (0, import_invariant.invariant)(this._functionServiceRegistration, void 0, {
425
426
  F: __dxlog_file3,
426
- L: 185,
427
+ L: 186,
427
428
  S: this,
428
429
  A: [
429
430
  "this._functionServiceRegistration",
@@ -438,10 +439,10 @@ var DevServer = class {
438
439
  route
439
440
  }))
440
441
  });
441
- } catch (e) {
442
- import_log3.log.catch(e, void 0, {
442
+ } catch (err) {
443
+ import_log3.log.catch(err, void 0, {
443
444
  F: __dxlog_file3,
444
- L: 192,
445
+ L: 193,
445
446
  S: this,
446
447
  C: (f, a) => f(...a)
447
448
  });
@@ -458,7 +459,7 @@ var DevServer = class {
458
459
  path: path2
459
460
  }, {
460
461
  F: __dxlog_file3,
461
- L: 203,
462
+ L: 204,
462
463
  S: this,
463
464
  C: (f, a) => f(...a)
464
465
  });
@@ -472,7 +473,7 @@ var DevServer = class {
472
473
  duration: Date.now() - now
473
474
  }, {
474
475
  F: __dxlog_file3,
475
- L: 206,
476
+ L: 207,
476
477
  S: this,
477
478
  C: (f, a) => f(...a)
478
479
  });
@@ -483,7 +484,7 @@ var DevServer = class {
483
484
  const { handler } = this._handlers[path2] ?? {};
484
485
  (0, import_invariant.invariant)(handler, `invalid path: ${path2}`, {
485
486
  F: __dxlog_file3,
486
- L: 213,
487
+ L: 214,
487
488
  S: this,
488
489
  A: [
489
490
  "handler",
@@ -549,11 +550,11 @@ var Scheduler = class {
549
550
  });
550
551
  await Promise.all(mountTasks).catch(import_log4.log.catch);
551
552
  }
552
- async activate(space, functions, fnTrigger) {
553
- const definition = functions.find((def) => def.uri === fnTrigger.function);
553
+ async activate(space, functions, trigger) {
554
+ const definition = functions.find((def) => def.uri === trigger.function);
554
555
  if (!definition) {
555
556
  import_log4.log.info("function is not found for trigger", {
556
- fnTrigger
557
+ trigger
557
558
  }, {
558
559
  F: __dxlog_file4,
559
560
  L: 78,
@@ -562,9 +563,7 @@ var Scheduler = class {
562
563
  });
563
564
  return;
564
565
  }
565
- await this.triggers.activate({
566
- space
567
- }, fnTrigger, async (args) => {
566
+ await this.triggers.activate(space, trigger, async (args) => {
568
567
  const mutex = this._functionUriToCallMutex.get(definition.uri) ?? new import_async3.Mutex();
569
568
  this._functionUriToCallMutex.set(definition.uri, mutex);
570
569
  import_log4.log.info("function triggered, waiting for mutex", {
@@ -584,8 +583,8 @@ var Scheduler = class {
584
583
  S: this,
585
584
  C: (f, a) => f(...a)
586
585
  });
587
- return this._execFunction(definition, fnTrigger, {
588
- meta: fnTrigger.meta,
586
+ return this._execFunction(definition, trigger, {
587
+ meta: trigger.meta ?? {},
589
588
  data: {
590
589
  ...args,
591
590
  spaceKey: space.key
@@ -595,7 +594,7 @@ var Scheduler = class {
595
594
  });
596
595
  (0, import_log4.log)("activated trigger", {
597
596
  space: space.key,
598
- trigger: fnTrigger
597
+ trigger
599
598
  }, {
600
599
  F: __dxlog_file4,
601
600
  L: 96,
@@ -672,7 +671,7 @@ var createContext2 = () => new import_context3.Context({
672
671
  name: "FunctionScheduler"
673
672
  });
674
673
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/subscription-trigger.ts";
675
- var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
674
+ var createSubscriptionTrigger = async (ctx, space, spec, callback) => {
676
675
  const objectIds = /* @__PURE__ */ new Set();
677
676
  const task = new import_async5.UpdateScheduler(ctx, async () => {
678
677
  if (objectIds.size > 0) {
@@ -700,7 +699,7 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
700
699
  updated: updated.length
701
700
  }, {
702
701
  F: __dxlog_file5,
703
- L: 45,
702
+ L: 47,
704
703
  S: void 0,
705
704
  C: (f, a) => f(...a)
706
705
  });
@@ -710,16 +709,16 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
710
709
  subscriptions.push(() => subscription.unsubscribe());
711
710
  const { filter, options: { deep, delay } = {} } = spec;
712
711
  const update = ({ objects }) => {
712
+ import_log6.log.info("update", {
713
+ objects: objects.length
714
+ }, {
715
+ F: __dxlog_file5,
716
+ L: 57,
717
+ S: void 0,
718
+ C: (f, a) => f(...a)
719
+ });
713
720
  subscription.update(objects);
714
721
  if (deep) {
715
- import_log6.log.info("update", {
716
- objects: objects.length
717
- }, {
718
- F: __dxlog_file5,
719
- L: 59,
720
- S: void 0,
721
- C: (f, a) => f(...a)
722
- });
723
722
  for (const object of objects) {
724
723
  const content = object.content;
725
724
  if (content instanceof import_types.TextV0Type) {
@@ -730,14 +729,24 @@ var createSubscriptionTrigger = async (ctx, triggerCtx, spec, callback) => {
730
729
  }
731
730
  }
732
731
  };
733
- const query = triggerCtx.space.db.query(import_echo_db.Filter.or(filter.map(({ type, props }) => import_echo_db.Filter.typename(type, props))));
734
- subscriptions.push(query.subscribe(delay ? (0, import_async5.debounce)(update, delay) : update));
732
+ import_log6.log.info("subscription", {
733
+ filter
734
+ }, {
735
+ F: __dxlog_file5,
736
+ L: 76,
737
+ S: void 0,
738
+ C: (f, a) => f(...a)
739
+ });
740
+ if (filter) {
741
+ const query = space.db.query(import_echo3.Filter.typename(filter[0].type, filter[0].props));
742
+ subscriptions.push(query.subscribe(delay ? (0, import_async5.debounce)(update, delay) : update));
743
+ }
735
744
  ctx.onDispose(() => {
736
745
  subscriptions.forEach((unsubscribe) => unsubscribe());
737
746
  });
738
747
  };
739
748
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/timer-trigger.ts";
740
- var createTimerTrigger = async (ctx, triggerContext, spec, callback) => {
749
+ var createTimerTrigger = async (ctx, space, spec, callback) => {
741
750
  const task = new import_async6.DeferredTask(ctx, async () => {
742
751
  await callback({});
743
752
  });
@@ -752,12 +761,12 @@ var createTimerTrigger = async (ctx, triggerContext, spec, callback) => {
752
761
  last = now;
753
762
  run++;
754
763
  import_log7.log.info("tick", {
755
- space: triggerContext.space.key.truncate(),
764
+ space: space.key.truncate(),
756
765
  count: run,
757
766
  delta
758
767
  }, {
759
768
  F: __dxlog_file6,
760
- L: 37,
769
+ L: 38,
761
770
  S: void 0,
762
771
  C: (f, a) => f(...a)
763
772
  });
@@ -768,7 +777,7 @@ var createTimerTrigger = async (ctx, triggerContext, spec, callback) => {
768
777
  ctx.onDispose(() => job.stop());
769
778
  };
770
779
  var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/webhook-trigger.ts";
771
- var createWebhookTrigger = async (ctx, _, spec, callback) => {
780
+ var createWebhookTrigger = async (ctx, space, spec, callback) => {
772
781
  const server = import_node_http.default.createServer(async (req, res) => {
773
782
  if (req.method !== spec.method) {
774
783
  res.statusCode = 405;
@@ -785,7 +794,7 @@ var createWebhookTrigger = async (ctx, _, spec, callback) => {
785
794
  port
786
795
  }, {
787
796
  F: __dxlog_file7,
788
- L: 40,
797
+ L: 41,
789
798
  S: void 0,
790
799
  C: (f, a) => f(...a)
791
800
  });
@@ -796,7 +805,7 @@ var createWebhookTrigger = async (ctx, _, spec, callback) => {
796
805
  });
797
806
  };
798
807
  var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/core/functions/src/trigger/type/websocket-trigger.ts";
799
- var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
808
+ var createWebsocketTrigger = async (ctx, space, spec, callback, options = {
800
809
  retryDelay: 2,
801
810
  maxAttempts: 5
802
811
  }) => {
@@ -811,7 +820,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
811
820
  url
812
821
  }, {
813
822
  F: __dxlog_file8,
814
- L: 39,
823
+ L: 40,
815
824
  S: void 0,
816
825
  C: (f, a) => f(...a)
817
826
  });
@@ -826,7 +835,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
826
835
  code: event.code
827
836
  }, {
828
837
  F: __dxlog_file8,
829
- L: 48,
838
+ L: 49,
830
839
  S: void 0,
831
840
  C: (f, a) => f(...a)
832
841
  });
@@ -836,11 +845,11 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
836
845
  url
837
846
  }, {
838
847
  F: __dxlog_file8,
839
- L: 53,
848
+ L: 54,
840
849
  S: void 0,
841
850
  C: (f, a) => f(...a)
842
851
  });
843
- await createWebsocketTrigger(ctx, triggerCtx, spec, callback, options);
852
+ await createWebsocketTrigger(ctx, space, spec, callback, options);
844
853
  }, options.retryDelay * 1e3);
845
854
  }
846
855
  open.wake(false);
@@ -850,7 +859,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
850
859
  url
851
860
  }, {
852
861
  F: __dxlog_file8,
853
- L: 62,
862
+ L: 63,
854
863
  S: void 0,
855
864
  C: (f, a) => f(...a)
856
865
  });
@@ -859,7 +868,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
859
868
  try {
860
869
  import_log9.log.info("message", void 0, {
861
870
  F: __dxlog_file8,
862
- L: 67,
871
+ L: 68,
863
872
  S: void 0,
864
873
  C: (f, a) => f(...a)
865
874
  });
@@ -872,7 +881,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
872
881
  url
873
882
  }, {
874
883
  F: __dxlog_file8,
875
- L: 71,
884
+ L: 72,
876
885
  S: void 0,
877
886
  C: (f, a) => f(...a)
878
887
  });
@@ -889,7 +898,7 @@ var createWebsocketTrigger = async (ctx, triggerCtx, spec, callback, options = {
889
898
  attempt
890
899
  }, {
891
900
  F: __dxlog_file8,
892
- L: 82,
901
+ L: 83,
893
902
  S: void 0,
894
903
  C: (f, a) => f(...a)
895
904
  });
@@ -923,24 +932,24 @@ var TriggerRegistry = class extends import_context4.Resource {
923
932
  getInactiveTriggers(space) {
924
933
  return this._getTriggers(space, (t) => t.activationCtx == null);
925
934
  }
926
- async activate(triggerCtx, trigger, callback) {
935
+ async activate(space, trigger, callback) {
927
936
  (0, import_log5.log)("activate", {
928
- space: triggerCtx.space.key,
937
+ space: space.key,
929
938
  trigger
930
939
  }, {
931
940
  F: __dxlog_file9,
932
- L: 74,
941
+ L: 72,
933
942
  S: this,
934
943
  C: (f, a) => f(...a)
935
944
  });
936
945
  const activationCtx = new import_context4.Context({
937
- name: `trigger_${trigger.function}`
946
+ name: `FunctionTrigger-${trigger.function}`
938
947
  });
939
948
  this._ctx.onDispose(() => activationCtx.dispose());
940
- const registeredTrigger = this._triggersBySpaceKey.get(triggerCtx.space.key)?.find((reg) => reg.trigger.id === trigger.id);
949
+ const registeredTrigger = this._triggersBySpaceKey.get(space.key)?.find((reg) => reg.trigger.id === trigger.id);
941
950
  (0, import_invariant2.invariant)(registeredTrigger, `Trigger is not registered: ${trigger.function}`, {
942
951
  F: __dxlog_file9,
943
- L: 80,
952
+ L: 77,
944
953
  S: this,
945
954
  A: [
946
955
  "registeredTrigger",
@@ -950,7 +959,7 @@ var TriggerRegistry = class extends import_context4.Resource {
950
959
  registeredTrigger.activationCtx = activationCtx;
951
960
  try {
952
961
  const options = this._options?.[trigger.spec.type];
953
- await triggerHandlers[trigger.spec.type](activationCtx, triggerCtx, trigger.spec, callback, options);
962
+ await triggerHandlers[trigger.spec.type](activationCtx, space, trigger.spec, callback, options);
954
963
  } catch (err) {
955
964
  delete registeredTrigger.activationCtx;
956
965
  throw err;
@@ -964,35 +973,52 @@ var TriggerRegistry = class extends import_context4.Resource {
964
973
  space: space.key
965
974
  }, {
966
975
  F: __dxlog_file9,
967
- L: 96,
976
+ L: 93,
968
977
  S: this,
969
978
  C: (f, a) => f(...a)
970
979
  });
971
980
  if (!manifest.triggers?.length) {
972
981
  return;
973
982
  }
974
- if (!space.db.graph.runtimeSchemaRegistry.hasSchema(import_chunk_KTLM3JNV.FunctionTrigger)) {
975
- space.db.graph.runtimeSchemaRegistry.registerSchema(import_chunk_KTLM3JNV.FunctionTrigger);
983
+ if (!space.db.graph.runtimeSchemaRegistry.hasSchema(import_chunk_3UYUR5N5.FunctionTrigger)) {
984
+ space.db.graph.runtimeSchemaRegistry.registerSchema(import_chunk_3UYUR5N5.FunctionTrigger);
976
985
  }
977
- const { objects: existing } = await space.db.query(import_echo2.Filter.schema(import_chunk_KTLM3JNV.FunctionTrigger)).run();
978
- const { added } = (0, import_util3.diff)(existing, manifest.triggers, (a, b) => {
979
- const keys = b[import_echo_schema.ECHO_ATTR_META]?.keys ?? [
980
- (0, import_echo_schema.foreignKey)("manifest", [
981
- b.function,
982
- b.spec.type
983
- ].join("-"))
984
- ];
985
- return (0, import_util3.intersection)((0, import_echo2.getMeta)(a)?.keys ?? [], keys, import_echo_schema.foreignKeyEquals).length > 0;
986
+ const manifestTriggers = manifest.triggers.map((trigger) => {
987
+ let keys = trigger[import_echo_schema.ECHO_ATTR_META]?.keys;
988
+ delete trigger[import_echo_schema.ECHO_ATTR_META];
989
+ if (!keys?.length) {
990
+ keys = [
991
+ (0, import_echo_schema.foreignKey)("manifest", [
992
+ trigger.function,
993
+ trigger.spec.type
994
+ ].join(":"))
995
+ ];
996
+ }
997
+ return (0, import_echo2.create)(import_chunk_3UYUR5N5.FunctionTrigger, trigger, {
998
+ keys
999
+ });
986
1000
  });
1001
+ const { objects: existing } = await space.db.query(import_echo2.Filter.schema(import_chunk_3UYUR5N5.FunctionTrigger)).run();
1002
+ const { added } = (0, import_util3.diff)(existing, manifestTriggers, import_echo_schema.compareForeignKeys);
987
1003
  added.forEach((trigger) => {
988
- const { meta, object } = (0, import_echo_schema.splitMeta)(trigger);
989
- space.db.add((0, import_echo2.create)(import_chunk_KTLM3JNV.FunctionTrigger, object, meta));
1004
+ space.db.add(trigger);
1005
+ import_log5.log.info("added", {
1006
+ meta: (0, import_echo2.getMeta)(trigger)
1007
+ }, {
1008
+ F: __dxlog_file9,
1009
+ L: 120,
1010
+ S: this,
1011
+ C: (f, a) => f(...a)
1012
+ });
990
1013
  });
1014
+ if (added.length > 0) {
1015
+ await space.db.flush();
1016
+ }
991
1017
  }
992
1018
  async _open() {
993
1019
  import_log5.log.info("open...", void 0, {
994
1020
  F: __dxlog_file9,
995
- L: 121,
1021
+ L: 129,
996
1022
  S: this,
997
1023
  C: (f, a) => f(...a)
998
1024
  });
@@ -1007,78 +1033,89 @@ var TriggerRegistry = class extends import_context4.Resource {
1007
1033
  if (this._ctx.disposed) {
1008
1034
  break;
1009
1035
  }
1010
- this._ctx.onDispose(space.db.query(import_echo2.Filter.schema(import_chunk_KTLM3JNV.FunctionTrigger)).subscribe(async (triggers) => {
1036
+ this._ctx.onDispose(space.db.query(import_echo2.Filter.schema(import_chunk_3UYUR5N5.FunctionTrigger)).subscribe(async ({ objects: current }) => {
1011
1037
  import_log5.log.info("update", {
1012
1038
  space: space.key,
1013
- triggers: triggers.objects.length
1039
+ registered: registered.length,
1040
+ current: current.length
1014
1041
  }, {
1015
1042
  F: __dxlog_file9,
1016
- L: 138,
1043
+ L: 146,
1017
1044
  S: this,
1018
1045
  C: (f, a) => f(...a)
1019
1046
  });
1020
- await this._handleRemovedTriggers(space, triggers.objects, registered);
1021
- this._handleNewTriggers(space, triggers.objects, registered);
1047
+ await this._handleRemovedTriggers(space, current, registered);
1048
+ this._handleNewTriggers(space, current, registered);
1022
1049
  }));
1023
1050
  }
1024
1051
  });
1025
1052
  this._ctx.onDispose(() => spaceListSubscription.unsubscribe());
1053
+ import_log5.log.info("opened", void 0, {
1054
+ F: __dxlog_file9,
1055
+ L: 155,
1056
+ S: this,
1057
+ C: (f, a) => f(...a)
1058
+ });
1026
1059
  }
1027
1060
  async _close(_) {
1028
1061
  import_log5.log.info("close...", void 0, {
1029
1062
  F: __dxlog_file9,
1030
- L: 150,
1063
+ L: 159,
1031
1064
  S: this,
1032
1065
  C: (f, a) => f(...a)
1033
1066
  });
1034
1067
  this._triggersBySpaceKey.clear();
1068
+ import_log5.log.info("closed", void 0, {
1069
+ F: __dxlog_file9,
1070
+ L: 161,
1071
+ S: this,
1072
+ C: (f, a) => f(...a)
1073
+ });
1035
1074
  }
1036
- _handleNewTriggers(space, allTriggers, registered) {
1037
- const newTriggers = allTriggers.filter((candidate) => {
1038
- return registered.find((reg) => reg.trigger.id === candidate.id) == null;
1075
+ _handleNewTriggers(space, current, registered) {
1076
+ const added = current.filter((candidate) => {
1077
+ return candidate.enabled && registered.find((reg) => reg.trigger.id === candidate.id) == null;
1039
1078
  });
1040
- if (newTriggers.length > 0) {
1041
- const newRegisteredTriggers = newTriggers.map((trigger) => ({
1079
+ if (added.length > 0) {
1080
+ const newRegisteredTriggers = added.map((trigger) => ({
1042
1081
  trigger
1043
1082
  }));
1044
1083
  registered.push(...newRegisteredTriggers);
1045
1084
  import_log5.log.info("added", () => ({
1046
1085
  spaceKey: space.key,
1047
- triggers: newTriggers.map((trigger) => trigger.function)
1086
+ triggers: added.map((trigger) => trigger.function)
1048
1087
  }), {
1049
1088
  F: __dxlog_file9,
1050
- L: 162,
1089
+ L: 172,
1051
1090
  S: this,
1052
1091
  C: (f, a) => f(...a)
1053
1092
  });
1054
1093
  this.registered.emit({
1055
1094
  space,
1056
- triggers: newTriggers
1095
+ triggers: added
1057
1096
  });
1058
1097
  }
1059
1098
  }
1060
- async _handleRemovedTriggers(space, allTriggers, registered) {
1099
+ async _handleRemovedTriggers(space, current, registered) {
1061
1100
  const removed = [];
1062
1101
  for (let i = registered.length - 1; i >= 0; i--) {
1063
- const wasRemoved = allTriggers.find((trigger) => trigger.id === registered[i].trigger.id) == null;
1102
+ const wasRemoved = current.filter((trigger) => trigger.enabled).find((trigger) => trigger.id === registered[i].trigger.id) == null;
1064
1103
  if (wasRemoved) {
1065
- if (removed.length) {
1066
- import_log5.log.info("removed", () => ({
1067
- spaceKey: space.key,
1068
- triggers: removed.map((trigger) => trigger.function)
1069
- }), {
1070
- F: __dxlog_file9,
1071
- L: 181,
1072
- S: this,
1073
- C: (f, a) => f(...a)
1074
- });
1075
- }
1076
1104
  const unregistered = registered.splice(i, 1)[0];
1077
1105
  await unregistered.activationCtx?.dispose();
1078
1106
  removed.push(unregistered.trigger);
1079
1107
  }
1080
1108
  }
1081
1109
  if (removed.length > 0) {
1110
+ import_log5.log.info("removed", () => ({
1111
+ spaceKey: space.key,
1112
+ triggers: removed.map((trigger) => trigger.function)
1113
+ }), {
1114
+ F: __dxlog_file9,
1115
+ L: 198,
1116
+ S: this,
1117
+ C: (f, a) => f(...a)
1118
+ });
1082
1119
  this.removed.emit({
1083
1120
  space,
1084
1121
  triggers: removed