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.
@@ -1,4 +1,4 @@
1
1
 
2
- > jazz-run@0.18.26 build /home/runner/_work/jazz/jazz/packages/jazz-run
2
+ > jazz-run@0.18.28 build /home/runner/_work/jazz/jazz/packages/jazz-run
3
3
  > rm -rf ./dist && tsc --sourceMap --outDir dist && chmod +x ./dist/index.js
4
4
 
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 command = jazzTools.pipe(Command.withSubcommands([accountCommand, startSyncServerCommand]));
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":"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"}
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;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAEhC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAE7C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAEvD,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CACvC,QAAQ,EACR,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EACxD,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;IACvB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CACpC,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;kCACO,IAAI;sBAChB,SAAS;qBACV,WAAW;CAC/B,CAAC,CAAC;QACG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACjD,OAAO,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAChD,CAAC;AAEF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,CACH,OAAO,CAAC,eAAe,CACrB,qCAAqC,cAAc,CAAC,IAAI,EAAE,CAC3D,CACF;KACA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAElD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,CACH,OAAO,CAAC,eAAe,CACrB,gEAAgE,cAAc,CAAC,IAAI,EAAE,CACtF,CACF;KACA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE7D,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CACtD,OAAO,CAAC,eAAe,CAAC,iDAAiD,CAAC,CAC3E,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;KAChC,IAAI,CACH,OAAO,CAAC,eAAe,CACrB,6DAA6D,cAAc,CAAC,EAAE,GAAG,CAClF,CACF;KACA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhD,MAAM,sBAAsB,GAAG,OAAO,CAAC,IAAI,CACzC,MAAM,EACN;IACE,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,cAAc;IACxB,EAAE,EAAE,QAAQ;CACb,EACD,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CACxC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAC9C,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,aAAa,GACjB,OAAO,aAAa,KAAK,QAAQ;YAC/B,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE;YAClD,CAAC,CAAC,aAAa,CAAC;QAEpB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAChB,wCAAwC,aAAa,EAAE,CACxD,CAAC;QAEF,qBAAqB;QACrB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CACpC,KAAK,EACL;IACE,IAAI,EAAE,UAAU;CACjB,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IACX,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAEvE,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,GAC1D,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,WAAW,CAAC;YACV,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,iBAAiB;YAC5B,aAAa,EAAE,qBAAqB;SACrC,CAAC,CACH,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CACzC,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CACzC,CAAC;QAEF,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAEzE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAChB,oBAAoB,UAAU,eAAe,iBAAiB,EAAE,CACjE,CAAC;QAEF,uBAAuB;QACvB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC,CACF,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,EAC/B,IAAI,EACJ,SAAS,EACT,qBAAqB,GAKtB,EAAE,EAAE;IACH,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,qBAAqB;YACnB,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAEpE,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,GAC1D,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,WAAW,CAAC;YACV,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,iBAAiB;YAC5B,aAAa,EAAE,qBAAqB;SACrC,CAAC,CACH,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC1C,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAC/B,CAAC;QAEF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,UAAU,CAAC,CAAC;QAClE,CAAC;QAED,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAElD,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAClB,yCAAyC;YACvC,SAAS;YACT,gBAAgB;YAChB,UAAU;YACV,IAAI,CACP,CAAC;QAEF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/E,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CACtC,OAAO,EACP;IACE,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,eAAe;CAC3B,EACD,uBAAuB,CACxB,CAAC;AAEF,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CACvC,QAAQ,EACR;IACE,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,eAAe;CAC3B,EACD,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE1B,MAAM,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAC/C,iBAAiB,EACjB;IACE,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;CACnB,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IAClB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,mBAAmB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CACtD,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC5D,WAAW,CAAC;YACV,UAAU,EAAE,IAAI;YAChB,SAAS;YACT,aAAa,EAAE,WAAW;SAC3B,CAAC,CACH,CAAC;QAEF,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,qBAAqB,GACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC;QAE5D,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAChB,wDAAwD,CACzD,CAAC;QACF,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAChB,+BAA+B,GAAG,qBAAqB,CACxD,CAAC;QACF,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAChE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEpE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,CAAC,uBAAuB,CAAC;gBAC7B,IAAI;gBACJ,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,qBAAqB;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACjD,OAAO,CAAC,eAAe,CAAC;IACtB,iBAAiB;IACjB,4BAA4B;IAC5B,mBAAmB;IACnB,oBAAoB;CACrB,CAAC,CACH,CAAC;AAEF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAC5B,OAAO,CAAC,eAAe,CAAC;IACtB,cAAc;IACd,sBAAsB;IACtB,cAAc;CACf,CAAC,CACH,CAAC;AAEF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;IAC/B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EACjC,WAAW,CAAC,OAAO,CACpB,CAAC"}
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.26",
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.26",
25
- "cojson-storage-sqlite": "0.18.26",
26
- "cojson-transport-ws": "0.18.26",
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.26",
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([accountCommand, startSyncServerCommand]),
302
+ Command.withSubcommands([
303
+ accountCommand,
304
+ startSyncServerCommand,
305
+ webhookCommand,
306
+ ]),
111
307
  );
112
308
 
113
309
  const cli = Command.run(command, {