jazz-run 0.18.26 → 0.18.28
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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +29 -0
- package/dist/index.js +116 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
- package/src/index.ts +197 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# jazz-run
|
|
2
2
|
|
|
3
|
+
## 0.18.28
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 52c8c89: Add webhook registries and the ability to run and create them with jazz-run
|
|
8
|
+
- Updated dependencies [52c8c89]
|
|
9
|
+
- Updated dependencies [8cbbe0e]
|
|
10
|
+
- Updated dependencies [14806c8]
|
|
11
|
+
- Updated dependencies [e8880dc]
|
|
12
|
+
- Updated dependencies [d83b5e3]
|
|
13
|
+
- Updated dependencies [5320349]
|
|
14
|
+
- jazz-webhook@0.18.28
|
|
15
|
+
- jazz-tools@0.18.28
|
|
16
|
+
- cojson@0.18.28
|
|
17
|
+
- cojson-storage-sqlite@0.18.28
|
|
18
|
+
- cojson-transport-ws@0.18.28
|
|
19
|
+
|
|
20
|
+
## 0.18.27
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [6c6eb35]
|
|
25
|
+
- Updated dependencies [6ca0b59]
|
|
26
|
+
- Updated dependencies [88c5f1c]
|
|
27
|
+
- jazz-tools@0.18.27
|
|
28
|
+
- cojson@0.18.27
|
|
29
|
+
- cojson-storage-sqlite@0.18.27
|
|
30
|
+
- cojson-transport-ws@0.18.27
|
|
31
|
+
|
|
3
32
|
## 0.18.26
|
|
4
33
|
|
|
5
34
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,9 @@ import { Console, Effect } from "effect";
|
|
|
6
6
|
import { createWorkerAccount } from "./createWorkerAccount.js";
|
|
7
7
|
import { startSyncServer } from "./startSyncServer.js";
|
|
8
8
|
import { serverDefaults } from "./config.js";
|
|
9
|
+
import { startWorker } from "jazz-tools/worker";
|
|
10
|
+
import { RegistryState, WebhookRegistry } from "jazz-webhook";
|
|
11
|
+
import { co } from "jazz-tools";
|
|
9
12
|
const jazzTools = Command.make("jazz-tools");
|
|
10
13
|
const nameOption = Options.text("name").pipe(Options.withAlias("n"));
|
|
11
14
|
const jsonOption = Options.boolean("json");
|
|
@@ -60,7 +63,119 @@ const startSyncServerCommand = Command.make("sync", {
|
|
|
60
63
|
yield* Effect.never;
|
|
61
64
|
});
|
|
62
65
|
});
|
|
63
|
-
const
|
|
66
|
+
const webhookRunCommand = Command.make("run", {
|
|
67
|
+
peer: peerOption,
|
|
68
|
+
}, ({ peer }) => {
|
|
69
|
+
return Effect.gen(function* () {
|
|
70
|
+
const webhookRegistrySecret = process.env.JAZZ_WEBHOOK_REGISTRY_SECRET;
|
|
71
|
+
if (!webhookRegistrySecret) {
|
|
72
|
+
throw new Error("JAZZ_WEBHOOK_REGISTRY_SECRET is not set");
|
|
73
|
+
}
|
|
74
|
+
const [registryID, registryAccountID, registryAccountSecret] = webhookRegistrySecret.split("__");
|
|
75
|
+
if (!registryID || !registryAccountID || !registryAccountSecret) {
|
|
76
|
+
throw new Error("Invalid JAZZ_WEBHOOK_REGISTRY_SECRET");
|
|
77
|
+
}
|
|
78
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() => startWorker({
|
|
79
|
+
syncServer: peer,
|
|
80
|
+
accountID: registryAccountID,
|
|
81
|
+
accountSecret: registryAccountSecret,
|
|
82
|
+
}));
|
|
83
|
+
const webhook = yield* Effect.promise(() => WebhookRegistry.loadAndStart(registryID));
|
|
84
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => webhook.shutdown()));
|
|
85
|
+
yield* Effect.addFinalizer(() => Effect.promise(() => shutdownWorker()));
|
|
86
|
+
yield* Console.log(`Webhook registry ${registryID} running as ${registryAccountID}`);
|
|
87
|
+
// Wait until interrupt
|
|
88
|
+
yield* Effect.never;
|
|
89
|
+
}).pipe(Effect.scoped);
|
|
90
|
+
});
|
|
91
|
+
const grantRegistrationRights = ({ peer, accountID, webhookRegistrySecret, }) => {
|
|
92
|
+
return Effect.gen(function* () {
|
|
93
|
+
webhookRegistrySecret =
|
|
94
|
+
webhookRegistrySecret || process.env.JAZZ_WEBHOOK_REGISTRY_SECRET;
|
|
95
|
+
if (!webhookRegistrySecret) {
|
|
96
|
+
throw new Error("JAZZ_WEBHOOK_REGISTRY_SECRET is not set");
|
|
97
|
+
}
|
|
98
|
+
const [registryID, registryAccountID, registryAccountSecret] = webhookRegistrySecret.split("__");
|
|
99
|
+
if (!registryID || !registryAccountID || !registryAccountSecret) {
|
|
100
|
+
throw new Error("Invalid JAZZ_WEBHOOK_REGISTRY_SECRET");
|
|
101
|
+
}
|
|
102
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() => startWorker({
|
|
103
|
+
syncServer: peer,
|
|
104
|
+
accountID: registryAccountID,
|
|
105
|
+
accountSecret: registryAccountSecret,
|
|
106
|
+
}));
|
|
107
|
+
const registry = yield* Effect.promise(() => RegistryState.load(registryID));
|
|
108
|
+
const account = yield* Effect.promise(() => co.account().load(accountID));
|
|
109
|
+
if (!account) {
|
|
110
|
+
throw new Error("Account not found");
|
|
111
|
+
}
|
|
112
|
+
if (!registry) {
|
|
113
|
+
throw new Error("Couldn't load registry with ID " + registryID);
|
|
114
|
+
}
|
|
115
|
+
registry.$jazz.owner.addMember(account, "writer");
|
|
116
|
+
yield* Console.error("Webhook registration rights granted to " +
|
|
117
|
+
accountID +
|
|
118
|
+
" for registry " +
|
|
119
|
+
registryID +
|
|
120
|
+
" ✅");
|
|
121
|
+
yield* Effect.promise(() => shutdownWorker());
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
const accountIDOption = Options.text("accountID").pipe(Options.withAlias("a"));
|
|
125
|
+
const webhookGrantCommand = Command.make("grant", {
|
|
126
|
+
peer: peerOption,
|
|
127
|
+
accountID: accountIDOption,
|
|
128
|
+
}, grantRegistrationRights);
|
|
129
|
+
const webhookRevokeCommand = Command.make("revoke", {
|
|
130
|
+
peer: peerOption,
|
|
131
|
+
accountID: accountIDOption,
|
|
132
|
+
}, ({ peer, accountID }) => {
|
|
133
|
+
return Effect.gen(function* () {
|
|
134
|
+
yield* Console.log("NOT IMPLEMENTED");
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
const grantOption = Options.text("grant")
|
|
138
|
+
.pipe(Options.withAlias("g"))
|
|
139
|
+
.pipe(Options.optional);
|
|
140
|
+
const webhookCreateRegistryCommand = Command.make("create-registry", {
|
|
141
|
+
peer: peerOption,
|
|
142
|
+
grant: grantOption,
|
|
143
|
+
}, ({ peer, grant }) => {
|
|
144
|
+
return Effect.gen(function* () {
|
|
145
|
+
const { accountID, agentSecret } = yield* Effect.promise(() => createWorkerAccount({ name: "Webhook Worker", peer }));
|
|
146
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() => startWorker({
|
|
147
|
+
syncServer: peer,
|
|
148
|
+
accountID,
|
|
149
|
+
accountSecret: agentSecret,
|
|
150
|
+
}));
|
|
151
|
+
const registryGroup = co.group().create({ owner: worker });
|
|
152
|
+
const registry = WebhookRegistry.createRegistry(registryGroup);
|
|
153
|
+
const webhookRegistrySecret = registry.$jazz.id + "__" + accountID + "__" + agentSecret;
|
|
154
|
+
yield* Console.log("# Credentials for *running* the Jazz webhook registry:");
|
|
155
|
+
yield* Console.log("JAZZ_WEBHOOK_REGISTRY_SECRET=" + webhookRegistrySecret);
|
|
156
|
+
yield* Console.log("# Registry ID for *registering* webhooks:");
|
|
157
|
+
yield* Console.log("JAZZ_WEBHOOK_REGISTRY_ID=" + registry.$jazz.id);
|
|
158
|
+
yield* Effect.promise(() => shutdownWorker());
|
|
159
|
+
if (grant._tag === "Some") {
|
|
160
|
+
yield* grantRegistrationRights({
|
|
161
|
+
peer,
|
|
162
|
+
accountID: grant.value,
|
|
163
|
+
webhookRegistrySecret,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
const webhookCommand = Command.make("webhook").pipe(Command.withSubcommands([
|
|
169
|
+
webhookRunCommand,
|
|
170
|
+
webhookCreateRegistryCommand,
|
|
171
|
+
webhookGrantCommand,
|
|
172
|
+
webhookRevokeCommand,
|
|
173
|
+
]));
|
|
174
|
+
const command = jazzTools.pipe(Command.withSubcommands([
|
|
175
|
+
accountCommand,
|
|
176
|
+
startSyncServerCommand,
|
|
177
|
+
webhookCommand,
|
|
178
|
+
]));
|
|
64
179
|
const cli = Command.run(command, {
|
|
65
180
|
name: "Jazz CLI Tools",
|
|
66
181
|
version: "v0.8.11",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,uCAAuC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"bin": "./dist/index.js",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.18.
|
|
6
|
+
"version": "0.18.28",
|
|
7
7
|
"exports": {
|
|
8
8
|
"./startSyncServer": {
|
|
9
9
|
"types": "./dist/startSyncServer.d.ts",
|
|
@@ -21,11 +21,12 @@
|
|
|
21
21
|
"@effect/printer-ansi": "^0.34.5",
|
|
22
22
|
"@effect/schema": "^0.71.1",
|
|
23
23
|
"@effect/typeclass": "^0.25.5",
|
|
24
|
-
"cojson": "0.18.
|
|
25
|
-
"cojson-storage-sqlite": "0.18.
|
|
26
|
-
"cojson-transport-ws": "0.18.
|
|
24
|
+
"cojson": "0.18.28",
|
|
25
|
+
"cojson-storage-sqlite": "0.18.28",
|
|
26
|
+
"cojson-transport-ws": "0.18.28",
|
|
27
27
|
"effect": "^3.6.5",
|
|
28
|
-
"jazz-tools": "0.18.
|
|
28
|
+
"jazz-tools": "0.18.28",
|
|
29
|
+
"jazz-webhook": "0.18.28",
|
|
29
30
|
"ws": "^8.14.2"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,9 @@ import { Console, Effect } from "effect";
|
|
|
6
6
|
import { createWorkerAccount } from "./createWorkerAccount.js";
|
|
7
7
|
import { startSyncServer } from "./startSyncServer.js";
|
|
8
8
|
import { serverDefaults } from "./config.js";
|
|
9
|
+
import { startWorker } from "jazz-tools/worker";
|
|
10
|
+
import { RegistryState, WebhookRegistry } from "jazz-webhook";
|
|
11
|
+
import { co } from "jazz-tools";
|
|
9
12
|
|
|
10
13
|
const jazzTools = Command.make("jazz-tools");
|
|
11
14
|
|
|
@@ -106,8 +109,201 @@ const startSyncServerCommand = Command.make(
|
|
|
106
109
|
},
|
|
107
110
|
);
|
|
108
111
|
|
|
112
|
+
const webhookRunCommand = Command.make(
|
|
113
|
+
"run",
|
|
114
|
+
{
|
|
115
|
+
peer: peerOption,
|
|
116
|
+
},
|
|
117
|
+
({ peer }) => {
|
|
118
|
+
return Effect.gen(function* () {
|
|
119
|
+
const webhookRegistrySecret = process.env.JAZZ_WEBHOOK_REGISTRY_SECRET;
|
|
120
|
+
|
|
121
|
+
if (!webhookRegistrySecret) {
|
|
122
|
+
throw new Error("JAZZ_WEBHOOK_REGISTRY_SECRET is not set");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const [registryID, registryAccountID, registryAccountSecret] =
|
|
126
|
+
webhookRegistrySecret.split("__");
|
|
127
|
+
|
|
128
|
+
if (!registryID || !registryAccountID || !registryAccountSecret) {
|
|
129
|
+
throw new Error("Invalid JAZZ_WEBHOOK_REGISTRY_SECRET");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() =>
|
|
133
|
+
startWorker({
|
|
134
|
+
syncServer: peer,
|
|
135
|
+
accountID: registryAccountID,
|
|
136
|
+
accountSecret: registryAccountSecret,
|
|
137
|
+
}),
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
const webhook = yield* Effect.promise(() =>
|
|
141
|
+
WebhookRegistry.loadAndStart(registryID),
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => webhook.shutdown()));
|
|
145
|
+
yield* Effect.addFinalizer(() => Effect.promise(() => shutdownWorker()));
|
|
146
|
+
|
|
147
|
+
yield* Console.log(
|
|
148
|
+
`Webhook registry ${registryID} running as ${registryAccountID}`,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// Wait until interrupt
|
|
152
|
+
yield* Effect.never;
|
|
153
|
+
}).pipe(Effect.scoped);
|
|
154
|
+
},
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
const grantRegistrationRights = ({
|
|
158
|
+
peer,
|
|
159
|
+
accountID,
|
|
160
|
+
webhookRegistrySecret,
|
|
161
|
+
}: {
|
|
162
|
+
peer: string;
|
|
163
|
+
accountID: string;
|
|
164
|
+
webhookRegistrySecret?: string;
|
|
165
|
+
}) => {
|
|
166
|
+
return Effect.gen(function* () {
|
|
167
|
+
webhookRegistrySecret =
|
|
168
|
+
webhookRegistrySecret || process.env.JAZZ_WEBHOOK_REGISTRY_SECRET;
|
|
169
|
+
|
|
170
|
+
if (!webhookRegistrySecret) {
|
|
171
|
+
throw new Error("JAZZ_WEBHOOK_REGISTRY_SECRET is not set");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const [registryID, registryAccountID, registryAccountSecret] =
|
|
175
|
+
webhookRegistrySecret.split("__");
|
|
176
|
+
|
|
177
|
+
if (!registryID || !registryAccountID || !registryAccountSecret) {
|
|
178
|
+
throw new Error("Invalid JAZZ_WEBHOOK_REGISTRY_SECRET");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() =>
|
|
182
|
+
startWorker({
|
|
183
|
+
syncServer: peer,
|
|
184
|
+
accountID: registryAccountID,
|
|
185
|
+
accountSecret: registryAccountSecret,
|
|
186
|
+
}),
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
const registry = yield* Effect.promise(() =>
|
|
190
|
+
RegistryState.load(registryID),
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
const account = yield* Effect.promise(() => co.account().load(accountID));
|
|
194
|
+
|
|
195
|
+
if (!account) {
|
|
196
|
+
throw new Error("Account not found");
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (!registry) {
|
|
200
|
+
throw new Error("Couldn't load registry with ID " + registryID);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
registry.$jazz.owner.addMember(account, "writer");
|
|
204
|
+
|
|
205
|
+
yield* Console.error(
|
|
206
|
+
"Webhook registration rights granted to " +
|
|
207
|
+
accountID +
|
|
208
|
+
" for registry " +
|
|
209
|
+
registryID +
|
|
210
|
+
" ✅",
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
yield* Effect.promise(() => shutdownWorker());
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const accountIDOption = Options.text("accountID").pipe(Options.withAlias("a"));
|
|
218
|
+
|
|
219
|
+
const webhookGrantCommand = Command.make(
|
|
220
|
+
"grant",
|
|
221
|
+
{
|
|
222
|
+
peer: peerOption,
|
|
223
|
+
accountID: accountIDOption,
|
|
224
|
+
},
|
|
225
|
+
grantRegistrationRights,
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const webhookRevokeCommand = Command.make(
|
|
229
|
+
"revoke",
|
|
230
|
+
{
|
|
231
|
+
peer: peerOption,
|
|
232
|
+
accountID: accountIDOption,
|
|
233
|
+
},
|
|
234
|
+
({ peer, accountID }) => {
|
|
235
|
+
return Effect.gen(function* () {
|
|
236
|
+
yield* Console.log("NOT IMPLEMENTED");
|
|
237
|
+
});
|
|
238
|
+
},
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
const grantOption = Options.text("grant")
|
|
242
|
+
.pipe(Options.withAlias("g"))
|
|
243
|
+
.pipe(Options.optional);
|
|
244
|
+
|
|
245
|
+
const webhookCreateRegistryCommand = Command.make(
|
|
246
|
+
"create-registry",
|
|
247
|
+
{
|
|
248
|
+
peer: peerOption,
|
|
249
|
+
grant: grantOption,
|
|
250
|
+
},
|
|
251
|
+
({ peer, grant }) => {
|
|
252
|
+
return Effect.gen(function* () {
|
|
253
|
+
const { accountID, agentSecret } = yield* Effect.promise(() =>
|
|
254
|
+
createWorkerAccount({ name: "Webhook Worker", peer }),
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
const { worker, shutdownWorker } = yield* Effect.promise(() =>
|
|
258
|
+
startWorker({
|
|
259
|
+
syncServer: peer,
|
|
260
|
+
accountID,
|
|
261
|
+
accountSecret: agentSecret,
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
const registryGroup = co.group().create({ owner: worker });
|
|
266
|
+
const registry = WebhookRegistry.createRegistry(registryGroup);
|
|
267
|
+
const webhookRegistrySecret =
|
|
268
|
+
registry.$jazz.id + "__" + accountID + "__" + agentSecret;
|
|
269
|
+
|
|
270
|
+
yield* Console.log(
|
|
271
|
+
"# Credentials for *running* the Jazz webhook registry:",
|
|
272
|
+
);
|
|
273
|
+
yield* Console.log(
|
|
274
|
+
"JAZZ_WEBHOOK_REGISTRY_SECRET=" + webhookRegistrySecret,
|
|
275
|
+
);
|
|
276
|
+
yield* Console.log("# Registry ID for *registering* webhooks:");
|
|
277
|
+
yield* Console.log("JAZZ_WEBHOOK_REGISTRY_ID=" + registry.$jazz.id);
|
|
278
|
+
|
|
279
|
+
yield* Effect.promise(() => shutdownWorker());
|
|
280
|
+
|
|
281
|
+
if (grant._tag === "Some") {
|
|
282
|
+
yield* grantRegistrationRights({
|
|
283
|
+
peer,
|
|
284
|
+
accountID: grant.value,
|
|
285
|
+
webhookRegistrySecret,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
},
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
const webhookCommand = Command.make("webhook").pipe(
|
|
293
|
+
Command.withSubcommands([
|
|
294
|
+
webhookRunCommand,
|
|
295
|
+
webhookCreateRegistryCommand,
|
|
296
|
+
webhookGrantCommand,
|
|
297
|
+
webhookRevokeCommand,
|
|
298
|
+
]),
|
|
299
|
+
);
|
|
300
|
+
|
|
109
301
|
const command = jazzTools.pipe(
|
|
110
|
-
Command.withSubcommands([
|
|
302
|
+
Command.withSubcommands([
|
|
303
|
+
accountCommand,
|
|
304
|
+
startSyncServerCommand,
|
|
305
|
+
webhookCommand,
|
|
306
|
+
]),
|
|
111
307
|
);
|
|
112
308
|
|
|
113
309
|
const cli = Command.run(command, {
|