@arcanewizards/timecode-toolbox 0.1.0 → 0.1.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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/frontend/index.js +865 -272
  3. package/dist/components/frontend/index.mjs +855 -262
  4. package/dist/entrypoint.css +163 -53
  5. package/dist/entrypoint.js +1474 -493
  6. package/dist/entrypoint.js.map +4 -4
  7. package/dist/frontend.js +1474 -493
  8. package/dist/frontend.js.map +4 -4
  9. package/dist/index.d.mts +3 -1
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.js +308 -37
  12. package/dist/index.mjs +329 -49
  13. package/dist/start.d.mts +1 -2
  14. package/dist/start.d.ts +1 -2
  15. package/dist/start.js +311 -38
  16. package/dist/start.mjs +332 -50
  17. package/package.json +12 -6
  18. package/.turbo/turbo-build.log +0 -58
  19. package/.turbo/turbo-lint.log +0 -4
  20. package/CHANGELOG.md +0 -40
  21. package/eslint.config.mjs +0 -49
  22. package/src/app.tsx +0 -147
  23. package/src/components/backend/index.ts +0 -6
  24. package/src/components/backend/toolbox-root.ts +0 -119
  25. package/src/components/frontend/constants.ts +0 -81
  26. package/src/components/frontend/entrypoint.ts +0 -12
  27. package/src/components/frontend/frontend.css +0 -108
  28. package/src/components/frontend/index.tsx +0 -46
  29. package/src/components/frontend/toolbox/content.tsx +0 -45
  30. package/src/components/frontend/toolbox/context.tsx +0 -63
  31. package/src/components/frontend/toolbox/core/size-aware-div.tsx +0 -51
  32. package/src/components/frontend/toolbox/core/timecode-display.tsx +0 -592
  33. package/src/components/frontend/toolbox/generators.tsx +0 -318
  34. package/src/components/frontend/toolbox/inputs.tsx +0 -484
  35. package/src/components/frontend/toolbox/outputs.tsx +0 -581
  36. package/src/components/frontend/toolbox/preferences.ts +0 -25
  37. package/src/components/frontend/toolbox/root.tsx +0 -335
  38. package/src/components/frontend/toolbox/settings.tsx +0 -54
  39. package/src/components/frontend/toolbox/types.ts +0 -28
  40. package/src/components/frontend/toolbox/util.tsx +0 -61
  41. package/src/components/proto.ts +0 -420
  42. package/src/config.ts +0 -7
  43. package/src/generators/clock.tsx +0 -206
  44. package/src/generators/index.tsx +0 -15
  45. package/src/index.ts +0 -38
  46. package/src/inputs/artnet.tsx +0 -305
  47. package/src/inputs/index.tsx +0 -13
  48. package/src/inputs/tcnet.tsx +0 -272
  49. package/src/outputs/artnet.tsx +0 -170
  50. package/src/outputs/index.tsx +0 -11
  51. package/src/start.ts +0 -47
  52. package/src/tree.ts +0 -133
  53. package/src/types.ts +0 -12
  54. package/src/urls.ts +0 -49
  55. package/src/util.ts +0 -82
  56. package/tailwind.config.cjs +0 -7
  57. package/tsconfig.json +0 -10
  58. package/tsup.config.ts +0 -10
package/dist/start.mjs CHANGED
@@ -1,10 +1,17 @@
1
+ #!/usr/bin/env node
1
2
  var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
6
  var __getProtoOf = Object.getPrototypeOf;
6
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __commonJS = (cb, mod) => function __require() {
8
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
9
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
10
+ }) : x)(function(x) {
11
+ if (typeof require !== "undefined") return require.apply(this, arguments);
12
+ throw Error('Dynamic require of "' + x + '" is not supported');
13
+ });
14
+ var __commonJS = (cb, mod) => function __require2() {
8
15
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
16
  };
