@wix/himalaya-cli 0.1322.0 → 0.1324.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 (28) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/comments-v1/src/extensions.d.ts +79 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/groups/src/extensions.d.ts +221 -14
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/groups/src/index.d.ts +0 -2
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/social-feed/src/index.d.ts +38 -21
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-comments.mjs +80 -0
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-groups.mjs +45 -17
  7. package/dist/cli.mjs +21 -21
  8. package/dist/preview-assets.generated.bin +0 -0
  9. package/guides/release-notes.md +25 -0
  10. package/guides/sdk-reference.json +200 -31
  11. package/guides/wix-api-usage.md +5 -0
  12. package/package.json +2 -2
  13. package/templates/branded-lite/config.ts +0 -7
  14. package/templates/branded-lite/dev/index.ts +0 -116
  15. package/templates/branded-lite/himalaya.content.json +0 -3
  16. package/templates/community-club/config.ts +0 -7
  17. package/templates/community-club/dev/index.ts +0 -116
  18. package/templates/community-club/himalaya.content.json +0 -3
  19. package/templates/events-meetups/config.ts +0 -7
  20. package/templates/events-meetups/dev/index.ts +0 -116
  21. package/templates/events-meetups/himalaya.content.json +0 -3
  22. package/templates/nonprofit-cause/config.ts +0 -7
  23. package/templates/nonprofit-cause/dev/index.ts +0 -116
  24. package/templates/nonprofit-cause/himalaya.content.json +0 -3
  25. package/templates/branded-lite/tier5-src/wix-spaces-create-group/index.ts +0 -29
  26. package/templates/community-club/tier5-src/wix-spaces-create-group/index.ts +0 -29
  27. package/templates/events-meetups/tier5-src/wix-spaces-create-group/index.ts +0 -29
  28. package/templates/nonprofit-cause/tier5-src/wix-spaces-create-group/index.ts +0 -29
@@ -11284,7 +11284,7 @@
11284
11284
  "name": "WixBlogCommentRow",
11285
11285
  "kind": "type",
11286
11286
  "jsdoc": "",
11287
- "decl": "export type WixBlogCommentRow = {\n id: string;\n authorName: string;\n /** The comment's plain text (every text run, space-joined). */\n text: string;\n createdDate: string;\n /** [rico] #3372 — the comment's Ricos document (`content.richContent`) as the API returned it, for a\n * RichContent row; undefined when the comment has none. */\n richContent?: unknown;\n};"
11287
+ "decl": "export type WixBlogCommentRow = {\n id: string;\n authorName: string;\n /** The comment's plain text (every text run, space-joined). */\n text: string;\n createdDate: string;\n /** [rico] #3372 — the comment's Ricos document (`content.richContent`) as the API returned it, for a\n * RichContent row; undefined when the comment has none. */\n richContent?: unknown;\n /** Set only on a reply row `listGroupPostComments` flattens in from `commentReplies` —\n * absent on a top-level comment. */\n parentCommentId?: string;\n /** Set only on a TOP-LEVEL comment row, true when its reply thread had more replies than\n * `repliesLimit` returned. There is no confirmed endpoint in this SDK to fetch the rest —\n * `WixRepliesListResponse`'s own `pagingMetadata` carries a cursor, but nothing in the\n * ingested spec calls it by itself — so this is a signal to show \"N more replies\" rather\n * than silently truncating, not something a caller can page past yet. */\n hasMoreReplies?: boolean;\n};"
11288
11288
  },
11289
11289
  {
11290
11290
  "name": "blogCommentRow",
@@ -11305,6 +11305,41 @@
11305
11305
  "decl": "export async function listBlogComments(postId: string): Promise<WixBlogCommentRow[]>;",
11306
11306
  "http": "GET /comments/v1/comments/list-by-resource?{…}"
11307
11307
  },
