@aglyn/aglyn 1.0.0-beta.269 → 1.0.0-beta.271
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/package.json +11 -11
- package/src/lib/app-utils/account-preferences.d.ts +248 -0
- package/src/lib/app-utils/account-preferences.js +434 -0
- package/src/lib/app-utils/account-preferences.js.map +1 -0
- package/src/lib/app-utils/activity-labels.js +2 -0
- package/src/lib/app-utils/activity-labels.js.map +1 -1
- package/src/lib/app-utils/analytics-events.d.ts +13 -0
- package/src/lib/app-utils/analytics-events.js +2 -0
- package/src/lib/app-utils/analytics-events.js.map +1 -1
- package/src/lib/app-utils/append-only-history.d.ts +94 -0
- package/src/lib/app-utils/append-only-history.js +73 -0
- package/src/lib/app-utils/append-only-history.js.map +1 -0
- package/src/lib/app-utils/bundle-intent.d.ts +186 -0
- package/src/lib/app-utils/bundle-intent.js +386 -0
- package/src/lib/app-utils/bundle-intent.js.map +1 -0
- package/src/lib/app-utils/client-build.d.ts +204 -0
- package/src/lib/app-utils/client-build.js +237 -0
- package/src/lib/app-utils/client-build.js.map +1 -0
- package/src/lib/app-utils/console-routes.d.ts +4 -0
- package/src/lib/app-utils/console-routes.js +2 -0
- package/src/lib/app-utils/console-routes.js.map +1 -1
- package/src/lib/app-utils/country-options.d.ts +27 -0
- package/src/lib/app-utils/country-options.js +96 -0
- package/src/lib/app-utils/country-options.js.map +1 -0
- package/src/lib/app-utils/docs-help-sections.generated.js +7 -5
- package/src/lib/app-utils/docs-help-sections.generated.js.map +1 -1
- package/src/lib/app-utils/docs-help.generated.d.ts +11 -5
- package/src/lib/app-utils/docs-help.generated.js +22 -2
- package/src/lib/app-utils/docs-help.generated.js.map +1 -1
- package/src/lib/app-utils/docs-index.generated.js +116 -39
- package/src/lib/app-utils/docs-index.generated.js.map +1 -1
- package/src/lib/app-utils/margin-utilization.js +6 -4
- package/src/lib/app-utils/margin-utilization.js.map +1 -1
- package/src/lib/app-utils/media-filter.d.ts +26 -0
- package/src/lib/app-utils/media-filter.js +32 -0
- package/src/lib/app-utils/media-filter.js.map +1 -1
- package/src/lib/app-utils/mobile-push.d.ts +8 -0
- package/src/lib/app-utils/mobile-push.js +4 -1
- package/src/lib/app-utils/mobile-push.js.map +1 -1
- package/src/lib/app-utils/native-app-association.d.ts +3 -2
- package/src/lib/app-utils/native-app-association.js +4 -2
- package/src/lib/app-utils/native-app-association.js.map +1 -1
- package/src/lib/app-utils/native-nav.d.ts +265 -0
- package/src/lib/app-utils/native-nav.js +741 -0
- package/src/lib/app-utils/native-nav.js.map +1 -0
- package/src/lib/app-utils/native-themes.d.ts +249 -0
- package/src/lib/app-utils/native-themes.js +732 -0
- package/src/lib/app-utils/native-themes.js.map +1 -0
- package/src/lib/app-utils/notifications.d.ts +1 -1
- package/src/lib/app-utils/notifications.js +10 -0
- package/src/lib/app-utils/notifications.js.map +1 -1
- package/src/lib/app-utils/onboarding-deep-link.d.ts +36 -2
- package/src/lib/app-utils/onboarding-deep-link.js +48 -5
- package/src/lib/app-utils/onboarding-deep-link.js.map +1 -1
- package/src/lib/app-utils/one-box-search.d.ts +108 -0
- package/src/lib/app-utils/one-box-search.js +167 -0
- package/src/lib/app-utils/one-box-search.js.map +1 -0
- package/src/lib/app-utils/operator-alerts.js +21 -0
- package/src/lib/app-utils/operator-alerts.js.map +1 -1
- package/src/lib/app-utils/org-permissions.js +10 -61
- package/src/lib/app-utils/org-permissions.js.map +1 -1
- package/src/lib/app-utils/org-role-grants.d.ts +95 -0
- package/src/lib/app-utils/org-role-grants.js +193 -0
- package/src/lib/app-utils/org-role-grants.js.map +1 -0
- package/src/lib/app-utils/owner-approval-record.d.ts +102 -0
- package/src/lib/app-utils/owner-approval-record.js +148 -0
- package/src/lib/app-utils/owner-approval-record.js.map +1 -0
- package/src/lib/app-utils/plan-entitlements.d.ts +224 -68
- package/src/lib/app-utils/plan-entitlements.js +278 -61
- package/src/lib/app-utils/plan-entitlements.js.map +1 -1
- package/src/lib/app-utils/release-flags.d.ts +1 -1
- package/src/lib/app-utils/release-flags.js +10 -0
- package/src/lib/app-utils/release-flags.js.map +1 -1
- package/src/lib/app-utils/server.d.ts +4 -0
- package/src/lib/app-utils/server.js +7 -0
- package/src/lib/app-utils/server.js.map +1 -1
- package/src/lib/app-utils/site-care-project.d.ts +227 -0
- package/src/lib/app-utils/site-care-project.js +423 -0
- package/src/lib/app-utils/site-care-project.js.map +1 -0
- package/src/lib/app-utils/site-care.d.ts +268 -0
- package/src/lib/app-utils/site-care.js +283 -0
- package/src/lib/app-utils/site-care.js.map +1 -0
- package/src/lib/app-utils/tenant-dns-targets.d.ts +62 -0
- package/src/lib/app-utils/tenant-dns-targets.js +80 -0
- package/src/lib/app-utils/tenant-dns-targets.js.map +1 -0
- package/src/lib/app-utils/upgrade-proposal.d.ts +29 -4
- package/src/lib/app-utils/upgrade-proposal.js +60 -9
- package/src/lib/app-utils/upgrade-proposal.js.map +1 -1
- package/src/lib/foundation/definitions/org-billing.types.d.ts +54 -10
- package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
- package/src/lib/foundation/definitions/organization.types.d.ts +3 -1
- package/src/lib/foundation/definitions/organization.types.js.map +1 -1
- package/src/lib/foundation/definitions/platform.types.d.ts +9 -0
- package/src/lib/foundation/definitions/platform.types.js.map +1 -1
- package/src/lib/foundation/index.d.ts +1 -1
- package/src/lib/foundation/index.js.map +1 -1
- package/src/lib/plugin-manager/feature-plugins.d.ts +86 -0
- package/src/lib/plugin-manager/feature-plugins.js +20 -0
- package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.js +22 -1
- package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
- package/src/lib/plugin-manager/plugin-ai-capabilities.d.ts +19 -0
- package/src/lib/plugin-manager/plugin-ai-capabilities.js.map +1 -1
- package/src/lib/plugin-manager/plugin-domain-events.d.ts +4 -3
- package/src/lib/plugin-manager/plugin-domain-events.js.map +1 -1
- package/src/lib/plugin-manager/plugin-domain-search.d.ts +81 -0
- package/src/lib/plugin-manager/plugin-domain-search.js +63 -0
- package/src/lib/plugin-manager/plugin-domain-search.js.map +1 -0
- package/src/lib/plugin-manager/plugin-entitlements.d.ts +23 -5
- package/src/lib/plugin-manager/plugin-entitlements.js +10 -0
- package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -1
- package/src/lib/plugin-manager/plugin-media-ingest.d.ts +25 -0
- package/src/lib/plugin-manager/plugin-media-ingest.js.map +1 -1
- package/src/lib/plugin-manager/plugin-search-sources.d.ts +85 -0
- package/src/lib/plugin-manager/plugin-search-sources.js +91 -0
- package/src/lib/plugin-manager/plugin-search-sources.js.map +1 -0
- package/src/lib/plugin-manager/plugin-services.js +6 -0
- package/src/lib/plugin-manager/plugin-services.js.map +1 -1
- package/src/lib/plugin-manager/purchase-gate-preclearance.d.ts +61 -0
- package/src/lib/plugin-manager/purchase-gate-preclearance.js +102 -0
- package/src/lib/plugin-manager/purchase-gate-preclearance.js.map +1 -0
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
import type { AglynOrgBilling, CoreOrgEntitlements, CoreOrgFeatureFlags, OrgDiscount, OrgFeatureFlags, OrgPlan, OrgSeatAddons } from '../foundation';
|
|
17
|
+
import type { AglynOrgBilling, AiTierId, CoreOrgEntitlements, CoreOrgFeatureFlags, OrgDiscount, OrgFeatureFlags, OrgPlan, OrgSeatAddons } from '../foundation';
|
|
18
18
|
import type { PluginOrgFeatures, PluginOrgQuotas } from '../plugin-manager/plugin-entitlement-keys';
|
|
19
19
|
import { type OrgOverrideReasonCode } from './org-override-reason';
|
|
20
20
|
import type { ResolvedBrandingProfile } from './platform-brand';
|
|
@@ -220,6 +220,14 @@ export declare const SELF_SERVE_PLANS: OrgPlan[];
|
|
|
220
220
|
* "free". Revenue for such an org comes from `subscription.customMonthlyUsd`.
|
|
221
221
|
*/
|
|
222
222
|
export declare function isCustomPricedPlan(plan: OrgPlan | undefined | null): boolean;
|
|
223
|
+
/**
|
|
224
|
+
* Whether a plan sells the Site Care add-on (AGL-3954): every paid self-serve
|
|
225
|
+
* plan, never `free` (no subscription to bill it on) and never a
|
|
226
|
+
* custom-priced plan (Enterprise names it in the agreement instead). An
|
|
227
|
+
* unknown plan string sells nothing. The ONE reading of that rule — the
|
|
228
|
+
* add-on ceiling, the checkout refusal and the Billing card all ask it.
|
|
229
|
+
*/
|
|
230
|
+
export declare function planSellsSiteCare(plan: OrgPlan | string | undefined | null): boolean;
|
|
223
231
|
/** Human plan names — the ONE source every plan badge/label reads. */
|
|
224
232
|
export declare const PLAN_LABELS: Record<OrgPlan, string>;
|
|
225
233
|
/**
|
|
@@ -235,6 +243,59 @@ export declare const PLAN_LABELS: Record<OrgPlan, string>;
|
|
|
235
243
|
* The marketing copy on /pricing is written against that behaviour.
|
|
236
244
|
*/
|
|
237
245
|
export declare const EVENT_CALENDAR_ADDON_MONTHLY_USD = 9;
|
|
246
|
+
/**
|
|
247
|
+
* Site Care add-on (AGL-3954): $49/mo per organization, the managed-website
|
|
248
|
+
* service. It buys staff time, not capacity: small changes to the owner's
|
|
249
|
+
* existing site (hours, prices, photos, a staff member, a seasonal banner, a
|
|
250
|
+
* section on an existing page), up to about one hour of work a month, done
|
|
251
|
+
* within two business days, minutes logged and no rollover. New pages, new
|
|
252
|
+
* forms, redesigns, brand work, photography, whole-site copy and ads are
|
|
253
|
+
* quoted separately, and it never raises a plan limit — a 26th page or a
|
|
254
|
+
* second site is still an upgrade.
|
|
255
|
+
*
|
|
256
|
+
* Flat across plans, like the Event Calendar, because the work it pays for
|
|
257
|
+
* is the same hour whichever tier the site is on; the yearly price is ×12
|
|
258
|
+
* with no discount, as every add-on's is. Sold on every paid self-serve plan
|
|
259
|
+
* and never on Free (no subscription to carry it) or Enterprise (quoted per
|
|
260
|
+
* deal) — `planSellsSiteCare` is that rule. `resolveOrgEntitlements` flips
|
|
261
|
+
* the org-wide `features.siteCare` from any purchased quantity >= 1.
|
|
262
|
+
*/
|
|
263
|
+
export declare const SITE_CARE_ADDON_MONTHLY_USD = 49;
|
|
264
|
+
/**
|
|
265
|
+
* Site Care's included time (AGL-3959): about an hour of staff work a month,
|
|
266
|
+
* no rollover. `SITE_CARE_INCLUDED_BLOCK_MINUTES` is the step each request is
|
|
267
|
+
* counted against it in, always rounded up — a 10-minute change uses one
|
|
268
|
+
* 15-minute block. The timer's actual minutes are still logged beside it.
|
|
269
|
+
*/
|
|
270
|
+
export declare const SITE_CARE_INCLUDED_MINUTES = 60;
|
|
271
|
+
/** The block a request counts against the included hour in (AGL-3959). */
|
|
272
|
+
export declare const SITE_CARE_INCLUDED_BLOCK_MINUTES = 15;
|
|
273
|
+
/**
|
|
274
|
+
* Site Care extra time (AGL-3959): $79 per STARTED hour past the included
|
|
275
|
+
* hour in a month. Billed in whole hours, rounded up — any part of an hour is
|
|
276
|
+
* the full rate — and never less than the hours the owner approved. Only with
|
|
277
|
+
* the owner's recorded yes, as an invoice item on the next subscription
|
|
278
|
+
* invoice; never recurring. `site-care.ts` holds the arithmetic.
|
|
279
|
+
*/
|
|
280
|
+
export declare const SITE_CARE_EXTRA_HOUR_USD = 79;
|
|
281
|
+
/**
|
|
282
|
+
* Site Care projects (AGL-3970): work that adds a page, a form, a design or
|
|
283
|
+
* a campaign is a flat quote, never hourly. The quote is the estimated hours
|
|
284
|
+
* × `SITE_CARE_EXTRA_HOUR_USD`, rounded up to the whole hour, and never below
|
|
285
|
+
* the published starting price of the kind of project it is. These three are
|
|
286
|
+
* those starting prices, as `/pricing` publishes them.
|
|
287
|
+
*/
|
|
288
|
+
export declare const SITE_CARE_PROJECT_LANDING_PAGE_FROM_USD = 249;
|
|
289
|
+
/** A redesign's published starting price (AGL-3970). */
|
|
290
|
+
export declare const SITE_CARE_PROJECT_REDESIGN_FROM_USD = 749;
|
|
291
|
+
/** A logo or brand kit's published starting price (AGL-3970). */
|
|
292
|
+
export declare const SITE_CARE_PROJECT_BRAND_KIT_FROM_USD = 349;
|
|
293
|
+
/**
|
|
294
|
+
* A project priced ABOVE this is billed half up front and half at launch, on
|
|
295
|
+
* two invoices from the same record; at or below it, in full up front
|
|
296
|
+
* (AGL-3970). `site-care-project.ts` holds the arithmetic.
|
|
297
|
+
*/
|
|
298
|
+
export declare const SITE_CARE_PROJECT_SPLIT_ABOVE_USD = 500;
|
|
238
299
|
/**
|
|
239
300
|
* POS Pro register add-on (AGL-329): $89/mo per extra register/location
|
|
240
301
|
* (Shopify POS Pro parity). Purchased add-ons land as a per-org
|
|
@@ -243,37 +304,105 @@ export declare const EVENT_CALENDAR_ADDON_MONTHLY_USD = 9;
|
|
|
243
304
|
*/
|
|
244
305
|
export declare const POS_REGISTER_ADDON_MONTHLY_USD = 89;
|
|
245
306
|
/**
|
|
246
|
-
* The Aglyn AI
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
* `
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
|
|
276
|
-
|
|
307
|
+
* The Aglyn AI tiers (AGL-3965): credits sold on their own, to ANY paid
|
|
308
|
+
* plan, on top of what the plan includes.
|
|
309
|
+
*
|
|
310
|
+
* ## One pool
|
|
311
|
+
*
|
|
312
|
+
* Every plan's `assistCreditsPerMonth` pays for ALL of Aglyn AI — the
|
|
313
|
+
* assistant and generation alike — and `features.aiGenerative` is on for
|
|
314
|
+
* every plan. A tier ADDS `credits` to that same band in
|
|
315
|
+
* `resolveOrgEntitlements`, so `resolveAssistCreditBudget`, the overage
|
|
316
|
+
* price and the hard-cap switch all still see one number. Past the pool the
|
|
317
|
+
* plan's `extraAssistCreditsUsdPer1k` bills per 1,000 credits unless the
|
|
318
|
+
* owner turned on `assistOverage.hardCap`; a tier changes neither.
|
|
319
|
+
*
|
|
320
|
+
* ## Sized against the tier's own price
|
|
321
|
+
*
|
|
322
|
+
* A credit is `ASSIST_CREDIT_COST_USD` of provider spend, so `credits` is a
|
|
323
|
+
* cost figure: 1,000 credits are $1.00. Every tier costs at most 50% of its
|
|
324
|
+
* price at full consumption — Spark $4 of $9, Boost $9 of $19, Plus $19 of
|
|
325
|
+
* $39, Max $34 of $69, Ultra $49 of $99, Studio $149 of $299 — the same
|
|
326
|
+
* line-margin floor (`ASSIST_CREDIT_MIN_MARGIN_PCT`) every retail assist
|
|
327
|
+
* rate clears. The plan's included band is priced at 100% burn on its own
|
|
328
|
+
* tier, so a tier's margin never leans on the plan's; that is what
|
|
329
|
+
* `tier-margin-floor.spec.ts` holds, per tier.
|
|
330
|
+
*
|
|
331
|
+
* These are the six price/credit pairs the add-on was sold at per plan
|
|
332
|
+
* before AGL-3965 (Starter's $9 / 4,000 through Agency's $299 / 149,000),
|
|
333
|
+
* now chosen independently of the plan. `LEGACY_AI_ADDON_TIER_BY_PLAN` maps
|
|
334
|
+
* each old per-plan add-on to the tier with its price and band.
|
|
335
|
+
*
|
|
336
|
+
* Yearly is ×12 with no discount, as every add-on is. Studio is the top;
|
|
337
|
+
* more is an Enterprise contract. Free sells none (`planSellsAiTiers`).
|
|
338
|
+
*/
|
|
339
|
+
export interface AiTier {
|
|
340
|
+
/** The tier's name as a person sees it, after the product name. */
|
|
341
|
+
label: string;
|
|
342
|
+
monthlyUsd: number;
|
|
343
|
+
yearlyUsd: number;
|
|
344
|
+
/** Credits a month the tier adds to the plan's included band. */
|
|
345
|
+
credits: number;
|
|
346
|
+
}
|
|
347
|
+
/** The tiers, smallest first — the order every picker lists them in. */
|
|
348
|
+
export declare const AI_TIER_IDS: readonly AiTierId[];
|
|
349
|
+
export declare const AI_TIERS: Readonly<Record<AiTierId, AiTier>>;
|
|
350
|
+
/**
|
|
351
|
+
* The tier an add-on bought before AGL-3965 is (AGL-3965): the one with the
|
|
352
|
+
* same price and the same band the plan sold it at, so a workspace that
|
|
353
|
+
* held "the Pro add-on" holds Boost — $19, 9,000 credits — and neither its
|
|
354
|
+
* bill nor its credits move. Read when `aiTier` is absent and to classify a
|
|
355
|
+
* per-plan `STRIPE_PRICE_{PLAN}_AI_ADDON` item still on a subscription.
|
|
356
|
+
*/
|
|
357
|
+
export declare const LEGACY_AI_ADDON_TIER_BY_PLAN: Readonly<Partial<Record<OrgPlan, AiTierId>>>;
|
|
358
|
+
/**
|
|
359
|
+
* The tier a purchase that names a plan and no tier means (AGL-3965): a
|
|
360
|
+
* `?plan=pro&ai=1` deep link, a checkout posting `aiAddon: true` alone. The
|
|
361
|
+
* tier with that plan's old price and band, so a link published before tiers
|
|
362
|
+
* existed still sells what it quoted. Null where the plan sells no tier.
|
|
363
|
+
*/
|
|
364
|
+
export declare function defaultAiTierForPlan(plan: OrgPlan | string | null | undefined): AiTierId | null;
|
|
365
|
+
/** Whether a value is one of the tier ids. */
|
|
366
|
+
export declare function isAiTierId(value: unknown): value is AiTierId;
|
|
367
|
+
/**
|
|
368
|
+
* The add-on key an Aglyn AI tier travels under outside the billing routes
|
|
369
|
+
* (AGL-3965): `ai:<tier>`, e.g. `ai:boost`. The ONE spelling a bundle
|
|
370
|
+
* checkout link (AGL-3955) and a hand-off proposal's add-on list (AGL-3956)
|
|
371
|
+
* name a tier by, parsed and listed here, beside the tiers, so neither
|
|
372
|
+
* restates the ids.
|
|
373
|
+
*/
|
|
374
|
+
export type AiTierAddonKey = `ai:${AiTierId}`;
|
|
375
|
+
/** `ai:<tier>` for a tier. */
|
|
376
|
+
export declare function aiTierAddonKey(tier: AiTierId): AiTierAddonKey;
|
|
377
|
+
/**
|
|
378
|
+
* The tier an `ai:<tier>` key names, or null for anything else — another
|
|
379
|
+
* add-on's key, a bare `ai`, an unknown tier, a non-string. Exact and
|
|
380
|
+
* case-sensitive: a key is read off a link, and guessing is the expensive
|
|
381
|
+
* direction to be wrong in (`parseOnboardingPlanIntent` reads `?ai=` the
|
|
382
|
+
* same way).
|
|
383
|
+
*/
|
|
384
|
+
export declare function parseAiTierAddonKey(key: unknown): AiTierId | null;
|
|
385
|
+
/** One tier as an add-on a bundle or a proposal can carry. */
|
|
386
|
+
export interface AiTierAddonOption {
|
|
387
|
+
key: AiTierAddonKey;
|
|
388
|
+
tier: AiTierId;
|
|
389
|
+
label: string;
|
|
390
|
+
monthlyUsd: number;
|
|
391
|
+
yearlyUsd: number;
|
|
392
|
+
credits: number;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Every tier as an `ai:<tier>` add-on, smallest first — what a picker that
|
|
396
|
+
* offers "Aglyn AI" beside the other add-ons lists. Empty for a plan that
|
|
397
|
+
* sells no tier (Free, Enterprise) when a plan is given.
|
|
398
|
+
*/
|
|
399
|
+
export declare function listAiTierAddons(plan?: OrgPlan | string | null): AiTierAddonOption[];
|
|
400
|
+
/**
|
|
401
|
+
* Whether a plan may buy an Aglyn AI tier (AGL-3965): every paid self-serve
|
|
402
|
+
* plan. Not Free, which has no subscription to carry it, and not Enterprise,
|
|
403
|
+
* whose AI is in the agreement.
|
|
404
|
+
*/
|
|
405
|
+
export declare function planSellsAiTiers(plan: OrgPlan | string | undefined | null): boolean;
|
|
277
406
|
/**
|
|
278
407
|
* The generative add-on's name as a person sees it (AGL-2896): the brand,
|
|
279
408
|
* then "AI". Read from the platform brand by default and from the org's
|
|
@@ -437,41 +566,6 @@ export interface PlanPricing {
|
|
|
437
566
|
* no unrefusable assist traffic to absorb.
|
|
438
567
|
*/
|
|
439
568
|
extraAssistCreditsUsdPer1k: number | null;
|
|
440
|
-
/**
|
|
441
|
-
* The Aglyn AI add-on, flat per organization per month (AGL-2896); null
|
|
442
|
-
* when the plan does not sell it.
|
|
443
|
-
*
|
|
444
|
-
* ## What it buys
|
|
445
|
-
*
|
|
446
|
-
* `features.aiGenerative` — generative building and automation, the rung
|
|
447
|
-
* no self-serve tier includes — plus `AI_ADDON_CREDITS_PER_MONTH[plan]`
|
|
448
|
-
* added to the plan's assist band. It also switches `aiAssist` on, so on
|
|
449
|
-
* Starter it brings the two rungs the tier does not carry — the copy
|
|
450
|
-
* assist and the generative one — on top of the 750 credits the plan
|
|
451
|
-
* already includes (AGL-3203). It ADDS to that band; it does not replace
|
|
452
|
-
* it, on Starter or on any tier.
|
|
453
|
-
*
|
|
454
|
-
* ## Where the ladder sits
|
|
455
|
-
*
|
|
456
|
-
* Priced as an uplift on the plan rather than on its own cost: the field
|
|
457
|
-
* charges roughly 30% of the base price for an AI tier (Zylo's 2025
|
|
458
|
-
* survey puts the AI uplift at 20–37% across SaaS; aissist.io's benchmark
|
|
459
|
-
* and the Framer, Webflow and HubSpot credit add-ons sit in the same
|
|
460
|
-
* band), and the share DESCENDS with the tier — 36% of Starter's $25, 34%
|
|
461
|
-
* of Pro's, 28% of Business's, 28% of Scale's, 25% of Advanced's, 23% of
|
|
462
|
-
* Agency's — because the larger the plan the more of its price is already
|
|
463
|
-
* carrying the bands the assistant builds against.
|
|
464
|
-
*
|
|
465
|
-
* Annual is x12 of this with no discount, as every other add-on is
|
|
466
|
-
* (`orgListPriceMonthlyUsd`). The band it funds costs at most 50% of it in
|
|
467
|
-
* provider spend, the `ASSIST_CREDIT_MIN_MARGIN_PCT` floor every retail
|
|
468
|
-
* assist figure holds.
|
|
469
|
-
*
|
|
470
|
-
* Null on Free, which sells no add-on of any kind, and on Enterprise,
|
|
471
|
-
* where every figure is the "not for sale" sentinel and generative
|
|
472
|
-
* building is in the agreement.
|
|
473
|
-
*/
|
|
474
|
-
aiAddonMonthlyUsd: number | null;
|
|
475
569
|
/**
|
|
476
570
|
* Metered overage per 1,000 CRM records beyond `contactsPerHost` (AGL-890,
|
|
477
571
|
* widened to contacts + companies + deals in AGL-2611): audience bands,
|
|
@@ -762,6 +856,12 @@ export declare function orgListPriceMonthlyUsd(org: Partial<AglynOrgBilling> | n
|
|
|
762
856
|
* `NaN` or a negative is none.
|
|
763
857
|
*/
|
|
764
858
|
export declare function aiAddonUnits(addons: OrgSeatAddons | null | undefined): 0 | 1;
|
|
859
|
+
/**
|
|
860
|
+
* How many Site Care add-ons a purchase map counts as: 0 or 1 (AGL-3954).
|
|
861
|
+
* Org-wide like the Aglyn AI add-on, so a quantity above one is one
|
|
862
|
+
* purchase, and a non-number, `NaN` or a negative is none.
|
|
863
|
+
*/
|
|
864
|
+
export declare function siteCareUnits(addons: OrgSeatAddons | null | undefined): 0 | 1;
|
|
765
865
|
/**
|
|
766
866
|
* A list price net of a discount (AGL-1105). Percentage discounts scale the
|
|
767
867
|
* whole bill; fixed discounts subtract a flat USD amount. Never below 0, and
|
|
@@ -1458,6 +1558,62 @@ export declare function resolveEffectivePlan(org: Partial<AglynOrgBilling> | nul
|
|
|
1458
1558
|
* together rather than leaving a rate on a band that has gone.
|
|
1459
1559
|
*/
|
|
1460
1560
|
export declare function hasAiAddon(org: Partial<AglynOrgBilling> | null | undefined): boolean;
|
|
1561
|
+
/**
|
|
1562
|
+
* Which Aglyn AI tier the org's purchase map holds (AGL-3965), whether or
|
|
1563
|
+
* not the subscription is still paying for it — `resolveAiTier` is the
|
|
1564
|
+
* reading that drops a dead one. `org.aiTier` when it names a tier;
|
|
1565
|
+
* otherwise, for an add-on bought before tiers existed, the tier with that
|
|
1566
|
+
* plan's old price and band (`LEGACY_AI_ADDON_TIER_BY_PLAN`). Null when no
|
|
1567
|
+
* add-on is held or the plan sells no tier (Free, Enterprise).
|
|
1568
|
+
*/
|
|
1569
|
+
export declare function aiTierOfPurchase(org: Partial<AglynOrgBilling> | null | undefined): AiTierId | null;
|
|
1570
|
+
/**
|
|
1571
|
+
* The Aglyn AI tier that currently applies (AGL-3965): bought, on a
|
|
1572
|
+
* subscription still paying for it, on a plan that sells tiers. The ONE
|
|
1573
|
+
* reading every surface that shows or counts a tier goes through.
|
|
1574
|
+
*/
|
|
1575
|
+
export declare function resolveAiTier(org: Partial<AglynOrgBilling> | null | undefined): AiTierId | null;
|
|
1576
|
+
/**
|
|
1577
|
+
* What `seatAddons.aiAddon` adds on an Enterprise org (AGL-2896, kept by
|
|
1578
|
+
* AGL-3965): twice Studio's band, the figure the per-plan table carried as
|
|
1579
|
+
* twice Agency's (the rule every Enterprise fallback follows since AGL-2654),
|
|
1580
|
+
* and still what a contract that names the add-on starts from before its own
|
|
1581
|
+
* number is written. Enterprise buys no tier — its AI is in the agreement —
|
|
1582
|
+
* so this is the contract figure kept, not a price; finite, never
|
|
1583
|
+
* `UNLIMITED`, for the reason `ENTERPRISE_ASSIST_CREDITS_PER_MONTH` gives.
|
|
1584
|
+
*/
|
|
1585
|
+
export declare const ENTERPRISE_AI_ADDON_CREDITS_PER_MONTH: number;
|
|
1586
|
+
/**
|
|
1587
|
+
* The Aglyn AI add-on's per-unit quota as `resolveOrgEntitlements` folds it
|
|
1588
|
+
* (AGL-3965): the purchased tier's credits, on a plan that sells tiers;
|
|
1589
|
+
* Enterprise's contract figure (`ENTERPRISE_AI_ADDON_CREDITS_PER_MONTH`);
|
|
1590
|
+
* else 0 (Free). The AI plugin declares its seat add-on with this as
|
|
1591
|
+
* `quota.perUnit`.
|
|
1592
|
+
*/
|
|
1593
|
+
export declare function aiTierQuotaPerUnit(org: Partial<AglynOrgBilling> | null | undefined, plan: OrgPlan): number;
|
|
1594
|
+
/**
|
|
1595
|
+
* The credits a month the org's Aglyn AI add-on adds to its plan's included
|
|
1596
|
+
* band (AGL-3965) — 0 with none held. The SAME figure `resolveOrgEntitlements`
|
|
1597
|
+
* folds into `assistCreditsPerMonth` (`aiTierQuotaPerUnit`), so a surface
|
|
1598
|
+
* quoting "your tier adds" and the meter agree.
|
|
1599
|
+
*/
|
|
1600
|
+
export declare function aiTierCreditsPerMonth(org: Partial<AglynOrgBilling> | null | undefined): number;
|
|
1601
|
+
/**
|
|
1602
|
+
* Whether this org can buy or change an Aglyn AI tier itself (AGL-3965): a
|
|
1603
|
+
* plan that sells tiers, and not one a staff comp grants — a comp has no
|
|
1604
|
+
* subscription to put the tier on (`compPricing`).
|
|
1605
|
+
*/
|
|
1606
|
+
export declare function orgCanBuyAiTier(org: Partial<AglynOrgBilling> | null | undefined): boolean;
|
|
1607
|
+
/** "Aglyn AI Boost": the product name, then the tier's. */
|
|
1608
|
+
export declare const aiTierName: (tier: AiTierId, brand?: string) => string;
|
|
1609
|
+
/**
|
|
1610
|
+
* Whether the org's Site Care add-on currently applies (AGL-3954): bought,
|
|
1611
|
+
* and on a subscription that is still paying for it, so a dead subscription
|
|
1612
|
+
* reads false here exactly as it drops `features.siteCare`. The reader for
|
|
1613
|
+
* surfaces that ask about the purchase rather than the resolved feature —
|
|
1614
|
+
* the staff org page's chip, the request intake.
|
|
1615
|
+
*/
|
|
1616
|
+
export declare function hasSiteCare(org: Partial<AglynOrgBilling> | null | undefined): boolean;
|
|
1461
1617
|
/**
|
|
1462
1618
|
* Numeric entitlement keys that were REMOVED from `PLAN_ENTITLEMENTS` and
|
|
1463
1619
|
* must never be resolved again from a stored override (AGL-2133).
|
|
@@ -1504,7 +1660,7 @@ export declare const PRICE_ENTITLEMENT_KEYS: ReadonlySet<string>;
|
|
|
1504
1660
|
* per-key overrides applied (features merge key-by-key too), then
|
|
1505
1661
|
* purchased add-ons stacked on top (AGL-524): `seatAddons.hosts` raises
|
|
1506
1662
|
* `hostLimit`, `seatAddons.eventCalendar` switches the `eventCalendar`
|
|
1507
|
-
* feature on, and every seat add-on a plugin declared through
|
|
1663
|
+
* feature on, `seatAddons.siteCare` switches `siteCare` on, and every seat add-on a plugin declared through
|
|
1508
1664
|
* `registerPluginEntitlements` (AGL-2940) widens the quota it names by its
|
|
1509
1665
|
* per-plan figure per unit and switches its features on — the Aglyn AI
|
|
1510
1666
|
* add-on (AGL-2896) is the first such declaration. (Seat/dataset add-ons
|