@dxos/functions 0.5.3-main.59db342 → 0.5.3-main.61bbff4

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 (86) hide show
  1. package/dist/lib/browser/index.mjs +829 -265
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +817 -266
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/types/src/handler.d.ts +33 -12
  8. package/dist/types/src/handler.d.ts.map +1 -1
  9. package/dist/types/src/index.d.ts +3 -1
  10. package/dist/types/src/index.d.ts.map +1 -1
  11. package/dist/types/src/registry/function-registry.d.ts +24 -0
  12. package/dist/types/src/registry/function-registry.d.ts.map +1 -0
  13. package/dist/types/src/registry/function-registry.test.d.ts +2 -0
  14. package/dist/types/src/registry/function-registry.test.d.ts.map +1 -0
  15. package/dist/types/src/registry/index.d.ts +2 -0
  16. package/dist/types/src/registry/index.d.ts.map +1 -0
  17. package/dist/types/src/runtime/dev-server.d.ts +15 -7
  18. package/dist/types/src/runtime/dev-server.d.ts.map +1 -1
  19. package/dist/types/src/runtime/dev-server.test.d.ts +2 -0
  20. package/dist/types/src/runtime/dev-server.test.d.ts.map +1 -0
  21. package/dist/types/src/runtime/scheduler.d.ts +14 -15
  22. package/dist/types/src/runtime/scheduler.d.ts.map +1 -1
  23. package/dist/types/src/testing/functions-integration.test.d.ts +2 -0
  24. package/dist/types/src/testing/functions-integration.test.d.ts.map +1 -0
  25. package/dist/types/src/testing/index.d.ts +4 -0
  26. package/dist/types/src/testing/index.d.ts.map +1 -0
  27. package/dist/types/src/testing/setup.d.ts +5 -0
  28. package/dist/types/src/testing/setup.d.ts.map +1 -0
  29. package/dist/types/src/testing/test/handler.d.ts +4 -0
  30. package/dist/types/src/testing/test/handler.d.ts.map +1 -0
  31. package/dist/types/src/testing/test/index.d.ts +3 -0
  32. package/dist/types/src/testing/test/index.d.ts.map +1 -0
  33. package/dist/types/src/testing/types.d.ts +9 -0
  34. package/dist/types/src/testing/types.d.ts.map +1 -0
  35. package/dist/types/src/testing/util.d.ts +3 -0
  36. package/dist/types/src/testing/util.d.ts.map +1 -0
  37. package/dist/types/src/trigger/index.d.ts +2 -0
  38. package/dist/types/src/trigger/index.d.ts.map +1 -0
  39. package/dist/types/src/trigger/trigger-registry.d.ts +40 -0
  40. package/dist/types/src/trigger/trigger-registry.d.ts.map +1 -0
  41. package/dist/types/src/trigger/trigger-registry.test.d.ts +2 -0
  42. package/dist/types/src/trigger/trigger-registry.test.d.ts.map +1 -0
  43. package/dist/types/src/trigger/type/index.d.ts +5 -0
  44. package/dist/types/src/trigger/type/index.d.ts.map +1 -0
  45. package/dist/types/src/trigger/type/subscription-trigger.d.ts +4 -0
  46. package/dist/types/src/trigger/type/subscription-trigger.d.ts.map +1 -0
  47. package/dist/types/src/trigger/type/timer-trigger.d.ts +4 -0
  48. package/dist/types/src/trigger/type/timer-trigger.d.ts.map +1 -0
  49. package/dist/types/src/trigger/type/webhook-trigger.d.ts +4 -0
  50. package/dist/types/src/trigger/type/webhook-trigger.d.ts.map +1 -0
  51. package/dist/types/src/trigger/type/websocket-trigger.d.ts +13 -0
  52. package/dist/types/src/trigger/type/websocket-trigger.d.ts.map +1 -0
  53. package/dist/types/src/types.d.ts +188 -0
  54. package/dist/types/src/types.d.ts.map +1 -0
  55. package/dist/types/tools/schema.d.ts +2 -0
  56. package/dist/types/tools/schema.d.ts.map +1 -0
  57. package/package.json +23 -11
  58. package/schema/functions.json +197 -0
  59. package/src/handler.ts +56 -26
  60. package/src/index.ts +3 -1
  61. package/src/registry/function-registry.test.ts +105 -0
  62. package/src/registry/function-registry.ts +84 -0
  63. package/src/registry/index.ts +5 -0
  64. package/src/runtime/dev-server.test.ts +60 -0
  65. package/src/runtime/dev-server.ts +104 -52
  66. package/src/runtime/scheduler.test.ts +154 -21
  67. package/src/runtime/scheduler.ts +76 -152
  68. package/src/testing/functions-integration.test.ts +99 -0
  69. package/src/testing/index.ts +7 -0
  70. package/src/testing/setup.ts +45 -0
  71. package/src/testing/test/handler.ts +15 -0
  72. package/src/testing/test/index.ts +7 -0
  73. package/src/testing/types.ts +9 -0
  74. package/src/testing/util.ts +16 -0
  75. package/src/trigger/index.ts +5 -0
  76. package/src/trigger/trigger-registry.test.ts +229 -0
  77. package/src/trigger/trigger-registry.ts +176 -0
  78. package/src/trigger/type/index.ts +8 -0
  79. package/src/trigger/type/subscription-trigger.ts +73 -0
  80. package/src/trigger/type/timer-trigger.ts +44 -0
  81. package/src/trigger/type/webhook-trigger.ts +47 -0
  82. package/src/trigger/type/websocket-trigger.ts +91 -0
  83. package/src/types.ts +101 -0
  84. package/dist/types/src/manifest.d.ts +0 -26
  85. package/dist/types/src/manifest.d.ts.map +0 -1
  86. package/src/manifest.ts +0 -42
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/testing/types.ts"],"names":[],"mappings":";;;;;AAMA,qBAAa,QAAS,SAAQ,aAE5B;CAAG"}
@@ -0,0 +1,3 @@
1
+ import { type Space } from '@dxos/client/echo';
2
+ export declare const triggerWebhook: (space: Space, uri: string) => Promise<void>;
3
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAU,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAKvD,eAAO,MAAM,cAAc,UAAiB,KAAK,OAAO,MAAM,kBAM7D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './trigger-registry';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/trigger/index.ts"],"names":[],"mappings":"AAIA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { Event } from '@dxos/async';
2
+ import { type Client } from '@dxos/client';
3
+ import { type Space } from '@dxos/client/echo';
4
+ import { Context, Resource } from '@dxos/context';
5
+ import { type FunctionManifest, FunctionTrigger, type FunctionTriggerType, type TriggerSpec } from '../types';
6
+ type ResponseCode = number;
7
+ export type TriggerCallback = (args: object) => Promise<ResponseCode>;
8
+ export type TriggerContext = {
9
+ space: Space;
10
+ };
11
+ export type TriggerFactory<Spec extends TriggerSpec, Options = any> = (ctx: Context, context: TriggerContext, spec: Spec, callback: TriggerCallback, options?: Options) => Promise<void>;
12
+ export type TriggerHandlerMap = {
13
+ [type in FunctionTriggerType]: TriggerFactory<any>;
14
+ };
15
+ export type TriggerEvent = {
16
+ space: Space;
17
+ triggers: FunctionTrigger[];
18
+ };
19
+ export declare class TriggerRegistry extends Resource {
20
+ private readonly _client;
21
+ private readonly _options?;
22
+ private readonly _triggersBySpaceKey;
23
+ readonly registered: Event<TriggerEvent>;
24
+ readonly removed: Event<TriggerEvent>;
25
+ constructor(_client: Client, _options?: TriggerHandlerMap | undefined);
26
+ getActiveTriggers(space: Space): FunctionTrigger[];
27
+ getInactiveTriggers(space: Space): FunctionTrigger[];
28
+ activate(triggerCtx: TriggerContext, trigger: FunctionTrigger, callback: TriggerCallback): Promise<void>;
29
+ /**
30
+ * Loads triggers from the manifest into the space.
31
+ */
32
+ register(space: Space, manifest: FunctionManifest): Promise<void>;
33
+ protected _open(): Promise<void>;
34
+ protected _close(_: Context): Promise<void>;
35
+ private _handleNewTriggers;
36
+ private _handleRemovedTriggers;
37
+ private _getTriggers;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=trigger-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.d.ts","sourceRoot":"","sources":["../../../../src/trigger/trigger-registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAkB,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOlD,OAAO,EAAE,KAAK,gBAAgB,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9G,KAAK,YAAY,GAAG,MAAM,CAAC;AAE3B,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAG9C,MAAM,MAAM,cAAc,CAAC,IAAI,SAAS,WAAW,EAAE,OAAO,GAAG,GAAG,IAAI,CACpE,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,OAAO,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,iBAAiB,GAAG;KAAG,IAAI,IAAI,mBAAmB,GAAG,cAAc,CAAC,GAAG,CAAC;CAAE,CAAC;AASvF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAOF,qBAAa,eAAgB,SAAQ,QAAQ;IAOzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAP5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkE;IAEtG,SAAgB,UAAU,sBAA6B;IACvD,SAAgB,OAAO,sBAA6B;gBAGjC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,+BAAmB;IAKxC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,EAAE;IAIlD,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,EAAE;IAIrD,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9G;;OAEG;IACU,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;cAerD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAyBtB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,OAAO,CAAC,kBAAkB;YAaZ,sBAAsB;IAqBpC,OAAO,CAAC,YAAY;CAIrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trigger-registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.test.d.ts","sourceRoot":"","sources":["../../../../src/trigger/trigger-registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from './subscription-trigger';
2
+ export * from './timer-trigger';
3
+ export * from './webhook-trigger';
4
+ export * from './websocket-trigger';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/trigger/type/index.ts"],"names":[],"mappings":"AAIA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { SubscriptionTrigger } from '../../types';
2
+ import { type TriggerFactory } from '../trigger-registry';
3
+ export declare const createSubscriptionTrigger: TriggerFactory<SubscriptionTrigger>;
4
+ //# sourceMappingURL=subscription-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-trigger.d.ts","sourceRoot":"","sources":["../../../../../src/trigger/type/subscription-trigger.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErG,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,mBAAmB,CA2DzE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TimerTrigger } from '../../types';
2
+ import { type TriggerFactory } from '../trigger-registry';
3
+ export declare const createTimerTrigger: TriggerFactory<TimerTrigger>;
4
+ //# sourceMappingURL=timer-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-trigger.d.ts","sourceRoot":"","sources":["../../../../../src/trigger/type/timer-trigger.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErG,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,YAAY,CA8B3D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WebhookTrigger } from '../../types';
2
+ import { type TriggerFactory } from '../trigger-registry';
3
+ export declare const createWebhookTrigger: TriggerFactory<WebhookTrigger>;
4
+ //# sourceMappingURL=webhook-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-trigger.d.ts","sourceRoot":"","sources":["../../../../../src/trigger/type/webhook-trigger.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErG,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,cAAc,CAiC/D,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type WebsocketTrigger } from '../../types';
2
+ import { type TriggerFactory } from '../trigger-registry';
3
+ interface WebsocketTriggerOptions {
4
+ retryDelay: number;
5
+ maxAttempts: number;
6
+ }
7
+ /**
8
+ * Websocket.
9
+ * NOTE: The port must be unique, so the same hook cannot be used for multiple spaces.
10
+ */
11
+ export declare const createWebsocketTrigger: TriggerFactory<WebsocketTrigger, WebsocketTriggerOptions>;
12
+ export {};
13
+ //# sourceMappingURL=websocket-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-trigger.d.ts","sourceRoot":"","sources":["../../../../../src/trigger/type/websocket-trigger.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAA6C,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErG,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,gBAAgB,EAAE,uBAAuB,CAoE5F,CAAC"}
@@ -0,0 +1,188 @@
1
+ import { S } from '@dxos/echo-schema';
2
+ /**
3
+ * Type discriminator for TriggerSpec.
4
+ * Every spec has a type field of type FunctionTriggerType that we can use to understand which
5
+ * type we're working with.
6
+ * https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions
7
+ */
8
+ export type FunctionTriggerType = 'subscription' | 'timer' | 'webhook' | 'websocket';
9
+ declare const SubscriptionTriggerSchema: S.struct<{
10
+ type: S.literal<["subscription"]>;
11
+ filter: S.array<S.struct<{
12
+ type: S.$string;
13
+ props: S.PropertySignature<"?:", {
14
+ readonly [x: string]: any;
15
+ } | undefined, never, "?:", {
16
+ readonly [x: string]: any;
17
+ } | undefined, never>;
18
+ }>>;
19
+ options: S.PropertySignature<"?:", {
20
+ readonly deep?: boolean | undefined;
21
+ readonly delay?: number | undefined;
22
+ } | undefined, never, "?:", {
23
+ readonly deep?: boolean | undefined;
24
+ readonly delay?: number | undefined;
25
+ } | undefined, never>;
26
+ }>;
27
+ export type SubscriptionTrigger = S.Schema.Type<typeof SubscriptionTriggerSchema>;
28
+ declare const TimerTriggerSchema: S.struct<{
29
+ type: S.literal<["timer"]>;
30
+ cron: S.$string;
31
+ }>;
32
+ export type TimerTrigger = S.Schema.Type<typeof TimerTriggerSchema>;
33
+ declare const WebhookTriggerSchema: S.mutable<S.struct<{
34
+ type: S.literal<["webhook"]>;
35
+ method: S.$string;
36
+ port: S.PropertySignature<"?:", number | undefined, never, "?:", number | undefined, never>;
37
+ }>>;
38
+ export type WebhookTrigger = S.Schema.Type<typeof WebhookTriggerSchema>;
39
+ declare const WebsocketTriggerSchema: S.struct<{
40
+ type: S.literal<["websocket"]>;
41
+ url: S.$string;
42
+ init: S.PropertySignature<"?:", {
43
+ readonly [x: string]: any;
44
+ } | undefined, never, "?:", {
45
+ readonly [x: string]: any;
46
+ } | undefined, never>;
47
+ }>;
48
+ export type WebsocketTrigger = S.Schema.Type<typeof WebsocketTriggerSchema>;
49
+ export type TriggerSpec = TimerTrigger | WebhookTrigger | WebsocketTrigger | SubscriptionTrigger;
50
+ declare const FunctionDef_base: import("@dxos/echo-schema").EchoSchemaClass<{
51
+ handler: string;
52
+ uri: string;
53
+ description?: string | undefined;
54
+ route: string;
55
+ } & {
56
+ id: string;
57
+ }>;
58
+ /**
59
+ * Function definition.
60
+ */
61
+ export declare class FunctionDef extends FunctionDef_base {
62
+ }
63
+ declare const FunctionTrigger_base: import("@dxos/echo-schema").EchoSchemaClass<{
64
+ function: string;
65
+ meta?: {
66
+ readonly [x: string]: any;
67
+ } | undefined;
68
+ spec: {
69
+ readonly filter: readonly {
70
+ readonly type: string;
71
+ readonly props?: {
72
+ readonly [x: string]: any;
73
+ } | undefined;
74
+ }[];
75
+ readonly type: "subscription";
76
+ readonly options?: {
77
+ readonly deep?: boolean | undefined;
78
+ readonly delay?: number | undefined;
79
+ } | undefined;
80
+ } | {
81
+ readonly type: "timer";
82
+ readonly cron: string;
83
+ } | {
84
+ port?: number | undefined;
85
+ type: "webhook";
86
+ method: string;
87
+ } | {
88
+ readonly type: "websocket";
89
+ readonly url: string;
90
+ readonly init?: {
91
+ readonly [x: string]: any;
92
+ } | undefined;
93
+ };
94
+ } & {
95
+ id: string;
96
+ }>;
97
+ export declare class FunctionTrigger extends FunctionTrigger_base {
98
+ }
99
+ /**
100
+ * Function manifest file.
101
+ */
102
+ export declare const FunctionManifestSchema: S.struct<{
103
+ functions: S.PropertySignature<"?:", Omit<{
104
+ handler: string;
105
+ uri: string;
106
+ description?: string | undefined;
107
+ route: string;
108
+ } & {
109
+ id: string;
110
+ }, "id">[] | undefined, never, "?:", Omit<{
111
+ handler: string;
112
+ uri: string;
113
+ description?: string | undefined;
114
+ route: string;
115
+ } & {
116
+ id: string;
117
+ }, "id">[] | undefined, never>;
118
+ triggers: S.PropertySignature<"?:", Omit<{
119
+ function: string;
120
+ meta?: {
121
+ readonly [x: string]: any;
122
+ } | undefined;
123
+ spec: {
124
+ readonly filter: readonly {
125
+ readonly type: string;
126
+ readonly props?: {
127
+ readonly [x: string]: any;
128
+ } | undefined;
129
+ }[];
130
+ readonly type: "subscription";
131
+ readonly options?: {
132
+ readonly deep?: boolean | undefined;
133
+ readonly delay?: number | undefined;
134
+ } | undefined;
135
+ } | {
136
+ readonly type: "timer";
137
+ readonly cron: string;
138
+ } | {
139
+ port?: number | undefined;
140
+ type: "webhook";
141
+ method: string;
142
+ } | {
143
+ readonly type: "websocket";
144
+ readonly url: string;
145
+ readonly init?: {
146
+ readonly [x: string]: any;
147
+ } | undefined;
148
+ };
149
+ } & {
150
+ id: string;
151
+ }, "id">[] | undefined, never, "?:", Omit<{
152
+ function: string;
153
+ meta?: {
154
+ readonly [x: string]: any;
155
+ } | undefined;
156
+ spec: {
157
+ readonly filter: readonly {
158
+ readonly type: string;
159
+ readonly props?: {
160
+ readonly [x: string]: any;
161
+ } | undefined;
162
+ }[];
163
+ readonly type: "subscription";
164
+ readonly options?: {
165
+ readonly deep?: boolean | undefined;
166
+ readonly delay?: number | undefined;
167
+ } | undefined;
168
+ } | {
169
+ readonly type: "timer";
170
+ readonly cron: string;
171
+ } | {
172
+ port?: number | undefined;
173
+ type: "webhook";
174
+ method: string;
175
+ } | {
176
+ readonly type: "websocket";
177
+ readonly url: string;
178
+ readonly init?: {
179
+ readonly [x: string]: any;
180
+ } | undefined;
181
+ };
182
+ } & {
183
+ id: string;
184
+ }, "id">[] | undefined, never>;
185
+ }>;
186
+ export type FunctionManifest = S.Schema.Type<typeof FunctionManifestSchema>;
187
+ export {};
188
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAO,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAKxD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAErF,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;EAiB7B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,QAAA,MAAM,kBAAkB;;;EAGtB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,QAAA,MAAM,oBAAoB;;;;GAOzB,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,QAAA,MAAM,sBAAsB;;;;;;;;EAI1B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAQ5E,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;;;;;;;;;AAEjG;;GAEG;AACH,qBAAa,WAAY,SAAQ,gBAS/B;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAQnC;CAAG;AAEL;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../tools/schema.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/functions",
3
- "version": "0.5.3-main.59db342",
3
+ "version": "0.5.3-main.61bbff4",
4
4
  "description": "Functions SDK and runtime.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,27 +16,39 @@
16
16
  "types": "dist/types/src/index.d.ts",
17
17
  "files": [
18
18
  "dist",
19
+ "schema",
19
20
  "src"
20
21
  ],
21
22
  "dependencies": {
22
23
  "@preact/signals-core": "^1.6.0",
23
24
  "cron": "^3.1.6",
25
+ "effect": "^2.4.19",
24
26
  "express": "^4.19.2",
25
27
  "get-port-please": "^3.1.1",
26
- "@braneframe/types": "0.5.3-main.59db342",
27
- "@dxos/async": "0.5.3-main.59db342",
28
- "@dxos/context": "0.5.3-main.59db342",
29
- "@dxos/client": "0.5.3-main.59db342",
30
- "@dxos/echo-schema": "0.5.3-main.59db342",
31
- "@dxos/log": "0.5.3-main.59db342",
32
- "@dxos/invariant": "0.5.3-main.59db342",
33
- "@dxos/node-std": "0.5.3-main.59db342",
34
- "@dxos/util": "0.5.3-main.59db342"
28
+ "ws": "^8.14.2",
29
+ "@braneframe/types": "0.5.3-main.61bbff4",
30
+ "@dxos/async": "0.5.3-main.61bbff4",
31
+ "@dxos/client": "0.5.3-main.61bbff4",
32
+ "@dxos/context": "0.5.3-main.61bbff4",
33
+ "@dxos/echo-db": "0.5.3-main.61bbff4",
34
+ "@dxos/invariant": "0.5.3-main.61bbff4",
35
+ "@dxos/echo-schema": "0.5.3-main.61bbff4",
36
+ "@dxos/keys": "0.5.3-main.61bbff4",
37
+ "@dxos/log": "0.5.3-main.61bbff4",
38
+ "@dxos/protocols": "0.5.3-main.61bbff4",
39
+ "@dxos/node-std": "0.5.3-main.61bbff4",
40
+ "@dxos/util": "0.5.3-main.61bbff4"
35
41
  },
36
42
  "devDependencies": {
37
- "@types/express": "^4.17.17"
43
+ "@types/express": "^4.17.17",
44
+ "@types/ws": "^7.4.0",
45
+ "@dxos/agent": "0.5.3-main.61bbff4"
38
46
  },
39
47
  "publishConfig": {
40
48
  "access": "public"
49
+ },
50
+ "scripts": {
51
+ "gen-schema": "ts-node ./tools/schema.ts",
52
+ "prebuild": "pnpm gen-schema"
41
53
  }
42
54
  }
