@oasisomniverse/web5-api 1.0.0
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 +250 -0
- package/docs/README.md +44 -0
- package/docs/modules/Avatar.md +606 -0
- package/docs/modules/CelestialBodies.md +1051 -0
- package/docs/modules/CelestialBodiesMetaData.md +949 -0
- package/docs/modules/CelestialSpaces.md +1051 -0
- package/docs/modules/Chapters.md +955 -0
- package/docs/modules/Competition.md +594 -0
- package/docs/modules/Cosmic.md +3653 -0
- package/docs/modules/Games.md +2619 -0
- package/docs/modules/GeoHotSpots.md +1027 -0
- package/docs/modules/GeoNFTs.md +1049 -0
- package/docs/modules/Health.md +90 -0
- package/docs/modules/Holons.md +1139 -0
- package/docs/modules/HolonsMetaData.md +949 -0
- package/docs/modules/InventoryItems.md +1071 -0
- package/docs/modules/Libraries.md +1052 -0
- package/docs/modules/Missions.md +1286 -0
- package/docs/modules/NFTs.md +1008 -0
- package/docs/modules/OAPPs.md +1190 -0
- package/docs/modules/Parks.md +1079 -0
- package/docs/modules/Plugins.md +1138 -0
- package/docs/modules/Quests.md +1941 -0
- package/docs/modules/Runtimes.md +1112 -0
- package/docs/modules/STAR.md +178 -0
- package/docs/modules/Templates.md +990 -0
- package/docs/modules/Zomes.md +1049 -0
- package/docs/modules/ZomesMetaData.md +949 -0
- package/index.d.ts +97 -0
- package/index.js +3 -0
- package/index.mjs +4 -0
- package/package.json +117 -0
- package/src/core/httpClient.js +110 -0
- package/src/core/routeHelper.js +85 -0
- package/src/core/tokenStore.js +52 -0
- package/src/core/types.d.ts +18 -0
- package/src/index.js +60 -0
- package/src/modules/Auth.d.ts +15 -0
- package/src/modules/Auth.js +62 -0
- package/src/modules/Avatar.d.ts +45 -0
- package/src/modules/Avatar.js +47 -0
- package/src/modules/CelestialBodies.d.ts +72 -0
- package/src/modules/CelestialBodies.js +65 -0
- package/src/modules/CelestialBodiesMetaData.d.ts +69 -0
- package/src/modules/CelestialBodiesMetaData.js +61 -0
- package/src/modules/CelestialSpaces.d.ts +72 -0
- package/src/modules/CelestialSpaces.js +65 -0
- package/src/modules/Chapters.d.ts +66 -0
- package/src/modules/Chapters.js +61 -0
- package/src/modules/Competition.d.ts +33 -0
- package/src/modules/Competition.js +39 -0
- package/src/modules/Cosmic.d.ts +222 -0
- package/src/modules/Cosmic.js +165 -0
- package/src/modules/Games.d.ts +171 -0
- package/src/modules/Games.js +131 -0
- package/src/modules/GeoHotSpots.d.ts +66 -0
- package/src/modules/GeoHotSpots.js +61 -0
- package/src/modules/GeoNFTs.d.ts +72 -0
- package/src/modules/GeoNFTs.js +65 -0
- package/src/modules/Health.d.ts +12 -0
- package/src/modules/Health.js +25 -0
- package/src/modules/Holons.d.ts +78 -0
- package/src/modules/Holons.js +69 -0
- package/src/modules/HolonsMetaData.d.ts +69 -0
- package/src/modules/HolonsMetaData.js +61 -0
- package/src/modules/InventoryItems.d.ts +69 -0
- package/src/modules/InventoryItems.js +63 -0
- package/src/modules/Libraries.d.ts +72 -0
- package/src/modules/Libraries.js +65 -0
- package/src/modules/Missions.d.ts +87 -0
- package/src/modules/Missions.js +75 -0
- package/src/modules/NFTs.d.ts +69 -0
- package/src/modules/NFTs.js +63 -0
- package/src/modules/OAPPs.d.ts +69 -0
- package/src/modules/OAPPs.js +61 -0
- package/src/modules/Parks.d.ts +72 -0
- package/src/modules/Parks.js +65 -0
- package/src/modules/Plugins.d.ts +78 -0
- package/src/modules/Plugins.js +69 -0
- package/src/modules/Quests.d.ts +129 -0
- package/src/modules/Quests.js +101 -0
- package/src/modules/Runtimes.d.ts +81 -0
- package/src/modules/Runtimes.js +69 -0
- package/src/modules/STAR.d.ts +18 -0
- package/src/modules/STAR.js +29 -0
- package/src/modules/Templates.d.ts +72 -0
- package/src/modules/Templates.js +63 -0
- package/src/modules/Zomes.d.ts +72 -0
- package/src/modules/Zomes.js +65 -0
- package/src/modules/ZomesMetaData.d.ts +69 -0
- package/src/modules/ZomesMetaData.js +61 -0
- package/src/modules/index.js +67 -0
|
@@ -0,0 +1,1941 @@
|
|
|
1
|
+
# Quests — `star.quests`
|
|
2
|
+
|
|
3
|
+
Source controller: [`QuestsController.cs`](https://github.com/NextGenSoftwareUK/OASIS2/blob/main/STAR%20ODK/NextGenSoftware.OASIS.STAR.WebAPI/Controllers/QuestsController.cs)
|
|
4
|
+
Route prefix: `api/quests`
|
|
5
|
+
40 operation(s).
|
|
6
|
+
|
|
7
|
+
Every method takes a single args object: any key matching a `{token}` in the route is substituted into the URL; everything else becomes the query string (GET/DELETE) or JSON body (POST/PUT). Every call resolves to the standard OASIS envelope:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
{
|
|
11
|
+
isError: boolean;
|
|
12
|
+
isWarning: boolean;
|
|
13
|
+
message: string;
|
|
14
|
+
errorCode?: string;
|
|
15
|
+
result: T; // see each endpoint's Response section below
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Operations
|
|
20
|
+
|
|
21
|
+
### `activateQuest`
|
|
22
|
+
|
|
23
|
+
Activates a quest.
|
|
24
|
+
|
|
25
|
+
**POST** `api/quests/{id}/activate`
|
|
26
|
+
|
|
27
|
+
Route parameters:
|
|
28
|
+
|
|
29
|
+
| Field | Type |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| `id` | `Guid` |
|
|
32
|
+
|
|
33
|
+
**Request**
|
|
34
|
+
|
|
35
|
+
Body fields:
|
|
36
|
+
|
|
37
|
+
| Field | Type |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `version` | `int (optional)` |
|
|
40
|
+
|
|
41
|
+
**Response**
|
|
42
|
+
|
|
43
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
44
|
+
|
|
45
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
46
|
+
|
|
47
|
+
**Example**
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
const { isError, message, result } = await star.quests.activateQuest({
|
|
51
|
+
id: '<id>',
|
|
52
|
+
version: 1
|
|
53
|
+
});
|
|
54
|
+
if (isError) throw new Error(message);
|
|
55
|
+
console.log(result);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Example response:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"isError": false,
|
|
63
|
+
"message": "",
|
|
64
|
+
"result": null
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### `addQuestObjective`
|
|
71
|
+
|
|
72
|
+
Adds an objective (sub-quest) to an existing quest.
|
|
73
|
+
|
|
74
|
+
**POST** `api/quests/{id}/objectives`
|
|
75
|
+
|
|
76
|
+
Route parameters:
|
|
77
|
+
|
|
78
|
+
| Field | Type |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `id` | `Guid` |
|
|
81
|
+
|
|
82
|
+
**Request**
|
|
83
|
+
|
|
84
|
+
Body type: `AddQuestObjectiveRequest`
|
|
85
|
+
|
|
86
|
+
| Field | Type |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| `Title` | `string` |
|
|
89
|
+
| `Description` | `string` |
|
|
90
|
+
| `GameSource` | `string` |
|
|
91
|
+
| `Order` | `int` |
|
|
92
|
+
| `LinkedGeoHotSpotId` | `Guid?` |
|
|
93
|
+
| `ExternalHandoffUri` | `string?` |
|
|
94
|
+
| `Dictionaries` | `QuestObjectiveDictionariesRequest?` |
|
|
95
|
+
|
|
96
|
+
**Response**
|
|
97
|
+
|
|
98
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
99
|
+
|
|
100
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
101
|
+
|
|
102
|
+
**Example**
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
const { isError, message, result } = await star.quests.addQuestObjective({
|
|
106
|
+
id: '<id>',
|
|
107
|
+
title: "example string",
|
|
108
|
+
description: "example string",
|
|
109
|
+
gameSource: "example string",
|
|
110
|
+
order: 1,
|
|
111
|
+
linkedGeoHotSpotId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
112
|
+
externalHandoffUri: "example string",
|
|
113
|
+
dictionaries: { "NeedToCollectArmor": { "<string>": ["example string"] }, "NeedToCollectAmmo": { "<string>": ["example string"] }, "NeedToCollectHealth": { "<string>": ["example string"] }, "NeedToCollectWeapons": { "<string>": ["example string"] }, "NeedToCollectPowerups": { "<string>": ["example string"] }, "NeedToCollectItems": { "<string>": ["example string"] }, "NeedToCollectKeys": { "<string>": ["example string"] }, "NeedToKillMonsters": { "<string>": ["example string"] }, "NeedToCompleteInMins": { "<string>": ["example string"] }, "NeedToEarnKarma": { "<string>": ["example string"] }, "NeedToEarnXP": { "<string>": ["example string"] }, "NeedToGoToGeoHotSpots": { "<string>": ["example string"] }, "NeedToCompleteLevel": { "<string>": ["example string"] }, "NeedToUseWeapons": { "<string>": ["example string"] }, "NeedToUsePowerups": { "<string>": ["example string"] }, "NeedToVisitLocations": { "<string>": ["example string"] }, "NeedToSurviveMins": { "<string>": ["example string"] }, "ArmorCollected": { "<string>": ["example string"] }, "AmmoCollected": { "<string>": ["example string"] }, "HealthCollected": { "<string>": ["example string"] }, "WeaponsCollected": { "<string>": ["example string"] }, "PowerupsCollected": { "<string>": ["example string"] }, "ItemsCollected": { "<string>": ["example string"] }, "KeysCollected": { "<string>": ["example string"] }, "MonstersKilled": { "<string>": ["example string"] }, "TimeStarted": { "<string>": ["example string"] }, "TimeEnded": { "<string>": ["example string"] }, "TimeTaken": { "<string>": ["example string"] }, "KarmaEarnt": { "<string>": ["example string"] }, "XPEarnt": { "<string>": ["example string"] }, "GeoHotSpotsArrived": { "<string>": ["example string"] }, "LevelsCompleted": { "<string>": ["example string"] } }
|
|
114
|
+
});
|
|
115
|
+
if (isError) throw new Error(message);
|
|
116
|
+
console.log(result);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Example response:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"isError": false,
|
|
124
|
+
"message": "",
|
|
125
|
+
"result": null
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### `addSubQuest`
|
|
132
|
+
|
|
133
|
+
Adds a sub-quest (full child quest) to an existing quest. Use for nested quests that can have their own objectives; use POST objectives for checklist items.
|
|
134
|
+
|
|
135
|
+
**POST** `api/quests/{id}/subquests`
|
|
136
|
+
|
|
137
|
+
Route parameters:
|
|
138
|
+
|
|
139
|
+
| Field | Type |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `id` | `Guid` |
|
|
142
|
+
|
|
143
|
+
**Request**
|
|
144
|
+
|
|
145
|
+
Body type: `AddSubQuestRequest`
|
|
146
|
+
|
|
147
|
+
| Field | Type |
|
|
148
|
+
| --- | --- |
|
|
149
|
+
| `Name` | `string` |
|
|
150
|
+
| `Description` | `string` |
|
|
151
|
+
| `GameSource` | `string` |
|
|
152
|
+
| `Order` | `int` |
|
|
153
|
+
| `Dictionaries` | `QuestObjectiveDictionariesRequest?` |
|
|
154
|
+
|
|
155
|
+
**Response**
|
|
156
|
+
|
|
157
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
158
|
+
|
|
159
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
160
|
+
|
|
161
|
+
**Example**
|
|
162
|
+
|
|
163
|
+
```js
|
|
164
|
+
const { isError, message, result } = await star.quests.addSubQuest({
|
|
165
|
+
id: '<id>',
|
|
166
|
+
name: "example string",
|
|
167
|
+
description: "example string",
|
|
168
|
+
gameSource: "example string",
|
|
169
|
+
order: 1,
|
|
170
|
+
dictionaries: { "NeedToCollectArmor": { "<string>": ["example string"] }, "NeedToCollectAmmo": { "<string>": ["example string"] }, "NeedToCollectHealth": { "<string>": ["example string"] }, "NeedToCollectWeapons": { "<string>": ["example string"] }, "NeedToCollectPowerups": { "<string>": ["example string"] }, "NeedToCollectItems": { "<string>": ["example string"] }, "NeedToCollectKeys": { "<string>": ["example string"] }, "NeedToKillMonsters": { "<string>": ["example string"] }, "NeedToCompleteInMins": { "<string>": ["example string"] }, "NeedToEarnKarma": { "<string>": ["example string"] }, "NeedToEarnXP": { "<string>": ["example string"] }, "NeedToGoToGeoHotSpots": { "<string>": ["example string"] }, "NeedToCompleteLevel": { "<string>": ["example string"] }, "NeedToUseWeapons": { "<string>": ["example string"] }, "NeedToUsePowerups": { "<string>": ["example string"] }, "NeedToVisitLocations": { "<string>": ["example string"] }, "NeedToSurviveMins": { "<string>": ["example string"] }, "ArmorCollected": { "<string>": ["example string"] }, "AmmoCollected": { "<string>": ["example string"] }, "HealthCollected": { "<string>": ["example string"] }, "WeaponsCollected": { "<string>": ["example string"] }, "PowerupsCollected": { "<string>": ["example string"] }, "ItemsCollected": { "<string>": ["example string"] }, "KeysCollected": { "<string>": ["example string"] }, "MonstersKilled": { "<string>": ["example string"] }, "TimeStarted": { "<string>": ["example string"] }, "TimeEnded": { "<string>": ["example string"] }, "TimeTaken": { "<string>": ["example string"] }, "KarmaEarnt": { "<string>": ["example string"] }, "XPEarnt": { "<string>": ["example string"] }, "GeoHotSpotsArrived": { "<string>": ["example string"] }, "LevelsCompleted": { "<string>": ["example string"] } }
|
|
171
|
+
});
|
|
172
|
+
if (isError) throw new Error(message);
|
|
173
|
+
console.log(result);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Example response:
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"isError": false,
|
|
181
|
+
"message": "",
|
|
182
|
+
"result": null
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### `applyQuestProgress`
|
|
189
|
+
|
|
190
|
+
Apply in-game progress (monster kills, XP, item pickups, keys, level elapsed seconds) to the tracked quest. Updates objective progress and % complete; completes objectives/quest when thresholds are met.</summary>
|
|
191
|
+
|
|
192
|
+
**POST** `api/quests/{id}/progress`
|
|
193
|
+
|
|
194
|
+
Route parameters:
|
|
195
|
+
|
|
196
|
+
| Field | Type |
|
|
197
|
+
| --- | --- |
|
|
198
|
+
| `id` | `Guid` |
|
|
199
|
+
|
|
200
|
+
**Request**
|
|
201
|
+
|
|
202
|
+
Body type: `QuestProgressRequest`
|
|
203
|
+
|
|
204
|
+
| Field | Type |
|
|
205
|
+
| --- | --- |
|
|
206
|
+
| `ActiveObjectiveId` | `Guid?` |
|
|
207
|
+
| `GameSource` | `string` |
|
|
208
|
+
| `MonstersKilledDelta` | `int` |
|
|
209
|
+
| `XpEarnedDelta` | `int` |
|
|
210
|
+
| `KeysCollectedDelta` | `int` |
|
|
211
|
+
| `ArmorCollectedDelta` | `int` |
|
|
212
|
+
| `HealthCollectedDelta` | `int` |
|
|
213
|
+
| `WeaponsCollectedDelta` | `int` |
|
|
214
|
+
| `PowerupsCollectedDelta` | `int` |
|
|
215
|
+
| `AmmoCollectedDelta` | `int` |
|
|
216
|
+
| `ItemCollectedName` | `string` |
|
|
217
|
+
| `GenericItemPickup` | `int` |
|
|
218
|
+
| `LevelTimeSeconds` | `int?` |
|
|
219
|
+
|
|
220
|
+
**Response**
|
|
221
|
+
|
|
222
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
223
|
+
|
|
224
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
225
|
+
|
|
226
|
+
**Example**
|
|
227
|
+
|
|
228
|
+
```js
|
|
229
|
+
const { isError, message, result } = await star.quests.applyQuestProgress({
|
|
230
|
+
id: '<id>',
|
|
231
|
+
activeObjectiveId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
232
|
+
gameSource: "example string",
|
|
233
|
+
monstersKilledDelta: 1,
|
|
234
|
+
xpEarnedDelta: 1,
|
|
235
|
+
keysCollectedDelta: 1,
|
|
236
|
+
armorCollectedDelta: 1,
|
|
237
|
+
healthCollectedDelta: 1,
|
|
238
|
+
weaponsCollectedDelta: 1,
|
|
239
|
+
powerupsCollectedDelta: 1,
|
|
240
|
+
ammoCollectedDelta: 1,
|
|
241
|
+
itemCollectedName: "example string",
|
|
242
|
+
genericItemPickup: 1,
|
|
243
|
+
levelTimeSeconds: 1
|
|
244
|
+
});
|
|
245
|
+
if (isError) throw new Error(message);
|
|
246
|
+
console.log(result);
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Example response:
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"isError": false,
|
|
254
|
+
"message": "",
|
|
255
|
+
"result": null
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
### `canStartQuest`
|
|
262
|
+
|
|
263
|
+
Checks whether the authenticated avatar can start the quest (quest is NotStarted and prerequisites are met). Use for the quest popup to enable/disable the Start button. Returns Result=true when the quest can be started, false otherwise with Message explaining why.
|
|
264
|
+
|
|
265
|
+
**GET** `api/quests/{id}/can-start`
|
|
266
|
+
|
|
267
|
+
Route parameters:
|
|
268
|
+
|
|
269
|
+
| Field | Type |
|
|
270
|
+
| --- | --- |
|
|
271
|
+
| `id` | `Guid` |
|
|
272
|
+
|
|
273
|
+
**Request**
|
|
274
|
+
|
|
275
|
+
No request body.
|
|
276
|
+
|
|
277
|
+
**Response**
|
|
278
|
+
|
|
279
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
280
|
+
|
|
281
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
282
|
+
|
|
283
|
+
**Example**
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
const { isError, message, result } = await star.quests.canStartQuest({
|
|
287
|
+
id: '<id>'
|
|
288
|
+
});
|
|
289
|
+
if (isError) throw new Error(message);
|
|
290
|
+
console.log(result);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Example response:
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"isError": false,
|
|
298
|
+
"message": "",
|
|
299
|
+
"result": null
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### `cloneQuest`
|
|
306
|
+
|
|
307
|
+
Clones an existing quest with a new name.
|
|
308
|
+
|
|
309
|
+
**POST** `api/quests/{id}/clone`
|
|
310
|
+
|
|
311
|
+
Route parameters:
|
|
312
|
+
|
|
313
|
+
| Field | Type |
|
|
314
|
+
| --- | --- |
|
|
315
|
+
| `id` | `Guid` |
|
|
316
|
+
|
|
317
|
+
**Request**
|
|
318
|
+
|
|
319
|
+
Body type: `CloneRequest`
|
|
320
|
+
|
|
321
|
+
| Field | Type |
|
|
322
|
+
| --- | --- |
|
|
323
|
+
| `NewName` | `string` |
|
|
324
|
+
|
|
325
|
+
**Response**
|
|
326
|
+
|
|
327
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
328
|
+
|
|
329
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
330
|
+
|
|
331
|
+
**Example**
|
|
332
|
+
|
|
333
|
+
```js
|
|
334
|
+
const { isError, message, result } = await star.quests.cloneQuest({
|
|
335
|
+
id: '<id>',
|
|
336
|
+
newName: "example string"
|
|
337
|
+
});
|
|
338
|
+
if (isError) throw new Error(message);
|
|
339
|
+
console.log(result);
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Example response:
|
|
343
|
+
|
|
344
|
+
```json
|
|
345
|
+
{
|
|
346
|
+
"isError": false,
|
|
347
|
+
"message": "",
|
|
348
|
+
"result": null
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
### `completeQuest`
|
|
355
|
+
|
|
356
|
+
Completes a quest for the authenticated avatar.
|
|
357
|
+
|
|
358
|
+
**POST** `api/quests/{id}/complete`
|
|
359
|
+
|
|
360
|
+
Route parameters:
|
|
361
|
+
|
|
362
|
+
| Field | Type |
|
|
363
|
+
| --- | --- |
|
|
364
|
+
| `id` | `Guid` |
|
|
365
|
+
|
|
366
|
+
**Request**
|
|
367
|
+
|
|
368
|
+
Body fields:
|
|
369
|
+
|
|
370
|
+
| Field | Type |
|
|
371
|
+
| --- | --- |
|
|
372
|
+
| `completionNotes` | `string (optional)` |
|
|
373
|
+
|
|
374
|
+
**Response**
|
|
375
|
+
|
|
376
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
377
|
+
|
|
378
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
379
|
+
|
|
380
|
+
**Example**
|
|
381
|
+
|
|
382
|
+
```js
|
|
383
|
+
const { isError, message, result } = await star.quests.completeQuest({
|
|
384
|
+
id: '<id>',
|
|
385
|
+
completionNotes: 'example string'
|
|
386
|
+
});
|
|
387
|
+
if (isError) throw new Error(message);
|
|
388
|
+
console.log(result);
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Example response:
|
|
392
|
+
|
|
393
|
+
```json
|
|
394
|
+
{
|
|
395
|
+
"isError": false,
|
|
396
|
+
"message": "",
|
|
397
|
+
"result": null
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### `completeQuestObjective`
|
|
404
|
+
|
|
405
|
+
**POST** `api/quests/{id}/objectives/{objectiveId}/complete`
|
|
406
|
+
|
|
407
|
+
Route parameters:
|
|
408
|
+
|
|
409
|
+
| Field | Type |
|
|
410
|
+
| --- | --- |
|
|
411
|
+
| `id` | `Guid` |
|
|
412
|
+
| `objectiveId` | `Guid` |
|
|
413
|
+
|
|
414
|
+
**Request**
|
|
415
|
+
|
|
416
|
+
Body type: `CompleteQuestObjectiveRequest`
|
|
417
|
+
|
|
418
|
+
| Field | Type |
|
|
419
|
+
| --- | --- |
|
|
420
|
+
| `GameSource` | `string` |
|
|
421
|
+
| `CompletionNotes` | `string` |
|
|
422
|
+
|
|
423
|
+
**Response**
|
|
424
|
+
|
|
425
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
426
|
+
|
|
427
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
428
|
+
|
|
429
|
+
**Example**
|
|
430
|
+
|
|
431
|
+
```js
|
|
432
|
+
const { isError, message, result } = await star.quests.completeQuestObjective({
|
|
433
|
+
id: '<id>',
|
|
434
|
+
objectiveId: '<objectiveId>',
|
|
435
|
+
gameSource: "example string",
|
|
436
|
+
completionNotes: "example string"
|
|
437
|
+
});
|
|
438
|
+
if (isError) throw new Error(message);
|
|
439
|
+
console.log(result);
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
Example response:
|
|
443
|
+
|
|
444
|
+
```json
|
|
445
|
+
{
|
|
446
|
+
"isError": false,
|
|
447
|
+
"message": "",
|
|
448
|
+
"result": null
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
---
|
|
453
|
+
|
|
454
|
+
### `completeQuestObjectiveByIdentifiers`
|
|
455
|
+
|
|
456
|
+
Complete a quest objective using string identifiers in the JSON body (GUIDs or client slugs such as cross_dimensional_keycard_hunt / doom_red_keycard). Native games use this path; route parameters remain Guid-only.</summary>
|
|
457
|
+
|
|
458
|
+
**POST** `api/quests/objectives/complete`
|
|
459
|
+
|
|
460
|
+
**Request**
|
|
461
|
+
|
|
462
|
+
Body type: `CompleteQuestObjectiveIdentifiersRequest`
|
|
463
|
+
|
|
464
|
+
| Field | Type |
|
|
465
|
+
| --- | --- |
|
|
466
|
+
| `QuestId` | `string` |
|
|
467
|
+
| `ObjectiveId` | `string` |
|
|
468
|
+
| `GameSource` | `string` |
|
|
469
|
+
| `CompletionNotes` | `string` |
|
|
470
|
+
|
|
471
|
+
**Response**
|
|
472
|
+
|
|
473
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
474
|
+
|
|
475
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
476
|
+
|
|
477
|
+
**Example**
|
|
478
|
+
|
|
479
|
+
```js
|
|
480
|
+
const { isError, message, result } = await star.quests.completeQuestObjectiveByIdentifiers({
|
|
481
|
+
questId: "example string",
|
|
482
|
+
objectiveId: "example string",
|
|
483
|
+
gameSource: "example string",
|
|
484
|
+
completionNotes: "example string"
|
|
485
|
+
});
|
|
486
|
+
if (isError) throw new Error(message);
|
|
487
|
+
console.log(result);
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
Example response:
|
|
491
|
+
|
|
492
|
+
```json
|
|
493
|
+
{
|
|
494
|
+
"isError": false,
|
|
495
|
+
"message": "",
|
|
496
|
+
"result": null
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
### `createIQuest`
|
|
503
|
+
|
|
504
|
+
Creates a new quest for the authenticated avatar.
|
|
505
|
+
|
|
506
|
+
**POST** `api/quests`
|
|
507
|
+
|
|
508
|
+
**Request**
|
|
509
|
+
|
|
510
|
+
Body type: `IQuest`
|
|
511
|
+
|
|
512
|
+
| Field | Type |
|
|
513
|
+
| --- | --- |
|
|
514
|
+
| `ParentMissionId` | `Guid` |
|
|
515
|
+
| `ParentQuestId` | `Guid` |
|
|
516
|
+
| `QuestType` | `QuestType` |
|
|
517
|
+
| `GeoSpatialNFTIds` | `IList<string>` |
|
|
518
|
+
| `GeoSpatialNFTs` | `IList<IOASISGeoSpatialNFT>` |
|
|
519
|
+
| `GeoHotSpotIds` | `IList<string>` |
|
|
520
|
+
| `GeoHotSpots` | `IList<IGeoHotSpot>` |
|
|
521
|
+
| `CurrentSubQuest` | `IQuest` |
|
|
522
|
+
| `CurrentSubQuestNumber` | `int` |
|
|
523
|
+
|
|
524
|
+
**Response**
|
|
525
|
+
|
|
526
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
527
|
+
|
|
528
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
529
|
+
|
|
530
|
+
**Example**
|
|
531
|
+
|
|
532
|
+
```js
|
|
533
|
+
const { isError, message, result } = await star.quests.createIQuest({
|
|
534
|
+
parentMissionId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
535
|
+
parentQuestId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
536
|
+
questType: { },
|
|
537
|
+
geoSpatialNFTIds: ["example string"],
|
|
538
|
+
geoSpatialNFTs: [ /* <IOASISGeoSpatialNFT> */ ],
|
|
539
|
+
geoHotSpotIds: ["example string"],
|
|
540
|
+
geoHotSpots: [{ "TriggerType": { }, "Lat": 1.0, "Long": 1.0, "HotSpotRadiusInMetres": 1, "TimeInSecondsNeedToBeAtLocationToTriggerHotSpot": 1, "TimeInSecondsNeedToLookAt3DObjectOr2DImageToTriggerHotSpot": 1, "Object3D": "<base64-bytes>", "Image2D": "<base64-bytes>", "Rewards": [{ "Image2D": "<base64-bytes>", "Image2DURI": "https://example.com/asset.png", "ThumbnailUrl": "example string", "Object3D": "<base64-bytes>", "Object3DURI": "https://example.com/asset.png", "Quantity": 1, "Stack": true, "IsStackable": true, "GameSource": "example string", "ItemType": "example string", "NftId": "example string", "Rarity": "example string", "MaxQuantity": 1, "Weight": 1.0, "IsUsable": true, "IsTradeable": true, "OwnerAvatarId": "example string", "AcquiredOn": "2026-01-01T00:00:00Z", "LastUsedOn": "2026-01-01T00:00:00Z", "Properties": { "<string>": {} } }], "AudioData": "<base64-bytes>", "AudioUrl": "example string", "VideoData": "<base64-bytes>", "VideoUrl": "example string", "TextContent": "example string", "WebsiteUrl": "example string" }],
|
|
541
|
+
currentSubQuest: { "ParentMissionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "ParentQuestId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "QuestType": { }, "GeoSpatialNFTIds": ["example string"], "GeoSpatialNFTs": [ /* <IOASISGeoSpatialNFT> */ ], "GeoHotSpotIds": ["example string"], "GeoHotSpots": [{ "TriggerType": { }, "Lat": 1.0, "Long": 1.0, "HotSpotRadiusInMetres": 1, "TimeInSecondsNeedToBeAtLocationToTriggerHotSpot": 1, "TimeInSecondsNeedToLookAt3DObjectOr2DImageToTriggerHotSpot": 1, "Object3D": "<base64-bytes>", "Image2D": "<base64-bytes>", "Rewards": [{ "Image2D": "<base64-bytes>", "Image2DURI": "https://example.com/asset.png", "ThumbnailUrl": "example string", "Object3D": "<base64-bytes>", "Object3DURI": "https://example.com/asset.png", "Quantity": 1, "Stack": true, "IsStackable": true, "GameSource": "example string", "ItemType": "example string", "NftId": "example string", "Rarity": "example string", "MaxQuantity": 1, "Weight": 1.0, "IsUsable": true, "IsTradeable": true, "OwnerAvatarId": "example string", "AcquiredOn": "2026-01-01T00:00:00Z", "LastUsedOn": "2026-01-01T00:00:00Z", "Properties": { "<string>": {} } }], "AudioData": "<base64-bytes>", "AudioUrl": "example string", "VideoData": "<base64-bytes>", "VideoUrl": "example string", "TextContent": "example string", "WebsiteUrl": "example string" }], "CurrentSubQuest": {}, "CurrentSubQuestNumber": 1 },
|
|
542
|
+
currentSubQuestNumber: 1
|
|
543
|
+
});
|
|
544
|
+
if (isError) throw new Error(message);
|
|
545
|
+
console.log(result);
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
Example response:
|
|
549
|
+
|
|
550
|
+
```json
|
|
551
|
+
{
|
|
552
|
+
"isError": false,
|
|
553
|
+
"message": "",
|
|
554
|
+
"result": null
|
|
555
|
+
}
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
### `createQuestWithOptions`
|
|
561
|
+
|
|
562
|
+
Creates a new quest with specified parameters.
|
|
563
|
+
|
|
564
|
+
**POST** `api/quests/create`
|
|
565
|
+
|
|
566
|
+
**Request**
|
|
567
|
+
|
|
568
|
+
Body type: `CreateQuestRequest`
|
|
569
|
+
|
|
570
|
+
| Field | Type |
|
|
571
|
+
| --- | --- |
|
|
572
|
+
| `Name` | `string` |
|
|
573
|
+
| `Description` | `string` |
|
|
574
|
+
| `HolonSubType` | `HolonType` |
|
|
575
|
+
| `QuestType` | `QuestType` |
|
|
576
|
+
| `SourceFolderPath` | `string` |
|
|
577
|
+
| `CreateOptions` | `ISTARNETCreateOptions<Quest, STARNETDNA>?` |
|
|
578
|
+
| `LinkedGeoHotSpotId` | `Guid?` |
|
|
579
|
+
| `ExternalHandoffUri` | `string?` |
|
|
580
|
+
| `Objectives` | `List<QuestObjectiveRequest>?` |
|
|
581
|
+
|
|
582
|
+
**Response**
|
|
583
|
+
|
|
584
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
585
|
+
|
|
586
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
587
|
+
|
|
588
|
+
**Example**
|
|
589
|
+
|
|
590
|
+
```js
|
|
591
|
+
const { isError, message, result } = await star.quests.createQuestWithOptions({
|
|
592
|
+
name: "example string",
|
|
593
|
+
description: "example string",
|
|
594
|
+
holonSubType: { },
|
|
595
|
+
questType: { },
|
|
596
|
+
sourceFolderPath: "example string",
|
|
597
|
+
createOptions: { "STARNETHolon": /* <T1> */, "STARNETDNA": /* <T2> */, "MetaTagMappings": { "MetaHolonTags": [{ "HolonName": "example string", "HolonType": { }, "NodeName": "example string", "NodeType": { "Score": 1.0 }, "MetaTag": "example string" }], "MetaTags": { "<string>": "example string" } }, "CheckIfSourcePathExists": true, "CustomCreateParams": { "<string>": {} } },
|
|
598
|
+
linkedGeoHotSpotId: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
599
|
+
externalHandoffUri: "example string",
|
|
600
|
+
objectives: [{ "Title": "example string", "Description": "example string", "GameSource": "example string", "Order": 1, "IsCompleted": true, "CompletedAt": "2026-01-01T00:00:00Z", "CompletedBy": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "LinkedGeoHotSpotId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "ExternalHandoffUri": "example string", "Dictionaries": { "NeedToCollectArmor": { "<string>": ["example string"] }, "NeedToCollectAmmo": { "<string>": ["example string"] }, "NeedToCollectHealth": { "<string>": ["example string"] }, "NeedToCollectWeapons": { "<string>": ["example string"] }, "NeedToCollectPowerups": { "<string>": ["example string"] }, "NeedToCollectItems": { "<string>": ["example string"] }, "NeedToCollectKeys": { "<string>": ["example string"] }, "NeedToKillMonsters": { "<string>": ["example string"] }, "NeedToCompleteInMins": { "<string>": ["example string"] }, "NeedToEarnKarma": { "<string>": ["example string"] }, "NeedToEarnXP": { "<string>": ["example string"] }, "NeedToGoToGeoHotSpots": { "<string>": ["example string"] }, "NeedToCompleteLevel": { "<string>": ["example string"] }, "NeedToUseWeapons": { "<string>": ["example string"] }, "NeedToUsePowerups": { "<string>": ["example string"] }, "NeedToVisitLocations": { "<string>": ["example string"] }, "NeedToSurviveMins": { "<string>": ["example string"] }, "ArmorCollected": { "<string>": ["example string"] }, "AmmoCollected": { "<string>": ["example string"] }, "HealthCollected": { "<string>": ["example string"] }, "WeaponsCollected": { "<string>": ["example string"] }, "PowerupsCollected": { "<string>": ["example string"] }, "ItemsCollected": { "<string>": ["example string"] }, "KeysCollected": { "<string>": ["example string"] }, "MonstersKilled": { "<string>": ["example string"] }, "TimeStarted": { "<string>": ["example string"] }, "TimeEnded": { "<string>": ["example string"] }, "TimeTaken": { "<string>": ["example string"] }, "KarmaEarnt": { "<string>": ["example string"] }, "XPEarnt": { "<string>": ["example string"] }, "GeoHotSpotsArrived": { "<string>": ["example string"] }, "LevelsCompleted": { "<string>": ["example string"] } } }]
|
|
601
|
+
});
|
|
602
|
+
if (isError) throw new Error(message);
|
|
603
|
+
console.log(result);
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
Example response:
|
|
607
|
+
|
|
608
|
+
```json
|
|
609
|
+
{
|
|
610
|
+
"isError": false,
|
|
611
|
+
"message": "",
|
|
612
|
+
"result": null
|
|
613
|
+
}
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
### `deactivateQuest`
|
|
619
|
+
|
|
620
|
+
Deactivates a quest.
|
|
621
|
+
|
|
622
|
+
**POST** `api/quests/{id}/deactivate`
|
|
623
|
+
|
|
624
|
+
Route parameters:
|
|
625
|
+
|
|
626
|
+
| Field | Type |
|
|
627
|
+
| --- | --- |
|
|
628
|
+
| `id` | `Guid` |
|
|
629
|
+
|
|
630
|
+
**Request**
|
|
631
|
+
|
|
632
|
+
Body fields:
|
|
633
|
+
|
|
634
|
+
| Field | Type |
|
|
635
|
+
| --- | --- |
|
|
636
|
+
| `version` | `int (optional)` |
|
|
637
|
+
|
|
638
|
+
**Response**
|
|
639
|
+
|
|
640
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
641
|
+
|
|
642
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
643
|
+
|
|
644
|
+
**Example**
|
|
645
|
+
|
|
646
|
+
```js
|
|
647
|
+
const { isError, message, result } = await star.quests.deactivateQuest({
|
|
648
|
+
id: '<id>',
|
|
649
|
+
version: 1
|
|
650
|
+
});
|
|
651
|
+
if (isError) throw new Error(message);
|
|
652
|
+
console.log(result);
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
Example response:
|
|
656
|
+
|
|
657
|
+
```json
|
|
658
|
+
{
|
|
659
|
+
"isError": false,
|
|
660
|
+
"message": "",
|
|
661
|
+
"result": null
|
|
662
|
+
}
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
### `deleteIQuest`
|
|
668
|
+
|
|
669
|
+
Deletes a quest by its unique identifier.
|
|
670
|
+
|
|
671
|
+
**DELETE** `api/quests/{id}`
|
|
672
|
+
|
|
673
|
+
Route parameters:
|
|
674
|
+
|
|
675
|
+
| Field | Type |
|
|
676
|
+
| --- | --- |
|
|
677
|
+
| `id` | `Guid` |
|
|
678
|
+
|
|
679
|
+
**Request**
|
|
680
|
+
|
|
681
|
+
No request body.
|
|
682
|
+
|
|
683
|
+
**Response**
|
|
684
|
+
|
|
685
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
686
|
+
|
|
687
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
688
|
+
|
|
689
|
+
**Example**
|
|
690
|
+
|
|
691
|
+
```js
|
|
692
|
+
const { isError, message, result } = await star.quests.deleteIQuest({
|
|
693
|
+
id: '<id>'
|
|
694
|
+
});
|
|
695
|
+
if (isError) throw new Error(message);
|
|
696
|
+
console.log(result);
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
Example response:
|
|
700
|
+
|
|
701
|
+
```json
|
|
702
|
+
{
|
|
703
|
+
"isError": false,
|
|
704
|
+
"message": "",
|
|
705
|
+
"result": null
|
|
706
|
+
}
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
### `downloadQuest`
|
|
712
|
+
|
|
713
|
+
Downloads a quest from the STARNET system.
|
|
714
|
+
|
|
715
|
+
**POST** `api/quests/{id}/download`
|
|
716
|
+
|
|
717
|
+
Route parameters:
|
|
718
|
+
|
|
719
|
+
| Field | Type |
|
|
720
|
+
| --- | --- |
|
|
721
|
+
| `id` | `Guid` |
|
|
722
|
+
|
|
723
|
+
**Request**
|
|
724
|
+
|
|
725
|
+
Body fields:
|
|
726
|
+
|
|
727
|
+
| Field | Type |
|
|
728
|
+
| --- | --- |
|
|
729
|
+
| `version` | `int (optional)` |
|
|
730
|
+
| `downloadPath` | `string (optional)` |
|
|
731
|
+
| `reInstall` | `bool (optional)` |
|
|
732
|
+
|
|
733
|
+
**Response**
|
|
734
|
+
|
|
735
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
736
|
+
|
|
737
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
738
|
+
|
|
739
|
+
**Example**
|
|
740
|
+
|
|
741
|
+
```js
|
|
742
|
+
const { isError, message, result } = await star.quests.downloadQuest({
|
|
743
|
+
id: '<id>',
|
|
744
|
+
version: 1,
|
|
745
|
+
downloadPath: 'example string',
|
|
746
|
+
reInstall: true
|
|
747
|
+
});
|
|
748
|
+
if (isError) throw new Error(message);
|
|
749
|
+
console.log(result);
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
Example response:
|
|
753
|
+
|
|
754
|
+
```json
|
|
755
|
+
{
|
|
756
|
+
"isError": false,
|
|
757
|
+
"message": "",
|
|
758
|
+
"result": null
|
|
759
|
+
}
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
---
|
|
763
|
+
|
|
764
|
+
### `editQuest`
|
|
765
|
+
|
|
766
|
+
Edits a quest with new DNA configuration.
|
|
767
|
+
|
|
768
|
+
**POST** `api/quests/{id}/edit`
|
|
769
|
+
|
|
770
|
+
Route parameters:
|
|
771
|
+
|
|
772
|
+
| Field | Type |
|
|
773
|
+
| --- | --- |
|
|
774
|
+
| `id` | `Guid` |
|
|
775
|
+
|
|
776
|
+
**Request**
|
|
777
|
+
|
|
778
|
+
Body type: `EditQuestRequest`
|
|
779
|
+
|
|
780
|
+
| Field | Type |
|
|
781
|
+
| --- | --- |
|
|
782
|
+
| `NewDNA` | `STARNETDNA` |
|
|
783
|
+
|
|
784
|
+
**Response**
|
|
785
|
+
|
|
786
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
787
|
+
|
|
788
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
789
|
+
|
|
790
|
+
**Example**
|
|
791
|
+
|
|
792
|
+
```js
|
|
793
|
+
const { isError, message, result } = await star.quests.editQuest({
|
|
794
|
+
id: '<id>',
|
|
795
|
+
newDNA: { "Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "Name": "example string", "Description": "example string", "STARNETHolonType": "example string", "STARNETCategory": {}, "STARNETSubCategory": {}, "Dependencies": { "OAPPs": [{ "Type": { }, "HolonId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "STARNETHolonId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "Name": "example string", "Description": "example string", "Version": "example string", "VersionSequence": 1, "Install": true, "InstallMode": { }, "InstalledFrom": "example string", "InstalledTo": "example string" }], "Runtimes": [], "Libraries": [], "Templates": [], "NFTs": [], "NFTCollections": [], "GeoNFTs": [], "GeoNFTCollections": [], "GeoHotSpots": [], "Quests": [], "Missions": [], "Chapters": [], "InventoryItems": [], "CelestialSpaces": [], "CelestialBodies": [], "Zomes": [], "Holons": [], "CelestialBodiesMetaDataDNA": [], "ZomesMetaDataDNA": [], "HolonsMetaDataDNA": [] }, "MetaData": { "<string>": {} }, "MetaHolonTagMappings": /* <>> */, "MetaTagMappings": { "<string>": "example string" }, "CreatedByAvatarId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "CreatedByAvatarUsername": "example string", "CreatedOn": "2026-01-01T00:00:00Z", "SourcePath": "example string", "PublishedPath": "example string", "PublishedByAvatarId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "PublishedByAvatarUsername": "example string", "PublishedOn": "2026-01-01T00:00:00Z", "LaunchTarget": "example string", "ModifiedByAvatarId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "ModifiedByAvatarUsername": "example string", "ModifiedOn": "2026-01-01T00:00:00Z", "PublishedOnSTARNET": true, "PublishedToCloud": true, "PublishedToPinata": true, "PinataIPFSHash": "example string", "PublishedProviderType": "example string", "FileSize": 1, "Version": "example string", "OASISRuntimeVersion": "example string", "OASISAPIVersion": "example string", "COSMICVersion": "example string", "STARRuntimeVersion": "example string", "STARODKVersion": "example string", "STARAPIVersion": "example string", "STARNETVersion": "example string", "DotNetVersion": "example string", "VersionSequence": 1, "Downloads": 1, "Installs": 1, "TotalDownloads": 1, "TotalInstalls": 1, "NumberOfVersions": 1 }
|
|
796
|
+
});
|
|
797
|
+
if (isError) throw new Error(message);
|
|
798
|
+
console.log(result);
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
Example response:
|
|
802
|
+
|
|
803
|
+
```json
|
|
804
|
+
{
|
|
805
|
+
"isError": false,
|
|
806
|
+
"message": "",
|
|
807
|
+
"result": null
|
|
808
|
+
}
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
---
|
|
812
|
+
|
|
813
|
+
### `getAllIQuests`
|
|
814
|
+
|
|
815
|
+
Retrieves all quests in the system.
|
|
816
|
+
|
|
817
|
+
**GET** `api/quests`
|
|
818
|
+
|
|
819
|
+
**Request**
|
|
820
|
+
|
|
821
|
+
No request body.
|
|
822
|
+
|
|
823
|
+
**Response**
|
|
824
|
+
|
|
825
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
826
|
+
|
|
827
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
828
|
+
|
|
829
|
+
**Example**
|
|
830
|
+
|
|
831
|
+
```js
|
|
832
|
+
const { isError, message, result } = await star.quests.getAllIQuests({});
|
|
833
|
+
if (isError) throw new Error(message);
|
|
834
|
+
console.log(result);
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
Example response:
|
|
838
|
+
|
|
839
|
+
```json
|
|
840
|
+
{
|
|
841
|
+
"isError": false,
|
|
842
|
+
"message": "",
|
|
843
|
+
"result": null
|
|
844
|
+
}
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
---
|
|
848
|
+
|
|
849
|
+
### `getAllQuestsForAvatar`
|
|
850
|
+
|
|
851
|
+
Retrieves all quests for the current avatar (no status filter). Returns a flat list of every quest where CreatedByAvatarId matches and Active=1: top-level quests, sub-quests, and objectives (child quests with ParentQuestId set). Use this for the quest popup; the client filters by status (Not Started, In Progress, Completed) and by ParentQuestId for sub-quests/objectives.
|
|
852
|
+
|
|
853
|
+
**GET** `api/quests/all-for-avatar`
|
|
854
|
+
|
|
855
|
+
**Request**
|
|
856
|
+
|
|
857
|
+
No request body.
|
|
858
|
+
|
|
859
|
+
**Response**
|
|
860
|
+
|
|
861
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
862
|
+
|
|
863
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
864
|
+
|
|
865
|
+
**Example**
|
|
866
|
+
|
|
867
|
+
```js
|
|
868
|
+
const { isError, message, result } = await star.quests.getAllQuestsForAvatar({});
|
|
869
|
+
if (isError) throw new Error(message);
|
|
870
|
+
console.log(result);
|
|
871
|
+
```
|
|
872
|
+
|
|
873
|
+
Example response:
|
|
874
|
+
|
|
875
|
+
```json
|
|
876
|
+
{
|
|
877
|
+
"isError": false,
|
|
878
|
+
"message": "",
|
|
879
|
+
"result": null
|
|
880
|
+
}
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
885
|
+
### `getAllQuestsForAvatarGame`
|
|
886
|
+
|
|
887
|
+
Same data path as <see cref="GetAllQuestsForAvatar"/> but returns a flat game-friendly DTO (no full holon graph / STARNET children). Use for native clients and games; keep <c>all-for-avatar</c> for tools and graph consumers.
|
|
888
|
+
|
|
889
|
+
**GET** `api/quests/all-for-avatar/game`
|
|
890
|
+
|
|
891
|
+
**Request**
|
|
892
|
+
|
|
893
|
+
No request body.
|
|
894
|
+
|
|
895
|
+
**Response**
|
|
896
|
+
|
|
897
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
898
|
+
|
|
899
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
900
|
+
|
|
901
|
+
**Example**
|
|
902
|
+
|
|
903
|
+
```js
|
|
904
|
+
const { isError, message, result } = await star.quests.getAllQuestsForAvatarGame({});
|
|
905
|
+
if (isError) throw new Error(message);
|
|
906
|
+
console.log(result);
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
Example response:
|
|
910
|
+
|
|
911
|
+
```json
|
|
912
|
+
{
|
|
913
|
+
"isError": false,
|
|
914
|
+
"message": "",
|
|
915
|
+
"result": null
|
|
916
|
+
}
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
---
|
|
920
|
+
|
|
921
|
+
### `getIQuest`
|
|
922
|
+
|
|
923
|
+
Retrieves a specific quest by its unique identifier.
|
|
924
|
+
|
|
925
|
+
**GET** `api/quests/{id}`
|
|
926
|
+
|
|
927
|
+
Route parameters:
|
|
928
|
+
|
|
929
|
+
| Field | Type |
|
|
930
|
+
| --- | --- |
|
|
931
|
+
| `id` | `Guid` |
|
|
932
|
+
|
|
933
|
+
**Request**
|
|
934
|
+
|
|
935
|
+
No request body.
|
|
936
|
+
|
|
937
|
+
**Response**
|
|
938
|
+
|
|
939
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
940
|
+
|
|
941
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
942
|
+
|
|
943
|
+
**Example**
|
|
944
|
+
|
|
945
|
+
```js
|
|
946
|
+
const { isError, message, result } = await star.quests.getIQuest({
|
|
947
|
+
id: '<id>'
|
|
948
|
+
});
|
|
949
|
+
if (isError) throw new Error(message);
|
|
950
|
+
console.log(result);
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
Example response:
|
|
954
|
+
|
|
955
|
+
```json
|
|
956
|
+
{
|
|
957
|
+
"isError": false,
|
|
958
|
+
"message": "",
|
|
959
|
+
"result": null
|
|
960
|
+
}
|
|
961
|
+
```
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
### `getIQuestsByAvatar`
|
|
966
|
+
|
|
967
|
+
Retrieves all quests for a specific avatar.
|
|
968
|
+
|
|
969
|
+
**GET** `api/quests/by-avatar/{avatarId}`
|
|
970
|
+
|
|
971
|
+
Route parameters:
|
|
972
|
+
|
|
973
|
+
| Field | Type |
|
|
974
|
+
| --- | --- |
|
|
975
|
+
| `avatarId` | `Guid` |
|
|
976
|
+
|
|
977
|
+
**Request**
|
|
978
|
+
|
|
979
|
+
No request body.
|
|
980
|
+
|
|
981
|
+
**Response**
|
|
982
|
+
|
|
983
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
984
|
+
|
|
985
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
986
|
+
|
|
987
|
+
**Example**
|
|
988
|
+
|
|
989
|
+
```js
|
|
990
|
+
const { isError, message, result } = await star.quests.getIQuestsByAvatar({
|
|
991
|
+
avatarId: '<avatarId>'
|
|
992
|
+
});
|
|
993
|
+
if (isError) throw new Error(message);
|
|
994
|
+
console.log(result);
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
Example response:
|
|
998
|
+
|
|
999
|
+
```json
|
|
1000
|
+
{
|
|
1001
|
+
"isError": false,
|
|
1002
|
+
"message": "",
|
|
1003
|
+
"result": null
|
|
1004
|
+
}
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
---
|
|
1008
|
+
|
|
1009
|
+
### `getQuestLeaderboard`
|
|
1010
|
+
|
|
1011
|
+
Gets quest leaderboard for a specific quest.
|
|
1012
|
+
|
|
1013
|
+
**GET** `api/quests/{id}/leaderboard`
|
|
1014
|
+
|
|
1015
|
+
Route parameters:
|
|
1016
|
+
|
|
1017
|
+
| Field | Type |
|
|
1018
|
+
| --- | --- |
|
|
1019
|
+
| `id` | `Guid` |
|
|
1020
|
+
|
|
1021
|
+
**Request**
|
|
1022
|
+
|
|
1023
|
+
Query parameters:
|
|
1024
|
+
|
|
1025
|
+
| Field | Type |
|
|
1026
|
+
| --- | --- |
|
|
1027
|
+
| `limit` | `int (optional)` |
|
|
1028
|
+
|
|
1029
|
+
**Response**
|
|
1030
|
+
|
|
1031
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1032
|
+
|
|
1033
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1034
|
+
|
|
1035
|
+
**Example**
|
|
1036
|
+
|
|
1037
|
+
```js
|
|
1038
|
+
const { isError, message, result } = await star.quests.getQuestLeaderboard({
|
|
1039
|
+
id: '<id>',
|
|
1040
|
+
limit: 1
|
|
1041
|
+
});
|
|
1042
|
+
if (isError) throw new Error(message);
|
|
1043
|
+
console.log(result);
|
|
1044
|
+
```
|
|
1045
|
+
|
|
1046
|
+
Example response:
|
|
1047
|
+
|
|
1048
|
+
```json
|
|
1049
|
+
{
|
|
1050
|
+
"isError": false,
|
|
1051
|
+
"message": "",
|
|
1052
|
+
"result": null
|
|
1053
|
+
}
|
|
1054
|
+
```
|
|
1055
|
+
|
|
1056
|
+
---
|
|
1057
|
+
|
|
1058
|
+
### `getQuestRewards`
|
|
1059
|
+
|
|
1060
|
+
Gets quest rewards for a specific quest.
|
|
1061
|
+
|
|
1062
|
+
**GET** `api/quests/{id}/rewards`
|
|
1063
|
+
|
|
1064
|
+
Route parameters:
|
|
1065
|
+
|
|
1066
|
+
| Field | Type |
|
|
1067
|
+
| --- | --- |
|
|
1068
|
+
| `id` | `Guid` |
|
|
1069
|
+
|
|
1070
|
+
**Request**
|
|
1071
|
+
|
|
1072
|
+
No request body.
|
|
1073
|
+
|
|
1074
|
+
**Response**
|
|
1075
|
+
|
|
1076
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1077
|
+
|
|
1078
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1079
|
+
|
|
1080
|
+
**Example**
|
|
1081
|
+
|
|
1082
|
+
```js
|
|
1083
|
+
const { isError, message, result } = await star.quests.getQuestRewards({
|
|
1084
|
+
id: '<id>'
|
|
1085
|
+
});
|
|
1086
|
+
if (isError) throw new Error(message);
|
|
1087
|
+
console.log(result);
|
|
1088
|
+
```
|
|
1089
|
+
|
|
1090
|
+
Example response:
|
|
1091
|
+
|
|
1092
|
+
```json
|
|
1093
|
+
{
|
|
1094
|
+
"isError": false,
|
|
1095
|
+
"message": "",
|
|
1096
|
+
"result": null
|
|
1097
|
+
}
|
|
1098
|
+
```
|
|
1099
|
+
|
|
1100
|
+
---
|
|
1101
|
+
|
|
1102
|
+
### `getQuestStats`
|
|
1103
|
+
|
|
1104
|
+
Gets quest statistics for the authenticated avatar.
|
|
1105
|
+
|
|
1106
|
+
**GET** `api/quests/stats`
|
|
1107
|
+
|
|
1108
|
+
**Request**
|
|
1109
|
+
|
|
1110
|
+
No request body.
|
|
1111
|
+
|
|
1112
|
+
**Response**
|
|
1113
|
+
|
|
1114
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1115
|
+
|
|
1116
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1117
|
+
|
|
1118
|
+
**Example**
|
|
1119
|
+
|
|
1120
|
+
```js
|
|
1121
|
+
const { isError, message, result } = await star.quests.getQuestStats({});
|
|
1122
|
+
if (isError) throw new Error(message);
|
|
1123
|
+
console.log(result);
|
|
1124
|
+
```
|
|
1125
|
+
|
|
1126
|
+
Example response:
|
|
1127
|
+
|
|
1128
|
+
```json
|
|
1129
|
+
{
|
|
1130
|
+
"isError": false,
|
|
1131
|
+
"message": "",
|
|
1132
|
+
"result": null
|
|
1133
|
+
}
|
|
1134
|
+
```
|
|
1135
|
+
|
|
1136
|
+
---
|
|
1137
|
+
|
|
1138
|
+
### `getQuestVersions`
|
|
1139
|
+
|
|
1140
|
+
Gets all versions of a specific quest.
|
|
1141
|
+
|
|
1142
|
+
**GET** `api/quests/{id}/versions`
|
|
1143
|
+
|
|
1144
|
+
Route parameters:
|
|
1145
|
+
|
|
1146
|
+
| Field | Type |
|
|
1147
|
+
| --- | --- |
|
|
1148
|
+
| `id` | `Guid` |
|
|
1149
|
+
|
|
1150
|
+
**Request**
|
|
1151
|
+
|
|
1152
|
+
No request body.
|
|
1153
|
+
|
|
1154
|
+
**Response**
|
|
1155
|
+
|
|
1156
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1157
|
+
|
|
1158
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1159
|
+
|
|
1160
|
+
**Example**
|
|
1161
|
+
|
|
1162
|
+
```js
|
|
1163
|
+
const { isError, message, result } = await star.quests.getQuestVersions({
|
|
1164
|
+
id: '<id>'
|
|
1165
|
+
});
|
|
1166
|
+
if (isError) throw new Error(message);
|
|
1167
|
+
console.log(result);
|
|
1168
|
+
```
|
|
1169
|
+
|
|
1170
|
+
Example response:
|
|
1171
|
+
|
|
1172
|
+
```json
|
|
1173
|
+
{
|
|
1174
|
+
"isError": false,
|
|
1175
|
+
"message": "",
|
|
1176
|
+
"result": null
|
|
1177
|
+
}
|
|
1178
|
+
```
|
|
1179
|
+
|
|
1180
|
+
---
|
|
1181
|
+
|
|
1182
|
+
### `getQuestsByStatus`
|
|
1183
|
+
|
|
1184
|
+
Retrieves quests by status.
|
|
1185
|
+
|
|
1186
|
+
**GET** `api/quests/by-status/{status}`
|
|
1187
|
+
|
|
1188
|
+
Route parameters:
|
|
1189
|
+
|
|
1190
|
+
| Field | Type |
|
|
1191
|
+
| --- | --- |
|
|
1192
|
+
| `status` | `string` |
|
|
1193
|
+
|
|
1194
|
+
**Request**
|
|
1195
|
+
|
|
1196
|
+
No request body.
|
|
1197
|
+
|
|
1198
|
+
**Response**
|
|
1199
|
+
|
|
1200
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1201
|
+
|
|
1202
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1203
|
+
|
|
1204
|
+
**Example**
|
|
1205
|
+
|
|
1206
|
+
```js
|
|
1207
|
+
const { isError, message, result } = await star.quests.getQuestsByStatus({
|
|
1208
|
+
status: '<status>'
|
|
1209
|
+
});
|
|
1210
|
+
if (isError) throw new Error(message);
|
|
1211
|
+
console.log(result);
|
|
1212
|
+
```
|
|
1213
|
+
|
|
1214
|
+
Example response:
|
|
1215
|
+
|
|
1216
|
+
```json
|
|
1217
|
+
{
|
|
1218
|
+
"isError": false,
|
|
1219
|
+
"message": "",
|
|
1220
|
+
"result": null
|
|
1221
|
+
}
|
|
1222
|
+
```
|
|
1223
|
+
|
|
1224
|
+
---
|
|
1225
|
+
|
|
1226
|
+
### `getQuestsByStatusGame`
|
|
1227
|
+
|
|
1228
|
+
Same filtering as <see cref="GetQuestsByStatus"/> but returns <see cref="GameQuestSummaryLite"/> rows for small payloads in games.
|
|
1229
|
+
|
|
1230
|
+
**GET** `api/quests/by-status/{status}/game`
|
|
1231
|
+
|
|
1232
|
+
Route parameters:
|
|
1233
|
+
|
|
1234
|
+
| Field | Type |
|
|
1235
|
+
| --- | --- |
|
|
1236
|
+
| `status` | `string` |
|
|
1237
|
+
|
|
1238
|
+
**Request**
|
|
1239
|
+
|
|
1240
|
+
No request body.
|
|
1241
|
+
|
|
1242
|
+
**Response**
|
|
1243
|
+
|
|
1244
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1245
|
+
|
|
1246
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1247
|
+
|
|
1248
|
+
**Example**
|
|
1249
|
+
|
|
1250
|
+
```js
|
|
1251
|
+
const { isError, message, result } = await star.quests.getQuestsByStatusGame({
|
|
1252
|
+
status: '<status>'
|
|
1253
|
+
});
|
|
1254
|
+
if (isError) throw new Error(message);
|
|
1255
|
+
console.log(result);
|
|
1256
|
+
```
|
|
1257
|
+
|
|
1258
|
+
Example response:
|
|
1259
|
+
|
|
1260
|
+
```json
|
|
1261
|
+
{
|
|
1262
|
+
"isError": false,
|
|
1263
|
+
"message": "",
|
|
1264
|
+
"result": null
|
|
1265
|
+
}
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
---
|
|
1269
|
+
|
|
1270
|
+
### `getQuestsByType`
|
|
1271
|
+
|
|
1272
|
+
Retrieves quests by a specific type.
|
|
1273
|
+
|
|
1274
|
+
**GET** `api/quests/by-type/{type}`
|
|
1275
|
+
|
|
1276
|
+
Route parameters:
|
|
1277
|
+
|
|
1278
|
+
| Field | Type |
|
|
1279
|
+
| --- | --- |
|
|
1280
|
+
| `type` | `string` |
|
|
1281
|
+
|
|
1282
|
+
**Request**
|
|
1283
|
+
|
|
1284
|
+
No request body.
|
|
1285
|
+
|
|
1286
|
+
**Response**
|
|
1287
|
+
|
|
1288
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1289
|
+
|
|
1290
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1291
|
+
|
|
1292
|
+
**Example**
|
|
1293
|
+
|
|
1294
|
+
```js
|
|
1295
|
+
const { isError, message, result } = await star.quests.getQuestsByType({
|
|
1296
|
+
type: '<type>'
|
|
1297
|
+
});
|
|
1298
|
+
if (isError) throw new Error(message);
|
|
1299
|
+
console.log(result);
|
|
1300
|
+
```
|
|
1301
|
+
|
|
1302
|
+
Example response:
|
|
1303
|
+
|
|
1304
|
+
```json
|
|
1305
|
+
{
|
|
1306
|
+
"isError": false,
|
|
1307
|
+
"message": "",
|
|
1308
|
+
"result": null
|
|
1309
|
+
}
|
|
1310
|
+
```
|
|
1311
|
+
|
|
1312
|
+
---
|
|
1313
|
+
|
|
1314
|
+
### `loadAllQuestsForAvatar`
|
|
1315
|
+
|
|
1316
|
+
Loads all quests for the authenticated avatar.
|
|
1317
|
+
|
|
1318
|
+
**GET** `api/quests/load-all-for-avatar`
|
|
1319
|
+
|
|
1320
|
+
**Request**
|
|
1321
|
+
|
|
1322
|
+
Query parameters:
|
|
1323
|
+
|
|
1324
|
+
| Field | Type |
|
|
1325
|
+
| --- | --- |
|
|
1326
|
+
| `showAllVersions` | `bool (optional)` |
|
|
1327
|
+
| `version` | `int (optional)` |
|
|
1328
|
+
|
|
1329
|
+
**Response**
|
|
1330
|
+
|
|
1331
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1332
|
+
|
|
1333
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1334
|
+
|
|
1335
|
+
**Example**
|
|
1336
|
+
|
|
1337
|
+
```js
|
|
1338
|
+
const { isError, message, result } = await star.quests.loadAllQuestsForAvatar({
|
|
1339
|
+
showAllVersions: true,
|
|
1340
|
+
version: 1
|
|
1341
|
+
});
|
|
1342
|
+
if (isError) throw new Error(message);
|
|
1343
|
+
console.log(result);
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
Example response:
|
|
1347
|
+
|
|
1348
|
+
```json
|
|
1349
|
+
{
|
|
1350
|
+
"isError": false,
|
|
1351
|
+
"message": "",
|
|
1352
|
+
"result": null
|
|
1353
|
+
}
|
|
1354
|
+
```
|
|
1355
|
+
|
|
1356
|
+
---
|
|
1357
|
+
|
|
1358
|
+
### `loadQuest`
|
|
1359
|
+
|
|
1360
|
+
Loads a quest by ID with optional version and holon type.
|
|
1361
|
+
|
|
1362
|
+
**GET** `api/quests/{id}/load`
|
|
1363
|
+
|
|
1364
|
+
Route parameters:
|
|
1365
|
+
|
|
1366
|
+
| Field | Type |
|
|
1367
|
+
| --- | --- |
|
|
1368
|
+
| `id` | `Guid` |
|
|
1369
|
+
|
|
1370
|
+
**Request**
|
|
1371
|
+
|
|
1372
|
+
Query parameters:
|
|
1373
|
+
|
|
1374
|
+
| Field | Type |
|
|
1375
|
+
| --- | --- |
|
|
1376
|
+
| `version` | `int (optional)` |
|
|
1377
|
+
| `holonType` | `string (optional)` |
|
|
1378
|
+
|
|
1379
|
+
**Response**
|
|
1380
|
+
|
|
1381
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1382
|
+
|
|
1383
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1384
|
+
|
|
1385
|
+
**Example**
|
|
1386
|
+
|
|
1387
|
+
```js
|
|
1388
|
+
const { isError, message, result } = await star.quests.loadQuest({
|
|
1389
|
+
id: '<id>',
|
|
1390
|
+
version: 1,
|
|
1391
|
+
holonType: 'example string'
|
|
1392
|
+
});
|
|
1393
|
+
if (isError) throw new Error(message);
|
|
1394
|
+
console.log(result);
|
|
1395
|
+
```
|
|
1396
|
+
|
|
1397
|
+
Example response:
|
|
1398
|
+
|
|
1399
|
+
```json
|
|
1400
|
+
{
|
|
1401
|
+
"isError": false,
|
|
1402
|
+
"message": "",
|
|
1403
|
+
"result": null
|
|
1404
|
+
}
|
|
1405
|
+
```
|
|
1406
|
+
|
|
1407
|
+
---
|
|
1408
|
+
|
|
1409
|
+
### `loadQuestFromPath`
|
|
1410
|
+
|
|
1411
|
+
Loads a quest from source or installed folder path.
|
|
1412
|
+
|
|
1413
|
+
**GET** `api/quests/load-from-path`
|
|
1414
|
+
|
|
1415
|
+
**Request**
|
|
1416
|
+
|
|
1417
|
+
Query parameters:
|
|
1418
|
+
|
|
1419
|
+
| Field | Type |
|
|
1420
|
+
| --- | --- |
|
|
1421
|
+
| `path` | `string` |
|
|
1422
|
+
| `holonType` | `string (optional)` |
|
|
1423
|
+
|
|
1424
|
+
**Response**
|
|
1425
|
+
|
|
1426
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1427
|
+
|
|
1428
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1429
|
+
|
|
1430
|
+
**Example**
|
|
1431
|
+
|
|
1432
|
+
```js
|
|
1433
|
+
const { isError, message, result } = await star.quests.loadQuestFromPath({
|
|
1434
|
+
path: 'example string',
|
|
1435
|
+
holonType: 'example string'
|
|
1436
|
+
});
|
|
1437
|
+
if (isError) throw new Error(message);
|
|
1438
|
+
console.log(result);
|
|
1439
|
+
```
|
|
1440
|
+
|
|
1441
|
+
Example response:
|
|
1442
|
+
|
|
1443
|
+
```json
|
|
1444
|
+
{
|
|
1445
|
+
"isError": false,
|
|
1446
|
+
"message": "",
|
|
1447
|
+
"result": null
|
|
1448
|
+
}
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
---
|
|
1452
|
+
|
|
1453
|
+
### `loadQuestFromPublished`
|
|
1454
|
+
|
|
1455
|
+
Loads a quest from a published file.
|
|
1456
|
+
|
|
1457
|
+
**GET** `api/quests/load-from-published`
|
|
1458
|
+
|
|
1459
|
+
**Request**
|
|
1460
|
+
|
|
1461
|
+
Query parameters:
|
|
1462
|
+
|
|
1463
|
+
| Field | Type |
|
|
1464
|
+
| --- | --- |
|
|
1465
|
+
| `publishedFilePath` | `string` |
|
|
1466
|
+
|
|
1467
|
+
**Response**
|
|
1468
|
+
|
|
1469
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1470
|
+
|
|
1471
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1472
|
+
|
|
1473
|
+
**Example**
|
|
1474
|
+
|
|
1475
|
+
```js
|
|
1476
|
+
const { isError, message, result } = await star.quests.loadQuestFromPublished({
|
|
1477
|
+
publishedFilePath: 'example string'
|
|
1478
|
+
});
|
|
1479
|
+
if (isError) throw new Error(message);
|
|
1480
|
+
console.log(result);
|
|
1481
|
+
```
|
|
1482
|
+
|
|
1483
|
+
Example response:
|
|
1484
|
+
|
|
1485
|
+
```json
|
|
1486
|
+
{
|
|
1487
|
+
"isError": false,
|
|
1488
|
+
"message": "",
|
|
1489
|
+
"result": null
|
|
1490
|
+
}
|
|
1491
|
+
```
|
|
1492
|
+
|
|
1493
|
+
---
|
|
1494
|
+
|
|
1495
|
+
### `loadQuestVersion`
|
|
1496
|
+
|
|
1497
|
+
Loads a specific version of a quest.
|
|
1498
|
+
|
|
1499
|
+
**GET** `api/quests/{id}/version/{version}`
|
|
1500
|
+
|
|
1501
|
+
Route parameters:
|
|
1502
|
+
|
|
1503
|
+
| Field | Type |
|
|
1504
|
+
| --- | --- |
|
|
1505
|
+
| `id` | `Guid` |
|
|
1506
|
+
| `version` | `string` |
|
|
1507
|
+
|
|
1508
|
+
**Request**
|
|
1509
|
+
|
|
1510
|
+
No request body.
|
|
1511
|
+
|
|
1512
|
+
**Response**
|
|
1513
|
+
|
|
1514
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1515
|
+
|
|
1516
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1517
|
+
|
|
1518
|
+
**Example**
|
|
1519
|
+
|
|
1520
|
+
```js
|
|
1521
|
+
const { isError, message, result } = await star.quests.loadQuestVersion({
|
|
1522
|
+
id: '<id>',
|
|
1523
|
+
version: '<version>'
|
|
1524
|
+
});
|
|
1525
|
+
if (isError) throw new Error(message);
|
|
1526
|
+
console.log(result);
|
|
1527
|
+
```
|
|
1528
|
+
|
|
1529
|
+
Example response:
|
|
1530
|
+
|
|
1531
|
+
```json
|
|
1532
|
+
{
|
|
1533
|
+
"isError": false,
|
|
1534
|
+
"message": "",
|
|
1535
|
+
"result": null
|
|
1536
|
+
}
|
|
1537
|
+
```
|
|
1538
|
+
|
|
1539
|
+
---
|
|
1540
|
+
|
|
1541
|
+
### `publishQuest`
|
|
1542
|
+
|
|
1543
|
+
Publishes a quest to the STARNET system.
|
|
1544
|
+
|
|
1545
|
+
**POST** `api/quests/{id}/publish`
|
|
1546
|
+
|
|
1547
|
+
Route parameters:
|
|
1548
|
+
|
|
1549
|
+
| Field | Type |
|
|
1550
|
+
| --- | --- |
|
|
1551
|
+
| `id` | `Guid` |
|
|
1552
|
+
|
|
1553
|
+
**Request**
|
|
1554
|
+
|
|
1555
|
+
Body type: `PublishRequest`
|
|
1556
|
+
|
|
1557
|
+
| Field | Type |
|
|
1558
|
+
| --- | --- |
|
|
1559
|
+
| `SourcePath` | `string` |
|
|
1560
|
+
| `LaunchTarget` | `string` |
|
|
1561
|
+
| `PublishPath` | `string` |
|
|
1562
|
+
| `Edit` | `bool` |
|
|
1563
|
+
| `RegisterOnSTARNET` | `bool` |
|
|
1564
|
+
| `GenerateBinary` | `bool` |
|
|
1565
|
+
| `UploadToCloud` | `bool` |
|
|
1566
|
+
|
|
1567
|
+
**Response**
|
|
1568
|
+
|
|
1569
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1570
|
+
|
|
1571
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1572
|
+
|
|
1573
|
+
**Example**
|
|
1574
|
+
|
|
1575
|
+
```js
|
|
1576
|
+
const { isError, message, result } = await star.quests.publishQuest({
|
|
1577
|
+
id: '<id>',
|
|
1578
|
+
sourcePath: "example string",
|
|
1579
|
+
launchTarget: "example string",
|
|
1580
|
+
publishPath: "example string",
|
|
1581
|
+
edit: true,
|
|
1582
|
+
registerOnSTARNET: true,
|
|
1583
|
+
generateBinary: true,
|
|
1584
|
+
uploadToCloud: true
|
|
1585
|
+
});
|
|
1586
|
+
if (isError) throw new Error(message);
|
|
1587
|
+
console.log(result);
|
|
1588
|
+
```
|
|
1589
|
+
|
|
1590
|
+
Example response:
|
|
1591
|
+
|
|
1592
|
+
```json
|
|
1593
|
+
{
|
|
1594
|
+
"isError": false,
|
|
1595
|
+
"message": "",
|
|
1596
|
+
"result": null
|
|
1597
|
+
}
|
|
1598
|
+
```
|
|
1599
|
+
|
|
1600
|
+
---
|
|
1601
|
+
|
|
1602
|
+
### `removeQuestObjective`
|
|
1603
|
+
|
|
1604
|
+
Removes an objective (sub-quest) from a quest.
|
|
1605
|
+
|
|
1606
|
+
**DELETE** `api/quests/{parentId}/objectives/{objectiveId}`
|
|
1607
|
+
|
|
1608
|
+
Route parameters:
|
|
1609
|
+
|
|
1610
|
+
| Field | Type |
|
|
1611
|
+
| --- | --- |
|
|
1612
|
+
| `parentId` | `Guid` |
|
|
1613
|
+
| `objectiveId` | `Guid` |
|
|
1614
|
+
|
|
1615
|
+
**Request**
|
|
1616
|
+
|
|
1617
|
+
No request body.
|
|
1618
|
+
|
|
1619
|
+
**Response**
|
|
1620
|
+
|
|
1621
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1622
|
+
|
|
1623
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1624
|
+
|
|
1625
|
+
**Example**
|
|
1626
|
+
|
|
1627
|
+
```js
|
|
1628
|
+
const { isError, message, result } = await star.quests.removeQuestObjective({
|
|
1629
|
+
parentId: '<parentId>',
|
|
1630
|
+
objectiveId: '<objectiveId>'
|
|
1631
|
+
});
|
|
1632
|
+
if (isError) throw new Error(message);
|
|
1633
|
+
console.log(result);
|
|
1634
|
+
```
|
|
1635
|
+
|
|
1636
|
+
Example response:
|
|
1637
|
+
|
|
1638
|
+
```json
|
|
1639
|
+
{
|
|
1640
|
+
"isError": false,
|
|
1641
|
+
"message": "",
|
|
1642
|
+
"result": null
|
|
1643
|
+
}
|
|
1644
|
+
```
|
|
1645
|
+
|
|
1646
|
+
---
|
|
1647
|
+
|
|
1648
|
+
### `removeSubQuest`
|
|
1649
|
+
|
|
1650
|
+
Removes a sub-quest (child quest) from a quest.
|
|
1651
|
+
|
|
1652
|
+
**DELETE** `api/quests/{parentId}/subquests/{subQuestId}`
|
|
1653
|
+
|
|
1654
|
+
Route parameters:
|
|
1655
|
+
|
|
1656
|
+
| Field | Type |
|
|
1657
|
+
| --- | --- |
|
|
1658
|
+
| `parentId` | `Guid` |
|
|
1659
|
+
| `subQuestId` | `Guid` |
|
|
1660
|
+
|
|
1661
|
+
**Request**
|
|
1662
|
+
|
|
1663
|
+
No request body.
|
|
1664
|
+
|
|
1665
|
+
**Response**
|
|
1666
|
+
|
|
1667
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1668
|
+
|
|
1669
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1670
|
+
|
|
1671
|
+
**Example**
|
|
1672
|
+
|
|
1673
|
+
```js
|
|
1674
|
+
const { isError, message, result } = await star.quests.removeSubQuest({
|
|
1675
|
+
parentId: '<parentId>',
|
|
1676
|
+
subQuestId: '<subQuestId>'
|
|
1677
|
+
});
|
|
1678
|
+
if (isError) throw new Error(message);
|
|
1679
|
+
console.log(result);
|
|
1680
|
+
```
|
|
1681
|
+
|
|
1682
|
+
Example response:
|
|
1683
|
+
|
|
1684
|
+
```json
|
|
1685
|
+
{
|
|
1686
|
+
"isError": false,
|
|
1687
|
+
"message": "",
|
|
1688
|
+
"result": null
|
|
1689
|
+
}
|
|
1690
|
+
```
|
|
1691
|
+
|
|
1692
|
+
---
|
|
1693
|
+
|
|
1694
|
+
### `republishQuest`
|
|
1695
|
+
|
|
1696
|
+
Republishes a quest to the STARNET system.
|
|
1697
|
+
|
|
1698
|
+
**POST** `api/quests/{id}/republish`
|
|
1699
|
+
|
|
1700
|
+
Route parameters:
|
|
1701
|
+
|
|
1702
|
+
| Field | Type |
|
|
1703
|
+
| --- | --- |
|
|
1704
|
+
| `id` | `Guid` |
|
|
1705
|
+
|
|
1706
|
+
**Request**
|
|
1707
|
+
|
|
1708
|
+
Body fields:
|
|
1709
|
+
|
|
1710
|
+
| Field | Type |
|
|
1711
|
+
| --- | --- |
|
|
1712
|
+
| `version` | `int (optional)` |
|
|
1713
|
+
|
|
1714
|
+
**Response**
|
|
1715
|
+
|
|
1716
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1717
|
+
|
|
1718
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1719
|
+
|
|
1720
|
+
**Example**
|
|
1721
|
+
|
|
1722
|
+
```js
|
|
1723
|
+
const { isError, message, result } = await star.quests.republishQuest({
|
|
1724
|
+
id: '<id>',
|
|
1725
|
+
version: 1
|
|
1726
|
+
});
|
|
1727
|
+
if (isError) throw new Error(message);
|
|
1728
|
+
console.log(result);
|
|
1729
|
+
```
|
|
1730
|
+
|
|
1731
|
+
Example response:
|
|
1732
|
+
|
|
1733
|
+
```json
|
|
1734
|
+
{
|
|
1735
|
+
"isError": false,
|
|
1736
|
+
"message": "",
|
|
1737
|
+
"result": null
|
|
1738
|
+
}
|
|
1739
|
+
```
|
|
1740
|
+
|
|
1741
|
+
---
|
|
1742
|
+
|
|
1743
|
+
### `resetObjectiveProgress`
|
|
1744
|
+
|
|
1745
|
+
Clears all progress dictionaries on the quest and its embedded objectives (kills, collected counts, XP, etc.) to 0; leaves Need* requirements unchanged. If the quest was Completed, status becomes InProgress.</summary>
|
|
1746
|
+
|
|
1747
|
+
**POST** `api/quests/{id}/progress/reset`
|
|
1748
|
+
|
|
1749
|
+
Route parameters:
|
|
1750
|
+
|
|
1751
|
+
| Field | Type |
|
|
1752
|
+
| --- | --- |
|
|
1753
|
+
| `id` | `Guid` |
|
|
1754
|
+
|
|
1755
|
+
**Request**
|
|
1756
|
+
|
|
1757
|
+
No request body.
|
|
1758
|
+
|
|
1759
|
+
**Response**
|
|
1760
|
+
|
|
1761
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1762
|
+
|
|
1763
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1764
|
+
|
|
1765
|
+
**Example**
|
|
1766
|
+
|
|
1767
|
+
```js
|
|
1768
|
+
const { isError, message, result } = await star.quests.resetObjectiveProgress({
|
|
1769
|
+
id: '<id>'
|
|
1770
|
+
});
|
|
1771
|
+
if (isError) throw new Error(message);
|
|
1772
|
+
console.log(result);
|
|
1773
|
+
```
|
|
1774
|
+
|
|
1775
|
+
Example response:
|
|
1776
|
+
|
|
1777
|
+
```json
|
|
1778
|
+
{
|
|
1779
|
+
"isError": false,
|
|
1780
|
+
"message": "",
|
|
1781
|
+
"result": null
|
|
1782
|
+
}
|
|
1783
|
+
```
|
|
1784
|
+
|
|
1785
|
+
---
|
|
1786
|
+
|
|
1787
|
+
### `searchQuests`
|
|
1788
|
+
|
|
1789
|
+
Searches quests by name or description.
|
|
1790
|
+
|
|
1791
|
+
**GET** `api/quests/search`
|
|
1792
|
+
|
|
1793
|
+
**Request**
|
|
1794
|
+
|
|
1795
|
+
Query parameters:
|
|
1796
|
+
|
|
1797
|
+
| Field | Type |
|
|
1798
|
+
| --- | --- |
|
|
1799
|
+
| `query` | `string` |
|
|
1800
|
+
|
|
1801
|
+
**Response**
|
|
1802
|
+
|
|
1803
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1804
|
+
|
|
1805
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1806
|
+
|
|
1807
|
+
**Example**
|
|
1808
|
+
|
|
1809
|
+
```js
|
|
1810
|
+
const { isError, message, result } = await star.quests.searchQuests({
|
|
1811
|
+
query: 'example string'
|
|
1812
|
+
});
|
|
1813
|
+
if (isError) throw new Error(message);
|
|
1814
|
+
console.log(result);
|
|
1815
|
+
```
|
|
1816
|
+
|
|
1817
|
+
Example response:
|
|
1818
|
+
|
|
1819
|
+
```json
|
|
1820
|
+
{
|
|
1821
|
+
"isError": false,
|
|
1822
|
+
"message": "",
|
|
1823
|
+
"result": null
|
|
1824
|
+
}
|
|
1825
|
+
```
|
|
1826
|
+
|
|
1827
|
+
---
|
|
1828
|
+
|
|
1829
|
+
### `unpublishQuest`
|
|
1830
|
+
|
|
1831
|
+
Unpublishes a quest from the STARNET system.
|
|
1832
|
+
|
|
1833
|
+
**POST** `api/quests/{id}/unpublish`
|
|
1834
|
+
|
|
1835
|
+
Route parameters:
|
|
1836
|
+
|
|
1837
|
+
| Field | Type |
|
|
1838
|
+
| --- | --- |
|
|
1839
|
+
| `id` | `Guid` |
|
|
1840
|
+
|
|
1841
|
+
**Request**
|
|
1842
|
+
|
|
1843
|
+
Body fields:
|
|
1844
|
+
|
|
1845
|
+
| Field | Type |
|
|
1846
|
+
| --- | --- |
|
|
1847
|
+
| `version` | `int (optional)` |
|
|
1848
|
+
|
|
1849
|
+
**Response**
|
|
1850
|
+
|
|
1851
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1852
|
+
|
|
1853
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1854
|
+
|
|
1855
|
+
**Example**
|
|
1856
|
+
|
|
1857
|
+
```js
|
|
1858
|
+
const { isError, message, result } = await star.quests.unpublishQuest({
|
|
1859
|
+
id: '<id>',
|
|
1860
|
+
version: 1
|
|
1861
|
+
});
|
|
1862
|
+
if (isError) throw new Error(message);
|
|
1863
|
+
console.log(result);
|
|
1864
|
+
```
|
|
1865
|
+
|
|
1866
|
+
Example response:
|
|
1867
|
+
|
|
1868
|
+
```json
|
|
1869
|
+
{
|
|
1870
|
+
"isError": false,
|
|
1871
|
+
"message": "",
|
|
1872
|
+
"result": null
|
|
1873
|
+
}
|
|
1874
|
+
```
|
|
1875
|
+
|
|
1876
|
+
---
|
|
1877
|
+
|
|
1878
|
+
### `updateIQuest`
|
|
1879
|
+
|
|
1880
|
+
Updates an existing quest by its unique identifier.
|
|
1881
|
+
|
|
1882
|
+
**PUT** `api/quests/{id}`
|
|
1883
|
+
|
|
1884
|
+
Route parameters:
|
|
1885
|
+
|
|
1886
|
+
| Field | Type |
|
|
1887
|
+
| --- | --- |
|
|
1888
|
+
| `id` | `Guid` |
|
|
1889
|
+
|
|
1890
|
+
**Request**
|
|
1891
|
+
|
|
1892
|
+
Body type: `Quest`
|
|
1893
|
+
|
|
1894
|
+
| Field | Type |
|
|
1895
|
+
| --- | --- |
|
|
1896
|
+
| `Id` | `Guid` |
|
|
1897
|
+
| `Name` | `string` |
|
|
1898
|
+
| `Description` | `string` |
|
|
1899
|
+
| `Type` | `QuestType` |
|
|
1900
|
+
| `Difficulty` | `QuestDifficulty` |
|
|
1901
|
+
| `RewardKarma` | `long` |
|
|
1902
|
+
| `RewardExperience` | `long` |
|
|
1903
|
+
| `Requirements` | `List<string>` |
|
|
1904
|
+
| `IsActive` | `bool` |
|
|
1905
|
+
| `CreatedAt` | `DateTime` |
|
|
1906
|
+
|
|
1907
|
+
**Response**
|
|
1908
|
+
|
|
1909
|
+
Standard `OASISResult` envelope (see top of this page) with:
|
|
1910
|
+
|
|
1911
|
+
`result` type: `IActionResult` (not part of the request/response payload).
|
|
1912
|
+
|
|
1913
|
+
**Example**
|
|
1914
|
+
|
|
1915
|
+
```js
|
|
1916
|
+
const { isError, message, result } = await star.quests.updateIQuest({
|
|
1917
|
+
id: "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
|
1918
|
+
name: "example string",
|
|
1919
|
+
description: "example string",
|
|
1920
|
+
type: { },
|
|
1921
|
+
difficulty: { },
|
|
1922
|
+
rewardKarma: 1,
|
|
1923
|
+
rewardExperience: 1,
|
|
1924
|
+
requirements: ["example string"],
|
|
1925
|
+
isActive: true,
|
|
1926
|
+
createdAt: "2026-01-01T00:00:00Z"
|
|
1927
|
+
});
|
|
1928
|
+
if (isError) throw new Error(message);
|
|
1929
|
+
console.log(result);
|
|
1930
|
+
```
|
|
1931
|
+
|
|
1932
|
+
Example response:
|
|
1933
|
+
|
|
1934
|
+
```json
|
|
1935
|
+
{
|
|
1936
|
+
"isError": false,
|
|
1937
|
+
"message": "",
|
|
1938
|
+
"result": null
|
|
1939
|
+
}
|
|
1940
|
+
```
|
|
1941
|
+
|