@crowdedkingdoms/crowdyjs 17.9.0-dev.1 → 17.11.0-dev.1

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,6 +1,7 @@
1
1
  import type { DecoderOptions } from '@msgpack/msgpack';
2
2
  import type { GraphQLClient } from '../client.js';
3
3
  import { CrowdyError } from '../errors.js';
4
+ import { type ExecAppStatusFieldsFragment, type ExecBuildFieldsFragment, type ExecInstancesQuery, type ExecLogsQuery, type ExecVersionsQuery } from '../generated/graphql.js';
4
5
  /**
5
6
  * ck-exec, the hub-and-spoke execution service (dev-tier preview).
6
7
  *
@@ -180,7 +181,9 @@ export declare class ExecConnection {
180
181
  export interface ExecNodeTypeInput {
181
182
  kind: 'hub' | 'spoke';
182
183
  /** The compiled module (`wasm32-unknown-unknown`, built with `ckx-sdk`). */
183
- wasm: Uint8Array;
184
+ wasm?: Uint8Array;
185
+ /** Instead of `wasm`: a crate of the deploy's `buildId`. */
186
+ crate?: string;
184
187
  /** The type that owns this one; none for the root. */
185
188
  parent?: string;
186
189
  /** Clients may call it through the gateway. */
@@ -195,11 +198,126 @@ export interface ExecDeployOptions {
195
198
  /** The root hub's type name. */
196
199
  root: string;
197
200
  types: Record<string, ExecNodeTypeInput>;
201
+ /** A succeeded {@link ExecAPI.build} of this app whose crates the types may name. */
202
+ buildId?: string;
198
203
  }