11308
+ {
11309
+ "name": "GROUPS_COMMENTS_APP_ID",
11310
+ "kind": "const",
11311
+ "jsdoc": "/** The appId Wix Groups registers as its comments provider. Same value as\n * GROUPS_APP_ID/GROUPS_APP_DEF_ID used elsewhere in this repo (social-feed's\n * reactions/create-post calls) — Groups is one of the apps where the comments\n * provider id and the app-def-id coincide. Source: comments-ng's own CONSUMERS.md. */",
11312
+ "decl": "export const GROUPS_COMMENTS_APP_ID = \"148c2287-c669-d849-d153-463c7486a694\";"
11313
+ },
11314
+ {
11315
+ "name": "createGroupPostComment",
11316
+ "kind": "function",
11317
+ "jsdoc": "/**\n * Posts a comment (or a reply, when `parentCommentId` is given) on a group feed post —\n * POST /comments/v1/comments, body { comment: { appId, contextId: groupId, resourceId:\n * feedItemId, content, parentComment? } }. Same underlying RPC as the generated\n * `createComment`, scoped to a group feed item by the appId/contextId/resourceId\n * convention in comments-ng's own CONSUMERS.md (source-verified; see the file header).\n *\n * verify-live: no round-trip against a real group post yet — the scoping comes from the\n * comments-ng consumer table, not a live create+list.\n *\n * @scope member — requires a signed-in site member.\n */",
11318
+ "decl": "export async function createGroupPostComment(\n groupId: string,\n feedItemId: string,\n text: string,\n parentCommentId?: string,\n): Promise<WixBlogCommentRow>;",
11319
+ "scope": "member",
11320
+ "verified": false
11321
+ },
11322
+ {
11323
+ "name": "WixListGroupPostCommentsResult",
11324
+ "kind": "interface",
11325
+ "jsdoc": "",
11326
+ "decl": "export interface WixListGroupPostCommentsResult {\n comments: WixBlogCommentRow[];\n /** `undefined` when the response carried none — a thread with more pages has one. */\n pagingMetadata?: { count?: number; hasNext?: boolean; cursors?: { next?: string; prev?: string } };\n}"
11327
+ },
11328
+ {
11329
+ "name": "WixListGroupPostCommentsOptions",
11330
+ "kind": "interface",
11331
+ "jsdoc": "",
11332
+ "decl": "export interface WixListGroupPostCommentsOptions {\n /** From a prior call's `pagingMetadata.cursors.next` — fetches the next page. */\n cursor?: string;\n /** Top-level comments per page. Defaults to the server's own default (unset). */\n limit?: number;\n /** Replies to include inline PER parent comment. Defaults to 20 — unset, the\n * server's documented default is to include none at all (see below). */\n repliesLimit?: number;\n}"
11333
+ },
11334
+ {
11335
+ "name": "listGroupPostComments",
11336
+ "kind": "function",
11337
+ "jsdoc": "/**\n * Lists a group feed post's comment thread — GET /comments/v1/comments/list-by-resource,\n * scoped by appId/contextId=groupId/resourceId=feedItemId (query string, never a GET\n * body — see the comment above). Same underlying RPC as the generated\n * `listCommentsByResource`.\n *\n * Replies ride the SAME response, under `commentReplies` — keyed by parent comment id —\n * but ONLY when the request's `cursorPaging.repliesLimit` asks for them; the field exists\n * precisely because the server does not include replies by default. This function sends\n * `cursorPaging.repliesLimit=20` unless `opts.repliesLimit` overrides it, and forwards\n * `opts.cursor`/`opts.limit` into `cursorPaging.cursor`/`cursorPaging.limit` so a caller\n * can actually page past `pagingMetadata.hasNext` instead of being stuck on page one. The\n * generator could not resolve a precise shape for the `commentReplies` map\n * (`Record<string, unknown>`), so its value is read as `{ replies?, pagingMetadata? }` here —\n * inferred from the already-typed, structurally identical `WixRepliesListResponse`, not\n * live-verified against a real multi-reply thread. Each reply is flattened into the SAME\n * row list, tagged with `parentCommentId`, directly after its parent, oldest reply first.\n * Top-level comments keep the SERVER's order: the request sends no sort (none is confirmed\n * for this provider), so re-sorting a page on the client would break chronology at a page\n * boundary whenever the server pages newest-first. Kept as-is, consecutive pages append\n * consistently, whatever order the server uses. A thread with more replies than `repliesLimit` sets its PARENT row's\n * `hasMoreReplies: true` instead of silently dropping them — there is no confirmed endpoint\n * in this SDK to page a single thread's replies, so this is a signal, not a cursor.\n *\n * verify-live: no round-trip against a real group post yet — the appId/contextId/resourceId\n * shape comes from the comments-ng consumer table, not a live call.\n *\n * @scope member — a signed-in site member reading a group they can see; whether an\n * anonymous visitor can read a PUBLIC group's comments is unconfirmed — needsLiveProbe.\n */",
11338
+ "decl": "export async function listGroupPostComments(\n groupId: string,\n feedItemId: string,\n opts: WixListGroupPostCommentsOptions = {},\n): Promise<WixListGroupPostCommentsResult>;",
11339
+ "http": "GET /comments/v1/comments/list-by-resource?{…}",
11340
+ "scope": "member",
11341
+ "verified": false
11342
+ },
11308
11343
  {
11309
11344
  "name": "categories.createCategory",
11310
11345
  "kind": "function",
@@ -20001,16 +20036,18 @@
20001
20036
  {
20002
20037
  "name": "queryGroups",
20003
20038
  "kind": "function",
20004
- "jsdoc": "",
20039
+ "jsdoc": "/**\n * List/search groups — POST /social-groups-proxy/groups/v2/groups/query.\n *\n * @scope visitor — browsing public groups needs no sign-in; this is an\n * already-working consumer-app feature (group discovery). Whether a\n * private/secret group's existence is visible to a non-member is unconfirmed\n * — needsLiveProbe.\n */",
20005
20040
  "decl": "export function queryGroups(\n req: WixGroupsQueryRequest = {} as WixGroupsQueryRequest,\n opts?: WixCallOptions,\n): Promise<WixQueryGroupsResponse>;",
20006
- "http": "POST /social-groups-proxy/groups/v2/groups/query"
20041
+ "http": "POST /social-groups-proxy/groups/v2/groups/query",
20042
+ "scope": "visitor"
20007
20043
  },
20008
20044
  {
20009
20045
  "name": "getGroup",
20010
20046
  "kind": "function",
20011
- "jsdoc": "",
20047
+ "jsdoc": "/**\n * Get a single group by id — GET /social-groups-proxy/groups/v2/groups/{id}.\n *\n * @scope visitor — same reasoning as `queryGroups`: reading a group's detail is\n * an already-working consumer-app feature with no sign-in required for a\n * public group.\n */",
20012
20048
  "decl": "export function getGroup(id: string, opts?: WixCallOptions): Promise<WixGroup>;",
20013
- "http": "GET /social-groups-proxy/groups/v2/groups/{…}"
20049
+ "http": "GET /social-groups-proxy/groups/v2/groups/{…}",
20050
+ "scope": "visitor"
20014
20051
  },
20015
20052
  {
20016
20053
  "name": "WixGroupCoverImage",
@@ -20025,16 +20062,22 @@
20025
20062
  "decl": "export interface WixGroupAccessRestriction {\n /** UNKNOWN | ADMIN_APPROVAL | PAID_PLANS | EVENTS */\n type?: string;\n}"
20026
20063
  },
20027
20064
  {
20028
- "name": "WixGroupWrite",
20065
+ "name": "WixGroupSettings",
20066
+ "kind": "interface",
20067
+ "jsdoc": "/** The real `GroupSettings` shape, ingested from `@wix/auto_sdk_groups_groups`\n * (codegen/wix/auto/specs/groups_groups/types.d.ts) at its latest published version as of\n * 2026-10-06 — re-ingestion confirmed no additional fields exist upstream. Do NOT add\n * fields beyond this list without re-ingesting or a live probe first. */",
20068
+ "decl": "export interface WixGroupSettings {\n membersCanInvite?: boolean;\n membersCanApprove?: boolean;\n welcomeMemberPostEnabled?: boolean;\n groupDetailsChangedPostEnabled?: boolean;\n showMemberList?: boolean;\n /** No enum is pinned anywhere in the ingested spec — needsLiveProbe. */\n allowedToInviteMembers?: string;\n /** No enum is pinned anywhere in the ingested spec — needsLiveProbe. */\n allowedToApproveJoinRequests?: string;\n aiSpamProtectionEnabled?: boolean;\n}"
20069
+ },
20070
+ {
20071
+ "name": "WixGroupWriteInput",
20029
20072
  "kind": "interface",
20030
20073
  "jsdoc": "/** Writable group fields for create/update. */",
20031
- "decl": "export interface WixGroupWrite {\n /** Required on create. */\n name?: string;\n /** UNKNOWN | PUBLIC | PRIVATE | SECRET */\n privacyStatus?: string;\n /** Plain-text group description. Social Groups v2 models this as a plain string\n * (public schema social-groups-v2-group-groups.schemas.ts → `description: z.string()`),\n * NOT a Ricos doc, so create/update accept it directly in `{ group }`. */\n description?: string;\n coverImage?: WixGroupCoverImage | null;\n accessRestriction?: WixGroupAccessRestriction;\n}"
20074
+ "decl": "export interface WixGroupWriteInput {\n /** Required on create. */\n name?: string;\n /** UNKNOWN | PUBLIC | PRIVATE | SECRET */\n privacyStatus?: string;\n /** Plain-text group description. Social Groups v2 models this as a plain string\n * (public schema social-groups-v2-group-groups.schemas.ts → `description: z.string()`),\n * NOT a Ricos doc, so create/update accept it directly in `{ group }`. */\n description?: string;\n coverImage?: WixGroupCoverImage | null;\n accessRestriction?: WixGroupAccessRestriction;\n settings?: WixGroupSettings;\n}"
20032
20075
  },
20033
20076
  {
20034
20077
  "name": "WixCreateGroupRequest",
20035
20078
  "kind": "interface",
20036
20079
  "jsdoc": "",
20037
- "decl": "export interface WixCreateGroupRequest {\n group: WixGroupWrite;\n}"
20080
+ "decl": "export interface WixCreateGroupRequest {\n group: WixGroupWriteInput;\n}"
20038
20081
  },
20039
20082
  {
20040
20083
  "name": "WixCreateGroupResponse",
@@ -20046,7 +20089,7 @@
20046
20089
  "name": "WixUpdateGroupRequest",
20047
20090
  "kind": "interface",
20048
20091
  "jsdoc": "",
20049
- "decl": "export interface WixUpdateGroupRequest {\n group: WixGroupWrite & { id: string };\n}"
20092
+ "decl": "export interface WixUpdateGroupRequest {\n group: WixGroupWriteInput & { id: string };\n}"
20050
20093
  },
20051
20094
  {
20052
20095
  "name": "WixUpdateGroupResponse",
@@ -20063,23 +20106,26 @@
20063
20106
  {
20064
20107
  "name": "createGroup",
20065
20108
  "kind": "function",
20066
- "jsdoc": "/** Create a group — POST /social-groups-proxy/groups/v2/groups. `name` is required; the entity is wrapped as `{ group }`. */",
20067
- "decl": "export function createGroup(group: WixGroupWrite): Promise<WixCreateGroupResponse>;",
20068
- "http": "POST /social-groups-proxy/groups/v2/groups"
20109
+ "jsdoc": "/**\n * Create a group — POST /social-groups-proxy/groups/v2/groups. `name` is required;\n * the entity is wrapped as `{ group }`.\n *\n * @scope owner — CONFIRMED: requires a true owner/admin-scoped API token. Returns\n * HTTP 403 for every member session, including the site owner's own account signed\n * in via a normal member-login flow. There is NO member-side workaround — do not\n * wire this to a consumer-facing \"create group\" action. See the section note above\n * for the reproduction.\n */",
20110
+ "decl": "export function createGroup(group: WixGroupWriteInput): Promise<WixCreateGroupResponse>;",
20111
+ "http": "POST /social-groups-proxy/groups/v2/groups",
20112
+ "scope": "owner"
20069
20113
  },
20070
20114
  {
20071
20115
  "name": "updateGroup",
20072
20116
  "kind": "function",
20073
- "jsdoc": "/** Update a group — PATCH /social-groups-proxy/groups/v2/groups/{id} (field-mask style). Only the supplied fields change; the request carries `{ group: { id, ... } }`. */",
20074
- "decl": "export function updateGroup(groupId: string, group: WixGroupWrite): Promise<WixUpdateGroupResponse>;",
20075
- "http": "PATCH /social-groups-proxy/groups/v2/groups/{…}"
20117
+ "jsdoc": "/**\n * Update a group — PATCH /social-groups-proxy/groups/v2/groups/{id} (field-mask style).\n * Only the supplied fields change; the request carries `{ group: { id, ... } }`.\n *\n * @scope owner — VERY LIKELY the same owner/admin-scoped-token requirement as\n * `createGroup` (same entity, same write-class, originally verified together via\n * \"the real Owner Create/Edit-Group flow\") — but NOT independently re-tested\n * against a member session this round. needsLiveProbe to confirm directly rather\n * than by inference.\n */",
20118
+ "decl": "export function updateGroup(groupId: string, group: WixGroupWriteInput): Promise<WixUpdateGroupResponse>;",
20119
+ "http": "PATCH /social-groups-proxy/groups/v2/groups/{…}",
20120
+ "scope": "owner"
20076
20121
  },
20077
20122
  {
20078
20123
  "name": "deleteGroup",
20079
20124
  "kind": "function",
20080
- "jsdoc": "/** Delete a group — DELETE /social-groups-proxy/groups/v2/groups/{id}. */",
20125
+ "jsdoc": "/**\n * Delete a group — DELETE /social-groups-proxy/groups/v2/groups/{id}.\n *\n * @scope owner — VERY LIKELY the same owner/admin-scoped-token requirement as\n * `createGroup` (same reasoning as `updateGroup` above) — not independently\n * re-tested against a member session this round. needsLiveProbe.\n */",
20081
20126
  "decl": "export function deleteGroup(groupId: string): Promise<WixDeleteGroupResponse>;",
20082
- "http": "DELETE /social-groups-proxy/groups/v2/groups/{…}"
20127
+ "http": "DELETE /social-groups-proxy/groups/v2/groups/{…}",
20128
+ "scope": "owner"
20083
20129
  },
20084
20130
  {
20085
20131
  "name": "WixGroupJoinResponse",
@@ -20090,16 +20136,18 @@
20090
20136
  {
20091
20137
  "name": "joinGroup",
20092
20138
  "kind": "function",
20093
- "jsdoc": "/** Join a group as the signed-in member — POST /social-groups/v2/groups/{id}/join. */",
20139
+ "jsdoc": "/**\n * Join a group as the signed-in member — POST /social-groups/v2/groups/{id}/join.\n *\n * @scope member — a self-service action any signed-in member session can reach\n * (distinct REST base from group CRUD above, which is owner-only). Verified live.\n */",
20094
20140
  "decl": "export function joinGroup(groupId: string): Promise<WixGroupJoinResponse>;",
20095
- "http": "POST /social-groups/v2/groups/{…}/join"
20141
+ "http": "POST /social-groups/v2/groups/{…}/join",
20142
+ "scope": "member"
20096
20143
  },
20097
20144
  {
20098
20145
  "name": "leaveGroup",
20099
20146
  "kind": "function",
20100
- "jsdoc": "/** Leave a group as the signed-in member — POST /social-groups/v2/groups/{id}/leave. */",
20147
+ "jsdoc": "/**\n * Leave a group as the signed-in member — POST /social-groups/v2/groups/{id}/leave.\n *\n * @scope member — same reasoning as `joinGroup`. Verified live.\n */",
20101
20148
  "decl": "export function leaveGroup(groupId: string): Promise<Record<string, never>>;",
20102
- "http": "POST /social-groups/v2/groups/{…}/leave"
20149
+ "http": "POST /social-groups/v2/groups/{…}/leave",
20150
+ "scope": "member"
20103
20151
  },
20104
20152
  {
20105
20153
  "name": "WixGroupMember",
@@ -20116,9 +20164,126 @@
20116
20164
  {
20117
20165
  "name": "queryMembers",
20118
20166
  "kind": "function",
20119
- "jsdoc": "/** Query a group's members — POST /social-groups-proxy/members/v2/groups/{groupId}/members/query.\n * The members service lives behind the `members` proxy base (NOT `groups`);\n * live-verified 2026-06-19 (the `groups` base 404s, this base returns 200). */",
20167
+ "jsdoc": "/**\n * Query a group's members — POST /social-groups-proxy/members/v2/groups/{groupId}/members/query.\n * The members service lives behind the `members` proxy base (NOT `groups`);\n * live-verified 2026-06-19 (the `groups` base 404s, this base returns 200).\n *\n * @scope member — reachable by a signed-in member session (listing a group's\n * members is an already-working consumer-app feature); visitor/anonymous\n * readability for a public group is unconfirmed — needsLiveProbe.\n */",
20120
20168
  "decl": "export function queryMembers(groupId: string, limit = 30): Promise<WixQueryGroupMembersResponse>;",
20121
- "http": "POST /social-groups-proxy/members/v2/groups/{…}/members/query"
20169
+ "http": "POST /social-groups-proxy/members/v2/groups/{…}/members/query",
20170
+ "scope": "member"
20171
+ },
20172
+ {
20173
+ "name": "WixJoinGroupRequest",
20174
+ "kind": "interface",
20175
+ "jsdoc": "",
20176
+ "decl": "export interface WixJoinGroupRequest {\n siteMemberId?: string;\n contactId?: string;\n /** No enum is pinned anywhere in the ingested spec — needsLiveProbe. */\n status?: string;\n requestDetails?: { rejectionReason?: string };\n}"
20177
+ },
20178
+ {
20179
+ "name": "WixListJoinGroupRequestsResponse",
20180
+ "kind": "interface",
20181
+ "jsdoc": "",
20182
+ "decl": "export interface WixListJoinGroupRequestsResponse {\n joinGroupRequests?: WixJoinGroupRequest[];\n metadata?: { count?: number; offset?: number; total?: number; tooManyToCount?: boolean };\n}"
20183
+ },
20184
+ {
20185
+ "name": "listJoinGroupRequests",
20186
+ "kind": "function",
20187
+ "jsdoc": "/**\n * List a group's pending join requests — GET /social-groups-proxy/join/v2/groups/{groupId}/join-requests.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — documented as reachable by a signed-in member whose in-group\n * role is admin/manager (not an owner-scoped API token — see the section's \"OPEN\n * QUESTION\" note); a regular member gets 403. Not independently live-probed.\n */",
20188
+ "decl": "export function listJoinGroupRequests(groupId: string, limit = 30, offset = 0): Promise<WixListJoinGroupRequestsResponse>;",
20189
+ "http": "GET /social-groups-proxy/join/v2/groups/{…}/join-requests?limit={…}&offset={…}",
20190
+ "scope": "member",
20191
+ "verified": false
20192
+ },
20193
+ {
20194
+ "name": "WixApproveJoinGroupRequestsResponse",
20195
+ "kind": "interface",
20196
+ "jsdoc": "",
20197
+ "decl": "export interface WixApproveJoinGroupRequestsResponse {\n joinGroupRequests?: WixJoinGroupRequest[];\n}"
20198
+ },
20199
+ {
20200
+ "name": "approveJoinGroupRequests",
20201
+ "kind": "function",
20202
+ "jsdoc": "/**\n * Approve pending join requests — POST /social-groups-proxy/join/v2/groups/{groupId}/join-requests/approve,\n * body { groupId, memberIds }.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — same documented-but-unverified basis as `listJoinGroupRequests`\n * (see the section's \"OPEN QUESTION\" note) — a regular member gets 403.\n */",
20203
+ "decl": "export function approveJoinGroupRequests(groupId: string, memberIds: string[]): Promise<WixApproveJoinGroupRequestsResponse>;",
20204
+ "http": "POST /social-groups-proxy/join/v2/groups/{…}/join-requests/approve",
20205
+ "scope": "member",
20206
+ "verified": false
20207
+ },
20208
+ {
20209
+ "name": "WixJoinGroupRequestRejection",
20210
+ "kind": "interface",
20211
+ "jsdoc": "",
20212
+ "decl": "export interface WixJoinGroupRequestRejection {\n memberId: string;\n reason?: string;\n}"
20213
+ },
20214
+ {
20215
+ "name": "WixRejectJoinGroupRequestsResponse",
20216
+ "kind": "interface",
20217
+ "jsdoc": "",
20218
+ "decl": "export interface WixRejectJoinGroupRequestsResponse {\n joinGroupRequests?: WixJoinGroupRequest[];\n}"
20219
+ },
20220
+ {
20221
+ "name": "rejectJoinGroupRequests",
20222
+ "kind": "function",
20223
+ "jsdoc": "/**\n * Reject pending join requests — POST /social-groups-proxy/join/v2/groups/{groupId}/join-requests/reject,\n * body { groupId, rejections }.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — same documented-but-unverified basis as `listJoinGroupRequests`\n * (see the section's \"OPEN QUESTION\" note) — a regular member gets 403.\n */",
20224
+ "decl": "export function rejectJoinGroupRequests(groupId: string, rejections: WixJoinGroupRequestRejection[]): Promise<WixRejectJoinGroupRequestsResponse>;",
20225
+ "http": "POST /social-groups-proxy/join/v2/groups/{…}/join-requests/reject",
20226
+ "scope": "member",
20227
+ "verified": false
20228
+ },
20229
+ {
20230
+ "name": "WixGroupRole",
20231
+ "kind": "interface",
20232
+ "jsdoc": "",
20233
+ "decl": "export interface WixGroupRole {\n value?: string;\n}"
20234
+ },
20235
+ {
20236
+ "name": "WixAssignRoleResponse",
20237
+ "kind": "interface",
20238
+ "jsdoc": "",
20239
+ "decl": "export interface WixAssignRoleResponse {\n groupId?: string;\n memberIds?: string[];\n role?: WixGroupRole;\n}"
20240
+ },
20241
+ {
20242
+ "name": "assignRole",
20243
+ "kind": "function",
20244
+ "jsdoc": "/**\n * Assign a role to group members — POST /social-groups-proxy/roles/v2/groups/{groupId}/roles/assign,\n * body { groupId, memberIds, role: { value } }. `role` is a loose string, not a union: no\n * literal role value (e.g. \"ADMIN\"/\"MEMBER\") is pinned anywhere in the ingested spec —\n * needsLiveProbe.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — documented as reachable by a signed-in member whose in-group\n * role is admin/manager, not an owner-scoped API token (see the join-request\n * moderation section's \"OPEN QUESTION\" note above) — a regular member gets 403.\n * Not independently live-probed.\n */",
20245
+ "decl": "export function assignRole(groupId: string, memberIds: string[], role: string): Promise<WixAssignRoleResponse>;",
20246
+ "http": "POST /social-groups-proxy/roles/v2/groups/{…}/roles/assign",
20247
+ "scope": "member",
20248
+ "verified": false
20249
+ },
20250
+ {
20251
+ "name": "WixUnassignRoleResponse",
20252
+ "kind": "interface",
20253
+ "jsdoc": "",
20254
+ "decl": "export interface WixUnassignRoleResponse {\n groupId?: string;\n siteMemberIds?: string[];\n memberIds?: string[];\n role?: WixGroupRole;\n}"
20255
+ },
20256
+ {
20257
+ "name": "unassignRole",
20258
+ "kind": "function",
20259
+ "jsdoc": "/**\n * Remove a role from group members — POST /social-groups-proxy/roles/v2/groups/{groupId}/roles/unassign,\n * body { groupId, memberIds, role: { value } }. Same unconfirmed-enum caveat as `assignRole`.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — same documented-but-unverified basis as `assignRole` — a regular\n * member gets 403.\n */",
20260
+ "decl": "export function unassignRole(groupId: string, memberIds: string[], role: string): Promise<WixUnassignRoleResponse>;",
20261
+ "http": "POST /social-groups-proxy/roles/v2/groups/{…}/roles/unassign",
20262
+ "scope": "member",
20263
+ "verified": false
20264
+ },
20265
+ {
20266
+ "name": "WixRemoveGroupMembersResponse",
20267
+ "kind": "interface",
20268
+ "jsdoc": "",
20269
+ "decl": "export interface WixRemoveGroupMembersResponse {}"
20270
+ },
20271
+ {
20272
+ "name": "removeGroupMembers",
20273
+ "kind": "function",
20274
+ "jsdoc": "/**\n * Remove members from a group — DELETE /social-groups-proxy/members/v2/groups/{groupId}/members,\n * `memberIds` repeated in the QUERY STRING (`?memberIds=a&memberIds=b`), no body — every\n * no-path-param DELETE this repo has confirmed against Wix's own generated clients sends its\n * request that way (codegen/wix/tests/delete-query-string.test.ts); unlike a GET/HEAD body,\n * which the gateway drops unconditionally, a DELETE body is NOT dropped — this is a convention\n * match with Wix's own generated clients, not a gateway constraint. Same `members` proxy base\n * `queryMembers` already live-verified (2026-06-19) uses; this specific verb+path combination\n * is not yet live-probed.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope member — same documented-but-unverified basis as `assignRole` — a regular\n * member gets 403.\n */",
20275
+ "decl": "export function removeGroupMembers(groupId: string, memberIds: string[]): Promise<WixRemoveGroupMembersResponse>;",
20276
+ "http": "DELETE /social-groups-proxy/members/v2/groups/{…}/members?{…}",
20277
+ "scope": "member",
20278
+ "verified": false
20279
+ },
20280
+ {
20281
+ "name": "updateGroupSettings",
20282
+ "kind": "function",
20283
+ "jsdoc": "/**\n * Update a group's settings — PATCH /social-groups-proxy/groups/v2/groups/{id} (field-mask),\n * via the existing `updateGroup` RPC, body { group: { id, settings } }. No separate settings\n * endpoint exists.\n *\n * verify-live: not yet called against a real group — path and shape come from the\n * ingested Social Groups spec.\n *\n * @scope owner — rides the SAME `updateGroup` RPC that is very likely owner-token-only\n * (see `updateGroup`'s own doc above) — reclassified from an earlier \"group-admin\n * member\" assumption once `createGroup`'s owner-only finding showed group CRUD writes\n * are gated by API-token tier, not in-group role. Not independently live-probed.\n */",
20284
+ "decl": "export function updateGroupSettings(groupId: string, settings: WixGroupSettings): Promise<WixUpdateGroupResponse>;",
20285
+ "scope": "owner",
20286
+ "verified": false
20122
20287
  }
20123
20288
  ]
20124
20289
  },
@@ -22808,14 +22973,16 @@
22808
22973
  {
22809
22974
  "name": "listFeedItems",
22810
22975
  "kind": "function",
22811
- "jsdoc": "/** List a group's activity feed — GET\n * https://social.wix.com/serverless/mobile/feed/v4/feedPosts (the ENRICHED read the\n * real mobile app uses). Each item carries content (Ricos blocks), commentsCount, and\n * reactionsList (count = length); the response's top-level `profiles[]` resolves each\n * item's author.id → userName + profileImage. Verified live (200). Replaces the lean\n * GET /api/v1/feed/items read, which omitted counts + author. */",
22812
- "decl": "export function listFeedItems(groupId: string, limit = 20): Promise<WixListFeedItemsResponse>;"
22976
+ "jsdoc": "/**\n * List a group's activity feed — GET\n * https://social.wix.com/serverless/mobile/feed/v4/feedPosts (the ENRICHED read the\n * real mobile app uses). Each item carries content (Ricos blocks), commentsCount, and\n * reactionsList (count = length); the response's top-level `profiles[]` resolves each\n * item's author.id → userName + profileImage. Verified live (200). Replaces the lean\n * GET /api/v1/feed/items read, which omitted counts + author.\n *\n * @scope member — verified live with a signed-in member session; visitor/anonymous\n * readability of a public group's feed is unconfirmed.\n */",
22977
+ "decl": "export function listFeedItems(groupId: string, limit = 20): Promise<WixListFeedItemsResponse>;",
22978
+ "scope": "member"
22813
22979
  },
22814
22980
  {
22815
22981
  "name": "createFeedItem",
22816
22982
  "kind": "function",
22817
- "jsdoc": "/** Create a feed post in a group as the signed-in member — POST\n * https://social.wix.com/api/v1/feed/items. `content` is the post text (modern\n * posts are Ricos rich-content serialized to a string; plain text also works with\n * contentType PLAIN_TEXT). Verified live (returns the created FeedItem). */",
22818
- "decl": "export function createFeedItem(groupId: string, content: string): Promise<WixFeedItem>;"
22983
+ "jsdoc": "/**\n * Create a feed post in a group as the signed-in member — POST\n * https://social.wix.com/api/v1/feed/items. `content` is the post text (modern\n * posts are Ricos rich-content serialized to a string; plain text also works with\n * contentType PLAIN_TEXT). Verified live (returns the created FeedItem).\n *\n * @scope member — requires a signed-in site member. Verified live.\n */",
22984
+ "decl": "export function createFeedItem(groupId: string, content: string): Promise<WixFeedItem>;",
22985
+ "scope": "member"
22819
22986
  },
22820
22987
  {
22821
22988
  "name": "WixReactionsSummary",
@@ -22832,14 +22999,16 @@
22832
22999
  {
22833
23000
  "name": "reactToFeedItem",
22834
23001
  "kind": "function",
22835
- "jsdoc": "/** Like (react to) a feed item as the signed-in member. Verified live (200 →\n * { total, reactionCodeCounts }). The real mobile app posts to the Groups\n * mobile-serverless wrapper (NOT the raw /api/v1/reactions REST route, which\n * 404s for the member): POST /serverless/mobile/feed/v3/addReaction with\n * { containerId=groupId, appDefId(Groups), reactionCode(emoji), resourceId=feedItemId, mode }.\n * Auth is the signed instance (the wixApi bridge attaches it). `mode:\"APPEND\"`\n * adds without clearing other reactions. (RE'd from wix-one-app-feed\n * feed-api.reactionPress + groups-mobile-serverless addReaction.) */",
22836
- "decl": "export function reactToFeedItem(feedItemId: string, groupId: string, reactionCode: string = DEFAULT_REACTION): Promise<WixReactionsSummary>;"
23002
+ "jsdoc": "/**\n * Like (react to) a feed item as the signed-in member. Verified live (200 →\n * { total, reactionCodeCounts }). The real mobile app posts to the Groups\n * mobile-serverless wrapper (NOT the raw /api/v1/reactions REST route, which\n * 404s for the member): POST /serverless/mobile/feed/v3/addReaction with\n * { containerId=groupId, appDefId(Groups), reactionCode(emoji), resourceId=feedItemId, mode }.\n * Auth is the signed instance (the wixApi bridge attaches it). `mode:\"APPEND\"`\n * adds without clearing other reactions. (RE'd from wix-one-app-feed\n * feed-api.reactionPress + groups-mobile-serverless addReaction.)\n *\n * @scope member — requires a signed-in site member. Verified live.\n */",
23003
+ "decl": "export function reactToFeedItem(feedItemId: string, groupId: string, reactionCode: string = DEFAULT_REACTION): Promise<WixReactionsSummary>;",
23004
+ "scope": "member"
22837
23005
  },
22838
23006
  {
22839
23007
  "name": "unreactFeedItem",
22840
23008
  "kind": "function",
22841
- "jsdoc": "/** Remove the member's reaction from a feed item — POST\n * /serverless/mobile/feed/v2/removeReaction (same body minus `mode`).\n * Verified live (200 → total decremented). */",
22842
- "decl": "export function unreactFeedItem(feedItemId: string, groupId: string, reactionCode: string = DEFAULT_REACTION): Promise<WixReactionsSummary>;"
23009
+ "jsdoc": "/**\n * Remove the member's reaction from a feed item — POST\n * /serverless/mobile/feed/v2/removeReaction (same body minus `mode`).\n * Verified live (200 → total decremented).\n *\n * @scope member — requires a signed-in site member. Verified live.\n */",
23010
+ "decl": "export function unreactFeedItem(feedItemId: string, groupId: string, reactionCode: string = DEFAULT_REACTION): Promise<WixReactionsSummary>;",
23011
+ "scope": "member"
22843
23012
  }
22844
23013
  ]
22845
23014
  },
@@ -239,6 +239,11 @@ don't retry it):
239
239
  | Members Area profile of the *current* signed-in member | member only | — |
240
240
  | `site-properties/v4` — business name, address, logo, **display currency** | ❌ 403 | ✅ |
241
241
  | Site analytics totals, owner dashboards, CRM contacts | ❌ 403 | ✅ |
242
+ | Social Groups browse/read (`queryGroups`, `getGroup`) (`@himalaya/wix-groups`) | ✅ visitor-readable, no sign-in needed | — |
243
+ | Social Groups feed read (`listFeedItems`), member list (`queryMembers`), join/leave/post/react (`@himalaya/wix-groups`, `@himalaya/wix-social-feed`) | member session verified; whether a signed-out visitor can read a PUBLIC group's feed/member list is unconfirmed — needsLiveProbe | — |
244
+ | Social Groups `createGroup` (`@himalaya/wix-groups`) — **CONFIRMED** (reproduced against a real site, 2026-10-07) | ❌ 403, even for the site owner's own member-login session | ✅ owner/admin-scoped API token only — no member-side workaround |
245
+ | Social Groups `updateGroup`/`deleteGroup` (`@himalaya/wix-groups`) — same write-class as `createGroup`, VERY LIKELY the same gating, but not independently re-tested this round | ❌ 403 (unconfirmed — needsLiveProbe) | ✅ owner/admin-scoped API token (unconfirmed — needsLiveProbe) |
246
+ | Social Groups moderation (join-request approve/reject, role assign/unassign, member removal) — documented as gated by in-group admin/manager ROLE, not independently confirmed | member session with the group's admin role (unverified) | — |
242
247
 
243
248
  When a value you need is owner-scoped, prefer a field the record already carries (e.g. price `amount` +
244
249
  `currency`, below) over an owner-only read that a visitor app can't make.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1322.0",
3
+ "version": "0.1324.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -71,5 +71,5 @@
71
71
  "artifactId": "himalaya-cli"
72
72
  }
