@wix/himalaya-cli 0.1074.0 → 0.1076.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 (32) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/automations-v1/src/index.d.ts +1 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/billing-tax-v1/src/index.d.ts +1 -1
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/business-tools-v1/src/index.d.ts +27 -10
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/comments-v1/src/index.d.ts +243 -3
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/data-collections-v1/src/index.d.ts +151 -19
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/donations/src/index.d.ts +10 -17
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/email-marketing-v1/src/index.d.ts +136 -20
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/faq-v2/src/index.d.ts +39 -28
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/gift-cards/src/index.d.ts +28 -17
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/redirects-v1/src/index.d.ts +2 -7
  11. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/seo-v1/src/index.d.ts +0 -6
  12. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/workflows-v1/src/index.d.ts +5 -0
  13. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-business-tools.mjs +9 -0
  14. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-comments.mjs +53 -5
  15. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-data-collections.mjs +40 -0
  16. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-donations.mjs +9 -0
  17. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-email-marketing.mjs +90 -0
  18. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-faq.mjs +10 -0
  19. package/dist/cli.mjs +20 -6
  20. package/guides/sdk-reference.json +744 -391
  21. package/package.json +2 -2
  22. package/templates/beauty-salon-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  23. package/templates/community-club-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  24. package/templates/events-meetups-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  25. package/templates/gym-fitness-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  26. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  27. package/templates/owner-lite/tier5-src/_shared/owner-module-data.ts +6 -2
  28. package/templates/podcast-creator-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  29. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  30. package/templates/restaurant-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  31. package/templates/retail-store-owner/tier5-src/_shared/owner-module-data.ts +6 -2
  32. package/templates/yoga-studio-owner/tier5-src/_shared/owner-module-data.ts +6 -2
