@evefrontier/dapp-kit 0.1.1 → 0.1.3

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 (215) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -2
  3. package/docs/api/assets/hierarchy.js +1 -1
  4. package/docs/api/assets/navigation.js +1 -1
  5. package/docs/api/assets/search.js +1 -1
  6. package/docs/api/classes/WalletNoAccountSelectedError.html +3 -3
  7. package/docs/api/classes/WalletNotConnectedError.html +3 -3
  8. package/docs/api/classes/WalletSponsoredTransactionNotSupportedError.html +3 -3
  9. package/docs/api/enums/ActionTypes.html +2 -2
  10. package/docs/api/enums/Assemblies.html +3 -2
  11. package/docs/api/enums/QueryParams.html +2 -2
  12. package/docs/api/enums/Severity.html +2 -2
  13. package/docs/api/enums/SponsoredTransactionActions.html +3 -3
  14. package/docs/api/enums/State.html +2 -2
  15. package/docs/api/enums/SupportedWallets.html +2 -2
  16. package/docs/api/enums/TYPEIDS.html +3 -3
  17. package/docs/api/functions/EveFrontierProvider.html +2 -2
  18. package/docs/api/functions/NotificationProvider.html +2 -2
  19. package/docs/api/functions/SmartObjectProvider.html +4 -4
  20. package/docs/api/functions/VaultProvider.html +1 -1
  21. package/docs/api/functions/abbreviateAddress.html +2 -2
  22. package/docs/api/functions/assertAssemblyType.html +2 -2
  23. package/docs/api/functions/clickToCopy.html +1 -1
  24. package/docs/api/functions/executeGraphQLQuery.html +2 -2
  25. package/docs/api/functions/findOwnerByAddress.html +2 -2
  26. package/docs/api/functions/formatDuration.html +2 -2
  27. package/docs/api/functions/formatM3.html +2 -2
  28. package/docs/api/functions/getAdjustedBurnRate.html +6 -0
  29. package/docs/api/functions/getAssemblyType.html +2 -2
  30. package/docs/api/functions/getAssemblyTypeApiString.html +2 -2
  31. package/docs/api/functions/getAssemblyWithOwner.html +3 -3
  32. package/docs/api/functions/getCharacterAndOwnedObjects.html +3 -0
  33. package/docs/api/functions/getCharacterOwnedObjects.html +5 -0
  34. package/docs/api/functions/getCharacterOwnedObjectsJson.html +5 -0
  35. package/docs/api/functions/getCharacterOwnerCapType.html +2 -2
  36. package/docs/api/functions/getCharacterPlayerProfileType.html +3 -0
  37. package/docs/api/functions/getCommonItems.html +1 -1
  38. package/docs/api/functions/getDappUrl.html +2 -2
  39. package/docs/api/functions/getDatahubGameInfo.html +2 -2
  40. package/docs/api/functions/getEnergyConfig.html +4 -0
  41. package/docs/api/functions/getEnergyConfigType.html +3 -0
  42. package/docs/api/functions/getEnergyUsageForType.html +5 -0
  43. package/docs/api/functions/getEnv.html +1 -1
  44. package/docs/api/functions/getEveWorldPackageId.html +2 -2
  45. package/docs/api/functions/getFuelEfficiencyConfig.html +4 -0
  46. package/docs/api/functions/getFuelEfficiencyConfigType.html +3 -0
  47. package/docs/api/functions/getFuelEfficiencyForType.html +5 -0
  48. package/docs/api/functions/getObjectByAddress.html +2 -2
  49. package/docs/api/functions/getObjectId.html +2 -2
  50. package/docs/api/functions/getObjectOwnerAndOwnedObjectsByType.html +2 -2
  51. package/docs/api/functions/getObjectOwnerAndOwnedObjectsWithJson.html +7 -0
  52. package/docs/api/functions/getObjectRegistryType.html +2 -2
  53. package/docs/api/functions/getObjectWithDynamicFields.html +2 -2
  54. package/docs/api/functions/getObjectWithJson.html +2 -2
  55. package/docs/api/functions/getObjectsByType.html +2 -2
  56. package/docs/api/functions/getOwnedObjectsByPackage.html +2 -2
  57. package/docs/api/functions/getOwnedObjectsByType.html +2 -2
  58. package/docs/api/functions/getRegistryAddress.html +2 -2
  59. package/docs/api/functions/getSingletonObjectByType.html +2 -2
  60. package/docs/api/functions/getSponsoredTransactionFeature.html +2 -2
  61. package/docs/api/functions/getSuiGraphqlEndpoint.html +2 -2
  62. package/docs/api/functions/getTxUrl.html +2 -2
  63. package/docs/api/functions/getVolumeM3.html +2 -2
  64. package/docs/api/functions/getWalletCharacters.html +3 -0
  65. package/docs/api/functions/hasSponsoredTransactionFeature.html +2 -2
  66. package/docs/api/functions/isOwner.html +3 -3
  67. package/docs/api/functions/parseCharacterFromJson.html +5 -0
  68. package/docs/api/functions/parseErrorFromMessage.html +1 -1
  69. package/docs/api/functions/parseStatus.html +2 -2
  70. package/docs/api/functions/parseURL.html +1 -1
  71. package/docs/api/functions/removeTrailingZeros.html +1 -1
  72. package/docs/api/functions/transformToAssembly.html +2 -2
  73. package/docs/api/functions/transformToCharacter.html +2 -2
  74. package/docs/api/functions/useConnection.html +2 -2
  75. package/docs/api/functions/useNotification.html +2 -2
  76. package/docs/api/functions/useSmartObject.html +4 -9
  77. package/docs/api/functions/useSponsoredTransaction.html +5 -5
  78. package/docs/api/functions/walletSupportsSponsoredTransaction.html +2 -2
  79. package/docs/api/hierarchy.html +1 -1
  80. package/docs/api/index.html +3 -5
  81. package/docs/api/interfaces/AddressOwner.html +2 -2
  82. package/docs/api/interfaces/AddressOwnerWithJson.html +2 -2
  83. package/docs/api/interfaces/AddressWithObjects.html +3 -0
  84. package/docs/api/interfaces/AdjustedBurnRate.html +8 -0
  85. package/docs/api/interfaces/AsMoveObjectRef.html +3 -0
  86. package/docs/api/interfaces/AssemblyProperties.html +6 -3
  87. package/docs/api/interfaces/CharacterAndOwnedObjectsNode.html +2 -0
  88. package/docs/api/interfaces/CharacterInfo.html +3 -3
  89. package/docs/api/interfaces/CharacterOwnerNode.html +3 -0
  90. package/docs/api/interfaces/ConfigExtractDynamicFieldNode.html +3 -0
  91. package/docs/api/interfaces/ContentsBcs.html +2 -0
  92. package/docs/api/interfaces/ContentsJsonAndBcs.html +3 -0
  93. package/docs/api/interfaces/ContentsJsonOnly.html +3 -0
  94. package/docs/api/interfaces/ContentsTypeAndBcs.html +3 -0
  95. package/docs/api/interfaces/ContentsTypeJsonAndBcs.html +4 -0
  96. package/docs/api/interfaces/DatahubGameInfo.html +14 -16
  97. package/docs/api/interfaces/DetailedAssemblyResponse.html +6 -3
  98. package/docs/api/interfaces/DetailedSmartCharacterResponse.html +2 -2
  99. package/docs/api/interfaces/DynamicFieldNode.html +2 -2
  100. package/docs/api/interfaces/EphemeralInventory.html +2 -2
  101. package/docs/api/interfaces/EveFrontierSponsoredTransactionFeature.html +3 -3
  102. package/docs/api/interfaces/ExtractAsMoveObjectNode.html +4 -0
  103. package/docs/api/interfaces/GateModule.html +2 -5
  104. package/docs/api/interfaces/GetCharacterAndOwnedObjectsResponse.html +2 -0
  105. package/docs/api/interfaces/GetObjectAndCharacterOwnerResponse.html +2 -0
  106. package/docs/api/interfaces/GetObjectByAddressResponse.html +2 -2
  107. package/docs/api/interfaces/GetObjectOwnerAndOwnedObjectsResponse.html +2 -2
  108. package/docs/api/interfaces/GetObjectOwnerAndOwnedObjectsWithJsonResponse.html +2 -2
  109. package/docs/api/interfaces/GetObjectResponse.html +2 -2
  110. package/docs/api/interfaces/GetObjectWithJsonResponse.html +2 -2
  111. package/docs/api/interfaces/GetObjectsByTypeResponse.html +2 -2
  112. package/docs/api/interfaces/GetOwnedObjectsByPackageResponse.html +2 -2
  113. package/docs/api/interfaces/GetOwnedObjectsByTypeResponse.html +2 -2
  114. package/docs/api/interfaces/GetSingletonConfigObjectByTypeResponse.html +2 -0
  115. package/docs/api/interfaces/GetSingletonObjectByTypeResponse.html +2 -2
  116. package/docs/api/interfaces/GetWalletCharactersResponse.html +2 -0
  117. package/docs/api/interfaces/GraphQLResponse.html +2 -2
  118. package/docs/api/interfaces/InventoryItem.html +2 -2
  119. package/docs/api/interfaces/ManufacturingModule.html +1 -2
  120. package/docs/api/interfaces/MoveObjectContents.html +2 -2
  121. package/docs/api/interfaces/MoveObjectData.html +2 -2
  122. package/docs/api/interfaces/NetworkNodeModule.html +2 -2
  123. package/docs/api/interfaces/NotificationContextType.html +2 -2
  124. package/docs/api/interfaces/NotificationState.html +2 -2
  125. package/docs/api/interfaces/Notify.html +2 -2
  126. package/docs/api/interfaces/ObjectNodes.html +2 -0
  127. package/docs/api/interfaces/ObjectWithContentsNode.html +2 -2
  128. package/docs/api/interfaces/OwnedObjectAddressNode.html +2 -2
  129. package/docs/api/interfaces/OwnedObjectFullNode.html +2 -2
  130. package/docs/api/interfaces/OwnedObjectNode.html +2 -2
  131. package/docs/api/interfaces/OwnedObjectNodeWithJson.html +2 -2
  132. package/docs/api/interfaces/OwnerCapData.html +3 -3
  133. package/docs/api/interfaces/PageInfo.html +2 -2
  134. package/docs/api/interfaces/PreviousTransaction.html +2 -0
  135. package/docs/api/interfaces/RawCharacterData.html +3 -3
  136. package/docs/api/interfaces/RawSuiObjectData.html +10 -6
  137. package/docs/api/interfaces/RefineryModule.html +1 -2
  138. package/docs/api/interfaces/SmartAssemblyResponse.html +6 -2
  139. package/docs/api/interfaces/SmartObjectContextType.html +4 -6
  140. package/docs/api/interfaces/SponsoredTransactionInput.html +6 -7
  141. package/docs/api/interfaces/SponsoredTransactionOutput.html +5 -5
  142. package/docs/api/interfaces/StorageModule.html +2 -3
  143. package/docs/api/interfaces/SuiObjectResponse.html +2 -2
  144. package/docs/api/interfaces/TransformOptions.html +8 -4
  145. package/docs/api/interfaces/TurretModule.html +1 -2
  146. package/docs/api/interfaces/TypeRepr.html +2 -0
  147. package/docs/api/interfaces/TypeReprWithLayout.html +3 -0
  148. package/docs/api/interfaces/VaultContextType.html +3 -3
  149. package/docs/api/modules.html +1 -1
  150. package/docs/api/types/AssemblyType.html +1 -1
  151. package/docs/api/types/ContentsTypeAndJson.html +2 -0
  152. package/docs/api/types/ErrorType.html +2 -2
  153. package/docs/api/types/MoveObjectRefWithJson.html +2 -0
  154. package/docs/api/types/SendSponsoredTransactionFn.html +1 -1
  155. package/docs/api/types/SponsoredTransactionArgs.html +2 -2
  156. package/docs/api/types/SponsoredTransactionAssemblyType.html +2 -2
  157. package/docs/api/types/SponsoredTransactionMethod.html +2 -2
  158. package/docs/api/types/UseSponsoredTransactionArgs.html +2 -2
  159. package/docs/api/types/UseSponsoredTransactionError.html +2 -2
  160. package/docs/api/types/UseSponsoredTransactionMutationOptions.html +2 -2
  161. package/docs/api/variables/ASSEMBLY_TYPE_API_STRING.html +2 -2
  162. package/docs/api/variables/ERRORS.html +1 -1
  163. package/docs/api/variables/ERROR_MESSAGES.html +1 -1
  164. package/docs/api/variables/EVEFRONTIER_SPONSORED_TRANSACTION.html +2 -2
  165. package/docs/api/variables/EXCLUDED_TYPEIDS.html +1 -1
  166. package/docs/api/variables/GET_OBJECTS_BY_TYPE.html +2 -2
  167. package/docs/api/variables/GET_OBJECT_BY_ADDRESS.html +2 -2
  168. package/docs/api/variables/GET_OBJECT_OWNER_AND_OWNED_OBJECTS_BY_TYPE.html +2 -2
  169. package/docs/api/variables/GET_OBJECT_OWNER_AND_OWNED_OBJECTS_WITH_JSON.html +2 -2
  170. package/docs/api/variables/GET_OBJECT_WITH_DYNAMIC_FIELDS.html +2 -2
  171. package/docs/api/variables/GET_OBJECT_WITH_JSON.html +2 -2
  172. package/docs/api/variables/GET_OWNED_OBJECTS_BY_PACKAGE.html +2 -2
  173. package/docs/api/variables/GET_OWNED_OBJECTS_BY_TYPE.html +2 -2
  174. package/docs/api/variables/GET_SINGLETON_CONFIG_OBJECT_BY_TYPE.html +2 -0
  175. package/docs/api/variables/GET_SINGLETON_OBJECT_BY_TYPE.html +2 -2
  176. package/docs/api/variables/GET_WALLET_CHARACTERS.html +3 -0
  177. package/docs/api/variables/NotificationContext.html +1 -1
  178. package/docs/api/variables/ONE_M3.html +2 -2
  179. package/docs/api/variables/POLLING_INTERVAL.html +2 -2
  180. package/docs/api/variables/STORAGE_KEYS.html +2 -2
  181. package/docs/api/variables/SmartObjectContext.html +1 -1
  182. package/docs/api/variables/VaultContext.html +1 -1
  183. package/docs/api/variables/dAppKit.html +2 -2
  184. package/graphql/client.ts +119 -24
  185. package/graphql/index.ts +5 -39
  186. package/graphql/queries.ts +166 -1
  187. package/graphql/types.ts +192 -167
  188. package/hooks/index.ts +1 -0
  189. package/hooks/useSmartObject.ts +2 -12
  190. package/hooks/useSponsoredTransaction.ts +60 -9
  191. package/index.ts +7 -71
  192. package/package.json +1 -1
  193. package/providers/SmartObjectProvider.tsx +84 -57
  194. package/types/contexts.ts +1 -3
  195. package/types/sponsoredTransaction.ts +1 -0
  196. package/types/types.ts +52 -10
  197. package/types/worldApiReturnTypes.ts +13 -37
  198. package/utils/__tests__/burnRate.test.ts +121 -0
  199. package/utils/__tests__/character.test.ts +112 -0
  200. package/utils/__tests__/characterOwnedObjects.test.ts +222 -0
  201. package/utils/__tests__/config.test.ts +424 -0
  202. package/utils/__tests__/mapping.test.ts +2 -2
  203. package/utils/burnRate.ts +46 -0
  204. package/utils/character.ts +46 -0
  205. package/utils/characterOwnedObjects.ts +52 -0
  206. package/utils/config.ts +151 -0
  207. package/utils/constants.ts +39 -5
  208. package/utils/datahub.ts +3 -41
  209. package/utils/errors.ts +1 -1
  210. package/utils/index.ts +10 -1
  211. package/utils/mapping.ts +5 -2
  212. package/utils/transforms.ts +34 -31
  213. package/vite-env.d.ts +2 -2
  214. package/wallet/features.ts +7 -2
  215. package/docs/api/interfaces/GameTypeResponse.html +0 -13
