@bedrock-rbx/ocale 0.1.0-beta.9 → 0.1.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.
Files changed (81) hide show
  1. package/README.md +182 -0
  2. package/dist/badges.d.mts +33 -2
  3. package/dist/badges.d.mts.map +1 -1
  4. package/dist/badges.mjs +16 -4
  5. package/dist/badges.mjs.map +1 -1
  6. package/dist/{data.generated-Cb6g6asv.d.mts → data.generated-B2ceLfSn.d.mts} +9 -1
  7. package/dist/data.generated-B2ceLfSn.d.mts.map +1 -0
  8. package/dist/developer-products.d.mts +38 -2
  9. package/dist/developer-products.d.mts.map +1 -1
  10. package/dist/developer-products.mjs +32 -8
  11. package/dist/developer-products.mjs.map +1 -1
  12. package/dist/game-passes.d.mts +40 -2
  13. package/dist/game-passes.d.mts.map +1 -1
  14. package/dist/game-passes.mjs +30 -6
  15. package/dist/game-passes.mjs.map +1 -1
  16. package/dist/index.d.mts +21 -12
  17. package/dist/index.d.mts.map +1 -1
  18. package/dist/index.mjs +5 -5
  19. package/dist/locales.d.mts +1 -1
  20. package/dist/locales.mjs +2 -0
  21. package/dist/locales.mjs.map +1 -1
  22. package/dist/luau-execution.d.mts +22 -3
  23. package/dist/luau-execution.d.mts.map +1 -1
  24. package/dist/luau-execution.mjs +29 -13
  25. package/dist/luau-execution.mjs.map +1 -1
  26. package/dist/places.d.mts +20 -2
  27. package/dist/places.d.mts.map +1 -1
  28. package/dist/places.mjs +34 -14
  29. package/dist/places.mjs.map +1 -1
  30. package/dist/{poll-timeout-Dg_QFEqi.mjs → poll-timeout-C0nmJzOd.mjs} +6 -2
  31. package/dist/poll-timeout-C0nmJzOd.mjs.map +1 -0
  32. package/dist/{polling-helpers-CS00apdU.mjs → polling-helpers-BcycDhDm.mjs} +225 -78
  33. package/dist/polling-helpers-BcycDhDm.mjs.map +1 -0
  34. package/dist/{polling-BMrYajok.d.mts → polling-rj0dGREg.d.mts} +73 -14
  35. package/dist/polling-rj0dGREg.d.mts.map +1 -0
  36. package/dist/{price-information-DIrvwCmd.mjs → price-information-DK83Wul1.mjs} +2 -2
  37. package/dist/{price-information-DIrvwCmd.mjs.map → price-information-DK83Wul1.mjs.map} +1 -1
  38. package/dist/{rate-limit-D1q2Js-z.mjs → rate-limit-Co9i28qi.mjs} +30 -2
  39. package/dist/rate-limit-Co9i28qi.mjs.map +1 -0
  40. package/dist/{resource-client-D6Efj9fU.mjs → resource-client-C_D--PYX.mjs} +328 -243
  41. package/dist/resource-client-C_D--PYX.mjs.map +1 -0
  42. package/dist/retry-CbHBw60o.mjs +380 -0
  43. package/dist/retry-CbHBw60o.mjs.map +1 -0
  44. package/dist/retry-r1TXe5Zd.d.mts +189 -0
  45. package/dist/retry-r1TXe5Zd.d.mts.map +1 -0
  46. package/dist/{signatures-B5Fojgn0.mjs → signatures-JF-7Psce.mjs} +1 -1
  47. package/dist/{signatures-B5Fojgn0.mjs.map → signatures-JF-7Psce.mjs.map} +1 -1
  48. package/dist/storage.d.mts +30 -27
  49. package/dist/storage.d.mts.map +1 -1
  50. package/dist/storage.mjs +46 -31
  51. package/dist/storage.mjs.map +1 -1
  52. package/dist/testing.d.mts +24 -9
  53. package/dist/testing.d.mts.map +1 -1
  54. package/dist/testing.mjs +2 -2
  55. package/dist/testing.mjs.map +1 -1
  56. package/dist/{to-blob-B27VhoRp.mjs → to-blob-RPqMBuft.mjs} +1 -1
  57. package/dist/{to-blob-B27VhoRp.mjs.map → to-blob-RPqMBuft.mjs.map} +1 -1
  58. package/dist/{types-CwtZT1ek.d.mts → types-CRiJg5EQ.d.mts} +46 -4
  59. package/dist/types-CRiJg5EQ.d.mts.map +1 -0
  60. package/dist/universes.d.mts +47 -5
  61. package/dist/universes.d.mts.map +1 -1
  62. package/dist/universes.mjs +31 -15
  63. package/dist/universes.mjs.map +1 -1
  64. package/dist/{validation-DkL5KQqz.mjs → validation-9oU6qNNQ.mjs} +4 -2
  65. package/dist/validation-9oU6qNNQ.mjs.map +1 -0
  66. package/dist/{wire-CeL6W_V7.d.mts → wire-D3K-a-UP.d.mts} +3 -1
  67. package/dist/wire-D3K-a-UP.d.mts.map +1 -0
  68. package/package.json +7 -6
  69. package/dist/data.generated-Cb6g6asv.d.mts.map +0 -1
  70. package/dist/permission-error-DOVtNq3A.mjs +0 -46
  71. package/dist/permission-error-DOVtNq3A.mjs.map +0 -1
  72. package/dist/poll-timeout-Dg_QFEqi.mjs.map +0 -1
  73. package/dist/polling-BMrYajok.d.mts.map +0 -1
  74. package/dist/polling-helpers-CS00apdU.mjs.map +0 -1
  75. package/dist/rate-limit-BYuizHoD.d.mts +0 -92
  76. package/dist/rate-limit-BYuizHoD.d.mts.map +0 -1
  77. package/dist/rate-limit-D1q2Js-z.mjs.map +0 -1
  78. package/dist/resource-client-D6Efj9fU.mjs.map +0 -1
  79. package/dist/types-CwtZT1ek.d.mts.map +0 -1
  80. package/dist/validation-DkL5KQqz.mjs.map +0 -1
  81. package/dist/wire-CeL6W_V7.d.mts.map +0 -1
