@playdrop/playdrop-cli 0.5.2 → 0.5.4

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 (118) hide show
  1. package/config/client-meta.json +4 -4
  2. package/dist/apps/build.js +49 -6
  3. package/dist/apps/index.d.ts +2 -0
  4. package/dist/apps/index.js +2 -0
  5. package/dist/apps/upload.d.ts +2 -0
  6. package/dist/apps/upload.js +126 -28
  7. package/dist/assetSpecs.d.ts +16 -0
  8. package/dist/assetSpecs.js +263 -0
  9. package/dist/assets/model-artifacts.js +3 -0
  10. package/dist/catalogue.d.ts +57 -3
  11. package/dist/catalogue.js +342 -16
  12. package/dist/commandContext.d.ts +6 -2
  13. package/dist/commandContext.js +144 -20
  14. package/dist/commands/accounts.d.ts +2 -0
  15. package/dist/commands/accounts.js +48 -0
  16. package/dist/commands/ads.d.ts +8 -0
  17. package/dist/commands/ads.js +124 -0
  18. package/dist/commands/boosts.d.ts +25 -0
  19. package/dist/commands/boosts.js +209 -0
  20. package/dist/commands/browse.d.ts +6 -1
  21. package/dist/commands/browse.js +365 -124
  22. package/dist/commands/capture.js +30 -9
  23. package/dist/commands/captureListing.d.ts +53 -0
  24. package/dist/commands/captureListing.js +815 -0
  25. package/dist/commands/create.d.ts +1 -0
  26. package/dist/commands/create.js +183 -3
  27. package/dist/commands/credits.d.ts +6 -0
  28. package/dist/commands/credits.js +47 -1
  29. package/dist/commands/detail.js +38 -4
  30. package/dist/commands/dev.js +169 -192
  31. package/dist/commands/devServer.d.ts +26 -3
  32. package/dist/commands/devServer.js +415 -72
  33. package/dist/commands/login.js +10 -2
  34. package/dist/commands/logout.d.ts +6 -1
  35. package/dist/commands/logout.js +25 -3
  36. package/dist/commands/search.d.ts +5 -0
  37. package/dist/commands/search.js +139 -17
  38. package/dist/commands/tags.d.ts +7 -0
  39. package/dist/commands/tags.js +63 -0
  40. package/dist/commands/upload-content.d.ts +13 -3
  41. package/dist/commands/upload-content.js +86 -20
  42. package/dist/commands/upload.d.ts +2 -0
  43. package/dist/commands/upload.js +187 -11
  44. package/dist/commands/validate.js +163 -2
  45. package/dist/commands/versionsBrowse.js +128 -91
  46. package/dist/commands/whoami.js +10 -2
  47. package/dist/config.d.ts +37 -0
  48. package/dist/config.js +205 -3
  49. package/dist/index.js +177 -5
  50. package/dist/refs.d.ts +2 -2
  51. package/dist/refs.js +13 -1
  52. package/dist/taskSelection.js +6 -3
  53. package/dist/taskUtils.d.ts +2 -2
  54. package/dist/taskUtils.js +1 -0
  55. package/dist/uploadLog.d.ts +1 -1
  56. package/dist/uploadLog.js +2 -2
  57. package/dist/workspaceAuth.d.ts +14 -0
  58. package/dist/workspaceAuth.js +75 -0
  59. package/node_modules/@playdrop/ai-client/package.json +1 -1
  60. package/node_modules/@playdrop/api-client/dist/client.d.ts +139 -10
  61. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  62. package/node_modules/@playdrop/api-client/dist/client.js +6 -0
  63. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts +9 -1
  64. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts.map +1 -1
  65. package/node_modules/@playdrop/api-client/dist/domains/admin.js +45 -0
  66. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +7 -1
  67. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  68. package/node_modules/@playdrop/api-client/dist/domains/apps.js +58 -0
  69. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +2 -0
  70. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
  71. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.js +16 -0
  72. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +44 -2
  73. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
  74. package/node_modules/@playdrop/api-client/dist/domains/assets.js +260 -3
  75. package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts +22 -1
  76. package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts.map +1 -1
  77. package/node_modules/@playdrop/api-client/dist/domains/payments.js +228 -0
  78. package/node_modules/@playdrop/api-client/dist/domains/search.d.ts.map +1 -1
  79. package/node_modules/@playdrop/api-client/dist/domains/search.js +39 -11
  80. package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts +34 -0
  81. package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts.map +1 -0
  82. package/node_modules/@playdrop/api-client/dist/domains/tags.js +111 -0
  83. package/node_modules/@playdrop/api-client/dist/index.d.ts +69 -1
  84. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  85. package/node_modules/@playdrop/api-client/dist/index.js +74 -0
  86. package/node_modules/@playdrop/api-client/package.json +1 -1
  87. package/node_modules/@playdrop/boxel-core/package.json +1 -1
  88. package/node_modules/@playdrop/boxel-three/package.json +1 -1
  89. package/node_modules/@playdrop/config/client-meta.json +4 -4
  90. package/node_modules/@playdrop/config/dist/src/constants.d.ts +11 -0
  91. package/node_modules/@playdrop/config/dist/src/constants.d.ts.map +1 -1
  92. package/node_modules/@playdrop/config/dist/src/constants.js +12 -1
  93. package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
  94. package/node_modules/@playdrop/config/package.json +1 -1
  95. package/node_modules/@playdrop/types/dist/api.d.ts +366 -6
  96. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  97. package/node_modules/@playdrop/types/dist/api.js +52 -1
  98. package/node_modules/@playdrop/types/dist/asset-pack.d.ts +7 -1
  99. package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
  100. package/node_modules/@playdrop/types/dist/asset-spec-contract-meta-schema.json +86 -0
  101. package/node_modules/@playdrop/types/dist/asset-spec.d.ts +163 -0
  102. package/node_modules/@playdrop/types/dist/asset-spec.d.ts.map +1 -0
  103. package/node_modules/@playdrop/types/dist/asset-spec.js +101 -0
  104. package/node_modules/@playdrop/types/dist/asset.d.ts +23 -6
  105. package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
  106. package/node_modules/@playdrop/types/dist/asset.js +4 -1
  107. package/node_modules/@playdrop/types/dist/graph.d.ts +4 -2
  108. package/node_modules/@playdrop/types/dist/graph.d.ts.map +1 -1
  109. package/node_modules/@playdrop/types/dist/graph.js +9 -2
  110. package/node_modules/@playdrop/types/dist/index.d.ts +1 -0
  111. package/node_modules/@playdrop/types/dist/index.d.ts.map +1 -1
  112. package/node_modules/@playdrop/types/dist/index.js +1 -0
  113. package/node_modules/@playdrop/types/dist/version.d.ts +13 -0
  114. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  115. package/node_modules/@playdrop/types/dist/version.js +21 -0
  116. package/node_modules/@playdrop/types/package.json +6 -1
  117. package/node_modules/@playdrop/vox-three/package.json +1 -1
  118. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/domains/payments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElC,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC;AAE1F,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,YAAY,CAAC;IAC7B,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,oBAAoB,KAAK,MAAM,GAAG,IAAI,CAAC;CACjE;6BAIkC,OAAO,CAAC,YAAY,CAAC;uBAW3B,OAAO,CAAC,YAAY,CAAC;yCAYvC,MAAM,gBACG,gCAAgC,GAC7C,OAAO,CAAC,iCAAiC,CAAC;6CAgBE,MAAM,GAAG,OAAO,CAAC,gCAAgC,CAAC;wBAevE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;sBAYlD,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;8BAYzC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;gCAajD,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;iCAWnC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;oCAa/D,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;kCAWtC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;mCAWnC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;sCAWjC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;EAoB9G"}
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../src/domains/payments.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ // eslint-disable-next-line max-lines-per-function -- Payments transport methods are intentionally grouped in one factory.
1
2
  export function buildPaymentsApiClientMethods(input) {
2
3
  const { request, handleApiError, buildIapQuery } = input;
3
4
  return {
@@ -72,6 +73,17 @@ export function buildPaymentsApiClientMethods(input) {
72
73
  }
73
74
  return response.body;
74
75
  },
76
+ async purchaseDevIap(appId, slot, body) {
77
+ const response = await request({
78
+ method: 'POST',
79
+ path: `/apps/${encodeURIComponent(String(appId))}/dev/players/${encodeURIComponent(String(slot))}/iap/purchase`,
80
+ body,
81
+ });
82
+ if (response.status !== 200) {
83
+ handleApiError(response, 'purchase_dev_iap');
84
+ }
85
+ return response.body;
86
+ },
75
87
  async fetchIapReceipts(params) {
76
88
  const query = buildIapQuery(params);
77
89
  const path = query ? `/iap/receipts?${query}` : '/iap/receipts';
@@ -155,5 +167,221 @@ export function buildPaymentsApiClientMethods(input) {
155
167
  }
156
168
  return response.body;
157
169
  },
170
+ async fetchBoostBalance() {
171
+ const response = await request({
172
+ method: 'GET',
173
+ path: '/boosts/balance',
174
+ });
175
+ if (response.status !== 200) {
176
+ handleApiError(response, 'fetch_boost_balance');
177
+ }
178
+ return response.body;
179
+ },
180
+ async purchaseBoostPack(body) {
181
+ const normalizedQuantity = body.quantity;
182
+ if (normalizedQuantity !== undefined) {
183
+ if (!Number.isInteger(normalizedQuantity) || normalizedQuantity <= 0) {
184
+ throw new Error('invalid_boost_quantity');
185
+ }
186
+ }
187
+ const response = await request({
188
+ method: 'POST',
189
+ path: '/boosts/purchase',
190
+ body,
191
+ });
192
+ if (response.status !== 200) {
193
+ handleApiError(response, 'purchase_boost_pack');
194
+ }
195
+ return response.body;
196
+ },
197
+ async activateAppBoost(appId, body) {
198
+ const normalizedAppId = Number(appId);
199
+ if (!Number.isInteger(normalizedAppId) || normalizedAppId <= 0) {
200
+ throw new Error('invalid_app_id');
201
+ }
202
+ const response = await request({
203
+ method: 'POST',
204
+ path: `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/activate`,
205
+ ...(body ? { body } : {}),
206
+ });
207
+ if (response.status !== 200) {
208
+ handleApiError(response, 'activate_app_boost');
209
+ }
210
+ return response.body;
211
+ },
212
+ async fetchAppBoostStatus(appId) {
213
+ const normalizedAppId = Number(appId);
214
+ if (!Number.isInteger(normalizedAppId) || normalizedAppId <= 0) {
215
+ throw new Error('invalid_app_id');
216
+ }
217
+ const response = await request({
218
+ method: 'GET',
219
+ path: `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/status`,
220
+ });
221
+ if (response.status !== 200) {
222
+ handleApiError(response, 'fetch_app_boost_status');
223
+ }
224
+ return response.body;
225
+ },
226
+ async fetchAppBoostHistory(appId, options) {
227
+ const normalizedAppId = Number(appId);
228
+ if (!Number.isInteger(normalizedAppId) || normalizedAppId <= 0) {
229
+ throw new Error('invalid_app_id');
230
+ }
231
+ const params = new URLSearchParams();
232
+ if (typeof options?.limit === 'number') {
233
+ if (!Number.isInteger(options.limit) || options.limit <= 0) {
234
+ throw new Error('invalid_boost_history_limit');
235
+ }
236
+ params.set('limit', String(options.limit));
237
+ }
238
+ const query = params.toString();
239
+ const response = await request({
240
+ method: 'GET',
241
+ path: query
242
+ ? `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/history?${query}`
243
+ : `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/history`,
244
+ });
245
+ if (response.status !== 200) {
246
+ handleApiError(response, 'fetch_app_boost_history');
247
+ }
248
+ return response.body;
249
+ },
250
+ async fetchAppBoostReport(appId, options) {
251
+ const normalizedAppId = Number(appId);
252
+ if (!Number.isInteger(normalizedAppId) || normalizedAppId <= 0) {
253
+ throw new Error('invalid_app_id');
254
+ }
255
+ const params = new URLSearchParams();
256
+ if (typeof options?.days === 'number') {
257
+ if (options.startDateUtc || options.endDateUtc) {
258
+ throw new Error('invalid_boost_report_range');
259
+ }
260
+ params.set('days', String(options.days));
261
+ }
262
+ if (typeof options?.startDateUtc === 'string') {
263
+ params.set('startDateUtc', options.startDateUtc);
264
+ }
265
+ if (typeof options?.endDateUtc === 'string') {
266
+ params.set('endDateUtc', options.endDateUtc);
267
+ }
268
+ const query = params.toString();
269
+ const response = await request({
270
+ method: 'GET',
271
+ path: query
272
+ ? `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/report?${query}`
273
+ : `/apps/${encodeURIComponent(String(normalizedAppId))}/boosts/report`,
274
+ });
275
+ if (response.status !== 200) {
276
+ handleApiError(response, 'fetch_app_boost_report');
277
+ }
278
+ return response.body;
279
+ },
280
+ async fetchCreatorEarnings(options) {
281
+ const params = new URLSearchParams();
282
+ if (typeof options?.days === 'number') {
283
+ params.set('days', String(options.days));
284
+ }
285
+ if (typeof options?.appId === 'number') {
286
+ params.set('appId', String(options.appId));
287
+ }
288
+ const query = params.toString();
289
+ const response = await request({
290
+ method: 'GET',
291
+ path: query ? `/creator/earnings?${query}` : '/creator/earnings',
292
+ });
293
+ if (response.status !== 200) {
294
+ handleApiError(response, 'fetch_creator_earnings');
295
+ }
296
+ return response.body;
297
+ },
298
+ async loadInterstitialAd(sourceAppId) {
299
+ const response = await request({
300
+ method: 'POST',
301
+ path: '/ads/interstitial/load',
302
+ body: { sourceAppId },
303
+ });
304
+ if (response.status !== 200) {
305
+ handleApiError(response, 'load_interstitial_ad');
306
+ }
307
+ return response.body;
308
+ },
309
+ async loadDevInterstitialAd(appId, slot) {
310
+ const response = await request({
311
+ method: 'POST',
312
+ path: `/apps/${encodeURIComponent(String(appId))}/dev/players/${encodeURIComponent(String(slot))}/ads/interstitial/load`,
313
+ body: {},
314
+ });
315
+ if (response.status !== 200) {
316
+ handleApiError(response, 'load_dev_interstitial_ad');
317
+ }
318
+ return response.body;
319
+ },
320
+ async showInterstitialAd(body) {
321
+ const response = await request({
322
+ method: 'POST',
323
+ path: '/ads/interstitial/show',
324
+ body,
325
+ });
326
+ if (response.status !== 200) {
327
+ handleApiError(response, 'show_interstitial_ad');
328
+ }
329
+ return response.body;
330
+ },
331
+ async showDevInterstitialAd(appId, slot, body) {
332
+ const response = await request({
333
+ method: 'POST',
334
+ path: `/apps/${encodeURIComponent(String(appId))}/dev/players/${encodeURIComponent(String(slot))}/ads/interstitial/show`,
335
+ body,
336
+ });
337
+ if (response.status !== 200) {
338
+ handleApiError(response, 'show_dev_interstitial_ad');
339
+ }
340
+ return response.body;
341
+ },
342
+ async loadRewardedAd(sourceAppId) {
343
+ const response = await request({
344
+ method: 'POST',
345
+ path: '/ads/rewarded/load',
346
+ body: { sourceAppId },
347
+ });
348
+ if (response.status !== 200) {
349
+ handleApiError(response, 'load_rewarded_ad');
350
+ }
351
+ return response.body;
352
+ },
353
+ async loadDevRewardedAd(appId, slot) {
354
+ const response = await request({
355
+ method: 'POST',
356
+ path: `/apps/${encodeURIComponent(String(appId))}/dev/players/${encodeURIComponent(String(slot))}/ads/rewarded/load`,
357
+ body: {},
358
+ });
359
+ if (response.status !== 200) {
360
+ handleApiError(response, 'load_dev_rewarded_ad');
361
+ }
362
+ return response.body;
363
+ },
364
+ async showRewardedAd(body) {
365
+ const response = await request({
366
+ method: 'POST',
367
+ path: '/ads/rewarded/show',
368
+ body,
369
+ });
370
+ if (response.status !== 200) {
371
+ handleApiError(response, 'show_rewarded_ad');
372
+ }
373
+ return response.body;
374
+ },
375
+ async showDevRewardedAd(appId, slot, body) {
376
+ const response = await request({
377
+ method: 'POST',
378
+ path: `/apps/${encodeURIComponent(String(appId))}/dev/players/${encodeURIComponent(String(slot))}/ads/rewarded/show`,
379
+ body,
380
+ });
381
+ if (response.status !== 200) {
382
+ handleApiError(response, 'show_dev_rewarded_ad');
383
+ }
384
+ return response.body;
385
+ },
158
386
  };