@@ -0,0 +1,151 @@
1
+ import { getSingletonConfigObjectByType } from "../graphql/client";
2
+ import { getEnergyConfigType, getFuelEfficiencyConfigType } from "./constants";
3
+
4
+ /**
5
+ * Cached energy config: type_id -> energy usage (e.g. energy_constant).
6
+ * Populated from the on-chain EnergyConfig singleton.
7
+ */
8
+ let energyConfigCache: Record<number, number> | null = null;
9
+ let fuelEfficiencyConfigCache: Record<number, number> | null = null;
10
+
11
+ /** In-flight promise for energy config so concurrent callers share one fetch. */
12
+ let energyConfigInFlight: Promise<Record<number, number>> | null = null;
13
+ /** In-flight promise for fuel efficiency config so concurrent callers share one fetch. */
14
+ let fuelEfficiencyConfigInFlight: Promise<Record<number, number>> | null = null;
15
+
16
+ /**
17
+ * Resets in-memory and in-flight caches. Only for use in tests.
18
+ * @internal
19
+ */
20
+ export function resetConfigCachesForTesting(): void {
21
+ energyConfigCache = null;
22
+ fuelEfficiencyConfigCache = null;
23
+ energyConfigInFlight = null;
24
+ fuelEfficiencyConfigInFlight = null;
25
+ }
26
+
27
+ /**
28
+ * Parses EnergyConfig or FuelConfig object JSON (contents + dynamic fields) into a map of typeId -> value (e.g. energy_constant or fuel_efficiency).
29
+ * Supports:
30
+ * - Dynamic fields where name is type_id (string/number) and contents.json has value
31
+ * - contents.json with a table/map of type_id -> value
32
+ */
33
+ function parseConfig(
34
+ configJson: Record<string, unknown> | undefined,
35
+ ): Record<number, number> {
36
+ const byTypeId: Record<number, number> = {};
37
+ const nodes = configJson as unknown as
38
+ | Array<{ key: { json: string }; value: { json: string } }>
39
+ | undefined;
40
+ if (!Array.isArray(nodes) || !nodes.length) return byTypeId;
41
+ for (const node of nodes) {
42
+ const typeId = parseInt(node.key?.json ?? "", 10);
43
+ if (Number.isNaN(typeId)) continue;
44
+ const energy = parseInt(node.value?.json ?? "", 10);
45
+ byTypeId[typeId] = Number.isNaN(energy) ? 0 : energy;
46
+ }
47
+ return byTypeId;
48
+ }
49
+
50
+ /**
51
+ * Fetches the EnergyConfig singleton via GraphQL (using getEnergyConfigType), parses it,
52
+ * caches the result, and returns the map of type_id -> energy usage.
53
+ * Subsequent calls return the cached map.
54
+ *
55
+ * @category Utilities
56
+ */
57
+ export async function getEnergyConfig(): Promise<Record<number, number>> {
58
+ if (energyConfigCache) {
59
+ return energyConfigCache;
60
+ }
61
+ if (energyConfigInFlight) {
62
+ return energyConfigInFlight;
63
+ }
64
+
65
+ energyConfigInFlight = (async () => {
66
+ const result = await getSingletonConfigObjectByType(
67
+ getEnergyConfigType(),
68
+ "assembly_energy",
69
+ );
70
+
71
+ const energyConfigJson = result.data?.objects?.nodes[0]?.asMoveObject
72
+ ?.contents?.extract?.extract?.asAddress?.addressAt?.dynamicFields
73
+ ?.nodes as Record<string, unknown> | undefined;
74
+
75
+ energyConfigCache = parseConfig(energyConfigJson);
76
+ return energyConfigCache;
77
+ })();
78
+
79
+ try {
80
+ return await energyConfigInFlight;
81
+ } finally {
82
+ energyConfigInFlight = null;
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Fetches the Fuel Efficiency Config singleton via GraphQL (using getFuelEfficiencyConfigType), parses it,
88
+ * caches the result, and returns the map of type_id -> fuel efficiency.
89
+ * Subsequent calls return the cached map.
90
+ *
91
+ * @category Utilities
92
+ */
93
+ export async function getFuelEfficiencyConfig(): Promise<
94
+ Record<number, number>
95
+ > {
96
+ if (fuelEfficiencyConfigCache) {
97
+ return fuelEfficiencyConfigCache;
98
+ }
99
+ if (fuelEfficiencyConfigInFlight) {
100
+ return fuelEfficiencyConfigInFlight;
101
+ }
102
+
103
+ fuelEfficiencyConfigInFlight = (async () => {
104
+ const result = await getSingletonConfigObjectByType(
105
+ getFuelEfficiencyConfigType(),
106
+ "fuel_efficiency",
107
+ );
108
+
109
+ const fuelEfficiencyConfigJson = result.data?.objects?.nodes[0]
110
+ ?.asMoveObject?.contents?.extract?.extract?.asAddress?.addressAt
111
+ ?.dynamicFields?.nodes as Record<string, unknown> | undefined;
112
+
113
+ fuelEfficiencyConfigCache = parseConfig(fuelEfficiencyConfigJson);
114
+ return fuelEfficiencyConfigCache;
115
+ })();
116
+
117
+ try {
118
+ return await fuelEfficiencyConfigInFlight;
119
+ } finally {
120
+ fuelEfficiencyConfigInFlight = null;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Returns the energy usage for a given assembly type ID from the on-chain EnergyConfig.
126
+ * Uses cached EnergyConfig data after the first fetch.
127
+ *
128
+ * @param typeId - In-game type ID (e.g. from rawData.type_id)
129
+ * @returns Energy usage (e.g. energy_constant), or 0 if not found or not yet loaded
130
+ * @category Utilities
131
+ */
132
+ export async function getEnergyUsageForType(typeId: number): Promise<number> {
133
+ const config = await getEnergyConfig();
134
+
135
+ return config[typeId] ?? 0;
136
+ }
137
+
138
+ /**
139
+ * Returns the fuel efficiency for a given assembly type ID from the on-chain Fuel Efficiency Config.
140
+ * Uses cached Fuel Efficiency Config data after the first fetch.
141
+ *
142
+ * @param typeId - In-game type ID (e.g. from rawData.type_id)
143
+ * @returns Fuel efficiency (e.g. fuel_efficiency), or 0 if not found or not yet loaded
144
+ * @category Utilities
145
+ */
146
+ export async function getFuelEfficiencyForType(
147
+ typeId: number,
148
+ ): Promise<number> {
149
+ const config = await getFuelEfficiencyConfig();
150
+ return config[typeId] ?? 0;
151
+ }
@@ -50,6 +50,16 @@ export const getCharacterOwnerCapType = (): string => {
50
50
  return `${pkg}::access::OwnerCap<${pkg}::character::Character>`;
51
51
  };
52
52
 
53
+ /**
54
+ * Get the Character PlayerProfile type string (derived from package ID).
55
+ * @returns The fully qualified type string for Character PlayerProfile
56
+ * @category Utilities
57
+ */
58
+ export const getCharacterPlayerProfileType = (): string => {
59
+ const pkg = getEveWorldPackageId();
60
+ return `${pkg}::character::PlayerProfile`;
61
+ };
62
+
53
63
  /**
54
64
  * Get the ObjectRegistry type string (derived from package ID).
55
65
  * @returns The fully qualified type string for ObjectRegistry
@@ -58,15 +68,37 @@ export const getCharacterOwnerCapType = (): string => {
58
68
  export const getObjectRegistryType = (): string =>
59
69
  `${getEveWorldPackageId()}::object_registry::ObjectRegistry`;
60
70
 
61
- /** Polling interval in milliseconds (10 seconds). @category Utilities */
71
+ /**
72
+ * Get the EnergyConfig type string (derived from package ID).
73
+ * @returns The fully qualified type string for Energy Config
74
+ * @category Utilities
75
+ */
76
+ export const getEnergyConfigType = (): string =>
77
+ `${getEveWorldPackageId()}::energy::EnergyConfig`;
78
+
79
+ /**
80
+ * Get the Fuel Efficiency Config type string (derived from package ID).
81
+ * @returns The fully qualified type string for Fuel Efficiency Config
82
+ * @category Utilities
83
+ */
84
+ export const getFuelEfficiencyConfigType = (): string =>
85
+ `${getEveWorldPackageId()}::fuel::FuelConfig`;
86
+
87
+ /** Polling interval in milliseconds (10 seconds).
88
+ * @category Constants
89
+ */
62
90
  export const POLLING_INTERVAL = 10000;
63
91
 
64
- /** Local storage keys. @category Utilities */
92
+ /** Local storage keys.
93
+ * @category Constants
94
+ */
65
95
  export const STORAGE_KEYS = {
66
96
  CONNECTED: "eve-dapp-connected",
67
97
  } as const;
68
98
 
69
- /** Type IDs for in-game items. @category Utilities */
99
+ /** Type IDs for in-game items.
100
+ * @category Constants
101
+ */
70
102
  /* eslint-disable @typescript-eslint/no-loss-of-precision */
71
103
  export enum TYPEIDS {
72
104
  LENS = 77518,
@@ -84,7 +116,7 @@ export enum TYPEIDS {
84
116
  REFUGE = 87160,
85
117
  }
86
118
 
87
- /** @category Utilities */
119
+ /** @category Constants */
88
120
  export const EXCLUDED_TYPEIDS = [
89
121
  TYPEIDS.PORTABLE_REFINERY,
90
122
  TYPEIDS.PORTABLE_PRINTER,
@@ -92,5 +124,7 @@ export const EXCLUDED_TYPEIDS = [
92
124
  TYPEIDS.REFUGE,
93
125
  ];
94
126
 
95
- /** Volume - from wei units to m3. @category Utilities */
127
+ /** Volume - from wei units to m3.
128
+ * @category Constants
129
+ */
96
130
  export const ONE_M3 = 1000000000000000000;
package/utils/datahub.ts CHANGED
@@ -1,42 +1,4 @@
1
- /**
2
- * Game item/type information from the EVE Frontier Datahub API.
3
- *
4
- * Contains metadata about items, assemblies, and other game objects
5
- * including display names, descriptions, icons, and physical properties.
6
- *
7
- * @category Types
8
- */
9
- export interface DatahubGameInfo {
10
- /** The type ID (matches on-chain type_id) */
11
- id: number;
12
- /** Display name of the item/type */
13
- name: string;
14
- /** Description text */
15
- description: string;
16
- /** Mass in kg */
17
- mass: number;
18
- /** Radius in meters */
19
- radius: number;
20
- /** Volume in cubic meters */
21
- volume: number;
22
- /** Portion size for stacking */
23
- portionSize: number;
24
- /** Category group name (e.g., "Structures") */
25
- groupName: string;
26
- /** Category group ID */
27
- groupId: number;
28
- /** Top-level category name */
29
- categoryName: string;
30
- /** Top-level category ID */
31
- categoryId: number;
32
- /** URL to the item's icon image */
33
- iconUrl: string;
34
- /** Additional type-specific attributes */
35
- attributes?: {
36
- energyConstant?: number;
37
- [key: string]: unknown;
38
- };
39
- }
1
+ import { DatahubGameInfo } from "../types";
40
2
 
41
3
  /**
42
4
  * Fetch game type information from the EVE Frontier Datahub API.
@@ -65,10 +27,10 @@ export interface DatahubGameInfo {
65
27
  * ```
66
28
  */
67
29
  export async function getDatahubGameInfo(
68
- typeId: number
30
+ typeId: number,
69
31
  ): Promise<DatahubGameInfo> {
70
32
  const response = await fetch(
71
- `https://world-api-stillness.live.tech.evefrontier.com/v2/types/${typeId}`
33
+ `https://world-api-stillness.live.tech.evefrontier.com/v2/types/${typeId}`,
72
34
  );
73
35
  const data = await response.json();
74
36
 
package/utils/errors.ts CHANGED
@@ -137,7 +137,7 @@ ERRORS.CALLFROM_NOT_FOUND = ERRORS[2006];
137
137
  ERRORS.INSUFFICIENT_EVE = ERRORS[3002];
138
138
  ERRORS.LENS_UNAVAILABLE = ERRORS[5001];
139
139
 
140
- /** @category Utilities */
140
+ /** @category Constants */
141
141
  export const ERROR_MESSAGES: Record<number, string> = Object.fromEntries(
142
142
  Object.entries(ERRORS)
143
143
  .filter(([key]) => /^\d+$/.test(key))
package/utils/index.ts CHANGED
@@ -5,12 +5,21 @@ export {
5
5
  getObjectId,
6
6
  getRegistryAddress,
7
7
  } from "./mapping";
8
+ export { getEnergyUsageForType, getFuelEfficiencyForType } from "./config";
9
+ export {
10
+ getAdjustedBurnRate,
11
+ type AdjustedBurnRate,
12
+ } from "./burnRate";
13
+ export { parseCharacterFromJson } from "./character";
14
+ export {
15
+ getCharacterOwnedObjectsJson,
16
+ getCharacterOwnedObjects,
17
+ } from "./characterOwnedObjects";
8
18
  export { transformToAssembly, transformToCharacter } from "./transforms";
9
19
  export type { TransformOptions } from "./transforms";
10
20
 
11
21
  // Datahub utilities
12
22
  export { getDatahubGameInfo } from "./datahub";
13
- export type { DatahubGameInfo } from "./datahub";
14
23
 
15
24
  // General utilities
16
25
  export {
package/utils/mapping.ts CHANGED
@@ -54,9 +54,12 @@ export function getAssemblyType(typeRepr: string): Assemblies {
54
54
  if (typeRepr.includes("::refinery::Refinery")) {
55
55
  return Assemblies.Refinery;
56
56
  }
57
+ if (typeRepr.includes("::assembly::Assembly")) {
58
+ return Assemblies.Assembly;
59
+ }
57
60
 
58
- // Assembly type not found, return default SmartStorageUnit
59
- return Assemblies.SmartStorageUnit;
61
+ // Assembly type not found, return default Assembly
62
+ return Assemblies.Assembly;
60
63
  }
61
64
 
62
65
  // Cache for the Registry address
@@ -5,6 +5,8 @@ import {
5
5
  DetailedSmartCharacterResponse,
6
6
  SmartAssemblyResponse,
7
7
  InventoryItem,
8
+ DatahubGameInfo,
9
+ DetailedAssemblyResponse,
8
10
  } from "../types";
9
11
  import type {
10
12
  MoveObjectData,
@@ -12,7 +14,8 @@ import type {
12
14
  CharacterInfo,
13
15
  } from "../graphql/types";
14
16
  import { getAssemblyType, parseStatus } from "./mapping";
15
- import { getDatahubGameInfo, type DatahubGameInfo } from "./datahub";
17
+ import { getDatahubGameInfo } from "./datahub";
18
+ import { getEnergyConfig, getEnergyUsageForType } from "./config";
16
19
  import { getObjectWithJson } from "../graphql";
17
20
 
18
21
  /**
@@ -41,6 +44,10 @@ export interface TransformOptions {
41
44
  character?: CharacterInfo | null;
42
45
  /** Pre-fetched datahub game info (name, description, image) */
43
46
  datahubInfo?: DatahubGameInfo | null;
47
+ /** Energy source information */
48
+ energySource?: RawSuiObjectData | null;
49
+ /** Destination gate information, if Smart Gate */
50
+ destinationGate?: RawSuiObjectData | null;
44
51
  }
45
52
 
46
53
  /**
@@ -84,8 +91,12 @@ export async function transformToAssembly(
84
91
  // Build base assembly properties
85
92
  const state = parseStatus(rawData.status?.status?.["@variant"]);
86
93
 
87
- // Use pre-fetched datahub info for defaults
94
+ // Use pre-fetched datahub info for defaults (name, description, image); energy from on-chain EnergyConfig
88
95
  const datahubInfo = options?.datahubInfo;
96
+ const energySource = options?.energySource;
97
+ const energyUsage = await getEnergyUsageForType(parseInt(typeId, 10) || 0);
98
+
99
+ const parentState = parseStatus(energySource?.status?.status?.["@variant"]);
89
100
 
90
101
  const baseAssembly = {
91
102
  id: rawData.id || objectId,
@@ -94,20 +105,24 @@ export async function transformToAssembly(
94
105
  name: rawData.metadata?.name || "",
95
106
  description: rawData.metadata?.description || "",
96
107
  dappURL: rawData.metadata?.url || "",
108
+ energySourceId:
109
+ assemblyType === Assemblies.NetworkNode
110
+ ? undefined
111
+ : energySource?.id || rawData.energy_source_id || "", // Parent network node ID
112
+ isParentNodeOnline:
113
+ assemblyType === Assemblies.NetworkNode
114
+ ? undefined
115
+ : parentState === State.ONLINE, // Defined in all cases except network nodes
97
116
  state,
98
117
  typeId: parseInt(typeId, 10) || 0,
99
- energyUsage: 0,
100
- location: {
101
- x: 0,
102
- y: 0,
103
- z: 0,
104
- },
118
+ energyUsage,
105
119
  typeDetails: datahubInfo,
106
120
  // Owner information
107
121
  character: options?.character || undefined,
108
122
  // Include raw data for debugging/extension
109
123
  _raw: moveObject,
110
- };
124
+ _options: options,
125
+ } as DetailedAssemblyResponse;
111
126
 
112
127
  // Add module-specific data based on assembly type
113
128
  switch (assemblyType) {
@@ -141,30 +156,26 @@ export async function transformToAssembly(
141
156
  items: inventoryItems,
142
157
  },
143
158
  ephemeralInventories: [],
144
- isParentNodeOnline: state === State.ONLINE,
145
159
  },
146
160
  } as AssemblyType<Assemblies.SmartStorageUnit>;
147
161
 
148
162
  case Assemblies.SmartTurret:
149
163
  return {
150
164
  ...baseAssembly,
151
- turret: {
152
- isParentNodeOnline: state === State.ONLINE,
153
- },
165
+ turret: {},
154
166
  } as AssemblyType<Assemblies.SmartTurret>;
155
167
 
156
168
  case Assemblies.SmartGate:
157
169
  return {
158
170
  ...baseAssembly,
159
171
  gate: {
160
- linked: false,
161
- destinationId: undefined,
162
- inRange: [],
163
- isParentNodeOnline: state === State.ONLINE,
172
+ destinationId: rawData.linked_gate_id,
173
+ destinationGate: options?.destinationGate,
164
174
  },
165
175
  } as AssemblyType<Assemblies.SmartGate>;
166
176
 
167
177
  case Assemblies.NetworkNode:
178
+ const energyConfig = await getEnergyConfig();
168
179
  // TODO: Batch this call so that it can fetch all assemblies at once
169
180
  const linkedAssemblies: SmartAssemblyResponse[] = await Promise.all(
170
181
  (rawData.connected_assembly_ids || []).map(async (id) => {
@@ -177,12 +188,13 @@ export async function transformToAssembly(
177
188
  parseInt(assemblyJson?.type_id || "0", 10),
178
189
  );
179
190
 
191
+ const linkedTypeId = parseInt(assemblyJson?.type_id || "0", 10);
180
192
  return {
181
193
  id,
182
194
  item_id: parseInt(assemblyJson?.key?.item_id || "0", 10),
183
195
  state: parseStatus(assemblyJson?.status?.status?.["@variant"]),
184
- energyUsage: 0,
185
- typeId: parseInt(assemblyJson?.type_id || "0", 10),
196
+ energyUsage: energyConfig[linkedTypeId] ?? 0,
197
+ typeId: linkedTypeId,
186
198
  name: assemblyJson?.metadata?.name || "",
187
199
  type: getAssemblyType(assemblyJson?.type_id || ""),
188
200
  typeDetails: typeDetails,
@@ -194,7 +206,7 @@ export async function transformToAssembly(
194
206
  ...baseAssembly,
195
207
  networkNode: {
196
208
  fuel: {
197
- burnRateInMs: parseInt(rawData.fuel?.burn_rate_in_ms || "0", 10),
209
+ burnTimeInMs: parseInt(rawData.fuel?.burn_rate_in_ms || "0", 10),
198
210
  burnStartTime: parseInt(rawData.fuel?.burn_start_time || "0", 10),
199
211
  isBurning: rawData.fuel?.is_burning || false,
200
212
  lastUpdated: parseInt(rawData.fuel?.last_updated || "0", 10),
@@ -240,18 +252,9 @@ export async function transformToAssembly(
240
252
  } as AssemblyType<Assemblies.Refinery>;
241
253
 
242
254
  default:
243
- // Default to SmartStorageUnit
255
+ // Default to Assembly
244
256
  return {
245
257
  ...baseAssembly,
246
- storage: {
247
- mainInventory: {
248
- capacity: "0",
249
- usedCapacity: "0",
250
- items: [],
251
- },
252
- ephemeralInventories: [],
253
- isParentNodeOnline: state === State.ONLINE,
254
- },
255
- } as AssemblyType<Assemblies.SmartStorageUnit>;
258
+ } as AssemblyType<Assemblies.Assembly>;
256
259
  }
257
260
  }
package/vite-env.d.ts CHANGED
@@ -5,8 +5,8 @@ interface ImportMetaEnv {
5
5
  readonly VITE_SUI_GRAPHQL_ENDPOINT: string;
6
6
  /** EVE World package ID on Sui (required) */
7
7
  readonly VITE_EVE_WORLD_PACKAGE_ID: string;
8
- /** Optional smart assembly item ID override */
9
- readonly VITE_ITEM_ID?: string;
8
+ /** Optional smart assembly Sui object ID override */
9
+ readonly VITE_OBJECT_ID?: string;
10
10
  }
11
11
 
12
12
  interface ImportMeta {
@@ -42,8 +42,6 @@ export interface SponsoredTransactionInput {
42
42
  assemblyType: SponsoredTransactionAssemblyType;
43
43
  /** The Sui chain to execute on (e.g., "sui:testnet", "sui:mainnet") */
44
44
  chain: `sui:${string}`;
45
- /** Additional properties */
46
- [key: string]: unknown;
47
45
  }
48
46
 
49
47
  /** Sponsored tx args with assembly object; id and assemblyType are derived. Tenant is optional; the hook resolves it from args, URL query param, or default. */
@@ -54,6 +52,13 @@ export type SponsoredTransactionArgs = Omit<
54
52
  assembly: AssemblyType<Assemblies>;
55
53
  account?: string;
56
54
  tenant?: string;
55
+ txAction: SponsoredTransactionActions;
56
+ metadata?: {
57
+ name: string;
58
+ description: string;
59
+ dappURL: string;
60
+ };
61
+ chain: `sui:${string}`;
57
62
  };
58
63
 
59
64
  /**
@@ -1,13 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>GameTypeResponse | @evefrontier/dapp-kit - v0.1.1</title><meta name="description" content="Documentation for @evefrontier/dapp-kit"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@evefrontier/dapp-kit - v0.1.1</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">GameTypeResponse</a></li></ul><h1>Interface GameTypeResponse</h1></div><div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">GameTypeResponse</span> <span class="tsd-signature-symbol">{</span><br/>    <a class="tsd-kind-property" href="#categoryid">categoryId</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#categoryname">categoryName</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#description">description</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#groupid">groupId</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#groupname">groupName</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#iconurl">iconUrl</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#id">id</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#mass">mass</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#name">name</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#portionsize">portionSize</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#radius">radius</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/>    <a class="tsd-kind-property" href="#volume">volume</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L155">types/worldApiReturnTypes.ts:155</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="#categoryid" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>category<wbr/>Id</span></a>
2
- <a href="#categoryname" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>category<wbr/>Name</span></a>
3
- <a href="#description" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>description</span></a>
4
- <a href="#groupid" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>group<wbr/>Id</span></a>
5
- <a href="#groupname" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>group<wbr/>Name</span></a>
6
- <a href="#iconurl" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>icon<wbr/>Url</span></a>
7
- <a href="#id" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>id</span></a>
8
- <a href="#mass" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>mass</span></a>
9
- <a href="#name" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>name</span></a>
10
- <a href="#portionsize" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>portion<wbr/>Size</span></a>
11
- <a href="#radius" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>radius</span></a>
12
- <a href="#volume" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>volume</span></a>
13
- </div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Properties</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="categoryid"><span>category<wbr/>Id</span><a href="#categoryid" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">categoryId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L156">types/worldApiReturnTypes.ts:156</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="categoryname"><span>category<wbr/>Name</span><a href="#categoryname" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">categoryName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L157">types/worldApiReturnTypes.ts:157</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="description"><span>description</span><a href="#description" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">description</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L158">types/worldApiReturnTypes.ts:158</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="groupid"><span>group<wbr/>Id</span><a href="#groupid" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">groupId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L159">types/worldApiReturnTypes.ts:159</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="groupname"><span>group<wbr/>Name</span><a href="#groupname" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">groupName</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L160">types/worldApiReturnTypes.ts:160</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="iconurl"><span>icon<wbr/>Url</span><a href="#iconurl" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">iconUrl</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L161">types/worldApiReturnTypes.ts:161</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="id"><span>id</span><a href="#id" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">id</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L162">types/worldApiReturnTypes.ts:162</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="mass"><span>mass</span><a href="#mass" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">mass</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L163">types/worldApiReturnTypes.ts:163</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="name"><span>name</span><a href="#name" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">name</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L164">types/worldApiReturnTypes.ts:164</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="portionsize"><span>portion<wbr/>Size</span><a href="#portionsize" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">portionSize</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L165">types/worldApiReturnTypes.ts:165</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="radius"><span>radius</span><a href="#radius" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">radius</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L166">types/worldApiReturnTypes.ts:166</a></li></ul></aside></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="volume"><span>volume</span><a href="#volume" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">volume</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">number</span></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/evefrontier/eve-frontier-dapps/blob/c9a9e7b2be3286aab0f8dd4a613f019466e59829/packages/libs/dapp-kit/types/worldApiReturnTypes.ts#L167">types/worldApiReturnTypes.ts:167</a></li></ul></aside></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary><div><a href="#categoryid"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>category<wbr/>Id</span></a><a href="#categoryname"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>category<wbr/>Name</span></a><a href="#description"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>description</span></a><a href="#groupid"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>group<wbr/>Id</span></a><a href="#groupname"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>group<wbr/>Name</span></a><a href="#iconurl"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>icon<wbr/>Url</span></a><a href="#id"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>id</span></a><a href="#mass"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>mass</span></a><a href="#name"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>name</span></a><a href="#portionsize"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>portion<wbr/>Size</span></a><a href="#radius"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>radius</span></a><a href="#volume"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>volume</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@evefrontier/dapp-kit - v0.1.1</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>