@@ -4,13 +4,19 @@
4
4
  *
5
5
  * All specific error types (RateLimitError, ApiError, NetworkError)
6
6
  * extend this class, enabling `instanceof OpenCloudError` checks.
7
+ *
8
+ * @since 0.1.0
7
9
  */
8
10
  declare class OpenCloudError extends Error {
9
11
  override readonly name: string;
10
12
  }
11
13
  //#endregion
12
14
  //#region src/internal/utils/sleep.d.ts
13
- /** Injectable sleep function signature for testing. */
15
+ /**
16
+ * Injectable sleep function signature for testing.
17
+ *
18
+ * @since 0.1.0
19
+ */
14
20
  type SleepFunc = (ms: number) => Promise<void>;
15
21
  //#endregion
16
22
  //#region src/types.d.ts
@@ -20,6 +26,8 @@ type SleepFunc = (ms: number) => Promise<void>;
20
26
  * Every SDK client method returns `Promise<Result<T, OpenCloudError>>`.
21
27
  * Errors are never thrown; they are returned as `{ err, success: false }`.
22
28
  *
29
+ * @since 0.1.0
30
+ *
23
31
  * @template T - The success value type.
24
32
  * @template E - The error type (defaults to `Error`).
25
33
  *
@@ -65,6 +73,8 @@ type Result<T, E = Error> = {
65
73
  * `null`-vs-absent variants to `undefined` so callers only ever see one
66
74
  * shape.
67
75
  *
76
+ * @since 0.1.0
77
+ *
68
78
  * @template T - The public item type for the listed resource.
69
79
  *
70
80
  * @example
@@ -91,6 +101,8 @@ interface Page<T> {
91
101
  //#region src/client/types.d.ts
92
102
  /**
93
103
  * A normalized HTTP request to send to the Roblox Open Cloud API.
104
+ *
105
+ * @since 0.1.0
94
106
  */
95
107
  interface HttpRequest {
96
108
  /** The request body. */
@@ -108,6 +120,8 @@ interface HttpRequest {
108
120
  }
109
121
  /**
110
122
  * A normalized HTTP response from the Roblox Open Cloud API.
123
+ *
124
+ * @since 0.1.0
111
125
  */
112
126
  interface HttpResponse {
113
127
  /**
@@ -123,6 +137,8 @@ interface HttpResponse {
123
137
  }
124
138
  /**
125
139
  * Per-request configuration passed to {@link HttpClient.request}.
140
+ *
141
+ * @since 0.1.0
126
142
  */
127
143
  interface RequestConfig {
128
144
  /** The Roblox Open Cloud API key. */
@@ -135,6 +151,8 @@ interface RequestConfig {
135
151
  /**
136
152
  * HTTP transport abstraction. Implementations classify every response into
137
153
  * a typed {@link Result}.
154
+ *
155
+ * @since 0.1.0
138
156
  */
139
157
  interface HttpClient {
140
158
  /** Sends an HTTP request and classifies the response. */
@@ -143,6 +161,8 @@ interface HttpClient {
143
161
  /**
144
162
  * Client-level observability hooks. All hooks are notification-only and
145
163
  * fire-and-forget; they cannot alter retry behaviour.
164
+ *
165
+ * @since 0.1.0
146
166
  */
147
167
  interface OpenCloudHooks {
148
168
  /** Fired before the SDK sleeps for a computed retry or rate-limit wait. */
@@ -155,6 +175,8 @@ interface OpenCloudHooks {
155
175
  /**
156
176
  * Options accepted by every resource client constructor. Cross-cutting
157
177
  * configuration that applies to all requests made through the client instance.
178
+ *
179
+ * @since 0.1.0
158
180
  */
159
181
  interface OpenCloudClientOptions {
160
182
  /** The Roblox Open Cloud API key used as the default for every request. */
@@ -179,6 +201,16 @@ interface OpenCloudClientOptions {
179
201
  * method (e.g. `create` only retries `429`).
180
202
  */
181
203
  readonly retryableStatuses?: ReadonlyArray<number>;
204
+ /**
205
+ * Node-style transport error codes eligible for retry when a request fails
206
+ * with a `NetworkError` (e.g. `["ECONNRESET", "ETIMEDOUT"]`).
207
+ * Defaults to the idempotent-method transient set. Create methods default
208
+ * to none and cannot be relaxed by a client-level value. Pass the exported
209
+ * `TRANSIENT_TRANSPORT_CODES` set (or your own subset) on a single call's
210
+ * {@link RequestOptions} to opt a create into transport retries when a
211
+ * duplicate resource is acceptable.
212
+ */
213
+ readonly retryableTransportCodes?: ReadonlyArray<string>;
182
214
  /** Fallback delay function used when no server hint is available. */
183
215
  readonly retryDelay?: (attempt: number) => number;
184
216
  /**
@@ -188,15 +220,25 @@ interface OpenCloudClientOptions {
188
220
  * use the default `setTimeout`-backed sleep.
189
221
  */
190
222
  readonly sleep?: SleepFunc;
191
- /** Per-request timeout in milliseconds. Defaults to `30_000`. */
223
+ /**
224
+ * Default per-request timeout in milliseconds for JSON-bound methods,
225
+ * defaulting to `30_000`. Upload methods (those whose request body is
226
+ * `FormData` or `Uint8Array`, such as place publishes and icon uploads)
227
+ * have no default deadline and ignore this option: upload latency is
228
+ * bandwidth-bound, and the SDK cannot size a wall-clock budget without
229
+ * knowing payload size and link quality. Set a deadline on any single
230
+ * call, upload or otherwise, with `options.timeout`.
231
+ */
192
232
  readonly timeout?: number;
193
233
  }
194
234
  /**
195
235
  * Per-request override shape. Any subset of the overridable client options
196
236
  * may be supplied for a single request; omitted fields fall through to the
197
237
  * client-level defaults.
238
+ *
239
+ * @since 0.1.0
198
240
  */
199
- type RequestOptions = Partial<Pick<OpenCloudClientOptions, "apiKey" | "baseUrl" | "maxRetries" | "retryableStatuses" | "retryDelay" | "timeout">>;
241
+ type RequestOptions = Partial<Pick<OpenCloudClientOptions, "apiKey" | "baseUrl" | "maxRetries" | "retryableStatuses" | "retryableTransportCodes" | "retryDelay" | "timeout">>;
200
242
  /**
201
243
  * Supported request body types.
202
244
  *
@@ -211,4 +253,4 @@ type RequestOptions = Partial<Pick<OpenCloudClientOptions, "apiKey" | "baseUrl"
211
253
  type HttpRequestBody = FormData | Record<string, unknown> | Uint8Array<ArrayBuffer> | undefined;
212
254
  //#endregion
213
255
  export { OpenCloudHooks as a, Page as c, OpenCloudError as d, OpenCloudClientOptions as i, Result as l, HttpRequest as n, RequestConfig as o, HttpResponse as r, RequestOptions as s, HttpClient as t, SleepFunc as u };
214
- //# sourceMappingURL=types-CwtZT1ek.d.mts.map
256
+ //# sourceMappingURL=types-CRiJg5EQ.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-CRiJg5EQ.d.mts","names":[],"sources":["../src/errors/base.ts","../src/internal/utils/sleep.ts","../src/types.ts","../src/client/types.ts"],"mappings":";;AAQA;;;;AAC0B;;;cADb,cAAA,SAAuB,KAAA;EAAA,kBACV,IAAA;AAAA;;;;AAD1B;;;;KCHY,SAAA,IAAa,EAAA,aAAe,OAAA;;;;ADGxC;;;;AAC0B;;;;ACJ1B;;;;AAAwC;;;;AC+BxC;;;;;;;;;;;;;;;;;;AAA0E;KAA9D,MAAA,QAAc,KAAA;EAAW,IAAA,EAAM,CAAA;EAAG,OAAA;AAAA;EAAoB,GAAA,EAAK,CAAA;EAAG,OAAA;AAAA;AAkChE;;;;AC3DV;;;;;;;;;;;;;;;;AAYU;AAQV;;;;;;;ADuCU,UAJO,IAAA;;WAEP,KAAA,EAAO,aAAA,CAAc,CAAA;EC3BrB;EAAA,SD6BA,aAAA;AAAA;;;;AF7DgB;;;;UGET,WAAA;EFNL;EAAA,SEQF,IAAA,GAAO,eAAA;EFRuB;AAAA;;;;EAAA,SEc9B,OAAA,GAAU,QAAA,CAAS,MAAA;EDiBjB;EAAA,SCfF,MAAA;;WAEA,GAAA;AAAA;;;;;;UAQO,YAAA;;;;;;WAMP,IAAA;EDDgE;EAAA,SCGhE,OAAA,EAAS,QAAA,CAAS,MAAA;ED2BX;EAAA,SCzBP,MAAA;AAAA;;;;;;UAQO,aAAA;EDqBP;EAAA,SCnBA,MAAA;;WAEA,OAAA;EA1CV;EAAA,SA4CU,OAAA;AAAA;;;;;;;UASO,UAAA;;EAEhB,OAAA,CACC,OAAA,EAAS,WAAA,EACT,MAAA,EAAQ,aAAA,GACN,OAAA,CAAQ,MAAA,CAAO,YAAA,EAAc,cAAA;AAAA;;;;AA9CvB;AAQV;;UA+CiB,cAAA;EAvCE;EAAA,SAyCT,WAAA,IAAe,MAAA;;WAEf,SAAA,IAAa,OAAA,EAAS,WAAA;;WAEtB,OAAA,IAAW,OAAA,UAAiB,KAAA,EAAO,cAAA;AAAA;AA3CnC;AAQV;;;;;AARU,UAoDO,sBAAA;;WAEP,MAAA;EAxCA;EAAA,SA0CA,OAAA;EAjCO;EAAA,SAmCP,KAAA,GAAQ,cAAA;;;;;;;;WAQR,UAAA,GAAa,UAAA;;WAEb,UAAA;;;;;;WAMA,iBAAA,GAAoB,aAAA;;;AA9CG;AASjC;;;;;;WA+CU,uBAAA,GAA0B,aAAA;;WAE1B,UAAA,IAAc,OAAA;;;;;;AA3CqB;WAkDnC,KAAA,GAAQ,SAAA;EAzCD;;;;;;;;;EAAA,SAmDP,OAAA;AAAA;;;;;;;;KAUE,cAAA,GAAiB,OAAA,CAC5B,IAAA,CACC,sBAAA;;;;;;;;AAZQ;AAUV;;;KAwBK,eAAA,GAAkB,QAAA,GAAW,MAAA,oBAA0B,UAAA,CAAW,WAAA"}
@@ -1,10 +1,12 @@
1
- import { d as OpenCloudError, i as OpenCloudClientOptions, l as Result, s as RequestOptions } from "./types-CwtZT1ek.mjs";
2
- import { i as RobloxLocale, r as RobloxLanguageCode } from "./data.generated-Cb6g6asv.mjs";
3
- import { n as GameIconState } from "./wire-CeL6W_V7.mjs";
1
+ import { d as OpenCloudError, i as OpenCloudClientOptions, l as Result, s as RequestOptions } from "./types-CRiJg5EQ.mjs";
2
+ import { i as RobloxLocale, r as RobloxLanguageCode } from "./data.generated-B2ceLfSn.mjs";
3
+ import { n as GameIconState } from "./wire-D3K-a-UP.mjs";
4
4
 
5
5
  //#region src/domains/cloud-v2/universes/types.d.ts
6
6
  /**
7
7
  * Caller-supplied input for the `get` method on `UniversesClient`.
8
+ *
9
+ * @since 0.1.0
8
10
  */
9
11
  interface GetUniverseParameters {
10
12
  /** Stringified ID of the universe to fetch. */
@@ -12,6 +14,8 @@ interface GetUniverseParameters {
12
14
  }
13
15
  /**
14
16
  * A social link that may be associated with a universe.
17
+ *
18
+ * @since 0.1.0
15
19
  */
16
20
  interface SocialLink {
17
21
  /** Display title of the link. */
@@ -19,7 +23,11 @@ interface SocialLink {
19
23
  /** Destination URI. */
20
24
  readonly uri: string;
21
25
  }
22
- /** Public visibility classification. */
26
+ /**
27
+ * Public visibility classification.
28
+ *
29
+ * @since 0.1.0
30
+ */
23
31
  type UniverseVisibility = "private" | "public" | "unspecified";
24
32
  /**
25
33
  * Caller-supplied input for the `update` method on `UniversesClient`.
@@ -29,6 +37,8 @@ type UniverseVisibility = "private" | "public" | "unspecified";
29
37
  * Setting a key to `undefined` clears the corresponding server-side
30
38
  * value (applicable to `privateServerPriceRobux` and each optional
31
39
  * social link).
40
+ *
41
+ * @since 0.1.0
32
42
  */
33
43
  interface UpdateUniverseParameters {
34
44
  /** Whether console players can join. */
@@ -64,6 +74,8 @@ interface UpdateUniverseParameters {
64
74
  }
65
75
  /**
66
76
  * Discriminated-union representation of a universe's owner.
77
+ *
78
+ * @since 0.1.0
67
79
  */
68
80
  interface UniverseOwner {
69
81
  /**
@@ -74,10 +86,16 @@ interface UniverseOwner {
74
86
  /** Whether the owner is a user or a group. */
75
87
  readonly kind: "group" | "user";
76
88
  }
77
- /** Public age-rating classification. */
89
+ /**
90
+ * Public age-rating classification.
91
+ *
92
+ * @since 0.1.0
93
+ */
78
94
  type UniverseAgeRating = "9Plus" | "13Plus" | "17Plus" | "all" | "unspecified";
79
95
  /**
80
96
  * Parsed representation of a Roblox universe's configuration.
97
+ *
98
+ * @since 0.1.0
81
99
  */
82
100
  interface Universe {
83
101
  /** Stringified universe ID, extracted from the wire `path`. */
@@ -131,6 +149,8 @@ interface Universe {
131
149
  //#region src/domains/game-internationalization/game-icon/types.d.ts
132
150
  /**
133
151
  * A localized icon entry returned by listing icons for an experience.
152
+ *
153
+ * @since 0.1.0
134
154
  */
135
155
  interface ExperienceIcon {
136
156
  /** Stringified ID of the uploaded icon image. */
@@ -150,6 +170,8 @@ interface ExperienceIcon {
150
170
  * Parameters for uploading or replacing a localized experience icon. A
151
171
  * subsequent upload for the same `(universeId, languageCode)` pair replaces
152
172
  * the existing icon for that locale.
173
+ *
174
+ * @since 0.1.0
153
175
  */
154
176
  interface UploadExperienceIconParameters {
155
177
  /** Image bytes to upload. PNG and JPEG are accepted by the server. */
@@ -166,6 +188,8 @@ interface UploadExperienceIconParameters {
166
188
  /**
167
189
  * Parameters for deleting the localized icon registered against a universe
168
190
  * for a given language.
191
+ *
192
+ * @since 0.1.0
169
193
  */
170
194
  interface DeleteExperienceIconParameters {
171
195
  /**
@@ -179,6 +203,8 @@ interface DeleteExperienceIconParameters {
179
203
  }
180
204
  /**
181
205
  * Parameters for listing every localized icon registered against a universe.
206
+ *
207
+ * @since 0.1.0
182
208
  */
183
209
  interface ListExperienceIconsParameters {
184
210
  /** Stringified ID of the universe whose icons are being listed. */
@@ -188,6 +214,8 @@ interface ListExperienceIconsParameters {
188
214
  //#region src/domains/game-internationalization/game-thumbnails/types.d.ts
189
215
  /**
190
216
  * Result of uploading a localized experience thumbnail.
217
+ *
218
+ * @since 0.1.0
191
219
  */
192
220
  interface UploadedExperienceThumbnail {
193
221
  /** Stringified media asset ID of the uploaded thumbnail. */
@@ -197,6 +225,8 @@ interface UploadedExperienceThumbnail {
197
225
  * Parameters for uploading a new localized experience thumbnail. Each upload
198
226
  * appends a new entry to the carousel; reorder via {@link ReorderExperienceThumbnailsParameters}
199
227
  * after multiple uploads to set the display order.
228
+ *
229
+ * @since 0.1.0
200
230
  */
201
231
  interface UploadExperienceThumbnailParameters {
202
232
  /** Image bytes to upload. PNG and JPEG are accepted by the server. */
@@ -212,6 +242,8 @@ interface UploadExperienceThumbnailParameters {
212
242
  }
213
243
  /**
214
244
  * Parameters for deleting a single thumbnail by media asset ID.
245
+ *
246
+ * @since 0.1.0
215
247
  */
216
248
  interface DeleteExperienceThumbnailParameters {
217
249
  /** Stringified media asset ID of the thumbnail to delete. */
@@ -228,6 +260,8 @@ interface DeleteExperienceThumbnailParameters {
228
260
  /**
229
261
  * Parameters for reordering the localized thumbnail carousel. The supplied
230
262
  * `orderedImageIds` describes the new display order from first to last.
263
+ *
264
+ * @since 0.1.0
231
265
  */
232
266
  interface ReorderExperienceThumbnailsParameters {
233
267
  /**
@@ -273,6 +307,9 @@ interface UniverseIconHandle {
273
307
  * subsequent upload for the same `(universeId, languageCode)` pair
274
308
  * replaces the existing icon for that locale.
275
309
  *
310
+ * No default request timeout applies to this upload; pass `options.timeout`
311
+ * to set a per-call deadline.
312
+ *
276
313
  * @param parameters - Universe and language identifiers plus the image
277
314
  * bytes to upload.
278
315
  * @param options - Optional per-request overrides (e.g. A different
@@ -312,6 +349,9 @@ interface UniverseThumbnailsHandle {
312
349
  * {@link UniverseThumbnailsHandle.reorder} after multiple uploads to
313
350
  * set the display order.
314
351
  *
352
+ * No default request timeout applies to this upload; pass `options.timeout`
353
+ * to set a per-call deadline.
354
+ *
315
355
  * @param parameters - Universe and language identifiers plus the image
316
356
  * bytes to upload.
317
357
  * @param options - Optional per-request overrides (e.g. A different
@@ -341,6 +381,8 @@ interface UniverseThumbnailsHandle {
341
381
  * {@link UniversesClient.thumbnails} Operation Groups so callers reach
342
382
  * for one client per universe.
343
383
  *
384
+ * @since 0.1.0
385
+ *
344
386
  * @example
345
387
  *
346
388
  * ```ts
@@ -1 +1 @@
1
- {"version":3,"file":"universes.d.mts","names":[],"sources":["../src/domains/cloud-v2/universes/types.ts","../src/domains/game-internationalization/game-icon/types.ts","../src/domains/game-internationalization/game-thumbnails/types.ts","../src/resources/universes/client.ts"],"mappings":"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"}
1
+ {"version":3,"file":"universes.d.mts","names":[],"sources":["../src/domains/cloud-v2/universes/types.ts","../src/domains/game-internationalization/game-icon/types.ts","../src/domains/game-internationalization/game-thumbnails/types.ts","../src/resources/universes/client.ts"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { r as ApiError } from "./rate-limit-D1q2Js-z.mjs";
2
- import { t as ValidationError } from "./validation-DkL5KQqz.mjs";
3
- import { t as toBlob } from "./to-blob-B27VhoRp.mjs";
4
- import { a as IDEMPOTENT_METHOD_DEFAULTS, c as isDateTimeString, i as CREATE_METHOD_DEFAULTS, n as okRequest, r as parseEmptyResponse, s as isRecord, t as ResourceClient } from "./resource-client-D6Efj9fU.mjs";
1
+ import { r as ApiError } from "./rate-limit-Co9i28qi.mjs";
2
+ import { n as IDEMPOTENT_METHOD_DEFAULTS, t as CREATE_METHOD_DEFAULTS } from "./retry-CbHBw60o.mjs";
3
+ import { t as ValidationError } from "./validation-9oU6qNNQ.mjs";
4
+ import { t as toBlob } from "./to-blob-RPqMBuft.mjs";
5
+ import { a as isDateTimeString, i as isRecord, n as okRequest, r as parseEmptyResponse, t as ResourceClient } from "./resource-client-C_D--PYX.mjs";
5
6
  //#region src/domains/cloud-v2/universes/builders.ts
6
7
  /**
7
8
  * Dodges `unicorn/no-null` while still emitting a literal `null` onto
@@ -106,6 +107,9 @@ const AGE_RATING_MAP = {
106
107
  AGE_RATING_UNSPECIFIED: "unspecified"
107
108
  };
108
109
  const MALFORMED_MESSAGE = "Malformed universe response";
110
+ const UNIVERSE_PATH_PATTERN = /^universes\/(\d+)$/;
111
+ const ROOT_PLACE_PATH_PATTERN = /\/places\/(\d+)$/;
112
+ const OWNER_PATH_PATTERN = /^(?:users|groups)\/(\d+)$/;
109
113
  /**
110
114
  * Parses a successful Open Cloud `Universe` response body into the
111
115
  * public {@link Universe} shape.
@@ -116,11 +120,11 @@ const MALFORMED_MESSAGE = "Malformed universe response";
116
120
  */
117
121
  function parseUniverseResponse(response) {
118
122
  const { body, status: statusCode } = response;
119
- if (!isUniverseWire(body)) return malformed(statusCode);
123
+ if (!isUniverseWire(body)) return malformed(statusCode, body);
120
124
  const ownerResult = resolveOwner(body);
121
- if (!ownerResult.success) return malformed(statusCode);
122
- const id = /^universes\/(\d+)$/.exec(body.path)?.[1];
123
- if (id === void 0) return malformed(statusCode);
125
+ if (!ownerResult.success) return malformed(statusCode, body);
126
+ const id = UNIVERSE_PATH_PATTERN.exec(body.path)?.[1];
127
+ if (id === void 0) return malformed(statusCode, body);
124
128
  return {
125
129
  data: toUniverse({
126
130
  id,
@@ -130,15 +134,18 @@ function parseUniverseResponse(response) {
130
134
  success: true
131
135
  };
132
136
  }
133
- function malformed(statusCode) {
137
+ function malformed(statusCode, body) {
134
138
  return {
135
- err: new ApiError(MALFORMED_MESSAGE, { statusCode }),
139
+ err: new ApiError(MALFORMED_MESSAGE, {
140
+ details: body,
141
+ statusCode
142
+ }),
136
143
  success: false
137
144
  };
138
145
  }
139
146
  function extractRootPlaceId(rootPlace) {
140
147
  if (rootPlace === void 0) return;
141
- return /\/places\/(\d+)$/.exec(rootPlace)?.[1];
148
+ return ROOT_PLACE_PATH_PATTERN.exec(rootPlace)?.[1];
142
149
  }
143
150
  function toSocialLink(wire) {
144
151
  if (wire === void 0) return;
@@ -206,7 +213,7 @@ function isUniverseWire(body) {
206
213
  return hasValidRequiredFields(body) && hasValidOptionalFields(body);
207
214
  }
208
215
  function extractOwnerId(resourcePath) {
209
- return /^(?:users|groups)\/(\d+)$/.exec(resourcePath)?.[1];
216
+ return OWNER_PATH_PATTERN.exec(resourcePath)?.[1];
210
217
  }
211
218
  function resolveOwner(body) {
212
219
  if (typeof body.user === "string") {
@@ -315,7 +322,10 @@ const ICON_REQUIRED_SCOPES = Object.freeze(["legacy-universe:manage"]);
315
322
  function parseIconListResponse(response) {
316
323
  const { body, status: statusCode } = response;
317
324
  if (!isGameIconListWire(body)) return {
318
- err: new ApiError("Malformed icon list response", { statusCode }),
325
+ err: new ApiError("Malformed icon list response", {
326
+ details: body,
327
+ statusCode
328
+ }),
319
329
  success: false
320
330
  };
321
331
  return {
@@ -346,6 +356,7 @@ function toExperienceIcon(wire) {
346
356
  }
347
357
  //#endregion
348
358
  //#region src/domains/game-internationalization/game-thumbnails/builders.ts
359
+ const POSITIVE_INTEGER_PATTERN = /^[1-9]\d*$/;
349
360
  /**
350
361
  * Builds a `POST` request for the localized "upload experience thumbnail"
351
362
  * endpoint. Each successful upload appends a new entry to the carousel.
@@ -400,7 +411,7 @@ function buildReorderThumbnailsRequest(parameters) {
400
411
  };
401
412
  }
402
413
  function parseImageId(value) {
403
- if (!/^[1-9]\d*$/.test(value)) return;
414
+ if (!POSITIVE_INTEGER_PATTERN.test(value)) return;
404
415
  const parsed = Number(value);
405
416
  if (!Number.isSafeInteger(parsed)) return;
406
417
  return parsed;
@@ -461,7 +472,10 @@ const THUMBNAILS_REQUIRED_SCOPES = Object.freeze(["legacy-universe:manage"]);
461
472
  function parseThumbnailUploadResponse(response) {
462
473
  const { body, status: statusCode } = response;
463
474
  if (!isGameThumbnailUploadWire(body)) return {
464
- err: new ApiError("Malformed thumbnail upload response", { statusCode }),
475
+ err: new ApiError("Malformed thumbnail upload response", {
476
+ details: body,
477
+ statusCode
478
+ }),
465
479
  success: false
466
480
  };
467
481
  return {
@@ -572,6 +586,8 @@ const THUMBNAIL_REORDER_SPEC = Object.freeze({
572
586
  * {@link UniversesClient.thumbnails} Operation Groups so callers reach
573
587
  * for one client per universe.
574
588
  *
589
+ * @since 0.1.0
590
+ *
575
591
  * @example
576
592
  *
577
593
  * ```ts