@kadi.build/deploy-ability 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +523 -0
  2. package/dist/constants.d.ts +82 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +82 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/errors/certificate-error.d.ts +95 -0
  7. package/dist/errors/certificate-error.d.ts.map +1 -0
  8. package/dist/errors/certificate-error.js +111 -0
  9. package/dist/errors/certificate-error.js.map +1 -0
  10. package/dist/errors/deployment-error.d.ts +122 -0
  11. package/dist/errors/deployment-error.d.ts.map +1 -0
  12. package/dist/errors/deployment-error.js +185 -0
  13. package/dist/errors/deployment-error.js.map +1 -0
  14. package/dist/errors/index.d.ts +13 -0
  15. package/dist/errors/index.d.ts.map +1 -0
  16. package/dist/errors/index.js +18 -0
  17. package/dist/errors/index.js.map +1 -0
  18. package/dist/errors/profile-error.d.ts +106 -0
  19. package/dist/errors/profile-error.d.ts.map +1 -0
  20. package/dist/errors/profile-error.js +127 -0
  21. package/dist/errors/profile-error.js.map +1 -0
  22. package/dist/errors/provider-error.d.ts +104 -0
  23. package/dist/errors/provider-error.d.ts.map +1 -0
  24. package/dist/errors/provider-error.js +120 -0
  25. package/dist/errors/provider-error.js.map +1 -0
  26. package/dist/errors/wallet-error.d.ts +131 -0
  27. package/dist/errors/wallet-error.d.ts.map +1 -0
  28. package/dist/errors/wallet-error.js +154 -0
  29. package/dist/errors/wallet-error.js.map +1 -0
  30. package/dist/index.d.ts +49 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +53 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/targets/akash/bid-selectors.d.ts +251 -0
  35. package/dist/targets/akash/bid-selectors.d.ts.map +1 -0
  36. package/dist/targets/akash/bid-selectors.js +322 -0
  37. package/dist/targets/akash/bid-selectors.js.map +1 -0
  38. package/dist/targets/akash/bid-types.d.ts +297 -0
  39. package/dist/targets/akash/bid-types.d.ts.map +1 -0
  40. package/dist/targets/akash/bid-types.js +89 -0
  41. package/dist/targets/akash/bid-types.js.map +1 -0
  42. package/dist/targets/akash/blockchain-client.d.ts +577 -0
  43. package/dist/targets/akash/blockchain-client.d.ts.map +1 -0
  44. package/dist/targets/akash/blockchain-client.js +803 -0
  45. package/dist/targets/akash/blockchain-client.js.map +1 -0
  46. package/dist/targets/akash/certificate-manager.d.ts +228 -0
  47. package/dist/targets/akash/certificate-manager.d.ts.map +1 -0
  48. package/dist/targets/akash/certificate-manager.js +395 -0
  49. package/dist/targets/akash/certificate-manager.js.map +1 -0
  50. package/dist/targets/akash/constants.d.ts +231 -0
  51. package/dist/targets/akash/constants.d.ts.map +1 -0
  52. package/dist/targets/akash/constants.js +225 -0
  53. package/dist/targets/akash/constants.js.map +1 -0
  54. package/dist/targets/akash/deployer.d.ts +136 -0
  55. package/dist/targets/akash/deployer.d.ts.map +1 -0
  56. package/dist/targets/akash/deployer.js +599 -0
  57. package/dist/targets/akash/deployer.js.map +1 -0
  58. package/dist/targets/akash/environment.d.ts +241 -0
  59. package/dist/targets/akash/environment.d.ts.map +1 -0
  60. package/dist/targets/akash/environment.js +245 -0
  61. package/dist/targets/akash/environment.js.map +1 -0
  62. package/dist/targets/akash/index.d.ts +1113 -0
  63. package/dist/targets/akash/index.d.ts.map +1 -0
  64. package/dist/targets/akash/index.js +909 -0
  65. package/dist/targets/akash/index.js.map +1 -0
  66. package/dist/targets/akash/lease-monitor.d.ts +51 -0
  67. package/dist/targets/akash/lease-monitor.d.ts.map +1 -0
  68. package/dist/targets/akash/lease-monitor.js +110 -0
  69. package/dist/targets/akash/lease-monitor.js.map +1 -0
  70. package/dist/targets/akash/logs.d.ts +71 -0
  71. package/dist/targets/akash/logs.d.ts.map +1 -0
  72. package/dist/targets/akash/logs.js +311 -0
  73. package/dist/targets/akash/logs.js.map +1 -0
  74. package/dist/targets/akash/logs.types.d.ts +102 -0
  75. package/dist/targets/akash/logs.types.d.ts.map +1 -0
  76. package/dist/targets/akash/logs.types.js +9 -0
  77. package/dist/targets/akash/logs.types.js.map +1 -0
  78. package/dist/targets/akash/pricing.d.ts +247 -0
  79. package/dist/targets/akash/pricing.d.ts.map +1 -0
  80. package/dist/targets/akash/pricing.js +246 -0
  81. package/dist/targets/akash/pricing.js.map +1 -0
  82. package/dist/targets/akash/provider-client.d.ts +114 -0
  83. package/dist/targets/akash/provider-client.d.ts.map +1 -0
  84. package/dist/targets/akash/provider-client.js +318 -0
  85. package/dist/targets/akash/provider-client.js.map +1 -0
  86. package/dist/targets/akash/provider-metadata.d.ts +228 -0
  87. package/dist/targets/akash/provider-metadata.d.ts.map +1 -0
  88. package/dist/targets/akash/provider-metadata.js +14 -0
  89. package/dist/targets/akash/provider-metadata.js.map +1 -0
  90. package/dist/targets/akash/provider-service.d.ts +133 -0
  91. package/dist/targets/akash/provider-service.d.ts.map +1 -0
  92. package/dist/targets/akash/provider-service.js +391 -0
  93. package/dist/targets/akash/provider-service.js.map +1 -0
  94. package/dist/targets/akash/query-client.d.ts +125 -0
  95. package/dist/targets/akash/query-client.d.ts.map +1 -0
  96. package/dist/targets/akash/query-client.js +332 -0
  97. package/dist/targets/akash/query-client.js.map +1 -0
  98. package/dist/targets/akash/sdl-generator.d.ts +31 -0
  99. package/dist/targets/akash/sdl-generator.d.ts.map +1 -0
  100. package/dist/targets/akash/sdl-generator.js +279 -0
  101. package/dist/targets/akash/sdl-generator.js.map +1 -0
  102. package/dist/targets/akash/types.d.ts +285 -0
  103. package/dist/targets/akash/types.d.ts.map +1 -0
  104. package/dist/targets/akash/types.js +54 -0
  105. package/dist/targets/akash/types.js.map +1 -0
  106. package/dist/targets/akash/wallet-manager.d.ts +526 -0
  107. package/dist/targets/akash/wallet-manager.d.ts.map +1 -0
  108. package/dist/targets/akash/wallet-manager.js +953 -0
  109. package/dist/targets/akash/wallet-manager.js.map +1 -0
  110. package/dist/targets/local/compose-generator.d.ts +244 -0
  111. package/dist/targets/local/compose-generator.d.ts.map +1 -0
  112. package/dist/targets/local/compose-generator.js +324 -0
  113. package/dist/targets/local/compose-generator.js.map +1 -0
  114. package/dist/targets/local/deployer.d.ts +82 -0
  115. package/dist/targets/local/deployer.d.ts.map +1 -0
  116. package/dist/targets/local/deployer.js +367 -0
  117. package/dist/targets/local/deployer.js.map +1 -0
  118. package/dist/targets/local/engine-manager.d.ts +155 -0
  119. package/dist/targets/local/engine-manager.d.ts.map +1 -0
  120. package/dist/targets/local/engine-manager.js +250 -0
  121. package/dist/targets/local/engine-manager.js.map +1 -0
  122. package/dist/targets/local/index.d.ts +40 -0
  123. package/dist/targets/local/index.d.ts.map +1 -0
  124. package/dist/targets/local/index.js +43 -0
  125. package/dist/targets/local/index.js.map +1 -0
  126. package/dist/targets/local/network-manager.d.ts +160 -0
  127. package/dist/targets/local/network-manager.d.ts.map +1 -0
  128. package/dist/targets/local/network-manager.js +337 -0
  129. package/dist/targets/local/network-manager.js.map +1 -0
  130. package/dist/targets/local/types.d.ts +327 -0
  131. package/dist/targets/local/types.d.ts.map +1 -0
  132. package/dist/targets/local/types.js +9 -0
  133. package/dist/targets/local/types.js.map +1 -0
  134. package/dist/types/common.d.ts +585 -0
  135. package/dist/types/common.d.ts.map +1 -0
  136. package/dist/types/common.js +13 -0
  137. package/dist/types/common.js.map +1 -0
  138. package/dist/types/index.d.ts +15 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +12 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/options.d.ts +329 -0
  143. package/dist/types/options.d.ts.map +1 -0
  144. package/dist/types/options.js +10 -0
  145. package/dist/types/options.js.map +1 -0
  146. package/dist/types/profiles.d.ts +329 -0
  147. package/dist/types/profiles.d.ts.map +1 -0
  148. package/dist/types/profiles.js +27 -0
  149. package/dist/types/profiles.js.map +1 -0
  150. package/dist/types/results.d.ts +443 -0
  151. package/dist/types/results.d.ts.map +1 -0
  152. package/dist/types/results.js +64 -0
  153. package/dist/types/results.js.map +1 -0
  154. package/dist/types/validators.d.ts +118 -0
  155. package/dist/types/validators.d.ts.map +1 -0
  156. package/dist/types/validators.js +198 -0
  157. package/dist/types/validators.js.map +1 -0
  158. package/dist/utils/command-runner.d.ts +128 -0
  159. package/dist/utils/command-runner.d.ts.map +1 -0
  160. package/dist/utils/command-runner.js +210 -0
  161. package/dist/utils/command-runner.js.map +1 -0
  162. package/dist/utils/index.d.ts +10 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +10 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/logger.d.ts +68 -0
  167. package/dist/utils/logger.d.ts.map +1 -0
  168. package/dist/utils/logger.js +93 -0
  169. package/dist/utils/logger.js.map +1 -0
  170. package/dist/utils/profile-loader.d.ts +76 -0
  171. package/dist/utils/profile-loader.d.ts.map +1 -0
  172. package/dist/utils/profile-loader.js +194 -0
  173. package/dist/utils/profile-loader.js.map +1 -0
  174. package/dist/utils/registry/index.d.ts +27 -0
  175. package/dist/utils/registry/index.d.ts.map +1 -0
  176. package/dist/utils/registry/index.js +29 -0
  177. package/dist/utils/registry/index.js.map +1 -0
  178. package/dist/utils/registry/manager.d.ts +319 -0
  179. package/dist/utils/registry/manager.d.ts.map +1 -0
  180. package/dist/utils/registry/manager.js +671 -0
  181. package/dist/utils/registry/manager.js.map +1 -0
  182. package/dist/utils/registry/setup.d.ts +135 -0
  183. package/dist/utils/registry/setup.d.ts.map +1 -0
  184. package/dist/utils/registry/setup.js +207 -0
  185. package/dist/utils/registry/setup.js.map +1 -0
  186. package/dist/utils/registry/transformer.d.ts +92 -0
  187. package/dist/utils/registry/transformer.d.ts.map +1 -0
  188. package/dist/utils/registry/transformer.js +131 -0
  189. package/dist/utils/registry/transformer.js.map +1 -0
  190. package/dist/utils/registry/types.d.ts +241 -0
  191. package/dist/utils/registry/types.d.ts.map +1 -0
  192. package/dist/utils/registry/types.js +10 -0
  193. package/dist/utils/registry/types.js.map +1 -0
  194. package/docs/EXAMPLES.md +293 -0
  195. package/docs/PLACEMENT.md +433 -0
  196. package/docs/STORAGE.md +318 -0
  197. package/docs/building-provider-reliability-tracker.md +2581 -0
  198. package/package.json +109 -0
