@sitepong/fastnode 0.2.0 → 0.2.2

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 (71) hide show
  1. package/dist/actions/index.cjs +70 -24
  2. package/dist/actions/index.cjs.map +1 -1
  3. package/dist/actions/index.mjs +70 -24
  4. package/dist/actions/index.mjs.map +1 -1
  5. package/dist/cert/index.cjs +17822 -24
  6. package/dist/cert/index.cjs.map +1 -1
  7. package/dist/cert/index.d.cts +3 -3
  8. package/dist/cert/index.d.ts +3 -3
  9. package/dist/cert/index.mjs +17807 -6
  10. package/dist/cert/index.mjs.map +1 -1
  11. package/dist/{cert-DtYDJBjG.d.ts → cert-Ddl7FpFT.d.ts} +1 -1
  12. package/dist/{cert-6m1R8UeW.d.cts → cert-FehieKeb.d.cts} +1 -1
  13. package/dist/cli/index.cjs +70 -24
  14. package/dist/cli/index.cjs.map +1 -1
  15. package/dist/cli/index.d.cts +1 -1
  16. package/dist/cli/index.d.ts +1 -1
  17. package/dist/cli/index.mjs +70 -24
  18. package/dist/cli/index.mjs.map +1 -1
  19. package/dist/client/index.cjs +64 -6
  20. package/dist/client/index.cjs.map +1 -1
  21. package/dist/client/index.d.cts +1 -1
  22. package/dist/client/index.d.ts +1 -1
  23. package/dist/client/index.mjs +64 -6
  24. package/dist/client/index.mjs.map +1 -1
  25. package/dist/deliver/index.d.cts +2 -2
  26. package/dist/deliver/index.d.ts +2 -2
  27. package/dist/{index-CojSGJ7m.d.ts → index-B8FOfxOw.d.ts} +1 -1
  28. package/dist/{index-CdYdwxpQ.d.cts → index-B9QeTpQK.d.cts} +1 -1
  29. package/dist/{index-AD8QXY1T.d.cts → index-BICa8odo.d.cts} +1 -1
  30. package/dist/{index-CMH_GpN9.d.cts → index-BKUapQP2.d.cts} +30 -0
  31. package/dist/{index-Ce-WMV7c.d.cts → index-BZWmOTWE.d.cts} +1 -1
  32. package/dist/{index-BWK-T2-S.d.cts → index-Bk1Gd-qE.d.cts} +1 -1
  33. package/dist/{index-D2z7RiAM.d.ts → index-CCtYhPN9.d.ts} +30 -0
  34. package/dist/{index-CCs5irG7.d.cts → index-CNHf7I4v.d.cts} +1 -1
  35. package/dist/{index-CQKpbHZt.d.ts → index-CplRWSUc.d.ts} +1 -1
  36. package/dist/{index-BpiEBPVd.d.ts → index-CtPyeMLH.d.ts} +1 -1
  37. package/dist/{index-BW8wQUGC.d.cts → index-D13sn8DO.d.cts} +1 -1
  38. package/dist/{index-Kq3rbG0u.d.ts → index-DFni8oZt.d.ts} +1 -1
  39. package/dist/{index-D82CmjMP.d.ts → index-DI1ZHr-3.d.ts} +1 -1
  40. package/dist/{index-DZaPkUnC.d.ts → index-DZoPGCbE.d.ts} +3 -3
  41. package/dist/{index-KCB2q1-8.d.cts → index-OelCoOth.d.cts} +1 -1
  42. package/dist/{index-CLsvyTkh.d.ts → index-YcKz4aRS.d.ts} +1 -1
  43. package/dist/{index-CQd4bo3G.d.cts → index-oVyLLIEK.d.cts} +3 -3
  44. package/dist/{index-CsFIp7OO.d.ts → index-xykpq6Lz.d.ts} +1 -1
  45. package/dist/index.cjs +18237 -202
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.cts +81 -21
  48. package/dist/index.d.ts +81 -21
  49. package/dist/index.mjs +18237 -201
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/lane/index.cjs +70 -24
  52. package/dist/lane/index.cjs.map +1 -1
  53. package/dist/lane/index.mjs +70 -24
  54. package/dist/lane/index.mjs.map +1 -1
  55. package/dist/match/index.d.cts +4 -4
  56. package/dist/match/index.d.ts +4 -4
  57. package/dist/pem/index.d.cts +2 -2
  58. package/dist/pem/index.d.ts +2 -2
  59. package/dist/pilot/index.d.cts +2 -2
  60. package/dist/pilot/index.d.ts +2 -2
  61. package/dist/precheck/index.d.cts +2 -2
  62. package/dist/precheck/index.d.ts +2 -2
  63. package/dist/produce/index.cjs +6 -18
  64. package/dist/produce/index.cjs.map +1 -1
  65. package/dist/produce/index.d.cts +2 -2
  66. package/dist/produce/index.d.ts +2 -2
  67. package/dist/produce/index.mjs +6 -18
  68. package/dist/produce/index.mjs.map +1 -1
  69. package/dist/sigh/index.d.cts +2 -2
  70. package/dist/sigh/index.d.ts +2 -2
  71. package/package.json +1 -1
@@ -982,6 +982,43 @@ var AppsResource = class {
982
982
  });
983
983
  return results[0] ?? null;
984
984
  }
