@gravity-rail/sdk 0.18.0 → 0.18.1

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/internal.cjs CHANGED
@@ -43,6 +43,7 @@ __export(internal_exports, {
43
43
  ActivityEventTypePreset: () => ActivityEventTypePreset,
44
44
  ActivityGoalImpact: () => ActivityGoalImpact,
45
45
  ActivityTimelineProjection: () => ActivityTimelineProjection,
46
+ AddonMutationResponseScope: () => AddonMutationResponseScope,
46
47
  AgentTasksApi: () => AgentTasksApi,
47
48
  AgentsApi: () => AgentsApi,
48
49
  ApiError: () => ApiError,
@@ -120,7 +121,6 @@ __export(internal_exports, {
120
121
  InvitationStatus: () => InvitationStatus,
121
122
  JobPosition: () => JobPosition,
122
123
  JourneysApi: () => JourneysApi,
123
- LIMIT_ONLY_RESOURCES: () => LIMIT_ONLY_RESOURCES,
124
124
  MASKED_SECRET_SENTINEL: () => MASKED_SECRET_SENTINEL,
125
125
  McpServerState: () => McpServerState,
126
126
  McpServersApi: () => McpServersApi,
@@ -150,6 +150,7 @@ __export(internal_exports, {
150
150
  OperatorApi: () => OperatorApi,
151
151
  OrgApi: () => OrgApi,
152
152
  OrgFeature: () => OrgFeature,
153
+ OrganizationAddonResponseScope: () => OrganizationAddonResponseScope,
153
154
  PERMISSION_ADMIN: () => PERMISSION_ADMIN,
154
155
  PERMISSION_CREATE: () => PERMISSION_CREATE,
155
156
  PERMISSION_DELETE: () => PERMISSION_DELETE,
@@ -261,6 +262,7 @@ __export(internal_exports, {
261
262
  bindOperatorMethods: () => bindOperatorMethods,
262
263
  bindOrgMethods: () => bindOrgMethods,
263
264
  bindPersonasMethods: () => bindPersonasMethods,
265
+ bindProjectsMethods: () => bindProjectsMethods,
264
266
  bindPromptsMethods: () => bindPromptsMethods,
265
267
  bindPronunciationsMethods: () => bindPronunciationsMethods,
266
268
  bindQualificationsMethods: () => bindQualificationsMethods,
@@ -283,8 +285,6 @@ __export(internal_exports, {
283
285
  formatAppContextAsMarkdown: () => formatAppContextAsMarkdown,
284
286
  getAllFeatures: () => getAllFeatures,
285
287
  getAllResourceSlugs: () => getAllResourceSlugs,
286
- getApplicableResourceSlugs: () => getApplicableResourceSlugs,
287
- getApplicableResources: () => getApplicableResources,
288
288
  getAvailableFeaturesForUpgrade: () => getAvailableFeaturesForUpgrade,
289
289
  getCookieValue: () => getCookieValue,
290
290
  getFeature: () => getFeature,
@@ -293,7 +293,6 @@ __export(internal_exports, {
293
293
  getMissingDependencies: () => getMissingDependencies,
294
294
  getResourceMetadata: () => getResourceMetadata,
295
295
  getRevisionState: () => getRevisionState,
296
- getScopeFromProductType: () => getScopeFromProductType,
297
296
  getTTSProvider: () => getTTSProvider,
298
297
  getVoiceModelId: () => getVoiceModelId,
299
298
  initializeFeatures: () => initializeFeatures,
@@ -696,7 +695,6 @@ var Resource = /* @__PURE__ */ ((Resource2) => {
696
695
  return Resource2;
697
696
  })(Resource || {});
698
697
  var ProductType = /* @__PURE__ */ ((ProductType2) => {
699
- ProductType2["WORKSPACE"] = "workspace";
700
698
  ProductType2["ORG"] = "org";
701
699
  ProductType2["ADDON"] = "addon";
702
700
  return ProductType2;
@@ -706,15 +704,6 @@ var ORG_ONLY_RESOURCES = /* @__PURE__ */ new Set([
706
704
  "org_admin" /* ORG_ADMIN */,
707
705
  "phone_number" /* PHONE_NUMBER */
708
706
  ]);
709
- var LIMIT_ONLY_RESOURCES = /* @__PURE__ */ new Set([
710
- "member" /* MEMBER */,
711
- "inbox" /* INBOX */,
712
- "site" /* SITE */,
713
- "phone_number" /* PHONE_NUMBER */,
714
- "storage_mb" /* STORAGE_MB */,
715
- "workspace" /* WORKSPACE */,
716
- "org_admin" /* ORG_ADMIN */
717
- ]);
718
707
 
719
708
  // src/types/workspace-types.ts
720
709
  var WorkspaceProvisionStatus = /* @__PURE__ */ ((WorkspaceProvisionStatus2) => {
@@ -1118,6 +1107,16 @@ var AbilityTypeSlugs = {
1118
1107
  CEL_ROUTING: "system:cel_routing"
1119
1108
  };
1120
1109
 
1110
+ // src/types/generated/addon.ts
1111
+ var AddonMutationResponseScope = {
1112
+ organization: "organization",
1113
+ workspace: "workspace"
1114
+ };
1115
+ var OrganizationAddonResponseScope = {
1116
+ organization: "organization",
1117
+ workspace: "workspace"
1118
+ };
1119
+
1121
1120
  // src/types/generated/promo_code_service.ts
1122
1121
  var PromoCodeStatus = {
1123
1122
  active: "active",
@@ -1363,105 +1362,79 @@ var RESOURCE_METADATA = {
1363
1362
  label: "Credits",
1364
1363
  unit: "credit",
1365
1364
  unitPlural: "credits",
1366
- description: "AI model usage billed as tokens with model-specific multipliers",
1367
- requiresFeature: null,
1368
- scope: "any"
1365
+ description: "AI model usage billed as tokens with model-specific multipliers"
1369
1366
  },
1370
1367
  ["stt" /* STT */]: {
1371
1368
  label: "Speech-to-Text",
1372
1369
  unit: "minute",
1373
1370
  unitPlural: "minutes",
1374
- description: "Audio transcription in minutes",
1375
- requiresFeature: null,
1376
- scope: "any"
1371
+ description: "Audio transcription in minutes"
1377
1372
  },
1378
1373
  ["tts" /* TTS */]: {
1379
1374
  label: "Text-to-Speech",
1380
1375
  unit: "1,000 characters",
1381
1376
  unitPlural: "1,000 characters",
1382
- description: "Text synthesized to audio, billed in lots of 1,000 characters",
1383
- requiresFeature: null,
1384
- scope: "any"
1377
+ description: "Text synthesized to audio, billed in lots of 1,000 characters"
1385
1378
  },
1386
1379
  ["sms" /* SMS */]: {
1387
1380
  label: "SMS Messages",
1388
1381
  unit: "message",
1389
1382
  unitPlural: "messages",
1390
- description: "Text messages sent via phone number",
1391
- requiresFeature: "phone" /* PHONE */,
1392
- scope: "any"
1383
+ description: "Text messages sent via phone number"
1393
1384
  },
1394
1385
  ["email" /* EMAIL */]: {
1395
1386
  label: "Emails",
1396
1387
  unit: "message",
1397
1388
  unitPlural: "messages",
1398
- description: "Email messages sent or received",
1399
- requiresFeature: "email" /* EMAIL */,
1400
- scope: "any"
1389
+ description: "Email messages sent or received"
1401
1390
  },
1402
1391
  ["phone_call" /* PHONE_CALL */]: {
1403
1392
  label: "Phone Calls",
1404
1393
  unit: "minute",
1405
1394
  unitPlural: "minutes",
1406
- description: "Phone call duration in minutes",
1407
- requiresFeature: "phone" /* PHONE */,
1408
- scope: "any"
1395
+ description: "Phone call duration in minutes"
1409
1396
  },
1410
1397
  ["phone_number" /* PHONE_NUMBER */]: {
1411
1398
  label: "Phone Numbers",
1412
1399
  unit: "number",
1413
1400
  unitPlural: "numbers",
1414
- description: "Active phone numbers for calling and SMS",
1415
- requiresFeature: "phone" /* PHONE */,
1416
- scope: "any"
1401
+ description: "Active phone numbers for calling and SMS"
1417
1402
  },
1418
1403
  ["inbox" /* INBOX */]: {
1419
1404
  label: "Email Inboxes",
1420
1405
  unit: "inbox",
1421
1406
  unitPlural: "inboxes",
1422
- description: "Email inboxes for receiving messages",
1423
- requiresFeature: "email" /* EMAIL */,
1424
- scope: "any"
1407
+ description: "Email inboxes for receiving messages"
1425
1408
  },
1426
1409
  ["site" /* SITE */]: {
1427
1410
  label: "Sites",
1428
1411
  unit: "site",
1429
1412
  unitPlural: "sites",
1430
- description: "Published websites",
1431
- requiresFeature: "sites" /* SITES */,
1432
- scope: "any"
1413
+ description: "Published websites"
1433
1414
  },
1434
1415
  ["member" /* MEMBER */]: {
1435
1416
  label: "Members",
1436
1417
  unit: "member",
1437
1418
  unitPlural: "members",
1438
- description: "Total workspace members",
1439
- requiresFeature: null,
1440
- scope: "workspace"
1419
+ description: "Members across the organization"
1441
1420
  },
1442
1421
  ["workspace" /* WORKSPACE */]: {
1443
1422
  label: "Workspaces",
1444
1423
  unit: "workspace",
1445
1424
  unitPlural: "workspaces",
1446
- description: "Workspaces in the organization",
1447
- requiresFeature: null,
1448
- scope: "org"
1425
+ description: "Workspaces in the organization"
1449
1426
  },
1450
1427
  ["org_admin" /* ORG_ADMIN */]: {
1451
1428
  label: "Organization Admins",
1452
1429
  unit: "admin",
1453
1430
  unitPlural: "admins",
1454
- description: "Organization administrators",
1455
- requiresFeature: null,
1456
- scope: "org"
1431
+ description: "Organization administrators"
1457
1432
  },
1458
1433
  ["storage_mb" /* STORAGE_MB */]: {
1459
1434
  label: "Storage",
1460
1435
  unit: "MB",
1461
1436
  unitPlural: "MB",
1462
- description: "File storage in megabytes",
1463
- requiresFeature: null,
1464
- scope: "any"
1437
+ description: "File storage in megabytes"
1465
1438
  }
1466
1439
  };
1467
1440
  function getResourceMetadata(resource) {
@@ -1470,35 +1443,6 @@ function getResourceMetadata(resource) {
1470
1443
  function getAllResourceSlugs() {
1471
1444
  return Object.keys(RESOURCE_METADATA);
1472
1445
  }
1473
- function getScopeFromProductType(productType) {
1474
- const isOrgProduct = productType === "org" /* ORG */;
1475
- return isOrgProduct ? "org" : "workspace";
1476
- }
1477
- function getApplicableResources(scope, enabledFeatures) {
1478
- const enabledSet = enabledFeatures ? new Set(enabledFeatures) : null;
1479
- return Object.entries(RESOURCE_METADATA).filter(([_slug, metadata]) => {
1480
- if (scope === "workspace" && metadata.scope === "org") {
1481
- return false;
1482
- }
1483
- if (scope === "org" && metadata.scope === "workspace") {
1484
- return false;
1485
- }
1486
- if (enabledSet !== null && metadata.requiresFeature !== null) {
1487
- if (!enabledSet.has(metadata.requiresFeature)) {
1488
- return false;
1489
- }
1490
- }
1491
- return true;
1492
- }).map(([slug]) => slug).sort((a, b) => {
1493
- const metaA = RESOURCE_METADATA[a];
1494
- const metaB = RESOURCE_METADATA[b];
1495
- return metaA.label.localeCompare(metaB.label);
1496
- });
1497
- }
1498
- function getApplicableResourceSlugs(productType) {
1499
- const scope = getScopeFromProductType(productType);
1500
- return getApplicableResources(scope);
1501
- }
1502
1446
 
1503
1447
  // src/types/chat-types.ts
1504
1448
  var SMS_DELIVERY_FAILURE_STATUSES = /* @__PURE__ */ new Set([
@@ -7736,9 +7680,9 @@ var OrgApi = class extends BaseApiClient {
7736
7680
  /**
7737
7681
  * Update the settings an org admin owns: name, slug and contact details.
7738
7682
  *
7739
- * Deliberately NOT the admin organization update — `primary` and
7740
- * `enforceCreditLimit` are superuser-only and are not fields on this
7741
- * endpoint's request model at all.
7683
+ * Deliberately NOT the admin organization update — `enforceCreditLimit`
7684
+ * is superuser-only and is not a field on this endpoint's request model
7685
+ * at all.
7742
7686
  */
7743
7687
  async updateOrganizationSettings(orgIdOrUuid, data) {
7744
7688
  return this.fetch(`o/${orgIdOrUuid}`, {
@@ -7774,6 +7718,21 @@ var OrgApi = class extends BaseApiClient {
7774
7718
  async getOrgBillingCustomer(orgIdOrUuid) {
7775
7719
  return this.fetch(`o/${orgIdOrUuid}/billing-customer`);
7776
7720
  }
7721
+ /**
7722
+ * Per-workspace usage for this organization's current credit window.
7723
+ *
7724
+ * Requires a billing role on the organization's billing customer — the
7725
+ * same gate `getOrgBillingCustomer().hasAccess` reports, and the one that
7726
+ * decides whether the billing tab is shown at all.
7727
+ *
7728
+ * `creditsUsed` is a real organization-wide total or it is null; it is
7729
+ * never a partial sum. There is deliberately no per-workspace "remaining"
7730
+ * figure — the caps belong to the organization, so `cap - oneWorkspace`
7731
+ * describes nothing.
7732
+ */
7733
+ async getOrgWorkspaceUsage(orgIdOrUuid) {
7734
+ return this.fetch(`o/${orgIdOrUuid}/usage/workspaces`);
7735
+ }
7777
7736
  /**
7778
7737
  * List members of an organization.
7779
7738
  */
@@ -8927,6 +8886,29 @@ var QueriesApi = class extends BaseApiClient {
8927
8886
  }
8928
8887
  };
8929
8888
 
8889
+ // src/api/projects.ts
8890
+ var ProjectsApi = class extends BaseApiClient {
8891
+ /** List projects (README frontmatter summaries). */
8892
+ async getProjects(wid, options = {}) {
8893
+ const params = new URLSearchParams();
8894
+ if (options.page !== void 0) params.append("page", options.page.toString());
8895
+ if (options.pageSize !== void 0) params.append("pageSize", options.pageSize.toString());
8896
+ return this.fetch(
8897
+ `w/${wid}/projects${params.toString() ? `?${params.toString()}` : ""}`
8898
+ );
8899
+ }
8900
+ /** One project: summary + present docs + plan summaries. */
8901
+ async getProject(wid, slug) {
8902
+ return this.fetch(`w/${wid}/projects/${encodeURIComponent(slug)}`);
8903
+ }
8904
+ /** One plan: summary + resolved process + flows + run state. */
8905
+ async getPlan(wid, slug, plan) {
8906
+ return this.fetch(
8907
+ `w/${wid}/projects/${encodeURIComponent(slug)}/plans/${encodeURIComponent(plan)}`
8908
+ );
8909
+ }
8910
+ };
8911
+
8930
8912
  // src/api/qualifications.ts
8931
8913
  var QualificationsApi = class extends BaseApiClient {
8932
8914
  /** List qualifications in a workspace, paginated. */
@@ -9622,12 +9604,6 @@ var SitesApi = class extends BaseApiClient {
9622
9604
  }
9623
9605
  return verifyResponse;
9624
9606
  }
9625
- /** Trigger a crawl of the site's external content source. */
9626
- async crawlSite(wid, siteId) {
9627
- return this.fetch(`w/${wid}/sites/${siteId}/crawl`, {
9628
- method: "POST"
9629
- });
9630
- }
9631
9607
  /** Create a new site in the workspace. */
9632
9608
  async createSite(wid, site) {
9633
9609
  return this.fetch(`w/${wid}/sites`, {
@@ -9798,8 +9774,8 @@ var SubscriptionsApi = class extends BaseApiClient {
9798
9774
  });
9799
9775
  }
9800
9776
  /**
9801
- * List self-service, purchasable plans (org or workspace). Only plans with a
9802
- * paid Stripe price are returned. No auth required.
9777
+ * List self-service, purchasable organization plans or add-ons. Only products
9778
+ * with a Stripe Price are returned; zero-amount plans are allowed.
9803
9779
  */
9804
9780
  async listSelfServeProducts(productType) {
9805
9781
  const qs = productType ? `?product_type=${productType}` : "";
@@ -9834,7 +9810,13 @@ var SubscriptionsApi = class extends BaseApiClient {
9834
9810
  }
9835
9811
  });
9836
9812
  }
9837
- /** Add a workspace to an existing subscription. */
9813
+ /**
9814
+ * Provision a new workspace under an existing org subscription.
9815
+ *
9816
+ * No product or period: the organization already holds the plan and the new
9817
+ * workspace bills through it. Returns before the workspace exists —
9818
+ * `provisioning: true` means poll for it.
9819
+ */
9838
9820
  async addWorkspaceToSubscription(subscriptionId, data) {
9839
9821
  return this.fetch(`subscriptions/${subscriptionId}/add-workspace`, {
9840
9822
  method: "POST",
@@ -11560,6 +11542,7 @@ function createApiModules(apiKey, baseUrl, customFetch) {
11560
11542
  hubspot: new HubspotApi(apiKey, baseUrl, customFetch),
11561
11543
  features: new FeaturesApi(apiKey, baseUrl, customFetch),
11562
11544
  files: new FilesApi(apiKey, baseUrl, customFetch),
11545
+ projects: new ProjectsApi(apiKey, baseUrl, customFetch),
11563
11546
  inboxes: new InboxesApi(apiKey, baseUrl, customFetch),
11564
11547
  inquiries: new InquiriesApi(apiKey, baseUrl, customFetch),
11565
11548
  journeys: new JourneysApi(apiKey, baseUrl, customFetch),
@@ -11654,7 +11637,6 @@ var WORKSPACE_METHOD_NAMES = [
11654
11637
  "configureSalesforce",
11655
11638
  "convertEmail",
11656
11639
  "convertFile",
11657
- "crawlSite",
11658
11640
  "createAbility",
11659
11641
  "createAccessGrant",
11660
11642
  "createAgent",
@@ -12079,8 +12061,11 @@ var WORKSPACE_METHOD_NAMES = [
12079
12061
  "getPhoneNumbers",
12080
12062
  "getPhoneUsageReport",
12081
12063
  "getPlatformApp",
12064
+ "getPlan",
12082
12065
  "getPresenceStatus",
12083
12066
  "getProducts",
12067
+ "getProject",
12068
+ "getProjects",
12084
12069
  "getPublicFile",
12085
12070
  "getPublicFolder",
12086
12071
  "getPublicFolderFiles",
@@ -12814,7 +12799,6 @@ function bindSitesMethods(target, sites) {
12814
12799
  target.siteSendEmailCode = sites.siteSendEmailCode.bind(sites);
12815
12800
  target.siteVerifyCode = sites.siteVerifyCode.bind(sites);
12816
12801
  target.siteGoogleOAuthInitiate = sites.siteGoogleOAuthInitiate.bind(sites);
12817
- target.crawlSite = sites.crawlSite.bind(sites);
12818
12802
  target.createSite = sites.createSite.bind(sites);
12819
12803
  target.updateSite = sites.updateSite.bind(sites);
12820
12804
  target.deleteSite = sites.deleteSite.bind(sites);
@@ -12877,6 +12861,13 @@ function bindFilesMethods(target, files) {
12877
12861
  target.getPublicFolderFiles = files.getPublicFolderFiles.bind(files);
12878
12862
  }
12879
12863
 
12864
+ // src/client/bindings/projects.ts
12865
+ function bindProjectsMethods(target, projects) {
12866
+ target.getProjects = projects.getProjects.bind(projects);
12867
+ target.getProject = projects.getProject.bind(projects);
12868
+ target.getPlan = projects.getPlan.bind(projects);
12869
+ }
12870
+
12880
12871
  // src/client/bindings/events.ts
12881
12872
  function bindEventsMethods(target, events) {
12882
12873
  target.getEventRules = events.getEventRules.bind(events);
@@ -13365,6 +13356,7 @@ function bindOrgMethods(target, org) {
13365
13356
  target.syncVoiceTrustProducts = org.syncVoiceTrustProducts.bind(org);
13366
13357
  target.createOrganizationWorkspace = org.createOrganizationWorkspace.bind(org);
13367
13358
  target.getOrgBillingCustomer = org.getOrgBillingCustomer.bind(org);
13359
+ target.getOrgWorkspaceUsage = org.getOrgWorkspaceUsage.bind(org);
13368
13360
  }
13369
13361
 
13370
13362
  // src/client/bindings/pronunciations.ts
@@ -13910,6 +13902,7 @@ var GravityRailClient = class {
13910
13902
  syncVoiceTrustProducts;
13911
13903
  createOrganizationWorkspace;
13912
13904
  getOrgBillingCustomer;
13905
+ getOrgWorkspaceUsage;
13913
13906
  getVapidPublicKey;
13914
13907
  registerPushSubscription;
13915
13908
  unregisterPushSubscription;
@@ -14009,7 +14002,6 @@ var GravityRailClient = class {
14009
14002
  siteSendEmailCode;
14010
14003
  siteVerifyCode;
14011
14004
  siteGoogleOAuthInitiate;
14012
- crawlSite;
14013
14005
  createSite;
14014
14006
  updateSite;
14015
14007
  deleteSite;
@@ -14030,6 +14022,9 @@ var GravityRailClient = class {
14030
14022
  // Files API
14031
14023
  getFiles;
14032
14024
  getFile;
14025
+ getProjects;
14026
+ getProject;
14027
+ getPlan;
14033
14028
  resolveFilePath;
14034
14029
  downloadFilesZip;
14035
14030
  createFile;
@@ -14565,6 +14560,7 @@ var GravityRailClient = class {
14565
14560
  bindAuthMethods(this, apis.auth, apis.assignments);
14566
14561
  bindSitesMethods(this, apis.sites);
14567
14562
  bindFilesMethods(this, apis.files);
14563
+ bindProjectsMethods(this, apis.projects);
14568
14564
  bindEventsMethods(this, apis.events);
14569
14565
  bindWorkflowsMethods(this, apis.workflows, apis.workflowNotes, apis.voice, apis.supervisors);
14570
14566
  bindCalendarsMethods(this, apis.calendars);
@@ -14736,6 +14732,7 @@ var GravityRailClient = class {
14736
14732
  ActivityEventTypePreset,
14737
14733
  ActivityGoalImpact,
14738
14734
  ActivityTimelineProjection,
14735
+ AddonMutationResponseScope,
14739
14736
  AgentTasksApi,
14740
14737
  AgentsApi,
14741
14738
  ApiError,
@@ -14813,7 +14810,6 @@ var GravityRailClient = class {
14813
14810
  InvitationStatus,
14814
14811
  JobPosition,
14815
14812
  JourneysApi,
14816
- LIMIT_ONLY_RESOURCES,
14817
14813
  MASKED_SECRET_SENTINEL,
14818
14814
  McpServerState,
14819
14815
  McpServersApi,
@@ -14843,6 +14839,7 @@ var GravityRailClient = class {
14843
14839
  OperatorApi,
14844
14840
  OrgApi,
14845
14841
  OrgFeature,
14842
+ OrganizationAddonResponseScope,
14846
14843
  PERMISSION_ADMIN,
14847
14844
  PERMISSION_CREATE,
14848
14845
  PERMISSION_DELETE,
@@ -14954,6 +14951,7 @@ var GravityRailClient = class {
14954
14951
  bindOperatorMethods,
14955
14952
  bindOrgMethods,
14956
14953
  bindPersonasMethods,
14954
+ bindProjectsMethods,
14957
14955
  bindPromptsMethods,
14958
14956
  bindPronunciationsMethods,
14959
14957
  bindQualificationsMethods,
@@ -14976,8 +14974,6 @@ var GravityRailClient = class {
14976
14974
  formatAppContextAsMarkdown,
14977
14975
  getAllFeatures,
14978
14976
  getAllResourceSlugs,
14979
- getApplicableResourceSlugs,
14980
- getApplicableResources,
14981
14977
  getAvailableFeaturesForUpgrade,
14982
14978
  getCookieValue,
14983
14979
  getFeature,
@@ -14986,7 +14982,6 @@ var GravityRailClient = class {
14986
14982
  getMissingDependencies,
14987
14983
  getResourceMetadata,
14988
14984
  getRevisionState,
14989
- getScopeFromProductType,
14990
14985
  getTTSProvider,
14991
14986
  getVoiceModelId,
14992
14987
  initializeFeatures,