@wix/himalaya-cli 0.1632.0 → 0.1634.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.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/wix-payments-contract.d.ts +4 -14
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/wix-payments-wire.d.ts +2 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/wix-payments.d.ts +1 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/apple-iap-contract.d.ts +26 -13
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/apple-iap-core.d.ts +0 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/checkout-source.d.ts +3 -10
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/commerce-core.d.ts +0 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-order-backend.d.ts +0 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-verticals/stores.d.ts +2 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/index.d.ts +2 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/loyalty/src/index.d.ts +64 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/members-feed-viewer/src/index.d.ts +10 -6
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/members-v1/src/index.d.ts +36 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap-checkout.mjs +13 -45
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap.mjs +2 -4
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +7 -11
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-loyalty.mjs +39 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-members-feed-viewer.mjs +8 -7
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-members.mjs +29 -0
- package/dist/browser-plane/assets.json +166 -0
- package/dist/browser-plane/host.html +156 -0
- package/dist/browser-plane/package-reader.js +4 -0
- package/dist/browser-plane/preview-deferred/368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5.bin +0 -0
- package/dist/browser-plane/preview-deferred/37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29.bin +0 -0
- package/dist/browser-plane/preview-deferred/4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02.bin +0 -0
- package/dist/browser-plane/preview-deferred/521a0e528916d678d7588b2cddf3dadd3bb959a6d62426382f61c77a82017e35.bin +1 -0
- package/dist/browser-plane/preview-deferred/62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9.bin +0 -0
- package/dist/browser-plane/preview-deferred/642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e.bin +0 -0
- package/dist/browser-plane/preview-deferred/97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1.bin +0 -0
- package/dist/browser-plane/preview-deferred/a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e.bin +28 -0
- package/dist/browser-plane/preview-deferred/bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa.bin +0 -0
- package/dist/browser-plane/preview-deferred/c3457ce58c96b65f303fec0ddf5f06733004eaf9e21e62302b155ec63a7765f7.bin +56 -0
- package/dist/browser-plane/preview-deferred/d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134.bin +0 -0
- package/dist/browser-plane/preview-deferred/dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b.bin +0 -0
- package/dist/browser-plane/preview-deferred/dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5.bin +0 -0
- package/dist/browser-plane/preview-deferred/ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf.bin +0 -0
- package/dist/browser-plane/sw.js +13 -0
- package/dist/browser-plane/t5-frame.html +350 -0
- package/dist/browser-plane/t5-worker-frame.html +350 -0
- package/dist/cli.mjs +6499 -5089
- package/dist/preview-assets.generated.bin +0 -0
- package/fixtures/wix-canned.json +34 -1
- package/guides/getting-started.md +2 -1
- package/guides/himi-json-output.md +8 -0
- package/guides/himi-skill.md +2 -1
- package/guides/iap-screen-adoption.md +4 -4
- package/guides/importable-sdks.md +1 -1
- package/guides/one-app-section-mappings.md +3 -3
- package/guides/one-app-to-himi-app.md +81 -5
- package/guides/sdk-reference.json +8862 -4388
- package/guides/skill.md +11 -1
- package/package.json +3 -3
- package/templates/beauty-salon/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/beauty-salon/tier5-src/himi-store-product/index.ts +1 -1
- package/templates/branded-lite/config.ts +7 -0
- package/templates/branded-lite/dev/index.ts +3340 -1890
- package/templates/branded-lite/himalaya.content.json +3 -0
- package/templates/branded-lite/l10n/en.json +8 -4
- package/templates/branded-lite/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/branded-lite/tier5-src/_shared/business-chat-history.ts +4 -1
- package/templates/branded-lite/tier5-src/_shared/business-chat-presenter.ts +2 -7
- package/templates/branded-lite/tier5-src/_shared/header-badges.ts +1 -1
- package/templates/branded-lite/tier5-src/_shared/inbox-rooms.ts +68 -0
- package/templates/branded-lite/tier5-src/_shared/loyalty-offerings.ts +73 -0
- package/templates/branded-lite/tier5-src/_shared/member-activity.ts +34 -0
- package/templates/branded-lite/tier5-src/_shared/member-row-extras.ts +167 -0
- package/templates/branded-lite/tier5-src/_shared/notification-target.ts +141 -0
- package/templates/branded-lite/tier5-src/_shared/source-badges.ts +6 -4
- package/templates/branded-lite/tier5-src/_shared/wix-member-links.ts +114 -0
- package/templates/branded-lite/tier5-src/business-chat/index.ts +114 -59
- package/templates/branded-lite/tier5-src/himi-branded-lite-inbox/index.ts +83 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/earning.ts +148 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/index.ts +57 -31
- package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty-rewards/index.ts +208 -0
- package/templates/branded-lite/tier5-src/himi-branded-lite-notifications/index.ts +62 -7
- package/templates/branded-lite/tier5-src/himi-store-product/index.ts +1 -1
- package/templates/branded-lite/tier5-src/wix-spaces-members/index.ts +60 -12
- package/templates/community-club/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/events-meetups/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/gym-fitness/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/gym-fitness/tier5-src/himi-store-product/index.ts +1 -1
- package/templates/nonprofit-cause/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/podcast-creator/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/portfolio-creative/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/portfolio-creative/tier5-src/himi-store-product/index.ts +1 -1
- package/templates/restaurant/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/retail-store/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/retail-store/tier5-src/himi-store-product/index.ts +1 -1
- package/templates/salon-spa/dev/index.ts +112 -70
- package/templates/salon-spa/tier5-src/_shared/branded-lite-hosted.ts +1 -0
- package/templates/salon-spa/tier5-src/_shared/business-chat-history.ts +4 -1
- package/templates/salon-spa/tier5-src/_shared/business-chat-presenter.ts +2 -7
- package/templates/salon-spa/tier5-src/_shared/inbox-rooms.ts +68 -0
- package/templates/salon-spa/tier5-src/business-chat/index.ts +114 -59
- package/templates/yoga-studio/tier5-src/_shared/branded-lite-hosted.ts +1 -0
|
Binary file
|
package/fixtures/wix-canned.json
CHANGED
|
@@ -1230,6 +1230,36 @@
|
|
|
1230
1230
|
"count": 2
|
|
1231
1231
|
}
|
|
1232
1232
|
},
|
|
1233
|
+
"POST /badges/v4/assignments/query": {
|
|
1234
|
+
"badgeAssignments": [
|
|
1235
|
+
{
|
|
1236
|
+
"id": "asg-0001",
|
|
1237
|
+
"badgeId": "bdg-0001",
|
|
1238
|
+
"memberId": "mem-0001"
|
|
1239
|
+
}
|
|
1240
|
+
],
|
|
1241
|
+
"pagingMetadata": {
|
|
1242
|
+
"count": 1,
|
|
1243
|
+
"hasNext": false
|
|
1244
|
+
}
|
|
1245
|
+
},
|
|
1246
|
+
"POST https://apps.wix.com/_api/members-one-app/api/members": {
|
|
1247
|
+
"items": [
|
|
1248
|
+
{
|
|
1249
|
+
"id": "mem-0001",
|
|
1250
|
+
"displayName": "Dana R.",
|
|
1251
|
+
"member": {
|
|
1252
|
+
"role": "MEMBER",
|
|
1253
|
+
"online": false,
|
|
1254
|
+
"lastOpenApp": {
|
|
1255
|
+
"amount": 3,
|
|
1256
|
+
"unit": "hour"
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
],
|
|
1261
|
+
"total": 1
|
|
1262
|
+
},
|
|
1233
1263
|
"POST /badges/v4/badges/query": {
|
|
1234
1264
|
"badges": [
|
|
1235
1265
|
{
|
|
@@ -1408,7 +1438,7 @@
|
|
|
1408
1438
|
]
|
|
1409
1439
|
}
|
|
1410
1440
|
},
|
|
1411
|
-
"POST /members-feed-viewer/v1/members-viewer-feed-notifications/query": {
|
|
1441
|
+
"POST /_api/members-feed-viewer/v1/members-viewer-feed-notifications/query": {
|
|
1412
1442
|
"viewerFeedNotifications": [
|
|
1413
1443
|
{
|
|
1414
1444
|
"id": "ntf-0001",
|
|
@@ -2323,5 +2353,8 @@
|
|
|
2323
2353
|
"balance": 25
|
|
2324
2354
|
}
|
|
2325
2355
|
}
|
|
2356
|
+
},
|
|
2357
|
+
"POST /_api/referral-rewards/v1/referral-rewards/query": {
|
|
2358
|
+
"referralRewards": []
|
|
2326
2359
|
}
|
|
2327
2360
|
}
|
|
@@ -495,7 +495,8 @@ select the deployed customer target explicitly:
|
|
|
495
495
|
```sh
|
|
496
496
|
himi login --browser --target wix
|
|
497
497
|
wix login
|
|
498
|
-
# no browser?
|
|
498
|
+
# no browser here? pipe the owner's held Wix token: printf '%s' "$TOKEN" | himi login --wix --wix-token-stdin --target wix
|
|
499
|
+
# (or export WIX_API_KEY on a server, then himi login --wix --target wix) instead of the two lines above
|
|
499
500
|
himi dist --app <app> --release <release-id> --site <owned-site-id> \
|
|
500
501
|
--platform ios,android --signing byo --android-signing qa-keystore --wait --target wix
|
|
501
502
|
```
|
|
@@ -14,6 +14,12 @@ require those fields. Existing error-only push refusals now also carry `ok: fals
|
|
|
14
14
|
Output channels and process exit codes are unchanged. Read JSON failures on both
|
|
15
15
|
stdout and stderr; progress/warnings are not failure envelopes.
|
|
16
16
|
|
|
17
|
+
## `himi sdk unverified` codes
|
|
18
|
+
|
|
19
|
+
| Code | Meaning |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `sdk_verification_unknown` | A cached SDK reference has one or more exports without verification metadata (an older or mixed catalog), so the unverified list cannot be trusted. Refresh the catalog (unpin an older kit first if needed). Exit 2. |
|
|
22
|
+
|
|
17
23
|
## `himi store preflight` / `himi store upload` / `himi testflight` config failures
|
|
18
24
|
|
|
19
25
|
| Code | Meaning |
|
|
@@ -106,6 +112,7 @@ return an empty array.
|
|
|
106
112
|
| `identity_source_unverified` | Collected source hashes or the business display name cannot be verified. Recollect older evidence that did not save business identity. |
|
|
107
113
|
| `identity_target_unverified` | The technical app slug, target compilation or complete built descriptors are unavailable. |
|
|
108
114
|
| `literal_slug_visible` | Built display text or the known business-chat identity seed contains the technical slug instead of the collected business identity, without matching exact authored source copy. |
|
|
115
|
+
| `app_name_is_slug` | `config.ts`'s `name` (the launcher label and the screens that show the app name) is still the technical slug, while the built display text has no literal slug to report. The result carries `appName` with a `hint`; `--fix` writes the collected business name into `config.ts` (only a literal equal to the slug is rewritten, never a name the author chose). |
|
|
109
116
|
|
|
110
117
|
The check reads built descriptors, not every possible runtime string. A passing
|
|
111
118
|
result does not verify dynamic live data, translations, branding images or device
|
|
@@ -133,6 +140,7 @@ is a positional screen ID; use `--deep=<value>` to diagnose a nonnumeric depth.
|
|
|
133
140
|
| `ux_evidence_unreadable` | The UX evidence artifact cannot be read. |
|
|
134
141
|
| `lint_errors` | Build/lint validation found errors. |
|
|
135
142
|
| `depth_budget_exceeded` | A screen or a bound list/grid row template nests deeper, or has more components, than the depth budget (`depth-budget` validator pass), or any of its JSON — props, modifiers, `input`, action `args` — nests past the raw-JSON ceiling of 256 levels. Each `issues[]` entry with `pass: "depth-budget"` carries the JSON `path` of the deepest node (the tree root for a node count, the first value past the ceiling for raw JSON), the `limit` and the `actual` value. Takes precedence over `lint_errors`, and `--force` does not override it: content over the budget overflows the renderer's stack on devices already in the field. Flatten the layout and push again. `himi patch screen` refuses an over-deep raw descriptor with the same code, before any network request, and `himi pack` / `himi template publish` refuse with it even under `--force`. |
|
|
143
|
+
| `placeholder_site_binding` | The app declares `wix_api` and uses the `wix-consumer` auth provider, but its resolved auth still has the scaffold placeholder `clientId` (`YOUR_WIX_CLIENT_ID`) or `siteUrl` (`https://your-site.example.com`), and it is not bound to a source site through the One App identity. Nothing is published: every Wix call would fail. Bind the site (`himi one-app provision` for a One App migration; otherwise a real clientId and siteUrl). `--force` does not override it. |
|
|
136
144
|
| `one_app_readiness_failed` | Reserved legacy refusal code. One App migration readiness is now advisory: publish and promotion report structured warnings instead. Other independent release checks may still refuse a push. |
|
|
137
145
|
| `control_token_expired` | The selected control token has expired. |
|
|
138
146
|
| `app_source_contains_secrets` | Source archiving detected a possible credential. |
|
package/guides/himi-skill.md
CHANGED
|
@@ -518,7 +518,8 @@ select the deployed customer target explicitly:
|
|
|
518
518
|
```sh
|
|
519
519
|
himi login --browser --target wix
|
|
520
520
|
wix login
|
|
521
|
-
# no browser?
|
|
521
|
+
# no browser here? pipe the owner's held Wix token: printf '%s' "$TOKEN" | himi login --wix --wix-token-stdin --target wix
|
|
522
|
+
# (or export WIX_API_KEY on a server, then himi login --wix --target wix) instead of the two lines above
|
|
522
523
|
himi dist --app <app> --release <release-id> --site <owned-site-id> \
|
|
523
524
|
--platform ios,android --signing byo --android-signing qa-keystore --wait --target wix
|
|
524
525
|
```
|
|
@@ -14,7 +14,7 @@ and generated templates. Historical receipts retain their recorded amounts.
|
|
|
14
14
|
| `himi-branded-lite-plans` | Pricing Plan ID; `priceLine` | Shared Apple pricing and existing Join action through `pricingPlanOrders`; only one-time unlimited Plans can start Apple checkout |
|
|
15
15
|
| `wix-spaces-plan-detail` | Pricing Plan ID; `price` | Shared pricing; remains read-only |
|
|
16
16
|
| `createCheckoutService` / `checkoutScreen` | Pricing Plan ID; `priceLine` | Same shared Plans pricing and purchase; existing options, copy, login destination and factory shape retained |
|
|
17
|
-
| `himi-store-product` | Stores product ID; `price` | Shared pricing; physical options/add/save retained. With Stores Apple sales enabled, a mapped digital product without options offers Buy now through
|
|
17
|
+
| `himi-store-product` | Stores product ID; `price` | Shared pricing; physical options/add/save retained. With Stores Apple sales enabled, a mapped digital product without options offers Buy now through wix-iap StartItemPayment, which places and charges the eCom order server-side ([checkout](iap-wix-checkout.md#wix-stores-items-through-startitempayment)) |
|
|
18
18
|
| `himi-store-shop` | Stores product ID; price in `subtitle` | Batched visible pricing, including paged results; saved/cache metadata retains the commerce price rather than an Apple offer |
|
|
19
19
|
| `himi-store-saved` | Stored product ID; `price` | Reprices saved rows through the shared source when shown; no added purchase action |
|
|
20
20
|
| `himi-branded-lite-home` | Stores product IDs; hero and rail prices | Shared pricing on visible product offers; navigation-only Program cards remain unchanged |
|
|
@@ -44,9 +44,9 @@ withdraw the shared checkout's access state; reading existing access never creat
|
|
|
44
44
|
The existing Stores adapter reads `paymentStatus: PAID` as granted. That proves payment,
|
|
45
45
|
not usable delivery of a download or course. It also lacks a verified member-scoped
|
|
46
46
|
existing-ownership read. Only the product screen installs `storesProductOrders` for sales, while
|
|
47
|
-
`storesAppleSalesEnabled()` is true. As shipped, `STORES_APPLE_SALES_ENABLED` is on
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
`storesAppleSalesEnabled()` is true. As shipped, `STORES_APPLE_SALES_ENABLED` is on, so mapped digital
|
|
48
|
+
products without options are paid through wix-iap StartItemPayment: the device opens no eCom checkout
|
|
49
|
+
and makes no cashier charge. Live digital fulfillment remains unverified.
|
|
50
50
|
The cart and list screens do not start Apple sales. A confirmed physical product retains its
|
|
51
51
|
regular checkout.
|
|
52
52
|
Unknown product facts, unsupported catalog apps and missing routing fail closed.
|
|
@@ -36,7 +36,7 @@ package in one greppable file) or `GET /v1/sdk/<name>` over HTTP; in the CLI,
|
|
|
36
36
|
- `@himalaya/hhp` — —
|
|
37
37
|
- `@himalaya/himi-apps` — Tier-5 typed binding for cross-app open / host queries.
|
|
38
38
|
- `@himalaya/iap` — Tier-5 typed binding to the platform's in-app-purchase capability.
|
|
39
|
-
- `@himalaya/iap-checkout` — @wix/himalaya/iap-checkout — the ONE shared flow that sells a digital Wix item through the App Store, for any screen:
|
|
39
|
+
- `@himalaya/iap-checkout` — @wix/himalaya/iap-checkout — the ONE shared flow that sells a digital Wix item through the App Store, for any screen: mobile-apps-wix-iap's payment, the managed StoreKit purchase and the vertical's own access read.
|
|
40
40
|
- `@himalaya/keyboard` — Tier-5 typed binding for the platform's keyboard capability.
|
|
41
41
|
- `@himalaya/kyber-api` — narrow Tier-5 binding for Kyber BO HTTP calls.
|
|
42
42
|
- `@himalaya/l10n` — synchronous app-catalog copy (SDK foundation; requires host integration).
|
|
@@ -159,8 +159,8 @@ carousel placement remain separate gaps; the mappings above stay Partial.
|
|
|
159
159
|
|
|
160
160
|
| Source sectionDefinitionId | Source viewer component | Himalaya implementation | Placement / reuse | Class | Settings, actions and gaps |
|
|
161
161
|
| --- | --- | --- | --- | --- | --- |
|
|
162
|
-
| `loyalty_status_section` | `loyalty.components.StatusSection` | [himi_loyalty member card](https://github.com/wix-private/himalaya/blob/
|
|
163
|
-
| `loyalty_offering_section` | `loyalty.components.OfferingSection` | [himi_loyalty](https://github.com/wix-private/himalaya/blob/
|
|
162
|
+
| `loyalty_status_section` | `loyalty.components.StatusSection` | [himi_loyalty member card](https://github.com/wix-private/himalaya/blob/e5d1313654a200084499ec74eb68fa77992d096e/apps/himi-branded-lite/dev/index.ts) (`buildLoyalty` points card) + [loyalty worker](https://github.com/wix-private/himalaya/blob/e5d1313654a200084499ec74eb68fa77992d096e/core/dev-server/tier5-bundles-src/himi-branded-lite-loyalty/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") | Existing base; adaptation needed | Partial | Member-only points, tier, expiry and the reward count are implemented in the shared screen. The count includes affordable active rewards, active claimed loyalty coupons and active referral coupons; failed reads leave the total unknown. View opens `himi_loyalty_reward`, with current-member eligibility, a confirmation step, coupon redemption and balance refresh. Private fields never hydrate or persist. Source-widget placement still requires adaptation; successful member REST recordings remain required for migration acceptance. |
|
|
163
|
+
| `loyalty_offering_section` | `loyalty.components.OfferingSection` | [himi_loyalty](https://github.com/wix-private/himalaya/blob/e5d1313654a200084499ec74eb68fa77992d096e/apps/himi-branded-lite/dev/index.ts) + [rewards worker](https://github.com/wix-private/himalaya/blob/e5d1313654a200084499ec74eb68fa77992d096e/core/dev-server/tier5-bundles-src/himi-branded-lite-loyalty/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") | Existing base; adaptation needed | Partial | Shared `himi_loyalty` supports base/custom tier offerings, exact tier configurations, benefit descriptions and Show all after three tier cards. Active birthday rules expose member birthday editing; active social-follow rules expose configured supported HTTPS channels. The published test app has four Loyalty instances with empty settings, and neither definition declares settingsData, so no offering-selection field is inferred. Source-widget placement and source rollout flags still need per-app review; the Himi controls follow active rule/channel configuration. |
|
|
164
164
|
|
|
165
165
|
### 8. referrals-section-definitions.json
|
|
166
166
|
|
|
@@ -425,7 +425,7 @@ These rows have reusable code, but their remaining requirements must not disappe
|
|
|
425
425
|
- [Photo Albums worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/wix-spaces-photo-albums/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") explicitly says no album API is wired and renders an empty state.
|
|
426
426
|
- [Restaurant basket worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/wix-spaces-food-orders/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") explicitly avoids the owner-capable Orders API and supplies no placed-order history.
|
|
427
427
|
- [Saved products worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/himi-store-saved/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") uses device-local saves; it does not establish an account-backed wishlist mapping.
|
|
428
|
-
-
|
|
428
|
+
- The shared Loyalty worker now includes member status and links to a separate member reward/coupon journey. This does not automatically implement an arbitrary source section placement; keep member credentials and rendered evidence in the migration acceptance record.
|
|
429
429
|
- [Events detail worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/himi-events-detail/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") documents the owner-scoped, best-effort attendee read; it does not supply a full consumer guest list.
|
|
430
430
|
- [Groups feed worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/himi-branded-lite-feed/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") chooses its group internally; it does not accept a fixed source group selection.
|
|
431
431
|
- [Program detail worker](https://github.com/wix-private/himalaya/blob/97f1542f2f7d6e8cb7a902b912c87dcaa37e5a67/core/dev-server/tier5-bundles-src/himi-branded-lite-program/index.ts "audience-lint-ok: optional pinned upstream evidence, not a local authoring dependency") explicitly identifies the legacy CHALLENGES app ID, supporting the Online Programs family mapping; it does not provide the missing participating-program carousel.
|
|
@@ -163,6 +163,7 @@ The CLI's versioned native-widget inventory supplies these rows automatically.
|
|
|
163
163
|
| `achievements_carousel_section` | The same Program state/display rules, default limit 5 and page dots. |
|
|
164
164
|
| `newBlog_postlist_vertical_section`, `newBlog_compact_post_list_vertical_section` | Row display options, unlimited paging or a limited count with See All Posts, and layout. Coverage derives these per placement from the authored settings: see "Generate blog post lists from their settings". |
|
|
165
165
|
| `events_list_section` | Date badge, Share and the appropriate RSVP/ticket action. |
|
|
166
|
+
| `platform_elements_image_section` | Press behavior. `onPressType: "openAsModal"` opens the image full screen: tap it with the reserved `himi.lightbox` action and `args.images` set to `[{ "url": <the image url>, "alt": <its accessibility label> }]`. `nothing` and a `none` action need no tap. Coverage derives the row per placement from the authored value. |
|
|
166
167
|
| `platform_general_members_section`, `platform_general_members_section_bp` | Effective member strip and directory journey: totals/search, alphabetical sections, Follow, activity/privacy. Distinguish badge chips from actual viewed-member program progress. |
|
|
167
168
|
| `file_share_section` | Signed-in-only file/folder section. Preserve access rules, instance settings and View All (`media.openFileShareListScreen`); a media gallery is not File Share. |
|
|
168
169
|
| `events_guests_section` | Signed-in-only guests for the configured event, preserving the event selector, guest privacy and display settings; an avatar summary is not the full guest list. |
|
|
@@ -282,7 +283,10 @@ the same values:
|
|
|
282
283
|
- **Row facts.** Every `displayOptions` key set to `true` is shown: `author` (avatar, name and the
|
|
283
284
|
admin badge), `comments` (comment count), `likes`, `times_viewed`, `post_date`, `reading_time`,
|
|
284
285
|
`cover_image`. Bind each from the post and its metrics. A row that shows a fixed subset such as
|
|
285
|
-
date, views and likes is a gap. A key that is `false` or absent stays hidden.
|
|
286
|
+
date, views and likes is a gap. A key that is `false` or absent stays hidden. Blog v3 `queryPosts` returns no
|
|
287
|
+
view, like or comment counts unless the request asks for `fieldsets: ["METRICS"]` (without it every count reads
|
|
288
|
+
0), and only the author's `memberId`: resolve the name and photo with `getMember` and show the author only when
|
|
289
|
+
the member resolves. A count the API did not return stays hidden, never 0.
|
|
286
290
|
- **Unlimited.** `contentSettings.postsPerCategory: "unlimited"` follows the page cursor to the last
|
|
287
291
|
post. Bind `pagination.cursor` and `pagination.onLoadMore` as described in `himi docs
|
|
288
292
|
designing-himi-screens`; a fixed first page (for example 20 posts) is not an unlimited list.
|
|
@@ -427,7 +431,9 @@ Apply these interpretation rules:
|
|
|
427
431
|
It resolves the effective source theme with the reader the source app instance
|
|
428
432
|
actually uses, then compares the resolved primary, background and content colors,
|
|
429
433
|
each button's `borderRadius` and `outlineWidth`, and resolved heading/body font families
|
|
430
|
-
against the app's `tokens.json`.
|
|
434
|
+
against the app's `tokens.json`. A Branded theme that stores only `primaryColor`
|
|
435
|
+
(no `colors`) is still compared: that value is the app's brand color, so the template's
|
|
436
|
+
default accent fails the check until `--fix` writes it.
|
|
431
437
|
Hex case and shorthand are normalized; an absent button token is compared with the
|
|
432
438
|
value the renderer draws (an outline only on `secondary`; a radius of `radius.pill`,
|
|
433
439
|
else 24), not called a difference. A variant without its own radius must draw the
|
|
@@ -504,6 +510,22 @@ Apply these interpretation rules:
|
|
|
504
510
|
list then shows no Ended label for a time without an offset, which is correct, and a
|
|
505
511
|
`business_time_zone_unavailable` warning says so. A re-apply keeps the zone for the same site and
|
|
506
512
|
drops it for another.
|
|
513
|
+
- **Write the verified values with the CLI.** Run `himi one-app provision --evidence-dir .himi/one-app --content .`
|
|
514
|
+
after scaffolding. From the collected evidence it sets `currency` on `himi_loyalty` and `businessTimeZone` on
|
|
515
|
+
`himi_services`, `himi_service` and `himi_time` (a value it could not verify stays as the template ships it;
|
|
516
|
+
nothing is invented). It writes the business name into `config.ts`'s `name` and over the slug `himi init` baked
|
|
517
|
+
into displayed names (display slots only, never ids or URLs; a name you chose is kept), so the normal flow needs
|
|
518
|
+
no `validate-identity --fix`. It states the bottom bar as native (`navigation.tabBar.presentation: "native"`; an
|
|
519
|
+
explicit `"kit"` is kept; the output's `tabBar` reports `set`, `unchanged` or `absent`). When the collection
|
|
520
|
+
recorded `memberChat: true` (never a guess), it opens the member Inbox from every baked door (the top-bar chat
|
|
521
|
+
action, the drawer's Inbox item, the chat thread's parent and "Back to inbox", the Profile link) if the scaffold
|
|
522
|
+
contains `himi_inbox`; otherwise the output's `chat` says `unverified` and the doors keep opening
|
|
523
|
+
`himi_business_chat`. `himi one-app header-badges` writes the top-bar action, so run provision again after it.
|
|
524
|
+
It also **binds the app to the source site**: the scaffold's `WixConsumerAuthProvider` carries placeholders
|
|
525
|
+
(`YOUR_WIX_CLIENT_ID`, `your-site.example.com`) that make every Wix read fail, so provision writes
|
|
526
|
+
`visitorSource: "one-app"`, the collected `metaSiteId` and `siteUrl` (a real clientId you set is kept;
|
|
527
|
+
`siteBinding` reports `set`, `unchanged`, `unverified` or `absent`). `himi push` refuses a Wix-backed app that
|
|
528
|
+
still has the placeholders (code `placeholder_site_binding`, no `--force`). It is safe to run again.
|
|
507
529
|
- **Native navigation is the migration target.** Use the shell's native top bar
|
|
508
530
|
and, for bottom-tab navigation, `navigation.tabBar.presentation: "native"`.
|
|
509
531
|
Do not recreate the source Detailed header, call `detailedHeader`, or insert a
|
|
@@ -536,6 +558,20 @@ Apply these interpretation rules:
|
|
|
536
558
|
totals. A collected total is a source snapshot. Only use an injected live
|
|
537
559
|
count reader when its public, site-bound permission path has been verified.
|
|
538
560
|
See the screens SDK's downloadable business-contact guide for the full recipe.
|
|
561
|
+
- **Chat opens the Inbox when the source allows member chat.** The source top-bar chat
|
|
562
|
+
button opens a member-to-business room only when the branded app's `inbox.chatType`
|
|
563
|
+
is `MEMBER_TO_BUSINESS`; in every other case, including an app whose config has no
|
|
564
|
+
`inbox` at all, it opens the Inbox: a list of the member's conversations with the
|
|
565
|
+
business and with other members, plus a way to start a new chat with a member.
|
|
566
|
+
`collect` reads that setting from the app's public mobile config, as a Visitor, and
|
|
567
|
+
records it in `inbox-settings.json` (`chatType` and its `source`) and `manifest.json`
|
|
568
|
+
`memberChat`: `true` or `false`, or `null` when it could not be read or the source is
|
|
569
|
+
a free One App (warning `inbox_chat_type_unknown`). Carry it: when `memberChat` is
|
|
570
|
+
`true`, set provisioning `memberChat: true` and point the top-bar chat action at
|
|
571
|
+
`himi_inbox`; every other Inbox entry (tab, drawer, Explore, Profile) follows the same
|
|
572
|
+
flag. When it is `false` or `null` leave `memberChat` unset and keep the top-bar chat
|
|
573
|
+
on `himi_business_chat`. Never turn member chat on from a guess: an owner who limited
|
|
574
|
+
the app to the business must not gain a member chat.
|
|
539
575
|
- Emit resolved native actions in `navigation.topBarDefault` or a complete
|
|
540
576
|
per-screen `topBar` override. The shell owns back/menu controls. Per-screen
|
|
541
577
|
actions support `hiddenPath` when `navigation.topBarDefault.actions` declares
|
|
@@ -682,8 +718,9 @@ Apply these interpretation rules:
|
|
|
682
718
|
output against the source. A persistent nav worker needs a supported refresh
|
|
683
719
|
path; a screen-only load, page-row count or foreground push receipt count is
|
|
684
720
|
insufficient. The source Member notification aggregate is MOBILE/UNSEEN, capped
|
|
685
|
-
at100. `countUnseenNotifications(
|
|
686
|
-
|
|
721
|
+
at100. `countUnseenNotifications()` reads that aggregate through the source Member
|
|
722
|
+
route. Name no site: a bound host sends its own, and the multi-tenant Player (no
|
|
723
|
+
bound site) lets the Member credential decide and refuses any named one. It requires the updated native core, rebuilt
|
|
687
724
|
consuming binaries and published SDK; default web and old binaries remain
|
|
688
725
|
unavailable for this reader. Never replace that refusal with zero.
|
|
689
726
|
Chat counts unread rooms, while legacy cart counters can include unsynced local
|
|
@@ -1257,6 +1294,24 @@ function call in the literal makes them fail with "expected a `"<screenId>": {`
|
|
|
1257
1294
|
authored descriptor". Blank lines and whole-line `//` comments between entries are
|
|
1258
1295
|
accepted.
|
|
1259
1296
|
|
|
1297
|
+
Do not write a generator of your own. `himi one-app generate --evidence-dir .himi/one-app --content .` turns each
|
|
1298
|
+
source page into a screen descriptor from the collected evidence alone: the screen id and title come from the page's
|
|
1299
|
+
source label, and styles, alignment, buttons, images and their tap (`openAsModal` opens full screen), the contact
|
|
1300
|
+
section and the business description are read from the source. A section it has no mapping for is reported with
|
|
1301
|
+
`sections_unmapped` and nothing stands in for it. Data sections use shared modules and recipes
|
|
1302
|
+
(`recipes/*.json`) when the scaffold ships them; the current starter ships none, so today they take the fallback
|
|
1303
|
+
below. A page with such modules gets ONE worker, `tier5-src/page-<screen>/index.ts`, that registers the modules
|
|
1304
|
+
its sections use (blog list, programs carousel, inline events). A page that is only a template vertical (programs list,
|
|
1305
|
+
members, loyalty, shop, groups feed) opens the template's screen, and a groups feed passes the source's own title,
|
|
1306
|
+
"Group list" label and post count. A data section never vanishes: when the shared modules cannot honor its settings
|
|
1307
|
+
(featured-only lists, another post layout, events or groups limited to a chosen set) or its recipe is missing from the
|
|
1308
|
+
scaffold, it keeps its place as the source's title and a "See All" button that opens the page showing that data,
|
|
1309
|
+
and the reason is listed in `gaps`, never approximated as the real list. Only a section with no mapping at all stays
|
|
1310
|
+
in `unmapped`. The first four visible pages become the bottom tabs and the rest the More screen. The output names the
|
|
1311
|
+
published `revision` and `fetchedAt` of the evidence it read, so a migration generated from older evidence shows the
|
|
1312
|
+
old value: run `himi one-app migrate` again to refresh it before the final check. The file it writes is the
|
|
1313
|
+
`--upsert` input below.
|
|
1314
|
+
|
|
1260
1315
|
So generate descriptors as data and write them with the CLI:
|
|
1261
1316
|
|
|
1262
1317
|
```sh
|
|
@@ -1266,11 +1321,27 @@ himi template screens --upsert --from .himi/one-app/gen/screens.json
|
|
|
1266
1321
|
The file is one JSON object, `{ "<screenId>": <ScreenDescriptor>, … }`. Each existing
|
|
1267
1322
|
id is replaced in place; each new id is added and registered in
|
|
1268
1323
|
`navigation.linkableScreens`. One invalid entry refuses the batch and restores every
|
|
1269
|
-
file. A
|
|
1324
|
+
file. A screen that starts with an empty slot (a `Spacer`, a container with no children, an
|
|
1325
|
+
`Image` with no url) is refused: when a source header is dropped, do not leave its place behind,
|
|
1326
|
+
because the slot paints a blank band under the toolbar. A builder call such as `detailedHeader(...)` written inline in `dev/index.ts`
|
|
1270
1327
|
cannot be inspected: call the builder in your generator and serialize the value it
|
|
1271
1328
|
returns. Run the generator inside the app (after `npm install`), so
|
|
1272
1329
|
`@wix/himalaya/screens` resolves to the app's own dependency.
|
|
1273
1330
|
|
|
1331
|
+
### Repoint the template's tab ids
|
|
1332
|
+
|
|
1333
|
+
The template's `navigation.linkableScreens` entries and its home and profile tabs carry its own tab ids (`"home"`,
|
|
1334
|
+
`"profile"`, the vertical tabs). Your `navigation.tabBar` replaces those tabs, so every entry whose `tabId` is not
|
|
1335
|
+
one of yours is a leftover. `himi validate --strict` reports each as `nav-linkable-tab-unknown` and lists your real
|
|
1336
|
+
ids; nothing repoints them, because the right tab depends on where the source shows the screen:
|
|
1337
|
+
|
|
1338
|
+
- a screen the source opens from a tab keeps that tab's id;
|
|
1339
|
+
- a screen reached from the overflow list takes the id of the **More** tab only if you created one; a template with no More tab uses `""`;
|
|
1340
|
+
- a screen with no tab owner takes `""`, the default stack.
|
|
1341
|
+
|
|
1342
|
+
Check `homeScreenId` and any `himi.open` target that still names a template screen (`"home"`, `"profile"`) the same
|
|
1343
|
+
way: it must be a screen your `SCREENS` map defines.
|
|
1344
|
+
|
|
1274
1345
|
### Preserve the template features the source exposes
|
|
1275
1346
|
|
|
1276
1347
|
Treat trimming as a source-feature decision, not a list of screens reached during
|
|
@@ -1292,6 +1363,11 @@ After applying identity and before claiming completion, run:
|
|
|
1292
1363
|
himi one-app validate-identity --evidence-dir .himi/one-app --content . --json
|
|
1293
1364
|
```
|
|
1294
1365
|
|
|
1366
|
+
`himi init` names a scaffold after its technical slug, and `config.ts`'s `name` is the app's
|
|
1367
|
+
display name (launcher label and the screens that show it). The command also fails with
|
|
1368
|
+
`app_name_is_slug` while that name is still the slug; `--fix` writes the collected business
|
|
1369
|
+
name into it (only a literal equal to the slug is rewritten, never a name you chose).
|
|
1370
|
+
|
|
1295
1371
|
The command verifies the collected business-name hash, builds the current content,
|
|
1296
1372
|
and checks emitted screen titles, supported component display fields and the known
|
|
1297
1373
|
business-chat identity seed for accidental literal slugs. It ignores route IDs,
|