985
+ /**
986
+ * Create an App Store Connect **app record** (the thing that shows up
987
+ * under "My Apps" and that TestFlight / App Store uploads require).
988
+ *
989
+ * This is distinct from registering an App ID in the Developer Portal —
990
+ * you need BOTH. The Developer Portal App ID unlocks provisioning
991
+ * profiles and entitlements; the App Store Connect app record unlocks
992
+ * uploads. `upload_to_testflight` fails with "Couldn't find app
993
+ * 'com.foo.bar' on the account…" when this record is missing.
994
+ *
995
+ * `bundleIdId` is the REST API primary key of the bundle id resource
996
+ * (not the identifier string) — fetch it via `bundleIds.find(identifier)`
997
+ * or from the response of `bundleIds.create()`.
998
+ *
999
+ * `sku` is an arbitrary unique string Apple uses to identify the app in
1000
+ * their internal records. If you don't have a meaningful one, pass the
1001
+ * bundle identifier itself or append a timestamp for uniqueness.
1002
+ */
1003
+ async create(params) {
1004
+ const response = await this.http.post("/v1/apps", {
1005
+ data: {
1006
+ type: "apps",
1007
+ attributes: {
1008
+ bundleId: params.bundleIdentifier,
1009
+ name: params.appName,
1010
+ sku: params.sku,
1011
+ primaryLocale: params.primaryLocale ?? "en-US"
1012
+ },
1013
+ relationships: {
1014
+ bundleId: {
1015
+ data: { type: "bundleIds", id: params.bundleIdId }
1016
+ }
1017
+ }
1018
+ }
1019
+ });
1020
+ return response.data;
1021
+ }
985
1022
  };
986
1023
 
987
1024
  // src/resources/builds.ts
@@ -2269,6 +2306,12 @@ var XcodeMetricsResource = class {
2269
2306
 
2270
2307
  // src/client/portal.ts
2271
2308
  var PORTAL_BASE = "https://developer.apple.com/services-account/QH65B2";
2309
+ function pickUniqueKeyName(base, taken) {
2310
+ if (!taken.has(base)) return base;
2311
+ let n = 1;
2312
+ while (taken.has(`${base} - ${n}`)) n++;
2313
+ return `${base} - ${n}`;
2314
+ }
2272
2315
  var PortalClient = class _PortalClient {
2273
2316
  session;
2274
2317
  teamId;
@@ -2382,12 +2425,17 @@ var PortalClient = class _PortalClient {
2382
2425
  * + period and collapse whitespace.
2383
2426
  */
2384
2427
  async createApiKey(rawName, serviceConfigurations = {}) {
2385
- const name = rawName.replace(/[^A-Za-z0-9 _\-.]/g, " ").replace(/\s+/g, " ").trim().slice(0, 50);
2386
- if (!name) throw new Error("createApiKey: name is empty after sanitization");
2428
+ const baseName = rawName.replace(/[^A-Za-z0-9 _\-.]/g, " ").replace(/\s+/g, " ").trim().slice(0, 45);
2429
+ if (!baseName) throw new Error("createApiKey: name is empty after sanitization");
2430
+ let existingNames = /* @__PURE__ */ new Set();
2387
2431
  try {
2388
- await this.listApiKeys();
2432
+ const list = await this.listApiKeys();
2433
+ existingNames = new Set(
2434
+ (list.keys ?? []).map((k) => String(k.keyName ?? "").trim())
2435
+ );
2389
2436
  } catch {
2390
2437
  }
2438
+ const name = pickUniqueKeyName(baseName, existingNames);
2391
2439
  const body = {
2392
2440
  teamId: this.teamId,
2393
2441
  name,
@@ -2442,14 +2490,24 @@ var PortalClient = class _PortalClient {
2442
2490
  * The exact body comes from @expo/apple-utils v2.1.21 — both fields
2443
2491
  * are produced by separate functions (`d` for the map, `h` for the
2444
2492
  * array) and merged into the create payload.
2493
+ *
2494
+ * Apple also rejects duplicate key names ("Another key with same
2495
+ * name exists") — we dedupe by listing existing keys first and
2496
+ * appending " (N)" until we find a free slot, mirroring the
2497
+ * provisioning profile dedup.
2445
2498
  */
2446
2499
  async createApnsAuthKey(rawName) {
2447
- const name = rawName.replace(/[^A-Za-z0-9 _\-.]/g, " ").replace(/\s+/g, " ").trim().slice(0, 50);
2448
- if (!name) throw new Error("createApnsAuthKey: name is empty after sanitization");
2500
+ const baseName = rawName.replace(/[^A-Za-z0-9 _\-.]/g, " ").replace(/\s+/g, " ").trim().slice(0, 45);
2501
+ if (!baseName) throw new Error("createApnsAuthKey: name is empty after sanitization");
2502
+ let existingNames = /* @__PURE__ */ new Set();
2449
2503
  try {
2450
- await this.listApiKeys();
2504
+ const list = await this.listApiKeys();
2505
+ existingNames = new Set(
2506
+ (list.keys ?? []).map((k) => String(k.keyName ?? "").trim())
2507
+ );
2451
2508
  } catch {
2452
2509
  }
2510
+ const name = pickUniqueKeyName(baseName, existingNames);
2453
2511
  const body = {
2454
2512
  teamId: this.teamId,
2455
2513
  name,