atmn 1.1.13 → 1.1.14

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/cli.js CHANGED
@@ -1509,7 +1509,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
1509
1509
  this._exitCallback = (err) => {
1510
1510
  if (err.code !== "commander.executeSubCommandAsync") {
1511
1511
  throw err;
1512
- } else {}
1512
+ }
1513
1513
  };
1514
1514
  }
1515
1515
  return this;
@@ -13062,7 +13062,7 @@ Learn more about data fetching with Hooks: https://react.dev/link/hooks-data-fet
13062
13062
  offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
13063
13063
  wasHidden && !hoistableRoot && !prevOffscreenSubtreeIsHidden && !prevOffscreenSubtreeWasHidden && (finishedWork.mode & 2) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentReappeared(finishedWork, componentEffectStartTime, componentEffectEndTime);
13064
13064
  commitReconciliationEffects(finishedWork);
13065
- if (flags & 8192 && (root = finishedWork.stateNode, root._visibility = hoistableRoot ? root._visibility & ~OffscreenVisible : root._visibility | OffscreenVisible, !hoistableRoot || current2 === null || wasHidden || offscreenSubtreeIsHidden || offscreenSubtreeWasHidden || (recursivelyTraverseDisappearLayoutEffects(finishedWork), (finishedWork.mode & 2) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger(finishedWork, componentEffectStartTime, componentEffectEndTime, "Disconnect")), supportsMutation))
13065
+ if (flags & 8192 && (root = finishedWork.stateNode, root._visibility = hoistableRoot ? root._visibility & ~OffscreenVisible : root._visibility | OffscreenVisible, !hoistableRoot || current2 === null || wasHidden || offscreenSubtreeIsHidden || offscreenSubtreeWasHidden || (recursivelyTraverseDisappearLayoutEffects(finishedWork), (finishedWork.mode & 2) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger(finishedWork, componentEffectStartTime, componentEffectEndTime, "Disconnect")), supportsMutation)) {
13066
13066
  a:
13067
13067
  if (current2 = null, supportsMutation)
13068
13068
  for (root = finishedWork;; ) {
@@ -13112,6 +13112,7 @@ Learn more about data fetching with Hooks: https://react.dev/link/hooks-data-fet
13112
13112
  root.sibling.return = root.return;
13113
13113
  root = root.sibling;
13114
13114
  }
13115
+ }
13115
13116
  flags & 4 && (flags = finishedWork.updateQueue, flags !== null && (current2 = flags.retryQueue, current2 !== null && (flags.retryQueue = null, attachSuspenseRetryListeners(finishedWork, current2))));
13116
13117
  break;
13117
13118
  case 19:
@@ -22598,7 +22599,7 @@ var require_backend = __commonJS((exports, module) => {
22598
22599
  987: (module2, __unused_webpack_exports, __webpack_require__2) => {
22599
22600
  if (true) {
22600
22601
  module2.exports = __webpack_require__2(786);
22601
- } else {}
22602
+ }
22602
22603
  },
22603
22604
  126: (__unused_webpack_module, exports2, __webpack_require__2) => {
22604
22605
  var process6 = __webpack_require__2(169);
@@ -23058,7 +23059,7 @@ var require_backend = __commonJS((exports, module) => {
23058
23059
  189: (module2, __unused_webpack_exports, __webpack_require__2) => {
23059
23060
  if (true) {
23060
23061
  module2.exports = __webpack_require__2(126);
23061
- } else {}
23062
+ }
23062
23063
  },
23063
23064
  206: function(module2, exports2, __webpack_require__2) {
23064
23065
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
@@ -23078,7 +23079,7 @@ var require_backend = __commonJS((exports, module) => {
23078
23079
  (function(root, factory) {
23079
23080
  if (true) {
23080
23081
  __WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__2(430)], __WEBPACK_AMD_DEFINE_FACTORY__ = factory, __WEBPACK_AMD_DEFINE_RESULT__ = typeof __WEBPACK_AMD_DEFINE_FACTORY__ === "function" ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports2, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__);
23081
- } else {}
23082
+ }
23082
23083
  })(this, function ErrorStackParser(StackFrame) {
23083
23084
  var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+:\d+/;
23084
23085
  var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+:\d+|\(native\))/m;
@@ -23754,7 +23755,7 @@ var require_backend = __commonJS((exports, module) => {
23754
23755
  (function(root, factory) {
23755
23756
  if (true) {
23756
23757
  __WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = factory, __WEBPACK_AMD_DEFINE_RESULT__ = typeof __WEBPACK_AMD_DEFINE_FACTORY__ === "function" ? __WEBPACK_AMD_DEFINE_FACTORY__.apply(exports2, __WEBPACK_AMD_DEFINE_ARRAY__) : __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__);
23757
- } else {}
23758
+ }
23758
23759
  })(this, function() {
23759
23760
  function _isNumber(n) {
23760
23761
  return !isNaN(parseFloat(n)) && isFinite(n);
@@ -28536,7 +28537,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
28536
28537
  var suffix = "";
28537
28538
  if (true) {
28538
28539
  suffix = " (<anonymous>)";
28539
- } else {}
28540
+ }
28540
28541
  return `
28541
28542
  ` + prefix + name + suffix;
28542
28543
  }
@@ -30865,7 +30866,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
30865
30866
  hasChanges = true;
30866
30867
  updateMostRecentlyInspectedElementIfNecessary(devtoolsInstance.id);
30867
30868
  }
30868
- } else {}
30869
+ }
30869
30870
  }
30870
30871
  } catch (err) {
30871
30872
  _iterator2.e(err);
@@ -34737,7 +34738,7 @@ The error thrown in the component is:
34737
34738
  rendererInterface = renderer_attach(hook, id, renderer, global2, shouldStartProfilingNow, profilingSettings);
34738
34739
  } else if (renderer.ComponentTree) {
34739
34740
  rendererInterface = legacy_renderer_attach(hook, id, renderer, global2);
34740
- } else {}
34741
+ }
34741
34742
  }
34742
34743
  return rendererInterface;
34743
34744
  }
@@ -48187,7 +48188,7 @@ var init_pull = __esm(() => {
48187
48188
  });
48188
48189
 
48189
48190
  // src/lib/version.ts
48190
- var APP_VERSION = "1.1.13";
48191
+ var APP_VERSION = "1.1.14";
48191
48192
 
48192
48193
  // ../../node_modules/@tanstack/query-core/build/modern/subscribable.js
48193
48194
  var Subscribable = class {
@@ -101722,7 +101723,7 @@ class JSONSchemaGenerator {
101722
101723
  if (val === undefined) {
101723
101724
  if (this.unrepresentable === "throw") {
101724
101725
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
101725
- } else {}
101726
+ }
101726
101727
  } else if (typeof val === "bigint") {
101727
101728
  if (this.unrepresentable === "throw") {
101728
101729
  throw new Error("BigInt literals cannot be represented in JSON Schema");
@@ -103885,6 +103886,7 @@ var init_usageWindowTable = __esm(() => {
103885
103886
  internal_entity_id: exports_external.string().nullable(),
103886
103887
  feature_id: exports_external.string(),
103887
103888
  internal_feature_id: exports_external.string(),
103889
+ filter_key: exports_external.string().nullable().default(null),
103888
103890
  anchor_customer_entitlement_id: exports_external.string().nullable(),
103889
103891
  window_start_at: exports_external.number(),
103890
103892
  window_end_at: exports_external.number(),
@@ -103897,6 +103899,7 @@ var init_usageWindowTable = __esm(() => {
103897
103899
  internal_entity_id: text("internal_entity_id"),
103898
103900
  feature_id: text("feature_id").notNull(),
103899
103901
  internal_feature_id: text("internal_feature_id").notNull(),
103902
+ filter_key: text("filter_key"),
103900
103903
  anchor_customer_entitlement_id: text("anchor_customer_entitlement_id"),
103901
103904
  window_start_at: numeric({ mode: "number" }).notNull(),
103902
103905
  window_end_at: numeric({ mode: "number" }).notNull(),
@@ -103925,7 +103928,7 @@ var init_usageWindowTable = __esm(() => {
103925
103928
  }).onUpdate("cascade").onDelete("set null"),
103926
103929
  index("idx_usage_windows_internal_customer_id").on(table3.internal_customer_id),
103927
103930
  index("idx_uw_internal_feature_id").on(table3.internal_feature_id).concurrently(),
103928
- uniqueIndex("idx_usage_windows_customer_feature_scope").on(table3.internal_customer_id, table3.internal_feature_id, sql`COALESCE(${table3.internal_entity_id}, '')`)
103931
+ uniqueIndex("idx_usage_windows_customer_feature_scope").on(table3.internal_customer_id, table3.internal_feature_id, sql`COALESCE(${table3.internal_entity_id}, '')`, sql`COALESCE(${table3.filter_key}, '')`).concurrently()
103929
103932
  ]).enableRLS();
103930
103933
  });
103931
103934
 
@@ -104502,10 +104505,12 @@ var init_harnessSessionsTable = __esm(() => {
104502
104505
  thread_key: text("thread_key").notNull(),
104503
104506
  session_id: text("session_id").notNull(),
104504
104507
  resume_state: jsonb("resume_state"),
104508
+ title: text("title"),
104505
104509
  braintrust_parent: text("braintrust_parent"),
104506
104510
  updated_at: numeric({ mode: "number" }).notNull().default(sqlNow)
104507
104511
  }, (table3) => [
104508
- primaryKey({ columns: [table3.org_id, table3.env, table3.thread_key] })
104512
+ primaryKey({ columns: [table3.org_id, table3.env, table3.thread_key] }),
104513
+ index("idx_harness_sessions_session_id").on(table3.session_id).concurrently()
104509
104514
  ]);
104510
104515
  });
104511
104516
 
@@ -104631,6 +104636,7 @@ var init_migrationItemRunTable = __esm(() => {
104631
104636
  updated_at: numeric({ mode: "number" })
104632
104637
  }, (table3) => [
104633
104638
  uniqueIndex("migration_item_runs_live_unique").on(table3.migration_internal_id, table3.item_kind, table3.item_id).where(sql`${table3.dry_run} = false`),
104639
+ index("migration_item_runs_live_c_idx").on(table3.migration_internal_id, table3.item_kind, sql`${table3.item_id} COLLATE "C"`).where(sql`${table3.dry_run} = false`).concurrently(),
104634
104640
  uniqueIndex("migration_item_runs_dry_run_unique").on(table3.migration_internal_id, table3.migration_run_id, table3.item_kind, table3.item_id).where(sql`${table3.dry_run} = true`),
104635
104641
  index("migration_item_runs_customer_recent_idx").on(table3.item_id, sql`${table3.updated_at} DESC`).where(sql`${table3.item_kind} = 'customer'`)
104636
104642
  ]);
@@ -105477,9 +105483,12 @@ var init_spendLimit = __esm(() => {
105477
105483
  }),
105478
105484
  overage_limit: exports_external.number().min(0).optional().meta({
105479
105485
  description: "Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage."
105486
+ }),
105487
+ skip_overage_billing: exports_external.boolean().optional().meta({
105488
+ description: "When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally."
105480
105489
  })
105481
- }).refine((data) => data.overage_limit === undefined || data.feature_id !== undefined, {
105482
- message: "feature_id is required when overage_limit is provided",
105490
+ }).refine((data) => data.overage_limit === undefined && data.skip_overage_billing === undefined || data.feature_id !== undefined, {
105491
+ message: "feature_id is required when overage_limit or skip_overage_billing is provided",
105483
105492
  path: ["feature_id"]
105484
105493
  });