@@ -0,0 +1,433 @@
1
+ ## Understanding Placement Attributes
2
+
3
+ When deploying to Akash Network, you might want to control **where** your deployment runs geographically. Placement attributes let you specify provider requirements like region, facility type, timezone, and more.
4
+
5
+ ### Why Use Placement Attributes?
6
+
7
+ **Common Use Cases:**
8
+
9
+ | Use Case | Example | Placement Attributes |
10
+ |----------|---------|---------------------|
11
+ | **Data Residency** | EU data must stay in EU | `country: "DE"` (Germany) |
12
+ | **Latency Optimization** | Serve US West Coast users | `location-region: "na-us-west"` |
13
+ | **Infrastructure Quality** | Production workloads | `location-type: "datacenter"` |
14
+ | **Cost Optimization** | Testing/development | `location-type: "home"` (cheaper) |
15
+ | **Compliance** | GDPR, data sovereignty | `country: "US"`, `location-region: "eu-west"` |
16
+
17
+ ### Available Placement Attributes
18
+
19
+ #### Geographic Region (`location-region`)
20
+
21
+ **Based on UN Geoscheme** - Controls which geographic area your deployment runs in.
22
+
23
+ **Common Regions:**
24
+
25
+ | Region | Coverage | Use For |
26
+ |--------|----------|---------|
27
+ | `na-us-west` | US West Coast (CA, OR, WA, etc.) | Low latency to West Coast users |
28
+ | `na-us-east` | US East Coast (NY, MA, VA, etc.) | Low latency to East Coast users |
29
+ | `eu-west` | Western Europe (FR, UK, NL, etc.) | GDPR compliance, EU users |
30
+ | `eu-central` | Central Europe (DE, AT, CH, etc.) | Central EU data residency |
31
+ | `as-east` | Eastern Asia (CN, JP, KR, etc.) | Asian market |
32
+ | `as-southeast` | Southeast Asia (SG, TH, VN, etc.) | Southeast Asian users |
33
+
34
+ **Total: 48 regions available** - See `AKASH_REGIONS` constant for complete list.
35
+
36
+ #### Location Type (`location-type`)
37
+
38
+ **Defines the facility infrastructure quality** - Critical for production vs development.
39
+
40
+ | Type | Infrastructure | Reliability | Cost | Use For |
41
+ |------|---------------|-------------|------|---------|
42
+ | `datacenter` | Professional datacenter | Enterprise-grade | Higher | Production workloads |
43
+ | `colo` | Co-location facility | High | Moderate | Production, cost-conscious |
44
+ | `server-room` | Dedicated server room | Good | Moderate | Development, staging |
45
+ | `office` | Office-based server | Variable | Lower | Testing |
46
+ | `home` | Home-based server | Variable | Lowest | Development only |
47
+ | `mix` | Mixed infrastructure | Variable | Variable | Flexible requirements |
48
+
49
+ **Recommendation:** Use `datacenter` for production, `colo` for balanced cost/performance.
50
+
51
+ #### Timezone (`timezone`)
52
+
53
+ **UTC offset where provider is located** - Useful for business hours alignment or specific geographic targeting.
54
+
55
+ **Examples:**
56
+
57
+ | Timezone | Location | Example Cities |
58
+ |----------|----------|----------------|
59
+ | `utc-8` | US Pacific | San Francisco, Seattle, Los Angeles |
60
+ | `utc-5` | US Eastern | New York, Miami, Toronto |
61
+ | `utc+0` | GMT | London, Dublin, Lisbon |
62
+ | `utc+1` | Central Europe | Paris, Berlin, Rome |
63
+ | `utc+8` | China/Singapore | Beijing, Singapore, Hong Kong |
64
+ | `utc+9` | Japan/Korea | Tokyo, Seoul |
65
+
66
+ **Total: 27 timezones available** from `utc-12` to `utc+14`.
67
+
68
+ #### Country (`country`)
69
+
70
+ **ISO 3166 Alpha-2 country code** - Most specific geographic constraint for strict data residency.
71
+
72
+ **Examples:** `US`, `DE`, `JP`, `GB`, `FR`, `CA`, `AU`, `SG`
73
+
74
+ **Use for:** Strict compliance requirements (GDPR, data sovereignty laws).
75
+
76
+ #### City (`city`)
77
+
78
+ **City name** - Ultra-specific location targeting.
79
+
80
+ **Examples:** `San Francisco`, `London`, `Tokyo`, `Berlin`
81
+
82
+ **Use for:** Ultra-low latency to specific cities or very specific data residency needs.
83
+
84
+ ### Configuration Examples
85
+
86
+ #### Example 1: US West Coast Production Deployment
87
+
88
+ ```json
89
+ {
90
+ "deploy": {
91
+ "production-us-west": {
92
+ "target": "akash",
93
+ "network": "mainnet",
94
+ "placement": {
95
+ "location-region": "na-us-west",
96
+ "location-type": "datacenter"
97
+ },
98
+ "services": {
99
+ "api": {
100
+ "image": "my-api:latest",
101
+ "resources": { ... }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ ```
108
+
109
+ **Why:** Professional datacenter on US West Coast for low latency to California/Oregon/Washington users.
110
+
111
+ ---
112
+
113
+ #### Example 2: EU Data Residency (GDPR Compliance)
114
+
115
+ ```json
116
+ {
117
+ "deploy": {
118
+ "production-eu": {
119
+ "target": "akash",
120
+ "network": "mainnet",
121
+ "placement": {
122
+ "location-region": "eu-west",
123
+ "location-type": "datacenter",
124
+ "country": "DE"
125
+ },
126
+ "services": {
127
+ "api": {
128
+ "image": "my-api:latest",
129
+ "resources": { ... }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ **Why:** Ensures deployment stays in Germany (strict GDPR compliance) in professional datacenter.
138
+
139
+ ---
140
+
141
+ #### Example 3: Cost-Optimized Development
142
+
143
+ ```json
144
+ {
145
+ "deploy": {
146
+ "dev-cheap": {
147
+ "target": "akash",
148
+ "network": "testnet",
149
+ "placement": {
150
+ "location-type": "home"
151
+ },
152
+ "services": {
153
+ "api": {
154
+ "image": "my-api:dev",
155
+ "resources": { ... }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ ```
162
+
163
+ **Why:** Home-based providers are cheaper - perfect for development/testing where uptime isn't critical.
164
+
165
+ ---
166
+
167
+ #### Example 4: Multi-Region Setup
168
+
169
+ ```json
170
+ {
171
+ "deploy": {
172
+ "us-west": {
173
+ "target": "akash",
174
+ "network": "mainnet",
175
+ "placement": {
176
+ "location-region": "na-us-west",
177
+ "location-type": "datacenter"
178
+ },
179
+ "services": { ... }
180
+ },
181
+ "eu-central": {
182
+ "target": "akash",
183
+ "network": "mainnet",
184
+ "placement": {
185
+ "location-region": "eu-central",
186
+ "location-type": "datacenter"
187
+ },
188
+ "services": { ... }
189
+ },
190
+ "asia-east": {
191
+ "target": "akash",
192
+ "network": "mainnet",
193
+ "placement": {
194
+ "location-region": "as-east",
195
+ "location-type": "datacenter"
196
+ },
197
+ "services": { ... }
198
+ }
199
+ }
200
+ }
201
+ ```
202
+
203
+ **Why:** Deploy same application to three regions for global coverage - users connect to nearest region.
204
+
205
+ ---
206
+
207
+ #### Example 5: Timezone-Based Deployment
208
+
209
+ ```json
210
+ {
211
+ "deploy": {
212
+ "business-hours-us": {
213
+ "target": "akash",
214
+ "network": "mainnet",
215
+ "placement": {
216
+ "timezone": "utc-5",
217
+ "location-type": "datacenter"
218
+ },
219
+ "services": { ... }
220
+ }
221
+ }
222
+ }
223
+ ```
224
+
225
+ **Why:** Provider operates during US Eastern business hours - useful for support SLAs.
226
+
227
+ ### How Placement Works
228
+
229
+ When you specify placement attributes, Akash providers advertise their attributes on-chain. Your deployment includes these requirements in the SDL, and **only providers matching ALL specified attributes** will bid on your deployment.
230
+
231
+ **Matching Logic:**
232
+ - If you specify `location-region: "na-us-west"` → Only providers in US West bid
233
+ - If you add `location-type: "datacenter"` → Only US West datacenters bid
234
+ - If you add `country: "US"` → Only US West datacenters in the US bid
235
+
236
+ **Think of it as filtering** - each attribute narrows down the provider pool.
237
+
238
+ ### Common Mistakes
239
+
240
+ **Over-constraining**
241
+ ```json
242
+ {
243
+ "placement": {
244
+ "location-region": "na-us-west",
245
+ "location-type": "datacenter",
246
+ "country": "US",
247
+ "city": "San Francisco",
248
+ "timezone": "utc-8"
249
+ }
250
+ }
251
+ ```
252
+
253
+ **Problem:** Too specific - you might get zero bids!
254
+
255
+ **Start broad, narrow as needed**
256
+ ```json
257
+ {
258
+ "placement": {
259
+ "location-region": "na-us-west",
260
+ "location-type": "datacenter"
261
+ }
262
+ }
263
+ ```
264
+
265
+ **Why:** Good balance - ensures West Coast datacenter without being too restrictive.
266
+
267
+ ---
268
+
269
+ **Conflicting constraints**
270
+ ```json
271
+ {
272
+ "placement": {
273
+ "location-region": "eu-west", // Europe
274
+ "country": "US" // United States
275
+ }
276
+ }
277
+ ```
278
+
279
+ **Problem:** No provider can be in both Europe and US! Zero bids.
280
+
281
+ **Consistent constraints**
282
+ ```json
283
+ {
284
+ "placement": {
285
+ "location-region": "eu-west",
286
+ "country": "GB" // UK is in eu-west
287
+ }
288
+ }
289
+ ```
290
+
291
+ ---
292
+
293
+ **Using wrong country code format**
294
+ ```json
295
+ {
296
+ "placement": {
297
+ "country": "USA" // Wrong - should be 2-letter code
298
+ }
299
+ }
300
+ ```
301
+
302
+ **ISO 3166 Alpha-2**
303
+ ```json
304
+ {
305
+ "placement": {
306
+ "country": "US" // Correct - 2 letters
307
+ }
308
+ }
309
+ ```
310
+
311
+ ### Validation & Error Messages
312
+
313
+ deploy-ability validates placement attributes with **helpful error messages**:
314
+
315
+ **Invalid Region:**
316
+ ```
317
+ Invalid region "us-west". Valid regions include: na-us-west, na-us-east, eu-west,
318
+ eu-central, as-east... (48 total regions available). See AKASH_REGIONS constant for full list.
319
+ ```
320
+
321
+ **Invalid Location Type:**
322
+ ```
323
+ Invalid location type "data-center". Valid types: datacenter, colo, home, office, server-room, mix
324
+ ```
325
+
326
+ **Invalid Country Code:**
327
+ ```
328
+ Country code must be exactly 2 characters (ISO 3166 Alpha-2 format, e.g., "US", "DE", "JP")
329
+ ```
330
+
331
+ **Unknown Attribute:**
332
+ ```
333
+ Unknown placement attribute. Valid attributes: location-region, location-type, timezone, country, city
334
+ ```
335
+
336
+ ### TypeScript Support
337
+
338
+ Full TypeScript support with autocomplete and validation:
339
+
340
+ ```typescript
341
+ import type { AkashPlacementAttributes } from 'deploy-ability';
342
+
343
+ const placement: AkashPlacementAttributes = {
344
+ 'location-region': 'na-us-west', // Autocomplete with all 48 regions
345
+ 'location-type': 'datacenter', // Autocomplete with all 6 types
346
+ timezone: 'utc-8', // Autocomplete with all 27 timezones
347
+ country: 'US', // String, but validated at runtime
348
+ city: 'San Francisco' // Optional, free-form string
349
+ };
350
+ ```
351
+
352
+ **Constants Available:**
353
+ ```typescript
354
+ import {
355
+ AKASH_REGIONS,
356
+ AKASH_LOCATION_TYPES,
357
+ AKASH_TIMEZONES,
358
+ getAkashRegions,
359
+ getAkashLocationTypes,
360
+ getAkashTimezones
361
+ } from 'deploy-ability';
362
+
363
+ // Get all regions as array
364
+ const allRegions = getAkashRegions();
365
+ console.log(allRegions.length); // 48
366
+
367
+ // Get region description
368
+ console.log(AKASH_REGIONS['na-us-west']);
369
+ // "North America - US West (CA, OR, WA, ID, MT, WY, UT, CO, NV, AK, HI)"
370
+ ```
371
+
372
+ ### Advanced: Combining with Other Attributes
373
+
374
+ Placement attributes work alongside other provider requirements:
375
+
376
+ ```json
377
+ {
378
+ "deploy": {
379
+ "gpu-production": {
380
+ "target": "akash",
381
+ "network": "mainnet",
382
+ "placement": {
383
+ "location-region": "na-us-west",
384
+ "location-type": "datacenter"
385
+ },
386
+ "attributes": {
387
+ "gpu": "nvidia"
388
+ },
389
+ "signedBy": {
390
+ "allOf": ["akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"]
391
+ },
392
+ "services": {
393
+ "ml-inference": {
394
+ "image": "my-llm:latest",
395
+ "resources": {
396
+ "cpu": 4,
397
+ "memory": "16Gi",
398
+ "ephemeralStorage": "10Gi",
399
+ "gpu": {
400
+ "units": 1,
401
+ "attributes": {
402
+ "vendor": {
403
+ "nvidia": [{ "model": "rtx4090" }]
404
+ }
405
+ }
406
+ }
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
412
+ }
413
+ ```
414
+
415
+ **Result:** Only US West datacenters with NVIDIA RTX 4090 GPUs, certified by Akash auditor.
416
+
417
+ ### Quick Decision Guide
418
+
419
+ **Use this flowchart to decide which placement attributes you need:**
420
+
421
+ ```
422
+ Does location matter?
423
+ ├─ No → Omit placement (cheapest, fastest bids)
424
+ ├─ Yes → What's most important?
425
+ ├─ Data residency/compliance → Set `country` + `location-type: datacenter`
426
+ ├─ Low latency to users → Set `location-region` close to users
427
+ ├─ Infrastructure quality → Set `location-type: datacenter` or `colo`
428
+ ├─ Cost optimization → Set `location-type: home` (dev only!)
429
+ └─ Multiple requirements → Combine attributes (but don't over-constrain!)
430
+ ```
431
+
432
+ ---
433
+