@okrlinkhub/agent-factory 0.2.11 → 0.2.12

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 (69) hide show
  1. package/dist/client/_generated/_ignore.d.ts +1 -0
  2. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  3. package/dist/client/_generated/_ignore.js +3 -0
  4. package/dist/client/_generated/_ignore.js.map +1 -0
  5. package/dist/client/bridge.d.ts +65 -0
  6. package/dist/client/bridge.d.ts.map +1 -0
  7. package/dist/client/bridge.js +192 -0
  8. package/dist/client/bridge.js.map +1 -0
  9. package/dist/client/index.d.ts +516 -0
  10. package/dist/client/index.d.ts.map +1 -0
  11. package/dist/client/index.js +795 -0
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/component/_generated/api.d.ts +46 -0
  14. package/dist/component/_generated/api.d.ts.map +1 -0
  15. package/dist/component/_generated/api.js +31 -0
  16. package/dist/component/_generated/api.js.map +1 -0
  17. package/dist/component/_generated/component.d.ts +1396 -0
  18. package/dist/component/_generated/component.d.ts.map +1 -0
  19. package/dist/component/_generated/component.js +11 -0
  20. package/dist/component/_generated/component.js.map +1 -0
  21. package/dist/component/_generated/dataModel.d.ts +46 -0
  22. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  23. package/dist/component/_generated/dataModel.js +11 -0
  24. package/dist/component/_generated/dataModel.js.map +1 -0
  25. package/dist/component/_generated/server.d.ts +121 -0
  26. package/dist/component/_generated/server.d.ts.map +1 -0
  27. package/dist/component/_generated/server.js +78 -0
  28. package/dist/component/_generated/server.js.map +1 -0
  29. package/dist/component/config.d.ts +254 -0
  30. package/dist/component/config.d.ts.map +1 -0
  31. package/dist/component/config.js +152 -0
  32. package/dist/component/config.js.map +1 -0
  33. package/dist/component/convex.config.d.ts +3 -0
  34. package/dist/component/convex.config.d.ts.map +1 -0
  35. package/dist/component/convex.config.js +3 -0
  36. package/dist/component/convex.config.js.map +1 -0
  37. package/dist/component/identity.d.ts +111 -0
  38. package/dist/component/identity.d.ts.map +1 -0
  39. package/dist/component/identity.js +455 -0
  40. package/dist/component/identity.js.map +1 -0
  41. package/dist/component/lib.d.ts +6 -0
  42. package/dist/component/lib.d.ts.map +1 -0
  43. package/dist/component/lib.js +6 -0
  44. package/dist/component/lib.js.map +1 -0
  45. package/dist/component/providers/fly.d.ts +51 -0
  46. package/dist/component/providers/fly.d.ts.map +1 -0
  47. package/dist/component/providers/fly.js +234 -0
  48. package/dist/component/providers/fly.js.map +1 -0
  49. package/dist/component/pushing.d.ts +256 -0
  50. package/dist/component/pushing.d.ts.map +1 -0
  51. package/dist/component/pushing.js +1009 -0
  52. package/dist/component/pushing.js.map +1 -0
  53. package/dist/component/queue.d.ts +361 -0
  54. package/dist/component/queue.d.ts.map +1 -0
  55. package/dist/component/queue.js +1407 -0
  56. package/dist/component/queue.js.map +1 -0
  57. package/dist/component/scheduler.d.ts +116 -0
  58. package/dist/component/scheduler.d.ts.map +1 -0
  59. package/dist/component/scheduler.js +410 -0
  60. package/dist/component/scheduler.js.map +1 -0
  61. package/dist/component/schema.d.ts +648 -0
  62. package/dist/component/schema.d.ts.map +1 -0
  63. package/dist/component/schema.js +295 -0
  64. package/dist/component/schema.js.map +1 -0
  65. package/dist/react/index.d.ts +2 -0
  66. package/dist/react/index.d.ts.map +1 -0
  67. package/dist/react/index.js +6 -0
  68. package/dist/react/index.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,234 @@
