@synapticon/motion-master-client 6.0.0-alpha.91 → 6.0.0-alpha.93

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
- import { AlStatusCode, AutoTuningError, AutoTuningRunRequest, AutoTuningRunResponse, AutoTuningStatus, BrakeState, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceFile, DeviceParameter, EscRegister, EsiParseResult, FirmwareCompatibility, FirmwarePackageName, FoeErrorCode, GameLoopHealth, HardwareDescription, HrdRecording, IntegroVariant, IntegroVariantOption, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OperationModes, OutputStageResult, ParameterCacheEntry, PdoMapping, PdoMappingRequest, ProcedureListing, ProcedureRequest, ProcedureSnapshot, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
1
+ import { AlStatusCode, AutoTuningError, AutoTuningRunRequest, AutoTuningRunResponse, AutoTuningStatus, BrakeState, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceFile, DeviceParameter, EscRegister, EsiParseResult, FirmwareCompatibility, FirmwarePackageName, FoeErrorCode, GameLoopHealth, HardwareDescription, HrdRecording, IntegroVariant, IntegroVariantOption, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OperationModes, OutputStageResult, ParameterCacheEntry, ParameterValue, PdoMapping, PdoMappingRequest, ProcedureListing, ProcedureRequest, ProcedureSnapshot, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
2
2
  import { HttpClient, RequestParams } from "./http-client.js";
3
3
  export declare class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
4
4
  /**
@@ -633,7 +633,7 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
633
633
  */
634
634
  getObjectDataTypes: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ObjectDataTypeInfo[], any>>;
635
635
  /**
636
- * @description Enumerates the entire CoE object dictionary of the device at `slavePosition` via the SDO Info service ("Get Object List" → "Get Object Description" → "Get Entry Description") and rebuilds its parameter map. The device must be in PRE-OP, SAFE-OP, or OP (mailbox communication active). On a fully populated drive the call can take several seconds. When `readValues=true` each entry is additionally read via SDO upload and the decoded value is stored on the parameter; entries that fail to read keep their type-appropriate default and the call still succeeds.
636
+ * @description Enumerates the entire CoE object dictionary of the device at `slavePosition` via the SDO Info service ("Get Object List" → "Get Object Description" → "Get Entry Description") and rebuilds its parameter map. The device must be in PRE-OP, SAFE-OP, or OP (mailbox communication active). On a fully populated drive the call can take several seconds. When `readValues=true` each entry is additionally read via SDO upload and the decoded value is stored on the parameter. An entry that fails to read keeps the value of an earlier read with `syncState` `stale`, or the type-appropriate default with `syncState` `unknown`, and the call still succeeds. Check `syncState` to find the entries that were not read.
637
637
  *
638
638
  * @name InitializeDeviceParameters
639
639
  * @summary Initialise the parameter list for a device by enumerating its object dictionary
@@ -653,7 +653,7 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
653
653
  error: string;
654
654
  }>>;
655
655
  /**
656
- * @description Re-reads the value of every readable parameter already loaded for the device at `slavePosition`, leaving the parameter list itself intact (it does not re-enumerate the object dictionary — use `POST …/parameters/init` for that). Each value is read PDO-aware: from the live process image when the device is exchanging and the object is PDO-mapped, otherwise via an SDO upload over the mailbox. Write-only objects are skipped. Best-effort: an entry that fails to read keeps its cached value and the call still succeeds. Returns the refreshed list, ordered by `(index, subindex)`.
656
+ * @description Re-reads the value of every readable parameter already loaded for the device at `slavePosition`, leaving the parameter list itself intact (it does not re-enumerate the object dictionary — use `POST …/parameters/init` for that). Each value is read PDO-aware: from the live process image when the device is exchanging and the object is PDO-mapped, otherwise via an SDO upload over the mailbox. Write-only objects are skipped. Best-effort: an entry that fails to read keeps its cached value, a `synced` entry becomes `stale`, and the call still succeeds. Returns the refreshed list, ordered by `(index, subindex)`.
657
657
  *
658
658
  * @name ReadAllDeviceParameters
659
659
  * @summary Refresh the cached value of every parameter without re-enumerating the dictionary
@@ -703,10 +703,10 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
703
703
  */
704
704
  writeParameter: (slavePosition: number, index: number, subindex: number, data: {
705
705
  /**
706
- * The value to set, converted to the parameter's declared type. A number for integer/real objects, a string for string objects, or an array of bytes for octet/domain objects.
706
+ * The value to set. The server converts it to the declared type of the parameter. `ParameterValue` says which JSON type each `dataType` uses.
707
707
  * @example 100
708
708
  */
709
- value: number | string | number[];
709
+ value: ParameterValue;
710
710
  }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<DeviceParameter, void | {
711
711
  /**
712
712
  * Human-readable error message from the driver
@@ -794,6 +794,7 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
794
794
  setProcessDataWatchdog: (slavePosition: number, data: {
795
795
  /**
796
796
  * Desired watchdog timeout in milliseconds; 0 disables the watchdog
797
+ * @format double
797
798
  * @min 0
798
799
  * @example 200
799
800
  */
@@ -325,7 +325,7 @@ export class Api extends HttpClient {
325
325
  ...params,
326
326
  });
327
327
  /**
328
- * @description Enumerates the entire CoE object dictionary of the device at `slavePosition` via the SDO Info service ("Get Object List" → "Get Object Description" → "Get Entry Description") and rebuilds its parameter map. The device must be in PRE-OP, SAFE-OP, or OP (mailbox communication active). On a fully populated drive the call can take several seconds. When `readValues=true` each entry is additionally read via SDO upload and the decoded value is stored on the parameter; entries that fail to read keep their type-appropriate default and the call still succeeds.
328
+ * @description Enumerates the entire CoE object dictionary of the device at `slavePosition` via the SDO Info service ("Get Object List" → "Get Object Description" → "Get Entry Description") and rebuilds its parameter map. The device must be in PRE-OP, SAFE-OP, or OP (mailbox communication active). On a fully populated drive the call can take several seconds. When `readValues=true` each entry is additionally read via SDO upload and the decoded value is stored on the parameter. An entry that fails to read keeps the value of an earlier read with `syncState` `stale`, or the type-appropriate default with `syncState` `unknown`, and the call still succeeds. Check `syncState` to find the entries that were not read.
329
329
  *
330
330
  * @name InitializeDeviceParameters
331
331
  * @summary Initialise the parameter list for a device by enumerating its object dictionary
@@ -339,7 +339,7 @@ export class Api extends HttpClient {
339
339
  ...params,
340
340
  });
341
341
  /**
342
- * @description Re-reads the value of every readable parameter already loaded for the device at `slavePosition`, leaving the parameter list itself intact (it does not re-enumerate the object dictionary — use `POST …/parameters/init` for that). Each value is read PDO-aware: from the live process image when the device is exchanging and the object is PDO-mapped, otherwise via an SDO upload over the mailbox. Write-only objects are skipped. Best-effort: an entry that fails to read keeps its cached value and the call still succeeds. Returns the refreshed list, ordered by `(index, subindex)`.
342
+ * @description Re-reads the value of every readable parameter already loaded for the device at `slavePosition`, leaving the parameter list itself intact (it does not re-enumerate the object dictionary — use `POST …/parameters/init` for that). Each value is read PDO-aware: from the live process image when the device is exchanging and the object is PDO-mapped, otherwise via an SDO upload over the mailbox. Write-only objects are skipped. Best-effort: an entry that fails to read keeps its cached value, a `synced` entry becomes `stale`, and the call still succeeds. Returns the refreshed list, ordered by `(index, subindex)`.
343
343
  *
344
344
  * @name ReadAllDeviceParameters
345
345
  * @summary Refresh the cached value of every parameter without re-enumerating the dictionary
@@ -100,11 +100,13 @@ export interface GameLoopHealth {
100
100
  periodUs: number;
101
101
  /**
102
102
  * Target cycle rate (1e6 / periodUs), in hertz
103
+ * @format double
103
104
  * @example 1000
104
105
  */
105
106
  targetHz: number;
106
107
  /**
107
108
  * Cumulative average rate since the loop started (executedCycles / uptime), in hertz; 0 before the loop starts. Below targetHz means the host cannot sustain the configured period.
109
+ * @format double
108
110
  * @example 999.56
109
111
  */
110
112
  achievedHz: number;
@@ -254,6 +256,7 @@ export interface ProcessDataWatchdog {
254
256
  timeoutNs: number;
255
257
  /**
256
258
  * The same timeout in milliseconds (convenience for display/editing).
259
+ * @format double
257
260
  * @example 100
258
261
  */
259
262
  timeoutMs: number;
@@ -1437,6 +1440,11 @@ export interface ObjectDataTypeInfo {
1437
1440
  */
1438
1441
  bitSize: number;
1439
1442
  }
1443
+ /**
1444
+ * The value of one object dictionary entry, encoded by its `dataType` (ETG.1020). BOOLEAN (0x0001), INTEGER8 (0x0002), INTEGER16 (0x0003), INTEGER32 (0x0004), INTEGER64 (0x0015), UNSIGNED8 (0x0005), UNSIGNED16 (0x0006), UNSIGNED32 (0x0007), BYTE (0x001E), WORD (0x001F) and DWORD (0x0020) are a JSON integer that fits `int64`. UNSIGNED64 (0x001B) is a JSON integer that fits `uint64`, and a value above 9223372036854775807 matches only that alternative. REAL32 (0x0008) and REAL64 (0x0011) are a JSON number, which the server writes as a double, so a REAL32 shows its exact binary value. VISIBLE STRING (0x0009) and UNICODE STRING (0x000B) are a string. Every other data type, OCTET STRING and DOMAIN included, is an array of byte values. Every integer is also a valid number, so use `dataType` to choose the alternative, the way the server does. On a write, the server converts the value to the declared type of the parameter.
1445
+ * @example 12345
1446
+ */
1447
+ export type ParameterValue = number | string | number[];
1440
1448
  export interface DeviceParameter {
1441
1449
  /**
1442
1450
  * CoE object index
@@ -1484,26 +1492,26 @@ export interface DeviceParameter {
1484
1492
  */
1485
1493
  origin: "objectDictionary" | "sii";
1486
1494
  /**
1487
- * Last-known value, decoded according to `dataType`. Initialised to a type-appropriate zero (0 for numbers, "" for strings, [] for raw bytes) before the first read. After a successful SDO upload, holds the decoded value; the JSON encoding follows the variant alternative — number, string, or array of byte values.
1495
+ * Last-known value, decoded according to `dataType`. Initialised to a type-appropriate zero (0 for numbers, "" for strings, [] for raw bytes) before the first read. After a successful SDO upload, holds the decoded value. `ParameterValue` says which JSON type each `dataType` uses.
1488
1496
  * @example 12345
1489
1497
  */
1490
- value: number | string | number[];
1498
+ value: ParameterValue;
1491
1499
  /**
1492
1500
  * ETG.1004 unit code reported by the slave for this entry. Absent when the slave does not populate the Unit field of the SDO Info response. The 32-bit code decomposes into prefix, base SI unit, and exponent per ETG.1004.
1493
1501
  * @example 0
1494
1502
  */
1495
1503
  unit?: number;
1496
1504
  /** Slave-reported default value, decoded with the same logic as `value`. Absent when the slave does not report a default. */
1497
- defaultValue?: number | string | number[];
1505
+ defaultValue?: ParameterValue;
1498
1506
  /** Slave-reported minimum value, decoded with the same logic as `value`. Absent when the slave does not report a minimum. */
1499
- minValue?: number | string | number[];
1507
+ minValue?: ParameterValue;
1500
1508
  /** Slave-reported maximum value, decoded with the same logic as `value`. Absent when the slave does not report a maximum. */
1501
- maxValue?: number | string | number[];
1509
+ maxValue?: ParameterValue;
1502
1510
  /**
1503
- * Freshness of `value` relative to the device. `synced` — matches the device (last successful read or write); `pending` — set locally while offline or after a failed write, not yet confirmed on the device; `unknown` — never read, `value` is the type-appropriate default.
1511
+ * Freshness of `value` relative to the device. `synced` — matches the device (last successful read or write); `pending` — set locally while offline or after a failed write, not yet confirmed on the device; `stale` — came from an earlier read or write, and the latest read of the object failed; `unknown` — never read, `value` is the type-appropriate default. A failed read turns `synced` into `stale` and keeps the value. It leaves `unknown` and `pending` unchanged. The next successful read sets `synced` again.
1504
1512
  * @example "synced"
1505
1513
  */
1506
- syncState: "unknown" | "synced" | "pending";
1514
+ syncState: "unknown" | "synced" | "pending" | "stale";
1507
1515
  }
1508
1516
  /** Parsed SII (EEPROM) image of a slave — the fixed header plus the decoded category section. String-index fields are 1-based references into `category.strings`. */
1509
1517
  export interface SlaveInformationInterface {
@@ -1795,8 +1803,11 @@ export interface PlantModel {
1795
1803
  }
1796
1804
  /** One controller's gains. */
1797
1805
  export interface Pid {
1806
+ /** @format double */
1798
1807
  kp?: number;
1808
+ /** @format double */
1799
1809
  ki?: number;
1810
+ /** @format double */
1800
1811
  kd?: number;
1801
1812
  }
1802
1813
  /** Controller gains. A function that tunes only the velocity loop leaves the position gains at zero. */
@@ -1814,29 +1825,52 @@ export type Bode = Record<string, (number | null)[]>;
1814
1825
  /** Drive configuration, as read from the drive. */
1815
1826
  export interface DriveConfig {
1816
1827
  vel_lp_type?: number;
1828
+ /** @format double */
1817
1829
  vel_lp_fc?: number;
1818
1830
  pos_lp_type?: number;
1831
+ /** @format double */
1819
1832
  pos_lp_fc?: number;
1820
1833
  notch_en?: number;
1834
+ /** @format double */
1821
1835
  notch_fw?: number;
1836
+ /** @format double */
1822
1837
  notch_fc?: number;
1838
+ /** @format double */
1823
1839
  notch_dp?: number;
1840
+ /** @format double */
1824
1841
  vel_ff_gain?: number;
1842
+ /** @format double */
1825
1843
  vel_ff_fc?: number;
1826
- /** Winding inductance. */
1844
+ /**
1845
+ * Winding inductance.
1846
+ * @format double
1847
+ */
1827
1848
  L?: number;
1828
- /** Winding resistance. */
1849
+ /**
1850
+ * Winding resistance.
1851
+ * @format double
1852
+ */
1829
1853
  R?: number;
1830
- /** DC link voltage. */
1854
+ /**
1855
+ * DC link voltage.
1856
+ * @format double
1857
+ */
1831
1858
  vdc?: number;
1859
+ /** @format double */
1832
1860
  current_ratio?: number;
1861
+ /** @format double */
1833
1862
  tc_kp?: number;
1863
+ /** @format double */
1834
1864
  tc_ki?: number;
1835
1865
  switch_F?: number;
1866
+ /** @format double */
1836
1867
  tc_st?: number;
1868
+ /** @format double */
1837
1869
  tc_damping?: number;
1838
1870
  software_version?: string;
1871
+ /** @format double */
1839
1872
  rated_torque?: number;
1873
+ /** @format double */
1840
1874
  max_vel_noise?: number;
1841
1875
  }
1842
1876
  /** The `data` schema depends on the value of `run`. Each variant pairs one `run` value with the inputs that function reads. `run: exit` is deliberately absent: it shuts the process down, and this endpoint refuses it with 400. */
@@ -1846,9 +1880,15 @@ export interface AutoTuneVelocityController {
1846
1880
  data: {
1847
1881
  /** Transfer function coefficients, highest order first. */
1848
1882
  plant_model: PlantModel;
1849
- /** Damping ratio. */
1883
+ /**
1884
+ * Damping ratio.
1885
+ * @format double
1886
+ */
1850
1887
  zeta: number;
1851
- /** Demanded bandwidth in Hz. */
1888
+ /**
1889
+ * Demanded bandwidth in Hz.
1890
+ * @format double
1891
+ */
1852
1892
  demanded_bw: number;
1853
1893
  };
1854
1894
  }
@@ -1859,10 +1899,17 @@ export interface AutoTunePositionController {
1859
1899
  plant_model: PlantModel;
1860
1900
  /** @example "PI-P" */
1861
1901
  controller_type: string;
1902
+ /** @format double */
1862
1903
  zeta: number;
1863
- /** Demanded settling time in seconds. */
1904
+ /**
1905
+ * Demanded settling time in seconds.
1906
+ * @format double
1907
+ */
1864
1908
  demanded_st: number;
1865
- /** Optional. Absent means the standard tuning rule. */
1909
+ /**
1910
+ * Optional. Absent means the standard tuning rule.
1911
+ * @format double
1912
+ */
1866
1913
  highFrictionGain?: number;
1867
1914
  };
1868
1915
  }
@@ -1897,20 +1944,30 @@ export interface AutoTuneNotch {
1897
1944
  export interface AutoTuneFeedbackFilters {
1898
1945
  run: "auto_tune_feedback_filters";
1899
1946
  data: {
1947
+ /** @format double */
1900
1948
  sigma_v: number;
1949
+ /** @format double */
1901
1950
  sigma_p: number;
1951
+ /** @format double */
1902
1952
  resVel: number;
1953
+ /** @format double */
1903
1954
  resPos: number;
1955
+ /** @format double */
1904
1956
  gearRatio: number;
1905
1957
  };
1906
1958
  }
1907
1959
  export interface ComputePositionControllerGains {
1908
1960
  run: "compute_position_controller_gains";
1909
1961
  data: {
1962
+ /** @format double */
1910
1963
  pk: number;
1964
+ /** @format double */
1911
1965
  pt: number;
1966
+ /** @format double */
1912
1967
  omega: number;
1968
+ /** @format double */
1913
1969
  alpha: number;
1970
+ /** @format double */
1914
1971
  zeta: number;
1915
1972
  /** @example "PI-P" */
1916
1973
  controller_type: string;
@@ -1924,9 +1981,15 @@ export interface IdentifyPlantModel {
1924
1981
  csv?: string;
1925
1982
  /** Path to that CSV instead of its contents. */
1926
1983
  filepath?: string;
1927
- /** Chirp start frequency in Hz. */
1984
+ /**
1985
+ * Chirp start frequency in Hz.
1986
+ * @format double
1987
+ */
1928
1988
  f0: number;
1929
- /** Chirp end frequency in Hz. */
1989
+ /**
1990
+ * Chirp end frequency in Hz.
1991
+ * @format double
1992
+ */
1930
1993
  f1: number;
1931
1994
  };
1932
1995
  }
@@ -1943,60 +2006,98 @@ export type AutoTuningRunResponse = GainsResult | FullVelocityResult | FullPosit
1943
2006
  export interface GainsResult {
1944
2007
  /** Controller gains. A function that tunes only the velocity loop leaves the position gains at zero. */
1945
2008
  gains?: Gains;
2009
+ /** @format double */
1946
2010
  duration?: number;
1947
2011
  }
1948
2012
  export interface FullVelocityResult {
1949
2013
  /** Controller gains. A function that tunes only the velocity loop leaves the position gains at zero. */
1950
2014
  gains?: Gains;
2015
+ /** @format double */
1951
2016
  demanded_bw?: number;
2017
+ /** @format double */
1952
2018
  demanded_zeta?: number;
1953
2019
  /** Stability margins and closed-loop metrics. */
1954
2020
  state?: {
2021
+ /** @format double */
1955
2022
  gm?: number;
2023
+ /** @format double */
1956
2024
  pm?: number;
2025
+ /** @format double */
1957
2026
  msens?: number;
2027
+ /** @format double */
1958
2028
  act_bw?: number;
2029
+ /** @format double */
1959
2030
  vel_cl?: number;
2031
+ /** @format double */
1960
2032
  noise_resp?: number;
2033
+ /** @format double */
1961
2034
  max_KS?: number;
1962
2035
  };
2036
+ /** @format double */
1963
2037
  duration?: number;
1964
2038
  }
1965
2039
  export interface FullPositionResult {
1966
2040
  /** Controller gains. A function that tunes only the velocity loop leaves the position gains at zero. */
1967
2041
  gains?: Gains;
2042
+ /** @format double */
1968
2043
  demanded_st?: number;
2044
+ /** @format double */
1969
2045
  demanded_zeta?: number;
2046
+ /** @format double */
1970
2047
  highFrictionGain?: number;
1971
2048
  /** Stability margins and closed-loop metrics, position and velocity loop. */
1972
2049
  state?: {
2050
+ /** @format double */
1973
2051
  gm_p?: number;
2052
+ /** @format double */
1974
2053
  pm_p?: number;
2054
+ /** @format double */
1975
2055
  msens_p?: number;
2056
+ /** @format double */
1976
2057
  gm_v?: number;
2058
+ /** @format double */
1977
2059
  pm_v?: number;
2060
+ /** @format double */
1978
2061
  msens_v?: number;
2062
+ /** @format double */
1979
2063
  noise_resp?: number;
2064
+ /** @format double */
1980
2065
  max_KS?: number;
2066
+ /** @format double */
1981
2067
  bw_p?: number;
2068
+ /** @format double */
1982
2069
  bw_v?: number;
2070
+ /** @format double */
1983
2071
  act_st?: number;
2072
+ /** @format double */
1984
2073
  pos_cl?: number;
1985
2074
  };
2075
+ /** @format double */
1986
2076
  duration?: number;
1987
2077
  }
1988
2078
  export interface NotchResult {
1989
2079
  notch_en?: boolean;
2080
+ /** @format double */
1990
2081
  notch_fc?: number | null;
2082
+ /** @format double */
1991
2083
  notch_fw?: number | null;
2084
+ /** @format double */
1992
2085
  notch_dp?: number | null;
2086
+ /** @format double */
1993
2087
  duration?: number;
1994
2088
  }
1995
2089
  export interface FeedbackFiltersResult {
1996
- /** Velocity feedback filter cut-off in Hz. */
2090
+ /**
2091
+ * Velocity feedback filter cut-off in Hz.
2092
+ * @format double
2093
+ */
1997
2094
  fcv?: number;
1998
- /** Position feedback filter cut-off in Hz. */
2095
+ /**
2096
+ * Position feedback filter cut-off in Hz.
2097
+ * @format double
2098
+ */
1999
2099
  fcp?: number;
2100
+ /** @format double */
2000
2101
  duration?: number;
2001
2102
  }
2002
2103
  export interface IdentifyPlantModelResult {
@@ -2004,11 +2105,13 @@ export interface IdentifyPlantModelResult {
2004
2105
  denominators?: number[];
2005
2106
  /** Bode diagram data, keyed by column name, every array the same length. This comes back in the response body instead of a written CSV, which is why no auto-tuning call needs a shared filesystem. A non-finite value is null. */
2006
2107
  bode?: Bode;
2108
+ /** @format double */
2007
2109
  duration?: number;
2008
2110
  }
2009
2111
  export interface BodeResult {
2010
2112
  /** Bode diagram data, keyed by column name, every array the same length. This comes back in the response body instead of a written CSV, which is why no auto-tuning call needs a shared filesystem. A non-finite value is null. */
2011
2113
  bode?: Bode;
2114
+ /** @format double */
2012
2115
  duration?: number;
2013
2116
  }
2014
2117
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synapticon/motion-master-client",
3
- "version": "6.0.0-alpha.91",
3
+ "version": "6.0.0-alpha.93",
4
4
  "description": "Isomorphic TypeScript client for Motion Master: the generated HTTP API client, the WebSocket connection, and helpers.",
5
5
  "license": "MIT",
6
6
  "repository": {