105485
105494
  });
@@ -105540,7 +105549,11 @@ var init_resetInterval = __esm(() => {
105540
105549
  });
105541
105550
 
105542
105551
  // ../../shared/models/cusModels/billingControls/usageLimit.ts
105543
- var USAGE_LIMIT_INTERVALS, DbUsageLimitSchema, USAGE_LIMIT_INTERVAL_DAYS;
105552
+ var USAGE_LIMIT_INTERVALS, USAGE_LIMIT_FILTER_MAX_KEYS = 4, USAGE_LIMIT_FILTER_MAX_KEY_LENGTH = 64, USAGE_LIMIT_FILTER_MAX_VALUE_LENGTH = 128, UsageLimitFilterValueSchema, UsageLimitFilterSchema, DbUsageLimitSchema, usageLimitFilterKey = (filter2) => {
105553
+ if (!filter2?.properties)
105554
+ return "";
105555
+ return Object.entries(filter2.properties).map(([key, value]) => [key, String(value)]).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${key}=${value}`).join("&");
105556
+ }, USAGE_LIMIT_INTERVAL_DAYS;
105544
105557
  var init_usageLimit = __esm(() => {
105545
105558
  init_v4();
105546
105559
  init_resetInterval();
@@ -105550,6 +105563,25 @@ var init_usageLimit = __esm(() => {
105550
105563
  "month" /* Month */,
105551
105564
  "year" /* Year */
105552
105565
  ];
105566
+ UsageLimitFilterValueSchema = exports_external.union([
105567
+ exports_external.string().min(1).max(USAGE_LIMIT_FILTER_MAX_VALUE_LENGTH),
105568
+ exports_external.number(),
105569
+ exports_external.boolean()
105570
+ ]).transform(String);
105571
+ UsageLimitFilterSchema = exports_external.object({
105572
+ properties: exports_external.record(exports_external.string().min(1).max(USAGE_LIMIT_FILTER_MAX_KEY_LENGTH), UsageLimitFilterValueSchema).meta({
105573
+ description: "Event property equality conditions. A usage event counts toward this cap only when every listed property matches (AND)."
105574
+ }).check((ctx) => {
105575
+ const keyCount = Object.keys(ctx.value).length;
105576
+ if (keyCount < 1 || keyCount > USAGE_LIMIT_FILTER_MAX_KEYS) {
105577
+ ctx.issues.push({
105578
+ code: "custom",
105579
+ message: `filter.properties must have between 1 and ${USAGE_LIMIT_FILTER_MAX_KEYS} keys`,
105580
+ input: ctx.value
105581
+ });
105582
+ }
105583
+ })
105584
+ });
105553
105585
  DbUsageLimitSchema = exports_external.object({
105554
105586
  feature_id: exports_external.string().meta({
105555
105587
  description: "The feature this usage limit applies to."
@@ -105562,6 +105594,9 @@ var init_usageLimit = __esm(() => {
105562
105594
  }),
105563
105595
  interval: exports_external.enum(USAGE_LIMIT_INTERVALS).meta({
105564
105596
  description: "Interval for the cap, aligned to the customer's billing cycle."
105597
+ }),
105598
+ filter: UsageLimitFilterSchema.optional().meta({
105599
+ description: "When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature."
105565
105600
  })
105566
105601
  });
105567
105602
  USAGE_LIMIT_INTERVAL_DAYS = {
@@ -105619,6 +105654,7 @@ var init_customerBillingControls = __esm(() => {
105619
105654
  init_spendLimit();
105620
105655
  init_usageAlert();
105621
105656
  init_usageLimit();
105657
+ init_usageLimit();
105622
105658
  AutoTopupPurchaseLimitSchema = exports_external.object({
105623
105659
  interval: PurchaseLimitIntervalEnum.meta({
105624
105660
  description: "The time interval for the purchase limit window."
@@ -105714,18 +105750,19 @@ var init_customerBillingControls = __esm(() => {
105714
105750
  }
105715
105751
  spendLimitFeatureIds.add(spendLimit.feature_id);
105716
105752
  }
105717
- const usageLimitFeatureIds = new Set;
105753
+ const usageLimitIdentities = new Set;
105718
105754
  for (const [index3, usageLimit] of (billingControls.usage_limits ?? []).entries()) {
105719
- if (usageLimitFeatureIds.has(usageLimit.feature_id)) {
105755
+ const identity4 = `${usageLimit.feature_id}|${usageLimitFilterKey(usageLimit.filter)}`;
105756
+ if (usageLimitIdentities.has(identity4)) {
105720
105757
  ctx.issues.push({
105721
105758
  code: "custom",
105722
- message: "Only one usage limit entry is allowed per feature_id",
105759
+ message: "Only one usage limit entry is allowed per feature_id and filter",
105723
105760
  input: usageLimit.feature_id,
105724
105761
  path: ["usage_limits", index3, "feature_id"]
105725
105762
  });
105726
105763
  return;
105727
105764
  }
105728
- usageLimitFeatureIds.add(usageLimit.feature_id);
105765
+ usageLimitIdentities.add(identity4);
105729
105766
  }
105730
105767
  const overageAllowedFeatureIds = new Set;
105731
105768
  for (const [index3, overageAllowed] of (billingControls.overage_allowed ?? []).entries()) {
@@ -106893,8 +106930,13 @@ var init_billingBehavior = __esm(() => {
106893
106930
  var PaymentFailureCodeEnum, BillingResponseRequiredActionSchema, BillingResponseSchema;
106894
106931
  var init_billingResponse = __esm(() => {
106895
106932
  init_v4();
106896
- PaymentFailureCodeEnum = exports_external.enum(["3ds_required", "payment_method_required", "payment_failed"]).meta({
106897
- description: "The type of payment failure. '3ds_required' means 3D Secure authentication is needed, 'payment_method_required' means the customer needs to add a payment method, 'payment_failed' means the payment was declined."
106933
+ PaymentFailureCodeEnum = exports_external.enum([
106934
+ "3ds_required",
106935
+ "payment_method_required",
106936
+ "payment_failed",
106937
+ "payment_processing"
106938
+ ]).meta({
106939
+ description: "The type of payment action. '3ds_required' means 3D Secure authentication is needed, 'payment_method_required' means the customer needs to add a payment method, 'payment_failed' means the payment was declined, 'payment_processing' means payment is still settling."
106898
106940
  });
106899
106941
  BillingResponseRequiredActionSchema = exports_external.object({
106900
106942
  code: PaymentFailureCodeEnum.meta({
@@ -107562,6 +107604,7 @@ var init_ErrCode = __esm(() => {
107562
107604
  GetCusPriceFailed: "get_cus_price_failed",
107563
107605
  PayInvoiceFailed: "invoice_payment_failed",
107564
107606
  InvalidReward: "invalid_reward",
107607
+ ProductNotInStripe: "product_not_in_stripe",
107565
107608
  DuplicateRewardId: "duplicate_reward_id",
107566
107609
  DuplicatePromoCode: "duplicate_promo_code",
107567
107610
  PromoCodeAlreadyExistsInStripe: "promo_code_already_exists_in_stripe",
@@ -118672,9 +118715,7 @@ var init_updateSubscriptionV1Params = __esm(() => {
118672
118715
  no_billing_changes: exports_external.boolean().optional().meta({
118673
118716
  description: "If true, the subscription is updated internally without applying billing changes in Stripe."
118674
118717
  }),
118675
- refund_last_payment: RefundLastPaymentSchema.optional().meta({
118676
- internal: true
118677
- }),
118718
+ refund_last_payment: RefundLastPaymentSchema.optional(),
118678
118719
  recalculate_balances: exports_external.object({
118679
118720
  enabled: exports_external.boolean().meta({
118680
118721
  description: "If true, recalculates balances during the subscription update. Only applicable when updating feature quantities."
@@ -119978,6 +120019,11 @@ var init_fullCustomerToOverageAllowed = __esm(() => {
119978
120019
  init_planBillingControlUtils();
119979
120020
  });
119980
120021
 
120022
+ // ../../shared/utils/cusUtils/fullCusUtils/fullCustomerToSkipOverageBilling.ts
120023
+ var init_fullCustomerToSkipOverageBilling = __esm(() => {
120024
+ init_planBillingControlUtils();
120025
+ });
120026
+
119981
120027
  // ../../shared/utils/cusUtils/fullCusUtils/fullCustomerToSpendLimit.ts
119982
120028
  var init_fullCustomerToSpendLimit = __esm(() => {
119983
120029
  init_cusEntUtils2();
@@ -119993,6 +120039,7 @@ var init_cusUtils = __esm(() => {
119993
120039
  init_enrichFullCustomer();
119994
120040
  init_fullCustomerToCustomerEntitlements();
119995
120041
  init_fullCustomerToOverageAllowed();
120042
+ init_fullCustomerToSkipOverageBilling();
119996
120043
  init_fullCustomerToSpendLimit();
119997
120044
  init_fullCustomerToTags();
119998
120045
  });
@@ -120131,6 +120178,7 @@ var init_diffPlanV1 = __esm(() => {
120131
120178
 
120132
120179
  // ../../shared/utils/planV1Utils/diff/diffPlanV1PreviewFields.ts
120133
120180
  var init_diffPlanV1PreviewFields = __esm(() => {
120181
+ init_customerBillingControls();
120134
120182
  init_diffPlanV1();
120135
120183
  });
120136
120184
 
@@ -120213,6 +120261,7 @@ var init_apiBalanceV1ToAvailableOverage = __esm(() => {
120213
120261
  });
120214
120262
  // ../../shared/api/customers/utils/apiSubjectToUsageLimitHeadroom.ts
120215
120263
  var init_apiSubjectToUsageLimitHeadroom = __esm(() => {
120264
+ init_usageLimit();
120216
120265
  init_decimal();
120217
120266
  });
120218
120267
 
@@ -123000,9 +123049,98 @@ var init_common3 = __esm(() => {
123000
123049
  init_transitionRules();
123001
123050
  });
123002
123051
 
123052
+ // ../../shared/api/billing/multiUpdate/multiUpdateParamsV0.ts
123053
+ var ExtMultiUpdateItemV0Schema, MultiUpdateItemV0Schema, multiUpdateParamsBase, updatesMeta, ExtMultiUpdateParamsV0Schema, MultiUpdateParamsV0Schema;
123054
+ var init_multiUpdateParamsV0 = __esm(() => {
123055
+ init_v4();
123056
+ init_billingBehavior();
123057
+ init_cancelAction();
123058
+ ExtMultiUpdateItemV0Schema = exports_external.object({
123059
+ plan_id: exports_external.string().optional().meta({
123060
+ description: "The ID of the plan to update. Optional if subscription_id is provided."
123061
+ }),
123062
+ subscription_id: exports_external.string().optional().meta({
123063
+ description: "A unique ID to identify the subscription to update. Useful when a customer has multiple products with the same plan."
123064
+ }),
123065
+ entity_id: exports_external.string().optional().meta({
123066
+ description: "The ID of the entity this update targets. Overrides the top-level entity_id for this update."
123067
+ }),
123068
+ cancel_action: CancelActionSchema.meta({
123069
+ description: "Action to perform for cancellation. 'cancel_immediately' cancels now with prorated refund, 'cancel_end_of_cycle' cancels at period end, 'uncancel' reverses a pending cancellation."
123070
+ }),
123071
+ proration_behavior: BillingBehaviorSchema.optional().meta({
123072
+ description: "How to handle proration for this update. 'prorate_immediately' charges/credits prorated amounts now, 'none' skips creating any charges."
123073
+ })
123074
+ });
123075
+ MultiUpdateItemV0Schema = ExtMultiUpdateItemV0Schema.extend({
123076
+ customer_product_id: exports_external.string().optional().meta({
123077
+ internal: true
123078
+ })
123079
+ });
123080
+ multiUpdateParamsBase = {
123081
+ customer_id: exports_external.string().meta({
123082
+ description: "The ID of the customer to update plans for."
123083
+ }),
123084
+ entity_id: exports_external.string().optional().meta({
123085
+ description: "The ID of the entity to update plans for. Individual updates can override this with their own entity_id."
123086
+ })
123087
+ };
123088
+ updatesMeta = {
123089
+ description: "The list of plan updates to apply to the customer."
123090
+ };
123091
+ ExtMultiUpdateParamsV0Schema = exports_external.object({
123092
+ ...multiUpdateParamsBase,
123093
+ updates: exports_external.array(ExtMultiUpdateItemV0Schema).min(1, "At least one update must be provided").meta(updatesMeta)
123094
+ });
123095
+ MultiUpdateParamsV0Schema = exports_external.object({
123096
+ ...multiUpdateParamsBase,
123097
+ updates: exports_external.array(MultiUpdateItemV0Schema).min(1, "At least one update must be provided").meta(updatesMeta)
123098
+ });
123099
+ });
123100
+
123101
+ // ../../shared/api/billing/multiUpdate/multiUpdatePreviewResponseV0.ts
123102
+ var planIdsField, MultiUpdateSubscriptionPreviewV0Schema, ExtMultiUpdateSubscriptionPreviewV0Schema, multiUpdatePreviewBase, subscriptionsMeta, ExtMultiUpdatePreviewResponseV0Schema, MultiUpdatePreviewResponseV0Schema;
123103
+ var init_multiUpdatePreviewResponseV0 = __esm(() => {
123104
+ init_v4();
123105
+ init_billingPreviewResponse();
123106
+ planIdsField = exports_external.array(exports_external.string()).meta({
123107
+ description: "The IDs of the plans updated on this subscription."
123108
+ });
123109
+ MultiUpdateSubscriptionPreviewV0Schema = BillingPreviewResponseSchema.extend({
123110
+ plan_ids: planIdsField
123111
+ });
123112
+ ExtMultiUpdateSubscriptionPreviewV0Schema = ExtBillingPreviewResponseSchema.extend({
123113
+ plan_ids: planIdsField
123114
+ });
123115
+ multiUpdatePreviewBase = {
123116
+ customer_id: exports_external.string().meta({
123117
+ description: "The ID of the customer the preview applies to."
123118
+ }),
123119
+ currency: exports_external.string().meta({
123120
+ description: "The three-letter ISO currency code (e.g., 'usd')."
123121
+ }),
123122
+ total: exports_external.number().meta({
123123
+ description: "The combined amount due today across all subscriptions (sum of subscriptions[].total)."
123124
+ })
123125
+ };
123126
+ subscriptionsMeta = {
123127
+ description: "One preview per affected Stripe subscription. Updates to plans without a subscription (free plans) produce no entry."
123128
+ };
123129
+ ExtMultiUpdatePreviewResponseV0Schema = exports_external.object({
123130
+ ...multiUpdatePreviewBase,
123131
+ subscriptions: exports_external.array(ExtMultiUpdateSubscriptionPreviewV0Schema).meta(subscriptionsMeta)
123132
+ });
123133
+ MultiUpdatePreviewResponseV0Schema = exports_external.object({
123134
+ object: exports_external.literal("multi_update_preview").meta({ internal: true }),
123135
+ ...multiUpdatePreviewBase,
123136
+ subscriptions: exports_external.array(MultiUpdateSubscriptionPreviewV0Schema).meta(subscriptionsMeta)
123137
+ });
123138
+ });
123139
+
123003
123140
  // ../../shared/api/billing/dfu/dfuFlashParams.ts
123004
123141
  var ProcessorTypeSchema, FlashCustomerDataSchema, FlashProcessorIdentitySchema, FlashLinkSchema, FlashStartingAfterSchema, FlashBalanceFilterSchema, FlashRolloverSchema, FlashBalanceSchema, FlashFeatureQuantitySchema, FlashPlanSchema, FlashPhaseSchema, FlashBillableSchema, FlashEntitySchema, DfuFlashParamsSchema, DfuFlashedPlanSchema, DfuFlashResultSchema;
123005
123142
  var init_dfuFlashParams = __esm(() => {
123143
+ init_entitlementInterval();
123006
123144
  init_v4();
123007
123145
  init_apiCustomerV5();
123008
123146
  ProcessorTypeSchema = exports_external.enum(["stripe", "revenuecat"]);
@@ -123032,11 +123170,11 @@ var init_dfuFlashParams = __esm(() => {
123032
123170
  duration_count: exports_external.number()
123033
123171
  }).meta({ internal: true });
123034
123172
  FlashBalanceFilterSchema = exports_external.object({
123035
- interval: exports_external.enum(["hour", "day", "week", "month", "year"]).nullable().optional().meta({
123036
- description: "Reset interval selecting which entitlement line to target when a feature has several (null = the non-resetting one-off line)."
123173
+ interval: exports_external.enum(EntInterval).nullable().optional().meta({
123174
+ description: "Reset interval selecting which entitlement line to target when a feature has several ('lifetime' or null = the non-resetting one-off line)."
123037
123175
  }),
123038
- billing_behavior: exports_external.enum(["included", "prepaid"]).optional().meta({
123039
- description: "Selects the included vs prepaid entitlement line when a feature has both."
123176
+ billing_behavior: exports_external.enum(["included", "prepaid", "usage_based"]).optional().meta({
123177
+ description: "Selects the included vs prepaid vs usage-based (pay-per-use) entitlement line when a feature has several."
123040
123178
  })
123041
123179
  });
123042
123180
  FlashRolloverSchema = exports_external.object({
@@ -123125,7 +123263,7 @@ var init_dfuFlashParams = __esm(() => {
123125
123263
  description: "Autumn customer to image into."
123126
123264
  }),
123127
123265
  customer_data: FlashCustomerDataSchema.optional().meta({
123128
- description: "Optional identity fields to upsert if the customer is new."
123266
+ description: "Optional identity fields upserted onto the customer (applied to existing customers too)."
123129
123267
  }),
123130
123268
  processors: exports_external.array(FlashProcessorIdentitySchema).optional().meta({
123131
123269
  description: "The customer's processor identities (e.g. Stripe customer id, RevenueCat app_user_id). Omit for customers with no processor, e.g. those only ever on a free plan."
@@ -123482,6 +123620,8 @@ var init_billing = __esm(() => {
123482
123620
  init_common3();
123483
123621
  init_createScheduleParamsV0();
123484
123622
  init_createScheduleResponse();
123623
+ init_multiUpdateParamsV0();
123624
+ init_multiUpdatePreviewResponseV0();
123485
123625
  init_dfuFlashParams();
123486
123626
  init_openBillingPortalParamsV1();
123487
123627
  init_openBillingPortalResponse();
@@ -124170,6 +124310,83 @@ var init_balancesUsageAlertTriggered = __esm(() => {
124170
124310
  });
124171
124311
  });
124172
124312
 
124313
+ // ../../shared/api/webhooks/billing/billingAutoTopupFailed.ts
124314
+ var BillingAutoTopupFailureReasonSchema, BillingAutoTopupFailedErrorSchema, BILLING_AUTO_TOPUP_FAILED_EXAMPLE, BillingAutoTopupFailedSchema;
124315
+ var init_billingAutoTopupFailed = __esm(() => {
124316
+ init_v4();
124317
+ BillingAutoTopupFailureReasonSchema = exports_external.enum([
124318
+ "charge_failed",
124319
+ "purchase_limit_reached",
124320
+ "attempt_limit_reached",
124321
+ "failed_attempt_limit_reached",
124322
+ "customer_unavailable",
124323
+ "configuration_unavailable",
124324
+ "missing_payment_method",
124325
+ "missing_customer_product",
124326
+ "invalid_amount",
124327
+ "lock_contention",
124328
+ "redis_unavailable",
124329
+ "execution_error"
124330
+ ]).meta({
124331
+ description: "Machine-readable reason the automatic top-up did not grant balance."
124332
+ });
124333
+ BillingAutoTopupFailedErrorSchema = exports_external.object({
124334
+ code: exports_external.string().nullish().meta({
124335
+ description: "Machine-readable error code when one is available (for example, a Stripe or Autumn error code)."
124336
+ }),
124337
+ message: exports_external.string().nullish().meta({
124338
+ description: "Sanitized error message with details about why the auto top-up failed."
124339
+ }),
124340
+ type: exports_external.string().nullish().meta({
124341
+ description: "Provider error type when one is available."
124342
+ }),
124343
+ decline_code: exports_external.string().nullish().meta({
124344
+ description: "Stripe decline code when the failure came from a card decline."
124345
+ })
124346
+ });
124347
+ BILLING_AUTO_TOPUP_FAILED_EXAMPLE = {
124348
+ customer_id: "cus_123",
124349
+ feature_id: "messages",
124350
+ reason: "charge_failed",
124351
+ quantity: 100,
124352
+ threshold: 20,
124353
+ balance: 15,
124354
+ invoice_mode: false,
124355
+ error: {
124356
+ code: "card_declined",
124357
+ message: "Your card was declined.",
124358
+ type: "card_error",
124359
+ decline_code: "generic_decline"
124360
+ }
124361
+ };
124362
+ BillingAutoTopupFailedSchema = exports_external.object({
124363
+ customer_id: exports_external.string().meta({
124364
+ description: "The ID of the customer whose auto top-up failed."
124365
+ }),
124366
+ feature_id: exports_external.string().meta({
124367
+ description: "The feature ID that Autumn attempted to auto top-up."
124368
+ }),
124369
+ reason: BillingAutoTopupFailureReasonSchema,
124370
+ quantity: exports_external.number().nullish().meta({
124371
+ description: "The normalized amount of balance Autumn attempted to grant, when a matching auto top-up config was available."
124372
+ }),
124373
+ threshold: exports_external.number().nullish().meta({
124374
+ description: "The configured balance threshold for the auto top-up, when available."
124375
+ }),
124376
+ balance: exports_external.number().nullish().meta({
124377
+ description: "The customer's remaining balance for the feature at the time the failure was detected, when available."
124378
+ }),
124379
+ invoice_mode: exports_external.boolean().nullish().meta({
124380
+ description: "Whether the auto top-up was configured to create a send_invoice invoice instead of auto-charging."
124381
+ }),
124382
+ error: BillingAutoTopupFailedErrorSchema.nullish().meta({
124383
+ description: "Sanitized provider or Autumn error metadata, when the failure came from an exception or declined charge."
124384
+ })
124385
+ }).meta({
124386
+ examples: [BILLING_AUTO_TOPUP_FAILED_EXAMPLE]
124387
+ });
124388
+ });
124389
+
124173
124390
  // ../../shared/api/webhooks/billing/billingAutoTopupSucceeded.ts
124174
124391
  var BillingAutoTopupSucceededInvoiceSchema, BILLING_AUTO_TOPUP_SUCCEEDED_EXAMPLE, BillingAutoTopupSucceededSchema;
124175
124392
  var init_billingAutoTopupSucceeded = __esm(() => {
@@ -124369,6 +124586,7 @@ var webhookRegistry;
124369
124586
  var init_webhookRegistry = __esm(() => {
124370
124587
  init_balancesLimitReached();
124371
124588
  init_balancesUsageAlertTriggered();
124589
+ init_billingAutoTopupFailed();
124372
124590
  init_billingAutoTopupSucceeded();
124373
124591
  init_billingUpdated();
124374
124592
  init_vercelResourceDeleted();
@@ -124393,6 +124611,14 @@ var init_webhookRegistry = __esm(() => {
124393
124611
  group: "Balances",
124394
124612
  description: "Fired when a customer reaches the limit for a feature (included allowance, max purchase, or spend limit)."
124395
124613
  },
124614
+ {
124615
+ eventType: "billing.auto_topup_failed" /* BillingAutoTopupFailed */,
124616
+ operationId: "billingAutoTopupFailed",
124617
+ title: "Auto Top-Up Failed",
124618
+ schema: BillingAutoTopupFailedSchema,
124619
+ group: "Billing",
124620
+ description: "Fired when an automatic top-up is blocked, declined, or fails before granting additional prepaid balance."
124621
+ },
124396
124622
  {
124397
124623
  eventType: "billing.auto_topup_succeeded" /* BillingAutoTopupSucceeded */,
124398
124624
  operationId: "billingAutoTopupSucceeded",
@@ -124452,6 +124678,7 @@ var init_webhookRegistry = __esm(() => {
124452
124678
  var init_webhooks = __esm(() => {
124453
124679
  init_balancesLimitReached();
124454
124680
  init_balancesUsageAlertTriggered();
124681
+ init_billingAutoTopupFailed();
124455
124682
  init_billingAutoTopupSucceeded();
124456
124683
  init_billingUpdated();
124457
124684
  init_vercel();
@@ -129445,6 +129672,8 @@ var init_usageWindowModels = __esm(() => {
129445
129672
  scope_type: UsageWindowScopeSchema,
129446
129673
  entity_id: exports_external.string().nullable(),
129447
129674
  internal_entity_id: exports_external.string().nullable(),
129675
+ filter_key: exports_external.string().nullable(),
129676
+ filter_properties: exports_external.record(exports_external.string(), exports_external.string()).nullable(),
129448
129677
  interval: exports_external.enum(EntInterval),
129449
129678
  window_start_at: exports_external.number(),
129450
129679
  window_end_at: exports_external.number(),
@@ -130954,6 +131183,7 @@ var init_getUsageWindowDimension = __esm(() => {
130954
131183
  // ../../shared/utils/usageWindowUtils/convertUsageWindow/usageLimitToUsageWindowLimit.ts
130955
131184
  var init_usageLimitToUsageWindowLimit = __esm(() => {
130956
131185
  init_planItemIntervals();
131186
+ init_usageLimit();
130957
131187
  init_findUsageWindowAnchor();
130958
131188
  init_getUsageWindowBounds();
130959
131189
  init_getUsageWindowDimension();
@@ -130962,11 +131192,13 @@ var init_usageLimitToUsageWindowLimit = __esm(() => {
130962
131192
  // ../../shared/utils/fullSubjectUtils/fullSubjectToUsageWindowLimits.ts
130963
131193
  var init_fullSubjectToUsageWindowLimits = __esm(() => {
130964
131194
  init_usageLimitToUsageWindowLimit();
131195
+ init_usageLimit();
130965
131196
  init_planBillingControlUtils();
130966
131197
  });
130967
131198
 
130968
131199
  // ../../shared/utils/fullSubjectUtils/fullSubjectToApiUsageLimits.ts
130969
131200
  var init_fullSubjectToApiUsageLimits = __esm(() => {
131201
+ init_usageLimit();
130970
131202
  init_getCurrentUsageWindowUsage();
130971
131203
  init_fullSubjectToUsageWindowLimits();
130972
131204
  });
@@ -130983,6 +131215,7 @@ var init_fullSubjectToSpendLimit = __esm(() => {
130983
131215
  });
130984
131216
  // ../../shared/utils/fullSubjectUtils/mergeCustomerBillingControlsForCheck.ts
130985
131217
  var init_mergeCustomerBillingControlsForCheck = __esm(() => {
131218
+ init_usageLimit();
130986
131219
  init_getCurrentUsageWindowUsage();
130987
131220
  init_fullSubjectToUsageWindowLimits();
130988
131221
  init_planBillingControlUtils();
@@ -21,6 +21,7 @@ type SpendLimit = {
21
21
  enabled?: boolean;
22
22
  limit_type?: "absolute" | "usage_percentage";
23
23
  overage_limit?: number;
24
+ skip_overage_billing?: boolean;
24
25
  };
25
26
  type UsageLimit = {
26
27
  feature_id: string;
@@ -1 +1 @@
1
- {"version":"7.0.0-dev.20260511.1","root":["../src/cli.tsx","../src/constants.ts","../src/commands/auth/command.ts","../src/commands/auth/constants.ts","../src/commands/auth/oauth.ts","../src/commands/config/command.ts","../src/commands/customers/command.tsx","../src/commands/customers/headless.ts","../src/commands/customers/index.ts","../src/commands/events/command.tsx","../src/commands/events/headless.ts","../src/commands/events/index.ts","../src/commands/events-aggregate-test/command.ts","../src/commands/events-aggregate-test/index.ts","../src/commands/features/command.tsx","../src/commands/features/headless.ts","../src/commands/features/index.ts","../src/commands/nuke/backup.ts","../src/commands/nuke/deletions.ts","../src/commands/nuke/legacyNuke.ts","../src/commands/nuke/types.ts","../src/commands/nuke/validation.ts","../src/commands/preview/index.ts","../src/commands/preview/loadConfig.ts","../src/commands/preview/previewPlan.ts","../src/commands/products/command.tsx","../src/commands/products/headless.ts","../src/commands/products/index.ts","../src/commands/pull/index.ts","../src/commands/pull/mergeEnvironments.ts","../src/commands/pull/pull.ts","../src/commands/pull/pullFromEnvironment.ts","../src/commands/pull/sdkTypes.ts","../src/commands/pull/types.ts","../src/commands/pull/writeConfig.ts","../src/commands/push/headless.ts","../src/commands/push/index.ts","../src/commands/push/prompts.ts","../src/commands/push/push.ts","../src/commands/push/types.ts","../src/commands/push/validate.ts","../src/commands/push/variantPropagation.ts","../src/commands/test-diff/command.ts","../src/commands/test-diff/index.ts","../src/commands/test-template/command.tsx","../src/compose/index.ts","../src/compose/builders/builderFunctions.ts","../src/compose/builders/variantFunctions.ts","../src/compose/models/featureModels.ts","../src/compose/models/index.ts","../src/compose/models/planModels.ts","../src/compose/models/variantModels.ts","../src/lib/utils.ts","../src/lib/version.ts","../src/lib/writeEmptyConfig.ts","../src/lib/animation/explosion.ts","../src/lib/api/client.ts","../src/lib/api/endpoints/catalog.ts","../src/lib/api/endpoints/customers.ts","../src/lib/api/endpoints/events.ts","../src/lib/api/endpoints/features.ts","../src/lib/api/endpoints/index.ts","../src/lib/api/endpoints/organization.ts","../src/lib/api/endpoints/plans.ts","../src/lib/api/types/feature.ts","../src/lib/api/types/index.ts","../src/lib/api/types/organization.ts","../src/lib/api/types/plan.ts","../src/lib/api/types/planItem.ts","../src/lib/auth/headlessAuthRecovery.ts","../src/lib/constants/templates.ts","../src/lib/constants/templates/index.ts","../src/lib/constants/templates/linear.config.ts","../src/lib/constants/templates/openai.config.ts","../src/lib/constants/templates/railway.config.ts","../src/lib/constants/templates/t3chat.config.ts","../src/lib/env/cliContext.ts","../src/lib/env/detect.ts","../src/lib/env/dotenv.ts","../src/lib/env/index.ts","../src/lib/env/keys.ts","../src/lib/headless/CustomersController.ts","../src/lib/headless/FeaturesController.ts","../src/lib/headless/PlansController.ts","../src/lib/headless/index.ts","../src/lib/headless/types.ts","../src/lib/hooks/index.ts","../src/lib/hooks/useAgentSetup.ts","../src/lib/hooks/useAuthRecovery.ts","../src/lib/hooks/useClipboard.ts","../src/lib/hooks/useConfigCounts.ts","../src/lib/hooks/useCreateGuides.ts","../src/lib/hooks/useCreateSkills.ts","../src/lib/hooks/useCustomerExpanded.ts","../src/lib/hooks/useCustomerNavigation.ts","../src/lib/hooks/useCustomers.ts","../src/lib/hooks/useEnvironmentStore.ts","../src/lib/hooks/useEvents.ts","../src/lib/hooks/useEventsAggregate.ts","../src/lib/hooks/useEventsAggregateApi.ts","../src/lib/hooks/useEventsFilter.ts","../src/lib/hooks/useFeatures.ts","../src/lib/hooks/useHasCustomers.ts","../src/lib/hooks/useHeadlessAuth.ts","../src/lib/hooks/useListNavigation.ts","../src/lib/hooks/useLogin.ts","../src/lib/hooks/useNuke.ts","../src/lib/hooks/useNukeData.ts","../src/lib/hooks/useOrganization.ts","../src/lib/hooks/usePlans.ts","../src/lib/hooks/usePull.ts","../src/lib/hooks/usePush.ts","../src/lib/hooks/useTerminalSize.ts","../src/lib/hooks/useVisibleRowCount.ts","../src/lib/hooks/useWriteTemplateConfig.ts","../src/lib/transforms/index.ts","../src/lib/transforms/apiToSdk/Transformer.test.ts","../src/lib/transforms/apiToSdk/Transformer.ts","../src/lib/transforms/apiToSdk/feature.ts","../src/lib/transforms/apiToSdk/helpers.ts","../src/lib/transforms/apiToSdk/index.ts","../src/lib/transforms/apiToSdk/plan.ts","../src/lib/transforms/apiToSdk/planItem.ts","../src/lib/transforms/inPlaceUpdate/index.ts","../src/lib/transforms/inPlaceUpdate/parseConfig.ts","../src/lib/transforms/inPlaceUpdate/updateConfig.ts","../src/lib/transforms/sdkToApi/feature.ts","../src/lib/transforms/sdkToApi/index.ts","../src/lib/transforms/sdkToApi/plan.ts","../src/lib/transforms/sdkToCode/configFile.ts","../src/lib/transforms/sdkToCode/feature.ts","../src/lib/transforms/sdkToCode/helpers.test.ts","../src/lib/transforms/sdkToCode/helpers.ts","../src/lib/transforms/sdkToCode/imports.ts","../src/lib/transforms/sdkToCode/index.ts","../src/lib/transforms/sdkToCode/plan.ts","../src/lib/transforms/sdkToCode/planItem.ts","../src/lib/transforms/sdkToCode/variant.ts","../src/lib/utils/index.ts","../src/lib/utils/monorepo.ts","../src/prompts/skills/autumn-billing-page.ts","../src/prompts/skills/autumn-gating.ts","../src/prompts/skills/autumn-modelling-pricing-plans.ts","../src/prompts/skills/autumn-setup.ts","../src/prompts/skills/index.ts","../src/views/App.tsx","../src/views/html/oauth-callback.ts","../src/views/react/test-agent.tsx","../src/views/react/components/AuthRecoveryBoundary.tsx","../src/views/react/components/Card.tsx","../src/views/react/components/KeyValue.tsx","../src/views/react/components/LoadingText.tsx","../src/views/react/components/MultiSelect.tsx","../src/views/react/components/ProgressBar.tsx","../src/views/react/components/PromptCard.tsx","../src/views/react/components/SelectMenu.tsx","../src/views/react/components/StatusLine.tsx","../src/views/react/components/StatusRow.tsx","../src/views/react/components/StepHeader.tsx","../src/views/react/components/index.ts","../src/views/react/components/providers/CardWidthContext.tsx","../src/views/react/components/providers/QueryProvider.tsx","../src/views/react/components/providers/index.ts","../src/views/react/customers/CustomersView.tsx","../src/views/react/customers/types.ts","../src/views/react/customers/components/CustomerRow.tsx","../src/views/react/customers/components/CustomerSheet.tsx","../src/views/react/customers/components/CustomersTable.tsx","../src/views/react/customers/components/EmptyState.tsx","../src/views/react/customers/components/ErrorState.tsx","../src/views/react/customers/components/KeybindHints.tsx","../src/views/react/customers/components/LoadingState.tsx","../src/views/react/customers/components/SearchInput.tsx","../src/views/react/customers/components/TitleBar.tsx","../src/views/react/customers/components/index.ts","../src/views/react/customers/components/sections/BalancesSection.tsx","../src/views/react/customers/components/sections/EntitiesSection.tsx","../src/views/react/customers/components/sections/InvoicesSection.tsx","../src/views/react/customers/components/sections/ReferralsSection.tsx","../src/views/react/customers/components/sections/RewardsSection.tsx","../src/views/react/customers/components/sections/SubscriptionsSection.tsx","../src/views/react/customers/components/sections/index.ts","../src/views/react/events/EventsView.tsx","../src/views/react/events/index.ts","../src/views/react/events/components/EventSheet.tsx","../src/views/react/events/components/EventsAggregateView.tsx","../src/views/react/events/components/EventsFilterSheet.tsx","../src/views/react/events/components/index.ts","../src/views/react/features/FeaturesView.tsx","../src/views/react/features/index.ts","../src/views/react/features/components/FeatureSheet.tsx","../src/views/react/features/components/index.ts","../src/views/react/init/HeadlessInitFlow.tsx","../src/views/react/init/InitFlow.tsx","../src/views/react/init/steps/AgentStep.tsx","../src/views/react/init/steps/AuthStep.tsx","../src/views/react/init/steps/ConfigStep.tsx","../src/views/react/init/steps/HandoffStep.tsx","../src/views/react/init/steps/PathInputStep.tsx","../src/views/react/init/steps/StripeStep.tsx","../src/views/react/login/LoginView.tsx","../src/views/react/nuke/InlineNukeFlow.tsx","../src/views/react/nuke/NukeAnimation.tsx","../src/views/react/nuke/NukeView.tsx","../src/views/react/nuke/components/BackupPrompt.tsx","../src/views/react/nuke/components/ConfirmScreen.tsx","../src/views/react/nuke/components/DeletionProgress.tsx","../src/views/react/nuke/components/FinalSummary.tsx","../src/views/react/nuke/components/SuccessScreen.tsx","../src/views/react/nuke/components/WarningScreen.tsx","../src/views/react/preview/PlanPreviewCard.tsx","../src/views/react/preview/PreviewView.tsx","../src/views/react/preview/index.ts","../src/views/react/primitives/index.ts","../src/views/react/primitives/input/SearchInput.tsx","../src/views/react/primitives/input/index.ts","../src/views/react/primitives/layout/BottomBar.tsx","../src/views/react/primitives/layout/ListViewLayout.tsx","../src/views/react/primitives/layout/SplitPane.tsx","../src/views/react/primitives/layout/TitleBar.tsx","../src/views/react/primitives/layout/index.ts","../src/views/react/primitives/sheet/DetailSheet.tsx","../src/views/react/primitives/sheet/SheetSection.tsx","../src/views/react/primitives/sheet/index.ts","../src/views/react/primitives/states/EmptyState.tsx","../src/views/react/primitives/states/ErrorState.tsx","../src/views/react/primitives/states/LoadingState.tsx","../src/views/react/primitives/states/index.ts","../src/views/react/primitives/table/DataTable.tsx","../src/views/react/primitives/table/TableRow.tsx","../src/views/react/primitives/table/index.ts","../src/views/react/primitives/utils/formatDate.ts","../src/views/react/primitives/utils/index.ts","../src/views/react/primitives/utils/pagination.ts","../src/views/react/primitives/utils/truncate.ts","../src/views/react/products/ProductsView.tsx","../src/views/react/products/index.ts","../src/views/react/products/components/ProductSheet.tsx","../src/views/react/products/components/index.ts","../src/views/react/pull/Pull.tsx","../src/views/react/pull/components/FeatureRow.tsx","../src/views/react/pull/components/FileRow.tsx","../src/views/react/pull/components/PlanRow.tsx","../src/views/react/pull/components/index.ts","../src/views/react/push/Push.tsx","../src/views/react/push/index.ts","../src/views/react/push/components/CompletionMessage.tsx","../src/views/react/push/components/ErrorCard.tsx","../src/views/react/push/components/FeaturesCard.tsx","../src/views/react/push/components/NoChangesCard.tsx","../src/views/react/push/components/OrgCard.tsx","../src/views/react/push/components/OverviewCard.tsx","../src/views/react/push/components/PlansCard.tsx","../src/views/react/push/components/PushPromptCard.tsx","../src/views/react/push/components/index.ts","../src/views/react/template/TemplateSelector.tsx","../src/views/react/template2/Badge.tsx","../src/views/react/template2/PlanCard.tsx","../src/views/react/template2/TemplateRow.tsx","../src/views/react/template2/TemplateSelector2.tsx","../src/views/react/template2/data.ts","../src/views/react/template2/index.ts"]}
1
+ {"version":"7.0.0-dev.20260511.1","root":["../src/cli.tsx","../src/constants.ts","../src/commands/auth/command.ts","../src/commands/auth/constants.ts","../src/commands/auth/oauth.ts","../src/commands/config/command.ts","../src/commands/customers/command.tsx","../src/commands/customers/headless.ts","../src/commands/customers/index.ts","../src/commands/events/command.tsx","../src/commands/events/headless.ts","../src/commands/events/index.ts","../src/commands/events-aggregate-test/command.ts","../src/commands/events-aggregate-test/index.ts","../src/commands/features/command.tsx","../src/commands/features/headless.ts","../src/commands/features/index.ts","../src/commands/nuke/backup.ts","../src/commands/nuke/deletions.ts","../src/commands/nuke/legacynuke.ts","../src/commands/nuke/types.ts","../src/commands/nuke/validation.ts","../src/commands/preview/index.ts","../src/commands/preview/loadconfig.ts","../src/commands/preview/previewplan.ts","../src/commands/products/command.tsx","../src/commands/products/headless.ts","../src/commands/products/index.ts","../src/commands/pull/index.ts","../src/commands/pull/mergeenvironments.ts","../src/commands/pull/pull.ts","../src/commands/pull/pullfromenvironment.ts","../src/commands/pull/sdktypes.ts","../src/commands/pull/types.ts","../src/commands/pull/writeconfig.ts","../src/commands/push/headless.ts","../src/commands/push/index.ts","../src/commands/push/prompts.ts","../src/commands/push/push.ts","../src/commands/push/types.ts","../src/commands/push/validate.ts","../src/commands/push/variantpropagation.ts","../src/commands/test-diff/command.ts","../src/commands/test-diff/index.ts","../src/commands/test-template/command.tsx","../src/compose/index.ts","../src/compose/builders/builderfunctions.ts","../src/compose/builders/variantfunctions.ts","../src/compose/models/featuremodels.ts","../src/compose/models/index.ts","../src/compose/models/planmodels.ts","../src/compose/models/variantmodels.ts","../src/lib/utils.ts","../src/lib/version.ts","../src/lib/writeemptyconfig.ts","../src/lib/animation/explosion.ts","../src/lib/api/client.ts","../src/lib/api/endpoints/catalog.ts","../src/lib/api/endpoints/customers.ts","../src/lib/api/endpoints/events.ts","../src/lib/api/endpoints/features.ts","../src/lib/api/endpoints/index.ts","../src/lib/api/endpoints/organization.ts","../src/lib/api/endpoints/plans.ts","../src/lib/api/types/feature.ts","../src/lib/api/types/index.ts","../src/lib/api/types/organization.ts","../src/lib/api/types/plan.ts","../src/lib/api/types/planitem.ts","../src/lib/auth/headlessauthrecovery.ts","../src/lib/constants/templates.ts","../src/lib/constants/templates/index.ts","../src/lib/constants/templates/linear.config.ts","../src/lib/constants/templates/openai.config.ts","../src/lib/constants/templates/railway.config.ts","../src/lib/constants/templates/t3chat.config.ts","../src/lib/env/clicontext.ts","../src/lib/env/detect.ts","../src/lib/env/dotenv.ts","../src/lib/env/index.ts","../src/lib/env/keys.ts","../src/lib/headless/customerscontroller.ts","../src/lib/headless/featurescontroller.ts","../src/lib/headless/planscontroller.ts","../src/lib/headless/index.ts","../src/lib/headless/types.ts","../src/lib/hooks/index.ts","../src/lib/hooks/useagentsetup.ts","../src/lib/hooks/useauthrecovery.ts","../src/lib/hooks/useclipboard.ts","../src/lib/hooks/useconfigcounts.ts","../src/lib/hooks/usecreateguides.ts","../src/lib/hooks/usecreateskills.ts","../src/lib/hooks/usecustomerexpanded.ts","../src/lib/hooks/usecustomernavigation.ts","../src/lib/hooks/usecustomers.ts","../src/lib/hooks/useenvironmentstore.ts","../src/lib/hooks/useevents.ts","../src/lib/hooks/useeventsaggregate.ts","../src/lib/hooks/useeventsaggregateapi.ts","../src/lib/hooks/useeventsfilter.ts","../src/lib/hooks/usefeatures.ts","../src/lib/hooks/usehascustomers.ts","../src/lib/hooks/useheadlessauth.ts","../src/lib/hooks/uselistnavigation.ts","../src/lib/hooks/uselogin.ts","../src/lib/hooks/usenuke.ts","../src/lib/hooks/usenukedata.ts","../src/lib/hooks/useorganization.ts","../src/lib/hooks/useplans.ts","../src/lib/hooks/usepull.ts","../src/lib/hooks/usepush.ts","../src/lib/hooks/useterminalsize.ts","../src/lib/hooks/usevisiblerowcount.ts","../src/lib/hooks/usewritetemplateconfig.ts","../src/lib/transforms/index.ts","../src/lib/transforms/apitosdk/transformer.test.ts","../src/lib/transforms/apitosdk/transformer.ts","../src/lib/transforms/apitosdk/feature.ts","../src/lib/transforms/apitosdk/helpers.ts","../src/lib/transforms/apitosdk/index.ts","../src/lib/transforms/apitosdk/plan.ts","../src/lib/transforms/apitosdk/planitem.ts","../src/lib/transforms/inplaceupdate/index.ts","../src/lib/transforms/inplaceupdate/parseconfig.ts","../src/lib/transforms/inplaceupdate/updateconfig.ts","../src/lib/transforms/sdktoapi/feature.ts","../src/lib/transforms/sdktoapi/index.ts","../src/lib/transforms/sdktoapi/plan.ts","../src/lib/transforms/sdktocode/configfile.ts","../src/lib/transforms/sdktocode/feature.ts","../src/lib/transforms/sdktocode/helpers.test.ts","../src/lib/transforms/sdktocode/helpers.ts","../src/lib/transforms/sdktocode/imports.ts","../src/lib/transforms/sdktocode/index.ts","../src/lib/transforms/sdktocode/plan.ts","../src/lib/transforms/sdktocode/planitem.ts","../src/lib/transforms/sdktocode/variant.ts","../src/lib/utils/index.ts","../src/lib/utils/monorepo.ts","../src/prompts/skills/autumn-billing-page.ts","../src/prompts/skills/autumn-gating.ts","../src/prompts/skills/autumn-modelling-pricing-plans.ts","../src/prompts/skills/autumn-setup.ts","../src/prompts/skills/index.ts","../src/views/app.tsx","../src/views/html/oauth-callback.ts","../src/views/react/test-agent.tsx","../src/views/react/components/authrecoveryboundary.tsx","../src/views/react/components/card.tsx","../src/views/react/components/keyvalue.tsx","../src/views/react/components/loadingtext.tsx","../src/views/react/components/multiselect.tsx","../src/views/react/components/progressbar.tsx","../src/views/react/components/promptcard.tsx","../src/views/react/components/selectmenu.tsx","../src/views/react/components/statusline.tsx","../src/views/react/components/statusrow.tsx","../src/views/react/components/stepheader.tsx","../src/views/react/components/index.ts","../src/views/react/components/providers/cardwidthcontext.tsx","../src/views/react/components/providers/queryprovider.tsx","../src/views/react/components/providers/index.ts","../src/views/react/customers/customersview.tsx","../src/views/react/customers/types.ts","../src/views/react/customers/components/customerrow.tsx","../src/views/react/customers/components/customersheet.tsx","../src/views/react/customers/components/customerstable.tsx","../src/views/react/customers/components/emptystate.tsx","../src/views/react/customers/components/errorstate.tsx","../src/views/react/customers/components/keybindhints.tsx","../src/views/react/customers/components/loadingstate.tsx","../src/views/react/customers/components/searchinput.tsx","../src/views/react/customers/components/titlebar.tsx","../src/views/react/customers/components/index.ts","../src/views/react/customers/components/sections/balancessection.tsx","../src/views/react/customers/components/sections/entitiessection.tsx","../src/views/react/customers/components/sections/invoicessection.tsx","../src/views/react/customers/components/sections/referralssection.tsx","../src/views/react/customers/components/sections/rewardssection.tsx","../src/views/react/customers/components/sections/subscriptionssection.tsx","../src/views/react/customers/components/sections/index.ts","../src/views/react/events/eventsview.tsx","../src/views/react/events/index.ts","../src/views/react/events/components/eventsheet.tsx","../src/views/react/events/components/eventsaggregateview.tsx","../src/views/react/events/components/eventsfiltersheet.tsx","../src/views/react/events/components/index.ts","../src/views/react/features/featuresview.tsx","../src/views/react/features/index.ts","../src/views/react/features/components/featuresheet.tsx","../src/views/react/features/components/index.ts","../src/views/react/init/headlessinitflow.tsx","../src/views/react/init/initflow.tsx","../src/views/react/init/steps/agentstep.tsx","../src/views/react/init/steps/authstep.tsx","../src/views/react/init/steps/configstep.tsx","../src/views/react/init/steps/handoffstep.tsx","../src/views/react/init/steps/pathinputstep.tsx","../src/views/react/init/steps/stripestep.tsx","../src/views/react/login/loginview.tsx","../src/views/react/nuke/inlinenukeflow.tsx","../src/views/react/nuke/nukeanimation.tsx","../src/views/react/nuke/nukeview.tsx","../src/views/react/nuke/components/backupprompt.tsx","../src/views/react/nuke/components/confirmscreen.tsx","../src/views/react/nuke/components/deletionprogress.tsx","../src/views/react/nuke/components/finalsummary.tsx","../src/views/react/nuke/components/successscreen.tsx","../src/views/react/nuke/components/warningscreen.tsx","../src/views/react/preview/planpreviewcard.tsx","../src/views/react/preview/previewview.tsx","../src/views/react/preview/index.ts","../src/views/react/primitives/index.ts","../src/views/react/primitives/input/searchinput.tsx","../src/views/react/primitives/input/index.ts","../src/views/react/primitives/layout/bottombar.tsx","../src/views/react/primitives/layout/listviewlayout.tsx","../src/views/react/primitives/layout/splitpane.tsx","../src/views/react/primitives/layout/titlebar.tsx","../src/views/react/primitives/layout/index.ts","../src/views/react/primitives/sheet/detailsheet.tsx","../src/views/react/primitives/sheet/sheetsection.tsx","../src/views/react/primitives/sheet/index.ts","../src/views/react/primitives/states/emptystate.tsx","../src/views/react/primitives/states/errorstate.tsx","../src/views/react/primitives/states/loadingstate.tsx","../src/views/react/primitives/states/index.ts","../src/views/react/primitives/table/datatable.tsx","../src/views/react/primitives/table/tablerow.tsx","../src/views/react/primitives/table/index.ts","../src/views/react/primitives/utils/formatdate.ts","../src/views/react/primitives/utils/index.ts","../src/views/react/primitives/utils/pagination.ts","../src/views/react/primitives/utils/truncate.ts","../src/views/react/products/productsview.tsx","../src/views/react/products/index.ts","../src/views/react/products/components/productsheet.tsx","../src/views/react/products/components/index.ts","../src/views/react/pull/pull.tsx","../src/views/react/pull/components/featurerow.tsx","../src/views/react/pull/components/filerow.tsx","../src/views/react/pull/components/planrow.tsx","../src/views/react/pull/components/index.ts","../src/views/react/push/push.tsx","../src/views/react/push/index.ts","../src/views/react/push/components/completionmessage.tsx","../src/views/react/push/components/errorcard.tsx","../src/views/react/push/components/featurescard.tsx","../src/views/react/push/components/nochangescard.tsx","../src/views/react/push/components/orgcard.tsx","../src/views/react/push/components/overviewcard.tsx","../src/views/react/push/components/planscard.tsx","../src/views/react/push/components/pushpromptcard.tsx","../src/views/react/push/components/index.ts","../src/views/react/template/templateselector.tsx","../src/views/react/template2/badge.tsx","../src/views/react/template2/plancard.tsx","../src/views/react/template2/templaterow.tsx","../src/views/react/template2/templateselector2.tsx","../src/views/react/template2/data.ts","../src/views/react/template2/index.ts"]}
package/package.json CHANGED
@@ -1,99 +1,120 @@
1
1
  {
2
- "name": "atmn",
3
- "version": "1.1.13",
4
- "license": "MIT",
5
- "bin": {
6
- "atmn": "dist/cli.js"
7
- },
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/useautumn/autumn.git",
11
- "directory": "packages/atmn"
12
- },
13
- "homepage": "https://docs.useautumn.com/api-reference/cli/getting-started",
14
- "main": "dist/compose/index.js",
15
- "types": "dist/src/compose/index.d.ts",
16
- "exports": {
17
- ".": {
18
- "types": "./dist/src/compose/index.d.ts",
19
- "import": "./dist/compose/index.js",
20
- "default": "./dist/compose/index.js"
21
- },
22
- "./skills": {
23
- "types": "./src/prompts/skills/index.ts",
24
- "import": "./src/prompts/skills/index.ts",
25
- "default": "./src/prompts/skills/index.ts"
26
- }
27
- },
28
- "type": "module",
29
- "engines": {
30
- "node": ">=16"
31
- },
32
- "scripts": {
33
- "ts": "bunx tsgo --build --noEmit",
34
- "build": "bun run bun.config.ts",
35
- "dev": "nodemon -e ts,tsx --watch src --ignore dist --exec \"bun run bun.config.ts\"",
36
- "dev:bun": "bun run dev.ts",
37
- "test": "bun test test/*.test.ts test/codegen test/nuke test/pull test/push test/workflow",
38
- "test:integration": "cd ../../server && ENV_FILE=.env infisical run --env=dev --recursive -- bun test --timeout 0 ../packages/atmn/test/integration",
39
- "test:integration:cli": "cd ../../server && ENV_FILE=.env infisical run --env=dev --recursive -- bun ../packages/atmn/test/integration/cli.ts",
40
- "test:unit": "bun test test/codegen",
41
- "test:watch": "bun test --watch",
42
- "test2": "prettier --check . && xo && ava",
43
- "test-cli": "node --trace-deprecation -- ./dist/cli.js"
44
- },
45
- "files": [
46
- "dist",
47
- "package.json",
48
- "README.md"
49
- ],
50
- "dependencies": {
51
- "@inquirer/prompts": "^7.6.0",
52
- "@mishieck/ink-titled-box": "^0.3.0",
53
- "@tanstack/react-query": "^5.90.17",
54
- "@types/prettier": "^3.0.0",
55
- "arctic": "^3.7.0",
56
- "axios": "^1.10.0",
57
- "cfonts": "^3.3.1",
58
- "chalk": "^5.2.0",
59
- "clipboardy": "^5.0.2",
60
- "commander": "^14.0.0",
61
- "dotenv": "^17.2.0",
62
- "ervy": "^1.0.7",
63
- "ink": "^6.6.0",
64
- "ink-big-text": "^2.0.0",
65
- "ink-chart": "^0.1.1",
66
- "ink-confirm-input": "^2.0.0",
67
- "ink-scroll-list": "^0.4.1",
68
- "ink-scroll-view": "^0.3.5",
69
- "ink-select-input": "^6.2.0",
70
- "ink-spinner": "^5.0.0",
71
- "ink-table": "^3.1.0",
72
- "ink-text-input": "^6.0.0",
73
- "inquirer": "^12.7.0",
74
- "jiti": "^2.4.2",
75
- "open": "^10.1.2",
76
- "prettier": "^3.6.2",
77
- "react": "^19.2.3",
78
- "yocto-spinner": "^1.0.0",
79
- "zod": "^4.0.0",
80
- "conf": "^13.0.1"
81
- },
82
- "ava": {
83
- "extensions": {
84
- "ts": "module",
85
- "tsx": "module"
86
- },
87
- "nodeArguments": [
88
- "--loader=ts-node/esm"
89
- ]
90
- },
91
- "xo": {
92
- "extends": "xo-react",
93
- "prettier": true,
94
- "rules": {
95
- "react/prop-types": "off"
96
- }
97
- },
98
- "prettier": "@vdemedes/prettier-config"
2
+ "name": "atmn",
3
+ "version": "1.1.14",
4
+ "license": "MIT",
5
+ "bin": {
6
+ "atmn": "dist/cli.js"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/useautumn/autumn.git",
11
+ "directory": "packages/atmn"
12
+ },
13
+ "homepage": "https://docs.useautumn.com/api-reference/cli/getting-started",
14
+ "main": "dist/compose/index.js",
15
+ "types": "dist/src/compose/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/src/compose/index.d.ts",
19
+ "import": "./dist/compose/index.js",
20
+ "default": "./dist/compose/index.js"
21
+ },
22
+ "./skills": {
23
+ "types": "./src/prompts/skills/index.ts",
24
+ "import": "./src/prompts/skills/index.ts",
25
+ "default": "./src/prompts/skills/index.ts"
26
+ }
27
+ },
28
+ "type": "module",
29
+ "engines": {
30
+ "node": ">=16"
31
+ },
32
+ "scripts": {
33
+ "ts": "bunx tsgo --build --noEmit",
34
+ "build": "bun run bun.config.ts",
35
+ "dev": "nodemon -e ts,tsx --watch src --ignore dist --exec \"bun run bun.config.ts\"",
36
+ "dev:bun": "bun run dev.ts",
37
+ "test": "bun test test/*.test.ts test/codegen test/nuke test/pull test/push test/workflow",
38
+ "test:integration": "cd ../../server && ENV_FILE=.env infisical run --env=dev --recursive -- bun test --timeout 0 ../packages/atmn/test/integration",
39
+ "test:integration:cli": "cd ../../server && ENV_FILE=.env infisical run --env=dev --recursive -- bun ../packages/atmn/test/integration/cli.ts",
40
+ "test:unit": "bun test test/codegen",
41
+ "test:watch": "bun test --watch",
42
+ "test2": "prettier --check . && xo && ava",
43
+ "test-cli": "node --trace-deprecation -- ./dist/cli.js"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "package.json",
48
+ "README.md"
49
+ ],
50
+ "dependencies": {
51
+ "@inquirer/prompts": "^7.6.0",
52
+ "@mishieck/ink-titled-box": "^0.3.0",
53
+ "@tanstack/react-query": "^5.90.17",
54
+ "@types/prettier": "^3.0.0",
55
+ "arctic": "^3.7.0",
56
+ "axios": "^1.10.0",
57
+ "cfonts": "^3.3.1",
58
+ "chalk": "^5.2.0",
59
+ "clipboardy": "^5.0.2",
60
+ "commander": "^14.0.0",
61
+ "dotenv": "^17.2.0",
62
+ "ervy": "^1.0.7",
63
+ "ink": "^6.6.0",
64
+ "ink-big-text": "^2.0.0",
65
+ "ink-chart": "^0.1.1",
66
+ "ink-confirm-input": "^2.0.0",
67
+ "ink-scroll-list": "^0.4.1",
68
+ "ink-scroll-view": "^0.3.5",
69
+ "ink-select-input": "^6.2.0",
70
+ "ink-spinner": "^5.0.0",
71
+ "ink-table": "^3.1.0",
72
+ "ink-text-input": "^6.0.0",
73
+ "inquirer": "^12.7.0",
74
+ "jiti": "^2.4.2",
75
+ "open": "^10.1.2",
76
+ "prettier": "^3.6.2",
77
+ "react": "^19.2.3",
78
+ "yocto-spinner": "^1.0.0",
79
+ "zod": "^4.0.0",
80
+ "conf": "^13.0.1"
81
+ },
82
+ "devDependencies": {
83
+ "@autumn/shared": "1.0.0",
84
+ "@sindresorhus/tsconfig": "^3.0.1",
85
+ "@types/bun": "^1.3.10",
86
+ "@types/node": "^24.0.10",
87
+ "@types/react": "^19.0.0",
88
+ "@typescript/native-preview": "7.0.0-dev.20260511.1",
89
+ "@vdemedes/prettier-config": "^2.0.1",
90
+ "ava": "^5.2.0",
91
+ "cli-testing-library": "^3.0.1",
92
+ "eslint-config-xo-react": "^0.27.0",
93
+ "eslint-plugin-react": "^7.32.2",
94
+ "eslint-plugin-react-hooks": "^4.6.0",
95
+ "ink-testing-library": "^3.0.0",
96
+ "nodemon": "^3.1.11",
97
+ "react-devtools-core": "^6.1.2",
98
+ "ts-node": "^10.9.1",
99
+ "tsup": "^8.5.0",
100
+ "typescript": "^5.0.3",
101
+ "xo": "^0.53.1"
102
+ },
103
+ "ava": {
104
+ "extensions": {
105
+ "ts": "module",
106
+ "tsx": "module"
107
+ },
108
+ "nodeArguments": [
109
+ "--loader=ts-node/esm"
110
+ ]
111
+ },
112
+ "xo": {
113
+ "extends": "xo-react",
114
+ "prettier": true,
115
+ "rules": {
116
+ "react/prop-types": "off"
117
+ }
118
+ },
119
+ "prettier": "@vdemedes/prettier-config"
99
120
  }