1
+ import { v } from "convex/values";
2
+ import { action } from "../_generated/server.js";
3
+ export class FlyMachinesProvider {
4
+ apiToken;
5
+ baseUrl;
6
+ constructor(apiToken, baseUrl = "https://api.machines.dev/v1") {
7
+ this.apiToken = apiToken;
8
+ this.baseUrl = baseUrl;
9
+ }
10
+ async spawnWorker(input) {
11
+ const volumeId = await this.resolveOrCreateVolumeId(input.appName, input.volumeName, input.workerId, input.region, input.volumeSizeGb);
12
+ const payload = {
13
+ name: input.workerId,
14
+ region: input.region,
15
+ config: {
16
+ image: input.image,
17
+ guest: {
18
+ cpu_kind: input.cpuKind ?? "shared",
19
+ cpus: input.cpus ?? 1,
20
+ memory_mb: input.memoryMb ?? 2048,
21
+ },
22
+ mounts: [
23
+ {
24
+ volume: volumeId,
25
+ path: input.volumePath,
26
+ },
27
+ ],
28
+ env: {
29
+ AGENT_FACTORY_WORKER_ID: input.workerId,
30
+ ...input.env,
31
+ },
32
+ },
33
+ };
34
+ const machine = await this.request({
35
+ path: `/apps/${encodeURIComponent(input.appName)}/machines`,
36
+ method: "POST",
37
+ body: payload,
38
+ });
39
+ return {
40
+ workerId: input.workerId,
41
+ machineId: machine.id,
42
+ region: machine.region ?? input.region,
43
+ image: machine.config?.image_ref ?? machine.config?.image ?? input.image,
44
+ status: mapFlyStateToProviderStatus(machine.state),
45
+ };
46
+ }
47
+ async resolveOrCreateVolumeId(appName, volumeNamePrefix, workerId, region, volumeSizeGb) {
48
+ const volumeName = buildDedicatedVolumeName(volumeNamePrefix, workerId);
49
+ const volumes = await this.request({
50
+ path: `/apps/${encodeURIComponent(appName)}/volumes`,
51
+ method: "GET",
52
+ });
53
+ const regionalMatch = volumes.find((volume) => volume.name === volumeName && volume.region === region);
54
+ if (regionalMatch) {
55
+ return regionalMatch.id;
56
+ }
57
+ const created = await this.request({
58
+ path: `/apps/${encodeURIComponent(appName)}/volumes`,
59
+ method: "POST",
60
+ body: {
61
+ name: volumeName,
62
+ region,
63
+ size_gb: volumeSizeGb,
64
+ },
65
+ });
66
+ return created.id;
67
+ }
68
+ async listWorkers(appName) {
69
+ const machines = await this.request({
70
+ path: `/apps/${encodeURIComponent(appName)}/machines`,
71
+ method: "GET",
72
+ });
73
+ return machines.map((machine) => ({
74
+ workerId: machine.name ?? machine.id,
75
+ machineId: machine.id,
76
+ region: machine.region,
77
+ image: machine.config?.image_ref ?? machine.config?.image,
78
+ status: mapFlyStateToProviderStatus(machine.state),
79
+ }));
80
+ }
81
+ async terminateWorker(appName, machineId) {
82
+ const volumeIds = await this.getMachineVolumeIds(appName, machineId);
83
+ await this.request({
84
+ path: `/apps/${encodeURIComponent(appName)}/machines/${encodeURIComponent(machineId)}`,
85
+ method: "DELETE",
86
+ });
87
+ for (const volumeId of volumeIds) {
88
+ try {
89
+ await this.request({
90
+ path: `/apps/${encodeURIComponent(appName)}/volumes/${encodeURIComponent(volumeId)}`,
91
+ method: "DELETE",
92
+ });
93
+ }
94
+ catch (error) {
95
+ if (isFlyNotFoundError(error)) {
96
+ continue;
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ }
102
+ async getMachineVolumeIds(appName, machineId) {
103
+ try {
104
+ const machine = await this.request({
105
+ path: `/apps/${encodeURIComponent(appName)}/machines/${encodeURIComponent(machineId)}`,
106
+ method: "GET",
107
+ });
108
+ const mounts = machine.config?.mounts ?? [];
109
+ const uniqueVolumeIds = new Set(mounts.map((mount) => mount.volume).filter((volumeId) => volumeId.length > 0));
110
+ return Array.from(uniqueVolumeIds);
111
+ }
112
+ catch (error) {
113
+ if (isFlyNotFoundError(error)) {
114
+ return [];
115
+ }
116
+ throw error;
117
+ }
118
+ }
119
+ async cordonWorker(appName, machineId) {
120
+ await this.request({
121
+ path: `/apps/${encodeURIComponent(appName)}/machines/${encodeURIComponent(machineId)}/cordon`,
122
+ method: "POST",
123
+ });
124
+ }
125
+ async stopWorker(appName, machineId) {
126
+ await this.request({
127
+ path: `/apps/${encodeURIComponent(appName)}/machines/${encodeURIComponent(machineId)}/stop`,
128
+ method: "POST",
129
+ });
130
+ }
131
+ async request(input) {
132
+ const response = await fetch(`${this.baseUrl}${input.path}`, {
133
+ method: input.method,
134
+ headers: {
135
+ Authorization: `Bearer ${this.apiToken}`,
136
+ "Content-Type": "application/json",
137
+ },
138
+ body: input.body ? JSON.stringify(input.body) : undefined,
139
+ });
140
+ if (!response.ok) {
141
+ const text = await response.text();
142
+ throw new Error(`Fly API ${input.method} ${input.path} failed: ${text}`);
143
+ }
144
+ if (input.method === "DELETE" || response.status === 204) {
145
+ return undefined;
146
+ }
147
+ const responseBody = await response.text();
148
+ if (!responseBody) {
149
+ return undefined;
150
+ }
151
+ return JSON.parse(responseBody);
152
+ }
153
+ }
154
+ export const deleteFlyVolumeManual = action({
155
+ args: {
156
+ appName: v.string(),
157
+ volumeId: v.string(),
158
+ flyApiToken: v.optional(v.string()),
159
+ },
160
+ returns: v.object({
161
+ ok: v.boolean(),
162
+ status: v.number(),
163
+ message: v.string(),
164
+ }),
165
+ handler: async (ctx, args) => {
166
+ void ctx;
167
+ const appName = args.appName.trim();
168
+ const volumeId = args.volumeId.trim();
169
+ if (appName.length === 0 || volumeId.length === 0) {
170
+ throw new Error("appName e volumeId sono obbligatori.");
171
+ }
172
+ const apiToken = args.flyApiToken?.trim();
173
+ if (!apiToken) {
174
+ throw new Error("flyApiToken mancante: passalo come argomento.");
175
+ }
176
+ const response = await fetch(`https://api.machines.dev/v1/apps/${encodeURIComponent(appName)}/volumes/${encodeURIComponent(volumeId)}`, {
177
+ method: "DELETE",
178
+ headers: {
179
+ Authorization: `Bearer ${apiToken}`,
180
+ },
181
+ });
182
+ const body = await response.text();
183
+ if (!response.ok) {
184
+ throw new Error(`Delete volume fallita (${response.status}): ${body || "errore sconosciuto"}`);
185
+ }
186
+ return {
187
+ ok: true,
188
+ status: response.status,
189
+ message: body || "Volume eliminato.",
190
+ };
191
+ },
192
+ });
193
+ function mapFlyStateToProviderStatus(state) {
194
+ switch (state) {
195
+ case "created":
196
+ case "started":
197
+ return "active";
198
+ case "stopped":
199
+ case "destroyed":
200
+ case "suspended":
201
+ return "stopped";
202
+ default:
203
+ return "stopped";
204
+ }
205
+ }
206
+ function buildDedicatedVolumeName(prefix, workerId) {
207
+ const sanitize = (value) => value
208
+ .toLowerCase()
209
+ .replace(/[^a-z0-9_]/g, "_")
210
+ .replace(/_+/g, "_")
211
+ .replace(/^_+|_+$/g, "");
212
+ const normalizedPrefix = sanitize(prefix) || "openclaw";
213
+ const normalizedWorker = sanitize(workerId) || "worker";
214
+ const workerHash = stableHashBase36(normalizedWorker).slice(0, 8);
215
+ const maxPrefixLen = 30 - 1 - workerHash.length;
216
+ const trimmedPrefix = normalizedPrefix.slice(0, Math.max(1, maxPrefixLen));
217
+ return `${trimmedPrefix}_${workerHash}`;
218
+ }
219
+ function stableHashBase36(input) {
220
+ let hash = 2166136261;
221
+ for (let i = 0; i < input.length; i += 1) {
222
+ hash ^= input.charCodeAt(i);
223
+ hash = Math.imul(hash, 16777619);
224
+ }
225
+ const unsigned = hash >>> 0;
226
+ return unsigned.toString(36);
227
+ }
228
+ function isFlyNotFoundError(error) {
229
+ if (!(error instanceof Error)) {
230
+ return false;
231
+ }
232
+ return /not found|unknown machine|does not exist/i.test(error.message);
233
+ }
234
+ //# sourceMappingURL=fly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fly.js","sourceRoot":"","sources":["../../../src/component/providers/fly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AA2DjD,MAAM,OAAO,mBAAmB;IAEX;IACA;IAFnB,YACmB,QAAgB,EAChB,UAAkB,6BAA6B;QAD/C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAAwC;IAC/D,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,KAAuB;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,uBAAuB,CACjD,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,YAAY,CACnB,CAAC;QACF,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE;oBACL,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;oBACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;oBACrB,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;iBAClC;gBACD,MAAM,EAAE;oBACN;wBACE,MAAM,EAAE,QAAQ;wBAChB,IAAI,EAAE,KAAK,CAAC,UAAU;qBACG;iBAC5B;gBACD,GAAG,EAAE;oBACH,uBAAuB,EAAE,KAAK,CAAC,QAAQ;oBACvC,GAAG,KAAK,CAAC,GAAG;iBACb;aACF;SACF,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAa;YAC7C,IAAI,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW;YAC3D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;YACtC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK;YACxE,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC,KAAK,CAAC;SACnD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,OAAe,EACf,gBAAwB,EACxB,QAAgB,EAChB,MAAc,EACd,YAAoB;QAEpB,MAAM,UAAU,GAAG,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAmB;YACnD,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,UAAU;YACpD,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CACnE,CAAC;QACF,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAY;YAC5C,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,UAAU;YACpD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,UAAU;gBAChB,MAAM;gBACN,OAAO,EAAE,YAAY;aACtB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAoB;YACrD,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,WAAW;YACrD,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAChC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE;YACpC,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK;YACzD,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC,KAAK,CAAC;SACnD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe,EAAE,SAAiB;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,OAAO,CAAO;YACvB,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE;YACtF,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAO;oBACvB,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE;oBACpF,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAiB;QAClE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAa;gBAC7C,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE;gBACtF,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;YAC5C,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAC9E,CAAC;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,SAAiB;QACnD,MAAM,IAAI,CAAC,OAAO,CAAO;YACvB,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,SAAS;YAC7F,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,SAAiB;QACjD,MAAM,IAAI,CAAC,OAAO,CAAO;YACvB,IAAI,EAAE,SAAS,kBAAkB,CAAC,OAAO,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,OAAO;YAC3F,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,KAIxB;QACC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE;YAC3D,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE;gBACxC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACzD,OAAO,SAAc,CAAC;QACxB,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAc,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAM,CAAC;IACvC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;IAC1C,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,KAAK,GAAG,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,oCAAoC,kBAAkB,CAAC,OAAO,CAAC,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EACzG;YACE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,QAAQ,EAAE;aACpC;SACF,CACF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC,CAAC;QACjG,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,IAAI,IAAI,mBAAmB;SACrC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,2BAA2B,CAAC,KAAyB;IAC5D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,QAAgB;IAChE,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CACjC,KAAK;SACF,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;IACxD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAChD,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,OAAO,GAAG,aAAa,IAAI,UAAU,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,256 @@
1
+ import type { Id } from "./_generated/dataModel.js";
2
+ export declare const createPushTemplate: import("convex/server").RegisteredMutation<"public", {
3
+ nowMs?: number | undefined;
4
+ enabled?: boolean | undefined;
5
+ companyId: string;
6
+ periodicity: "manual" | "daily" | "weekly" | "monthly";
7
+ text: string;
8
+ title: string;
9
+ actorUserId: string;
10
+ suggestedTimes: ({
11
+ kind: "daily";
12
+ time: string;
13
+ } | {
14
+ kind: "weekly";
15
+ time: string;
16
+ weekday: number;
17
+ } | {
18
+ kind: "monthly";
19
+ time: string;
20
+ dayOfMonth: number | "last";
21
+ })[];
22
+ templateKey: string;
23
+ }, Promise<import("convex/values").GenericId<"messagePushTemplates">>>;
24
+ export declare const updatePushTemplate: import("convex/server").RegisteredMutation<"public", {
25
+ nowMs?: number | undefined;
26
+ enabled?: boolean | undefined;
27
+ periodicity?: "manual" | "daily" | "weekly" | "monthly" | undefined;
28
+ text?: string | undefined;
29
+ title?: string | undefined;
30
+ suggestedTimes?: ({
31
+ kind: "daily";
32
+ time: string;
33
+ } | {
34
+ kind: "weekly";
35
+ time: string;
36
+ weekday: number;
37
+ } | {
38
+ kind: "monthly";
39
+ time: string;
40
+ dayOfMonth: number | "last";
41
+ })[] | undefined;
42
+ templateId: import("convex/values").GenericId<"messagePushTemplates">;
43
+ actorUserId: string;
44
+ }, Promise<boolean>>;
45
+ export declare const deletePushTemplate: import("convex/server").RegisteredMutation<"public", {
46
+ templateId: import("convex/values").GenericId<"messagePushTemplates">;
47
+ }, Promise<boolean>>;
48
+ export declare const listPushTemplatesByCompany: import("convex/server").RegisteredQuery<"public", {
49
+ includeDisabled?: boolean | undefined;
50
+ companyId: string;
51
+ }, Promise<{
52
+ _id: import("convex/values").GenericId<"messagePushTemplates">;
53
+ companyId: string;
54
+ templateKey: string;
55
+ title: string;
56
+ text: string;
57
+ periodicity: "manual" | "daily" | "weekly" | "monthly";
58
+ suggestedTimes: ({
59
+ kind: "daily";
60
+ time: string;
61
+ } | {
62
+ kind: "weekly";
63
+ time: string;
64
+ weekday: number;
65
+ } | {
66
+ kind: "monthly";
67
+ time: string;
68
+ dayOfMonth: number | "last";
69
+ })[];
70
+ enabled: boolean;
71
+ createdBy: string;
72
+ updatedBy: string;
73
+ createdAt: number;
74
+ updatedAt: number;
75
+ }[]>>;
76
+ export declare const createPushJobFromTemplate: import("convex/server").RegisteredMutation<"public", {
77
+ nowMs?: number | undefined;
78
+ enabled?: boolean | undefined;
79
+ schedule?: {
80
+ kind: "manual";
81
+ } | {
82
+ kind: "daily";
83
+ time: string;
84
+ } | {
85
+ kind: "weekly";
86
+ time: string;
87
+ weekday: number;
88
+ } | {
89
+ kind: "monthly";
90
+ time: string;
91
+ dayOfMonth: number | "last";
92
+ } | undefined;
93
+ consumerUserId: string;
94
+ companyId: string;
95
+ timezone: string;
96
+ templateId: import("convex/values").GenericId<"messagePushTemplates">;
97
+ }, Promise<import("convex/values").GenericId<"messagePushJobs">>>;
98
+ export declare const createPushJobCustom: import("convex/server").RegisteredMutation<"public", {
99
+ nowMs?: number | undefined;
100
+ enabled?: boolean | undefined;
101
+ consumerUserId: string;
102
+ companyId: string;
103
+ periodicity: "manual" | "daily" | "weekly" | "monthly";
104
+ schedule: {
105
+ kind: "manual";
106
+ } | {
107
+ kind: "daily";
108
+ time: string;
109
+ } | {
110
+ kind: "weekly";
111
+ time: string;
112
+ weekday: number;
113
+ } | {
114
+ kind: "monthly";
115
+ time: string;
116
+ dayOfMonth: number | "last";
117
+ };
118
+ text: string;
119
+ timezone: string;
120
+ title: string;
121
+ }, Promise<import("convex/values").GenericId<"messagePushJobs">>>;
122
+ export declare const updatePushJob: import("convex/server").RegisteredMutation<"public", {
123
+ nowMs?: number | undefined;
124
+ enabled?: boolean | undefined;
125
+ periodicity?: "manual" | "daily" | "weekly" | "monthly" | undefined;
126
+ schedule?: {
127
+ kind: "manual";
128
+ } | {
129
+ kind: "daily";
130
+ time: string;
131
+ } | {
132
+ kind: "weekly";
133
+ time: string;
134
+ weekday: number;
135
+ } | {
136
+ kind: "monthly";
137
+ time: string;
138
+ dayOfMonth: number | "last";
139
+ } | undefined;
140
+ text?: string | undefined;
141
+ timezone?: string | undefined;
142
+ title?: string | undefined;
143
+ jobId: import("convex/values").GenericId<"messagePushJobs">;
144
+ }, Promise<boolean>>;
145
+ export declare const deletePushJob: import("convex/server").RegisteredMutation<"public", {
146
+ jobId: import("convex/values").GenericId<"messagePushJobs">;
147
+ }, Promise<boolean>>;
148
+ export declare const setPushJobEnabled: import("convex/server").RegisteredMutation<"public", {
149
+ nowMs?: number | undefined;
150
+ enabled: boolean;
151
+ jobId: import("convex/values").GenericId<"messagePushJobs">;
152
+ }, Promise<boolean>>;
153
+ export declare const listPushJobsForUser: import("convex/server").RegisteredQuery<"public", {
154
+ includeDisabled?: boolean | undefined;
155
+ consumerUserId: string;
156
+ }, Promise<{
157
+ _id: import("convex/values").GenericId<"messagePushJobs">;
158
+ companyId: string;
159
+ consumerUserId: string;
160
+ agentKey: string | null;
161
+ sourceTemplateId: import("convex/values").GenericId<"messagePushTemplates"> | null;
162
+ title: string;
163
+ text: string;
164
+ periodicity: "manual" | "daily" | "weekly" | "monthly";
165
+ timezone: string;
166
+ schedule: {
167
+ kind: "manual";
168
+ } | {
169
+ kind: "daily";
170
+ time: string;
171
+ } | {
172
+ kind: "weekly";
173
+ time: string;
174
+ weekday: number;
175
+ } | {
176
+ kind: "monthly";
177
+ time: string;
178
+ dayOfMonth: number | "last";
179
+ };
180
+ enabled: boolean;
181
+ nextRunAt: number | null;
182
+ lastRunAt: number | null;
183
+ lastRunKey: string | null;
184
+ createdAt: number;
185
+ updatedAt: number;
186
+ }[]>>;
187
+ export declare const triggerPushJobNow: import("convex/server").RegisteredMutation<"public", {
188
+ nowMs?: number | undefined;
189
+ providerConfig?: {
190
+ appName: string;
191
+ kind: "fly" | "runpod" | "ecs";
192
+ organizationSlug: string;
193
+ image: string;
194
+ region: string;
195
+ volumeName: string;
196
+ volumePath: string;
197
+ volumeSizeGb: number;
198
+ } | undefined;
199
+ jobId: import("convex/values").GenericId<"messagePushJobs">;
200
+ }, Promise<{
201
+ enqueuedMessageId: Id<"messageQueue">;
202
+ runKey: string;
203
+ }>>;
204
+ export declare const dispatchDuePushJobs: import("convex/server").RegisteredMutation<"public", {
205
+ nowMs?: number | undefined;
206
+ providerConfig?: {
207
+ appName: string;
208
+ kind: "fly" | "runpod" | "ecs";
209
+ organizationSlug: string;
210
+ image: string;
211
+ region: string;
212
+ volumeName: string;
213
+ volumePath: string;
214
+ volumeSizeGb: number;
215
+ } | undefined;
216
+ limit?: number | undefined;
217
+ }, Promise<{
218
+ scanned: number;
219
+ enqueued: number;
220
+ skipped: number;
221
+ failed: number;
222
+ }>>;
223
+ export declare const sendBroadcastToAllActiveAgents: import("convex/server").RegisteredMutation<"public", {
224
+ nowMs?: number | undefined;
225
+ providerConfig?: {
226
+ appName: string;
227
+ kind: "fly" | "runpod" | "ecs";
228
+ organizationSlug: string;
229
+ image: string;
230
+ region: string;
231
+ volumeName: string;
232
+ volumePath: string;
233
+ volumeSizeGb: number;
234
+ } | undefined;
235
+ companyId: string;
236
+ text: string;
237
+ title: string;
238
+ requestedBy: string;
239
+ }, Promise<{
240
+ broadcastId: import("convex/values").GenericId<"messagePushBroadcasts">;
241
+ totalTargets: number;
242
+ enqueued: number;
243
+ failed: number;
244
+ }>>;
245
+ export declare const listPushDispatchesByJob: import("convex/server").RegisteredQuery<"public", {
246
+ limit?: number | undefined;
247
+ jobId: import("convex/values").GenericId<"messagePushJobs">;
248
+ }, Promise<{
249
+ _id: import("convex/values").GenericId<"messagePushDispatches">;
250
+ runKey: string;
251
+ status: "failed" | "enqueued" | "skipped";
252
+ scheduledFor: number;
253
+ createdAt: number;
254
+ error: string | null;
255
+ }[]>>;
256
+ //# sourceMappingURL=pushing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pushing.d.ts","sourceRoot":"","sources":["../../src/component/pushing.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AAkGpD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;sEAuC7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;oBA8B7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;oBAW7B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;iEAuDpC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;iEA6C9B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;oBA4CxB,CAAC;AAEH,eAAO,MAAM,aAAa;;oBAWxB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;oBA4B5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuC9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;GA8E5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;GAqH9B,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;GAuGzC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;KA+BlC,CAAC"}