159
387
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/domains/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElC,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC;AAE1F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,YAAY,CAAC;IAC7B,wBAAwB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC3D,wBAAwB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC3D,6BAA6B,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,eAAe,CAAC;IAC/E,6BAA6B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7E;0BAW+B,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;iCAmDhC,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;EAkB3F"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/domains/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElC,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC;AAwC1F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,YAAY,CAAC;IAC7B,wBAAwB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC3D,wBAAwB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC3D,6BAA6B,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,eAAe,CAAC;IAC/E,6BAA6B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7E;0BAW+B,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;iCAwDhC,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;EAkB3F"}
@@ -1,3 +1,32 @@
1
+ function setNormalizedStringParam(params, key, value) {
2
+ if (typeof value !== 'string') {
3
+ return;
4
+ }
5
+ const normalized = value.trim();
6
+ if (normalized.length > 0) {
7
+ params.set(key, normalized);
8
+ }
9
+ }
10
+ function setNormalizedPositiveIntegerParam(params, key, value, normalizePositiveIntegerInput, errorCode) {
11
+ if (value === undefined) {
12
+ return;
13
+ }
14
+ params.set(key, String(normalizePositiveIntegerInput(value, errorCode)));
15
+ }
16
+ function appendNormalizedTagParams(params, tags) {
17
+ if (!Array.isArray(tags)) {
18
+ return;
19
+ }
20
+ for (const tag of tags) {
21
+ if (typeof tag !== 'string') {
22
+ continue;
23
+ }
24
+ const normalized = tag.trim();
25
+ if (normalized.length > 0) {
26
+ params.append('tag', normalized);
27
+ }
28
+ }
29
+ }
1
30
  export function buildSearchApiClientMethods(input) {
2
31
  const { request, handleApiError, normalizeSearchModeInput, normalizeSearchKindInput, normalizeSearchAssetTypeInput, normalizePositiveIntegerInput, } = input;
3
32
  return {
@@ -14,12 +43,11 @@ export function buildSearchApiClientMethods(input) {
14
43
  if (searchRequest.kind) {
15
44
  params.set('kind', normalizeSearchKindInput(searchRequest.kind));
16
45
  }
17
- if (searchRequest.page !== undefined) {
18
- params.set('page', String(normalizePositiveIntegerInput(searchRequest.page, 'invalid_search_page')));
19
- }
20
- if (searchRequest.pageSize !== undefined) {
21
- params.set('pageSize', String(normalizePositiveIntegerInput(searchRequest.pageSize, 'invalid_search_page_size')));
46
+ if (searchRequest.sort) {
47
+ params.set('sort', searchRequest.sort);
22
48
  }
49
+ setNormalizedPositiveIntegerParam(params, 'page', searchRequest.page, normalizePositiveIntegerInput, 'invalid_search_page');
50
+ setNormalizedPositiveIntegerParam(params, 'pageSize', searchRequest.pageSize, normalizePositiveIntegerInput, 'invalid_search_page_size');
23
51
  if (searchRequest.appType) {
24
52
  params.set('appType', searchRequest.appType);
25
53
  }
@@ -29,15 +57,15 @@ export function buildSearchApiClientMethods(input) {
29
57
  if (searchRequest.assetCategory) {
30
58
  params.set('assetCategory', searchRequest.assetCategory);
31
59
  }
32
- if (typeof searchRequest.assetSubcategory === 'string' && searchRequest.assetSubcategory.trim().length > 0) {
33
- params.set('assetSubcategory', searchRequest.assetSubcategory.trim());
34
- }
60
+ setNormalizedStringParam(params, 'assetSubcategory', searchRequest.assetSubcategory);
61
+ setNormalizedStringParam(params, 'assetSpec', searchRequest.assetSpec);
62
+ setNormalizedStringParam(params, 'assetSpecOwner', searchRequest.assetSpecOwner);
63
+ setNormalizedStringParam(params, 'assetSpecName', searchRequest.assetSpecName);
35
64
  if (searchRequest.packContainsCategory) {
36
65
  params.set('packContainsCategory', searchRequest.packContainsCategory);
37
66
  }
38
- if (typeof searchRequest.packContainsSubcategory === 'string' && searchRequest.packContainsSubcategory.trim().length > 0) {
39
- params.set('packContainsSubcategory', searchRequest.packContainsSubcategory.trim());
40
- }
67
+ setNormalizedStringParam(params, 'packContainsSubcategory', searchRequest.packContainsSubcategory);
68
+ appendNormalizedTagParams(params, searchRequest.tags);
41
69
  const response = await request({
42
70
  method: 'GET',
43
71
  path: `/search?${params.toString()}`,
@@ -0,0 +1,34 @@
1
+ import type { AdminTagGroupResponse, AdminTagGroupsResponse, AdminTagResponse, CreateTagGroupRequest, CreateTagRequest, SavedItemKind, TagDetailResponse, TagListResponse, UpdateTagGroupRequest, UpdateTagRequest } from '@playdrop/types';
2
+ type ApiResponseLike<T> = {
3
+ status: number;
4
+ body: T;
5
+ headers: Headers;
6
+ };
7
+ type RequestExecutor = <T>(input: {
8
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
9
+ path: string;
10
+ body?: unknown;
11
+ headers?: Record<string, string>;
12
+ signal?: AbortSignal;
13
+ }) => Promise<ApiResponseLike<T>>;
14
+ type ErrorHandler = (response: ApiResponseLike<unknown>, defaultMessage: string) => never;
15
+ export declare function buildTagsApiClientMethods(input: {
16
+ request: RequestExecutor;
17
+ handleApiError: ErrorHandler;
18
+ normalizePositiveIntegerInput: (value: number, errorCode: string) => number;
19
+ }): {
20
+ fetchTags(options?: {
21
+ targetKind?: SavedItemKind;
22
+ groupSlug?: string;
23
+ limit?: number;
24
+ offset?: number;
25
+ }): Promise<TagListResponse>;
26
+ fetchTag(groupSlug: string, tagSlug: string): Promise<TagDetailResponse>;
27
+ fetchAdminTagGroups(): Promise<AdminTagGroupsResponse>;
28
+ createAdminTagGroup(requestBody: CreateTagGroupRequest): Promise<AdminTagGroupResponse>;
29
+ updateAdminTagGroup(groupSlug: string, requestBody: UpdateTagGroupRequest): Promise<AdminTagGroupResponse>;
30
+ createAdminTag(groupSlug: string, requestBody: CreateTagRequest): Promise<AdminTagResponse>;
31
+ updateAdminTag(groupSlug: string, tagSlug: string, requestBody: UpdateTagRequest): Promise<AdminTagResponse>;
32
+ };
33
+ export {};
34
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/domains/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;IAChC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElC,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,KAAK,KAAK,CAAC;AAE1F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,YAAY,CAAC;IAC7B,6BAA6B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7E;wBAQ4B;QACvB,UAAU,CAAC,EAAE,aAAa,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAQ,OAAO,CAAC,eAAe,CAAC;wBAyBP,MAAM,WAAW,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;2BAgBjD,OAAO,CAAC,sBAAsB,CAAC;qCAWrB,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;mCAYxD,MAAM,eAAe,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;8BAgBhF,MAAM,eAAe,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;8BAiBpF,MAAM,WACR,MAAM,eACF,gBAAgB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;EAiB/B"}
@@ -0,0 +1,111 @@
1
+ export function buildTagsApiClientMethods(input) {
2
+ const { request, handleApiError, normalizePositiveIntegerInput, } = input;
3
+ return {
4
+ async fetchTags(options = {}) {
5
+ const params = new URLSearchParams();
6
+ if (typeof options.targetKind === 'string' && options.targetKind.trim().length > 0) {
7
+ params.set('targetKind', options.targetKind.trim());
8
+ }
9
+ if (typeof options.groupSlug === 'string' && options.groupSlug.trim().length > 0) {
10
+ params.set('groupSlug', options.groupSlug.trim());
11
+ }
12
+ if (typeof options.limit === 'number') {
13
+ params.set('limit', String(normalizePositiveIntegerInput(options.limit, 'invalid_tags_limit')));
14
+ }
15
+ if (typeof options.offset === 'number') {
16
+ params.set('offset', String(normalizePositiveIntegerInput(options.offset, 'invalid_tags_offset')));
17
+ }
18
+ const query = params.toString();
19
+ const response = await request({
20
+ method: 'GET',
21
+ path: `/tags${query ? `?${query}` : ''}`,
22
+ });
23
+ if (response.status !== 200) {
24
+ handleApiError(response, 'fetch_tags');
25
+ }
26
+ return response.body;
27
+ },
28
+ async fetchTag(groupSlug, tagSlug) {
29
+ const normalizedGroupSlug = typeof groupSlug === 'string' ? groupSlug.trim() : '';
30
+ const normalizedTagSlug = typeof tagSlug === 'string' ? tagSlug.trim() : '';
31
+ if (!normalizedGroupSlug || !normalizedTagSlug) {
32
+ throw new Error('invalid_tag_ref');
33
+ }
34
+ const response = await request({
35
+ method: 'GET',
36
+ path: `/tags/${encodeURIComponent(normalizedGroupSlug)}/${encodeURIComponent(normalizedTagSlug)}`,
37
+ });
38
+ if (response.status !== 200) {
39
+ handleApiError(response, 'fetch_tag');
40
+ }
41
+ return response.body;
42
+ },
43
+ async fetchAdminTagGroups() {
44
+ const response = await request({
45
+ method: 'GET',
46
+ path: '/admin/tag-groups',
47
+ });
48
+ if (response.status !== 200) {
49
+ handleApiError(response, 'fetch_admin_tag_groups');
50
+ }
51
+ return response.body;
52
+ },
53
+ async createAdminTagGroup(requestBody) {
54
+ const response = await request({
55
+ method: 'POST',
56
+ path: '/admin/tag-groups',
57
+ body: requestBody,
58
+ });
59
+ if (response.status !== 201) {
60
+ handleApiError(response, 'create_admin_tag_group');
61
+ }
62
+ return response.body;
63
+ },
64
+ async updateAdminTagGroup(groupSlug, requestBody) {
65
+ const normalizedGroupSlug = typeof groupSlug === 'string' ? groupSlug.trim() : '';
66
+ if (!normalizedGroupSlug) {
67
+ throw new Error('invalid_tag_group_slug');
68
+ }
69
+ const response = await request({
70
+ method: 'PATCH',
71
+ path: `/admin/tag-groups/${encodeURIComponent(normalizedGroupSlug)}`,
72
+ body: requestBody,
73
+ });
74
+ if (response.status !== 200) {
75
+ handleApiError(response, 'update_admin_tag_group');
76
+ }
77
+ return response.body;
78
+ },
79
+ async createAdminTag(groupSlug, requestBody) {
80
+ const normalizedGroupSlug = typeof groupSlug === 'string' ? groupSlug.trim() : '';
81
+ if (!normalizedGroupSlug) {
82
+ throw new Error('invalid_tag_group_slug');
83
+ }
84
+ const response = await request({
85
+ method: 'POST',
86
+ path: `/admin/tag-groups/${encodeURIComponent(normalizedGroupSlug)}/tags`,
87
+ body: requestBody,
88
+ });
89
+ if (response.status !== 201) {
90
+ handleApiError(response, 'create_admin_tag');
91
+ }
92
+ return response.body;
93
+ },
94
+ async updateAdminTag(groupSlug, tagSlug, requestBody) {
95
+ const normalizedGroupSlug = typeof groupSlug === 'string' ? groupSlug.trim() : '';
96
+ const normalizedTagSlug = typeof tagSlug === 'string' ? tagSlug.trim() : '';
97
+ if (!normalizedGroupSlug || !normalizedTagSlug) {
98
+ throw new Error('invalid_tag_ref');
99
+ }
100
+ const response = await request({
101
+ method: 'PATCH',
102
+ path: `/admin/tags/${encodeURIComponent(normalizedGroupSlug)}/${encodeURIComponent(normalizedTagSlug)}`,
103
+ body: requestBody,
104
+ });
105
+ if (response.status !== 200) {
106
+ handleApiError(response, 'update_admin_tag');
107
+ }
108
+ return response.body;
109
+ },
110
+ };
111
+ }