@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.
- package/README.md +523 -0
- package/dist/constants.d.ts +82 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +82 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors/certificate-error.d.ts +95 -0
- package/dist/errors/certificate-error.d.ts.map +1 -0
- package/dist/errors/certificate-error.js +111 -0
- package/dist/errors/certificate-error.js.map +1 -0
- package/dist/errors/deployment-error.d.ts +122 -0
- package/dist/errors/deployment-error.d.ts.map +1 -0
- package/dist/errors/deployment-error.js +185 -0
- package/dist/errors/deployment-error.js.map +1 -0
- package/dist/errors/index.d.ts +13 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/profile-error.d.ts +106 -0
- package/dist/errors/profile-error.d.ts.map +1 -0
- package/dist/errors/profile-error.js +127 -0
- package/dist/errors/profile-error.js.map +1 -0
- package/dist/errors/provider-error.d.ts +104 -0
- package/dist/errors/provider-error.d.ts.map +1 -0
- package/dist/errors/provider-error.js +120 -0
- package/dist/errors/provider-error.js.map +1 -0
- package/dist/errors/wallet-error.d.ts +131 -0
- package/dist/errors/wallet-error.d.ts.map +1 -0
- package/dist/errors/wallet-error.js +154 -0
- package/dist/errors/wallet-error.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/targets/akash/bid-selectors.d.ts +251 -0
- package/dist/targets/akash/bid-selectors.d.ts.map +1 -0
- package/dist/targets/akash/bid-selectors.js +322 -0
- package/dist/targets/akash/bid-selectors.js.map +1 -0
- package/dist/targets/akash/bid-types.d.ts +297 -0
- package/dist/targets/akash/bid-types.d.ts.map +1 -0
- package/dist/targets/akash/bid-types.js +89 -0
- package/dist/targets/akash/bid-types.js.map +1 -0
- package/dist/targets/akash/blockchain-client.d.ts +577 -0
- package/dist/targets/akash/blockchain-client.d.ts.map +1 -0
- package/dist/targets/akash/blockchain-client.js +803 -0
- package/dist/targets/akash/blockchain-client.js.map +1 -0
- package/dist/targets/akash/certificate-manager.d.ts +228 -0
- package/dist/targets/akash/certificate-manager.d.ts.map +1 -0
- package/dist/targets/akash/certificate-manager.js +395 -0
- package/dist/targets/akash/certificate-manager.js.map +1 -0
- package/dist/targets/akash/constants.d.ts +231 -0
- package/dist/targets/akash/constants.d.ts.map +1 -0
- package/dist/targets/akash/constants.js +225 -0
- package/dist/targets/akash/constants.js.map +1 -0
- package/dist/targets/akash/deployer.d.ts +136 -0
- package/dist/targets/akash/deployer.d.ts.map +1 -0
- package/dist/targets/akash/deployer.js +599 -0
- package/dist/targets/akash/deployer.js.map +1 -0
- package/dist/targets/akash/environment.d.ts +241 -0
- package/dist/targets/akash/environment.d.ts.map +1 -0
- package/dist/targets/akash/environment.js +245 -0
- package/dist/targets/akash/environment.js.map +1 -0
- package/dist/targets/akash/index.d.ts +1113 -0
- package/dist/targets/akash/index.d.ts.map +1 -0
- package/dist/targets/akash/index.js +909 -0
- package/dist/targets/akash/index.js.map +1 -0
- package/dist/targets/akash/lease-monitor.d.ts +51 -0
- package/dist/targets/akash/lease-monitor.d.ts.map +1 -0
- package/dist/targets/akash/lease-monitor.js +110 -0
- package/dist/targets/akash/lease-monitor.js.map +1 -0
- package/dist/targets/akash/logs.d.ts +71 -0
- package/dist/targets/akash/logs.d.ts.map +1 -0
- package/dist/targets/akash/logs.js +311 -0
- package/dist/targets/akash/logs.js.map +1 -0
- package/dist/targets/akash/logs.types.d.ts +102 -0
- package/dist/targets/akash/logs.types.d.ts.map +1 -0
- package/dist/targets/akash/logs.types.js +9 -0
- package/dist/targets/akash/logs.types.js.map +1 -0
- package/dist/targets/akash/pricing.d.ts +247 -0
- package/dist/targets/akash/pricing.d.ts.map +1 -0
- package/dist/targets/akash/pricing.js +246 -0
- package/dist/targets/akash/pricing.js.map +1 -0
- package/dist/targets/akash/provider-client.d.ts +114 -0
- package/dist/targets/akash/provider-client.d.ts.map +1 -0
- package/dist/targets/akash/provider-client.js +318 -0
- package/dist/targets/akash/provider-client.js.map +1 -0
- package/dist/targets/akash/provider-metadata.d.ts +228 -0
- package/dist/targets/akash/provider-metadata.d.ts.map +1 -0
- package/dist/targets/akash/provider-metadata.js +14 -0
- package/dist/targets/akash/provider-metadata.js.map +1 -0
- package/dist/targets/akash/provider-service.d.ts +133 -0
- package/dist/targets/akash/provider-service.d.ts.map +1 -0
- package/dist/targets/akash/provider-service.js +391 -0
- package/dist/targets/akash/provider-service.js.map +1 -0
- package/dist/targets/akash/query-client.d.ts +125 -0
- package/dist/targets/akash/query-client.d.ts.map +1 -0
- package/dist/targets/akash/query-client.js +332 -0
- package/dist/targets/akash/query-client.js.map +1 -0
- package/dist/targets/akash/sdl-generator.d.ts +31 -0
- package/dist/targets/akash/sdl-generator.d.ts.map +1 -0
- package/dist/targets/akash/sdl-generator.js +279 -0
- package/dist/targets/akash/sdl-generator.js.map +1 -0
- package/dist/targets/akash/types.d.ts +285 -0
- package/dist/targets/akash/types.d.ts.map +1 -0
- package/dist/targets/akash/types.js +54 -0
- package/dist/targets/akash/types.js.map +1 -0
- package/dist/targets/akash/wallet-manager.d.ts +526 -0
- package/dist/targets/akash/wallet-manager.d.ts.map +1 -0
- package/dist/targets/akash/wallet-manager.js +953 -0
- package/dist/targets/akash/wallet-manager.js.map +1 -0
- package/dist/targets/local/compose-generator.d.ts +244 -0
- package/dist/targets/local/compose-generator.d.ts.map +1 -0
- package/dist/targets/local/compose-generator.js +324 -0
- package/dist/targets/local/compose-generator.js.map +1 -0
- package/dist/targets/local/deployer.d.ts +82 -0
- package/dist/targets/local/deployer.d.ts.map +1 -0
- package/dist/targets/local/deployer.js +367 -0
- package/dist/targets/local/deployer.js.map +1 -0
- package/dist/targets/local/engine-manager.d.ts +155 -0
- package/dist/targets/local/engine-manager.d.ts.map +1 -0
- package/dist/targets/local/engine-manager.js +250 -0
- package/dist/targets/local/engine-manager.js.map +1 -0
- package/dist/targets/local/index.d.ts +40 -0
- package/dist/targets/local/index.d.ts.map +1 -0
- package/dist/targets/local/index.js +43 -0
- package/dist/targets/local/index.js.map +1 -0
- package/dist/targets/local/network-manager.d.ts +160 -0
- package/dist/targets/local/network-manager.d.ts.map +1 -0
- package/dist/targets/local/network-manager.js +337 -0
- package/dist/targets/local/network-manager.js.map +1 -0
- package/dist/targets/local/types.d.ts +327 -0
- package/dist/targets/local/types.d.ts.map +1 -0
- package/dist/targets/local/types.js +9 -0
- package/dist/targets/local/types.js.map +1 -0
- package/dist/types/common.d.ts +585 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +13 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/options.d.ts +329 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/options.js +10 -0
- package/dist/types/options.js.map +1 -0
- package/dist/types/profiles.d.ts +329 -0
- package/dist/types/profiles.d.ts.map +1 -0
- package/dist/types/profiles.js +27 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/results.d.ts +443 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +64 -0
- package/dist/types/results.js.map +1 -0
- package/dist/types/validators.d.ts +118 -0
- package/dist/types/validators.d.ts.map +1 -0
- package/dist/types/validators.js +198 -0
- package/dist/types/validators.js.map +1 -0
- package/dist/utils/command-runner.d.ts +128 -0
- package/dist/utils/command-runner.d.ts.map +1 -0
- package/dist/utils/command-runner.js +210 -0
- package/dist/utils/command-runner.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +68 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +93 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/profile-loader.d.ts +76 -0
- package/dist/utils/profile-loader.d.ts.map +1 -0
- package/dist/utils/profile-loader.js +194 -0
- package/dist/utils/profile-loader.js.map +1 -0
- package/dist/utils/registry/index.d.ts +27 -0
- package/dist/utils/registry/index.d.ts.map +1 -0
- package/dist/utils/registry/index.js +29 -0
- package/dist/utils/registry/index.js.map +1 -0
- package/dist/utils/registry/manager.d.ts +319 -0
- package/dist/utils/registry/manager.d.ts.map +1 -0
- package/dist/utils/registry/manager.js +671 -0
- package/dist/utils/registry/manager.js.map +1 -0
- package/dist/utils/registry/setup.d.ts +135 -0
- package/dist/utils/registry/setup.d.ts.map +1 -0
- package/dist/utils/registry/setup.js +207 -0
- package/dist/utils/registry/setup.js.map +1 -0
- package/dist/utils/registry/transformer.d.ts +92 -0
- package/dist/utils/registry/transformer.d.ts.map +1 -0
- package/dist/utils/registry/transformer.js +131 -0
- package/dist/utils/registry/transformer.js.map +1 -0
- package/dist/utils/registry/types.d.ts +241 -0
- package/dist/utils/registry/types.d.ts.map +1 -0
- package/dist/utils/registry/types.js +10 -0
- package/dist/utils/registry/types.js.map +1 -0
- package/docs/EXAMPLES.md +293 -0
- package/docs/PLACEMENT.md +433 -0
- package/docs/STORAGE.md +318 -0
- package/docs/building-provider-reliability-tracker.md +2581 -0
- 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
|
+
|