@akashnetwork/chain-sdk 1.0.0-alpha.30 → 1.0.0-alpha.31

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 (163) hide show
  1. package/dist/cjs/bla.cjs +7 -0
  2. package/dist/cjs/bla.cjs.map +7 -0
  3. package/dist/cjs/generated/createNodeSDK.cjs +95 -76
  4. package/dist/cjs/generated/createNodeSDK.cjs.map +2 -2
  5. package/dist/cjs/generated/protos/akash/bme/v1/params.cjs +18 -2
  6. package/dist/cjs/generated/protos/akash/bme/v1/params.cjs.map +2 -2
  7. package/dist/cjs/generated/protos/akash/bme/v1/types.cjs +65 -2
  8. package/dist/cjs/generated/protos/akash/bme/v1/types.cjs.map +2 -2
  9. package/dist/cjs/generated/protos/akash/deployment/v1/deployment.cjs +68 -2
  10. package/dist/cjs/generated/protos/akash/deployment/v1/deployment.cjs.map +2 -2
  11. package/dist/cjs/generated/protos/akash/deployment/v1beta4/deploymentmsg.cjs +17 -2
  12. package/dist/cjs/generated/protos/akash/deployment/v1beta4/deploymentmsg.cjs.map +2 -2
  13. package/dist/cjs/generated/protos/akash/discovery/v1/akash.cjs +64 -2
  14. package/dist/cjs/generated/protos/akash/discovery/v1/akash.cjs.map +2 -2
  15. package/dist/cjs/generated/protos/akash/discovery/v1/client_info.cjs +150 -1
  16. package/dist/cjs/generated/protos/akash/discovery/v1/client_info.cjs.map +2 -2
  17. package/dist/cjs/generated/protos/akash/discovery/v1/service.cjs +115 -0
  18. package/dist/cjs/generated/protos/akash/discovery/v1/service.cjs.map +7 -0
  19. package/dist/cjs/generated/protos/akash/discovery/v1/service_akash.cjs +39 -0
  20. package/dist/cjs/generated/protos/akash/discovery/v1/service_akash.cjs.map +7 -0
  21. package/dist/cjs/generated/protos/akash/market/v1/event.cjs +93 -0
  22. package/dist/cjs/generated/protos/akash/market/v1/event.cjs.map +3 -3
  23. package/dist/cjs/generated/protos/akash/market/v1/lease.cjs +32 -2
  24. package/dist/cjs/generated/protos/akash/market/v1/lease.cjs.map +2 -2
  25. package/dist/cjs/generated/protos/akash/market/v1/reclamation.cjs +138 -0
  26. package/dist/cjs/generated/protos/akash/market/v1/reclamation.cjs.map +7 -0
  27. package/dist/cjs/generated/protos/akash/market/v1beta5/bid.cjs +25 -2
  28. package/dist/cjs/generated/protos/akash/market/v1beta5/bid.cjs.map +2 -2
  29. package/dist/cjs/generated/protos/akash/market/v1beta5/bidmsg.cjs +18 -2
  30. package/dist/cjs/generated/protos/akash/market/v1beta5/bidmsg.cjs.map +2 -2
  31. package/dist/cjs/generated/protos/akash/market/v1beta5/leasemsg.cjs +103 -0
  32. package/dist/cjs/generated/protos/akash/market/v1beta5/leasemsg.cjs.map +2 -2
  33. package/dist/cjs/generated/protos/akash/market/v1beta5/order.cjs +18 -2
  34. package/dist/cjs/generated/protos/akash/market/v1beta5/order.cjs.map +2 -2
  35. package/dist/cjs/generated/protos/akash/market/v1beta5/params.cjs +39 -2
  36. package/dist/cjs/generated/protos/akash/market/v1beta5/params.cjs.map +2 -2
  37. package/dist/cjs/generated/protos/akash/market/v1beta5/service_akash.cjs +8 -0
  38. package/dist/cjs/generated/protos/akash/market/v1beta5/service_akash.cjs.map +2 -2
  39. package/dist/cjs/generated/protos/index.akash.v1.cjs +9 -0
  40. package/dist/cjs/generated/protos/index.akash.v1.cjs.map +2 -2
  41. package/dist/cjs/generated/protos/index.akash.v1beta5.cjs +2 -0
  42. package/dist/cjs/generated/protos/index.akash.v1beta5.cjs.map +2 -2
  43. package/dist/cjs/network/config.cjs +3 -7
  44. package/dist/cjs/network/config.cjs.map +2 -2
  45. package/dist/cjs/sdk/provider/auth/jwt/types.cjs.map +1 -1
  46. package/dist/cjs/sdk/provider/auth/jwt/validateJwtPayload.cjs +1058 -1259
  47. package/dist/cjs/sdk/provider/auth/jwt/validateJwtPayload.cjs.map +2 -2
  48. package/dist/cjs/sdl/index.cjs +0 -4
  49. package/dist/cjs/sdl/index.cjs.map +2 -2
  50. package/dist/cjs/sdl/manifest/generateManifest.cjs +2 -3
  51. package/dist/cjs/sdl/manifest/generateManifest.cjs.map +2 -2
  52. package/dist/cjs/sdl/validateSDL/validateSDL.cjs +4 -36
  53. package/dist/cjs/sdl/validateSDL/validateSDL.cjs.map +2 -2
  54. package/dist/cjs/sdl/validateSDL/validateSDLInput.cjs +49 -50
  55. package/dist/cjs/sdl/validateSDL/validateSDLInput.cjs.map +2 -2
  56. package/dist/cjs/test.cjs +2 -0
  57. package/dist/cjs/test.cjs.map +7 -0
  58. package/dist/esm/{chunk-JAPXWQ3D.js → chunk-7XWZXYD2.js} +2 -2
  59. package/dist/esm/{chunk-5RTSSO7K.js → chunk-B7H4H62Z.js} +3 -3
  60. package/dist/esm/chunk-E4KEMLL4.js +413 -0
  61. package/dist/esm/chunk-E4KEMLL4.js.map +7 -0
  62. package/dist/esm/{chunk-H5WUFEMM.js → chunk-EG6EVQGI.js} +23 -5
  63. package/dist/esm/chunk-EG6EVQGI.js.map +7 -0
  64. package/dist/esm/{chunk-5YIS3XNX.js → chunk-EXKSXOV2.js} +2 -2
  65. package/dist/esm/{chunk-TXQ2BR6G.js → chunk-IFAXXMON.js} +126 -5
  66. package/dist/esm/chunk-IFAXXMON.js.map +7 -0
  67. package/dist/esm/chunk-IMR6WS6F.js +93 -0
  68. package/dist/esm/chunk-IMR6WS6F.js.map +7 -0
  69. package/dist/esm/{chunk-LKYHOABO.js → chunk-IPOIF4A2.js} +170 -37
  70. package/dist/esm/chunk-IPOIF4A2.js.map +7 -0
  71. package/dist/esm/{chunk-PFJG3V3A.js → chunk-ITPLCNJB.js} +84 -5
  72. package/dist/esm/chunk-ITPLCNJB.js.map +7 -0
  73. package/dist/esm/{chunk-YSOG5YCI.js → chunk-KM336UKV.js} +1203 -2125
  74. package/dist/esm/chunk-KM336UKV.js.map +7 -0
  75. package/dist/esm/{chunk-KFWTFROT.js → chunk-M5SAGBGR.js} +42 -3
  76. package/dist/esm/chunk-M5SAGBGR.js.map +7 -0
  77. package/dist/esm/{chunk-OHAEKHAC.js → chunk-NPGGO3JN.js} +37 -55
  78. package/dist/esm/chunk-NPGGO3JN.js.map +7 -0
  79. package/dist/esm/{chunk-HDAINZXA.js → chunk-RKOP2GYL.js} +50 -7
  80. package/dist/esm/chunk-RKOP2GYL.js.map +7 -0
  81. package/dist/esm/{chunk-VZZ4GN23.js → chunk-T5PKT4I6.js} +6 -4
  82. package/dist/esm/{chunk-VZZ4GN23.js.map → chunk-T5PKT4I6.js.map} +1 -1
  83. package/dist/esm/{chunk-B4MMOAAO.js → chunk-WI3EWXXI.js} +2 -2
  84. package/dist/esm/generated/protos/index.akash.v1.js +180 -182
  85. package/dist/esm/generated/protos/index.akash.v1.js.map +4 -4
  86. package/dist/esm/generated/protos/index.akash.v1beta1.js +7 -7
  87. package/dist/esm/generated/protos/index.akash.v1beta4.js +6 -4
  88. package/dist/esm/generated/protos/index.akash.v1beta5.js +10 -4
  89. package/dist/esm/generated/protos/index.akash.v1beta5.js.map +1 -1
  90. package/dist/esm/generated/protos/index.akash.v2.js +6 -6
  91. package/dist/esm/generated/protos/index.provider.akash.v1.js +16 -15
  92. package/dist/esm/index.js +10 -12
  93. package/dist/esm/index.web.js +9 -11
  94. package/dist/esm/{query_akash-3UBRLLRZ.js → query_akash-3IY2DKPB.js} +3 -3
  95. package/dist/esm/{query_akash-CKZRI7R6.js → query_akash-OKZLG4MG.js} +5 -3
  96. package/dist/esm/{query_akash-CKZRI7R6.js.map → query_akash-OKZLG4MG.js.map} +1 -1
  97. package/dist/esm/{query_akash-3LAHGVQJ.js → query_akash-ZITEPCYB.js} +6 -4
  98. package/dist/esm/{query_akash-3LAHGVQJ.js.map → query_akash-ZITEPCYB.js.map} +1 -1
  99. package/dist/esm/{service_akash-UFTUJDPM.js → service_akash-2CH5FJ4J.js} +3 -3
  100. package/dist/esm/{service_akash-5JSE44LJ.js → service_akash-BLDT6YCO.js} +5 -3
  101. package/dist/esm/{service_akash-5JSE44LJ.js.map → service_akash-BLDT6YCO.js.map} +1 -1
  102. package/dist/esm/{service_akash-QEN5EQUY.js → service_akash-DZETPXWM.js} +15 -4
  103. package/dist/esm/service_akash-DZETPXWM.js.map +7 -0
  104. package/dist/esm/service_akash-K7FWCKUQ.js +25 -0
  105. package/dist/esm/service_akash-K7FWCKUQ.js.map +7 -0
  106. package/dist/esm/{service_akash-FI6WXDZP.js → service_akash-VOFSDZEK.js} +4 -3
  107. package/dist/esm/{service_akash-FI6WXDZP.js.map → service_akash-VOFSDZEK.js.map} +1 -1
  108. package/dist/sdl-schema.yaml +1 -1
  109. package/dist/tsconfig.build.tsbuildinfo +1 -1
  110. package/dist/types/bla.d.ts +1 -0
  111. package/dist/types/generated/createNodeSDK.d.ts +30 -0
  112. package/dist/types/generated/protos/akash/bme/v1/params.d.ts +5 -0
  113. package/dist/types/generated/protos/akash/bme/v1/types.d.ts +19 -1
  114. package/dist/types/generated/protos/akash/deployment/v1/deployment.d.ts +15 -0
  115. package/dist/types/generated/protos/akash/deployment/v1beta4/deploymentmsg.d.ts +6 -1
  116. package/dist/types/generated/protos/akash/discovery/v1/akash.d.ts +16 -2
  117. package/dist/types/generated/protos/akash/discovery/v1/client_info.d.ts +18 -0
  118. package/dist/types/generated/protos/akash/discovery/v1/service.d.ts +12 -0
  119. package/dist/types/generated/protos/akash/discovery/v1/service_akash.d.ts +13 -0
  120. package/dist/types/generated/protos/akash/market/v1/event.d.ts +11 -0
  121. package/dist/types/generated/protos/akash/market/v1/lease.d.ts +8 -0
  122. package/dist/types/generated/protos/akash/market/v1/reclamation.d.ts +22 -0
  123. package/dist/types/generated/protos/akash/market/v1beta5/bid.d.ts +3 -0
  124. package/dist/types/generated/protos/akash/market/v1beta5/bidmsg.d.ts +7 -0
  125. package/dist/types/generated/protos/akash/market/v1beta5/leasemsg.d.ts +12 -0
  126. package/dist/types/generated/protos/akash/market/v1beta5/order.d.ts +6 -0
  127. package/dist/types/generated/protos/akash/market/v1beta5/params.d.ts +5 -0
  128. package/dist/types/generated/protos/akash/market/v1beta5/service_akash.d.ts +7 -1
  129. package/dist/types/generated/protos/index.akash.v1.d.ts +5 -3
  130. package/dist/types/generated/protos/index.akash.v1beta5.d.ts +1 -1
  131. package/dist/types/network/config.d.ts +4 -5
  132. package/dist/types/sdk/chain/createChainNodeSDK.d.ts +6 -0
  133. package/dist/types/sdk/chain/createChainNodeWebSDK.d.ts +6 -0
  134. package/dist/types/sdk/chain/helpers.d.ts +1 -1
  135. package/dist/types/sdk/provider/auth/jwt/types.d.ts +4 -58
  136. package/dist/types/sdk/provider/auth/jwt/validateJwtPayload.d.ts +273 -225
  137. package/dist/types/sdl/index.d.ts +0 -2
  138. package/dist/types/sdl/manifest/generateManifest.d.ts +1 -2
  139. package/dist/types/sdl/validateSDL/validateSDL.d.ts +2 -3
  140. package/dist/types/sdl/validateSDL/validateSDLInput.d.ts +5 -5
  141. package/dist/types/test.d.ts +1 -0
  142. package/package.json +13 -15
  143. package/dist/cjs/sdl/SDL/SDL.cjs +0 -718
  144. package/dist/cjs/sdl/SDL/SDL.cjs.map +0 -7
  145. package/dist/cjs/sdl/SDL/SdlValidationError.cjs +0 -46
  146. package/dist/cjs/sdl/SDL/SdlValidationError.cjs.map +0 -7
  147. package/dist/esm/chunk-H5WUFEMM.js.map +0 -7
  148. package/dist/esm/chunk-HDAINZXA.js.map +0 -7
  149. package/dist/esm/chunk-KFWTFROT.js.map +0 -7
  150. package/dist/esm/chunk-LKYHOABO.js.map +0 -7
  151. package/dist/esm/chunk-OHAEKHAC.js.map +0 -7
  152. package/dist/esm/chunk-PFJG3V3A.js.map +0 -7
  153. package/dist/esm/chunk-TXQ2BR6G.js.map +0 -7
  154. package/dist/esm/chunk-YSOG5YCI.js.map +0 -7
  155. package/dist/esm/service_akash-QEN5EQUY.js.map +0 -7
  156. package/dist/types/sdl/SDL/SDL.d.ts +0 -439
  157. package/dist/types/sdl/SDL/SdlValidationError.d.ts +0 -18
  158. /package/dist/esm/{chunk-JAPXWQ3D.js.map → chunk-7XWZXYD2.js.map} +0 -0
  159. /package/dist/esm/{chunk-5RTSSO7K.js.map → chunk-B7H4H62Z.js.map} +0 -0
  160. /package/dist/esm/{chunk-5YIS3XNX.js.map → chunk-EXKSXOV2.js.map} +0 -0
  161. /package/dist/esm/{chunk-B4MMOAAO.js.map → chunk-WI3EWXXI.js.map} +0 -0
  162. /package/dist/esm/{query_akash-3UBRLLRZ.js.map → query_akash-3IY2DKPB.js.map} +0 -0
  163. /package/dist/esm/{service_akash-UFTUJDPM.js.map → service_akash-2CH5FJ4J.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/sdl/index.ts"],
4
- "sourcesContent": ["/**\n * SDL (Stack Definition Language) module exports\n * Provides functionality for parsing and validating Akash deployment manifests\n *\n * @example\n * ```ts\n * import { SDL } from './sdl';\n *\n * const yaml = `\n * version: \"2.0\"\n * services:\n * web:\n * image: nginx\n * expose:\n * - port: 80\n * as: 80\n * to:\n * - global: true\n * `;\n *\n * const sdl = SDL.fromString(yaml);\n * const manifest = sdl.manifest();\n * ```\n */\nexport { SDL } from \"./SDL/SDL.ts\";\n\nexport { validateSDL, validationSDLSchema } from \"./validateSDL/validateSDL.ts\";\nexport type { SDLInput } from \"./validateSDL/validateSDLInput.ts\";\nexport type { ValidationError } from \"../utils/jsonSchemaValidation.ts\";\n\nexport * from \"./types.ts\";\nexport { SdlValidationError } from \"./SDL/SdlValidationError.ts\";\n\nexport { generateManifest } from \"./manifest/generateManifest.ts\";\nexport type { Manifest, GenerateManifestResult } from \"./manifest/generateManifest.ts\";\nexport { generateManifestVersion, manifestToSortedJSON } from \"./manifest/generateManifestVersion.ts\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,iBAAoB;AAEpB,yBAAiD;AAIjD,wBAAc,uBA9Bd;AA+BA,gCAAmC;AAEnC,8BAAiC;AAEjC,qCAA8D;",
4
+ "sourcesContent": ["/**\n * SDL (Stack Definition Language) module exports\n * Provides functionality for parsing and validating Akash deployment manifests\n *\n * @example\n * ```ts\n * import { SDL } from './sdl';\n *\n * const yaml = `\n * version: \"2.0\"\n * services:\n * web:\n * image: nginx\n * expose:\n * - port: 80\n * as: 80\n * to:\n * - global: true\n * `;\n *\n * const sdl = SDL.fromString(yaml);\n * const manifest = sdl.manifest();\n * ```\n */\n\nexport { validateSDL, validationSDLSchema } from \"./validateSDL/validateSDL.ts\";\nexport type { SDLInput } from \"./validateSDL/validateSDLInput.ts\";\nexport type { ValidationError } from \"../utils/jsonSchemaValidation.ts\";\n\nexport * from \"./types.ts\";\n\nexport { generateManifest } from \"./manifest/generateManifest.ts\";\nexport type { Manifest, GenerateManifestResult } from \"./manifest/generateManifest.ts\";\nexport { generateManifestVersion, manifestToSortedJSON } from \"./manifest/generateManifestVersion.ts\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA,yBAAiD;AAIjD,wBAAc,uBA7Bd;AA+BA,8BAAiC;AAEjC,qCAA8D;",
6
6
  "names": []
7
7
  }
@@ -32,12 +32,11 @@ var import_resourceunit = require("../../generated/protos/akash/deployment/v1bet
32
32
  var import_group = require("../../generated/protos/akash/manifest/v2beta3/group.cjs");
33
33
  var import_service = require("../../generated/protos/akash/manifest/v2beta3/service.cjs");
34
34
  var import_serviceexpose = require("../../generated/protos/akash/manifest/v2beta3/serviceexpose.cjs");
35
- var import_config = require("../../network/config.cjs");
36
35
  var import_utils = require("../utils.cjs");
37
36
  var import_validateSDL = require("../validateSDL/validateSDL.cjs");
38
37
  var import_manifestUtils = require("./manifestUtils.cjs");
39
- function generateManifest(sdl, networkId = import_config.MAINNET_ID) {
40
- const errors = (0, import_validateSDL.validateSDL)(sdl, networkId);
38
+ function generateManifest(sdl) {
39
+ const errors = (0, import_validateSDL.validateSDL)(sdl);
41
40
  if (errors) return { ok: false, value: errors };
42
41
  const endpointSequenceNumbers = (0, import_manifestUtils.computeEndpointSequenceNumbers)(sdl.services);
43
42
  const groupsMap = /* @__PURE__ */ new Map();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/sdl/manifest/generateManifest.ts"],
4
- "sourcesContent": ["import { PlacementRequirements, SignedBy } from \"../../generated/protos/akash/base/attributes/v1/attribute.ts\";\nimport { CPU } from \"../../generated/protos/akash/base/resources/v1beta4/cpu.ts\";\nimport { GPU } from \"../../generated/protos/akash/base/resources/v1beta4/gpu.ts\";\nimport { Memory } from \"../../generated/protos/akash/base/resources/v1beta4/memory.ts\";\nimport { Resources } from \"../../generated/protos/akash/base/resources/v1beta4/resources.ts\";\nimport { Storage } from \"../../generated/protos/akash/base/resources/v1beta4/storage.ts\";\nimport { GroupSpec } from \"../../generated/protos/akash/deployment/v1beta4/groupspec.ts\";\nimport { ResourceUnit } from \"../../generated/protos/akash/deployment/v1beta4/resourceunit.ts\";\nimport { Group } from \"../../generated/protos/akash/manifest/v2beta3/group.ts\";\nimport { ImageCredentials, Service, ServiceParams, StorageParams } from \"../../generated/protos/akash/manifest/v2beta3/service.ts\";\nimport { ServiceExpose } from \"../../generated/protos/akash/manifest/v2beta3/serviceexpose.ts\";\nimport { MAINNET_ID } from \"../../network/config.ts\";\nimport type { NetworkId } from \"../../network/types.ts\";\nimport type { ValidationError } from \"../../utils/jsonSchemaValidation.ts\";\nimport { castArray } from \"../utils.ts\";\nimport type { SDLInput } from \"../validateSDL/validateSDL.ts\";\nimport { validateSDL } from \"../validateSDL/validateSDL.ts\";\nimport {\n buildHttpOptions,\n buildResourceAttributes,\n buildServiceEndpoints,\n buildStorageAttributes,\n computeEndpointSequenceNumbers,\n encodeResourceValue,\n parseCpuUnits,\n parseGpuUnits,\n parseMemoryBytes,\n parseServiceProto,\n parseStorageBytes,\n type SDLCompute,\n type SDLService,\n transformGpuAttributes,\n} from \"./manifestUtils.ts\";\n\nexport interface GenerateManifestOkResult {\n groups: Group[];\n groupSpecs: GroupSpec[];\n}\n\nexport type Manifest = GenerateManifestOkResult[\"groups\"];\nexport type GenerateManifestResult =\n | { ok?: false; value: ValidationError[] }\n | { ok: true; value: GenerateManifestOkResult };\nexport function generateManifest(sdl: SDLInput, networkId: NetworkId = MAINNET_ID): GenerateManifestResult {\n const errors = validateSDL(sdl, networkId);\n if (errors) return { ok: false, value: errors };\n\n const endpointSequenceNumbers = computeEndpointSequenceNumbers(sdl.services);\n const groupsMap = new Map<string, {\n dgroup: GroupSpec;\n boundComputes: Record<string, number>;\n }>();\n const resourceIds = new Map<string, number>();\n\n const deploymentsByPlacement = new Map<string, [string, { profile: string; count: number }][]>();\n for (const [svcName, placements] of Object.entries(sdl.deployment)) {\n for (const [placementName, deployment] of Object.entries(placements)) {\n let list = deploymentsByPlacement.get(placementName);\n if (!list) {\n list = [];\n deploymentsByPlacement.set(placementName, list);\n }\n list.push([svcName, deployment]);\n }\n }\n for (const list of deploymentsByPlacement.values()) {\n list.sort(([a], [b]) => a.localeCompare(b));\n }\n\n const services = Object.entries(sdl.services).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [svcName, service] of services) {\n for (const [placementName, svcdepl] of Object.entries(sdl.deployment[svcName])) {\n const compute = sdl.profiles.compute[svcdepl.profile];\n const infra = sdl.profiles.placement[placementName];\n const pricing = infra.pricing[svcdepl.profile];\n const price = {\n denom: pricing.denom,\n amount: pricing.amount?.toString(),\n };\n\n let group = groupsMap.get(placementName);\n\n if (!group) {\n group = {\n dgroup: GroupSpec.fromPartial({\n name: placementName,\n resources: [],\n requirements: PlacementRequirements.fromPartial({\n attributes: buildResourceAttributes(infra.attributes),\n signedBy: SignedBy.fromPartial({\n allOf: infra.signedBy?.allOf,\n anyOf: infra.signedBy?.anyOf,\n }),\n }),\n }),\n boundComputes: {},\n };\n\n groupsMap.set(placementName, group);\n }\n\n const profileKey = `${placementName}:${svcdepl.profile}`;\n const location = group.boundComputes[svcdepl.profile];\n\n if (location === undefined) {\n const resId = group.dgroup.resources.length > 0\n ? group.dgroup.resources.length + 1\n : 1;\n\n resourceIds.set(profileKey, resId);\n\n const resources = buildResources(resId, compute, service, endpointSequenceNumbers);\n\n group.dgroup.resources.push(\n ResourceUnit.fromPartial({\n resource: resources,\n count: svcdepl.count,\n price,\n }),\n );\n\n group.boundComputes[svcdepl.profile] = group.dgroup.resources.length - 1;\n } else {\n if (!resourceIds.has(profileKey)) {\n resourceIds.set(profileKey, group.dgroup.resources[location].resource!.id);\n }\n\n group.dgroup.resources[location].count += svcdepl.count;\n group.dgroup.resources[location].resource!.endpoints.push(\n ...buildServiceEndpoints(service, endpointSequenceNumbers),\n );\n }\n }\n }\n\n for (const group of groupsMap.values()) {\n for (const resourceUnit of group.dgroup.resources) {\n resourceUnit.resource!.endpoints.sort(\n (a, b) => a.kind - b.kind || a.sequenceNumber - b.sequenceNumber,\n );\n }\n }\n\n const sortedGroupNames = [...groupsMap.keys()].sort();\n let groups: Group[] | undefined;\n let groupSpecs: GroupSpec[] | undefined;\n\n const manifest = {\n get groups() {\n groups ??= sortedGroupNames.map((placementName) => {\n const deployments = deploymentsByPlacement.get(placementName)!;\n\n return Group.fromPartial({\n name: placementName,\n services: deployments.map(([svcName]) => {\n const service = sdl.services[svcName];\n const deployment = sdl.deployment[svcName][placementName];\n const compute = sdl.profiles.compute[deployment.profile];\n const resourceId = resourceIds.get(`${placementName}:${deployment.profile}`) || 1;\n\n return buildManifestService(\n resourceId,\n svcName,\n service,\n compute,\n deployment.count,\n endpointSequenceNumbers,\n );\n }),\n });\n });\n return groups;\n },\n get groupSpecs() {\n groupSpecs ??= sortedGroupNames.map((name) => groupsMap.get(name)!.dgroup);\n return groupSpecs;\n },\n };\n\n return { ok: true, value: manifest };\n}\n\nfunction buildResources(\n id: number,\n compute: SDLCompute,\n service: SDLService,\n endpointSequenceNumbers: Record<string, number>,\n): Resources {\n const res = compute.resources;\n const cpuAttributes = buildResourceAttributes(res.cpu.attributes);\n const gpuAttributes = res.gpu?.attributes ? transformGpuAttributes(res.gpu.attributes) : [];\n\n return Resources.fromPartial({\n id,\n cpu: CPU.fromPartial({\n units: { val: encodeResourceValue(parseCpuUnits(res.cpu)) },\n attributes: cpuAttributes,\n }),\n memory: Memory.fromPartial({\n quantity: { val: encodeResourceValue(parseMemoryBytes(res.memory)) },\n }),\n storage: castArray(res.storage).map((s) =>\n Storage.fromPartial({\n name: s.name || \"default\",\n quantity: { val: encodeResourceValue(parseStorageBytes(s.size)) },\n attributes: buildStorageAttributes(s.attributes),\n }),\n ),\n gpu: GPU.fromPartial({\n units: { val: encodeResourceValue(parseGpuUnits(res.gpu)) },\n attributes: gpuAttributes,\n }),\n endpoints: buildServiceEndpoints(service, endpointSequenceNumbers),\n });\n}\n\nfunction buildManifestService(\n resourceId: number,\n name: string,\n service: SDLService,\n compute: SDLCompute,\n count: number,\n endpointSequenceNumbers: Record<string, number>,\n): Service {\n const credentials = service.credentials\n ? ImageCredentials.fromPartial({\n host: service.credentials.host,\n email: service.credentials.email || \"\",\n username: service.credentials.username,\n password: service.credentials.password,\n })\n : undefined;\n\n const params = buildParams(service);\n\n return Service.fromPartial({\n name,\n image: service.image,\n command: service.command || [],\n args: service.args || [],\n env: service.env || [],\n resources: buildResources(resourceId, compute, service, endpointSequenceNumbers),\n count,\n expose: buildManifestExpose(service, endpointSequenceNumbers),\n params,\n credentials,\n });\n}\n\nfunction buildParams(service: SDLService): ServiceParams | undefined {\n if (!service.params) return undefined;\n\n const storage = service.params.storage || {};\n const storageNames = service.params.storage ? Object.keys(storage).sort() : [];\n const result = ServiceParams.fromPartial({\n storage: storageNames.map((name) => {\n const config = storage[name];\n return StorageParams.fromPartial({\n name,\n mount: config.mount || \"\",\n readOnly: config.readOnly || false,\n });\n }),\n });\n\n // Permissions are not in the protobuf type but need to be preserved\n if (service.params.permissions) {\n (result as unknown as Record<string, unknown>).permissions = service.params.permissions;\n }\n\n return result;\n}\n\nfunction buildManifestExpose(\n service: SDLService,\n endpointSequenceNumbers: Record<string, number>,\n): ServiceExpose[] {\n return (service.expose ?? [])\n .flatMap((expose) =>\n (expose.to ?? []).map((to) =>\n ServiceExpose.fromPartial({\n port: expose.port,\n externalPort: expose.as,\n proto: parseServiceProto(expose.proto),\n service: to.service || \"\",\n global: to.global || false,\n hosts: expose.accept || [],\n httpOptions: buildHttpOptions(expose.http_options),\n ip: to.ip || \"\",\n endpointSequenceNumber: endpointSequenceNumbers[to.ip!],\n }),\n ),\n )\n .sort((a, b) => {\n if (a.service !== b.service) return a.service.localeCompare(b.service);\n if (a.port !== b.port) return a.port - b.port;\n if (a.proto !== b.proto) return a.proto.localeCompare(b.proto);\n if (a.global !== b.global) return a.global ? -1 : 1;\n return 0;\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { PlacementRequirements, SignedBy } from \"../../generated/protos/akash/base/attributes/v1/attribute.ts\";\nimport { CPU } from \"../../generated/protos/akash/base/resources/v1beta4/cpu.ts\";\nimport { GPU } from \"../../generated/protos/akash/base/resources/v1beta4/gpu.ts\";\nimport { Memory } from \"../../generated/protos/akash/base/resources/v1beta4/memory.ts\";\nimport { Resources } from \"../../generated/protos/akash/base/resources/v1beta4/resources.ts\";\nimport { Storage } from \"../../generated/protos/akash/base/resources/v1beta4/storage.ts\";\nimport { GroupSpec } from \"../../generated/protos/akash/deployment/v1beta4/groupspec.ts\";\nimport { ResourceUnit } from \"../../generated/protos/akash/deployment/v1beta4/resourceunit.ts\";\nimport { Group } from \"../../generated/protos/akash/manifest/v2beta3/group.ts\";\nimport { ImageCredentials, Service, ServiceParams, StorageParams } from \"../../generated/protos/akash/manifest/v2beta3/service.ts\";\nimport { ServiceExpose } from \"../../generated/protos/akash/manifest/v2beta3/serviceexpose.ts\";\nimport type { ValidationError } from \"../../utils/jsonSchemaValidation.ts\";\nimport { castArray } from \"../utils.ts\";\nimport type { SDLInput } from \"../validateSDL/validateSDL.ts\";\nimport { validateSDL } from \"../validateSDL/validateSDL.ts\";\nimport {\n buildHttpOptions,\n buildResourceAttributes,\n buildServiceEndpoints,\n buildStorageAttributes,\n computeEndpointSequenceNumbers,\n encodeResourceValue,\n parseCpuUnits,\n parseGpuUnits,\n parseMemoryBytes,\n parseServiceProto,\n parseStorageBytes,\n type SDLCompute,\n type SDLService,\n transformGpuAttributes,\n} from \"./manifestUtils.ts\";\n\nexport interface GenerateManifestOkResult {\n groups: Group[];\n groupSpecs: GroupSpec[];\n}\n\nexport type Manifest = GenerateManifestOkResult[\"groups\"];\nexport type GenerateManifestResult =\n | { ok?: false; value: ValidationError[] }\n | { ok: true; value: GenerateManifestOkResult };\nexport function generateManifest(sdl: SDLInput): GenerateManifestResult {\n const errors = validateSDL(sdl);\n if (errors) return { ok: false, value: errors };\n\n const endpointSequenceNumbers = computeEndpointSequenceNumbers(sdl.services);\n const groupsMap = new Map<string, {\n dgroup: GroupSpec;\n boundComputes: Record<string, number>;\n }>();\n const resourceIds = new Map<string, number>();\n\n const deploymentsByPlacement = new Map<string, [string, { profile: string; count: number }][]>();\n for (const [svcName, placements] of Object.entries(sdl.deployment)) {\n for (const [placementName, deployment] of Object.entries(placements)) {\n let list = deploymentsByPlacement.get(placementName);\n if (!list) {\n list = [];\n deploymentsByPlacement.set(placementName, list);\n }\n list.push([svcName, deployment]);\n }\n }\n for (const list of deploymentsByPlacement.values()) {\n list.sort(([a], [b]) => a.localeCompare(b));\n }\n\n const services = Object.entries(sdl.services).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [svcName, service] of services) {\n for (const [placementName, svcdepl] of Object.entries(sdl.deployment[svcName])) {\n const compute = sdl.profiles.compute[svcdepl.profile];\n const infra = sdl.profiles.placement[placementName];\n const pricing = infra.pricing[svcdepl.profile];\n const price = {\n denom: pricing.denom,\n amount: pricing.amount?.toString(),\n };\n\n let group = groupsMap.get(placementName);\n\n if (!group) {\n group = {\n dgroup: GroupSpec.fromPartial({\n name: placementName,\n resources: [],\n requirements: PlacementRequirements.fromPartial({\n attributes: buildResourceAttributes(infra.attributes),\n signedBy: SignedBy.fromPartial({\n allOf: infra.signedBy?.allOf,\n anyOf: infra.signedBy?.anyOf,\n }),\n }),\n }),\n boundComputes: {},\n };\n\n groupsMap.set(placementName, group);\n }\n\n const profileKey = `${placementName}:${svcdepl.profile}`;\n const location = group.boundComputes[svcdepl.profile];\n\n if (location === undefined) {\n const resId = group.dgroup.resources.length > 0\n ? group.dgroup.resources.length + 1\n : 1;\n\n resourceIds.set(profileKey, resId);\n\n const resources = buildResources(resId, compute, service, endpointSequenceNumbers);\n\n group.dgroup.resources.push(\n ResourceUnit.fromPartial({\n resource: resources,\n count: svcdepl.count,\n price,\n }),\n );\n\n group.boundComputes[svcdepl.profile] = group.dgroup.resources.length - 1;\n } else {\n if (!resourceIds.has(profileKey)) {\n resourceIds.set(profileKey, group.dgroup.resources[location].resource!.id);\n }\n\n group.dgroup.resources[location].count += svcdepl.count;\n group.dgroup.resources[location].resource!.endpoints.push(\n ...buildServiceEndpoints(service, endpointSequenceNumbers),\n );\n }\n }\n }\n\n for (const group of groupsMap.values()) {\n for (const resourceUnit of group.dgroup.resources) {\n resourceUnit.resource!.endpoints.sort(\n (a, b) => a.kind - b.kind || a.sequenceNumber - b.sequenceNumber,\n );\n }\n }\n\n const sortedGroupNames = [...groupsMap.keys()].sort();\n let groups: Group[] | undefined;\n let groupSpecs: GroupSpec[] | undefined;\n\n const manifest = {\n get groups() {\n groups ??= sortedGroupNames.map((placementName) => {\n const deployments = deploymentsByPlacement.get(placementName)!;\n\n return Group.fromPartial({\n name: placementName,\n services: deployments.map(([svcName]) => {\n const service = sdl.services[svcName];\n const deployment = sdl.deployment[svcName][placementName];\n const compute = sdl.profiles.compute[deployment.profile];\n const resourceId = resourceIds.get(`${placementName}:${deployment.profile}`) || 1;\n\n return buildManifestService(\n resourceId,\n svcName,\n service,\n compute,\n deployment.count,\n endpointSequenceNumbers,\n );\n }),\n });\n });\n return groups;\n },\n get groupSpecs() {\n groupSpecs ??= sortedGroupNames.map((name) => groupsMap.get(name)!.dgroup);\n return groupSpecs;\n },\n };\n\n return { ok: true, value: manifest };\n}\n\nfunction buildResources(\n id: number,\n compute: SDLCompute,\n service: SDLService,\n endpointSequenceNumbers: Record<string, number>,\n): Resources {\n const res = compute.resources;\n const cpuAttributes = buildResourceAttributes(res.cpu.attributes);\n const gpuAttributes = res.gpu?.attributes ? transformGpuAttributes(res.gpu.attributes) : [];\n\n return Resources.fromPartial({\n id,\n cpu: CPU.fromPartial({\n units: { val: encodeResourceValue(parseCpuUnits(res.cpu)) },\n attributes: cpuAttributes,\n }),\n memory: Memory.fromPartial({\n quantity: { val: encodeResourceValue(parseMemoryBytes(res.memory)) },\n }),\n storage: castArray(res.storage).map((s) =>\n Storage.fromPartial({\n name: s.name || \"default\",\n quantity: { val: encodeResourceValue(parseStorageBytes(s.size)) },\n attributes: buildStorageAttributes(s.attributes),\n }),\n ),\n gpu: GPU.fromPartial({\n units: { val: encodeResourceValue(parseGpuUnits(res.gpu)) },\n attributes: gpuAttributes,\n }),\n endpoints: buildServiceEndpoints(service, endpointSequenceNumbers),\n });\n}\n\nfunction buildManifestService(\n resourceId: number,\n name: string,\n service: SDLService,\n compute: SDLCompute,\n count: number,\n endpointSequenceNumbers: Record<string, number>,\n): Service {\n const credentials = service.credentials\n ? ImageCredentials.fromPartial({\n host: service.credentials.host,\n email: service.credentials.email || \"\",\n username: service.credentials.username,\n password: service.credentials.password,\n })\n : undefined;\n\n const params = buildParams(service);\n\n return Service.fromPartial({\n name,\n image: service.image,\n command: service.command || [],\n args: service.args || [],\n env: service.env || [],\n resources: buildResources(resourceId, compute, service, endpointSequenceNumbers),\n count,\n expose: buildManifestExpose(service, endpointSequenceNumbers),\n params,\n credentials,\n });\n}\n\nfunction buildParams(service: SDLService): ServiceParams | undefined {\n if (!service.params) return undefined;\n\n const storage = service.params.storage || {};\n const storageNames = service.params.storage ? Object.keys(storage).sort() : [];\n const result = ServiceParams.fromPartial({\n storage: storageNames.map((name) => {\n const config = storage[name];\n return StorageParams.fromPartial({\n name,\n mount: config.mount || \"\",\n readOnly: config.readOnly || false,\n });\n }),\n });\n\n // Permissions are not in the protobuf type but need to be preserved\n if (service.params.permissions) {\n (result as unknown as Record<string, unknown>).permissions = service.params.permissions;\n }\n\n return result;\n}\n\nfunction buildManifestExpose(\n service: SDLService,\n endpointSequenceNumbers: Record<string, number>,\n): ServiceExpose[] {\n return (service.expose ?? [])\n .flatMap((expose) =>\n (expose.to ?? []).map((to) =>\n ServiceExpose.fromPartial({\n port: expose.port,\n externalPort: expose.as,\n proto: parseServiceProto(expose.proto),\n service: to.service || \"\",\n global: to.global || false,\n hosts: expose.accept || [],\n httpOptions: buildHttpOptions(expose.http_options),\n ip: to.ip || \"\",\n endpointSequenceNumber: endpointSequenceNumbers[to.ip!],\n }),\n ),\n )\n .sort((a, b) => {\n if (a.service !== b.service) return a.service.localeCompare(b.service);\n if (a.port !== b.port) return a.port - b.port;\n if (a.proto !== b.proto) return a.proto.localeCompare(b.proto);\n if (a.global !== b.global) return a.global ? -1 : 1;\n return 0;\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -30,11 +30,10 @@ __export(validateSDL_exports, {
30
30
  validationSDLSchema: () => import_validateSDLInput.schema
31
31
  });
32
32
  module.exports = __toCommonJS(validateSDL_exports);
33
- var import_network = require("../../network/index.cjs");
34
33
  var import_jsonSchemaValidation = require("../../utils/jsonSchemaValidation.cjs");
35
34
  var import_utils = require("../utils.cjs");
36
35
  var import_validateSDLInput = require("./validateSDLInput.cjs");
37
- var _endpointsUsed, _portsUsed, _sdl, _errors, _SDLValidator_instances, validateDenom_fn, findInvalidUsdcDenom_fn, validateDeploymentWithRelations_fn, validateDeploymentRelations_fn, validateServiceStorages_fn, validateStorages_fn, validateGPU_fn, validateLeaseIP_fn, validateEndpoints_fn;
36
+ var _endpointsUsed, _portsUsed, _sdl, _errors, _SDLValidator_instances, validateDeploymentWithRelations_fn, validateDeploymentRelations_fn, validateServiceStorages_fn, validateStorages_fn, validateGPU_fn, validateLeaseIP_fn, validateEndpoints_fn;
38
37
  const ERROR_MESSAGES = {
39
38
  "#/definitions/storageRamClassMustNotBePersistent"(error) {
40
39
  return `"ram" storage${(0, import_jsonSchemaValidation.getErrorLocation)((0, import_jsonSchemaValidation.dirname)(error.instancePath))} cannot be persistent`;
@@ -43,12 +42,12 @@ const ERROR_MESSAGES = {
43
42
  return `If an IP is declared, the directive must be declared as global.`;
44
43
  }
45
44
  };
46
- function validateSDL(sdl, networkId) {
45
+ function validateSDL(sdl) {
47
46
  (0, import_validateSDLInput.validate)(sdl);
48
47
  const schemaErrors = (0, import_jsonSchemaValidation.humanizeErrors)(import_validateSDLInput.validate.errors, import_validateSDLInput.schema, ERROR_MESSAGES);
49
48
  if (schemaErrors.length) return schemaErrors;
50
49
  const validator = new SDLValidator(sdl);
51
- const errors = validator.validate(networkId);
50
+ const errors = validator.validate();
52
51
  const allErrors = schemaErrors.concat(errors);
53
52
  return allErrors.length ? allErrors : void 0;
54
53
  }
@@ -61,14 +60,13 @@ class SDLValidator {
61
60
  __privateAdd(this, _errors, []);
62
61
  __privateSet(this, _sdl, sdl);
63
62
  }
64
- validate(networkId) {
63
+ validate() {
65
64
  if (__privateGet(this, _sdl).services) {
66
65
  Object.keys(__privateGet(this, _sdl).services).forEach((serviceName) => {
67
66
  __privateMethod(this, _SDLValidator_instances, validateDeploymentWithRelations_fn).call(this, serviceName);
68
67
  __privateMethod(this, _SDLValidator_instances, validateLeaseIP_fn).call(this, serviceName);
69
68
  });
70
69
  }
71
- __privateMethod(this, _SDLValidator_instances, validateDenom_fn).call(this, networkId);
72
70
  __privateMethod(this, _SDLValidator_instances, validateEndpoints_fn).call(this);
73
71
  return __privateGet(this, _errors);
74
72
  }
@@ -78,36 +76,6 @@ _portsUsed = new WeakMap();
78
76
  _sdl = new WeakMap();
79
77
  _errors = new WeakMap();
80
78
  _SDLValidator_instances = new WeakSet();
81
- validateDenom_fn = function(networkId) {
82
- if (!__privateGet(this, _sdl).profiles?.placement) return;
83
- const usdcDenom = import_network.USDC_IBC_DENOMS[networkId];
84
- const invalidDenom = __privateMethod(this, _SDLValidator_instances, findInvalidUsdcDenom_fn).call(this, usdcDenom);
85
- if (invalidDenom) {
86
- __privateGet(this, _errors).push({
87
- message: `Invalid format: "denom" at "${invalidDenom.path}" does not match pattern "^(uakt|uact|${usdcDenom})$"`,
88
- instancePath: invalidDenom.path,
89
- schemaPath: "#/definitions/priceCoin/properties/denom",
90
- keyword: "pattern",
91
- params: {
92
- pattern: "^(uakt|uact|ibc/.*)$"
93
- }
94
- });
95
- }
96
- };
97
- findInvalidUsdcDenom_fn = function(usdcDenom) {
98
- for (const [placementName, placement] of Object.entries(__privateGet(this, _sdl).profiles.placement)) {
99
- if (!placement.pricing) continue;
100
- for (const [profile, pricing] of Object.entries(placement.pricing)) {
101
- if (pricing.denom.startsWith("ibc/") && pricing.denom !== usdcDenom) {
102
- return {
103
- path: `/profiles/placement/${placementName}/pricing/${profile}/denom`,
104
- denom: pricing.denom
105
- };
106
- }
107
- }
108
- }
109
- return null;
110
- };
111
79
  validateDeploymentWithRelations_fn = function(serviceName) {
112
80
  const deployment = __privateGet(this, _sdl).deployment[serviceName];
113
81
  if (!deployment) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/sdl/validateSDL/validateSDL.ts"],
4
- "sourcesContent": ["import { type NetworkId, USDC_IBC_DENOMS } from \"../../network/index.ts\";\nimport type { ErrorMessages, ValidationError, ValidationFunction } from \"../../utils/jsonSchemaValidation.ts\";\nimport { dirname, getErrorLocation, humanizeErrors } from \"../../utils/jsonSchemaValidation.ts\";\nimport { castArray, stringToBoolean } from \"../utils.ts\";\nimport { schema as validationSDLSchema, type SDLInput, validate as validateSDLInput } from \"./validateSDLInput.ts\";\n\nexport type { SDLInput };\nexport { validationSDLSchema };\n\nconst ERROR_MESSAGES: ErrorMessages = {\n \"#/definitions/storageRamClassMustNotBePersistent\"(error) {\n return `\"ram\" storage${getErrorLocation(dirname(error.instancePath))} cannot be persistent`;\n },\n \"#/definitions/exposeToWithIpEnforcesGlobal\"() {\n return `If an IP is declared, the directive must be declared as global.`;\n },\n};\n\nexport function validateSDL(sdl: SDLInput, networkId: NetworkId): undefined | ValidationError[] {\n validateSDLInput(sdl);\n const schemaErrors = humanizeErrors((validateSDLInput as ValidationFunction).errors, validationSDLSchema, ERROR_MESSAGES);\n if (schemaErrors.length) return schemaErrors;\n\n const validator = new SDLValidator(sdl);\n const errors = validator.validate(networkId);\n\n const allErrors = schemaErrors.concat(errors);\n return allErrors.length ? allErrors : undefined;\n}\n\nclass SDLValidator {\n readonly #endpointsUsed = new Set<string>();\n readonly #portsUsed = new Map<string, string>();\n readonly #sdl: SDLInput;\n readonly #errors: ValidationError[] = [];\n\n constructor(sdl: SDLInput) {\n this.#sdl = sdl;\n }\n\n validate(networkId: NetworkId) {\n if (this.#sdl.services) {\n Object.keys(this.#sdl.services).forEach((serviceName) => {\n this.#validateDeploymentWithRelations(serviceName);\n this.#validateLeaseIP(serviceName);\n });\n }\n\n this.#validateDenom(networkId);\n this.#validateEndpoints();\n return this.#errors;\n }\n\n #validateDenom(networkId: NetworkId) {\n if (!this.#sdl.profiles?.placement) return;\n\n const usdcDenom = USDC_IBC_DENOMS[networkId];\n const invalidDenom = this.#findInvalidUsdcDenom(usdcDenom);\n\n if (invalidDenom) {\n this.#errors.push({\n message: `Invalid format: \"denom\" at \"${invalidDenom.path}\" does not match pattern \"^(uakt|uact|${usdcDenom})$\"`,\n instancePath: invalidDenom.path,\n schemaPath: \"#/definitions/priceCoin/properties/denom\",\n keyword: \"pattern\",\n params: {\n pattern: \"^(uakt|uact|ibc/.*)$\",\n },\n });\n }\n }\n\n #findInvalidUsdcDenom(usdcDenom: string): { denom: string; path: string } | null {\n for (const [placementName, placement] of Object.entries(this.#sdl.profiles.placement)) {\n if (!placement.pricing) continue;\n for (const [profile, pricing] of Object.entries(placement.pricing)) {\n if (pricing.denom.startsWith(\"ibc/\") && pricing.denom !== usdcDenom) {\n return {\n path: `/profiles/placement/${placementName}/pricing/${profile}/denom`,\n denom: pricing.denom,\n };\n }\n }\n }\n\n return null;\n }\n\n #validateDeploymentWithRelations(serviceName: string) {\n const deployment = this.#sdl.deployment[serviceName];\n if (!deployment) {\n this.#errors.push({\n message: `Service \"${serviceName}\" is not defined at \"/deployment\" section.`,\n instancePath: `/deployment`,\n schemaPath: \"#/properties/deployment\",\n keyword: \"required\",\n params: {\n missingProperty: serviceName,\n },\n });\n return;\n }\n\n Object.keys(this.#sdl.deployment[serviceName]).forEach((deploymentName) => {\n this.#validateDeploymentRelations(serviceName, deploymentName);\n this.#validateServiceStorages(serviceName, deploymentName);\n this.#validateStorages(serviceName, deploymentName);\n this.#validateGPU(serviceName, deploymentName);\n });\n }\n\n #validateDeploymentRelations(serviceName: string, deploymentName: string) {\n const serviceDeployment = this.#sdl.deployment?.[serviceName]?.[deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment?.profile];\n const infra = this.#sdl.profiles?.placement?.[deploymentName];\n\n if (!infra) {\n this.#errors.push({\n message: `The placement \"${deploymentName}\" is not defined in the \"placement\" section.`,\n instancePath: `/profiles/placement`,\n schemaPath: \"#/properties/profiles/properties/placement\",\n keyword: \"required\",\n params: {\n missingProperty: deploymentName,\n },\n });\n }\n\n if (infra && !infra.pricing?.[serviceDeployment?.profile]) {\n this.#errors.push({\n message: `The pricing for the \"${serviceDeployment?.profile}\" profile is not defined in the \"${deploymentName}\" placement.`,\n instancePath: `/profiles/placement/${deploymentName}/pricing`,\n schemaPath: \"#/properties/profiles/properties/placement/additionalProperties/properties/pricing\",\n keyword: \"required\",\n params: {\n missingProperty: serviceDeployment?.profile,\n },\n });\n }\n\n if (!compute) {\n this.#errors.push({\n message: `The compute requirements for the \"${serviceDeployment?.profile}\" profile are not defined in the \"compute\" section.`,\n instancePath: `/profiles/compute`,\n schemaPath: \"#/properties/profiles/properties/compute\",\n keyword: \"required\",\n params: {\n missingProperty: serviceDeployment?.profile,\n },\n });\n }\n }\n\n #validateServiceStorages(serviceName: string, deploymentName: string) {\n const service = this.#sdl.services?.[serviceName];\n const mounts: Record<string, string> = {};\n const serviceDeployment = this.#sdl.deployment[serviceName][deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment.profile];\n const storages = castArray(compute?.resources.storage);\n\n if (!service?.params?.storage) {\n return;\n }\n\n Object.entries(service.params.storage).forEach(([storageName, storage]) => {\n if (!storage) {\n this.#errors.push({\n message: `Storage \"${storageName}\" is not configured.`,\n instancePath: `/services/${serviceName}/params/storage/${storageName}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties\",\n keyword: \"required\",\n params: {\n missingProperty: storageName,\n },\n });\n return;\n }\n const storageNameExists = storages.some(({ name }) => name === storageName);\n if (!storageNameExists) {\n this.#errors.push({\n message: `Service \"${serviceName}\" references non-existing compute volume \"${storageName}\".`,\n instancePath: `/profiles/compute/${serviceDeployment.profile}/resources/storage`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/storage\",\n keyword: \"required\",\n params: {\n missingProperty: storageName,\n },\n });\n return;\n }\n\n const mount = String(storage.mount);\n const volumeName = mounts[mount];\n\n if (volumeName && !storage.mount) {\n this.#errors.push({\n message: \"Multiple root ephemeral storages are not allowed.\",\n instancePath: `/services/${serviceName}/params/storage/${storageName}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: volumeName,\n },\n });\n }\n if (volumeName && storage.mount) {\n this.#errors.push({\n message: `Mount \"${mount}\" already in use by volume \"${volumeName}\".`,\n instancePath: `/services/${serviceName}/params/storage/${storageName}/mount`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties/properties/mount\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: mount,\n },\n });\n }\n\n mounts[mount] = storageName;\n });\n }\n\n #validateStorages(serviceName: string, deploymentName: string) {\n const service = this.#sdl.services?.[serviceName];\n const serviceDeployment = this.#sdl.deployment[serviceName][deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment.profile];\n const storages = castArray(compute?.resources.storage);\n\n storages.forEach((storage) => {\n const persistent = stringToBoolean(storage.attributes?.persistent as string | boolean || false);\n\n if (persistent && !service?.params?.storage?.[storage.name || \"\"]?.mount) {\n this.#errors.push({\n message: `Persistent storage \"${storage.name || \"default\"}\" requires a mount path in /services/${serviceName}/params/storage/${storage.name || \"default\"}/mount.`,\n instancePath: `/services/${serviceName}/params/storage/${storage.name || \"default\"}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties/properties/mount\",\n keyword: \"required\",\n params: {\n missingProperty: \"mount\",\n },\n });\n }\n });\n }\n\n #validateGPU(serviceName: string, deploymentName: string) {\n const deployment = this.#sdl.deployment[serviceName];\n const compute = this.#sdl.profiles?.compute?.[deployment[deploymentName]?.profile];\n const gpu = compute?.resources.gpu;\n if (!gpu) return;\n\n const hasUnits = gpu.units !== undefined && gpu.units !== 0;\n const hasAttributes = typeof gpu.attributes !== \"undefined\";\n const hasVendor = hasAttributes && typeof gpu.attributes?.vendor !== \"undefined\";\n\n const profile = deployment[deploymentName]?.profile;\n const gpuPath = `/profiles/compute/${profile}/resources/gpu`;\n\n if (!hasUnits && hasAttributes) {\n this.#errors.push({\n message: \"GPU must not have attributes if units is 0.\",\n instancePath: `${gpuPath}/attributes`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu/properties/attributes\",\n keyword: \"additionalProperties\",\n params: {\n additionalProperty: \"attributes\",\n },\n });\n }\n if (hasUnits && !hasAttributes) {\n this.#errors.push({\n message: \"GPU must have attributes if units is not 0.\",\n instancePath: gpuPath,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu\",\n keyword: \"required\",\n params: {\n missingProperty: \"attributes\",\n },\n });\n }\n if (hasUnits && !hasVendor) {\n this.#errors.push({\n message: \"GPU must specify a vendor if units is not 0.\",\n instancePath: `${gpuPath}/attributes`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu/properties/attributes/properties/vendor\",\n keyword: \"required\",\n params: {\n missingProperty: \"vendor\",\n },\n });\n }\n }\n\n #validateLeaseIP(serviceName: string) {\n this.#sdl.services?.[serviceName]?.expose?.forEach((expose, exposeIndex) => {\n const proto = expose.proto?.toUpperCase() || \"TCP\";\n\n expose.to?.forEach((to, toIndex) => {\n if (to.ip?.length) {\n const toPath = `/services/${serviceName}/expose/${exposeIndex}/to/${toIndex}`;\n\n if (!to.global) {\n this.#errors.push({\n message: `If an IP is declared, the directive must be declared as global.`,\n instancePath: `${toPath}/global`,\n schemaPath: \"#/definitions/exposeToWithIpEnforcesGlobal/then/properties/global/const\",\n keyword: \"const\",\n params: {\n allowedValue: true,\n },\n });\n }\n if (!this.#sdl.endpoints?.[to.ip]) {\n this.#errors.push({\n message: `Unknown endpoint \"${to.ip}\" for service \"${serviceName}\". Add it to the \"endpoints\" section.`,\n instancePath: `/endpoints/${to.ip}`,\n schemaPath: \"#/properties/endpoints\",\n keyword: \"required\",\n params: {\n missingProperty: to.ip,\n },\n });\n }\n\n this.#endpointsUsed.add(to.ip);\n\n const externalPort = expose.as ?? expose.port;\n const portKey = `${to.ip}-${externalPort}-${proto}`;\n const otherServiceName = this.#portsUsed.get(portKey);\n\n if (this.#portsUsed.has(portKey)) {\n this.#errors.push({\n message: `IP endpoint \"${to.ip}\" port ${externalPort} protocol ${proto} already in use by service \"${otherServiceName}\".`,\n instancePath: `${toPath}/ip`,\n schemaPath: \"#/properties/services/additionalProperties/properties/expose/items/properties/to/items\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: portKey,\n },\n });\n }\n this.#portsUsed.set(portKey, serviceName);\n }\n });\n });\n }\n\n #validateEndpoints() {\n if (!this.#sdl.endpoints) return;\n\n Object.keys(this.#sdl.endpoints).forEach((endpoint) => {\n if (!this.#endpointsUsed.has(endpoint)) {\n this.#errors.push({\n message: `Endpoint \"${endpoint}\" declared but never used.`,\n instancePath: `/endpoints/${endpoint}`,\n schemaPath: \"#/properties/endpoints\",\n keyword: \"additionalProperties\",\n params: {\n additionalProperty: endpoint,\n },\n });\n }\n });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ErrorMessages, ValidationError, ValidationFunction } from \"../../utils/jsonSchemaValidation.ts\";\nimport { dirname, getErrorLocation, humanizeErrors } from \"../../utils/jsonSchemaValidation.ts\";\nimport { castArray, stringToBoolean } from \"../utils.ts\";\nimport { schema as validationSDLSchema, type SDLInput, validate as validateSDLInput } from \"./validateSDLInput.ts\";\n\nexport { validationSDLSchema };\nexport type { SDLInput };\n\nconst ERROR_MESSAGES: ErrorMessages = {\n \"#/definitions/storageRamClassMustNotBePersistent\"(error) {\n return `\"ram\" storage${getErrorLocation(dirname(error.instancePath))} cannot be persistent`;\n },\n \"#/definitions/exposeToWithIpEnforcesGlobal\"() {\n return `If an IP is declared, the directive must be declared as global.`;\n },\n};\n\nexport function validateSDL(sdl: SDLInput): undefined | ValidationError[] {\n validateSDLInput(sdl);\n const schemaErrors = humanizeErrors((validateSDLInput as ValidationFunction).errors, validationSDLSchema, ERROR_MESSAGES);\n if (schemaErrors.length) return schemaErrors;\n\n const validator = new SDLValidator(sdl);\n const errors = validator.validate();\n\n const allErrors = schemaErrors.concat(errors);\n return allErrors.length ? allErrors : undefined;\n}\n\nclass SDLValidator {\n readonly #endpointsUsed = new Set<string>();\n readonly #portsUsed = new Map<string, string>();\n readonly #sdl: SDLInput;\n readonly #errors: ValidationError[] = [];\n\n constructor(sdl: SDLInput) {\n this.#sdl = sdl;\n }\n\n validate() {\n if (this.#sdl.services) {\n Object.keys(this.#sdl.services).forEach((serviceName) => {\n this.#validateDeploymentWithRelations(serviceName);\n this.#validateLeaseIP(serviceName);\n });\n }\n\n this.#validateEndpoints();\n return this.#errors;\n }\n\n #validateDeploymentWithRelations(serviceName: string) {\n const deployment = this.#sdl.deployment[serviceName];\n if (!deployment) {\n this.#errors.push({\n message: `Service \"${serviceName}\" is not defined at \"/deployment\" section.`,\n instancePath: `/deployment`,\n schemaPath: \"#/properties/deployment\",\n keyword: \"required\",\n params: {\n missingProperty: serviceName,\n },\n });\n return;\n }\n\n Object.keys(this.#sdl.deployment[serviceName]).forEach((deploymentName) => {\n this.#validateDeploymentRelations(serviceName, deploymentName);\n this.#validateServiceStorages(serviceName, deploymentName);\n this.#validateStorages(serviceName, deploymentName);\n this.#validateGPU(serviceName, deploymentName);\n });\n }\n\n #validateDeploymentRelations(serviceName: string, deploymentName: string) {\n const serviceDeployment = this.#sdl.deployment?.[serviceName]?.[deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment?.profile];\n const infra = this.#sdl.profiles?.placement?.[deploymentName];\n\n if (!infra) {\n this.#errors.push({\n message: `The placement \"${deploymentName}\" is not defined in the \"placement\" section.`,\n instancePath: `/profiles/placement`,\n schemaPath: \"#/properties/profiles/properties/placement\",\n keyword: \"required\",\n params: {\n missingProperty: deploymentName,\n },\n });\n }\n\n if (infra && !infra.pricing?.[serviceDeployment?.profile]) {\n this.#errors.push({\n message: `The pricing for the \"${serviceDeployment?.profile}\" profile is not defined in the \"${deploymentName}\" placement.`,\n instancePath: `/profiles/placement/${deploymentName}/pricing`,\n schemaPath: \"#/properties/profiles/properties/placement/additionalProperties/properties/pricing\",\n keyword: \"required\",\n params: {\n missingProperty: serviceDeployment?.profile,\n },\n });\n }\n\n if (!compute) {\n this.#errors.push({\n message: `The compute requirements for the \"${serviceDeployment?.profile}\" profile are not defined in the \"compute\" section.`,\n instancePath: `/profiles/compute`,\n schemaPath: \"#/properties/profiles/properties/compute\",\n keyword: \"required\",\n params: {\n missingProperty: serviceDeployment?.profile,\n },\n });\n }\n }\n\n #validateServiceStorages(serviceName: string, deploymentName: string) {\n const service = this.#sdl.services?.[serviceName];\n const mounts: Record<string, string> = {};\n const serviceDeployment = this.#sdl.deployment[serviceName][deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment.profile];\n const storages = castArray(compute?.resources.storage);\n\n if (!service?.params?.storage) {\n return;\n }\n\n Object.entries(service.params.storage).forEach(([storageName, storage]) => {\n if (!storage) {\n this.#errors.push({\n message: `Storage \"${storageName}\" is not configured.`,\n instancePath: `/services/${serviceName}/params/storage/${storageName}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties\",\n keyword: \"required\",\n params: {\n missingProperty: storageName,\n },\n });\n return;\n }\n const storageNameExists = storages.some(({ name }) => name === storageName);\n if (!storageNameExists) {\n this.#errors.push({\n message: `Service \"${serviceName}\" references non-existing compute volume \"${storageName}\".`,\n instancePath: `/profiles/compute/${serviceDeployment.profile}/resources/storage`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/storage\",\n keyword: \"required\",\n params: {\n missingProperty: storageName,\n },\n });\n return;\n }\n\n const mount = String(storage.mount);\n const volumeName = mounts[mount];\n\n if (volumeName && !storage.mount) {\n this.#errors.push({\n message: \"Multiple root ephemeral storages are not allowed.\",\n instancePath: `/services/${serviceName}/params/storage/${storageName}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: volumeName,\n },\n });\n }\n if (volumeName && storage.mount) {\n this.#errors.push({\n message: `Mount \"${mount}\" already in use by volume \"${volumeName}\".`,\n instancePath: `/services/${serviceName}/params/storage/${storageName}/mount`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties/properties/mount\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: mount,\n },\n });\n }\n\n mounts[mount] = storageName;\n });\n }\n\n #validateStorages(serviceName: string, deploymentName: string) {\n const service = this.#sdl.services?.[serviceName];\n const serviceDeployment = this.#sdl.deployment[serviceName][deploymentName];\n const compute = this.#sdl.profiles?.compute?.[serviceDeployment.profile];\n const storages = castArray(compute?.resources.storage);\n\n storages.forEach((storage) => {\n const persistent = stringToBoolean(storage.attributes?.persistent as string | boolean || false);\n\n if (persistent && !service?.params?.storage?.[storage.name || \"\"]?.mount) {\n this.#errors.push({\n message: `Persistent storage \"${storage.name || \"default\"}\" requires a mount path in /services/${serviceName}/params/storage/${storage.name || \"default\"}/mount.`,\n instancePath: `/services/${serviceName}/params/storage/${storage.name || \"default\"}`,\n schemaPath: \"#/properties/services/additionalProperties/properties/params/properties/storage/additionalProperties/properties/mount\",\n keyword: \"required\",\n params: {\n missingProperty: \"mount\",\n },\n });\n }\n });\n }\n\n #validateGPU(serviceName: string, deploymentName: string) {\n const deployment = this.#sdl.deployment[serviceName];\n const compute = this.#sdl.profiles?.compute?.[deployment[deploymentName]?.profile];\n const gpu = compute?.resources.gpu;\n if (!gpu) return;\n\n const hasUnits = gpu.units !== undefined && gpu.units !== 0;\n const hasAttributes = typeof gpu.attributes !== \"undefined\";\n const hasVendor = hasAttributes && typeof gpu.attributes?.vendor !== \"undefined\";\n\n const profile = deployment[deploymentName]?.profile;\n const gpuPath = `/profiles/compute/${profile}/resources/gpu`;\n\n if (!hasUnits && hasAttributes) {\n this.#errors.push({\n message: \"GPU must not have attributes if units is 0.\",\n instancePath: `${gpuPath}/attributes`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu/properties/attributes\",\n keyword: \"additionalProperties\",\n params: {\n additionalProperty: \"attributes\",\n },\n });\n }\n if (hasUnits && !hasAttributes) {\n this.#errors.push({\n message: \"GPU must have attributes if units is not 0.\",\n instancePath: gpuPath,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu\",\n keyword: \"required\",\n params: {\n missingProperty: \"attributes\",\n },\n });\n }\n if (hasUnits && !hasVendor) {\n this.#errors.push({\n message: \"GPU must specify a vendor if units is not 0.\",\n instancePath: `${gpuPath}/attributes`,\n schemaPath: \"#/properties/profiles/properties/compute/additionalProperties/properties/resources/properties/gpu/properties/attributes/properties/vendor\",\n keyword: \"required\",\n params: {\n missingProperty: \"vendor\",\n },\n });\n }\n }\n\n #validateLeaseIP(serviceName: string) {\n this.#sdl.services?.[serviceName]?.expose?.forEach((expose, exposeIndex) => {\n const proto = expose.proto?.toUpperCase() || \"TCP\";\n\n expose.to?.forEach((to, toIndex) => {\n if (to.ip?.length) {\n const toPath = `/services/${serviceName}/expose/${exposeIndex}/to/${toIndex}`;\n\n if (!to.global) {\n this.#errors.push({\n message: `If an IP is declared, the directive must be declared as global.`,\n instancePath: `${toPath}/global`,\n schemaPath: \"#/definitions/exposeToWithIpEnforcesGlobal/then/properties/global/const\",\n keyword: \"const\",\n params: {\n allowedValue: true,\n },\n });\n }\n if (!this.#sdl.endpoints?.[to.ip]) {\n this.#errors.push({\n message: `Unknown endpoint \"${to.ip}\" for service \"${serviceName}\". Add it to the \"endpoints\" section.`,\n instancePath: `/endpoints/${to.ip}`,\n schemaPath: \"#/properties/endpoints\",\n keyword: \"required\",\n params: {\n missingProperty: to.ip,\n },\n });\n }\n\n this.#endpointsUsed.add(to.ip);\n\n const externalPort = expose.as ?? expose.port;\n const portKey = `${to.ip}-${externalPort}-${proto}`;\n const otherServiceName = this.#portsUsed.get(portKey);\n\n if (this.#portsUsed.has(portKey)) {\n this.#errors.push({\n message: `IP endpoint \"${to.ip}\" port ${externalPort} protocol ${proto} already in use by service \"${otherServiceName}\".`,\n instancePath: `${toPath}/ip`,\n schemaPath: \"#/properties/services/additionalProperties/properties/expose/items/properties/to/items\",\n keyword: \"uniqueItems\",\n params: {\n duplicate: portKey,\n },\n });\n }\n this.#portsUsed.set(portKey, serviceName);\n }\n });\n });\n }\n\n #validateEndpoints() {\n if (!this.#sdl.endpoints) return;\n\n Object.keys(this.#sdl.endpoints).forEach((endpoint) => {\n if (!this.#endpointsUsed.has(endpoint)) {\n this.#errors.push({\n message: `Endpoint \"${endpoint}\" declared but never used.`,\n instancePath: `/endpoints/${endpoint}`,\n schemaPath: \"#/properties/endpoints\",\n keyword: \"additionalProperties\",\n params: {\n additionalProperty: endpoint,\n },\n });\n }\n });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["validationSDLSchema", "validateSDLInput", "validationSDLSchema"]
7
7
  }