199
- /** `client.exec`: connecting players to ck-exec, and deploying an app's nodes. */
204
+ /** One crate for {@link ExecAPI.build}: its files by path (`Cargo.toml`, `src/lib.rs`, ...). */
205
+ export interface ExecCrate {
206
+ name: string;
207
+ files: Record<string, string> | ExecSourceFile[];
208
+ }
209
+ export interface ExecSourceFile {
210
+ path: string;
211
+ content: string;
212
+ }
213
+ /** A build: `queued`, `building`, `succeeded` or `failed`, its log, and one module per crate. */
214
+ export type ExecBuild = Omit<ExecBuildFieldsFragment, '__typename' | 'artifacts'> & {
215
+ artifacts: Array<{
216
+ crate: string;
217
+ digest: string;
218
+ sizeBytes: number;
219
+ }>;
220
+ };
221
+ /** A starter crate, with its files ready for {@link ExecAPI.build}. */
222
+ export interface ExecStarter {
223
+ crate: string;
224
+ nodeType: string;
225
+ description: string;
226
+ files: ExecSourceFile[];
227
+ }
228
+ /** The starter packs, and the manifest that deploys them as one app, its types naming their crates. */
229
+ export interface ExecStarterPack {
230
+ manifest: {
231
+ root: string;
232
+ types: Record<string, ExecNodeTypeInput>;
233
+ };
234
+ starters: ExecStarter[];
235
+ }
236
+ /** One guest log line (`ctx.log`); `level` is 0 error, 1 warn, 2 info, 3 debug. */
237
+ export type ExecLogLine = Omit<ExecLogsQuery['execLogs'][number], '__typename'>;
238
+ /** An instance the execution manager has placed. */
239
+ export type ExecInstance = Omit<ExecInstancesQuery['execInstances'][number], '__typename'>;
240
+ /** A deployed version. */
241
+ export type ExecVersion = Omit<ExecVersionsQuery['execVersions'][number], '__typename'>;
242
+ /** An app's active version, kill switches and budget pause. */
243
+ export type ExecAppStatus = Omit<ExecAppStatusFieldsFragment, '__typename'>;
244
+ export interface ExecLogsOptions {
245
+ nodeType?: string;
246
+ key?: string;
247
+ /** The least severe level included: 0 errors only … 3 everything (the default). */
248
+ maxLevel?: number;
249
+ /** Only lines older than this line id, to page back. */
250
+ before?: string;
251
+ /** At most this many lines (default 100, at most 500). */
252
+ limit?: number;
253
+ }
254
+ /**
255
+ * `client.exec`: connecting players to ck-exec, building and deploying an app's nodes (and
256
+ * the starter packs), and operating them (logs, instances, versions, rollback, the kill
257
+ * switch, developer connections).
258
+ */
200
259
  export declare class ExecAPI {
201
260
  private readonly graphql;
202
261
  constructor(graphql: GraphQLClient);
262
+ /**
263
+ * A host and a developer connect token for `appId` (valid for about a minute). The
264
+ * session's calls arrive as `Caller::Developer` with your user id and may reach any
265
+ * node type, not only `client` ones. Requires the org `manage_compute` permission and
266
+ * your own session token, not an app token.
267
+ */
268
+ developerEndpoint(appId: string, options?: {
269
+ nodeType?: string;
270
+ key?: string;
271
+ }): Promise<ExecEndpoint & {
272
+ expiresAt: string;
273
+ }>;
274
+ /**
275
+ * Connects as one of the app's developers, for studio tools, manual runs and admin
276
+ * endpoints. The same connection as {@link connect}, reconnecting with a fresh
277
+ * developer token.
278
+ */
279
+ connectAsDeveloper(appId: string, options?: ExecConnectOptions): Promise<ExecConnection>;
280
+ /** Guest log lines, newest first, kept for 24 hours. Requires `view_compute_diagnostics`. */
281
+ logs(appId: string, options?: ExecLogsOptions): Promise<ExecLogLine[]>;
282
+ /** What the manager has placed for the app. Requires `view_compute_diagnostics`. */
283
+ instances(appId: string): Promise<ExecInstance[]>;
284
+ /** The app's versions, newest first. Requires `view_compute_diagnostics`. */
285
+ versions(appId: string): Promise<ExecVersion[]>;
286
+ /** The active version and the switches. Requires `view_compute_diagnostics`. */
287
+ status(appId: string): Promise<ExecAppStatus>;
288
+ /**
289
+ * Makes an earlier version active again, a rollback; instances pick it up when they
290
+ * next start. Requires `manage_compute`.
291
+ */
292
+ activateVersion(appId: string, version: number): Promise<ExecAppStatus>;
293
+ /**
294
+ * The kill switch, for the whole app or one node type. Off: nothing of it is placed,
295
+ * what runs is persisted and stopped, and calls are refused with `Denied`. Requires
296
+ * `manage_compute`.
297
+ */
298
+ setEnabled(appId: string, enabled: boolean, nodeType?: string): Promise<ExecAppStatus>;
299
+ /**
300
+ * The starter packs, which replace the compute templates: a world tick (the root hub), a
301
+ * matchmaker, game sessions and an NPC and mob engine. Build them with {@link build} and
302
+ * deploy the build with `manifest`. Requires `manage_compute`.
303
+ */
304
+ starters(appId: string): Promise<ExecStarterPack>;
305
+ /**
306
+ * Builds crates into modules on the platform (`ckx-sdk`, `wasm32-unknown-unknown`), so you
307
+ * need no Rust toolchain. Returns at once with the build queued; wait with
308
+ * {@link waitForBuild}, then {@link deploy} with its `buildId`. Requires `manage_compute`.
309
+ */
310
+ build(appId: string, crates: ExecCrate[]): Promise<ExecBuild>;
311
+ /** A build's status, log and modules, or null. Requires `view_compute_diagnostics`. */
312
+ buildStatus(appId: string, buildId: string): Promise<ExecBuild | null>;
313
+ /**
314
+ * Polls a build until it succeeds or fails, and returns it either way; a failed build's
315
+ * `log` says why. Throws when it is not done in `timeoutMs` (default 10 minutes).
316
+ */
317
+ waitForBuild(appId: string, buildId: string, options?: {
318
+ intervalMs?: number;
319
+ timeoutMs?: number;
320
+ }): Promise<ExecBuild>;
203
321
  /** A host for this player and its connect token (valid for about a minute). */
204
322
  endpoint(appId: string, options?: {
205
323
  nodeType?: string;
@@ -215,8 +333,9 @@ export declare class ExecAPI {
215
333
  connect(appId: string, options?: ExecConnectOptions): Promise<ExecConnection>;
216
334
  /**
217
335
  * Deploys a new version of the app's nodes and makes it active: the manifest, and
218
- * each distinct module once. Running instances pick it up when they next start.
219
- * Requires the org `manage_compute` permission.
336
+ * each distinct module once. A type gives its module as `wasm`, or names a `crate` of
337
+ * `buildId`, whose modules the platform already holds. Running instances pick it up
338
+ * when they next start. Requires the org `manage_compute` permission.
220
339
  */
221
340
  deploy(options: ExecDeployOptions): Promise<{
222
341
  version: number;
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/domains/exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/domains/exec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { decode, encode } from '@msgpack/msgpack';
2
2
  import { CrowdyError } from '../errors.js';
3
- import { ExecConnectDocument, ExecDeployDocument, } from '../generated/graphql.js';
3
+ import { ExecActivateVersionDocument, ExecAppStatusDocument, ExecBuildDocument, ExecBuildStatusDocument, ExecConnectAsDeveloperDocument, ExecConnectDocument, ExecDeployDocument, ExecInstancesDocument, ExecLogsDocument, ExecSetEnabledDocument, ExecStartersDocument, ExecVersionsDocument, } from '../generated/graphql.js';
4
4
  /**
5
5
  * ck-exec, the hub-and-spoke execution service (dev-tier preview).
6
6
  *
@@ -512,11 +512,142 @@ async function sha256Hex(bytes) {
512
512
  const d = new Uint8Array(await crypto.subtle.digest('SHA-256', bytes));
513
513
  return Array.from(d, (x) => x.toString(16).padStart(2, '0')).join('');
514
514
  }
515
- /** `client.exec`: connecting players to ck-exec, and deploying an app's nodes. */
515
+ function strip(v) {
516
+ const { __typename: _, ...rest } = v;
517
+ return rest;
518
+ }
519
+ function build(b) {
520
+ const { __typename: _, artifacts, ...rest } = b;
521
+ return { ...rest, artifacts: artifacts.map(strip) };
522
+ }
523
+ /**
524
+ * `client.exec`: connecting players to ck-exec, building and deploying an app's nodes (and
525
+ * the starter packs), and operating them (logs, instances, versions, rollback, the kill
526
+ * switch, developer connections).
527
+ */
516
528
  export class ExecAPI {
517
529
  constructor(graphql) {
518
530
  this.graphql = graphql;
519
531
  }
532
+ /**
533
+ * A host and a developer connect token for `appId` (valid for about a minute). The
534
+ * session's calls arrive as `Caller::Developer` with your user id and may reach any
535
+ * node type, not only `client` ones. Requires the org `manage_compute` permission and
536
+ * your own session token, not an app token.
537
+ */
538
+ async developerEndpoint(appId, options = {}) {
539
+ const data = await this.graphql.request(ExecConnectAsDeveloperDocument, {
540
+ appId,
541
+ nodeType: options.nodeType,
542
+ key: options.key,
543
+ });
544
+ return data.execConnectAsDeveloper;
545
+ }
546
+ /**
547
+ * Connects as one of the app's developers, for studio tools, manual runs and admin
548
+ * endpoints. The same connection as {@link connect}, reconnecting with a fresh
549
+ * developer token.
550
+ */
551
+ async connectAsDeveloper(appId, options = {}) {
552
+ const c = new ExecConnection(() => this.developerEndpoint(appId, { nodeType: options.nodeType, key: options.key }), options);
553
+ await c.connect();
554
+ return c;
555
+ }
556
+ /** Guest log lines, newest first, kept for 24 hours. Requires `view_compute_diagnostics`. */
557
+ async logs(appId, options = {}) {
558
+ const data = await this.graphql.request(ExecLogsDocument, { appId, ...options });
559
+ return data.execLogs.map(strip);
560
+ }
561
+ /** What the manager has placed for the app. Requires `view_compute_diagnostics`. */
562
+ async instances(appId) {
563
+ const data = await this.graphql.request(ExecInstancesDocument, { appId });
564
+ return data.execInstances.map(strip);
565
+ }
566
+ /** The app's versions, newest first. Requires `view_compute_diagnostics`. */
567
+ async versions(appId) {
568
+ const data = await this.graphql.request(ExecVersionsDocument, { appId });
569
+ return data.execVersions.map(strip);
570
+ }
571
+ /** The active version and the switches. Requires `view_compute_diagnostics`. */
572
+ async status(appId) {
573
+ const data = await this.graphql.request(ExecAppStatusDocument, { appId });
574
+ return strip(data.execAppStatus);
575
+ }
576
+ /**
577
+ * Makes an earlier version active again, a rollback; instances pick it up when they
578
+ * next start. Requires `manage_compute`.
579
+ */
580
+ async activateVersion(appId, version) {
581
+ const data = await this.graphql.request(ExecActivateVersionDocument, { appId, version });
582
+ return strip(data.execActivateVersion);
583
+ }
584
+ /**
585
+ * The kill switch, for the whole app or one node type. Off: nothing of it is placed,
586
+ * what runs is persisted and stopped, and calls are refused with `Denied`. Requires
587
+ * `manage_compute`.
588
+ */
589
+ async setEnabled(appId, enabled, nodeType) {
590
+ const data = await this.graphql.request(ExecSetEnabledDocument, { appId, enabled, nodeType });
591
+ return strip(data.execSetEnabled);
592
+ }
593
+ /**
594
+ * The starter packs, which replace the compute templates: a world tick (the root hub), a
595
+ * matchmaker, game sessions and an NPC and mob engine. Build them with {@link build} and
596
+ * deploy the build with `manifest`. Requires `manage_compute`.
597
+ */
598
+ async starters(appId) {
599
+ const data = await this.graphql.request(ExecStartersDocument, { appId });
600
+ return {
601
+ manifest: JSON.parse(data.execStarters.manifestJson),
602
+ starters: data.execStarters.starters.map((s) => ({
603
+ crate: s.crate,
604
+ nodeType: s.nodeType,
605
+ description: s.description,
606
+ files: s.files.map(strip),
607
+ })),
608
+ };
609
+ }
610
+ /**
611
+ * Builds crates into modules on the platform (`ckx-sdk`, `wasm32-unknown-unknown`), so you
612
+ * need no Rust toolchain. Returns at once with the build queued; wait with
613
+ * {@link waitForBuild}, then {@link deploy} with its `buildId`. Requires `manage_compute`.
614
+ */
615
+ async build(appId, crates) {
616
+ const data = await this.graphql.request(ExecBuildDocument, {
617
+ input: {
618
+ appId,
619
+ crates: crates.map((c) => ({
620
+ name: c.name,
621
+ files: Array.isArray(c.files)
622
+ ? c.files
623
+ : Object.entries(c.files).map(([path, content]) => ({ path, content })),
624
+ })),
625
+ },
626
+ });
627
+ return build(data.execBuild);
628
+ }
629
+ /** A build's status, log and modules, or null. Requires `view_compute_diagnostics`. */
630
+ async buildStatus(appId, buildId) {
631
+ const data = await this.graphql.request(ExecBuildStatusDocument, { appId, buildId });
632
+ return data.execBuildStatus ? build(data.execBuildStatus) : null;
633
+ }
634
+ /**
635
+ * Polls a build until it succeeds or fails, and returns it either way; a failed build's
636
+ * `log` says why. Throws when it is not done in `timeoutMs` (default 10 minutes).
637
+ */
638
+ async waitForBuild(appId, buildId, options = {}) {
639
+ const until = Date.now() + (options.timeoutMs ?? 600000);
640
+ for (;;) {
641
+ const b = await this.buildStatus(appId, buildId);
642
+ if (!b)
643
+ throw new CrowdyError({ message: `no build ${buildId} in app ${appId}` });
644
+ if (b.status === 'succeeded' || b.status === 'failed')
645
+ return b;
646
+ if (Date.now() > until)
647
+ throw new CrowdyError({ message: `build ${buildId} is still ${b.status}` });
648
+ await new Promise((r) => setTimeout(r, options.intervalMs ?? 2000));
649
+ }
650
+ }
520
651
  /** A host for this player and its connect token (valid for about a minute). */
521
652
  async endpoint(appId, options = {}) {
522
653
  const data = await this.graphql.request(ExecConnectDocument, {
@@ -538,14 +669,22 @@ export class ExecAPI {
538
669
  }
539
670
  /**
540
671
  * Deploys a new version of the app's nodes and makes it active: the manifest, and
541
- * each distinct module once. Running instances pick it up when they next start.
542
- * Requires the org `manage_compute` permission.
672
+ * each distinct module once. A type gives its module as `wasm`, or names a `crate` of
673
+ * `buildId`, whose modules the platform already holds. Running instances pick it up
674
+ * when they next start. Requires the org `manage_compute` permission.
543
675
  */
544
676
  async deploy(options) {
545
677
  const types = {};
546
678
  const artifacts = new Map();
547
679
  for (const [name, t] of Object.entries(options.types)) {
548
680
  const { wasm, ...spec } = t;
681
+ if (!wasm) {
682
+ if (!spec.crate || !options.buildId) {
683
+ throw new CrowdyError({ message: `type '${name}' needs its wasm, or a crate of the deploy's buildId` });
684
+ }
685
+ types[name] = spec;
686
+ continue;
687
+ }
549
688
  const digest = await sha256Hex(wasm);
550
689
  if (!artifacts.has(digest))
551
690
  artifacts.set(digest, base64(wasm));
@@ -556,6 +695,7 @@ export class ExecAPI {
556
695
  appId: options.appId,
557
696
  manifestJson: JSON.stringify({ root: options.root, types }),
558
697
  artifacts: [...artifacts].map(([digest, wasmBase64]) => ({ digest, wasmBase64 })),
698
+ buildId: options.buildId,
559
699
  },
560
700
  });
561
701
  return data.execDeploy;