73
73
  },
74
- "falconPackageHash": "bb7cc4c5d0d0841cd11950b890b11f51d812396f8f4a0649727b0501"
74
+ "falconPackageHash": "bf9e4b60f45454490675830b87c19b099668fb282ba36c4e4842116d"
75
75
  }
@@ -508,13 +508,6 @@ export default defineApp({
508
508
  "parentScreenId": "himi_groups",
509
509
  "tabId": ""
510
510
  },
511
- {
512
- "screenId": "himi_create_group",
513
- "isPublic": false,
514
- "paramKeys": [],
515
- "parentScreenId": "himi_groups",
516
- "tabId": ""
517
- },
518
511
  {
519
512
  "screenId": "himi_cms",
520
513
  "isPublic": true,
@@ -55711,25 +55711,6 @@ const SCREENS = runtimeSetting({
55711
55711
  }
55712
55712
  }
55713
55713
  },
55714
- {
55715
- "id": "himi_groups.new_group",
55716
- "body": {
55717
- "package": "himalaya",
55718
- "type": "Button",
55719
- "props": {
55720
- "title": "New Group",
55721
- "style": "secondary",
55722
- "fullWidth": true,
55723
- "leadingIcon": "plus",
55724
- "action": {
55725
- "actionId": "himi.open",
55726
- "params": {
55727
- "screenId": "himi_create_group"
55728
- }
55729
- }
55730
- }
55731
- }
55732
- },
55733
55714
  {
55734
55715
  "id": "himi_groups.search",
55735
55716
  "body": {
@@ -58110,103 +58091,6 @@ const SCREENS = runtimeSetting({
58110
58091
  "bundleVersion": "0.0.1"
58111
58092
  }
58112
58093
  },
58113
- "himi_create_group": {
58114
- "screenId": "himi_create_group",
58115
- "renderer": "sdui_intent",
58116
- "title": "",
58117
- "schemaVersion": 1,
58118
- "cacheControl": {
58119
- "maxAge": 0,
58120
- "staleWhileRevalidate": 0
58121
- },
58122
- "payload": {
58123
- "id": "himi_create_group.root",
58124
- "body": {
58125
- "package": "himalaya",
58126
- "type": "VStack",
58127
- "props": {
58128
- "spacing": 16,
58129
- "alignment": "leading",
58130
- "children": [
58131
- {
58132
- "id": "himi_create_group.title",
58133
- "body": {
58134
- "package": "himalaya",
58135
- "type": "Text",
58136
- "props": {
58137
- "text": "New Group",
58138
- "style": "title1"
58139
- }
58140
- }
58141
- },
58142
- {
58143
- "id": "",
58144
- "body": {
58145
- "package": "himalaya",
58146
- "type": "Text",
58147
- "props": {
58148
- "text": "$service:spacesCreateGroup.hint",
58149
- "style": "footnote",
58150
- "color": "textSecondary",
58151
- "collapseWhenEmpty": true
58152
- }
58153
- }
58154
- },
58155
- {
58156
- "id": "himi_create_group.name_field",
58157
- "body": {
58158
- "package": "himalaya",
58159
- "type": "TextField",
58160
- "props": {
58161
- "placeholder": "Group name",
58162
- "value": "",
58163
- "onChange": {
58164
- "actionId": "tier5.spacesCreateGroup.setName"
58165
- }
58166
- }
58167
- }
58168
- },
58169
- {
58170
- "id": "himi_create_group.submit",
58171
- "body": {
58172
- "package": "himalaya",
58173
- "type": "Button",
58174
- "props": {
58175
- "title": "Create",
58176
- "style": "primary",
58177
- "fullWidth": true,
58178
- "action": {
58179
- "actionId": "tier5.spacesCreateGroup.submit"
58180
- }
58181
- }
58182
- }
58183
- }
58184
- ]
58185
- }
58186
- },
58187
- "modifiers": {
58188
- "background": {
58189
- "token": "surfacePrimary"
58190
- },
58191
- "padding": {
58192
- "leading": 16,
58193
- "trailing": 16,
58194
- "top": 18,
58195
- "bottom": 28
58196
- }
58197
- }
58198
- },
58199
- "logicBundle": {
58200
- "url": "http://localhost:8190/v1/bundles/wix-spaces-create-group?integrity=",
58201
- "integrity": "",
58202
- "contentType": "application/javascript+ts-bundle",
58203
- "declaredCapabilities": [
58204
- "wix_api"
58205
- ],
58206
- "minBinaryVersion": "0.1.0",
58207
- "bundleVersion": "0.0.1"
58208
- }
58209
- },
58210
58094
  "himi_faq": {
58211
58095
  "screenId": "himi_faq",
58212
58096
  "renderer": "sdui_intent",
@@ -58,9 +58,6 @@
58
58
  "himi_coupons": {
59
59
  "displayName": "Offers"
60
60
  },
61
- "himi_create_group": {
62
- "displayName": "Create Group"
63
- },
64
61
  "himi_create_post": {
65
62
  "displayName": "Create Post"
66
63
  },
@@ -178,13 +178,6 @@ export default defineApp({
178
178
  "parentScreenId": "himi_groups",
179
179
  "tabId": "groups"
180
180
  },
181
- {
182
- "screenId": "himi_create_group",
183
- "isPublic": false,
184
- "paramKeys": [],
185
- "parentScreenId": "himi_groups",
186
- "tabId": "groups"
187
- },
188
181
  {
189
182
  "screenId": "himi_cms",
190
183
  "isPublic": true,