@@ -31,22 +31,6 @@ export declare function wixCall<T>(method: string, path: string, body?: unknown,
31
31
  *
32
32
  * Exported so the hand-written ./extensions sidecar can build the same URLs. */
33
33
  export declare function wixQueryPath(path: string, req: unknown): string;
34
- export interface WixCreateGiftCardSignature {
35
- }
36
- export interface WixGetGiftCardSignature {
37
- }
38
- export interface WixSearchGiftCardsSignature {
39
- }
40
- export interface WixSendGiftCardEmailSignature {
41
- }
42
- export interface WixDisableGiftCardSignature {
43
- }
44
- export interface WixListGiftCardsByEmailSignature {
45
- }
46
- export interface WixListGiftCardsByContactDetailsSignature {
47
- }
48
- export interface WixCountGiftCardsSignature {
49
- }
50
34
  export interface WixGiftCard {
51
35
  orderInfo?: WixOrderInfo;
52
36
  id?: string;
@@ -332,6 +316,26 @@ export interface WixDisableGiftCardRequest {
332
316
  export interface WixDisableGiftCardResponse {
333
317
  giftCard?: WixGiftCard;
334
318
  }
319
+ export interface WixIncreaseGiftCardBalanceRequest {
320
+ giftCardId?: string;
321
+ amount?: WixAmount;
322
+ note?: string;
323
+ idempotencyKey?: string;
324
+ }
325
+ export interface WixIncreaseGiftCardBalanceResponse {
326
+ balance?: WixAmount;
327
+ currency?: string;
328
+ }
329
+ export interface WixDecreaseGiftCardBalanceRequest {
330
+ giftCardId?: string;
331
+ amount?: WixAmount;
332
+ note?: string;
333
+ idempotencyKey?: string;
334
+ }
335
+ export interface WixDecreaseGiftCardBalanceResponse {
336
+ balance?: WixAmount;
337
+ currency?: string;
338
+ }
335
339
  export interface WixListGiftCardsByEmailRequest {
336
340
  email?: string;
337
341
  }
@@ -754,7 +758,6 @@ export interface WixGiftCardsQueryBuilder {
754
758
  le?: unknown;
755
759
  lt?: unknown;
756
760
  startsWith?: unknown;
757
- hasSome?: unknown;
758
761
  in?: unknown;
759
762
  exists?: unknown;
760
763
  ascending?: unknown;
@@ -776,6 +779,14 @@ export interface WixGiftCardSearchSpec {
776
779
  export interface WixSendGiftCardEmailOptions {
777
780
  recipientEmail?: string;
778
781
  }
782
+ export interface WixIncreaseGiftCardBalanceOptions {
783
+ note?: string;
784
+ idempotencyKey?: string;
785
+ }
786
+ export interface WixDecreaseGiftCardBalanceOptions {
787
+ note?: string;
788
+ idempotencyKey?: string;
789
+ }
779
790
  export interface WixCountGiftCardsOptions {
780
791
  filter?: Record<string, unknown>;
781
792
  }
@@ -140,11 +140,8 @@ export interface WixAuthorizeRequest {
140
140
  codeChallenge?: string;
141
141
  codeChallengeMethod?: string;
142
142
  sessionToken?: string;
143
- signInUrl?: string;
144
- userConsented?: boolean;
145
- optionalLogin?: boolean;
146
- metaSiteId?: string;
147
- idp?: string;
143
+ nonce?: string;
144
+ prompt?: string;
148
145
  }
149
146
  export interface WixRedirectSessionMembersAccountParams {
150
147
  section?: string;
@@ -343,7 +340,5 @@ export interface WixCreateRedirectSessionOptionsIntentOneOf {
343
340
  bookingsBook?: WixRedirectSessionBookingsBookParams;
344
341
  ecomOrderPaymentRequest?: WixRedirectSessionEcomOrderPaymentRequestParams;
345
342
  }
346
- export interface WixCreateRedirectSessionSignature {
347
- }
348
343
  export declare function createRedirectSession(req?: WixCreateRedirectSessionRequest, opts?: WixCallOptions): Promise<WixCreateRedirectSessionResponse>;
349
344
  export * from "./extensions.js";
@@ -124,12 +124,6 @@ export interface WixResolveItemSeoTagsOptions {
124
124
  pageId?: string;
125
125
  pageName?: string;
126
126
  }
127
- export interface WixResolveSeoTagsSignature {
128
- }
129
- export interface WixResolveStaticPageSeoTagsSignature {
130
- }
131
- export interface WixResolveItemSeoTagsSignature {
132
- }
133
127
  export declare function resolveSeoTags(req?: WixResolveSeoTagsRequest, opts?: WixCallOptions): Promise<WixResolveSeoTagsResponse>;
134
128
  export declare function resolveStaticPageSeoTags(req?: WixResolveStaticPageSeoTagsRequest, opts?: WixCallOptions): Promise<WixResolveStaticPageSeoTagsResponse>;
135
129
  export declare function resolveItemSeoTags(req?: WixResolveItemSeoTagsRequest, opts?: WixCallOptions): Promise<WixResolveItemSeoTagsResponse>;
@@ -104,6 +104,11 @@ export interface WixQuery {
104
104
  export interface WixSorting {
105
105
  fieldName?: string;
106
106
  order?: string;
107
+ origin?: WixAddressLocation;
108
+ }
109
+ export interface WixAddressLocation {
110
+ latitude?: number;
111
+ longitude?: number;
107
112
  }
108
113
  export interface WixPaging {
109
114
  limit?: number;
@@ -192,6 +192,14 @@ function updateConsentPolicy(req = {}, opts) {
192
192
  opts
193
193
  );
194
194
  }
195
+ function updateBusinessRegion(req = {}, opts) {
196
+ return wixCall(
197
+ "POST",
198
+ "/site-properties/v4/properties/business-region",
199
+ req,
200
+ opts
201
+ );
202
+ }
195
203
  export {
196
204
  addLocationType,
197
205
  addTypeToLocation,
@@ -207,6 +215,7 @@ export {
207
215
  setDefaultLocation,
208
216
  updateBusinessContact,
209
217
  updateBusinessProfile,
218
+ updateBusinessRegion,
210
219
  updateBusinessSchedule,
211
220
  updateConsentPolicy,
212
221
  updateLocation,
@@ -39,16 +39,15 @@ async function createBlogComment(postId, text) {
39
39
  if (!trimmed) {
40
40
  throw new Error("comment text is required");
41
41
  }
42
- const response = await wixCall("POST", "/comments/v1/comments", {
42
+ const request = {
43
43
  comment: {
44
44
  appId: BLOG_COMMENTS_APP_ID,
45
45
  contextId: postId,
46
46
  resourceId: postId,
47
- content: {
48
- richContent: ricosText(trimmed)
49
- }
47
+ content: { richContent: ricosText(trimmed) }
50
48
  }
51
- });
49
+ };
50
+ const response = await createComment(request);
52
51
  const comment = response.comment ?? response;
53
52
  return {
54
53
  id: comment.id ?? "comment",
@@ -235,6 +234,42 @@ function getCommentThread(commentId, opts) {
235
234
  opts
236
235
  );
237
236
  }
237
+ function addCommentReaction(commentId, req = {}, opts) {
238
+ if (!commentId) throw new Error("addCommentReaction: commentId is required");
239
+ return wixCall(
240
+ "POST",
241
+ `/comments/v1/comments/${encodeURIComponent(commentId)}/reactions`,
242
+ req,
243
+ opts
244
+ );
245
+ }
246
+ function createComment(req = {}, opts) {
247
+ return wixCall(
248
+ "POST",
249
+ "/comments/v1/comments",
250
+ req,
251
+ opts
252
+ );
253
+ }
254
+ function removeCommentReaction(commentId, req = {}, opts) {
255
+ if (!commentId)
256
+ throw new Error("removeCommentReaction: commentId is required");
257
+ return wixCall(
258
+ "POST",
259
+ `/comments/v1/comments/${encodeURIComponent(commentId)}/reactions/remove`,
260
+ req,
261
+ opts
262
+ );
263
+ }
264
+ function updateComment(commentId, req = {}, opts) {
265
+ if (!commentId) throw new Error("updateComment: commentId is required");
266
+ return wixCall(
267
+ "PATCH",
268
+ `/comments/v1/comments/${encodeURIComponent(commentId)}`,
269
+ req,
270
+ opts
271
+ );
272
+ }
238
273
  function bulkPublishComment(req = {}, opts) {
239
274
  return wixCall(
240
275
  "POST",
@@ -275,14 +310,25 @@ function bulkMoveCommentByFilter(req = {}, opts) {
275
310
  opts
276
311
  );
277
312
  }
313
+ function bulkGetCommentReactions(req = {}, opts) {
314
+ return wixCall(
315
+ "POST",
316
+ "/comments/v1/bulk/comments/reactions/get",
317
+ req,
318
+ opts
319
+ );
320
+ }
278
321
  export {
322
+ addCommentReaction,
279
323
  bulkDeleteComment,
324
+ bulkGetCommentReactions,
280
325
  bulkHideComment,
281
326
  bulkModerateDraftContent,
282
327
  bulkMoveCommentByFilter,
283
328
  bulkPublishComment,
284
329
  countComments,
285
330
  createBlogComment,
331
+ createComment,
286
332
  deleteComment,
287
333
  getComment,
288
334
  getCommentThread,
@@ -293,7 +339,9 @@ export {
293
339
  moderateDraftContent,
294
340
  publishComment,
295
341
  queryComments,
342
+ removeCommentReaction,
296
343
  unmarkComment,
344
+ updateComment,
297
345
  wixCall,
298
346
  wixQueryPath
299
347
  };
@@ -124,6 +124,42 @@ function deleteDataCollectionPlugin(req = {}, opts) {
124
124
  opts
125
125
  );
126
126
  }
127
+ function createDataCollectionField(req = {}, opts) {
128
+ return wixCall(
129
+ "POST",
130
+ "/wix-data/v2/collections/create-field",
131
+ req,
132
+ opts
133
+ );
134
+ }
135
+ function patchDataCollection(dataCollectionId, req = {}, opts) {
136
+ if (!dataCollectionId)
137
+ throw new Error("patchDataCollection: dataCollectionId is required");
138
+ return wixCall(
139
+ "PATCH",
140
+ `/wix-data/v2/collections/${encodeURIComponent(dataCollectionId)}`,
141
+ req,
142
+ opts
143
+ );
144
+ }
145
+ function patchDataCollectionField(dataCollectionId, req = {}, opts) {
146
+ if (!dataCollectionId)
147
+ throw new Error("patchDataCollectionField: dataCollectionId is required");
148
+ return wixCall(
149
+ "PATCH",
150
+ `/wix-data/v2/collections/${encodeURIComponent(dataCollectionId)}/patch-field`,
151
+ req,
152
+ opts
153
+ );
154
+ }
155
+ function updateDataCollectionField(req = {}, opts) {
156
+ return wixCall(
157
+ "POST",
158
+ "/wix-data/v2/collections/update-field",
159
+ req,
160
+ opts
161
+ );
162
+ }
127
163
  function createIndex(req = {}, opts) {
128
164
  return wixCall("POST", "/data/v2/indexes", req, opts);
129
165
  }
@@ -211,6 +247,7 @@ export {
211
247
  addDataCollectionPlugin,
212
248
  addSpecialPermissions,
213
249
  createDataCollection,
250
+ createDataCollectionField,
214
251
  createIndex,
215
252
  deleteDataCollection,
216
253
  deleteDataCollectionField,
@@ -222,9 +259,12 @@ export {
222
259
  listAvailableIndexes,
223
260
  listDataCollections,
224
261
  listIndexes,
262
+ patchDataCollection,
263
+ patchDataCollectionField,
225
264
  removeSpecialPermissions,
226
265
  restoreDataCollection,
227
266
  updateDataCollection,
267
+ updateDataCollectionField,
228
268
  updatePermissions,
229
269
  updateSpecialPermissions,
230
270
  wixCall,
@@ -90,10 +90,19 @@ function bulkUpdateDonationCampaignTagsByFilter(req = {}, opts) {
90
90
  opts
91
91
  );
92
92
  }
93
+ function bulkUpdateDonationCampaigns(req = {}, opts) {
94
+ return wixCall(
95
+ "POST",
96
+ "/donation-campaigns/v2/bulk/donation-campaigns/update",
97
+ req,
98
+ opts
99
+ );
100
+ }
93
101
  export {
94
102
  bulkCreateDonationCampaigns,
95
103
  bulkUpdateDonationCampaignTags,
96
104
  bulkUpdateDonationCampaignTagsByFilter,
105
+ bulkUpdateDonationCampaigns,
97
106
  createDonationCampaign,
98
107
  getDonationCampaign,
99
108
  getDonationCampaignMetrics,
@@ -136,6 +136,87 @@ function getAudience(campaignId, req = {}, opts) {
136
136
  opts
137
137
  );
138
138
  }
139
+ function create(req = {}, opts) {
140
+ return wixCall(
141
+ "POST",
142
+ "/email-marketing/v1/campaigns",
143
+ req,
144
+ opts
145
+ );
146
+ }
147
+ function deleteCampaign(campaignId, opts) {
148
+ if (!campaignId) throw new Error("deleteCampaign: campaignId is required");
149
+ return wixCall(
150
+ "DELETE",
151
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}`,
152
+ void 0,
153
+ opts
154
+ );
155
+ }
156
+ function getCampaign(campaignId, opts) {
157
+ if (!campaignId) throw new Error("getCampaign: campaignId is required");
158
+ return wixCall(
159
+ "GET",
160
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}`,
161
+ void 0,
162
+ opts
163
+ );
164
+ }
165
+ function getComposer(campaignId, opts) {
166
+ if (!campaignId) throw new Error("getComposer: campaignId is required");
167
+ return wixCall(
168
+ "GET",
169
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/composer`,
170
+ void 0,
171
+ opts
172
+ );
173
+ }
174
+ function preview(campaignId, req = {}, opts) {
175
+ if (!campaignId) throw new Error("preview: campaignId is required");
176
+ return wixCall(
177
+ "POST",
178
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/preview`,
179
+ req,
180
+ opts
181
+ );
182
+ }
183
+ function publishCampaign(campaignId, req = {}, opts) {
184
+ if (!campaignId) throw new Error("publishCampaign: campaignId is required");
185
+ return wixCall(
186
+ "POST",
187
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/publish`,
188
+ req,
189
+ opts
190
+ );
191
+ }
192
+ function resendToNonOpeners(campaignId, req = {}, opts) {
193
+ if (!campaignId)
194
+ throw new Error("resendToNonOpeners: campaignId is required");
195
+ return wixCall(
196
+ "POST",
197
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/resend`,
198
+ req,
199
+ opts
200
+ );
201
+ }
202
+ function reuseCampaign(campaignId, req = {}, opts) {
203
+ if (!campaignId) throw new Error("reuseCampaign: campaignId is required");
204
+ return wixCall(
205
+ "POST",
206
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/reuse`,
207
+ req,
208
+ opts
209
+ );
210
+ }
211
+ function updateComposer(campaignId, req = {}, opts) {
212
+ if (!campaignId) throw new Error("updateComposer: campaignId is required");
213
+ return wixCall(
214
+ "POST",
215
+ `/email-marketing/v1/campaigns/${encodeURIComponent(campaignId)}/composer`,
216
+ req,
217
+ opts
218
+ );
219
+ }
139
220
  function identifySenderAddress(req = {}, opts) {
140
221
  return wixCall(
141
222
  "POST",
@@ -193,19 +274,28 @@ function resolveActualFromAddress(req = {}, opts) {
193
274
  );
194
275
  }
195
276
  export {
277
+ create,
278
+ deleteCampaign,
196
279
  get,
197
280
  getAudience,
281
+ getCampaign,
282
+ getComposer,
198
283
  getSenderDetails,
199
284
  identifySenderAddress,
200
285
  list,
201
286
  listRecipients,
202
287
  listStatistics,
203
288
  pauseScheduling,
289
+ preview,
204
290
  publish,
291
+ publishCampaign,
205
292
  reschedule,
293
+ resendToNonOpeners,
206
294
  resolveActualFromAddress,
207
295
  reuse,
296
+ reuseCampaign,
208
297
  sendTest,
298
+ updateComposer,
209
299
  updateSenderDetails,
210
300
  validateHtmlLinks,
211
301
  validateLink,
@@ -97,6 +97,15 @@ function queryCategories(req = {}, opts) {
97
97
  opts
98
98
  );
99
99
  }
100
+ function updateExtendedFields(id, req = {}, opts) {
101
+ if (!id) throw new Error("updateExtendedFields: id is required");
102
+ return wixCall(
103
+ "POST",
104
+ `/faq/v2/categories/${encodeURIComponent(id)}/update-extended-fields`,
105
+ req,
106
+ opts
107
+ );
108
+ }
100
109
  function createQuestionEntry(req = {}, opts) {
101
110
  return wixCall(
102
111
  "POST",
@@ -192,6 +201,7 @@ export {
192
201
  queryQuestionEntries,
193
202
  setQuestionEntryLabels,
194
203
  updateCategory,
204
+ updateExtendedFields,
195
205
  updateQuestionEntry,
196
206
  wixCall,
197
207
  wixQueryPath
package/dist/cli.mjs CHANGED
@@ -23003,7 +23003,6 @@ function shouldRevealError(args) {
23003
23003
  var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
23004
23004
  var init_validation = __esm({
23005
23005
  "../../core/ts/src/validation.ts"() {
23006
- "use strict";
23007
23006
  EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
23008
23007
  URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
23009
23008
  INTEGER_RE = /^[+-]?[0-9]+$/;
@@ -26604,7 +26603,6 @@ function validateWorkerSubtree(raw, slotId, policy, actionCatalog) {
26604
26603
  var WORKER_SUBTREE_CEILINGS, ID_PART, ACTION_ID;
26605
26604
  var init_worker_subtree = __esm({
26606
26605
  "../../core/ts/src/worker-subtree.ts"() {
26607
- "use strict";
26608
26606
  init_worker_subtree_safe_types_generated();
26609
26607
  WORKER_SUBTREE_CEILINGS = Object.freeze({
26610
26608
  maxEncodedBytes: 65536,
@@ -38386,6 +38384,7 @@ function manifestContent(m) {
38386
38384
  }
38387
38385
  function releaseContentId(m) {
38388
38386
  const content = manifestContent(m);
38387
+ delete content.appSourceHash;
38389
38388
  const widgets = content.widgets;
38390
38389
  if (widgets && typeof widgets === "object" && !Array.isArray(widgets)) content.widgets = stableWidgets(widgets);
38391
38390
  return sha256hex(stableStringify(content));
@@ -68892,6 +68891,14 @@ function pushAuthHint(status, token, target, hasOwnerIssuer = true) {
68892
68891
  if (health.expired) return `the control token stored for target "${target}" is expired \u2014 run \`${login}\` to mint a fresh one`;
68893
68892
  return `stored control token was rejected by the serve plane (401) \u2014 run \`${login}\` to mint a fresh one`;
68894
68893
  }
68894
+ function releaseIdExistsHint(status, body) {
68895
+ if (status !== 409 || !body || typeof body !== "object") return void 0;
68896
+ const b = body;
68897
+ if (b.error !== "release_id_exists") return void 0;
68898
+ const id = typeof b.releaseId === "string" ? b.releaseId : "this release id";
68899
+ const short = (v) => typeof v === "string" ? v.slice(0, 12) : "?";
68900
+ return `release \`${id}\` is already published with different content (stored ${short(b.storedContentId)}, this push ${short(b.incomingContentId)}) \u2014 a release id names one content forever, so the serve plane will not overwrite it. Commit your changes first and push again: the id is minted from the commit and the content, so a new commit gets a new id. If the tree is already committed, update himi \u2014 an older CLI minted the id from the commit alone.`;
68901
+ }
68895
68902
  async function probeControlToken(controlUrl, token, opts = {}) {
68896
68903
  if (!controlUrl) return { unauthorized: false, error: "no control url" };
68897
68904
  const hostRefusal = credentialHostRefusal(controlUrl);
@@ -70346,7 +70353,8 @@ himi v${cliVersion()} \u2014 run \`himi --version\`. If authoring commands fail
70346
70353
  return 1;
70347
70354
  }
70348
70355
  if (!r.ok) {
70349
- print({ ok: false, status: r.status, body: r.json ?? r.text });
70356
+ const hint = releaseIdExistsHint(r.status, r.json);
70357
+ print({ ok: false, status: r.status, body: r.json ?? r.text, ...hint ? { hint } : {} });
70350
70358
  return 1;
70351
70359
  }
70352
70360
  if (sendPayload.sourceGz && r.json?.template !== true) {
@@ -71609,7 +71617,8 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
71609
71617
  const { payload, record: record2, name: name2 } = addAssetPayload2(manifest, file, { name: str6(flags.name), mintReleaseId: contentReleaseId2 });
71610
71618
  const r2 = await client2().publishRelease(payload, {}, flags.live !== true);
71611
71619
  if (!r2.ok) {
71612
- print({ ok: false, status: r2.status, body: r2.json ?? r2.text });
71620
+ const hint = releaseIdExistsHint(r2.status, r2.json);
71621
+ print({ ok: false, status: r2.status, body: r2.json ?? r2.text, ...hint ? { hint } : {} });
71613
71622
  return 1;
71614
71623
  }
71615
71624
  print({
@@ -71637,7 +71646,8 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
71637
71646
  }
71638
71647
  const r = await client2().publishRelease(out.payload, {}, flags.live !== true);
71639
71648
  if (!r.ok) {
71640
- print({ ok: false, status: r.status, body: r.json ?? r.text });
71649
+ const hint = releaseIdExistsHint(r.status, r.json);
71650
+ print({ ok: false, status: r.status, body: r.json ?? r.text, ...hint ? { hint } : {} });
71641
71651
  return 1;
71642
71652
  }
71643
71653
  print({
@@ -72137,7 +72147,8 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
72137
72147
  }
72138
72148
  if (!r.ok) {
72139
72149
  const authHint = pushAuthHint(r.status, pushToken, pushTarget, !!ownerIssue);
72140
- print({ ok: false, status: r.status, body: r.json ?? r.text, ...authHint ? { hint: authHint } : {} });
72150
+ const hint = authHint ?? releaseIdExistsHint(r.status, r.json);
72151
+ print({ ok: false, status: r.status, body: r.json ?? r.text, ...hint ? { hint } : {} });
72141
72152
  return 1;
72142
72153
  }
72143
72154
  const release = r.json?.releaseId ?? manifest.releaseId;
@@ -72151,12 +72162,14 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
72151
72162
  const base = serveBase();
72152
72163
  const explicitTarget = contextualDefaultTarget !== void 0 || flags.target !== void 0 || flags["serve-url"] !== void 0 || !!process.env.HIMI_SERVE_TARGET;
72153
72164
  const loopbackWarning = base ? loopbackTargetWarning(base, explicitTarget) : null;
72165
+ const unchanged = r.json?.unchanged === true;
72154
72166
  const afterDraft = draft ? (await Promise.resolve().then(() => (init_milestones(), milestones_exports))).afterDraftPush(dir, { app, releaseId: release, content: str6(flags.content) }) : null;
72155
72167
  print({
72156
72168
  ok: true,
72157
72169
  app,
72158
72170
  releaseId: release,
72159
72171
  draft,
72172
+ ...unchanged ? { unchanged: true, unchangedNote: "the serve plane already holds this exact release under this id, so nothing was written" } : {},
72160
72173
  ...afterDraft?.postcard ? { postcard: afterDraft.postcard } : {},
72161
72174
  // Say so when the push acquired the slug on the caller's behalf. A claim takes a name
72162
72175
  // out of a global first-come namespace, counts against quota, and cannot be undone —
@@ -75211,6 +75224,7 @@ export {
75211
75224
  refreshUpdateCache,
75212
75225
  registryCandidates,
75213
75226
  releaseDriftCause,
75227
+ releaseIdExistsHint,
75214
75228
  renderDataSource,
75215
75229
  renderDeviceWidths,
75216
75230
  resolveAppSlug,