@madewithremy/admin 0.1.4 → 0.1.6

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/dist/index.js CHANGED
@@ -89,6 +89,16 @@ var AdminTimeoutError = class extends Error {
89
89
 
90
90
  // src/http.ts
91
91
  var REQUEST_TIMEOUT_MS = 3e4;
92
+ var TRANSIENT_GRACE_MS = 2 * 6e4;
93
+ function isTransientError(err) {
94
+ if (err instanceof AdminApiError) {
95
+ return err.status >= 500;
96
+ }
97
+ if (err instanceof AdminTimeoutError) {
98
+ return true;
99
+ }
100
+ return err instanceof TypeError;
101
+ }
92
102
  var REPORT_TIMEOUT_MS = 6e4;
93
103
  function seg(value) {
94
104
  return encodeURIComponent(String(value));
@@ -350,9 +360,12 @@ function liftFromLive(ctx, params = {}) {
350
360
  var dataSources_exports = {};
351
361
  __export(dataSources_exports, {
352
362
  DEFAULT_WAIT_TIMEOUT_MS: () => DEFAULT_WAIT_TIMEOUT_MS,
363
+ DOCUMENTS_IDS_MAX: () => DOCUMENTS_IDS_MAX,
353
364
  addDocument: () => addDocument,
365
+ allDocuments: () => allDocuments,
354
366
  configGet: () => configGet,
355
367
  configSet: () => configSet,
368
+ create: () => create,
356
369
  deleteSource: () => deleteSource,
357
370
  documents: () => documents,
358
371
  drop: () => drop,
@@ -456,12 +469,26 @@ async function waitForIngest(ctx, params) {
456
469
  }
457
470
  const wanted = new Set(documentIds);
458
471
  const start = Date.now();
472
+ let transientSince = null;
459
473
  for (; ; ) {
460
- const { documents: docs } = await call(
461
- ctx,
462
- "GET",
463
- `${base(ctx.appId)}/documents?slug=${encodeURIComponent(slug)}`
464
- );
474
+ let docs;
475
+ try {
476
+ docs = await allDocuments(ctx, { slug, ids: documentIds });
477
+ transientSince = null;
478
+ } catch (err) {
479
+ if (!isTransientError(err)) {
480
+ throw err;
481
+ }
482
+ transientSince ??= Date.now();
483
+ if (Date.now() - transientSince > TRANSIENT_GRACE_MS) {
484
+ throw err;
485
+ }
486
+ onProgress?.(
487
+ `retrying after a gateway error\u2026 (${Math.round((Date.now() - start) / 1e3)}s)`
488
+ );
489
+ await sleep(POLL_MS);
490
+ continue;
491
+ }
465
492
  const tracked = (docs ?? []).filter((d) => wanted.has(d.id));
466
493
  const pending = tracked.filter((d) => d.status === "processing");
467
494
  const failed = tracked.filter((d) => d.status === "error");
@@ -486,12 +513,41 @@ async function waitForIngest(ctx, params) {
486
513
  await sleep(POLL_MS);
487
514
  }
488
515
  }
516
+ var DOCUMENTS_IDS_MAX = 200;
489
517
  function documents(ctx, params) {
490
518
  return call(
491
519
  ctx,
492
520
  "GET",
493
- `${base(ctx.appId)}/documents${qs({ slug: params.slug, candidate: params.candidate || void 0 })}`
494
- );
521
+ `${base(ctx.appId)}/documents${qs({
522
+ slug: params.slug,
523
+ candidate: params.candidate || void 0,
524
+ ids: params.ids?.length ? params.ids.join(",") : void 0,
525
+ limit: params.limit,
526
+ cursor: params.cursor
527
+ })}`
528
+ );
529
+ }
530
+ async function allDocuments(ctx, params) {
531
+ const groups = params.ids ? Array.from(
532
+ { length: Math.ceil(params.ids.length / DOCUMENTS_IDS_MAX) },
533
+ (_, i) => params.ids.slice(i * DOCUMENTS_IDS_MAX, (i + 1) * DOCUMENTS_IDS_MAX)
534
+ ) : [void 0];
535
+ const out = [];
536
+ for (const ids of groups) {
537
+ let cursor;
538
+ do {
539
+ const page = await documents(ctx, {
540
+ slug: params.slug,
541
+ candidate: params.candidate,
542
+ ids,
543
+ limit: 1e3,
544
+ cursor
545
+ });
546
+ out.push(...page.documents ?? []);
547
+ cursor = page.nextCursor ?? void 0;
548
+ } while (cursor);
549
+ }
550
+ return out;
495
551
  }
496
552
  function list3(ctx) {
497
553
  return call(ctx, "GET", base(ctx.appId));
@@ -533,7 +589,7 @@ function configGet(ctx, slug) {
533
589
  );
534
590
  }
535
591
  function configSet(ctx, params) {
536
- const { slug, ingest, retrieval } = params;
592
+ const { slug, ingest, retrieval, placement } = params;
537
593
  return call(
538
594
  ctx,
539
595
  "POST",
@@ -541,10 +597,20 @@ function configSet(ctx, params) {
541
597
  {
542
598
  slug,
543
599
  ...ingest ? { ingest } : {},
544
- ...retrieval ? { retrieval } : {}
600
+ ...retrieval ? { retrieval } : {},
601
+ ...placement !== void 0 ? { placement } : {}
545
602
  }
546
603
  );
547
604
  }
605
+ function create(ctx, params) {
606
+ const { slug, name, ingest, placement } = params;
607
+ return call(ctx, "POST", base(ctx.appId), {
608
+ slug,
609
+ ...name ? { name } : {},
610
+ ...ingest ? { ingest } : {},
611
+ ...placement !== void 0 ? { placement } : {}
612
+ });
613
+ }
548
614
  function revectorize(ctx, params) {
549
615
  const { slug, ingest } = params;
550
616
  return call(
@@ -681,7 +747,9 @@ function summarizeRelease(release) {
681
747
  }
682
748
  return {
683
749
  ...summary2,
684
- error: buildFailureReason(release) ?? "Build failed (no error entry in the build log)"
750
+ error: release.failureReason ?? buildFailureReason(release) ?? "Build failed (no error entry in the build log)",
751
+ ...release.failureKind ? { failureKind: release.failureKind } : {},
752
+ ...release.failurePhase ? { failurePhase: release.failurePhase } : {}
685
753
  };
686
754
  }
687
755
  var POLL_MS2 = 3e3;
@@ -1101,33 +1169,148 @@ function remove(ctx, ref) {
1101
1169
  );
1102
1170
  }
1103
1171
 
1172
+ // src/ops/infra.ts
1173
+ var infra_exports = {};
1174
+ __export(infra_exports, {
1175
+ DEFAULT_WAIT_TIMEOUT_MS: () => DEFAULT_WAIT_TIMEOUT_MS2,
1176
+ destroy: () => destroy,
1177
+ get: () => get5,
1178
+ hibernate: () => hibernate,
1179
+ list: () => list6,
1180
+ provision: () => provision,
1181
+ rename: () => rename,
1182
+ resume: () => resume,
1183
+ waitForPhase: () => waitForPhase
1184
+ });
1185
+ var DEFAULT_WAIT_TIMEOUT_MS2 = 10 * 60 * 1e3;
1186
+ var POLL_MS3 = 3e3;
1187
+ function base2(appId) {
1188
+ return `/_internal/v2/apps/${appId}/infra`;
1189
+ }
1190
+ function list6(ctx, params) {
1191
+ return call(
1192
+ ctx,
1193
+ "GET",
1194
+ `${base2(ctx.appId)}${params?.includeDestroyed ? "?includeDestroyed=true" : ""}`
1195
+ );
1196
+ }
1197
+ function get5(ctx, params) {
1198
+ return call(
1199
+ ctx,
1200
+ "GET",
1201
+ `${base2(ctx.appId)}/${encodeURIComponent(params.id)}`
1202
+ );
1203
+ }
1204
+ function provision(ctx, params) {
1205
+ return call(ctx, "POST", base2(ctx.appId), {
1206
+ offeringId: params.offeringId,
1207
+ ...params.name ? { name: params.name } : {}
1208
+ });
1209
+ }
1210
+ function hibernate(ctx, params) {
1211
+ return call(
1212
+ ctx,
1213
+ "POST",
1214
+ `${base2(ctx.appId)}/${encodeURIComponent(params.id)}/hibernate`
1215
+ );
1216
+ }
1217
+ function resume(ctx, params) {
1218
+ return call(
1219
+ ctx,
1220
+ "POST",
1221
+ `${base2(ctx.appId)}/${encodeURIComponent(params.id)}/resume`
1222
+ );
1223
+ }
1224
+ function destroy(ctx, params) {
1225
+ return call(
1226
+ ctx,
1227
+ "POST",
1228
+ `${base2(ctx.appId)}/${encodeURIComponent(params.id)}/destroy`
1229
+ );
1230
+ }
1231
+ function rename(ctx, params) {
1232
+ return call(
1233
+ ctx,
1234
+ "POST",
1235
+ `${base2(ctx.appId)}/${encodeURIComponent(params.id)}/rename`,
1236
+ { name: params.name }
1237
+ );
1238
+ }
1239
+ async function waitForPhase(ctx, params) {
1240
+ const timeoutMs = params.timeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS2;
1241
+ const wanted = new Set(params.phases);
1242
+ const start = Date.now();
1243
+ let transientSince = null;
1244
+ for (; ; ) {
1245
+ let resource;
1246
+ try {
1247
+ ({ resource } = await get5(ctx, { id: params.id }));
1248
+ transientSince = null;
1249
+ } catch (err) {
1250
+ if (!isTransientError(err)) {
1251
+ throw err;
1252
+ }
1253
+ transientSince ??= Date.now();
1254
+ if (Date.now() - transientSince > TRANSIENT_GRACE_MS) {
1255
+ throw err;
1256
+ }
1257
+ params.onProgress?.(
1258
+ `retrying after a gateway error\u2026 (${Math.round((Date.now() - start) / 1e3)}s)`
1259
+ );
1260
+ await sleep(POLL_MS3);
1261
+ continue;
1262
+ }
1263
+ if (wanted.has(resource.phase)) {
1264
+ return { status: "done", resource };
1265
+ }
1266
+ if (resource.phase === "failed") {
1267
+ return {
1268
+ status: "failed",
1269
+ resource,
1270
+ error: resource.lastError ?? "The platform could not complete the change."
1271
+ };
1272
+ }
1273
+ if (Date.now() - start > timeoutMs) {
1274
+ return {
1275
+ status: "timeout",
1276
+ resource,
1277
+ error: `Timed out after ${Math.round(timeoutMs / 1e3)}s; resource is still ${resource.phase}`
1278
+ };
1279
+ }
1280
+ params.onProgress?.(
1281
+ `${resource.phase}${resource.detail ? ` \xB7 ${resource.detail}` : ""}\u2026 (${Math.round((Date.now() - start) / 1e3)}s)`
1282
+ );
1283
+ await sleep(POLL_MS3);
1284
+ }
1285
+ }
1286
+
1104
1287
  // src/ops/issues.ts
1105
1288
  var issues_exports = {};
1106
1289
  __export(issues_exports, {
1107
1290
  close: () => close,
1108
1291
  comment: () => comment,
1109
- create: () => create,
1292
+ create: () => create2,
1110
1293
  del: () => del,
1111
1294
  edit: () => edit,
1112
- get: () => get5,
1113
- list: () => list6,
1295
+ get: () => get6,
1296
+ list: () => list7,
1114
1297
  reopen: () => reopen
1115
1298
  });
1116
- function list6(ctx, params = {}) {
1299
+ function list7(ctx, params = {}) {
1117
1300
  return call(
1118
1301
  ctx,
1119
1302
  "GET",
1120
1303
  `/_internal/v2/apps/${ctx.appId}/issues${qs(params)}`
1121
1304
  );
1122
1305
  }
1123
- function get5(ctx, number) {
1306
+ function get6(ctx, number) {
1124
1307
  return call(
1125
1308
  ctx,
1126
1309
  "GET",
1127
1310
  `/_internal/v2/apps/${ctx.appId}/issues/${seg(number)}`
1128
1311
  );
1129
1312
  }
1130
- function create(ctx, params) {
1313
+ function create2(ctx, params) {
1131
1314
  const requestBody = {
1132
1315
  title: params.title,
1133
1316
  authorKind: "agent"
@@ -1322,9 +1505,9 @@ function grade(ctx, runId) {
1322
1505
  var methods_exports = {};
1323
1506
  __export(methods_exports, {
1324
1507
  invoke: () => invoke,
1325
- list: () => list7
1508
+ list: () => list8
1326
1509
  });
1327
- async function list7(ctx) {
1510
+ async function list8(ctx) {
1328
1511
  const dashboard = await call(
1329
1512
  ctx,
1330
1513
  "GET",
@@ -1381,19 +1564,19 @@ function invalidate(ctx, params = {}) {
1381
1564
  // src/ops/requests.ts
1382
1565
  var requests_exports = {};
1383
1566
  __export(requests_exports, {
1384
- get: () => get6,
1385
- list: () => list8,
1567
+ get: () => get7,
1568
+ list: () => list9,
1386
1569
  statsForMethod: () => statsForMethod,
1387
1570
  statsSummary: () => statsSummary
1388
1571
  });
1389
- function list8(ctx, params = {}) {
1572
+ function list9(ctx, params = {}) {
1390
1573
  return call(
1391
1574
  ctx,
1392
1575
  "GET",
1393
1576
  `/_internal/v2/apps/${ctx.appId}/requests${qs(params)}`
1394
1577
  );
1395
1578
  }
1396
- function get6(ctx, requestId) {
1579
+ function get7(ctx, requestId) {
1397
1580
  return call(
1398
1581
  ctx,
1399
1582
  "GET",
@@ -1419,18 +1602,18 @@ function statsForMethod(ctx, methodId, params = {}) {
1419
1602
  var secrets_exports = {};
1420
1603
  __export(secrets_exports, {
1421
1604
  del: () => del2,
1422
- get: () => get7,
1423
- list: () => list9,
1605
+ get: () => get8,
1606
+ list: () => list10,
1424
1607
  set: () => set2
1425
1608
  });
1426
- function list9(ctx) {
1609
+ function list10(ctx) {
1427
1610
  return call(
1428
1611
  ctx,
1429
1612
  "GET",
1430
1613
  `/_internal/v2/apps/${ctx.appId}/secrets`
1431
1614
  );
1432
1615
  }
1433
- function get7(ctx, key) {
1616
+ function get8(ctx, key) {
1434
1617
  return call(
1435
1618
  ctx,
1436
1619
  "GET",
@@ -1486,11 +1669,11 @@ function updateSettings(ctx, partial) {
1486
1669
  var users_exports = {};
1487
1670
  __export(users_exports, {
1488
1671
  createApiKey: () => createApiKey,
1489
- list: () => list10,
1672
+ list: () => list11,
1490
1673
  revokeApiKey: () => revokeApiKey,
1491
1674
  setRole: () => setRole
1492
1675
  });
1493
- function list10(ctx, params = {}) {
1676
+ function list11(ctx, params = {}) {
1494
1677
  return call(
1495
1678
  ctx,
1496
1679
  "GET",
@@ -1691,6 +1874,7 @@ function buildClient(ctx) {
1691
1874
  removeDomain: (direction, domain) => removeDomain(ctx, direction, domain)
1692
1875
  },
1693
1876
  files: bindOps(files_exports, ctx),
1877
+ infra: bindOps(infra_exports, ctx),
1694
1878
  issues: bindOps(issues_exports, ctx),
1695
1879
  jewels: bindOps(jewels_exports, ctx),
1696
1880
  methods: bindOps(methods_exports, ctx),