@nodaro/sdk 2.25.0 → 2.27.0

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/README.md CHANGED
@@ -116,7 +116,8 @@ Voice / audio surface (client.voices, client.media, client.audio):
116
116
  inspect speakers before paying, mix stems before rendering.
117
117
  - Also: voices.change (single-voice), design / remix / dub;
118
118
  client.media.downloadVideo (+downloadVideoProgress SSE) / trimVideo /
119
- trimAudio / videoMetadata; client.audio.separate / isolate / applyFx / mix.
119
+ trimAudio / splitMedia / videoMetadata; client.audio.separate / isolate /
120
+ applyFx / mix.
120
121
 
121
122
  Rules:
122
123
  - Generations cost credits; catch InsufficientCreditsError (has .required /
package/dist/index.cjs CHANGED
@@ -1,7 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var shared = require('@nodaro/shared');
4
- var prompts = require('@nodaro/prompts');
3
+ var workflow = require('@nodaro/shared/workflow');
4
+ var nodes = require('@nodaro/shared/nodes');
5
+ var social = require('@nodaro/shared/social');
6
+ var scene3d = require('@nodaro/shared/scene3d');
7
+ var person = require('@nodaro/prompts/person');
8
+ var entities = require('@nodaro/shared/entities');
9
+ var edl = require('@nodaro/shared/edl');
10
+ var organizations = require('@nodaro/shared/organizations');
11
+ var apps = require('@nodaro/shared/apps');
5
12
 
6
13
  // src/binary-response.ts
7
14
  async function readBinaryResponse(response, maxBytes) {
@@ -112,6 +119,19 @@ var StudioOpError = class extends NodaroError {
112
119
  }
113
120
  opIndex;
114
121
  };
122
+ var CONTINUATION_REFUSAL_CODES = /* @__PURE__ */ new Set([
123
+ "already_running",
124
+ "continuation_superseded",
125
+ "render_final_already_rendered"
126
+ ]);
127
+ var ContinuationRefusedError = class extends NodaroError {
128
+ constructor(message, code, jobId) {
129
+ super(message, code, 409);
130
+ this.jobId = jobId;
131
+ this.name = "ContinuationRefusedError";
132
+ }
133
+ jobId;
134
+ };
115
135
  var JobBlockedError = class extends NodaroError {
116
136
  constructor(message = "Blocked by this deployment's content policy") {
117
137
  super(message, "job_blocked", 422);
@@ -184,12 +204,15 @@ function throwFromResponse(status, body) {
184
204
  if (status >= 400 && status < 500 && typeof body.error?.opIndex === "number") {
185
205
  throw new StudioOpError(message, code, status, body.error.opIndex);
186
206
  }
207
+ if (status === 409 && CONTINUATION_REFUSAL_CODES.has(code) && typeof body.jobId === "string") {
208
+ throw new ContinuationRefusedError(message, code, body.jobId);
209
+ }
187
210
  if (status === 422 && code === "job_blocked") throw new JobBlockedError(message);
188
211
  if (status === 403 && code === "insufficient_scope") {
189
212
  throw new ForbiddenError(message, body.error?.missingScope);
190
213
  }
191
214
  if (status === 403) throw new ForbiddenError(message);
192
- if (status === 404) throw new NotFoundError(message);
215
+ if (status === 404) throw new NotFoundError(body.error?.message ?? (typeof body.message === "string" ? body.message : void 0));
193
216
  if (status === 429) throw new RateLimitedError(message);
194
217
  if (status === 402) {
195
218
  throw new InsufficientCreditsError(message, body.error?.required, body.error?.available);
@@ -539,8 +562,6 @@ var ExecutionsResource = class {
539
562
  );
540
563
  }
541
564
  };
542
-
543
- // src/resources/nodes.ts
544
565
  var DEFAULT_POLL_MS = 2e3;
545
566
  var DEFAULT_MAX_MS = 15 * 60 * 1e3;
546
567
  var sleep = (ms, signal) => new Promise((resolve, reject) => {
@@ -558,6 +579,10 @@ var sleep = (ms, signal) => new Promise((resolve, reject) => {
558
579
  }
559
580
  signal?.addEventListener("abort", onAbort, { once: true });
560
581
  });
582
+ function notRunnable(type, why) {
583
+ return new NodaroError(`Node type "${type}" has no route of its own to run it directly: ${why}.`, "node_not_runnable", 0);
584
+ }
585
+ var isRouteNotFound = (err) => err instanceof NotFoundError && /^Route\b.*\bnot found\b/i.test(err.message);
561
586
  function extractJobId(result, label) {
562
587
  if (result && typeof result === "object" && "jobId" in result) {
563
588
  const jobId = result.jobId;
@@ -579,13 +604,20 @@ var NodesResource = class {
579
604
  return this.client.request("GET", `/v1/nodes/${encodeURIComponent(type)}`);
580
605
  }
581
606
  run(type, params = {}, options = {}) {
582
- const route = type === "generate-3d-scene" ? "/v1/3d-scene/generate" : type === "edit-3d-scene" ? "/v1/3d-scene/edit" : type === "render-video" && typeof params.planType === "string" ? "/v1/render-video/plan" : `/v1/${encodeURIComponent(type)}`;
607
+ const route = type === "render-video" && typeof params.planType === "string" ? "/v1/render-video/plan" : nodes.nodeRunRoute(type);
608
+ if (!route) return Promise.reject(notRunnable(type, nodes.NODE_TYPES_WITHOUT_RUN_ROUTE[type]));
609
+ const platform = social.SOCIAL_POST_NODE_PLATFORM[type];
610
+ const body = platform && params.platform === void 0 ? { ...params, platform } : params;
611
+ const conventional = !Object.prototype.hasOwnProperty.call(nodes.NODE_RUN_ROUTES, type);
583
612
  return this.client.request("POST", route, {
584
- body: params,
613
+ body,
585
614
  // Transport-level retry safety, opt-in per call. The platform reads the
586
615
  // standard header, so a caller that reuses a key on a retry gets the
587
616
  // same run back instead of a second charge.
588
617
  ...options.idempotencyKey ? { headers: { "Idempotency-Key": options.idempotencyKey } } : {}
618
+ }).catch((err) => {
619
+ if (conventional && isRouteNotFound(err)) throw notRunnable(type, "it runs only inside a workflow (client.workflows.run)");
620
+ throw err;
589
621
  });
590
622
  }
591
623
  async runAndWait(type, params = {}, opts = {}) {
@@ -702,7 +734,7 @@ var Scene3DResource = class {
702
734
  if (SCENE3D_DELIVERY_ASSET_USAGE[asset.kind] !== asset.usage) {
703
735
  throw new Error("This asset is not available through the delivery endpoint");
704
736
  }
705
- if (!Number.isSafeInteger(asset.byteLength) || asset.byteLength < 1 || asset.byteLength > shared.SCENE3D_V2_LIMITS.maxRendererAssetBytes) {
737
+ if (!Number.isSafeInteger(asset.byteLength) || asset.byteLength < 1 || asset.byteLength > scene3d.SCENE3D_V2_LIMITS.maxRendererAssetBytes) {
706
738
  throw new Error("Invalid scene delivery asset byte length");
707
739
  }
708
740
  return this.client.requestBytes("GET", `/v1/3d-scene/deliveries/${encodeURIComponent(jobId)}/assets/${encodeURIComponent(asset.assetId)}`, {
@@ -742,7 +774,7 @@ var Scene3DResource = class {
742
774
  if (!["glb", "camera-track-json", "poster", "validation-report"].includes(asset.kind)) {
743
775
  throw new Error("This asset is not available through the playback endpoint");
744
776
  }
745
- if (!Number.isSafeInteger(asset.byteLength) || asset.byteLength < 1 || asset.byteLength > shared.SCENE3D_V2_LIMITS.maxRendererAssetBytes) {
777
+ if (!Number.isSafeInteger(asset.byteLength) || asset.byteLength < 1 || asset.byteLength > scene3d.SCENE3D_V2_LIMITS.maxRendererAssetBytes) {
746
778
  throw new Error("Invalid scene asset byte length");
747
779
  }
748
780
  return this.client.requestBytes("GET", `/v1/3d-scene/revisions/${encodeURIComponent(revisionId)}/assets/${encodeURIComponent(asset.assetId)}`, {
@@ -754,7 +786,7 @@ var Scene3DResource = class {
754
786
  sourceBytes(revisionId, options) {
755
787
  return this.client.requestBytes("GET", `/v1/3d-scene/revisions/${encodeURIComponent(revisionId)}/source`, {
756
788
  signal: options?.signal,
757
- maxBytes: shared.SCENE3D_V2_LIMITS.maxBlendSourceBytes
789
+ maxBytes: scene3d.SCENE3D_V2_LIMITS.maxBlendSourceBytes
758
790
  });
759
791
  }
760
792
  generate(params) {
@@ -1154,7 +1186,7 @@ var CharactersResource = class {
1154
1186
  }
1155
1187
  };
1156
1188
  function buildPersonSeedPrompt(value) {
1157
- return prompts.buildPersonHints(value).join(", ");
1189
+ return person.buildPersonHints(value).join(", ");
1158
1190
  }
1159
1191
  var LocationsResource = class {
1160
1192
  constructor(client) {
@@ -2386,6 +2418,20 @@ var MediaResource = class {
2386
2418
  trimAudio(input) {
2387
2419
  return this.client.request("POST", "/v1/trim-audio", { body: input });
2388
2420
  }
2421
+ /**
2422
+ * Cut a video and/or an audio file into consecutive parts
2423
+ * (`POST /v1/split-media`). Every part is at most `chunkDuration` seconds and
2424
+ * at least `minPartDuration` (default 4, never above `chunkDuration`) — a
2425
+ * short leftover is evened out with the parts before it. Video is cut on
2426
+ * whole frames with each part's sound matching its picture; audio parts are
2427
+ * sample-exact, in `audioFormat` (`mp3` default / `wav` / `aac`). With both
2428
+ * sources each is split on its own. At most 200 parts per input. Poll
2429
+ * `jobs.get(jobId)`; the parts are on the completed job's `output_data` —
2430
+ * see {@link SplitMediaOutput}.
2431
+ */
2432
+ splitMedia(input) {
2433
+ return this.client.request("POST", "/v1/split-media", { body: input });
2434
+ }
2389
2435
  /**
2390
2436
  * Turn one still image + one audio track into an MP4
2391
2437
  * (`POST /v1/still-to-video`) — locally rendered (FFmpeg), no AI model,
@@ -2513,7 +2559,10 @@ var AudioResource = class {
2513
2559
  * `ratio` (1–20, overrides `amount`), `attackMs` (1–2000, default 20) and
2514
2560
  * `releaseMs` (10–9000, default 500) are optional fine controls. A ducked mix
2515
2561
  * sums its tracks rather than averaging them, so the voice keeps its level;
2516
- * the price is the same with or without a duck.
2562
+ * the price is the same with or without a duck. `endAt` (`"longest"`, the
2563
+ * default, or `"voice"`) says where the mix ends: `"voice"` ends it when the
2564
+ * voice (the `duck.under` track) ends (needs `duck`). A video URL is a track
2565
+ * too: its audio is mixed, and a video with no sound is a silent track.
2517
2566
  */
2518
2567
  mix(input) {
2519
2568
  return this.client.request("POST", "/v1/mix-audio", { body: input });
@@ -2590,6 +2639,18 @@ var CreditsResource = class {
2590
2639
  );
2591
2640
  return res.data;
2592
2641
  }
2642
+ /**
2643
+ * `GET /v1/credits/transactions` → one page of the caller's credit
2644
+ * transactions, newest first, with `nextCursor` for the next page (`null`
2645
+ * at the end). Read `credits_charged` for what each run cost — it can be
2646
+ * below the hold (`credits_reserved`) and is `null` while the hold is open.
2647
+ * Cloud-only route: a self-hosted instance answers 404.
2648
+ */
2649
+ transactions(options = {}) {
2650
+ return this.client.request("GET", "/v1/credits/transactions", {
2651
+ query: { limit: options.limit, cursor: options.cursor }
2652
+ });
2653
+ }
2593
2654
  /**
2594
2655
  * `POST /v1/credits/model-costs` → per-identifier credit cost, for editor
2595
2656
  * cost previews. Capped at the first {@link MODEL_COSTS_LIMIT} identifiers
@@ -2601,6 +2662,23 @@ var CreditsResource = class {
2601
2662
  body: { models: ids.slice(0, MODEL_COSTS_LIMIT) }
2602
2663
  });
2603
2664
  }
2665
+ /**
2666
+ * `POST /v1/credits/claim-signup-grant` → claims the account's free signup
2667
+ * grant, once, with the browser signals of the page making the claim.
2668
+ *
2669
+ * Call it once per page load as soon as the session is known, and never
2670
+ * wait on it for rendering: it is idempotent (a decided account answers
2671
+ * with its state and `granted: false`), it costs the user nothing when it
2672
+ * fails (the next load asks again), and the signals are what make the
2673
+ * claim worth sending — collect them with `collectSignupKeys()` from
2674
+ * `@nodaro/sdk/signup-signals` and pass whatever came back, `{}` included.
2675
+ * Cloud-only route: a self-hosted instance answers 404.
2676
+ */
2677
+ claimSignupGrant(keys = {}) {
2678
+ return this.client.request("POST", "/v1/credits/claim-signup-grant", {
2679
+ body: keys
2680
+ });
2681
+ }
2604
2682
  // NOTE: no `estimate(...)` helper. The backend exposes
2605
2683
  // `POST /v1/credits/estimate-workflow` (body `{ nodes }` → `{ data: {
2606
2684
  // totalCredits, nodeCount } }`), but no consumer has a settled shape for it
@@ -3915,6 +3993,13 @@ var WorkspacesResource = class {
3915
3993
  return this.client.requestText("GET", `/v1/workspaces/${encodeURIComponent(id)}/usage`, { query: { ...opts, format: "csv" } });
3916
3994
  }
3917
3995
  };
3996
+ function tightenBody(input) {
3997
+ const { mediaUrl, ...rest } = input;
3998
+ return { mediaUrls: [mediaUrl], ...Object.fromEntries(Object.entries(rest).filter(([, v]) => v !== void 0)) };
3999
+ }
4000
+ function idempotencyHeaders(options) {
4001
+ return options?.idempotencyKey ? { headers: { "Idempotency-Key": options.idempotencyKey } } : {};
4002
+ }
3918
4003
  var EditResource = class {
3919
4004
  constructor(client) {
3920
4005
  this.client = client;
@@ -3974,6 +4059,42 @@ var EditResource = class {
3974
4059
  }
3975
4060
  });
3976
4061
  }
4062
+ /**
4063
+ * Tighten Episode (`POST /v1/tighten-episode`): tighten a podcast recording
4064
+ * in one call — transcribe, cut the silences and filler, render, with
4065
+ * optional captions, music and framing. Answers the run's job to poll; its
4066
+ * `output_data` holds the episode. The run is priced as its steps at their own
4067
+ * rates plus the listed per-run fee. Quote it first with
4068
+ * {@link estimateTightenEpisode}.
4069
+ */
4070
+ tightenEpisode(input, options) {
4071
+ return this.client.request("POST", "/v1/tighten-episode", { body: tightenBody(input), ...idempotencyHeaders(options) });
4072
+ }
4073
+ /**
4074
+ * What a Tighten Episode run is estimated at (`POST /v1/tighten-episode/estimate`):
4075
+ * its steps at their own rates plus its per-run fee. Nothing is created or
4076
+ * charged. The estimate leans high: the render is priced at the recording's
4077
+ * full length, while the charge follows the minutes actually rendered.
4078
+ */
4079
+ estimateTightenEpisode(input) {
4080
+ return this.client.request("POST", "/v1/tighten-episode/estimate", { body: tightenBody(input) });
4081
+ }
4082
+ /**
4083
+ * Continue a Tighten Episode run as a new job (`POST /v1/tighten-episode/continue`):
4084
+ * `"from-failed"` keeps the steps that finished and runs the rest (the fee is
4085
+ * held again; the failed run's was refunded); `"render-final"` renders the
4086
+ * full-quality episode after a review-on preview, with the preview's
4087
+ * settings and no fee. A refusal that names another job
4088
+ * (`already_running`, `continuation_superseded`,
4089
+ * `render_final_already_rendered`) throws a `ContinuationRefusedError`
4090
+ * carrying that `jobId`.
4091
+ */
4092
+ continueUseCase(input, options) {
4093
+ return this.client.request("POST", "/v1/tighten-episode/continue", {
4094
+ body: { jobId: input.jobId, mode: input.mode, ...input.editedEdl !== void 0 ? { editedEdl: input.editedEdl } : {} },
4095
+ ...idempotencyHeaders(options)
4096
+ });
4097
+ }
3977
4098
  /**
3978
4099
  * Plan a transcript-driven cut (`POST /v1/edit-plan`). Reads a timed
3979
4100
  * transcript (plus optional silence ranges) and the media sources, and plans
@@ -3986,12 +4107,12 @@ var EditResource = class {
3986
4107
  * on nodaro.ai it runs directly.
3987
4108
  */
3988
4109
  editPlan(input) {
3989
- const planned = shared.resolveEditPlanSources(input.sources, {
4110
+ const planned = edl.resolveEditPlanSources(input.sources, {
3990
4111
  offsets: input.offsets,
3991
4112
  transcriptSourceId: input.transcriptSourceId
3992
4113
  });
3993
4114
  if (!planned.ok) {
3994
- const message = planned.issues.map((issue) => shared.describeAudioSyncOffsetIssue(issue)).join("; ");
4115
+ const message = planned.issues.map((issue) => edl.describeAudioSyncOffsetIssue(issue)).join("; ");
3995
4116
  return Promise.reject(new NodaroError(`editPlan: ${message}`, "edit_plan_sources", 400));
3996
4117
  }
3997
4118
  const transcript = planned.transcriptSourceId ? { ...input.transcript, sourceId: planned.transcriptSourceId } : input.transcript;
@@ -4021,7 +4142,7 @@ var EditResource = class {
4021
4142
  * a {@link NodaroError} (`code: "no_speakers"`) before any request or charge.
4022
4143
  */
4023
4144
  cameraSwitch(input) {
4024
- if (shared.transcriptSpeakerLabels(input.transcript).length === 0) {
4145
+ if (edl.transcriptSpeakerLabels(input.transcript).length === 0) {
4025
4146
  return Promise.reject(new NodaroError(
4026
4147
  "cameraSwitch: the transcript has no speaker labels \u2014 transcribe with speaker detection on",
4027
4148
  "no_speakers",
@@ -4050,11 +4171,11 @@ var EditResource = class {
4050
4171
  * clipping straddlers. Runs `@nodaro/shared`'s canonical
4051
4172
  * `remapTranscriptThroughEdl`, the same remap `applyEdl` performs server-side.
4052
4173
  */
4053
- remapTranscript(edl, transcript) {
4054
- return shared.remapTranscriptThroughEdl(edl, transcript);
4174
+ remapTranscript(edl$1, transcript) {
4175
+ return edl.remapTranscriptThroughEdl(edl$1, transcript);
4055
4176
  }
4056
4177
  };
4057
- var SDK_VERSION = "2.25.0" ;
4178
+ var SDK_VERSION = "2.27.0" ;
4058
4179
  var CLIENT_HEADER = "X-Nodaro-Client";
4059
4180
  var isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined";
4060
4181
  var NodaroClient = class _NodaroClient {
@@ -4205,7 +4326,7 @@ var NodaroClient = class _NodaroClient {
4205
4326
  ...this.sendClientHeader ? { [CLIENT_HEADER]: this.clientLabel } : {},
4206
4327
  // Before per-request headers: a resource that needs to reach outside
4207
4328
  // this client's workspace says so explicitly and wins.
4208
- ...this.workspaceId ? { [shared.WORKSPACE_HEADER]: this.workspaceId } : {},
4329
+ ...this.workspaceId ? { [organizations.WORKSPACE_HEADER]: this.workspaceId } : {},
4209
4330
  ...options.headers ?? {}
4210
4331
  };
4211
4332
  if (token) headers["Authorization"] = `Bearer ${token}`;
@@ -4323,105 +4444,105 @@ function supabaseAuth(supabase) {
4323
4444
  };
4324
4445
  }
4325
4446
 
4326
- Object.defineProperty(exports, "CHARACTER_ASPECT_DEFAULTS", {
4447
+ Object.defineProperty(exports, "OUTPUT_BEARING_NODE_STATUSES", {
4327
4448
  enumerable: true,
4328
- get: function () { return shared.CHARACTER_ASPECT_DEFAULTS; }
4449
+ get: function () { return workflow.OUTPUT_BEARING_NODE_STATUSES; }
4329
4450
  });
4330
- Object.defineProperty(exports, "CHARACTER_ASPECT_OPTIONS", {
4451
+ Object.defineProperty(exports, "nodeStateMayCarryOutput", {
4331
4452
  enumerable: true,
4332
- get: function () { return shared.CHARACTER_ASPECT_OPTIONS; }
4453
+ get: function () { return workflow.nodeStateMayCarryOutput; }
4333
4454
  });
4334
- Object.defineProperty(exports, "CHARACTER_STYLES", {
4455
+ Object.defineProperty(exports, "PROMPT_PREFIX_KEY", {
4335
4456
  enumerable: true,
4336
- get: function () { return shared.CHARACTER_STYLES; }
4457
+ get: function () { return nodes.PROMPT_PREFIX_KEY; }
4337
4458
  });
4338
- Object.defineProperty(exports, "CREATURE_ASPECT_DEFAULTS", {
4459
+ Object.defineProperty(exports, "PROMPT_SUFFIX_KEY", {
4339
4460
  enumerable: true,
4340
- get: function () { return shared.OBJECT_ASPECT_DEFAULTS; }
4461
+ get: function () { return nodes.PROMPT_SUFFIX_KEY; }
4341
4462
  });
4342
- Object.defineProperty(exports, "CREATURE_ASPECT_OPTIONS", {
4463
+ Object.defineProperty(exports, "PEOPLE", {
4343
4464
  enumerable: true,
4344
- get: function () { return shared.OBJECT_ASPECT_OPTIONS; }
4465
+ get: function () { return person.PEOPLE; }
4345
4466
  });
4346
- Object.defineProperty(exports, "CREATURE_ATTACH_COLUMNS", {
4467
+ Object.defineProperty(exports, "PERSON_DIMENSION_LABELS", {
4347
4468
  enumerable: true,
4348
- get: function () { return shared.CREATURE_ATTACH_COLUMNS; }
4469
+ get: function () { return person.PERSON_DIMENSION_LABELS; }
4349
4470
  });
4350
- Object.defineProperty(exports, "LOCATION_ASSET_TYPES", {
4471
+ Object.defineProperty(exports, "PERSON_DIMENSION_ORDER", {
4351
4472
  enumerable: true,
4352
- get: function () { return shared.LOCATION_ASSET_TYPES; }
4473
+ get: function () { return person.PERSON_DIMENSION_ORDER; }
4353
4474
  });
4354
- Object.defineProperty(exports, "LOCATION_ATTACH_COLUMNS", {
4475
+ Object.defineProperty(exports, "buildPersonHints", {
4355
4476
  enumerable: true,
4356
- get: function () { return shared.LOCATION_ATTACH_COLUMNS; }
4477
+ get: function () { return person.buildPersonHints; }
4357
4478
  });
4358
- Object.defineProperty(exports, "OBJECT_ASPECT_DEFAULTS", {
4479
+ Object.defineProperty(exports, "CHARACTER_ASPECT_DEFAULTS", {
4359
4480
  enumerable: true,
4360
- get: function () { return shared.OBJECT_ASPECT_DEFAULTS; }
4481
+ get: function () { return entities.CHARACTER_ASPECT_DEFAULTS; }
4361
4482
  });
4362
- Object.defineProperty(exports, "OBJECT_ASPECT_OPTIONS", {
4483
+ Object.defineProperty(exports, "CHARACTER_ASPECT_OPTIONS", {
4363
4484
  enumerable: true,
4364
- get: function () { return shared.OBJECT_ASPECT_OPTIONS; }
4485
+ get: function () { return entities.CHARACTER_ASPECT_OPTIONS; }
4365
4486
  });
4366
- Object.defineProperty(exports, "OBJECT_ASSET_TYPES", {
4487
+ Object.defineProperty(exports, "CHARACTER_STYLES", {
4367
4488
  enumerable: true,
4368
- get: function () { return shared.OBJECT_ASSET_TYPES; }
4489
+ get: function () { return entities.CHARACTER_STYLES; }
4369
4490
  });
4370
- Object.defineProperty(exports, "OBJECT_ATTACH_COLUMNS", {
4491
+ Object.defineProperty(exports, "CREATURE_ASPECT_DEFAULTS", {
4371
4492
  enumerable: true,
4372
- get: function () { return shared.OBJECT_ATTACH_COLUMNS; }
4493
+ get: function () { return entities.OBJECT_ASPECT_DEFAULTS; }
4373
4494
  });
4374
- Object.defineProperty(exports, "OUTPUT_BEARING_NODE_STATUSES", {
4495
+ Object.defineProperty(exports, "CREATURE_ASPECT_OPTIONS", {
4375
4496
  enumerable: true,
4376
- get: function () { return shared.OUTPUT_BEARING_NODE_STATUSES; }
4497
+ get: function () { return entities.OBJECT_ASPECT_OPTIONS; }
4377
4498
  });
4378
- Object.defineProperty(exports, "PROMPT_PREFIX_KEY", {
4499
+ Object.defineProperty(exports, "CREATURE_ATTACH_COLUMNS", {
4379
4500
  enumerable: true,
4380
- get: function () { return shared.PROMPT_PREFIX_KEY; }
4501
+ get: function () { return entities.CREATURE_ATTACH_COLUMNS; }
4381
4502
  });
4382
- Object.defineProperty(exports, "PROMPT_SUFFIX_KEY", {
4503
+ Object.defineProperty(exports, "LOCATION_ASSET_TYPES", {
4383
4504
  enumerable: true,
4384
- get: function () { return shared.PROMPT_SUFFIX_KEY; }
4505
+ get: function () { return entities.LOCATION_ASSET_TYPES; }
4385
4506
  });
4386
- Object.defineProperty(exports, "RECAST_SEGMENT_PACKS", {
4507
+ Object.defineProperty(exports, "LOCATION_ATTACH_COLUMNS", {
4387
4508
  enumerable: true,
4388
- get: function () { return shared.RECAST_SEGMENT_PACKS; }
4509
+ get: function () { return entities.LOCATION_ATTACH_COLUMNS; }
4389
4510
  });
4390
- Object.defineProperty(exports, "SURROUND_DIRECTIONS", {
4511
+ Object.defineProperty(exports, "OBJECT_ASPECT_DEFAULTS", {
4391
4512
  enumerable: true,
4392
- get: function () { return shared.SURROUND_DIRECTIONS; }
4513
+ get: function () { return entities.OBJECT_ASPECT_DEFAULTS; }
4393
4514
  });
4394
- Object.defineProperty(exports, "USAGE_GROUP_BYS", {
4515
+ Object.defineProperty(exports, "OBJECT_ASPECT_OPTIONS", {
4395
4516
  enumerable: true,
4396
- get: function () { return shared.USAGE_GROUP_BYS; }
4517
+ get: function () { return entities.OBJECT_ASPECT_OPTIONS; }
4397
4518
  });
4398
- Object.defineProperty(exports, "WORKSPACE_HEADER", {
4519
+ Object.defineProperty(exports, "OBJECT_ASSET_TYPES", {
4399
4520
  enumerable: true,
4400
- get: function () { return shared.WORKSPACE_HEADER; }
4521
+ get: function () { return entities.OBJECT_ASSET_TYPES; }
4401
4522
  });
4402
- Object.defineProperty(exports, "nodeStateMayCarryOutput", {
4523
+ Object.defineProperty(exports, "OBJECT_ATTACH_COLUMNS", {
4403
4524
  enumerable: true,
4404
- get: function () { return shared.nodeStateMayCarryOutput; }
4525
+ get: function () { return entities.OBJECT_ATTACH_COLUMNS; }
4405
4526
  });
4406
- Object.defineProperty(exports, "unwrapEditPlanOutput", {
4527
+ Object.defineProperty(exports, "SURROUND_DIRECTIONS", {
4407
4528
  enumerable: true,
4408
- get: function () { return shared.unwrapEditPlanOutput; }
4529
+ get: function () { return entities.SURROUND_DIRECTIONS; }
4409
4530
  });
4410
- Object.defineProperty(exports, "PEOPLE", {
4531
+ Object.defineProperty(exports, "unwrapEditPlanOutput", {
4411
4532
  enumerable: true,
4412
- get: function () { return prompts.PEOPLE; }
4533
+ get: function () { return edl.unwrapEditPlanOutput; }
4413
4534
  });
4414
- Object.defineProperty(exports, "PERSON_DIMENSION_LABELS", {
4535
+ Object.defineProperty(exports, "USAGE_GROUP_BYS", {
4415
4536
  enumerable: true,
4416
- get: function () { return prompts.PERSON_DIMENSION_LABELS; }
4537
+ get: function () { return organizations.USAGE_GROUP_BYS; }
4417
4538
  });
4418
- Object.defineProperty(exports, "PERSON_DIMENSION_ORDER", {
4539
+ Object.defineProperty(exports, "WORKSPACE_HEADER", {
4419
4540
  enumerable: true,
4420
- get: function () { return prompts.PERSON_DIMENSION_ORDER; }
4541
+ get: function () { return organizations.WORKSPACE_HEADER; }
4421
4542
  });
4422
- Object.defineProperty(exports, "buildPersonHints", {
4543
+ Object.defineProperty(exports, "RECAST_SEGMENT_PACKS", {
4423
4544
  enumerable: true,
4424
- get: function () { return prompts.buildPersonHints; }
4545
+ get: function () { return apps.RECAST_SEGMENT_PACKS; }
4425
4546
  });
4426
4547
  exports.AppsResource = AppsResource;
4427
4548
  exports.AudioResource = AudioResource;
@@ -4432,6 +4553,7 @@ exports.CharactersResource = CharactersResource;
4432
4553
  exports.CollectionsResource = CollectionsResource;
4433
4554
  exports.CommunityResource = CommunityResource;
4434
4555
  exports.CompetitorsResource = CompetitorsResource;
4556
+ exports.ContinuationRefusedError = ContinuationRefusedError;
4435
4557
  exports.CopilotResource = CopilotResource;
4436
4558
  exports.CreaturesResource = CreaturesResource;
4437
4559
  exports.CreditsResource = CreditsResource;