@@ -0,0 +1,197 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": [],
5
+ "properties": {
6
+ "functions": {
7
+ "type": "array",
8
+ "items": {
9
+ "type": "object",
10
+ "required": [
11
+ "uri",
12
+ "route",
13
+ "handler"
14
+ ],
15
+ "properties": {
16
+ "uri": {
17
+ "type": "string",
18
+ "description": "a string",
19
+ "title": "string"
20
+ },
21
+ "route": {
22
+ "type": "string",
23
+ "description": "a string",
24
+ "title": "string"
25
+ },
26
+ "handler": {
27
+ "type": "string",
28
+ "description": "a string",
29
+ "title": "string"
30
+ },
31
+ "description": {
32
+ "type": "string",
33
+ "description": "a string",
34
+ "title": "string"
35
+ }
36
+ },
37
+ "additionalProperties": false
38
+ }
39
+ },
40
+ "triggers": {
41
+ "type": "array",
42
+ "items": {
43
+ "type": "object",
44
+ "required": [
45
+ "function",
46
+ "spec"
47
+ ],
48
+ "properties": {
49
+ "function": {
50
+ "type": "string",
51
+ "description": "Function ID/URI.",
52
+ "title": "string"
53
+ },
54
+ "meta": {
55
+ "type": "object",
56
+ "required": [],
57
+ "properties": {},
58
+ "additionalProperties": {
59
+ "$id": "/schemas/any",
60
+ "title": "any"
61
+ }
62
+ },
63
+ "spec": {
64
+ "anyOf": [
65
+ {
66
+ "type": "object",
67
+ "required": [
68
+ "type",
69
+ "cron"
70
+ ],
71
+ "properties": {
72
+ "type": {
73
+ "const": "timer"
74
+ },
75
+ "cron": {
76
+ "type": "string",
77
+ "description": "a string",
78
+ "title": "string"
79
+ }
80
+ },
81
+ "additionalProperties": false
82
+ },
83
+ {
84
+ "type": "object",
85
+ "required": [
86
+ "type",
87
+ "method"
88
+ ],
89
+ "properties": {
90
+ "type": {
91
+ "const": "webhook"
92
+ },
93
+ "method": {
94
+ "type": "string",
95
+ "description": "a string",
96
+ "title": "string"
97
+ },
98
+ "port": {
99
+ "type": "number",
100
+ "description": "a number",
101
+ "title": "number"
102
+ }
103
+ },
104
+ "additionalProperties": false
105
+ },
106
+ {
107
+ "type": "object",
108
+ "required": [
109
+ "type",
110
+ "url"
111
+ ],
112
+ "properties": {
113
+ "type": {
114
+ "const": "websocket"
115
+ },
116
+ "url": {
117
+ "type": "string",
118
+ "description": "a string",
119
+ "title": "string"
120
+ },
121
+ "init": {
122
+ "type": "object",
123
+ "required": [],
124
+ "properties": {},
125
+ "additionalProperties": {
126
+ "$id": "/schemas/any",
127
+ "title": "any"
128
+ }
129
+ }
130
+ },
131
+ "additionalProperties": false
132
+ },
133
+ {
134
+ "type": "object",
135
+ "required": [
136
+ "type",
137
+ "filter"
138
+ ],
139
+ "properties": {
140
+ "type": {
141
+ "const": "subscription"
142
+ },
143
+ "filter": {
144
+ "type": "array",
145
+ "items": {
146
+ "type": "object",
147
+ "required": [
148
+ "type"
149
+ ],
150
+ "properties": {
151
+ "type": {
152
+ "type": "string",
153
+ "description": "a string",
154
+ "title": "string"
155
+ },
156
+ "props": {
157
+ "type": "object",
158
+ "required": [],
159
+ "properties": {},
160
+ "additionalProperties": {
161
+ "$id": "/schemas/any",
162
+ "title": "any"
163
+ }
164
+ }
165
+ },
166
+ "additionalProperties": false
167
+ }
168
+ },
169
+ "options": {
170
+ "type": "object",
171
+ "required": [],
172
+ "properties": {
173
+ "deep": {
174
+ "type": "boolean",
175
+ "description": "a boolean",
176
+ "title": "boolean"
177
+ },
178
+ "delay": {
179
+ "type": "number",
180
+ "description": "a number",
181
+ "title": "number"
182
+ }
183
+ },
184
+ "additionalProperties": false
185
+ }
186
+ },
187
+ "additionalProperties": false
188
+ }
189
+ ]
190
+ }
191
+ },
192
+ "additionalProperties": false
193
+ }
194
+ }
195
+ },
196
+ "additionalProperties": false
197
+ }