10
17
  var __export = (target, all) => {
@@ -1809,6 +1816,7 @@ var runSigilApp = ({
1809
1816
  logger: upstreamLogger,
1810
1817
  title,
1811
1818
  version: version2,
1819
+ edition,
1812
1820
  appProps,
1813
1821
  toolkitOptions,
1814
1822
  createApp: createApp2,
@@ -1867,10 +1875,10 @@ var runSigilApp = ({
1867
1875
  logger2.info(`${title} ready to start listening`);
1868
1876
  }
1869
1877
  });
1870
- let api = null;
1878
+ let api2 = null;
1871
1879
  const apiListeners = /* @__PURE__ */ new Set();
1872
1880
  const setAppApi = (value) => {
1873
- api = value;
1881
+ api2 = value;
1874
1882
  for (const listener of apiListeners) {
1875
1883
  listener(value);
1876
1884
  }
@@ -1903,6 +1911,7 @@ var runSigilApp = ({
1903
1911
  createApp2({
1904
1912
  title,
1905
1913
  version: version2,
1914
+ edition,
1906
1915
  toolkit,
1907
1916
  logger: logger2,
1908
1917
  logEventEmitter,
@@ -1922,8 +1931,8 @@ var runSigilApp = ({
1922
1931
  if (event === "apiChange") {
1923
1932
  const apiListener = listener;
1924
1933
  apiListeners.add(apiListener);
1925
- if (api) {
1926
- apiListener(api);
1934
+ if (api2) {
1935
+ apiListener(api2);
1927
1936
  }
1928
1937
  return;
1929
1938
  }
@@ -2137,10 +2146,10 @@ var AppListenerManager = ({
2137
2146
 
2138
2147
  // src/app.tsx
2139
2148
  import {
2140
- useCallback as useCallback6,
2141
- useEffect as useEffect9,
2142
- useMemo as useMemo5,
2143
- useState as useState6
2149
+ useCallback as useCallback7,
2150
+ useEffect as useEffect11,
2151
+ useMemo as useMemo6,
2152
+ useState as useState7
2144
2153
  } from "react";
2145
2154
 
2146
2155
  // src/components/backend/index.ts
@@ -6292,12 +6301,18 @@ var OUTPUT_CONFIG = zod_default.object({
6292
6301
  var TOOLBOX_CONFIG = zod_default.object({
6293
6302
  inputs: zod_default.record(zod_default.string(), INPUT_CONFIG),
6294
6303
  generators: zod_default.record(zod_default.string(), GENERATOR_CONFIG),
6295
- outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG)
6304
+ outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG),
6305
+ /**
6306
+ * Hash of the license the user has agreed to.
6307
+ */
6308
+ agreedToLicense: zod_default.string().optional(),
6309
+ checkForUpdates: zod_default.boolean().optional().default(true)
6296
6310
  });
6297
6311
  var DEFAULT_CONFIG = {
6298
6312
  inputs: {},
6299
6313
  generators: {},
6300
- outputs: {}
6314
+ outputs: {},
6315
+ checkForUpdates: true
6301
6316
  };
6302
6317
  var isPlaying = (state) => state.state === "playing" || state.state === "lagging";
6303
6318
  var isStopped = (state) => state.state === "stopped";
@@ -6313,9 +6328,11 @@ var DEFAULT_PROPS2 = {
6313
6328
  state: {
6314
6329
  inputs: {},
6315
6330
  outputs: {},
6316
- generators: {}
6331
+ generators: {},
6332
+ updates: null
6317
6333
  },
6318
- handlers: { children: {} }
6334
+ handlers: { children: {} },
6335
+ license: ""
6319
6336
  };
6320
6337
  var ToolboxRoot = class extends Base {
6321
6338
  /** @hidden */
@@ -6343,7 +6360,8 @@ var ToolboxRoot = class extends Base {
6343
6360
  key: idMap.getId(this),
6344
6361
  config: this.props.config,
6345
6362
  state: this.props.state,
6346
- handlers: this.props.handlers
6363
+ handlers: this.props.handlers,
6364
+ license: this.props.license
6347
6365
  };
6348
6366
  }
6349
6367
  /** @hidden */
@@ -6372,9 +6390,56 @@ var ToolboxRoot = class extends Base {
6372
6390
  };
6373
6391
  };
6374
6392
 
6393
+ // src/components/backend/license-gate.ts
6394
+ import {
6395
+ Base as Base2,
6396
+ EventEmitter as EventEmitter4
6397
+ } from "@arcanejs/toolkit/components/base";
6398
+ var DEFAULT_PROPS3 = {
6399
+ license: "",
6400
+ hash: ""
6401
+ };
6402
+ var LicenseGate = class extends Base2 {
6403
+ /** @hidden */
6404
+ events = new EventEmitter4();
6405
+ constructor(props) {
6406
+ super(DEFAULT_PROPS3, props, {
6407
+ onPropsUpdated: (oldProps) => this.events.processPropChanges(
6408
+ {
6409
+ onAcceptLicense: "acceptLicense"
6410
+ },
6411
+ oldProps,
6412
+ this.props
6413
+ )
6414
+ });
6415
+ this.triggerInitialPropsUpdate();
6416
+ }
6417
+ addListener = this.events.addListener;
6418
+ removeListener = this.events.removeListener;
6419
+ /** @hidden */
6420
+ getProtoInfo(idMap) {
6421
+ return {
6422
+ namespace: "timecode-toolbox",
6423
+ component: "license-gate",
6424
+ key: idMap.getId(this),
6425
+ license: this.props.license,
6426
+ hash: this.props.hash
6427
+ };
6428
+ }
6429
+ /** @hidden */
6430
+ handleMessage = (message) => {
6431
+ if (isTimecodeToolboxComponentMessage(message, "license-gate")) {
6432
+ if (message.action === "accept-license") {
6433
+ this.events.emit("acceptLicense", message.hash);
6434
+ }
6435
+ }
6436
+ };
6437
+ };
6438
+
6375
6439
  // src/components/backend/index.ts
6376
6440
  var C = prepareComponents2("timecode-toolbox", {
6377
- ToolboxRoot
6441
+ ToolboxRoot,
6442
+ LicenseGate
6378
6443
  });
6379
6444
 
6380
6445
  // src/config.ts
@@ -6458,7 +6523,7 @@ var TIMECODE_FPS = {
6458
6523
 
6459
6524
  // ../../packages/artnet/dist/index.js
6460
6525
  import { createSocket } from "dgram";
6461
- import EventEmitter4 from "events";
6526
+ import EventEmitter5 from "events";
6462
6527
  var ARTNET_HEADER = "Art-Net\0";
6463
6528
  var ARTNET_VERSION = 14;
6464
6529
  var OP_TIME_CODE = 38656;
@@ -6575,7 +6640,7 @@ var parseTimecodePacket = (packet, source) => {
6575
6640
  };
6576
6641
  };
6577
6642
  var createArtnet = (config) => {
6578
- const events = new EventEmitter4();
6643
+ const events = new EventEmitter5();
6579
6644
  let sendSocket = null;
6580
6645
  let receiveSocket = null;
6581
6646
  let destroyed = false;
@@ -6976,7 +7041,7 @@ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
6976
7041
  var __getOwnPropNames2 = Object.getOwnPropertyNames;
6977
7042
  var __getProtoOf2 = Object.getPrototypeOf;
6978
7043
  var __hasOwnProp2 = Object.prototype.hasOwnProperty;
6979
- var __commonJS2 = (cb, mod) => function __require() {
7044
+ var __commonJS2 = (cb, mod) => function __require2() {
6980
7045
  return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6981
7046
  };
6982
7047
  var __copyProps2 = (to, from, except, desc) => {
@@ -7515,7 +7580,7 @@ var calculateUniqueNodeId = (info) => {
7515
7580
 
7516
7581
  // ../../packages/tcnet/dist/index.js
7517
7582
  import { createSocket as createSocket2 } from "dgram";
7518
- import EventEmitter5 from "events";
7583
+ import EventEmitter6 from "events";
7519
7584
  import { promisify } from "util";
7520
7585
  var require_lodash = __commonJS2({
7521
7586
  "../../node_modules/.pnpm/lodash@4.17.23/node_modules/lodash/lodash.js"(exports, module) {
@@ -13034,7 +13099,7 @@ var bindSocket2 = (socket, port, address) => {
13034
13099
  };
13035
13100
  var createTCNetNode = (props) => {
13036
13101
  const { logger: logger2 } = props;
13037
- const events = new EventEmitter5();
13102
+ const events = new EventEmitter6();
13038
13103
  let iface = null;
13039
13104
  const sockets = {
13040
13105
  broadcastSend: null,
@@ -13545,7 +13610,7 @@ var createTCNetNode = (props) => {
13545
13610
  };
13546
13611
 
13547
13612
  // ../../packages/tcnet/dist/monitor.js
13548
- import EventEmitter6 from "events";
13613
+ import EventEmitter7 from "events";
13549
13614
  var MAX_DELTA_MS = 10;
13550
13615
  var layerDataIdToIndex = (dataLayerId) => {
13551
13616
  return dataLayerId - 1;
@@ -13564,7 +13629,7 @@ var TCNET_LAYER_INDEXES = Array.from(
13564
13629
  (_, i) => asLayerIndex(i)
13565
13630
  );
13566
13631
  var createTCNetTimecodeMonitor = (tcNetNode, logger2) => {
13567
- const events = new EventEmitter6();
13632
+ const events = new EventEmitter7();
13568
13633
  const on = events.on.bind(events);
13569
13634
  const addListener = events.addListener.bind(events);
13570
13635
  const removeListener = events.removeListener.bind(events);
@@ -14470,11 +14535,179 @@ var Generators = (props) => {
14470
14535
  return /* @__PURE__ */ jsx8(Fragment3, { children: /* @__PURE__ */ jsx8(ClockGenerators, { ...props }) });
14471
14536
  };
14472
14537
 
14538
+ // src/license.ts
14539
+ import { createHash } from "crypto";
14540
+ import { readFile } from "fs/promises";
14541
+ import { useEffect as useEffect9, useState as useState6 } from "react";
14542
+ var getLicense = async () => {
14543
+ const licenseText = await readFile(__require.resolve("../LICENSE"), "utf-8");
14544
+ const hash = createHash("sha256").update(licenseText).digest("hex");
14545
+ return { text: licenseText, hash };
14546
+ };
14547
+ var useLicense = () => {
14548
+ const [license, setLicense] = useState6(null);
14549
+ useEffect9(() => {
14550
+ getLicense().then(setLicense);
14551
+ }, []);
14552
+ return license;
14553
+ };
14554
+
14555
+ // src/updates.tsx
14556
+ import { useCallback as useCallback6, useEffect as useEffect10, useMemo as useMemo5 } from "react";
14557
+
14558
+ // ../../packages/apis/dist/index.js
14559
+ var APP_PLATFORM = zod_default.enum(["windows", "macos", "linux"]);
14560
+ var APP_ARCHITECTURE = zod_default.enum(["x64", "arm64"]);
14561
+ var APP_EDITION = zod_default.enum(["desktop", "cli"]);
14562
+ var CHECK_FOR_UPDATES_REQUEST = zod_default.object({
14563
+ app: zod_default.string(),
14564
+ edition: APP_EDITION,
14565
+ platform: APP_PLATFORM,
14566
+ architecture: APP_ARCHITECTURE,
14567
+ currentVersion: zod_default.string()
14568
+ });
14569
+ var CHECK_FOR_UPDATES_VERSION = zod_default.object({
14570
+ version: zod_default.string(),
14571
+ releaseNotes: zod_default.string()
14572
+ });
14573
+ var CHECK_FOR_UPDATES_RESPONSE = zod_default.object({
14574
+ downloadUrl: zod_default.string().optional(),
14575
+ latestVersion: zod_default.string(),
14576
+ newVersions: zod_default.array(CHECK_FOR_UPDATES_VERSION).optional()
14577
+ });
14578
+ var ApiError = class extends Error {
14579
+ constructor(message, response) {
14580
+ super(message);
14581
+ this.response = response;
14582
+ this.name = "ApiError";
14583
+ }
14584
+ };
14585
+ var api = (baseUrl) => {
14586
+ const checkForUpdates = async (request) => {
14587
+ const response = await fetch(new URL("/api/v1/updates", baseUrl), {
14588
+ method: "POST",
14589
+ headers: { "Content-Type": "application/json" },
14590
+ body: JSON.stringify(request)
14591
+ });
14592
+ if (!response.ok) {
14593
+ throw new ApiError(
14594
+ `Failed to check for updates: ${response.statusText} - ${await response.text()}`,
14595
+ response
14596
+ );
14597
+ }
14598
+ const responseData = await response.json();
14599
+ return CHECK_FOR_UPDATES_RESPONSE.parse(responseData);
14600
+ };
14601
+ return {
14602
+ checkForUpdates
14603
+ };
14604
+ };
14605
+
14606
+ // src/updates.tsx
14607
+ var getAppPlatform = () => {
14608
+ switch (process.platform) {
14609
+ case "win32":
14610
+ return "windows";
14611
+ case "darwin":
14612
+ return "macos";
14613
+ case "linux":
14614
+ return "linux";
14615
+ default:
14616
+ throw new Error(`Unsupported platform: ${process.platform}`);
14617
+ }
14618
+ };
14619
+ var getAppArchitecture = () => {
14620
+ switch (process.arch) {
14621
+ case "x64":
14622
+ return "x64";
14623
+ case "arm64":
14624
+ return "arm64";
14625
+ default:
14626
+ throw new Error(`Unsupported architecture: ${process.arch}`);
14627
+ }
14628
+ };
14629
+ var UpdateChecker = ({
14630
+ apiBaseUrl,
14631
+ version: version2,
14632
+ edition,
14633
+ setUpdateState
14634
+ }) => {
14635
+ const a = useMemo5(() => api(apiBaseUrl), [apiBaseUrl]);
14636
+ const logger2 = useLogger();
14637
+ const checkForUpdates = useCallback6(() => {
14638
+ const lastCheckedMillis = Date.now();
14639
+ setUpdateState({ type: "loading" });
14640
+ a.checkForUpdates({
14641
+ app: "timecode-toolbox",
14642
+ edition,
14643
+ platform: getAppPlatform(),
14644
+ architecture: getAppArchitecture(),
14645
+ currentVersion: version2
14646
+ }).then((response) => {
14647
+ if (!response.newVersions || response.newVersions.length === 0) {
14648
+ setUpdateState({ type: "up-to-date", lastCheckedMillis });
14649
+ logger2.info("No updates available");
14650
+ return;
14651
+ }
14652
+ setUpdateState({
14653
+ type: "updates-available",
14654
+ lastCheckedMillis,
14655
+ response
14656
+ });
14657
+ logger2.info(
14658
+ `Update available: ${response.latestVersion} - Download at ${response.downloadUrl}`
14659
+ );
14660
+ }).catch((error) => {
14661
+ const err = new Error("Failed to check for updates");
14662
+ err.cause = error instanceof Error ? error : new Error(String(error));
14663
+ setUpdateState({
14664
+ lastCheckedMillis,
14665
+ type: "error",
14666
+ error: String(err)
14667
+ });
14668
+ logger2.error(err);
14669
+ });
14670
+ }, [a, setUpdateState, edition, logger2, version2]);
14671
+ useEffect10(() => {
14672
+ checkForUpdates();
14673
+ const interval = setInterval(checkForUpdates, 1e3 * 60 * 60);
14674
+ return () => clearInterval(interval);
14675
+ }, [checkForUpdates]);
14676
+ useEffect10(() => {
14677
+ return () => {
14678
+ setUpdateState(null);
14679
+ };
14680
+ }, [setUpdateState]);
14681
+ return null;
14682
+ };
14683
+
14684
+ // src/env.ts
14685
+ var getEnv = (logger2) => {
14686
+ const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : {
14687
+ from: 4100,
14688
+ to: 4200
14689
+ };
14690
+ let API_BASE_URL;
14691
+ try {
14692
+ API_BASE_URL = process.env.API_BASE_URL ? new URL(process.env.API_BASE_URL) : new URL("https://arcanewizards.com");
14693
+ } catch (error) {
14694
+ const err = new Error(`Invalid API_BASE_URL: ${process.env.API_BASE_URL}`);
14695
+ err.cause = error instanceof Error ? error : new Error(String(error));
14696
+ logger2.error(err);
14697
+ throw err;
14698
+ }
14699
+ return {
14700
+ PORT,
14701
+ API_BASE_URL
14702
+ };
14703
+ };
14704
+
14473
14705
  // src/app.tsx
14474
- import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
14706
+ import { Fragment as Fragment4, jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
14475
14707
  var App = ({
14476
14708
  title,
14477
14709
  version: version2,
14710
+ edition,
14478
14711
  toolkit,
14479
14712
  dataDirectory,
14480
14713
  logger: logger2,
@@ -14482,8 +14715,9 @@ var App = ({
14482
14715
  setWindowUrl,
14483
14716
  shutdownContext
14484
14717
  }) => {
14718
+ const env = useMemo6(() => getEnv(logger2), [logger2]);
14485
14719
  const { data, error, updateData, resetData } = useDataFileContext(ToolboxConfigData);
14486
- useEffect9(() => {
14720
+ useEffect11(() => {
14487
14721
  if (error) {
14488
14722
  logger2.warn("Resetting config to application default");
14489
14723
  resetData();
@@ -14492,13 +14726,20 @@ var App = ({
14492
14726
  const onUpdateConfig = (diff) => {
14493
14727
  updateData((prev) => patchJson(prev, diff) ?? DEFAULT_CONFIG);
14494
14728
  };
14495
- const [state, setState] = useState6({
14729
+ const [state, setState] = useState7({
14496
14730
  inputs: {},
14497
14731
  outputs: {},
14498
- generators: {}
14732
+ generators: {},
14733
+ updates: null
14499
14734
  });
14500
- const [handlers, setHandlers] = useState6({ children: {} });
14501
- const availableHandlers = useMemo5(
14735
+ const setUpdateState = useCallback7((updates) => {
14736
+ setState((prev) => ({
14737
+ ...prev,
14738
+ updates
14739
+ }));
14740
+ }, []);
14741
+ const [handlers, setHandlers] = useState7({ children: {} });
14742
+ const availableHandlers = useMemo6(
14502
14743
  () => mapTree(
14503
14744
  handlers,
14504
14745
  (node) => Object.fromEntries(
@@ -14507,7 +14748,7 @@ var App = ({
14507
14748
  ),
14508
14749
  [handlers]
14509
14750
  );
14510
- const callHandler = useCallback6(
14751
+ const callHandler = useCallback7(
14511
14752
  async (call) => {
14512
14753
  const handlerFunc = getTreeValue(handlers, call.path)?.[call.handler];
14513
14754
  if (handlerFunc) {
@@ -14519,6 +14760,54 @@ var App = ({
14519
14760
  },
14520
14761
  [handlers]
14521
14762
  );
14763
+ const license = useLicense();
14764
+ const appListenerConfig = useMemo6(
14765
+ () => ({
14766
+ default: {
14767
+ port: env.PORT
14768
+ }
14769
+ }),
14770
+ [env.PORT]
14771
+ );
14772
+ if (!license) {
14773
+ return;
14774
+ }
14775
+ const children = data.agreedToLicense === license.hash ? /* @__PURE__ */ jsxs2(Fragment4, { children: [
14776
+ /* @__PURE__ */ jsx9(
14777
+ C.ToolboxRoot,
14778
+ {
14779
+ config: data,
14780
+ state,
14781
+ handlers: availableHandlers,
14782
+ onUpdateConfig,
14783
+ onCallHandler: callHandler,
14784
+ license: license.text
14785
+ }
14786
+ ),
14787
+ /* @__PURE__ */ jsx9(InputConnections, { state, setState }),
14788
+ /* @__PURE__ */ jsx9(
14789
+ Generators,
14790
+ {
14791
+ state,
14792
+ setState,
14793
+ setHandlers
14794
+ }
14795
+ ),
14796
+ /* @__PURE__ */ jsx9(OutputConnections, { state, setState })
14797
+ ] }) : /* @__PURE__ */ jsx9(
14798
+ C.LicenseGate,
14799
+ {
14800
+ license: license.text,
14801
+ hash: license.hash,
14802
+ onAcceptLicense: (agreedToLicense) => {
14803
+ logger2.info(`License accepted: ${agreedToLicense}`);
14804
+ updateData((current) => ({
14805
+ ...current,
14806
+ agreedToLicense
14807
+ }));
14808
+ }
14809
+ }
14810
+ );
14522
14811
  return /* @__PURE__ */ jsxs2(
14523
14812
  AppShell,
14524
14813
  {
@@ -14529,32 +14818,22 @@ var App = ({
14529
14818
  logEventEmitter,
14530
14819
  shutdownContext,
14531
14820
  children: [
14532
- /* @__PURE__ */ jsx9(
14533
- C.ToolboxRoot,
14821
+ children,
14822
+ data.checkForUpdates && /* @__PURE__ */ jsx9(
14823
+ UpdateChecker,
14534
14824
  {
14535
- config: data,
14536
- state,
14537
- handlers: availableHandlers,
14538
- onUpdateConfig,
14539
- onCallHandler: callHandler
14825
+ version: version2,
14826
+ edition,
14827
+ apiBaseUrl: env.API_BASE_URL,
14828
+ setUpdateState
14540
14829
  }
14541
14830
  ),
14542
- /* @__PURE__ */ jsx9(InputConnections, { state, setState }),
14543
- /* @__PURE__ */ jsx9(Generators, { state, setState, setHandlers }),
14544
- /* @__PURE__ */ jsx9(OutputConnections, { state, setState }),
14545
14831
  /* @__PURE__ */ jsx9(
14546
14832
  AppListenerManager,
14547
14833
  {
14548
14834
  toolkit,
14549
14835
  setWindowUrl,
14550
- listenerConfig: {
14551
- default: {
14552
- port: {
14553
- from: 4100,
14554
- to: 4200
14555
- }
14556
- }
14557
- }
14836
+ listenerConfig: appListenerConfig
14558
14837
  }
14559
14838
  )
14560
14839
  ]
@@ -14572,18 +14851,20 @@ var createApp = (props) => {
14572
14851
  };
14573
14852
 
14574
14853
  // package.json
14575
- var version = "0.1.0";
14854
+ var version = "0.1.1";
14576
14855
 
14577
14856
  // src/index.ts
14578
14857
  var runTimecodeToolboxServer = ({
14579
14858
  logger: logger2,
14580
14859
  appProps,
14581
14860
  toolkitOptions,
14582
- title
14861
+ title,
14862
+ edition
14583
14863
  }) => runSigilApp({
14584
14864
  logger: logger2,
14585
14865
  title,
14586
14866
  version,
14867
+ edition,
14587
14868
  appProps,
14588
14869
  toolkitOptions,
14589
14870
  createApp,
@@ -14607,7 +14888,8 @@ var server = runTimecodeToolboxServer({
14607
14888
  toolkitOptions: {
14608
14889
  entrypointJsFile: path2.join(path2.dirname(__dirname), "dist/entrypoint.js")
14609
14890
  },
14610
- title: "Timecode Toolbox Server"
14891
+ title: "Timecode Toolbox Server",
14892
+ edition: "cli"
14611
14893
  });
14612
14894
  var shutdown = () => server.shutdown().catch((err) => {
14613
14895
  logger.error({ err }, "Error during shutdown");
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@arcanewizards/timecode-toolbox",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
+ "license": "MIT",
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "https://github.com/ArcaneWizards/open-source.git",
@@ -26,6 +27,10 @@
26
27
  "./entrypoint.css": "./dist/entrypoint.css",
27
28
  "./package.json": "./package.json"
28
29
  },
30
+ "files": [
31
+ "LICENSE",
32
+ "dist"
33
+ ],
29
34
  "devDependencies": {
30
35
  "@arcanejs/build-utils": "^0.1.2",
31
36
  "@arcanejs/diff": "^0.5.2",
@@ -49,11 +54,12 @@
49
54
  "music-metadata": "^11.0.0",
50
55
  "osc-js": "^2.4.1",
51
56
  "radix-ui": "^1.4.3",
52
- "@arcanewizards/artnet": "^0.1.2",
57
+ "@arcanewizards/apis": "^0.0.1",
58
+ "@arcanewizards/artnet": "^0.1.3",
53
59
  "@arcanewizards/eslint-config": "^0.0.0",
54
- "@arcanewizards/net-utils": "^0.1.2",
55
- "@arcanewizards/sigil": "^0.1.2",
56
- "@arcanewizards/tcnet": "^0.1.2",
60
+ "@arcanewizards/net-utils": "^0.1.3",
61
+ "@arcanewizards/sigil": "^0.1.3",
62
+ "@arcanewizards/tcnet": "^0.1.3",
57
63
  "@arcanewizards/typescript-config": "^0.0.0"
58
64
  },
59
65
  "dependencies": {
@@ -64,7 +70,7 @@
64
70
  "react": "^19.2.0"
65
71
  },
66
72
  "scripts": {
67
- "build": "pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
73
+ "build": "pnpm check:types && rm -rf dist && cp ../../LICENSE ./LICENSE && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
68
74
  "build:entrypoint": "arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap",
69
75
  "build:frontend": "arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap",
70
76
  "build:styles": "tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css",
@@ -1,58 +0,0 @@
1
-
2
- > @arcanewizards/timecode-toolbox@0.1.0 build /home/runner/work/open-source/open-source/apps/timecode-toolbox
3
- > pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map
4
-
5
-
6
- > @arcanewizards/timecode-toolbox@0.1.0 check:types /home/runner/work/open-source/open-source/apps/timecode-toolbox
7
- > tsc --noEmit
8
-
9
- CLI Building entry: src/index.ts, src/start.ts, src/components/frontend/index.tsx
10
- CLI Using tsconfig: tsconfig.json
11
- CLI tsup v8.5.1
12
- CLI Using tsup config: /home/runner/work/open-source/open-source/apps/timecode-toolbox/tsup.config.ts
13
- CLI Target: es2022
14
- CJS Build start
15
- ESM Build start
16
- DTS Build start
17
- ESM dist/index.mjs 498.69 KB
18
- ESM dist/start.mjs 498.45 KB
19
- ESM dist/components/frontend/index.mjs 602.17 KB
20
- ESM ⚡️ Build success in 477ms
21
- CJS dist/index.js 500.63 KB
22
- CJS dist/components/frontend/index.js 615.16 KB
23
- CJS dist/start.js 500.33 KB
24
- CJS ⚡️ Build success in 483ms
25
- DTS ⚡️ Build success in 5507ms
26
- DTS dist/start.d.ts 13.00 B
27
- DTS dist/components/frontend/index.d.ts 649.00 B
28
- DTS dist/index.d.ts 2.18 KB
29
- DTS dist/start.d.mts 13.00 B
30
- DTS dist/components/frontend/index.d.mts 649.00 B
31
- DTS dist/index.d.mts 2.18 KB
32
-
33
- > @arcanewizards/timecode-toolbox@0.1.0 build:entrypoint /home/runner/work/open-source/open-source/apps/timecode-toolbox
34
- > arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap
35
-
36
-
37
- dist/entrypoint.js 1.7mb ⚠️
38
- dist/entrypoint.js.map 2.8mb
39
-
40
- ⚡ Done in 1505ms
41
-
42
- > @arcanewizards/timecode-toolbox@0.1.0 build:frontend /home/runner/work/open-source/open-source/apps/timecode-toolbox
43
- > arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap
44
-
45
-
46
- dist/frontend.js 1.7mb ⚠️
47
- dist/frontend.js.map 2.8mb
48
-
49
- ⚡ Done in 1523ms
50
-
51
- > @arcanewizards/timecode-toolbox@0.1.0 build:styles /home/runner/work/open-source/open-source/apps/timecode-toolbox
52
- > tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css
53
-
54
- ≈ tailwindcss v4.2.2
55
-
56
- Done in 77ms
57
- Checking export maps...
58
-  PASS  package.json
@@ -1,4 +0,0 @@
1
-
2
- > @arcanewizards/timecode-toolbox@0.1.0 lint /home/runner/work/open-source/open-source/apps/timecode-toolbox
3
- > eslint . --max-warnings 0
4
-