merged from dev
3
.gitignore
vendored
@@ -16,6 +16,7 @@ supabase.sh
|
||||
**/dist/
|
||||
**/.next/
|
||||
**/.vercel/
|
||||
**/.turbo/
|
||||
**/.DS_Store
|
||||
**/.env*
|
||||
tests/
|
||||
@@ -141,4 +142,4 @@ TAKEHOME.md
|
||||
.agents/
|
||||
.mcp.json
|
||||
.opencode/skills/
|
||||
AGENTS.md
|
||||
AGENTS.md
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
set -e
|
||||
|
||||
bun knip
|
||||
(cd server && bun ts)
|
||||
|
||||
changed_files="$(git diff --cached --name-only)"
|
||||
|
||||
bun knip
|
||||
|
||||
if printf '%s\n' "$changed_files" | grep -q '^server/'; then
|
||||
(cd server && bun test tests/unit)
|
||||
bunx turbo run ts --filter=@autumn/server
|
||||
fi
|
||||
|
||||
if printf '%s\n' "$changed_files" | grep -q '^vite/'; then
|
||||
(cd vite && bun test tests/)
|
||||
bunx turbo run ts --filter=@autumn/vite
|
||||
fi
|
||||
|
||||
26
.husky/pre-push
Normal file
@@ -0,0 +1,26 @@
|
||||
set -e
|
||||
|
||||
zero_sha="0000000000000000000000000000000000000000"
|
||||
changed_files="$(
|
||||
while read local_ref local_sha remote_ref remote_sha; do
|
||||
if [ "$local_sha" = "$zero_sha" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$remote_sha" = "$zero_sha" ]; then
|
||||
base="$(git merge-base "$local_sha" origin/dev)"
|
||||
else
|
||||
base="$remote_sha"
|
||||
fi
|
||||
|
||||
git diff --name-only "$base" "$local_sha"
|
||||
done | sort -u
|
||||
)"
|
||||
|
||||
if printf '%s\n' "$changed_files" | grep -q '^server/'; then
|
||||
bunx turbo run test:unit --filter=@autumn/server
|
||||
fi
|
||||
|
||||
if printf '%s\n' "$changed_files" | grep -q '^vite/'; then
|
||||
bunx turbo run test:unit --filter=@autumn/vite
|
||||
fi
|
||||
@@ -8,7 +8,7 @@ import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
|
||||
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
|
||||
|
||||
<Note>
|
||||
The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use [attach](/api-reference/billing/attach) instead.
|
||||
The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use [attach](/api-reference/billing/billingAttach) instead.
|
||||
</Note>
|
||||
|
||||
### Common Use Cases
|
||||
|
||||
@@ -769,6 +769,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -1084,6 +1094,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -942,6 +942,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -1257,6 +1267,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -718,6 +718,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -1033,6 +1043,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -576,6 +576,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -909,6 +919,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -447,6 +447,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -780,6 +790,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -564,6 +564,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -897,6 +907,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -529,6 +529,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -861,6 +871,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -301,6 +301,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -633,6 +643,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -365,6 +365,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -697,6 +707,16 @@ import { DynamicResponseExample } from "/components/dynamic-response-example.jsx
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
|
||||
@@ -7,7 +7,7 @@ import { DynamicParamField } from "/components/dynamic-param-field.jsx";
|
||||
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
|
||||
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
|
||||
|
||||
Creates a new plan with optional base price and feature configurations. See [How plans work](/documentation/concepts/plans) for concepts and [Adding features to plans](/documentation/concepts/plan-items) for item configuration.
|
||||
Creates a new plan with optional base price and feature configurations. See [How plans work](/documentation/pricing/plans) for concepts and [Adding features to plans](/documentation/pricing/plan-features) for item configuration.
|
||||
|
||||
### Plan Configuration
|
||||
|
||||
@@ -312,6 +312,16 @@ await autumn.plans.create({
|
||||
</Expandable>
|
||||
</DynamicParamField>
|
||||
|
||||
<DynamicParamField body="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicParamField body="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicParamField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicParamField>
|
||||
|
||||
|
||||
### Response
|
||||
|
||||
@@ -563,6 +573,16 @@ await autumn.plans.create({
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -647,7 +667,10 @@ await autumn.plans.create({
|
||||
"createdAt": 1771513979217,
|
||||
"env": "sandbox",
|
||||
"archived": false,
|
||||
"baseVariantId": null
|
||||
"baseVariantId": null,
|
||||
"config": {
|
||||
"ignore_past_due": false
|
||||
}
|
||||
}
|
||||
```
|
||||
</ResponseExample>
|
||||
|
||||
@@ -289,6 +289,16 @@ const plan = await autumn.plans.get({
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -373,7 +383,10 @@ const plan = await autumn.plans.get({
|
||||
"createdAt": 1771513979217,
|
||||
"env": "sandbox",
|
||||
"archived": false,
|
||||
"baseVariantId": null
|
||||
"baseVariantId": null,
|
||||
"config": {
|
||||
"ignore_past_due": false
|
||||
}
|
||||
}
|
||||
```
|
||||
</ResponseExample>
|
||||
|
||||
@@ -306,6 +306,16 @@ const plans = await autumn.plans.list({
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -395,7 +405,10 @@ const plans = await autumn.plans.list({
|
||||
"createdAt": 1771513979217,
|
||||
"env": "sandbox",
|
||||
"archived": false,
|
||||
"baseVariantId": null
|
||||
"baseVariantId": null,
|
||||
"config": {
|
||||
"ignore_past_due": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import { DynamicParamField } from "/components/dynamic-param-field.jsx";
|
||||
import { DynamicResponseField } from "/components/dynamic-response-field.jsx";
|
||||
import { DynamicResponseExample } from "/components/dynamic-response-example.jsx";
|
||||
|
||||
Updates an existing plan. By default, creates a new version of the plan. See [Adding features to plans](/documentation/concepts/plan-items) for item configuration.
|
||||
Updates an existing plan. By default, creates a new version of the plan. See [Adding features to plans](/documentation/pricing/plan-features) for item configuration.
|
||||
|
||||
<Note>
|
||||
Updates create a new plan version by default. Existing customers remain on their current version until their subscription renews or they explicitly upgrade.
|
||||
@@ -239,6 +239,16 @@ await autumn.plans.update({
|
||||
</Expandable>
|
||||
</DynamicParamField>
|
||||
|
||||
<DynamicParamField body="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicParamField body="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicParamField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicParamField>
|
||||
|
||||
<DynamicParamField body="version" type="number" />
|
||||
|
||||
<DynamicParamField body="archived" type="boolean" />
|
||||
@@ -498,6 +508,16 @@ await autumn.plans.update({
|
||||
If this is a variant, the ID of the base plan it was created from.
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="config" type="object">
|
||||
Miscellaneous plan-level configuration flags.
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="ignore_past_due" type="boolean">
|
||||
If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
</DynamicResponseField>
|
||||
|
||||
</Expandable>
|
||||
</DynamicResponseField>
|
||||
|
||||
<DynamicResponseField name="customer_eligibility" type="object">
|
||||
<Expandable title="properties">
|
||||
<DynamicResponseField name="trial_available" type="boolean">
|
||||
@@ -582,7 +602,10 @@ await autumn.plans.update({
|
||||
"createdAt": 1771513979217,
|
||||
"env": "sandbox",
|
||||
"archived": false,
|
||||
"baseVariantId": null
|
||||
"baseVariantId": null,
|
||||
"config": {
|
||||
"ignore_past_due": false
|
||||
}
|
||||
}
|
||||
```
|
||||
</ResponseExample>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"atmn": "bunx atmn",
|
||||
"dev": "infisical run --env=dev -- next dev -p 3002",
|
||||
"dev": "infisical run --recursive --env=dev -- next dev -p 3002",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "biome check",
|
||||
|
||||
@@ -332,3 +332,10 @@ body {
|
||||
color: #b08aff;
|
||||
text-decoration-color: #b08aff;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
HERO REVEAL — desktop only (lg+), driven by GSAP
|
||||
On mobile, GSAP is skipped and hero elements are immediately visible.
|
||||
The lg:opacity-0 utility class on .hero-reveal / .hero-cta elements
|
||||
ensures they start hidden on desktop where GSAP animates them in.
|
||||
========================================================================== */
|
||||
|
||||
@@ -7,11 +7,13 @@ import "./globals.css";
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
display: "swap",
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
display: "swap",
|
||||
});
|
||||
|
||||
const url = "https://useautumn.com";
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
{
|
||||
"lockfileVersion": 1,
|
||||
"configVersion": 0,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"name": "@autumn/website",
|
||||
"dependencies": {
|
||||
"@gsap/react": "^2.1.2",
|
||||
"@mdx-js/loader": "^3.1.1",
|
||||
"@mdx-js/mdx": "^3.1.1",
|
||||
"@mdx-js/react": "^3.1.1",
|
||||
"@next/mdx": "^16.2.4",
|
||||
"@types/react": "^19.2.14",
|
||||
"@vercel/analytics": "^2.0.1",
|
||||
"framer-motion": "^12.38.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"gsap": "^3.15.0",
|
||||
"lottie-react": "^2.4.1",
|
||||
"lottie-web": "^5.13.0",
|
||||
"matter-js": "^0.20.0",
|
||||
"motion": "^12.38.0",
|
||||
"next": "16.2.4",
|
||||
"next-mdx-remote": "^6.0.0",
|
||||
"ngrok": "^5.0.0-beta.2",
|
||||
"react": "19.2.4",
|
||||
"react-dom": "19.2.4",
|
||||
"react-syntax-highlighter": "^16.1.1",
|
||||
"remark-frontmatter": "^5.0.0",
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/postcss": "^4.2.2",
|
||||
@@ -159,6 +161,8 @@
|
||||
|
||||
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
|
||||
|
||||
"@mdx-js/loader": ["@mdx-js/loader@3.1.1", "", { "dependencies": { "@mdx-js/mdx": "^3.0.0", "source-map": "^0.7.0" }, "peerDependencies": { "webpack": ">=5" }, "optionalPeers": ["webpack"] }, "sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ=="],
|
||||
|
||||
"@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="],
|
||||
|
||||
"@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="],
|
||||
@@ -169,6 +173,8 @@
|
||||
|
||||
"@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.2.1", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-r0epZGo24eT4g08jJlg2OEryBphXqO8aL18oajoTKLzHJ6jVr6P6FI58DLMug04MwD3j8Fj0YK0slyzneKVyzA=="],
|
||||
|
||||
"@next/mdx": ["@next/mdx@16.2.4", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-e/3bgla+/oF3vDlndI0eFPa0bnP47HPVA0InsAJi7Jr3DwV8WpEGuOcm/3PdI5/93FfNiBhMVeVHZpm1sFlmJw=="],
|
||||
|
||||
"@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A=="],
|
||||
|
||||
"@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ=="],
|
||||
@@ -805,10 +811,10 @@
|
||||
|
||||
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
||||
|
||||
"matter-js": ["matter-js@0.20.0", "", {}, "sha512-iC9fYR7zVT3HppNnsFsp9XOoQdQN2tUyfaKg4CHLH8bN+j6GT4Gw7IH2rP0tflAebrHFw730RR3DkVSZRX8hwA=="],
|
||||
|
||||
"mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="],
|
||||
|
||||
"mdast-util-frontmatter": ["mdast-util-frontmatter@2.0.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "escape-string-regexp": "^5.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0" } }, "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA=="],
|
||||
|
||||
"mdast-util-mdx": ["mdast-util-mdx@3.0.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w=="],
|
||||
|
||||
"mdast-util-mdx-expression": ["mdast-util-mdx-expression@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ=="],
|
||||
@@ -831,6 +837,8 @@
|
||||
|
||||
"micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-destination": "^2.0.0", "micromark-factory-label": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-factory-title": "^2.0.0", "micromark-factory-whitespace": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-resolve-all": "^2.0.0", "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="],
|
||||
|
||||
"micromark-extension-frontmatter": ["micromark-extension-frontmatter@2.0.0", "", { "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg=="],
|
||||
|
||||
"micromark-extension-mdx-expression": ["micromark-extension-mdx-expression@3.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q=="],
|
||||
|
||||
"micromark-extension-mdx-jsx": ["micromark-extension-mdx-jsx@3.0.2", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "micromark-factory-mdx-expression": "^2.0.0", "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", "micromark-util-events-to-acorn": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ=="],
|
||||
@@ -907,8 +915,6 @@
|
||||
|
||||
"next": ["next@16.2.4", "", { "dependencies": { "@next/env": "16.2.4", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.4", "@next/swc-darwin-x64": "16.2.4", "@next/swc-linux-arm64-gnu": "16.2.4", "@next/swc-linux-arm64-musl": "16.2.4", "@next/swc-linux-x64-gnu": "16.2.4", "@next/swc-linux-x64-musl": "16.2.4", "@next/swc-win32-arm64-msvc": "16.2.4", "@next/swc-win32-x64-msvc": "16.2.4", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": "dist/bin/next" }, "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q=="],
|
||||
|
||||
"next-mdx-remote": ["next-mdx-remote@6.0.0", "", { "dependencies": { "@babel/code-frame": "^7.23.5", "@mdx-js/mdx": "^3.0.1", "@mdx-js/react": "^3.0.1", "unist-util-remove": "^4.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.1", "vfile-matter": "^5.0.0" }, "peerDependencies": { "react": ">=16" } }, "sha512-cJEpEZlgD6xGjB4jL8BnI8FaYdN9BzZM4NwadPe1YQr7pqoWjg9EBCMv3nXBkuHqMRfv2y33SzUsuyNh9LFAQQ=="],
|
||||
|
||||
"ngrok": ["ngrok@5.0.0-beta.2", "", { "dependencies": { "extract-zip": "^2.0.1", "got": "^11.8.5", "lodash.clonedeep": "^4.5.0", "uuid": "^7.0.0 || ^8.0.0", "yaml": "^2.2.2" }, "optionalDependencies": { "hpagent": "^0.1.2" }, "bin": "bin/ngrok" }, "sha512-UzsyGiJ4yTTQLCQD11k1DQaMwq2/SsztBg2b34zAqcyjS25qjDpogMKPaCKHwe/APRTHeel3iDXcVctk5CNaCQ=="],
|
||||
|
||||
"node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="],
|
||||
@@ -1005,6 +1011,8 @@
|
||||
|
||||
"rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="],
|
||||
|
||||
"remark-frontmatter": ["remark-frontmatter@5.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", "micromark-extension-frontmatter": "^2.0.0", "unified": "^11.0.0" } }, "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ=="],
|
||||
|
||||
"remark-mdx": ["remark-mdx@3.1.1", "", { "dependencies": { "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0" } }, "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg=="],
|
||||
|
||||
"remark-parse": ["remark-parse@11.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", "micromark-util-types": "^2.0.0", "unified": "^11.0.0" } }, "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA=="],
|
||||
@@ -1137,8 +1145,6 @@
|
||||
|
||||
"unist-util-position-from-estree": ["unist-util-position-from-estree@2.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ=="],
|
||||
|
||||
"unist-util-remove": ["unist-util-remove@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg=="],
|
||||
|
||||
"unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
|
||||
|
||||
"unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="],
|
||||
@@ -1157,8 +1163,6 @@
|
||||
|
||||
"vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
|
||||
|
||||
"vfile-matter": ["vfile-matter@5.0.1", "", { "dependencies": { "vfile": "^6.0.0", "yaml": "^2.0.0" } }, "sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw=="],
|
||||
|
||||
"vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="],
|
||||
|
||||
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
||||
@@ -1217,6 +1221,10 @@
|
||||
|
||||
"is-bun-module/semver": ["semver@7.7.4", "", { "bin": "bin/semver.js" }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
||||
|
||||
"mdast-util-frontmatter/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
|
||||
|
||||
"micromark-extension-frontmatter/fault": ["fault@2.0.1", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ=="],
|
||||
|
||||
"micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="],
|
||||
|
||||
"next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="],
|
||||
|
||||
@@ -1,14 +1,22 @@
|
||||
"use client";
|
||||
import gsap from "gsap";
|
||||
import { forwardRef, useEffect, useImperativeHandle, useRef } from "react";
|
||||
import type { PixelHoverHandle, PixelIconComponent } from "@/lib/types";
|
||||
import { getGsap } from "@/lib/lazyGsap";
|
||||
|
||||
type GSAPTimeline = {
|
||||
play: () => GSAPTimeline;
|
||||
reverse: () => GSAPTimeline;
|
||||
kill: () => void;
|
||||
// biome-ignore lint/suspicious/noExplicitAny: structural shim for GSAP's overloaded .to() signature
|
||||
to: (...args: any[]) => GSAPTimeline;
|
||||
};
|
||||
|
||||
export const DashboardIconPixel = forwardRef<
|
||||
PixelHoverHandle,
|
||||
{ Icon: PixelIconComponent }
|
||||
>(function DashboardIconPixel({ Icon }, ref) {
|
||||
const iconRef = useRef<SVGSVGElement | null>(null);
|
||||
const tlRef = useRef<gsap.core.Timeline | null>(null);
|
||||
const tlRef = useRef<GSAPTimeline | null>(null);
|
||||
|
||||
useImperativeHandle(ref, () => ({
|
||||
restart: () => tlRef.current?.play(),
|
||||
@@ -16,47 +24,40 @@ export const DashboardIconPixel = forwardRef<
|
||||
}));
|
||||
|
||||
useEffect(() => {
|
||||
const pixelEls =
|
||||
iconRef.current?.querySelectorAll<SVGGraphicsElement>(".icon-pixel-path");
|
||||
if (!pixelEls?.length) return;
|
||||
const el = iconRef.current;
|
||||
if (!el) return;
|
||||
let cancelled = false;
|
||||
|
||||
// Sort pixels by visual position: bottom-left → top-right diagonal
|
||||
const pixels = Array.from(pixelEls).sort((a, b) => {
|
||||
const aBox = a.getBBox();
|
||||
const bBox = b.getBBox();
|
||||
return (
|
||||
aBox.x +
|
||||
aBox.width / 2 -
|
||||
(aBox.y + aBox.height / 2) -
|
||||
(bBox.x + bBox.width / 2 - (bBox.y + bBox.height / 2))
|
||||
);
|
||||
});
|
||||
getGsap().then((gsap) => {
|
||||
if (cancelled) return;
|
||||
const pixelEls = el.querySelectorAll<SVGGraphicsElement>(".icon-pixel-path");
|
||||
if (!pixelEls.length) return;
|
||||
|
||||
gsap.set(pixels, {
|
||||
opacity: 0.15,
|
||||
scale: 0.8,
|
||||
transformOrigin: "left bottom",
|
||||
fill: "currentColor",
|
||||
});
|
||||
|
||||
tlRef.current = gsap.timeline({ paused: true });
|
||||
|
||||
tlRef.current
|
||||
.to(pixels, {
|
||||
opacity: 1,
|
||||
scale: 1.15,
|
||||
fill: "#FFFFFF",
|
||||
duration: 0.2,
|
||||
stagger: 0.01,
|
||||
ease: "power2.out",
|
||||
})
|
||||
.to(pixels, {
|
||||
scale: 1,
|
||||
duration: 0.01,
|
||||
ease: "back.out(3)",
|
||||
// Sort pixels by visual position: bottom-left → top-right diagonal
|
||||
const pixels = Array.from(pixelEls).sort((a, b) => {
|
||||
const aBox = a.getBBox();
|
||||
const bBox = b.getBBox();
|
||||
return (
|
||||
aBox.x + aBox.width / 2 - (aBox.y + aBox.height / 2) -
|
||||
(bBox.x + bBox.width / 2 - (bBox.y + bBox.height / 2))
|
||||
);
|
||||
});
|
||||
|
||||
gsap.set(pixels, {
|
||||
opacity: 0.15,
|
||||
scale: 0.8,
|
||||
transformOrigin: "left bottom",
|
||||
fill: "currentColor",
|
||||
});
|
||||
|
||||
tlRef.current = gsap.timeline({ paused: true });
|
||||
tlRef.current!
|
||||
.to(pixels, { opacity: 1, scale: 1.15, fill: "#FFFFFF", duration: 0.2, stagger: 0.01, ease: "power2.out" })
|
||||
.to(pixels, { scale: 1, duration: 0.01, ease: "back.out(3)" });
|
||||
});
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
tlRef.current?.kill();
|
||||
};
|
||||
}, []);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"use client";
|
||||
import { motion, useMotionValue, useSpring, useTransform } from "framer-motion";
|
||||
import { motion, useMotionValue, useSpring, useTransform } from "motion/react";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import type { LayoutProps } from "@/lib/types";
|
||||
import AnimatedFooterImage from "./animated-footer-image";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"use client";
|
||||
import { AnimatePresence, motion } from "framer-motion";
|
||||
import { AnimatePresence, motion } from "motion/react";
|
||||
import { useState } from "react";
|
||||
import { AnimatedPlusMinus, faqData } from "@/app/constant";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
"use client";
|
||||
|
||||
import { useGSAP } from "@gsap/react";
|
||||
import gsap from "gsap";
|
||||
import { motion } from "motion/react";
|
||||
import dynamic from "next/dynamic";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { CTALines, IconCTADocs, IconCTAStart } from "@/app/constant";
|
||||
import { getGsap } from "@/lib/lazyGsap";
|
||||
|
||||
// `AutumnConfig` pulls in `react-syntax-highlighter` + `highlight.js` (~100KB
|
||||
// gzipped + meaningful parse cost on mobile). It only renders on `xl+`
|
||||
@@ -88,88 +87,51 @@ export default function Hero() {
|
||||
};
|
||||
}, []);
|
||||
|
||||
useGSAP(
|
||||
() => {
|
||||
gsap.set(".hero-root", { opacity: 0 });
|
||||
useEffect(() => {
|
||||
const container = containerRef.current;
|
||||
if (!container) return;
|
||||
|
||||
gsap.set(".hero-bg", {
|
||||
opacity: 0,
|
||||
filter: "blur(6px) brightness(1)",
|
||||
scale: 0.97,
|
||||
transformOrigin: "center top",
|
||||
});
|
||||
let ctx: { revert: () => void } | null = null;
|
||||
let cancelled = false;
|
||||
|
||||
gsap.set(".hero-reveal", {
|
||||
opacity: 0,
|
||||
y: 25,
|
||||
filter: "blur(12px)",
|
||||
scale: 0.96,
|
||||
transformOrigin: "center bottom",
|
||||
});
|
||||
// Mobile: CSS animations in globals.css handle the hero reveal.
|
||||
// Guard here so mobile never initiates the ~60KB GSAP dynamic import.
|
||||
if (window.innerWidth < 1024) return;
|
||||
|
||||
gsap.set(".hero-cta", { opacity: 0, scale: 0.95 });
|
||||
getGsap().then((gsap) => {
|
||||
if (cancelled) return;
|
||||
ctx = gsap.context(() => {
|
||||
gsap.set(".hero-reveal", {
|
||||
opacity: 0,
|
||||
y: 25,
|
||||
scale: 0.96,
|
||||
transformOrigin: "center bottom",
|
||||
});
|
||||
gsap.set(".hero-cta", { opacity: 0, scale: 0.95 });
|
||||
|
||||
const tl = gsap.timeline({
|
||||
defaults: { overwrite: "auto" },
|
||||
});
|
||||
const tl = gsap.timeline({ defaults: { overwrite: "auto" } });
|
||||
|
||||
tl.to(".hero-root", { opacity: 1, duration: 0.3, ease: "none" })
|
||||
// hero-bg is intentionally NOT hidden — it is the LCP element and
|
||||
// must be visible from first paint. The brightness flash still runs.
|
||||
tl.to(".hero-bg", { filter: "brightness(1.6)", duration: 0.125, ease: "power2.in" })
|
||||
.to(".hero-bg", { filter: "brightness(1)", duration: 0.125, ease: "power2.out" })
|
||||
.to(".hero-reveal", { opacity: 1, y: 0, scale: 1, duration: 1.1, stagger: 0.1, ease: "power3.out" }, "-=0.2")
|
||||
.to(".hero-cta", { opacity: 1, scale: 1, duration: 0.3, stagger: 0.06, ease: "back.out(1.5)" }, "-=0.1");
|
||||
}, container);
|
||||
});
|
||||
|
||||
.to(".hero-bg", {
|
||||
opacity: 1,
|
||||
filter: "blur(0px) brightness(1)",
|
||||
scale: 1,
|
||||
duration: 0.4,
|
||||
ease: "power2.out",
|
||||
})
|
||||
|
||||
.to(".hero-bg", {
|
||||
filter: "blur(0px) brightness(1.6)",
|
||||
duration: 0.125,
|
||||
ease: "power2.in",
|
||||
})
|
||||
|
||||
.to(".hero-bg", {
|
||||
filter: "blur(0px) brightness(1)",
|
||||
duration: 0.125,
|
||||
ease: "power2.out",
|
||||
})
|
||||
|
||||
.to(
|
||||
".hero-reveal",
|
||||
{
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
filter: "blur(0px)",
|
||||
scale: 1,
|
||||
duration: 1.1,
|
||||
stagger: 0.1,
|
||||
ease: "power3.out",
|
||||
},
|
||||
"-=0.2",
|
||||
)
|
||||
|
||||
.to(
|
||||
".hero-cta",
|
||||
{
|
||||
opacity: 1,
|
||||
scale: 1,
|
||||
duration: 0.3,
|
||||
stagger: 0.06,
|
||||
ease: "back.out(1.5)",
|
||||
},
|
||||
"-=0.1",
|
||||
);
|
||||
},
|
||||
{ scope: containerRef },
|
||||
);
|
||||
return () => {
|
||||
cancelled = true;
|
||||
ctx?.revert();
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div ref={containerRef}>
|
||||
<div className="relative hero-root opacity-0 flex flex-col items-stretch pb-0 md:pb-12 mb-0 bg-[#0F0F0F]">
|
||||
<div className="relative hero-root flex flex-col items-stretch pb-0 mb-0 bg-[#0F0F0F]">
|
||||
<div className="flex justify-between">
|
||||
<div className="flex flex-col gap-6 px-4 xl:px-22.75 py-8 bg-[#0F0F0F] mt-26">
|
||||
<h4 className="hero-reveal relative uppercase font-mono tracking-[-2%] text-[12px] md:text-sm leading-sm text-white md:text-[#FFFFFF99] bg-[#2c2c2d] w-fit p-2 min-h-[30px] md:min-h-[36px] flex items-center">
|
||||
<h4 className="hero-reveal lg:opacity-0 relative uppercase font-mono tracking-[-2%] text-[12px] md:text-sm leading-sm text-white md:text-[#FFFFFF99] bg-[#2c2c2d] w-fit p-2 min-h-[30px] md:min-h-[36px] flex items-center">
|
||||
<span className="invisible select-none" aria-hidden="true">
|
||||
{BADGE_TEXT}
|
||||
</span>
|
||||
@@ -178,13 +140,13 @@ export default function Hero() {
|
||||
</span>
|
||||
</h4>
|
||||
<div className="flex flex-col gap-6 w-full px-0 lg:px-0">
|
||||
<h1 className="hero-reveal text-[44px] md:text-[56px] w-full max-w-sm sm:max-w-[480px] md:max-w-xl leading-[44px] tracking-[-5%] md:leading-14 font-sans">
|
||||
<h1 className="hero-reveal lg:opacity-0 text-[44px] md:text-[56px] w-full max-w-sm sm:max-w-[480px] md:max-w-xl leading-[44px] tracking-[-5%] md:leading-14 font-sans">
|
||||
<span className="text-[#FFFFFF99] font-normal">
|
||||
Drop-in credits and billing for
|
||||
</span>{" "}
|
||||
<span className="text-white block md:inline">AI agents</span>
|
||||
</h1>
|
||||
<p className="hero-reveal tracking-[-2%] w-full max-w-xs sm:max-w-[480px] md:max-w-xl text-[#FFFFFF99] md:text-[16px] text-[14px] font-light leading-5 font-sans">
|
||||
<p className="hero-reveal lg:opacity-0 tracking-[-2%] w-full max-w-xs sm:max-w-[480px] md:max-w-xl text-[#FFFFFF99] md:text-[16px] text-[14px] font-light leading-5 font-sans">
|
||||
Stop rebuilding usage limits, credit ledgers and payment logic.{" "}
|
||||
<span className="text-white font-light">
|
||||
Autumn is the customer database
|
||||
@@ -201,7 +163,7 @@ export default function Hero() {
|
||||
so mobile never downloads them, and desktop fills the
|
||||
already-reserved space once it hydrates.
|
||||
*/}
|
||||
<div className="hero-reveal relative w-[50vw] max-w-[720px] min-h-[525px] p-16 py-0 mx-auto hidden xl:block">
|
||||
<div className="hero-reveal lg:opacity-0 relative w-[50vw] max-w-[720px] min-h-[525px] p-16 py-0 mx-auto hidden xl:block">
|
||||
{isXl && (
|
||||
<>
|
||||
<div className="absolute inset-0 z-0 pointer-events-none">
|
||||
@@ -224,7 +186,7 @@ export default function Hero() {
|
||||
<div className="border-t border-[#292929]" />
|
||||
<div className="flex flex-nowrap items-center xl:px-22.75 px-4 bg-[#0F0F0F] w-full overflow-hidden">
|
||||
{/* Primary CTA */}
|
||||
<div className="hero-cta w-full md:w-fit md:flex-shrink-0">
|
||||
<div className="hero-cta lg:opacity-0 w-full md:w-fit md:flex-shrink-0">
|
||||
<Link
|
||||
href={
|
||||
isLoggedIn
|
||||
@@ -253,7 +215,7 @@ export default function Hero() {
|
||||
</div>
|
||||
|
||||
{/* Secondary CTA */}
|
||||
<div className="hero-cta w-full md:w-fit md:flex-shrink-0">
|
||||
<div className="hero-cta lg:opacity-0 w-full md:w-fit md:flex-shrink-0">
|
||||
<Link href={"https://cal.com/ayrod"}>
|
||||
<motion.div
|
||||
initial="initial"
|
||||
@@ -274,7 +236,7 @@ export default function Hero() {
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="hero-cta hidden md:flex flex-nowrap gap-2 md:gap-3 ml-2 md:ml-3 h-10.5 md:h-12.5 flex-1">
|
||||
<div className="hero-cta lg:opacity-0 hidden md:flex flex-nowrap gap-2 md:gap-3 ml-2 md:ml-3 h-10.5 md:h-12.5 flex-1">
|
||||
<div className="border-r border-[#292929] h-full hidden md:block" />
|
||||
<div className="border-r border-[#292929] h-full hidden md:block" />
|
||||
<div className="border-r border-[#292929] h-full hidden md:block" />
|
||||
@@ -305,11 +267,12 @@ export default function Hero() {
|
||||
aria-hidden="true"
|
||||
fill
|
||||
priority
|
||||
fetchPriority="high"
|
||||
sizes="100vw"
|
||||
className="hero-bg absolute inset-0 w-full h-full object-cover mix-blend-screen opacity-100 pointer-events-none select-none"
|
||||
/>
|
||||
|
||||
<div className="hero-reveal relative z-10 w-[96%] sm:w-[90%] max-w-[520px] flex justify-center items-center">
|
||||
<div className="hero-reveal lg:opacity-0 relative z-10 w-[96%] sm:w-[90%] max-w-[520px] flex justify-center items-center">
|
||||
{/* <AutumnConfig lines={16} initialDelay={1000} awaitEvent="preloader:complete" /> */}
|
||||
<Image
|
||||
src={"/images/hero/autumn_mobile.svg"}
|
||||
|
||||
@@ -3,11 +3,15 @@
|
||||
import dynamic from "next/dynamic";
|
||||
import { useEffect } from "react";
|
||||
import Hero from "./hero";
|
||||
import LazySection from "./lazy-section";
|
||||
import SectionDivider from "./section-divider";
|
||||
|
||||
// All below-fold sections are code-split into separate lazy chunks so the
|
||||
// initial JS bundle only contains the hero. Framer-motion, GSAP ScrollTrigger,
|
||||
// and lottie-web are pulled into these chunks rather than the main bundle.
|
||||
// LazySection gates each component behind an IntersectionObserver so chunks
|
||||
// and their heavy assets (Lottie JSON, ScrollTrigger) only download as the
|
||||
// user scrolls toward them rather than all at once on page load.
|
||||
const LogoWall = dynamic(() => import("./logo-wall"));
|
||||
const Problem = dynamic(() => import("./problem"));
|
||||
const Solution = dynamic(() => import("./solution"));
|
||||
@@ -42,32 +46,25 @@ export default function HomeSections() {
|
||||
return (
|
||||
<>
|
||||
<Hero />
|
||||
{/*
|
||||
<div className="flex flex-col gap-2.5 bg-[#000000]">
|
||||
<div className="border-t border-[#292929] w-full" />
|
||||
<div className="border-t border-[#292929] w-full" />
|
||||
<div className="border-t border-[#292929] w-full" />
|
||||
<div className="border-t border-[#292929] w-full" />
|
||||
<div className="border-t border-[#292929] w-full" />
|
||||
</div>
|
||||
<LogoWall /> */}
|
||||
|
||||
<LogoWall />
|
||||
<SectionDivider title="THE PROBLEM" />
|
||||
<Problem />
|
||||
<LazySection><Problem /></LazySection>
|
||||
<SectionDivider title="THE SOLUTION" />
|
||||
<Solution />
|
||||
<LazySection><Solution /></LazySection>
|
||||
<SectionDivider title="PRICING MODELS" />
|
||||
<PricingModels />
|
||||
<LazySection><PricingModels /></LazySection>
|
||||
<SectionDivider title="FEATURES" />
|
||||
<Features />
|
||||
<LazySection><Features /></LazySection>
|
||||
<SectionDivider title="TESTIMONIALS" />
|
||||
<Testimonials />
|
||||
<LazySection><Testimonials /></LazySection>
|
||||
<SectionDivider title="PRODUCTION SCALE" />
|
||||
<ProductionScale />
|
||||
<LazySection><ProductionScale /></LazySection>
|
||||
<SectionDivider title="PRICING" />
|
||||
<Pricing />
|
||||
<LazySection><Pricing /></LazySection>
|
||||
<SectionDivider title="FAQ" />
|
||||
<FAQ />
|
||||
<Footer />
|
||||
<LazySection><FAQ /></LazySection>
|
||||
<LazySection><Footer /></LazySection>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
37
apps/website/components/lazy-section.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
"use client";
|
||||
import { useEffect, useRef, useState, type ReactNode } from "react";
|
||||
|
||||
export default function LazySection({ children }: { children: ReactNode }) {
|
||||
const ref = useRef<HTMLDivElement>(null);
|
||||
const [mounted, setMounted] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const el = ref.current;
|
||||
if (!el) return;
|
||||
|
||||
// iOS < 12.2 has no IntersectionObserver — mount everything immediately.
|
||||
if (!("IntersectionObserver" in window)) {
|
||||
setMounted(true);
|
||||
return;
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
([entry]) => {
|
||||
// intersectionRatio > 0 guards against a Safari bug where
|
||||
// isIntersecting fires as false on the initial sync callback.
|
||||
if (entry.isIntersecting || entry.intersectionRatio > 0) {
|
||||
setMounted(true);
|
||||
observer.disconnect();
|
||||
}
|
||||
},
|
||||
{ rootMargin: "1000px 0px" },
|
||||
);
|
||||
|
||||
observer.observe(el);
|
||||
return () => observer.disconnect();
|
||||
}, []);
|
||||
|
||||
// min-height: 1px prevents the wrapper collapsing to zero height before
|
||||
// content mounts, which would cause iOS to jump scroll position on mount.
|
||||
return <div ref={ref} style={{ minHeight: "1px" }}>{mounted ? children : null}</div>;
|
||||
}
|
||||
@@ -3,70 +3,52 @@
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
const LOGOS = [
|
||||
{ id: 1, name: "Mintlify", src: "/images/logos/mintlify_logo.svg.svg" },
|
||||
{ id: 2, name: "Browser Use", src: "/images/logos/Browser use.svg" },
|
||||
{ id: 3, name: "Firecrawl", src: "/images/logos/Firecrawl.svg.svg" },
|
||||
{ id: 4, name: "Mastra", src: "/images/logos/Mastra.svg.svg" },
|
||||
{ id: 5, name: "T3.chat", src: "/images/logos/T3_svg.svg" },
|
||||
{ id: 6, name: "", src: null },
|
||||
{ id: 1, name: "Mintlify", src: "/images/logos/mintlify_logo.svg.svg", className: "scale-90 md:scale-70" },
|
||||
{ id: 3, name: "Firecrawl", src: "/images/logos/Firecrawl.svg.svg", className: "scale-95 md:scale-75 -translate-y-0.5" },
|
||||
{ id: 4, name: "Mastra", src: "/images/logos/Mastra.svg.svg", className: "scale-105 md:scale-95" },
|
||||
{ id: 2, name: "Browser Use", src: "/images/logos/Browser use.svg", className: "scale-85 md:scale-65" },
|
||||
{ id: 5, name: "T3.chat", src: "/images/logos/T3_svg.svg", className: "scale-65 md:scale-55" },
|
||||
];
|
||||
|
||||
const NUM_MOBILE_COLS = 2;
|
||||
const NUM_DESKTOP_COLS = 3;
|
||||
const NUM_MOBILE_COLS = 3;
|
||||
const NUM_DESKTOP_COLS = 5;
|
||||
|
||||
export default function LogoWall() {
|
||||
return (
|
||||
<section className="w-full bg-[#000000]">
|
||||
<div className="flex flex-col md:flex-row">
|
||||
{/* Left heading — full width on mobile, 42% on desktop */}
|
||||
<div className="md:w-[42%] px-4 xl:px-22.75 py-8 md:py-0 flex items-center border-b md:border-b-0 md:border-r border-[#292929]">
|
||||
<div>
|
||||
<p className="font-sans text-[28px] md:text-[36px] xl:text-[40px] font-normal leading-[1.1] tracking-[-0.03em]">
|
||||
<span className="text-[#FFFFFF66]">Trusted by </span>
|
||||
<span className="text-white">AI teams</span>
|
||||
</p>
|
||||
<p className="font-sans text-[28px] md:text-[36px] xl:text-[40px] font-normal leading-[1.1] tracking-[-0.03em] text-white">
|
||||
shipping fast
|
||||
</p>
|
||||
</div>
|
||||
<section className="w-full bg-[#0F0F0F]"
|
||||
style={{
|
||||
backgroundImage:
|
||||
"radial-gradient(circle, rgba(255,255,255,0.06) 1px, transparent 1px)",
|
||||
backgroundSize: "14px 14px",
|
||||
}}>
|
||||
<div className="flex flex-col">
|
||||
<div className="px-4 xl:px-22.75 pt-10.5 flex items-center justify-center">
|
||||
<span className="font-sans text-[14px] font-light text-[#FFFFFF99] tracking-[-2%] leading-5">
|
||||
Powering millions of customers for growing startups
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Logo grid — 2 cols on mobile, 3 cols on desktop */}
|
||||
<div className="flex-1 grid grid-cols-2 md:grid-cols-3">
|
||||
{LOGOS.map((logo, i) => {
|
||||
const isLastMobileCol = (i + 1) % NUM_MOBILE_COLS === 0;
|
||||
const isLastDesktopCol = (i + 1) % NUM_DESKTOP_COLS === 0;
|
||||
const isLastMobileRow = i >= LOGOS.length - NUM_MOBILE_COLS;
|
||||
const isLastDesktopRow = i >= LOGOS.length - NUM_DESKTOP_COLS;
|
||||
|
||||
return (
|
||||
<div
|
||||
key={logo.id}
|
||||
<div className="flex-1 flex flex-wrap justify-center md:grid md:grid-cols-5 px-4 py-4 md:py-0">
|
||||
{LOGOS.map((logo) => (
|
||||
<div
|
||||
key={logo.id}
|
||||
className="flex items-center justify-center min-h-[50px] md:min-h-[100px] border-[#292929] w-1/3 md:w-auto"
|
||||
>
|
||||
{logo.src && (
|
||||
<img
|
||||
src={logo.src}
|
||||
alt={logo.name}
|
||||
className={cn(
|
||||
"flex items-center justify-center min-h-[90px] md:min-h-[166px] border-[#292929]",
|
||||
!isLastMobileCol && "border-r",
|
||||
!isLastMobileRow && "border-b",
|
||||
isLastDesktopCol ? "md:border-r-0" : "md:border-r",
|
||||
isLastDesktopRow ? "md:border-b-0" : "md:border-b",
|
||||
"h-5 md:h-7 w-auto max-w-full object-contain",
|
||||
logo.className
|
||||
)}
|
||||
style={{
|
||||
backgroundImage:
|
||||
"radial-gradient(circle, rgba(255,255,255,0.06) 1px, transparent 1px)",
|
||||
backgroundSize: "14px 14px",
|
||||
}}
|
||||
>
|
||||
{logo.src && (
|
||||
<img
|
||||
src={logo.src}
|
||||
alt={logo.name}
|
||||
className="h-5 md:h-7 w-auto max-w-[110px] md:max-w-[150px] object-contain"
|
||||
loading="lazy"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
loading="lazy"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
"use client";
|
||||
|
||||
import { useGSAP } from "@gsap/react";
|
||||
import gsap from "gsap";
|
||||
import { motion } from "motion/react";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
@@ -29,6 +27,7 @@ import type {
|
||||
PixelIconComponent,
|
||||
} from "@/lib/types";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { getGsap } from "@/lib/lazyGsap";
|
||||
import { DashboardIconPixel } from "./dashboard-icon-pixel";
|
||||
|
||||
const NAV_LINKS = [
|
||||
@@ -42,10 +41,18 @@ const NAV_LINKS = [
|
||||
},
|
||||
];
|
||||
|
||||
type GSAPTimeline = {
|
||||
play: () => GSAPTimeline;
|
||||
reverse: () => GSAPTimeline;
|
||||
kill: () => void;
|
||||
// biome-ignore lint/suspicious/noExplicitAny: structural shim for GSAP's overloaded .to() signature
|
||||
to: (...args: any[]) => GSAPTimeline;
|
||||
};
|
||||
|
||||
const NavIconPixel = forwardRef<PixelHoverHandle, { Icon: PixelIconComponent }>(
|
||||
function NavIconPixel({ Icon }, ref) {
|
||||
const iconRef = useRef<SVGSVGElement | null>(null);
|
||||
const tlRef = useRef<gsap.core.Timeline | null>(null);
|
||||
const tlRef = useRef<GSAPTimeline | null>(null);
|
||||
|
||||
useImperativeHandle(ref, () => ({
|
||||
restart: () => tlRef.current?.play(),
|
||||
@@ -53,46 +60,39 @@ const NavIconPixel = forwardRef<PixelHoverHandle, { Icon: PixelIconComponent }>(
|
||||
}));
|
||||
|
||||
useEffect(() => {
|
||||
const pixelEls =
|
||||
iconRef.current?.querySelectorAll<SVGPathElement>(".icon-pixel-path");
|
||||
if (!pixelEls?.length) return;
|
||||
const el = iconRef.current;
|
||||
if (!el) return;
|
||||
let cancelled = false;
|
||||
|
||||
const pixels = Array.from(pixelEls).sort((a, b) => {
|
||||
const aBox = a.getBBox();
|
||||
const bBox = b.getBBox();
|
||||
return (
|
||||
aBox.x +
|
||||
aBox.width / 2 -
|
||||
(aBox.y + aBox.height / 2) -
|
||||
(bBox.x + bBox.width / 2 - (bBox.y + bBox.height / 2))
|
||||
);
|
||||
});
|
||||
getGsap().then((gsap) => {
|
||||
if (cancelled) return;
|
||||
const pixelEls = el.querySelectorAll<SVGPathElement>(".icon-pixel-path");
|
||||
if (!pixelEls.length) return;
|
||||
|
||||
gsap.set(pixels, {
|
||||
opacity: 0.15,
|
||||
scale: 0.8,
|
||||
transformOrigin: "left bottom",
|
||||
fill: "currentColor",
|
||||
});
|
||||
|
||||
tlRef.current = gsap.timeline({ paused: true });
|
||||
|
||||
tlRef.current
|
||||
.to(pixels, {
|
||||
opacity: 1,
|
||||
scale: 1.15,
|
||||
fill: "#FFFFFF",
|
||||
duration: 0.01,
|
||||
stagger: 0.025,
|
||||
ease: "power2.out",
|
||||
})
|
||||
.to(pixels, {
|
||||
scale: 1,
|
||||
duration: 0.01,
|
||||
ease: "back.out(3)",
|
||||
const pixels = Array.from(pixelEls).sort((a, b) => {
|
||||
const aBox = a.getBBox();
|
||||
const bBox = b.getBBox();
|
||||
return (
|
||||
aBox.x + aBox.width / 2 - (aBox.y + aBox.height / 2) -
|
||||
(bBox.x + bBox.width / 2 - (bBox.y + bBox.height / 2))
|
||||
);
|
||||
});
|
||||
|
||||
gsap.set(pixels, {
|
||||
opacity: 0.15,
|
||||
scale: 0.8,
|
||||
transformOrigin: "left bottom",
|
||||
fill: "currentColor",
|
||||
});
|
||||
|
||||
tlRef.current = gsap.timeline({ paused: true });
|
||||
tlRef.current!
|
||||
.to(pixels, { opacity: 1, scale: 1.15, fill: "#FFFFFF", duration: 0.01, stagger: 0.025, ease: "power2.out" })
|
||||
.to(pixels, { scale: 1, duration: 0.01, ease: "back.out(3)" });
|
||||
});
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
tlRef.current?.kill();
|
||||
};
|
||||
}, []);
|
||||
@@ -189,137 +189,21 @@ export default function Navbar({
|
||||
};
|
||||
}, [menuOpen]);
|
||||
|
||||
useGSAP(
|
||||
() => {
|
||||
if (!animateIntro) return;
|
||||
// Skip the entrance animation on non-desktop viewports, or when
|
||||
// hydration landed well after first paint. On mobile the GSAP chunk
|
||||
// can arrive many seconds after the server-rendered navbar has
|
||||
// already painted; hiding it with `gsap.set({ opacity: 0 })` at
|
||||
// that point and re-animating it in is a visible flash that's much
|
||||
// worse than no animation.
|
||||
if (
|
||||
window.matchMedia("(max-width: 1023px)").matches ||
|
||||
performance.now() > 300
|
||||
) {
|
||||
return;
|
||||
}
|
||||
gsap.set(".nav-root", { opacity: 0 });
|
||||
gsap.set(".nav-logo", {
|
||||
opacity: 0,
|
||||
filter: "blur(6px) brightness(1)",
|
||||
scale: 0.92,
|
||||
transformOrigin: "left center",
|
||||
});
|
||||
gsap.set(".nav-link", { opacity: 0, y: -8 });
|
||||
gsap.set(".nav-dashboard", { opacity: 0, scale: 0.95 });
|
||||
const navMobileRef = useRef<HTMLDivElement | null>(null);
|
||||
|
||||
const tl = gsap.timeline({ defaults: { overwrite: "auto" } });
|
||||
|
||||
tl.to(".nav-root", { opacity: 1, duration: 0.3, ease: "none" })
|
||||
.to(".nav-logo", {
|
||||
opacity: 1,
|
||||
filter: "blur(0px) brightness(1)",
|
||||
scale: 1,
|
||||
duration: 0.7,
|
||||
ease: "power2.out",
|
||||
})
|
||||
.to(".nav-logo", {
|
||||
filter: "blur(0px) brightness(1.6)",
|
||||
duration: 0.225,
|
||||
ease: "power2.in",
|
||||
})
|
||||
.to(".nav-logo", {
|
||||
filter: "blur(0px) brightness(1)",
|
||||
duration: 0.125,
|
||||
ease: "power2.out",
|
||||
})
|
||||
.to(
|
||||
".nav-link",
|
||||
{
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
duration: 0.25,
|
||||
stagger: 0.06,
|
||||
ease: "power2.out",
|
||||
},
|
||||
"-=0.05",
|
||||
)
|
||||
.to(
|
||||
".nav-dashboard",
|
||||
{
|
||||
opacity: 1,
|
||||
scale: 1,
|
||||
duration: 0.3,
|
||||
ease: "back.out(1.5)",
|
||||
},
|
||||
"-=0.1",
|
||||
);
|
||||
},
|
||||
{ scope: containerRef, dependencies: [animateIntro] },
|
||||
);
|
||||
|
||||
const mobileTl = useRef<gsap.core.Timeline | null>(null);
|
||||
|
||||
useGSAP(
|
||||
() => {
|
||||
gsap.set(".nav-mobile", {
|
||||
opacity: 0,
|
||||
clipPath: "inset(0% 0 100% 0)",
|
||||
pointerEvents: "none",
|
||||
});
|
||||
|
||||
gsap.set(
|
||||
".nav-mobile a, .nav-mobile img, .nav-mobile button, .nav-mobile .border-b",
|
||||
{
|
||||
opacity: 0,
|
||||
filter: "blur(8px)",
|
||||
scale: 0.95,
|
||||
},
|
||||
);
|
||||
|
||||
mobileTl.current = gsap.timeline({
|
||||
paused: true,
|
||||
defaults: { overwrite: "auto" },
|
||||
});
|
||||
|
||||
mobileTl.current
|
||||
.to(".nav-mobile", {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
pointerEvents: "auto",
|
||||
clipPath: "inset(0% 0 0% 0)",
|
||||
duration: 0.2,
|
||||
ease: "power3.inOut",
|
||||
})
|
||||
.to(
|
||||
".nav-mobile a, .nav-mobile img, .nav-mobile button, .nav-mobile .border-b",
|
||||
{
|
||||
opacity: 1,
|
||||
filter: "blur(0px)",
|
||||
scale: 1,
|
||||
duration: 0.15,
|
||||
stagger: 0.01,
|
||||
ease: "power2.out",
|
||||
},
|
||||
"-=0.1",
|
||||
);
|
||||
},
|
||||
{ scope: containerRef },
|
||||
);
|
||||
|
||||
useGSAP(
|
||||
() => {
|
||||
if (mobileTl.current) {
|
||||
if (menuOpen) {
|
||||
mobileTl.current.timeScale(1).play();
|
||||
} else {
|
||||
mobileTl.current.timeScale(1.8).reverse();
|
||||
}
|
||||
}
|
||||
},
|
||||
{ scope: containerRef, dependencies: [menuOpen] },
|
||||
);
|
||||
useEffect(() => {
|
||||
const el = navMobileRef.current;
|
||||
if (!el) return;
|
||||
if (menuOpen) {
|
||||
el.style.opacity = "1";
|
||||
el.style.pointerEvents = "auto";
|
||||
el.style.clipPath = "inset(0% 0 0% 0)";
|
||||
} else {
|
||||
el.style.opacity = "0";
|
||||
el.style.pointerEvents = "none";
|
||||
el.style.clipPath = "inset(0% 0 100% 0)";
|
||||
}
|
||||
}, [menuOpen]);
|
||||
|
||||
return (
|
||||
<div
|
||||
@@ -404,8 +288,9 @@ export default function Navbar({
|
||||
</nav>
|
||||
</div>
|
||||
<div
|
||||
ref={navMobileRef}
|
||||
className={cn(
|
||||
"fixed nav-mobile inset-x-0 z-40 flex h-[calc(100dvh-58px)] flex-col overflow-x-hidden overflow-y-auto bg-[#000000] px-4 pb-8 font-mono uppercase transition-all duration-300 md:px-(--page-pad) lg:top-5",
|
||||
"fixed inset-x-0 z-40 flex h-[calc(100dvh-58px)] flex-col overflow-x-hidden overflow-y-auto bg-[#000000] px-4 pb-8 font-mono uppercase md:px-(--page-pad) lg:top-5",
|
||||
scrolled && !recoilHidden
|
||||
? "top-[58px] sm:top-[60px]"
|
||||
: "top-[66px] sm:top-[62px]",
|
||||
@@ -414,6 +299,7 @@ export default function Navbar({
|
||||
opacity: 0,
|
||||
pointerEvents: "none",
|
||||
clipPath: "inset(0% 0 100% 0)",
|
||||
transition: "opacity 0.2s ease, clip-path 0.2s cubic-bezier(0.87, 0, 0.13, 1)",
|
||||
}}
|
||||
>
|
||||
{/* Nav items */}
|
||||
|
||||
@@ -66,9 +66,16 @@ export default function SolutionAnimation() {
|
||||
// Defer the 1.4–2.1 MB Lottie JSON fetch until the element is close to
|
||||
// the viewport. Without this the browser fetches it during initial load
|
||||
// and blocks the main thread while parsing the large JSON blob.
|
||||
if (!("IntersectionObserver" in window)) {
|
||||
initAnimation();
|
||||
return;
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
(entries) => {
|
||||
if (entries[0].isIntersecting) {
|
||||
// intersectionRatio > 0 guards against a Safari bug where
|
||||
// isIntersecting fires as false on the initial sync callback.
|
||||
if (entries[0].isIntersecting || entries[0].intersectionRatio > 0) {
|
||||
observer.disconnect();
|
||||
initAnimation();
|
||||
}
|
||||
|
||||
10
apps/website/lib/lazyGsap.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
// Loads GSAP exactly once — first call triggers the dynamic import,
|
||||
// subsequent calls reuse the same promise.
|
||||
type Gsap = (typeof import("gsap"))["default"];
|
||||
|
||||
let promise: Promise<Gsap> | null = null;
|
||||
|
||||
export const getGsap = (): Promise<Gsap> => {
|
||||
if (!promise) promise = import("gsap").then((m) => m.default);
|
||||
return promise;
|
||||
};
|
||||
@@ -7,13 +7,13 @@ const nextConfig = {
|
||||
pageExtensions: ["ts", "tsx", "md", "mdx"],
|
||||
allowedDevOrigins: ["*.ngrok-free.dev"],
|
||||
experimental: {
|
||||
optimizePackageImports: ["framer-motion", "motion", "gsap", "@gsap/react"],
|
||||
optimizePackageImports: ["motion", "gsap", "@gsap/react"],
|
||||
optimizeCss: true,
|
||||
},
|
||||
images: {
|
||||
// Serve AVIF to supporting browsers (better compression than WebP),
|
||||
// falling back to WebP. Next.js negotiates via Accept header automatically.
|
||||
// formats: ["image/avif", "image/webp"],
|
||||
formats: ["image/avif", "image/webp"],
|
||||
},
|
||||
async headers() {
|
||||
if (!isProd) return [];
|
||||
|
||||
@@ -16,12 +16,9 @@
|
||||
"@next/mdx": "^16.2.4",
|
||||
"@types/react": "^19.2.14",
|
||||
"@vercel/analytics": "^2.0.1",
|
||||
"framer-motion": "^12.38.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"gsap": "^3.15.0",
|
||||
"lottie-react": "^2.4.1",
|
||||
"lottie-web": "^5.13.0",
|
||||
"matter-js": "^0.20.0",
|
||||
"motion": "^12.38.0",
|
||||
"next": "16.2.4",
|
||||
"ngrok": "^5.0.0-beta.2",
|
||||
|
||||
|
Before Width: | Height: | Size: 884 KiB |
|
Before Width: | Height: | Size: 22 MiB |
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 996 KiB |
20
bun.lock
@@ -26,6 +26,7 @@
|
||||
"inquirer": "^12.10.0",
|
||||
"knip": "^6.7.0",
|
||||
"ts-to-zod": "^5.1.0",
|
||||
"turbo": "^2.9.6",
|
||||
},
|
||||
},
|
||||
"apps/checkout": {
|
||||
@@ -115,12 +116,9 @@
|
||||
"@next/mdx": "^16.2.4",
|
||||
"@types/react": "^19.2.14",
|
||||
"@vercel/analytics": "^2.0.1",
|
||||
"framer-motion": "^12.38.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"gsap": "^3.15.0",
|
||||
"lottie-react": "^2.4.1",
|
||||
"lottie-web": "^5.13.0",
|
||||
"matter-js": "^0.20.0",
|
||||
"motion": "^12.38.0",
|
||||
"next": "16.2.4",
|
||||
"ngrok": "^5.0.0-beta.2",
|
||||
@@ -2174,6 +2172,18 @@
|
||||
|
||||
"@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="],
|
||||
|
||||
"@turbo/darwin-64": ["@turbo/darwin-64@2.9.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg=="],
|
||||
|
||||
"@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.9.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aalBeSl4agT/QtYGDyf/XLajedWzUC9Vg/pm/YO6QQ93vkQ91Vz5uK1ta5RbVRDozQSz4njxUNqRNmOXDzW+qw=="],
|
||||
|
||||
"@turbo/linux-64": ["@turbo/linux-64@2.9.6", "", { "os": "linux", "cpu": "x64" }, "sha512-YKi05jnNHaD7vevgYwahpzGwbsNNTwzU2c7VZdmdFm7+cGDP4oREUWSsainiMfRqjRuolQxBwRn8wf1jmu+YZA=="],
|
||||
|
||||
"@turbo/linux-arm64": ["@turbo/linux-arm64@2.9.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-02o/ZS69cOYEDczXvOB2xmyrtzjQ2hVFtWZK1iqxXUfzMmTjZK4UumrfNnjckSg+gqeBfnPRHa0NstA173Ik3g=="],
|
||||
|
||||
"@turbo/windows-64": ["@turbo/windows-64@2.9.6", "", { "os": "win32", "cpu": "x64" }, "sha512-wVdQjvnBI15wB6JrA+43CtUtagjIMmX6XYO758oZHAsCNSxqRlJtdyujih0D8OCnwCRWiGWGI63zAxR0hO6s9g=="],
|
||||
|
||||
"@turbo/windows-arm64": ["@turbo/windows-arm64@2.9.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-1XUUyWW0W6FTSqGEhU8RHVqb2wP1SPkr7hIvBlMEwH9jr+sJQK5kqeosLJ/QaUv4ecSAd1ZhIrLoW7qslAzT4A=="],
|
||||
|
||||
"@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
|
||||
|
||||
"@types/acorn": ["@types/acorn@4.0.6", "", { "dependencies": { "@types/estree": "*" } }, "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ=="],
|
||||
@@ -4228,8 +4238,6 @@
|
||||
|
||||
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
||||
|
||||
"matter-js": ["matter-js@0.20.0", "", {}, "sha512-iC9fYR7zVT3HppNnsFsp9XOoQdQN2tUyfaKg4CHLH8bN+j6GT4Gw7IH2rP0tflAebrHFw730RR3DkVSZRX8hwA=="],
|
||||
|
||||
"md-to-react-email": ["md-to-react-email@5.0.6", "", { "dependencies": { "marked": "7.0.4" }, "peerDependencies": { "react": "^18.0 || ^19.0" } }, "sha512-lKaTJqpmO88JdE3FnE7V1dtS+ta0ORyKTRhk/YoCRmeE9LozyfR2ashnUW0p0hK13VnF2TqZURXtSwgyh0zZkA=="],
|
||||
|
||||
"md5-hex": ["md5-hex@3.0.1", "", { "dependencies": { "blueimp-md5": "^2.10.0" } }, "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw=="],
|
||||
@@ -5446,6 +5454,8 @@
|
||||
|
||||
"tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="],
|
||||
|
||||
"turbo": ["turbo@2.9.6", "", { "optionalDependencies": { "@turbo/darwin-64": "2.9.6", "@turbo/darwin-arm64": "2.9.6", "@turbo/linux-64": "2.9.6", "@turbo/linux-arm64": "2.9.6", "@turbo/windows-64": "2.9.6", "@turbo/windows-arm64": "2.9.6" }, "bin": { "turbo": "bin/turbo" } }, "sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg=="],
|
||||
|
||||
"tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="],
|
||||
|
||||
"twoslash": ["twoslash@0.3.8", "", { "dependencies": { "@typescript/vfs": "^1.6.4", "twoslash-protocol": "0.3.8" }, "peerDependencies": { "typescript": "^5.5.0 || ^6.0.0" } }, "sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig=="],
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"enumMembers",
|
||||
"duplicates"
|
||||
],
|
||||
"ignore": ["ai/**"],
|
||||
"ignore": ["ai/**", "others/**"],
|
||||
"ignoreWorkspaces": [
|
||||
"packages/atmn",
|
||||
"packages/autumn-js",
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
lockVersion: 2.0.0
|
||||
id: 05940b80-1ef8-40f4-9878-822fb2792070
|
||||
management:
|
||||
docChecksum: ec1344f20539184af7cb9d96f15a66d3
|
||||
docChecksum: 3b0105075304498181ec21487da5dde1
|
||||
docVersion: 2.2.0
|
||||
speakeasyVersion: 1.759.3
|
||||
generationVersion: 2.869.25
|
||||
releaseVersion: 0.4.18
|
||||
configChecksum: 2263d20254e354a1792248274002f650
|
||||
persistentEdits:
|
||||
generation_id: 5e96af15-644d-4acf-959d-2ab7ff0f92b0
|
||||
pristine_commit_hash: 0e9011855bbd03f2ee96638a01a28be2449aa80c
|
||||
pristine_tree_hash: b0c3bff428e26c8ed285218ad04b422cc7f5c974
|
||||
generation_id: d3d22cf1-5f75-49b1-9fcd-a284c460c35d
|
||||
pristine_commit_hash: 4982fbe5aa8f0a47cbad71e7d2b8827b0a28c650
|
||||
pristine_tree_hash: a04d19defc16cb69b5a90cc65de5a93d31bf6b66
|
||||
features:
|
||||
python:
|
||||
additionalDependencies: 1.0.0
|
||||
@@ -387,70 +387,126 @@ trackedFiles:
|
||||
id: 786823ab8ff0
|
||||
last_write_checksum: sha1:8d7542dc9cdab711fa44b08449f023cf51d0bf2e
|
||||
pristine_git_object: efb3d1c5cde44cefea7c57680732ee41369d3929
|
||||
docs/models/checkconfig.md:
|
||||
id: 4b8ba30bfd95
|
||||
last_write_checksum: sha1:ffab912aee898f9de390060c4ca401c842ffdbf1
|
||||
pristine_git_object: aa3557115ce72623ad03ec41061e0043f329bd07
|
||||
docs/models/checkcreditschema.md:
|
||||
id: b573d5ff9854
|
||||
last_write_checksum: sha1:e111bba83ecf51974789882def6f418806704bcd
|
||||
pristine_git_object: 569f641aa37bd931f49d93ecc912d48d01ced164
|
||||
docs/models/checkenv.md:
|
||||
id: badd8ba846d9
|
||||
last_write_checksum: sha1:cc58aa52d618d5718048c72c1d832c22f4fa4d44
|
||||
pristine_git_object: 2ecd490b20e9ddec41e2de895dc878bfe1e735f5
|
||||
docs/models/checkfeature.md:
|
||||
id: 578a088d181f
|
||||
last_write_checksum: sha1:79c138d673342ee61ffdbb8befdf15d35ef9a6da
|
||||
pristine_git_object: fa7790f68f21941ebb44f775f59fad065363ff0d
|
||||
docs/models/checkfreetrial.md:
|
||||
id: 2620d97dc581
|
||||
last_write_checksum: sha1:c3c60a1a4e09486eb8b9a09efce7a665c1c9f60c
|
||||
pristine_git_object: 90a109f36f6f38ddcc91151e8f090e28504160eb
|
||||
docs/models/checkconfig1.md:
|
||||
id: f0806fd84f46
|
||||
last_write_checksum: sha1:e68d5f65bb3a81fbcc71f74e62ccc3b72c0ec264
|
||||
pristine_git_object: 14cf8e8fe58151d64c6e2289c905f9498bd910b0
|
||||
docs/models/checkconfig2.md:
|
||||
id: fff0819a7348
|
||||
last_write_checksum: sha1:700260dd53a9f558d6321452f4bc71fb8542d811
|
||||
pristine_git_object: ceef4af077de0f504a1a147e6c531fe07671e2d8
|
||||
docs/models/checkcreditschema1.md:
|
||||
id: e0cd569c10aa
|
||||
last_write_checksum: sha1:484a7b932b9688c8e06eaad4d347810010ea1876
|
||||
pristine_git_object: 3141ddb0f3621854118a881f447d31fd89177a26
|
||||
docs/models/checkcreditschema2.md:
|
||||
id: 9e5073f2f76b
|
||||
last_write_checksum: sha1:3edf2daa2a87b89d126419c94ce3e823d55869d6
|
||||
pristine_git_object: 481a1118cb790f1958fb3e104d1a8966d3bc9e70
|
||||
docs/models/checkenv1.md:
|
||||
id: ee138eedef3f
|
||||
last_write_checksum: sha1:aae65b9f5a4b78f205506108d408754ceb8b7738
|
||||
pristine_git_object: 2ef98e05101327669e74012d7c628be39fcaf61c
|
||||
docs/models/checkenv2.md:
|
||||
id: 8eb584a3507a
|
||||
last_write_checksum: sha1:da8b828aad99fc30b7878a7aca495ec4ca9032ab
|
||||
pristine_git_object: 177d1e4f800e22191658a9c7870fada3616f5101
|
||||
docs/models/checkfeature1.md:
|
||||
id: 4c3370c023d0
|
||||
last_write_checksum: sha1:3027b27ea338cbaf22d7d3a5fc44fca25e196ff5
|
||||
pristine_git_object: 45c044f1385f2eaf100a06a79232f56d1031ee1a
|
||||
docs/models/checkfeature2.md:
|
||||
id: ea0c32d843fa
|
||||
last_write_checksum: sha1:00091321a41162e269bf77fb3ae1a0b192d17731
|
||||
pristine_git_object: ac1ad6e14d356c9b618c9ae81333a031f34f81e1
|
||||
docs/models/checkfreetrial1.md:
|
||||
id: 6feb912cba84
|
||||
last_write_checksum: sha1:ea943d15fad64692212e1808e1b5827ba9913148
|
||||
pristine_git_object: 5a40ffdb64e18372dd3372980cc427b5442bf930
|
||||
docs/models/checkfreetrial2.md:
|
||||
id: b93159aca437
|
||||
last_write_checksum: sha1:b4fa2bfb3c1365cdf68d80420d1992f83829feda
|
||||
pristine_git_object: 7f64bb70ee40720b9c04ae104ab42cb6437ad207
|
||||
docs/models/checkglobals.md:
|
||||
id: e7912e7cd264
|
||||
last_write_checksum: sha1:799fadc8c10dcbf7d7ae72df4593789491e46da8
|
||||
pristine_git_object: db1b11678847be436d8d702b1dfe38fbadfc0b8c
|
||||
docs/models/checkinterval.md:
|
||||
id: 8d4fa19b99cf
|
||||
last_write_checksum: sha1:1de9a5b6c8246013c331c029eff593c7d9107a0e
|
||||
pristine_git_object: 7ab99824ba2b1ea51adcc3e6e1f8ed71b9a41f41
|
||||
docs/models/checkitem.md:
|
||||
id: 17b1916ed078
|
||||
last_write_checksum: sha1:37bef2ae48994d69ed252eae5a69596bd730f8c6
|
||||
pristine_git_object: 90ff81caa8defcc27823c553d9a525401b8ea7c4
|
||||
docs/models/checkinterval1.md:
|
||||
id: 9858adfe444b
|
||||
last_write_checksum: sha1:f03f23c21416034aaaabaf863f9731c9e6f52c21
|
||||
pristine_git_object: ecc66ac03d705d63fddc9e1e8cc52578f389dcf0
|
||||
docs/models/checkinterval2.md:
|
||||
id: 0a8aeed61910
|
||||
last_write_checksum: sha1:f455a6279d1a29a102a043bbc18262ce1994984e
|
||||
pristine_git_object: 6fcb44b9c949d8be315f63b2c6d6cc4808208e99
|
||||
docs/models/checkitem1.md:
|
||||
id: 02d458d06abf
|
||||
last_write_checksum: sha1:e380d27d95e54b37b6753ae4124a5b83cb156853
|
||||
pristine_git_object: 2863c8e87e5b3430e46b9a17a566fe8729a85888
|
||||
docs/models/checkitem2.md:
|
||||
id: 4b248e1cc186
|
||||
last_write_checksum: sha1:1162569a062fe94e2a5a9c578418e1a10e41d438
|
||||
pristine_git_object: 7eb93ca79bfb06387380e2081209793ee3d51c98
|
||||
docs/models/checklock.md:
|
||||
id: 5f638752293b
|
||||
last_write_checksum: sha1:03f54dc8923833000ae382c045467a5b72d1ea0d
|
||||
pristine_git_object: 6a029c8c5367cce65667868341d1026f540f416b
|
||||
docs/models/checkondecrease.md:
|
||||
id: 2c49735aaa4e
|
||||
last_write_checksum: sha1:fbc0d73b600c664d71588db64a01f63ae9730c6f
|
||||
pristine_git_object: cdbd3eee0b4829c3574a58eaee0919e3456de0c4
|
||||
docs/models/checkonincrease.md:
|
||||
id: 72e23013a321
|
||||
last_write_checksum: sha1:285a9c0f5eedf50bf8345017cb5281054394fbf3
|
||||
pristine_git_object: 9e7cf1470360e6e191df1c53f875ddc2efce56b0
|
||||
docs/models/checkondecrease1.md:
|
||||
id: b399a28fcf6a
|
||||
last_write_checksum: sha1:58a534282c58ca0ded69f5185476f363be922d5b
|
||||
pristine_git_object: db7554a82f9085cb2e4df03cf454d3f7c69f0d94
|
||||
docs/models/checkondecrease2.md:
|
||||
id: 86849f247e74
|
||||
last_write_checksum: sha1:e6a7c55fb345a6653adf8e023213d6f8acb94578
|
||||
pristine_git_object: 4130b65cea4f17d82e36f729afba6540b1519e17
|
||||
docs/models/checkonincrease1.md:
|
||||
id: 40ab0b3b884d
|
||||
last_write_checksum: sha1:7a094594bdb88076d15b91ec36105d5ec4d63c03
|
||||
pristine_git_object: 2ff9fe7f4134032db32098fbbc041edcfdeb2227
|
||||
docs/models/checkonincrease2.md:
|
||||
id: 66cd88e77032
|
||||
last_write_checksum: sha1:6f9eb419bedd55d0354d8fe05649a342aa5a8bcf
|
||||
pristine_git_object: 27c9973e8ff4b84e37a28a89eb10bdb1856a9fe2
|
||||
docs/models/checkparams.md:
|
||||
id: 41de438d57cd
|
||||
last_write_checksum: sha1:ab7c54bfe0c657851a59fedd447c99bb3acdb4c2
|
||||
pristine_git_object: 7848c33fdbffc71c09fadd8ad859214182f00e0a
|
||||
docs/models/checkresponse.md:
|
||||
id: b988b0f4b781
|
||||
last_write_checksum: sha1:92555ddd5ee75227496ee661969ecc3b70ff2b22
|
||||
pristine_git_object: 538b5da093741e96e84628a1e462606976dc9a47
|
||||
docs/models/checkrollover.md:
|
||||
id: 7dd074787f0f
|
||||
last_write_checksum: sha1:056444557237da10a81fe7ada4c84693c15e9333
|
||||
pristine_git_object: b43700402cc1a46e9e5948e0c1ed3633535a263c
|
||||
docs/models/checktierbehavior.md:
|
||||
id: 9617428cc802
|
||||
last_write_checksum: sha1:50402db6b459dee47f0d1286dac1a86ca3608824
|
||||
pristine_git_object: 269d3333807ff7d70963551a083aa7ea5f8f397a
|
||||
docs/models/configduration.md:
|
||||
id: 71a76925451f
|
||||
last_write_checksum: sha1:0720378e9c471d694d5a851171f3abc2be4379a4
|
||||
pristine_git_object: e3c8e2bf7c4c806a31ab13effee6a07fd19abf4e
|
||||
last_write_checksum: sha1:9522d4ecea7631ce3ae3d80b341a068ccb2dcca4
|
||||
pristine_git_object: 960794ceac855696a459ff7faeed3ae0c2f845f2
|
||||
docs/models/checkresponsebody1.md:
|
||||
id: 6f9c994d9bb0
|
||||
last_write_checksum: sha1:910ecdad4ea6c2e9064a482a826953dc09008022
|
||||
pristine_git_object: 23178d30fa514b139910d65db17abf3d192ccbd4
|
||||
docs/models/checkresponsebody2.md:
|
||||
id: 0d79166415e4
|
||||
last_write_checksum: sha1:9f4ee6b517bb2933b39a91aea8b9ccba515ae505
|
||||
pristine_git_object: 089c68dfd0d7483cb8e7deb3058936f094c1e4a7
|
||||
docs/models/checkrollover1.md:
|
||||
id: 69582ff84901
|
||||
last_write_checksum: sha1:357b43f31ba66b5f4ac39a2517492bb9eb0d1233
|
||||
pristine_git_object: 436d725f99b017ceca6de1e2b8f69761e4aa93c4
|
||||
docs/models/checkrollover2.md:
|
||||
id: 6c56d12759b2
|
||||
last_write_checksum: sha1:e34dd4aca3a9622fcb3a5b4df1cc5fd67604d6d2
|
||||
pristine_git_object: 886ade07442a4df7195d79448a888b7ba4e523a2
|
||||
docs/models/checktierbehavior1.md:
|
||||
id: 4629a3f35b48
|
||||
last_write_checksum: sha1:4dadffec47827017f417c2114075318306960ddb
|
||||
pristine_git_object: 9d4f53ac28153c0cb5fb8cf484ff8bcd26ba2637
|
||||
docs/models/checktierbehavior2.md:
|
||||
id: 8f0d3f87e43b
|
||||
last_write_checksum: sha1:e22af7bb4b28ba6706d87fea28dbe5cea47e669a
|
||||
pristine_git_object: a99b6a18d629ebf476576386bf9b993d69745eb9
|
||||
docs/models/configduration1.md:
|
||||
id: b86dc4a9c4b2
|
||||
last_write_checksum: sha1:b83f06bf7e03a1dcf5d57b7fe5576c98d2ef8ff8
|
||||
pristine_git_object: 70ba64933045eeeb6a46d2ecc76946446c3b4adc
|
||||
docs/models/configduration2.md:
|
||||
id: 2a5fc83f865e
|
||||
last_write_checksum: sha1:09f3857cc198665dfb68e2fb8be6f0ba0450f607
|
||||
pristine_git_object: 7386884b68f5b856543f1568433532aa1b26541d
|
||||
docs/models/createbalanceduration.md:
|
||||
id: 826a29597974
|
||||
last_write_checksum: sha1:9b78f21633e80e576df535748685b12bb9ee9949
|
||||
@@ -619,6 +675,14 @@ trackedFiles:
|
||||
id: b307da22d211
|
||||
last_write_checksum: sha1:cb2e4a736b4ecc159767a293453ff87f9ed0c9eb
|
||||
pristine_git_object: 4a0d24cd6c7d3f100ff059751be33862a199c471
|
||||
docs/models/createplanconfigrequest.md:
|
||||
id: c2899bc14a62
|
||||
last_write_checksum: sha1:b9f2caa7a0ee425ae3eb236f8392d015ba5ce28b
|
||||
pristine_git_object: 314f7ef83181300c03210d01eb55426ee65e8699
|
||||
docs/models/createplanconfigresponse.md:
|
||||
id: 5927c084ee1a
|
||||
last_write_checksum: sha1:4ad50054407dae02bfbcc99ec810f4cb4cf61804
|
||||
pristine_git_object: e2b8498965f851260cbe6e786ed1f614a0ed05bc
|
||||
docs/models/createplancreditschema.md:
|
||||
id: bda39f39fac9
|
||||
last_write_checksum: sha1:8d3bf3dfd849ce3112674c8108d75e77bbf40d92
|
||||
@@ -693,8 +757,8 @@ trackedFiles:
|
||||
pristine_git_object: a7cbec89d5e586f2e506b7fac6a14d299e227ee2
|
||||
docs/models/createplanparams.md:
|
||||
id: 83565eddc151
|
||||
last_write_checksum: sha1:a585f44a9afc78624bda890e35c8fa50668c4248
|
||||
pristine_git_object: 542711d69f2a8236c3ffb8e0122f3b1bfa160483
|
||||
last_write_checksum: sha1:32603835b7730966dad5189cd23095c577505998
|
||||
pristine_git_object: e6b30b835d8afbc411969a4d50558518c90d6569
|
||||
docs/models/createplanplanitem.md:
|
||||
id: 1b9012d7afb1
|
||||
last_write_checksum: sha1:0671625d4e92d02eba01ee9b1a9e49effcd3fc96
|
||||
@@ -745,8 +809,8 @@ trackedFiles:
|
||||
pristine_git_object: a2f64fdb4fadf6e25741034efbaa74019f88d566
|
||||
docs/models/createplanresponse.md:
|
||||
id: 72de4e2745bb
|
||||
last_write_checksum: sha1:2cbb509b694c60f50163717015a2701b0a6da1ae
|
||||
pristine_git_object: 7048caf952b0860b68dbc3922353483c63e718d5
|
||||
last_write_checksum: sha1:311f175443401a8cea68bad160d54e8bcc5806d5
|
||||
pristine_git_object: 54f358896ee1c0a751881590b3fc5aad59ae49d6
|
||||
docs/models/createplanrolloverrequest.md:
|
||||
id: 01b2ca1d23fb
|
||||
last_write_checksum: sha1:455e7de95238ad1b496d10159c83a40c4bb0fd8d
|
||||
@@ -991,10 +1055,14 @@ trackedFiles:
|
||||
id: 7ba992bf53cc
|
||||
last_write_checksum: sha1:368f1d47012462b1ce9bd136fd0aa4a88cf419fb
|
||||
pristine_git_object: 675c956152029541c6bfe8a49519e6ba21a95712
|
||||
docs/models/featuretype.md:
|
||||
id: 9fd6a7ea7659
|
||||
last_write_checksum: sha1:a21f7ba709ab7f1cd5a2d83755064445d8b2c85a
|
||||
pristine_git_object: 05ff42a520e8804d3d219809d835a13f5ed78bf5
|
||||
docs/models/featuretype1.md:
|
||||
id: a061fb4a873d
|
||||
last_write_checksum: sha1:15d6b678f2ce4fe14d207404a82d3cc676ea7a63
|
||||
pristine_git_object: b829f3b0d74d48d383766781db8be87957253385
|
||||
docs/models/featuretype2.md:
|
||||
id: 92e1ceeeaa10
|
||||
last_write_checksum: sha1:a3023e348af77f2f393c2a5d90887af16f26ae46
|
||||
pristine_git_object: 9c0128850f8805a81bf4f631c12b19c31fc893f7
|
||||
docs/models/finalizebalanceparams.md:
|
||||
id: 610af9b4049c
|
||||
last_write_checksum: sha1:9f6c1e1ac2c7c0670ee998fe33e2f633edfe5c0b
|
||||
@@ -1005,32 +1073,56 @@ trackedFiles:
|
||||
pristine_git_object: ca4aaf9dd339a4c939bc50a3f5d48eb3642061b0
|
||||
docs/models/finalizelockresponse.md:
|
||||
id: 6c912a11f195
|
||||
last_write_checksum: sha1:24fad6be1b587d550d69d76547bd6647616ce7be
|
||||
pristine_git_object: 08a61e80ffd6f6c17caade17602049e3492420eb
|
||||
docs/models/flag.md:
|
||||
id: f7a84826e2db
|
||||
last_write_checksum: sha1:374db54cba506299ac1b9f70310130e28a9ff64b
|
||||
pristine_git_object: d871c7ff87ecd5a7037dd52370db656823f3cea1
|
||||
docs/models/flagdisplay.md:
|
||||
id: 5a9126a67446
|
||||
last_write_checksum: sha1:c6dba4635498c5faf9326749ba93096ea241ec28
|
||||
pristine_git_object: 5fe1bedf0b5fd5f2ddcffe73c1ca02542a4d4a95
|
||||
last_write_checksum: sha1:0b7e0d997d02ee7200708c953534b3895f8b2439
|
||||
pristine_git_object: f8139e4adf9f926941c5fe7a29289bc2a212006b
|
||||
docs/models/finalizelockresponsebody1.md:
|
||||
id: 9fc51a4a7450
|
||||
last_write_checksum: sha1:8b14246caf7e8a71b26f1eeccb92d3a7b6f98f41
|
||||
pristine_git_object: 55ef5595a50468b3e804572de617b4f1841f63df
|
||||
docs/models/finalizelockresponsebody2.md:
|
||||
id: 1f63ce3c16b7
|
||||
last_write_checksum: sha1:50a966546322be9fe9ff69501475ab5bcf3a8fd5
|
||||
pristine_git_object: d9f353139f906484151b640e47bad5ea8ecf9973
|
||||
docs/models/flag1.md:
|
||||
id: 56f975d669ad
|
||||
last_write_checksum: sha1:ca496d470e0acdd8df83f3fcee95eca2837ad30c
|
||||
pristine_git_object: c695258fdedb1181c861c76b1b700256500d9f51
|
||||
docs/models/flag2.md:
|
||||
id: aa1218c7a1e0
|
||||
last_write_checksum: sha1:0636b6870523b9a845600bb151bee2d8e4cf2e0b
|
||||
pristine_git_object: e450159e86d7b6a8e2237cd18e773e15e938926a
|
||||
docs/models/flagdisplay1.md:
|
||||
id: 32b9b0aa35f9
|
||||
last_write_checksum: sha1:50d2db1f789681afb6da45daca2ab82a3deb1031
|
||||
pristine_git_object: 932879cd451bb43360fc15ab44ae70a155c796bc
|
||||
docs/models/flagdisplay2.md:
|
||||
id: 65cd0bc1efa0
|
||||
last_write_checksum: sha1:f8f426b3ce0d4f6b5ce26c0db04161f01ba387a2
|
||||
pristine_git_object: ab22b6bd78834478298fd6817dd52753dc8a7ca3
|
||||
docs/models/flags.md:
|
||||
id: cb7c8de0dda0
|
||||
last_write_checksum: sha1:d0860152f748b33f0bcef36c3287e6826ccc4a30
|
||||
pristine_git_object: 7da619a9e958f42269a6a8c54394f6eb6fa390c3
|
||||
docs/models/flagtype.md:
|
||||
id: aa8e2212e678
|
||||
last_write_checksum: sha1:5938613e76e9a428845bae6670d23526ffdb6245
|
||||
pristine_git_object: b4825143b8c900e99b90deb32551f61502cf3b5d
|
||||
docs/models/flagtype1.md:
|
||||
id: a28ecd1eaf04
|
||||
last_write_checksum: sha1:6aea05cd73ef262ecf70a9ad76dce9259469c7bf
|
||||
pristine_git_object: 6761a49bd75238535ecf53685c7122ec36118918
|
||||
docs/models/flagtype2.md:
|
||||
id: 5beac8bbc73a
|
||||
last_write_checksum: sha1:996772277138ae0ef807cc6544ce0918cf0c4329
|
||||
pristine_git_object: b59a4c86a1798536ce63d6f5c7c8479270c63221
|
||||
docs/models/freetrial.md:
|
||||
id: dc73eb37daef
|
||||
last_write_checksum: sha1:0f8ee227ca42edfb64780b836e99518a340e3d82
|
||||
pristine_git_object: 589d1bb1e1cd47c62a789a8cff85528280df7e94
|
||||
docs/models/freetrialduration.md:
|
||||
id: afd918f70308
|
||||
last_write_checksum: sha1:858ad3ce1678634743a1c702062787acadcda18b
|
||||
pristine_git_object: b98731904496a288b0e3b0ac3574b5d26863f374
|
||||
docs/models/freetrialduration1.md:
|
||||
id: 9535ffba9b82
|
||||
last_write_checksum: sha1:982589e0fab2e00c48ecdbdd9ee584742732320d
|
||||
pristine_git_object: 2bd123723ee87d92397c0d622ab52f2feb38d3fc
|
||||
docs/models/freetrialduration2.md:
|
||||
id: 5ec9640d57e6
|
||||
last_write_checksum: sha1:79f1f1081db068eba5dba5d0f4523943f1d2dc20
|
||||
pristine_git_object: bfc739646438fdfc801bd823d6e31cc045dfff09
|
||||
docs/models/freetrialrequest.md:
|
||||
id: b3ecac09ef21
|
||||
last_write_checksum: sha1:169d32a309bd509f208a93cbd32c494a5fb86040
|
||||
@@ -1183,6 +1275,10 @@ trackedFiles:
|
||||
id: 5899381c0e82
|
||||
last_write_checksum: sha1:9762f5d1ab3cbd4d570c1b403171d3b7f3df6128
|
||||
pristine_git_object: 444e142954037161bd4aa63e788a71f75067a871
|
||||
docs/models/getplanconfig.md:
|
||||
id: 30c08be31079
|
||||
last_write_checksum: sha1:96ded56d99919ee6a9525337e4424553b753f7aa
|
||||
pristine_git_object: 7679cabf52f85c8d628d24d3c0cfecf6b63cf4e1
|
||||
docs/models/getplancreditschema.md:
|
||||
id: f70b7a9fd404
|
||||
last_write_checksum: sha1:1ad49c99400c9f9c735bf18686e2c7f3a0715803
|
||||
@@ -1261,8 +1357,8 @@ trackedFiles:
|
||||
pristine_git_object: 893f1399489630534ab838e9507aa9ee95d98633
|
||||
docs/models/getplanresponse.md:
|
||||
id: 2b0a620fdbb6
|
||||
last_write_checksum: sha1:b3bc1ce22f83a8b78e3bcbd75e364c5615974584
|
||||
pristine_git_object: fa70cd1a06598e2ae686a0b00c23021085cf8157
|
||||
last_write_checksum: sha1:55015bb4574d27aec244a3a3dc274e097d605df9
|
||||
pristine_git_object: 3b6780549094958e2712f9ffbf3222a6346e8acd
|
||||
docs/models/getplanrollover.md:
|
||||
id: aa86ef4ae999
|
||||
last_write_checksum: sha1:c05cca9b8a8529911ec695f60c02d96f397f7be7
|
||||
@@ -1279,10 +1375,14 @@ trackedFiles:
|
||||
id: afbdf26f0f4b
|
||||
last_write_checksum: sha1:6d5dfd04c5d95c235f56eb23e31f497c9ed91247
|
||||
pristine_git_object: 7390b496108568e19aba42d36c5c3b508e3d42b3
|
||||
docs/models/includedusage.md:
|
||||
id: e844c6f90fe1
|
||||
last_write_checksum: sha1:f45eadc2eb0f9f2543fcfd3b0d671c8fc9e1c5a8
|
||||
pristine_git_object: 6af710e8393ec0d5bd29b7bc2969174b69548d55
|
||||
docs/models/includedusage1.md:
|
||||
id: 7ceb62e48016
|
||||
last_write_checksum: sha1:9a7a940ec67dc041a2fb2064f8e5b433c9cb12ed
|
||||
pristine_git_object: 08cab19c3c6d0a860e2fc170d623f3f41887fdb7
|
||||
docs/models/includedusage2.md:
|
||||
id: a866162d4224
|
||||
last_write_checksum: sha1:6e8b4bdfa39d20c43de5bfe3f4d40c2e4e63405f
|
||||
pristine_git_object: d113b4a74c800629028857f59b3367aefb73dfee
|
||||
docs/models/intent.md:
|
||||
id: a4a6fa8818f7
|
||||
last_write_checksum: sha1:9079fedc03e6b5c3469c752774a972f27bdab857
|
||||
@@ -1451,6 +1551,10 @@ trackedFiles:
|
||||
id: e3bc081b1871
|
||||
last_write_checksum: sha1:fe30367f3d3dc7caa417ffb1cb7eb41a233892be
|
||||
pristine_git_object: 0a311a1a9fbd103a9796c9c96b056b48a17f593b
|
||||
docs/models/listplansconfig.md:
|
||||
id: 57d9a861571a
|
||||
last_write_checksum: sha1:062922ae98ad6e9715911f3c38885e04618dd2c2
|
||||
pristine_git_object: eccd70f762a16d10a9986cfc90370ae9f4e0639e
|
||||
docs/models/listplanscreditschema.md:
|
||||
id: 8f4524699ea8
|
||||
last_write_checksum: sha1:8264d803e53a657b5077baf27f79e86b9aca6c1d
|
||||
@@ -1501,8 +1605,8 @@ trackedFiles:
|
||||
pristine_git_object: 714e47a457c8f29a67c4d007b9fd0aafd6627f86
|
||||
docs/models/listplanslist.md:
|
||||
id: 6e9f463afde9
|
||||
last_write_checksum: sha1:3ab59a7b8cfe0aefce5990df247f1ec9b13611aa
|
||||
pristine_git_object: 5fb65f58778c5a3604b3a88e7d1a0fe59650d903
|
||||
last_write_checksum: sha1:12a22f7a98b85bcf87cde5768864e70027d376ad
|
||||
pristine_git_object: bc25a2bb9d3368ca435fa8687e1cf323491b3340
|
||||
docs/models/listplansparams.md:
|
||||
id: 585ca32cddb9
|
||||
last_write_checksum: sha1:ea218ec174d08b0a4ce981e60dbc40f311e0fc43
|
||||
@@ -1709,12 +1813,16 @@ trackedFiles:
|
||||
pristine_git_object: e837aa4e197e0d89a5af163eb58863349124e4de
|
||||
docs/models/plan.md:
|
||||
id: 900c4149ef4b
|
||||
last_write_checksum: sha1:6098a0a6bb1c128694303fe27ad5b93dd9cab08a
|
||||
pristine_git_object: daea8b231352c8ae8fc3d23ab739ed3ce60df632
|
||||
last_write_checksum: sha1:7748f60aa0c9b0420a08de7b5eafaa4ccb10a5d2
|
||||
pristine_git_object: b14254b081612e7aad15c005b639f0889b1839f8
|
||||
docs/models/planbillingmethod.md:
|
||||
id: ac90cee4f6c5
|
||||
last_write_checksum: sha1:1a7f86d46499a4f95ed7de36d79c3ff227baf98f
|
||||
pristine_git_object: 8e4f8a8d96a6a110275c7b80ab0b93dfc9cd3ebf
|
||||
docs/models/planconfig.md:
|
||||
id: 430c99cf9921
|
||||
last_write_checksum: sha1:34c52c0e8a788e4c2f2e3aafa139c66c93c0c2ba
|
||||
pristine_git_object: b26fb109f6682d43492a10becfddc3d831d0ec9d
|
||||
docs/models/plancreditschema.md:
|
||||
id: 510cd9d4f287
|
||||
last_write_checksum: sha1:3929c72df37848348916c755926dd1de7c252b3e
|
||||
@@ -1783,10 +1891,14 @@ trackedFiles:
|
||||
id: 4c86df78e60a
|
||||
last_write_checksum: sha1:5246ebf75c009119cbfcd501cdeb659e9f3c6786
|
||||
pristine_git_object: 5add1a3cab3d01077452a4df8d9037c6279da319
|
||||
docs/models/preview.md:
|
||||
id: ca71b601ef12
|
||||
last_write_checksum: sha1:40aa929c88e329add6e7ca46d7a8a2035a292320
|
||||
pristine_git_object: 30f2fde544d6369ffb95e242d86285de93ba6877
|
||||
docs/models/preview1.md:
|
||||
id: 203e34d3c393
|
||||
last_write_checksum: sha1:b9b1ce18639c5e83d9eb6bd83e1d99bd683291cd
|
||||
pristine_git_object: ac258d817302c6d7f841b006ff7a7931cfe13df7
|
||||
docs/models/preview2.md:
|
||||
id: 96d6fae57a72
|
||||
last_write_checksum: sha1:4839487a437486dbc9567dec57a136234230ddc9
|
||||
pristine_git_object: 9ad954e94d0ec60a5def86f162fe804fad115518
|
||||
docs/models/previewattachattachdiscount.md:
|
||||
id: a1bb4d726785
|
||||
last_write_checksum: sha1:09171167e4f41a512c1ddeea51aaa4a8209f9b15
|
||||
@@ -2327,26 +2439,46 @@ trackedFiles:
|
||||
id: e77acb454265
|
||||
last_write_checksum: sha1:d202a60f54527df1cb36f42c82ae3bc09b62709c
|
||||
pristine_git_object: be1d53bff0a2f0e14f63dea5b4fd07fefba1fd1e
|
||||
docs/models/product.md:
|
||||
id: c91436bbe13a
|
||||
last_write_checksum: sha1:fd290664e9d7488f6a9fe84f5770a4d052811bd6
|
||||
pristine_git_object: b2b4090528d8f4f0dbeabeef7b6de34023014b3b
|
||||
docs/models/productdisplay.md:
|
||||
id: b771ae8c7ea7
|
||||
last_write_checksum: sha1:1c08ac7aff28d817c0a0f62a581c3d2de0d5f63e
|
||||
pristine_git_object: 22e14f97a475eec1b273ba6e10063f0e777aa6b2
|
||||
docs/models/productscenario.md:
|
||||
id: ab3587084a21
|
||||
last_write_checksum: sha1:4090a2b39d577ba7ecd10ed04db44bdac397c084
|
||||
pristine_git_object: 841951cf130f1c9888da04071cb3242024ed21ca
|
||||
docs/models/producttype.md:
|
||||
id: 2c019befb41d
|
||||
last_write_checksum: sha1:978c5475fae093e6622a67c300c4caa3ca4f5323
|
||||
pristine_git_object: 9bdbe295958794c930d6056b4ecc8f1c448323cf
|
||||
docs/models/properties.md:
|
||||
id: 78b1b1d1b631
|
||||
last_write_checksum: sha1:05f671c654e750d3433fd757475bb830b2dcf0e8
|
||||
pristine_git_object: e0cb2a68e82dc623b85a3c61b3cc6e00d219512e
|
||||
docs/models/product1.md:
|
||||
id: 880ca8ae9886
|
||||
last_write_checksum: sha1:d6c959243c6b293682d7faed288627aca8b42712
|
||||
pristine_git_object: 555d0ec5c226b413aebb505ac316c7a14cf1fc4b
|
||||
docs/models/product2.md:
|
||||
id: 6262b044d234
|
||||
last_write_checksum: sha1:d650f24a1fee7d7b93f1f3d1f0c3a9b727b5f111
|
||||
pristine_git_object: c1b81dedf250c04788acef9878b406b03b3747cc
|
||||
docs/models/productdisplay1.md:
|
||||
id: b5bdefcde7af
|
||||
last_write_checksum: sha1:4cbda567685f39d23b4a83d5a9bc20c4bf2fa21b
|
||||
pristine_git_object: f3444e78655c30e33da40a161e1c49d7c521091d
|
||||
docs/models/productdisplay2.md:
|
||||
id: e26b9d85efee
|
||||
last_write_checksum: sha1:5098930c9f68698ce3d5fe3908933adff97fb26e
|
||||
pristine_git_object: 63f96b99a45a79096ba98ea391d53dfd0f024714
|
||||
docs/models/productscenario1.md:
|
||||
id: be02b2824767
|
||||
last_write_checksum: sha1:e7e5a8d90f9842e0b4bb8fbc1add7d45fd3dbe9a
|
||||
pristine_git_object: 05b283366f3ca4378d1064614d5ad4ffd05f84cf
|
||||
docs/models/productscenario2.md:
|
||||
id: cd2037004071
|
||||
last_write_checksum: sha1:f92baa56055e04b83769e10436164272d2de1475
|
||||
pristine_git_object: 40b2cd7a3388dc58bc4d66417a2e73818a6f7dbd
|
||||
docs/models/producttype1.md:
|
||||
id: e0dd53b19892
|
||||
last_write_checksum: sha1:9dfa73f469c85cbad98052ba0316832420087a62
|
||||
pristine_git_object: 9aaccc6d7bcc0f25063f0a3bc6fca373a608e038
|
||||
docs/models/producttype2.md:
|
||||
id: ae894ce9a5a8
|
||||
last_write_checksum: sha1:283f530bb62921ffc13dc1d6b5fa2ead3ac45d1b
|
||||
pristine_git_object: e275127be2daabf150cb8cd0b30d91e12560d8b9
|
||||
docs/models/properties1.md:
|
||||
id: d1dd750f2ed3
|
||||
last_write_checksum: sha1:04ff6f4e08b9ab062ee696c12932926e3902a916
|
||||
pristine_git_object: 6cb155bd48cd5f90a256b7526fa4ce23425b241d
|
||||
docs/models/properties2.md:
|
||||
id: 3ada091965bd
|
||||
last_write_checksum: sha1:e0d1d6b0cbf5c6eb202a0e3fcb2a197cca500388
|
||||
pristine_git_object: 6b0ee07d823098c850632ebaae8f35fa23980d12
|
||||
docs/models/purchase.md:
|
||||
id: f872769b6939
|
||||
last_write_checksum: sha1:b250603c69b08d953b6f2dde179eec8606d27ef9
|
||||
@@ -2383,10 +2515,14 @@ trackedFiles:
|
||||
id: 338992fe95d5
|
||||
last_write_checksum: sha1:224b80dbd92ef68bd770b3a80bf937ac43733556
|
||||
pristine_git_object: 8b34bbb0cd357bcc79eb45b0e7f4ce9b6399f846
|
||||
docs/models/scenario.md:
|
||||
id: e3aad8ab5efa
|
||||
last_write_checksum: sha1:6ce9a6e38f0a02622ae273bef4c8a6daa91794fc
|
||||
pristine_git_object: b1f3a49d0d84ad314bb2103a706454e1314edc06
|
||||
docs/models/scenario1.md:
|
||||
id: 46a671d6aaa0
|
||||
last_write_checksum: sha1:b12d6dabe5eb22a82e63c72f97b268a6f9516e8f
|
||||
pristine_git_object: 0871c0cf209022c2a17de861b7948353b0ef0954
|
||||
docs/models/scenario2.md:
|
||||
id: c2fda7f528b7
|
||||
last_write_checksum: sha1:3db048ac30765f87c795aa59011ee93c2fbd2497
|
||||
pristine_git_object: e0b4637eb68430769deed470af4e6e509c338df1
|
||||
docs/models/security.md:
|
||||
id: 452e4d4eb67a
|
||||
last_write_checksum: sha1:64787360e0bddbe1d2d2ede91992fa1a27c15a0e
|
||||
@@ -2529,8 +2665,16 @@ trackedFiles:
|
||||
pristine_git_object: 55d736bf4922089b3156933234268f3bfacb3b78
|
||||
docs/models/trackresponse.md:
|
||||
id: 0b465752b71b
|
||||
last_write_checksum: sha1:37b7e626597751d93bde3c9e2047bd018bcce2d5
|
||||
pristine_git_object: 6d87707e85629d47a486076ba978d5b8dcbf9191
|
||||
last_write_checksum: sha1:bf22d01dbadd9dfab8870a13ab4106d7b4b6ff6c
|
||||
pristine_git_object: b548eba246cbd9768b27415845b1fe14bd83a53e
|
||||
docs/models/trackresponsebody1.md:
|
||||
id: 5433fe0529e2
|
||||
last_write_checksum: sha1:3d680a6c081035885fbfa2918a0537559e5cd505
|
||||
pristine_git_object: 6f82fbbeb2dbe8c0deedb234fc8b122640060338
|
||||
docs/models/trackresponsebody2.md:
|
||||
id: 9687c70be905
|
||||
last_write_checksum: sha1:9cb78d68a63641993bd50334d4bc464cbb38b777
|
||||
pristine_git_object: 6dfb1e108b35f12c773cb4091d0c561c13596d13
|
||||
docs/models/trialsused.md:
|
||||
id: d3a87e402a87
|
||||
last_write_checksum: sha1:e94b335fde33fa867d83a085af54e56e003b468d
|
||||
@@ -2815,6 +2959,14 @@ trackedFiles:
|
||||
id: 1f6a0cc6dd9d
|
||||
last_write_checksum: sha1:1daaa2ce4ac4ec4dee50322a96f784fb93c7bb55
|
||||
pristine_git_object: b374ca2fe3d81b9837259cbd754be60742de24e9
|
||||
docs/models/updateplanconfigrequest.md:
|
||||
id: 80ba7d5168b1
|
||||
last_write_checksum: sha1:315b7bddd1a8af9348cf8677143676ba503b2c1a
|
||||
pristine_git_object: 32ef9bc0ff5834a9fc7ffce5593a4bcc6c07be46
|
||||
docs/models/updateplanconfigresponse.md:
|
||||
id: 5304569a9222
|
||||
last_write_checksum: sha1:f368827d2c9a5b3afe9de5c09b6b1d346bae594d
|
||||
pristine_git_object: da957864b3e8eceeb730374d39df9d651dfe4106
|
||||
docs/models/updateplancreditschema.md:
|
||||
id: 00c090e1bf26
|
||||
last_write_checksum: sha1:38829677cb91237900845a612c71c5341cecb59a
|
||||
@@ -2889,8 +3041,8 @@ trackedFiles:
|
||||
pristine_git_object: 0c2d7187551a45b5d678265295d3521f5286c11c
|
||||
docs/models/updateplanparams.md:
|
||||
id: ca9b432d1066
|
||||
last_write_checksum: sha1:3626993a9b2e8d98b67aeb5b39ae321e6bb90f3a
|
||||
pristine_git_object: 2e372097207c11b918831be0892feada7c3431c7
|
||||
last_write_checksum: sha1:225a0b5951be0fb79bfb5d879f42e26d22be4130
|
||||
pristine_git_object: 5d8f7d9d4c420b32d2b18d9268ab80e07fed78eb
|
||||
docs/models/updateplanplanitem.md:
|
||||
id: c4cfe67e1766
|
||||
last_write_checksum: sha1:b7569bd3091d19bb02b4c231ee1d09d7a704fe0c
|
||||
@@ -2941,8 +3093,8 @@ trackedFiles:
|
||||
pristine_git_object: 2b4c66a3228472b73baa794aa68198ac5ecd0195
|
||||
docs/models/updateplanresponse.md:
|
||||
id: 1e9b63fce660
|
||||
last_write_checksum: sha1:834d9eb74081052e10a1eb48f97bdc9179c4b1aa
|
||||
pristine_git_object: 15046100d10460c95660651bbad3d87dea398ca5
|
||||
last_write_checksum: sha1:c8598b6f5fe339f3a869367989ad65226fe0cde5
|
||||
pristine_git_object: 5242964c1ffda11766a01a9519eb006b7fe02029
|
||||
docs/models/updateplanrolloverrequest.md:
|
||||
id: 9b30d0aaa790
|
||||
last_write_checksum: sha1:d1f31d01c74db299c9ddae8c32acf06557264694
|
||||
@@ -2979,10 +3131,14 @@ trackedFiles:
|
||||
id: df1b06618f8b
|
||||
last_write_checksum: sha1:634719e86ea2e447c7941ab3f97e73085fec5a9c
|
||||
pristine_git_object: 33df96928b93214a0b58a3e2f8ef16b918814385
|
||||
docs/models/usagemodel.md:
|
||||
id: 1e12a2a8fc52
|
||||
last_write_checksum: sha1:0aae39e704f2d84d1ca66c0ff3e0bbdd5dba61cf
|
||||
pristine_git_object: 1c478ab31dc35e34bc4fc7eee7c0078f31ceb35b
|
||||
docs/models/usagemodel1.md:
|
||||
id: 864df93491f4
|
||||
last_write_checksum: sha1:827dcdb8d779f182baee1f360a876b65a9117c87
|
||||
pristine_git_object: 41ae4e03289340978b7065c4ff614595e51ae3a0
|
||||
docs/models/usagemodel2.md:
|
||||
id: 65400fe8ee98
|
||||
last_write_checksum: sha1:414d12034e1f85247a15bda7059851677f7e7d93
|
||||
pristine_git_object: fd7013f50fb7fb379249d9675fb4430be17734a6
|
||||
docs/models/utils/retryconfig.md:
|
||||
id: 4343ac43161c
|
||||
last_write_checksum: sha1:562c0f21e308ad10c27f85f75704c15592c6929d
|
||||
@@ -3017,8 +3173,8 @@ trackedFiles:
|
||||
pristine_git_object: f15f599301140e1f7af1a6e1c9462464b71a4437
|
||||
docs/sdks/plans/README.md:
|
||||
id: 2d8c741fff57
|
||||
last_write_checksum: sha1:0f0af70299bc12978b582541b95142bb4f803a51
|
||||
pristine_git_object: 6c88f9eaa6d0307429509dbac6b2cc27fe0a70b9
|
||||
last_write_checksum: sha1:96bf852186e6fd82813455c497f14c930aa8e82d
|
||||
pristine_git_object: fecddf6bbc7ff66c74a2165dfca7d86ddba4a9de
|
||||
docs/sdks/referrals/README.md:
|
||||
id: 50b71f597f20
|
||||
last_write_checksum: sha1:583c44cd70208e8ea9e286b54a5b82f837c8a4be
|
||||
@@ -3061,8 +3217,8 @@ trackedFiles:
|
||||
pristine_git_object: 0628b046b07d0182a12d174657e7cd10b0afbee1
|
||||
src/autumn_sdk/balances.py:
|
||||
id: 0a15be654dad
|
||||
last_write_checksum: sha1:edc265ccebf34f6505a500dc0bdf19369d934367
|
||||
pristine_git_object: d78893a6866c975556c16fd01e348c9f423109c6
|
||||
last_write_checksum: sha1:a80cd6dff1eb264c51674962c6d459cf7d692211
|
||||
pristine_git_object: 930c70fbcf914339d9357542673c070deb45655c
|
||||
src/autumn_sdk/basesdk.py:
|
||||
id: 8c9c35fe744d
|
||||
last_write_checksum: sha1:f0ea7a4f9bd2261c88a1a5e20e7e734eb2e2e289
|
||||
@@ -3113,8 +3269,8 @@ trackedFiles:
|
||||
pristine_git_object: 89560b566073785535643e694c112bedbd3db13d
|
||||
src/autumn_sdk/models/__init__.py:
|
||||
id: bcf3802243ff
|
||||
last_write_checksum: sha1:629eca8bca35625d3ce2dc8807c7e13ed927db22
|
||||
pristine_git_object: 7477478dd4fd5db160cb6cbd0cfbe065d9a8c27c
|
||||
last_write_checksum: sha1:beabf5b885ffc26f4f81a5d43c4797c4972d59ee
|
||||
pristine_git_object: ec229380082a82f82fdff81097ceb1a933656623
|
||||
src/autumn_sdk/models/aggregateeventsop.py:
|
||||
id: 01321099f2a5
|
||||
last_write_checksum: sha1:b3f1de2b9cf9a0365863f0e6cf9c10e793f52a42
|
||||
@@ -3133,8 +3289,8 @@ trackedFiles:
|
||||
pristine_git_object: 816c3b74b33b1e0fccd291d0f5ab65cee0a9c09c
|
||||
src/autumn_sdk/models/checkop.py:
|
||||
id: 31c2f84723c6
|
||||
last_write_checksum: sha1:9302e9dec9331bb7d5b119391193ca05846f53eb
|
||||
pristine_git_object: 0dc0e1759aa5ffaaf41922594943de1c29a7461c
|
||||
last_write_checksum: sha1:461aa8fedefd23fa54a80e8acc8ce738725289c5
|
||||
pristine_git_object: 034c82bab85f15d36d5b97854a79338cdffe3dbb
|
||||
src/autumn_sdk/models/createbalanceop.py:
|
||||
id: 27daf4da75bf
|
||||
last_write_checksum: sha1:b6da2d7778cd4b98f0e6612810726512203eb1de
|
||||
@@ -3149,8 +3305,8 @@ trackedFiles:
|
||||
pristine_git_object: 35a43e4dd6ea06d0ffbbde5ffaead959ce207632
|
||||
src/autumn_sdk/models/createplanop.py:
|
||||
id: 077e6c7db2ad
|
||||
last_write_checksum: sha1:dc2fe307f4fbe3eaccf27f9786e8cdc7eb9acb74
|
||||
pristine_git_object: 08653b450ec57b802c989823a8015aacc77d360e
|
||||
last_write_checksum: sha1:2a61e45a84d8095c6ae72ac3c892d75e1ed0c492
|
||||
pristine_git_object: 7f856826555d47d71d0400dac57a812343e9aba4
|
||||
src/autumn_sdk/models/createreferralcodeop.py:
|
||||
id: 2f5f7b136c39
|
||||
last_write_checksum: sha1:aee36f911153fc0dab9fd096dbb82d1083a61d28
|
||||
@@ -3185,8 +3341,8 @@ trackedFiles:
|
||||
pristine_git_object: 8399927609dfaba9ca603a77e3f85ada3861d2f2
|
||||
src/autumn_sdk/models/finalizelockop.py:
|
||||
id: 8ae2484b0916
|
||||
last_write_checksum: sha1:e8db3e126ea7a98e56c992067ad838474aaaea90
|
||||
pristine_git_object: 5ca71e3f0ae7d38ab7d8c37d6a1dc3e4a6b04ef5
|
||||
last_write_checksum: sha1:50898394734e6e9a366363ef64dd6ac917d61ad2
|
||||
pristine_git_object: d7744bc3f223baddeed24f3e14315d9f6da0b84d
|
||||
src/autumn_sdk/models/getentityop.py:
|
||||
id: 6a624594b41f
|
||||
last_write_checksum: sha1:2cc7bfc4ad25eb82d3563ee469e08f336e0af982
|
||||
@@ -3201,8 +3357,8 @@ trackedFiles:
|
||||
pristine_git_object: 94a67732b0583b0df4e48ff6a4e3a28965ecfcd5
|
||||
src/autumn_sdk/models/getplanop.py:
|
||||
id: 590fb77ac88d
|
||||
last_write_checksum: sha1:9cb5b3c375a197f728dc809297fceba318b4acc8
|
||||
pristine_git_object: 8a670ec1dd591fdfc8ffe19fe54a402466391996
|
||||
last_write_checksum: sha1:383238b15583a631ec9331155c42fb334c40be27
|
||||
pristine_git_object: 9a97dbea6cfce097ee20542b6d49891c99d4f1ac
|
||||
src/autumn_sdk/models/internal/__init__.py:
|
||||
id: 2906fe7f2cde
|
||||
last_write_checksum: sha1:1905b58b74ecc52346d8f5c24ded2b6d6e1dad4a
|
||||
@@ -3225,8 +3381,8 @@ trackedFiles:
|
||||
pristine_git_object: 710a3e36719b112a82fa98903073bb090f72c2ec
|
||||
src/autumn_sdk/models/listplansop.py:
|
||||
id: fdf892c403f4
|
||||
last_write_checksum: sha1:4b317d6b7e465724b66783785d412f75a2c70f80
|
||||
pristine_git_object: f2e08e6d24a51cabf49246d139479e6f460936f4
|
||||
last_write_checksum: sha1:0db43cdf89226124955a5101a9425c95e5deeeaa
|
||||
pristine_git_object: 4cd6eec90079ce568fbdca3ac9667812be1c536f
|
||||
src/autumn_sdk/models/multiattachop.py:
|
||||
id: dfdf7952c870
|
||||
last_write_checksum: sha1:46e43ce9cd5924cc6a32651c28328050cca539ce
|
||||
@@ -3237,8 +3393,8 @@ trackedFiles:
|
||||
pristine_git_object: 8383509aa89e0c11988baef8e424f5ae682d5c8e
|
||||
src/autumn_sdk/models/plan.py:
|
||||
id: f85c4e07540d
|
||||
last_write_checksum: sha1:a3fc4bdfc6dd8ca185287df5e2e664f9cbee2d9c
|
||||
pristine_git_object: 4fc3992c96cf04ab1b6c41350ba662e371a2d5be
|
||||
last_write_checksum: sha1:2894e5beecd256471bb46db0b50aa1381f6e54df
|
||||
pristine_git_object: d8fe9290927c4d94e23fc4311f72e94b90e4e296
|
||||
src/autumn_sdk/models/previewattachop.py:
|
||||
id: 2b361be4bfa8
|
||||
last_write_checksum: sha1:07547a8e750f8b392f1bb733afc330c799f36931
|
||||
@@ -3265,8 +3421,8 @@ trackedFiles:
|
||||
pristine_git_object: 4d9cef97f042a02fc1ca351768dbfe04587d97fd
|
||||
src/autumn_sdk/models/trackop.py:
|
||||
id: 2a744315e781
|
||||
last_write_checksum: sha1:e9f1d9c4bbfc47eb5c942f8cfca4a760818bf79d
|
||||
pristine_git_object: e3581f4139bb985c5c5c058754288bc340d022d1
|
||||
last_write_checksum: sha1:14a3673c9d5840cc222309d54e398e31929dcbca
|
||||
pristine_git_object: ae07cc3bff7029034f684d33e556ff3264958608
|
||||
src/autumn_sdk/models/updatebalanceop.py:
|
||||
id: cd80d90d4cae
|
||||
last_write_checksum: sha1:7b6b881cc82b937e93cfd58f17d7f3d83bdb39f1
|
||||
@@ -3285,12 +3441,12 @@ trackedFiles:
|
||||
pristine_git_object: 9507c8601dca2cefbc0b8b7d423a38a8272fe580
|
||||
src/autumn_sdk/models/updateplanop.py:
|
||||
id: 753ddf45ca40
|
||||
last_write_checksum: sha1:f094e05c9b9d43c4602ca6ab74f752313681fd4c
|
||||
pristine_git_object: bcbc6f6d46f9058a33ccd0262c81109d34762fe6
|
||||
last_write_checksum: sha1:a0f57e9ed1f28faff5debaa8aa1b60768aa68ee0
|
||||
pristine_git_object: 7afbc58a0709f37570f94ad4ee2831f3e99b6750
|
||||
src/autumn_sdk/plans.py:
|
||||
id: cf1ebabb687c
|
||||
last_write_checksum: sha1:44a5f21bcc8df9df4590ec75c3296e7c0b726323
|
||||
pristine_git_object: 2a4f4a66177a280259f1dd5c794f2684155781ef
|
||||
last_write_checksum: sha1:1baa525a65489921c371dede0cd70a3dd5fda07e
|
||||
pristine_git_object: 5942adc74d36e37c8fe69cd47a66ff05b9f3eb1a
|
||||
src/autumn_sdk/py.typed:
|
||||
id: 9b75cee1c007
|
||||
last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60
|
||||
@@ -3301,8 +3457,8 @@ trackedFiles:
|
||||
pristine_git_object: 4fde94822b61d8a600b721fcbda99116c0e7a6ad
|
||||
src/autumn_sdk/sdk.py:
|
||||
id: 9e733b372628
|
||||
last_write_checksum: sha1:5521b091986e3507f9dc990c9333412cb05e58c6
|
||||
pristine_git_object: 9b935d005c18378046c9209d5982fd4a8234fbcb
|
||||
last_write_checksum: sha1:539d7a68e17d782aaa17185c27d43322f572d4d2
|
||||
pristine_git_object: d1078f8612cc9f9a0dbb25eed621ba8974a22a7a
|
||||
src/autumn_sdk/sdkconfiguration.py:
|
||||
id: e65df2e44fc0
|
||||
last_write_checksum: sha1:233b710dff940202f00e389e0c8fa6a33f6ae7b4
|
||||
@@ -3555,7 +3711,7 @@ examples:
|
||||
application/json: {}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"list": [{"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4969.56, "billing_method": "usage_based", "max_purchase": 5540.05}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 7445.4, "billing_method": "usage_based", "max_purchase": 66.27}, "display": {"primary_text": "<value>"}}], "created_at": 3936.86, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}]}
|
||||
application/json: {"list": [{"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4969.56, "billing_method": "usage_based", "max_purchase": 5540.05}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 7445.4, "billing_method": "usage_based", "max_purchase": 66.27}, "display": {"primary_text": "<value>"}}], "created_at": 3936.86, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}]}
|
||||
previewAttach:
|
||||
speakeasy-default-preview-attach:
|
||||
parameters:
|
||||
@@ -3666,6 +3822,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"allowed": true, "customer_id": "cus_123", "entity_id": null, "required_balance": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}, "flag": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}
|
||||
"202":
|
||||
application/json: {"allowed": true, "customer_id": "cus_123", "entity_id": null, "required_balance": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}, "flag": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}
|
||||
track:
|
||||
speakeasy-default-track:
|
||||
parameters:
|
||||
@@ -3676,6 +3834,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"customer_id": "cus_123", "value": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}
|
||||
"202":
|
||||
application/json: {"customer_id": "cus_123", "value": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}
|
||||
eventsList:
|
||||
speakeasy-default-events-list:
|
||||
parameters:
|
||||
@@ -3823,7 +3983,7 @@ examples:
|
||||
application/json: {"plan_id": "free_plan", "group": "", "name": "Free", "add_on": false, "auto_enable": true, "items": [{"feature_id": "messages", "included": 100, "reset": {"interval": "month"}}]}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": false, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4655.71, "billing_method": "prepaid", "max_purchase": 8104.69}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5104.62, "billing_method": "prepaid", "max_purchase": null}, "display": {"primary_text": "<value>"}}], "created_at": 1016.83, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": false, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4655.71, "billing_method": "prepaid", "max_purchase": 8104.69}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5104.62, "billing_method": "prepaid", "max_purchase": null}, "display": {"primary_text": "<value>"}}], "created_at": 1016.83, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}
|
||||
getPlan:
|
||||
speakeasy-default-get-plan:
|
||||
parameters:
|
||||
@@ -3833,7 +3993,7 @@ examples:
|
||||
application/json: {"plan_id": "pro_plan"}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 6216.63, "billing_method": "usage_based", "max_purchase": 9351.86}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5235.67, "billing_method": "usage_based", "max_purchase": 9347.74}, "display": {"primary_text": "<value>"}}], "created_at": 1101.73, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 6216.63, "billing_method": "usage_based", "max_purchase": 9351.86}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5235.67, "billing_method": "usage_based", "max_purchase": 9347.74}, "display": {"primary_text": "<value>"}}], "created_at": 1101.73, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}
|
||||
updatePlan:
|
||||
speakeasy-default-update-plan:
|
||||
parameters:
|
||||
@@ -3843,7 +4003,7 @@ examples:
|
||||
application/json: {"plan_id": "pro_plan", "group": "", "name": "Pro Plan (Updated)", "price": {"amount": 15, "interval": "month"}, "archived": false}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": true, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4113.21, "billing_method": "usage_based", "max_purchase": 5381.55}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 3844.43, "billing_method": "prepaid", "max_purchase": 1075.8}, "display": {"primary_text": "<value>"}}], "created_at": 5898.47, "env": "sandbox", "archived": false, "base_variant_id": null}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": true, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4113.21, "billing_method": "usage_based", "max_purchase": 5381.55}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 3844.43, "billing_method": "prepaid", "max_purchase": 1075.8}, "display": {"primary_text": "<value>"}}], "created_at": 5898.47, "env": "sandbox", "archived": false, "base_variant_id": null, "config": {"ignore_past_due": false}}
|
||||
deletePlan:
|
||||
speakeasy-default-delete-plan:
|
||||
parameters:
|
||||
@@ -3914,6 +4074,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"success": true}
|
||||
"202":
|
||||
application/json: {"success": true}
|
||||
updateEntity:
|
||||
speakeasy-default-update-entity:
|
||||
parameters:
|
||||
|
||||
@@ -778,7 +778,9 @@ class Balances(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.FinalizeLockResponse, http_res)
|
||||
return unmarshal_json_response(models.FinalizeLockResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.FinalizeLockResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
@@ -877,7 +879,9 @@ class Balances(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.FinalizeLockResponse, http_res)
|
||||
return unmarshal_json_response(models.FinalizeLockResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.FinalizeLockResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
|
||||
@@ -158,53 +158,96 @@ if TYPE_CHECKING:
|
||||
UpdateSubscriptionParamsTypedDict,
|
||||
)
|
||||
from .checkop import (
|
||||
CheckConfig,
|
||||
CheckConfigTypedDict,
|
||||
CheckCreditSchema,
|
||||
CheckCreditSchemaTypedDict,
|
||||
CheckEnv,
|
||||
CheckFeature,
|
||||
CheckFeatureTypedDict,
|
||||
CheckFreeTrial,
|
||||
CheckFreeTrialTypedDict,
|
||||
CheckConfig1,
|
||||
CheckConfig1TypedDict,
|
||||
CheckConfig2,
|
||||
CheckConfig2TypedDict,
|
||||
CheckCreditSchema1,
|
||||
CheckCreditSchema1TypedDict,
|
||||
CheckCreditSchema2,
|
||||
CheckCreditSchema2TypedDict,
|
||||
CheckEnv1,
|
||||
CheckEnv2,
|
||||
CheckFeature1,
|
||||
CheckFeature1TypedDict,
|
||||
CheckFeature2,
|
||||
CheckFeature2TypedDict,
|
||||
CheckFreeTrial1,
|
||||
CheckFreeTrial1TypedDict,
|
||||
CheckFreeTrial2,
|
||||
CheckFreeTrial2TypedDict,
|
||||
CheckGlobals,
|
||||
CheckGlobalsTypedDict,
|
||||
CheckInterval,
|
||||
CheckItem,
|
||||
CheckItemTypedDict,
|
||||
CheckInterval1,
|
||||
CheckInterval2,
|
||||
CheckItem1,
|
||||
CheckItem1TypedDict,
|
||||
CheckItem2,
|
||||
CheckItem2TypedDict,
|
||||
CheckLock,
|
||||
CheckLockTypedDict,
|
||||
CheckOnDecrease,
|
||||
CheckOnIncrease,
|
||||
CheckOnDecrease1,
|
||||
CheckOnDecrease2,
|
||||
CheckOnIncrease1,
|
||||
CheckOnIncrease2,
|
||||
CheckParams,
|
||||
CheckParamsTypedDict,
|
||||
CheckResponse,
|
||||
CheckResponseBody1,
|
||||
CheckResponseBody1TypedDict,
|
||||
CheckResponseBody2,
|
||||
CheckResponseBody2TypedDict,
|
||||
CheckResponseTypedDict,
|
||||
CheckRollover,
|
||||
CheckRolloverTypedDict,
|
||||
CheckTierBehavior,
|
||||
ConfigDuration,
|
||||
FeatureType,
|
||||
Flag,
|
||||
FlagDisplay,
|
||||
FlagDisplayTypedDict,
|
||||
FlagType,
|
||||
FlagTypedDict,
|
||||
FreeTrialDuration,
|
||||
IncludedUsage,
|
||||
IncludedUsageTypedDict,
|
||||
Preview,
|
||||
PreviewTypedDict,
|
||||
Product,
|
||||
ProductDisplay,
|
||||
ProductDisplayTypedDict,
|
||||
ProductScenario,
|
||||
ProductType,
|
||||
ProductTypedDict,
|
||||
Properties,
|
||||
PropertiesTypedDict,
|
||||
Scenario,
|
||||
UsageModel,
|
||||
CheckRollover1,
|
||||
CheckRollover1TypedDict,
|
||||
CheckRollover2,
|
||||
CheckRollover2TypedDict,
|
||||
CheckTierBehavior1,
|
||||
CheckTierBehavior2,
|
||||
ConfigDuration1,
|
||||
ConfigDuration2,
|
||||
FeatureType1,
|
||||
FeatureType2,
|
||||
Flag1,
|
||||
Flag1TypedDict,
|
||||
Flag2,
|
||||
Flag2TypedDict,
|
||||
FlagDisplay1,
|
||||
FlagDisplay1TypedDict,
|
||||
FlagDisplay2,
|
||||
FlagDisplay2TypedDict,
|
||||
FlagType1,
|
||||
FlagType2,
|
||||
FreeTrialDuration1,
|
||||
FreeTrialDuration2,
|
||||
IncludedUsage1,
|
||||
IncludedUsage1TypedDict,
|
||||
IncludedUsage2,
|
||||
IncludedUsage2TypedDict,
|
||||
Preview1,
|
||||
Preview1TypedDict,
|
||||
Preview2,
|
||||
Preview2TypedDict,
|
||||
Product1,
|
||||
Product1TypedDict,
|
||||
Product2,
|
||||
Product2TypedDict,
|
||||
ProductDisplay1,
|
||||
ProductDisplay1TypedDict,
|
||||
ProductDisplay2,
|
||||
ProductDisplay2TypedDict,
|
||||
ProductScenario1,
|
||||
ProductScenario2,
|
||||
ProductType1,
|
||||
ProductType2,
|
||||
Properties1,
|
||||
Properties1TypedDict,
|
||||
Properties2,
|
||||
Properties2TypedDict,
|
||||
Scenario1,
|
||||
Scenario2,
|
||||
UsageModel1,
|
||||
UsageModel2,
|
||||
)
|
||||
from .createbalanceop import (
|
||||
CreateBalanceDuration,
|
||||
@@ -285,6 +328,10 @@ if TYPE_CHECKING:
|
||||
CreatePlanAttachAction,
|
||||
CreatePlanBillingMethodRequest,
|
||||
CreatePlanBillingMethodResponse,
|
||||
CreatePlanConfigRequest,
|
||||
CreatePlanConfigRequestTypedDict,
|
||||
CreatePlanConfigResponse,
|
||||
CreatePlanConfigResponseTypedDict,
|
||||
CreatePlanCreditSchema,
|
||||
CreatePlanCreditSchemaTypedDict,
|
||||
CreatePlanCustomerEligibility,
|
||||
@@ -479,6 +526,10 @@ if TYPE_CHECKING:
|
||||
FinalizeLockGlobals,
|
||||
FinalizeLockGlobalsTypedDict,
|
||||
FinalizeLockResponse,
|
||||
FinalizeLockResponseBody1,
|
||||
FinalizeLockResponseBody1TypedDict,
|
||||
FinalizeLockResponseBody2,
|
||||
FinalizeLockResponseBody2TypedDict,
|
||||
FinalizeLockResponseTypedDict,
|
||||
)
|
||||
from .getentityop import (
|
||||
@@ -553,6 +604,8 @@ if TYPE_CHECKING:
|
||||
from .getplanop import (
|
||||
GetPlanAttachAction,
|
||||
GetPlanBillingMethod,
|
||||
GetPlanConfig,
|
||||
GetPlanConfigTypedDict,
|
||||
GetPlanCreditSchema,
|
||||
GetPlanCreditSchemaTypedDict,
|
||||
GetPlanCustomerEligibility,
|
||||
@@ -670,6 +723,8 @@ if TYPE_CHECKING:
|
||||
from .listplansop import (
|
||||
ListPlansAttachAction,
|
||||
ListPlansBillingMethod,
|
||||
ListPlansConfig,
|
||||
ListPlansConfigTypedDict,
|
||||
ListPlansCreditSchema,
|
||||
ListPlansCreditSchemaTypedDict,
|
||||
ListPlansCustomerEligibility,
|
||||
@@ -793,6 +848,8 @@ if TYPE_CHECKING:
|
||||
ItemTypedDict,
|
||||
Plan,
|
||||
PlanBillingMethod,
|
||||
PlanConfig,
|
||||
PlanConfigTypedDict,
|
||||
PlanCreditSchema,
|
||||
PlanCreditSchemaTypedDict,
|
||||
PlanDurationType,
|
||||
@@ -1124,6 +1181,10 @@ if TYPE_CHECKING:
|
||||
TrackParams,
|
||||
TrackParamsTypedDict,
|
||||
TrackResponse,
|
||||
TrackResponseBody1,
|
||||
TrackResponseBody1TypedDict,
|
||||
TrackResponseBody2,
|
||||
TrackResponseBody2TypedDict,
|
||||
TrackResponseTypedDict,
|
||||
)
|
||||
from .updatebalanceop import (
|
||||
@@ -1257,6 +1318,10 @@ if TYPE_CHECKING:
|
||||
UpdatePlanBasePriceTypedDict,
|
||||
UpdatePlanBillingMethodRequest,
|
||||
UpdatePlanBillingMethodResponse,
|
||||
UpdatePlanConfigRequest,
|
||||
UpdatePlanConfigRequestTypedDict,
|
||||
UpdatePlanConfigResponse,
|
||||
UpdatePlanConfigResponseTypedDict,
|
||||
UpdatePlanCreditSchema,
|
||||
UpdatePlanCreditSchemaTypedDict,
|
||||
UpdatePlanCustomerEligibility,
|
||||
@@ -1461,32 +1526,54 @@ __all__ = [
|
||||
"BinSize",
|
||||
"Breakdown",
|
||||
"BreakdownTypedDict",
|
||||
"CheckConfig",
|
||||
"CheckConfigTypedDict",
|
||||
"CheckCreditSchema",
|
||||
"CheckCreditSchemaTypedDict",
|
||||
"CheckEnv",
|
||||
"CheckFeature",
|
||||
"CheckFeatureTypedDict",
|
||||
"CheckFreeTrial",
|
||||
"CheckFreeTrialTypedDict",
|
||||
"CheckConfig1",
|
||||
"CheckConfig1TypedDict",
|
||||
"CheckConfig2",
|
||||
"CheckConfig2TypedDict",
|
||||
"CheckCreditSchema1",
|
||||
"CheckCreditSchema1TypedDict",
|
||||
"CheckCreditSchema2",
|
||||
"CheckCreditSchema2TypedDict",
|
||||
"CheckEnv1",
|
||||
"CheckEnv2",
|
||||
"CheckFeature1",
|
||||
"CheckFeature1TypedDict",
|
||||
"CheckFeature2",
|
||||
"CheckFeature2TypedDict",
|
||||
"CheckFreeTrial1",
|
||||
"CheckFreeTrial1TypedDict",
|
||||
"CheckFreeTrial2",
|
||||
"CheckFreeTrial2TypedDict",
|
||||
"CheckGlobals",
|
||||
"CheckGlobalsTypedDict",
|
||||
"CheckInterval",
|
||||
"CheckItem",
|
||||
"CheckItemTypedDict",
|
||||
"CheckInterval1",
|
||||
"CheckInterval2",
|
||||
"CheckItem1",
|
||||
"CheckItem1TypedDict",
|
||||
"CheckItem2",
|
||||
"CheckItem2TypedDict",
|
||||
"CheckLock",
|
||||
"CheckLockTypedDict",
|
||||
"CheckOnDecrease",
|
||||
"CheckOnIncrease",
|
||||
"CheckOnDecrease1",
|
||||
"CheckOnDecrease2",
|
||||
"CheckOnIncrease1",
|
||||
"CheckOnIncrease2",
|
||||
"CheckParams",
|
||||
"CheckParamsTypedDict",
|
||||
"CheckResponse",
|
||||
"CheckResponseBody1",
|
||||
"CheckResponseBody1TypedDict",
|
||||
"CheckResponseBody2",
|
||||
"CheckResponseBody2TypedDict",
|
||||
"CheckResponseTypedDict",
|
||||
"CheckRollover",
|
||||
"CheckRolloverTypedDict",
|
||||
"CheckTierBehavior",
|
||||
"ConfigDuration",
|
||||
"CheckRollover1",
|
||||
"CheckRollover1TypedDict",
|
||||
"CheckRollover2",
|
||||
"CheckRollover2TypedDict",
|
||||
"CheckTierBehavior1",
|
||||
"CheckTierBehavior2",
|
||||
"ConfigDuration1",
|
||||
"ConfigDuration2",
|
||||
"CreateBalanceDuration",
|
||||
"CreateBalanceGlobals",
|
||||
"CreateBalanceGlobalsTypedDict",
|
||||
@@ -1559,6 +1646,10 @@ __all__ = [
|
||||
"CreatePlanAttachAction",
|
||||
"CreatePlanBillingMethodRequest",
|
||||
"CreatePlanBillingMethodResponse",
|
||||
"CreatePlanConfigRequest",
|
||||
"CreatePlanConfigRequestTypedDict",
|
||||
"CreatePlanConfigResponse",
|
||||
"CreatePlanConfigResponseTypedDict",
|
||||
"CreatePlanCreditSchema",
|
||||
"CreatePlanCreditSchemaTypedDict",
|
||||
"CreatePlanCustomerEligibility",
|
||||
@@ -1717,22 +1808,33 @@ __all__ = [
|
||||
"EventsListParams",
|
||||
"EventsListParamsTypedDict",
|
||||
"ExpiryDurationType",
|
||||
"FeatureType",
|
||||
"FeatureType1",
|
||||
"FeatureType2",
|
||||
"FinalizeBalanceParams",
|
||||
"FinalizeBalanceParamsTypedDict",
|
||||
"FinalizeLockGlobals",
|
||||
"FinalizeLockGlobalsTypedDict",
|
||||
"FinalizeLockResponse",
|
||||
"FinalizeLockResponseBody1",
|
||||
"FinalizeLockResponseBody1TypedDict",
|
||||
"FinalizeLockResponseBody2",
|
||||
"FinalizeLockResponseBody2TypedDict",
|
||||
"FinalizeLockResponseTypedDict",
|
||||
"Flag",
|
||||
"FlagDisplay",
|
||||
"FlagDisplayTypedDict",
|
||||
"FlagType",
|
||||
"FlagTypedDict",
|
||||
"Flag1",
|
||||
"Flag1TypedDict",
|
||||
"Flag2",
|
||||
"Flag2TypedDict",
|
||||
"FlagDisplay1",
|
||||
"FlagDisplay1TypedDict",
|
||||
"FlagDisplay2",
|
||||
"FlagDisplay2TypedDict",
|
||||
"FlagType1",
|
||||
"FlagType2",
|
||||
"Flags",
|
||||
"FlagsTypedDict",
|
||||
"FreeTrial",
|
||||
"FreeTrialDuration",
|
||||
"FreeTrialDuration1",
|
||||
"FreeTrialDuration2",
|
||||
"FreeTrialRequest",
|
||||
"FreeTrialRequestTypedDict",
|
||||
"FreeTrialTypedDict",
|
||||
@@ -1801,6 +1903,8 @@ __all__ = [
|
||||
"GetOrCreateCustomerUsageAlertTypedDict",
|
||||
"GetPlanAttachAction",
|
||||
"GetPlanBillingMethod",
|
||||
"GetPlanConfig",
|
||||
"GetPlanConfigTypedDict",
|
||||
"GetPlanCreditSchema",
|
||||
"GetPlanCreditSchemaTypedDict",
|
||||
"GetPlanCustomerEligibility",
|
||||
@@ -1840,8 +1944,10 @@ __all__ = [
|
||||
"GetPlanStatus",
|
||||
"GetPlanTierBehavior",
|
||||
"GetPlanType",
|
||||
"IncludedUsage",
|
||||
"IncludedUsageTypedDict",
|
||||
"IncludedUsage1",
|
||||
"IncludedUsage1TypedDict",
|
||||
"IncludedUsage2",
|
||||
"IncludedUsage2TypedDict",
|
||||
"Intent",
|
||||
"Interval",
|
||||
"IntervalTypedDict",
|
||||
@@ -1915,6 +2021,8 @@ __all__ = [
|
||||
"ListFeaturesType",
|
||||
"ListPlansAttachAction",
|
||||
"ListPlansBillingMethod",
|
||||
"ListPlansConfig",
|
||||
"ListPlansConfigTypedDict",
|
||||
"ListPlansCreditSchema",
|
||||
"ListPlansCreditSchemaTypedDict",
|
||||
"ListPlansCustomerEligibility",
|
||||
@@ -2024,6 +2132,8 @@ __all__ = [
|
||||
"OpenCustomerPortalResponseTypedDict",
|
||||
"Plan",
|
||||
"PlanBillingMethod",
|
||||
"PlanConfig",
|
||||
"PlanConfigTypedDict",
|
||||
"PlanCreditSchema",
|
||||
"PlanCreditSchemaTypedDict",
|
||||
"PlanDurationType",
|
||||
@@ -2051,7 +2161,10 @@ __all__ = [
|
||||
"PlanTierBehavior",
|
||||
"PlanType",
|
||||
"PlanTypedDict",
|
||||
"Preview",
|
||||
"Preview1",
|
||||
"Preview1TypedDict",
|
||||
"Preview2",
|
||||
"Preview2TypedDict",
|
||||
"PreviewAttachAttachDiscount",
|
||||
"PreviewAttachAttachDiscountTypedDict",
|
||||
"PreviewAttachBasePrice",
|
||||
@@ -2211,7 +2324,6 @@ __all__ = [
|
||||
"PreviewMultiAttachUsageLineItemPeriod",
|
||||
"PreviewMultiAttachUsageLineItemPeriodTypedDict",
|
||||
"PreviewMultiAttachUsageLineItemTypedDict",
|
||||
"PreviewTypedDict",
|
||||
"PreviewUpdateAttachDiscount",
|
||||
"PreviewUpdateAttachDiscountTypedDict",
|
||||
"PreviewUpdateBasePrice",
|
||||
@@ -2285,14 +2397,22 @@ __all__ = [
|
||||
"PreviewUpdateUsageLineItemPeriodTypedDict",
|
||||
"PreviewUpdateUsageLineItemTypedDict",
|
||||
"Processor",
|
||||
"Product",
|
||||
"ProductDisplay",
|
||||
"ProductDisplayTypedDict",
|
||||
"ProductScenario",
|
||||
"ProductType",
|
||||
"ProductTypedDict",
|
||||
"Properties",
|
||||
"PropertiesTypedDict",
|
||||
"Product1",
|
||||
"Product1TypedDict",
|
||||
"Product2",
|
||||
"Product2TypedDict",
|
||||
"ProductDisplay1",
|
||||
"ProductDisplay1TypedDict",
|
||||
"ProductDisplay2",
|
||||
"ProductDisplay2TypedDict",
|
||||
"ProductScenario1",
|
||||
"ProductScenario2",
|
||||
"ProductType1",
|
||||
"ProductType2",
|
||||
"Properties1",
|
||||
"Properties1TypedDict",
|
||||
"Properties2",
|
||||
"Properties2TypedDict",
|
||||
"Purchase",
|
||||
"PurchaseTypedDict",
|
||||
"Range",
|
||||
@@ -2309,7 +2429,8 @@ __all__ = [
|
||||
"Rewards",
|
||||
"RewardsType",
|
||||
"RewardsTypedDict",
|
||||
"Scenario",
|
||||
"Scenario1",
|
||||
"Scenario2",
|
||||
"Security",
|
||||
"SecurityTypedDict",
|
||||
"SetupPaymentAttachDiscount",
|
||||
@@ -2370,6 +2491,10 @@ __all__ = [
|
||||
"TrackParams",
|
||||
"TrackParamsTypedDict",
|
||||
"TrackResponse",
|
||||
"TrackResponseBody1",
|
||||
"TrackResponseBody1TypedDict",
|
||||
"TrackResponseBody2",
|
||||
"TrackResponseBody2TypedDict",
|
||||
"TrackResponseTypedDict",
|
||||
"TrialsUsed",
|
||||
"TrialsUsedTypedDict",
|
||||
@@ -2495,6 +2620,10 @@ __all__ = [
|
||||
"UpdatePlanBasePriceTypedDict",
|
||||
"UpdatePlanBillingMethodRequest",
|
||||
"UpdatePlanBillingMethodResponse",
|
||||
"UpdatePlanConfigRequest",
|
||||
"UpdatePlanConfigRequestTypedDict",
|
||||
"UpdatePlanConfigResponse",
|
||||
"UpdatePlanConfigResponseTypedDict",
|
||||
"UpdatePlanCreditSchema",
|
||||
"UpdatePlanCreditSchemaTypedDict",
|
||||
"UpdatePlanCustomerEligibility",
|
||||
@@ -2560,7 +2689,8 @@ __all__ = [
|
||||
"UpdatePlanType",
|
||||
"UpdateSubscriptionParams",
|
||||
"UpdateSubscriptionParamsTypedDict",
|
||||
"UsageModel",
|
||||
"UsageModel1",
|
||||
"UsageModel2",
|
||||
]
|
||||
|
||||
_dynamic_imports: dict[str, str] = {
|
||||
@@ -2708,53 +2838,96 @@ _dynamic_imports: dict[str, str] = {
|
||||
"BillingUpdateToTypedDict": ".billingupdateop",
|
||||
"UpdateSubscriptionParams": ".billingupdateop",
|
||||
"UpdateSubscriptionParamsTypedDict": ".billingupdateop",
|
||||
"CheckConfig": ".checkop",
|
||||
"CheckConfigTypedDict": ".checkop",
|
||||
"CheckCreditSchema": ".checkop",
|
||||
"CheckCreditSchemaTypedDict": ".checkop",
|
||||
"CheckEnv": ".checkop",
|
||||
"CheckFeature": ".checkop",
|
||||
"CheckFeatureTypedDict": ".checkop",
|
||||
"CheckFreeTrial": ".checkop",
|
||||
"CheckFreeTrialTypedDict": ".checkop",
|
||||
"CheckConfig1": ".checkop",
|
||||
"CheckConfig1TypedDict": ".checkop",
|
||||
"CheckConfig2": ".checkop",
|
||||
"CheckConfig2TypedDict": ".checkop",
|
||||
"CheckCreditSchema1": ".checkop",
|
||||
"CheckCreditSchema1TypedDict": ".checkop",
|
||||
"CheckCreditSchema2": ".checkop",
|
||||
"CheckCreditSchema2TypedDict": ".checkop",
|
||||
"CheckEnv1": ".checkop",
|
||||
"CheckEnv2": ".checkop",
|
||||
"CheckFeature1": ".checkop",
|
||||
"CheckFeature1TypedDict": ".checkop",
|
||||
"CheckFeature2": ".checkop",
|
||||
"CheckFeature2TypedDict": ".checkop",
|
||||
"CheckFreeTrial1": ".checkop",
|
||||
"CheckFreeTrial1TypedDict": ".checkop",
|
||||
"CheckFreeTrial2": ".checkop",
|
||||
"CheckFreeTrial2TypedDict": ".checkop",
|
||||
"CheckGlobals": ".checkop",
|
||||
"CheckGlobalsTypedDict": ".checkop",
|
||||
"CheckInterval": ".checkop",
|
||||
"CheckItem": ".checkop",
|
||||
"CheckItemTypedDict": ".checkop",
|
||||
"CheckInterval1": ".checkop",
|
||||
"CheckInterval2": ".checkop",
|
||||
"CheckItem1": ".checkop",
|
||||
"CheckItem1TypedDict": ".checkop",
|
||||
"CheckItem2": ".checkop",
|
||||
"CheckItem2TypedDict": ".checkop",
|
||||
"CheckLock": ".checkop",
|
||||
"CheckLockTypedDict": ".checkop",
|
||||
"CheckOnDecrease": ".checkop",
|
||||
"CheckOnIncrease": ".checkop",
|
||||
"CheckOnDecrease1": ".checkop",
|
||||
"CheckOnDecrease2": ".checkop",
|
||||
"CheckOnIncrease1": ".checkop",
|
||||
"CheckOnIncrease2": ".checkop",
|
||||
"CheckParams": ".checkop",
|
||||
"CheckParamsTypedDict": ".checkop",
|
||||
"CheckResponse": ".checkop",
|
||||
"CheckResponseBody1": ".checkop",
|
||||
"CheckResponseBody1TypedDict": ".checkop",
|
||||
"CheckResponseBody2": ".checkop",
|
||||
"CheckResponseBody2TypedDict": ".checkop",
|
||||
"CheckResponseTypedDict": ".checkop",
|
||||
"CheckRollover": ".checkop",
|
||||
"CheckRolloverTypedDict": ".checkop",
|
||||
"CheckTierBehavior": ".checkop",
|
||||
"ConfigDuration": ".checkop",
|
||||
"FeatureType": ".checkop",
|
||||
"Flag": ".checkop",
|
||||
"FlagDisplay": ".checkop",
|
||||
"FlagDisplayTypedDict": ".checkop",
|
||||
"FlagType": ".checkop",
|
||||
"FlagTypedDict": ".checkop",
|
||||
"FreeTrialDuration": ".checkop",
|
||||
"IncludedUsage": ".checkop",
|
||||
"IncludedUsageTypedDict": ".checkop",
|
||||
"Preview": ".checkop",
|
||||
"PreviewTypedDict": ".checkop",
|
||||
"Product": ".checkop",
|
||||
"ProductDisplay": ".checkop",
|
||||
"ProductDisplayTypedDict": ".checkop",
|
||||
"ProductScenario": ".checkop",
|
||||
"ProductType": ".checkop",
|
||||
"ProductTypedDict": ".checkop",
|
||||
"Properties": ".checkop",
|
||||
"PropertiesTypedDict": ".checkop",
|
||||
"Scenario": ".checkop",
|
||||
"UsageModel": ".checkop",
|
||||
"CheckRollover1": ".checkop",
|
||||
"CheckRollover1TypedDict": ".checkop",
|
||||
"CheckRollover2": ".checkop",
|
||||
"CheckRollover2TypedDict": ".checkop",
|
||||
"CheckTierBehavior1": ".checkop",
|
||||
"CheckTierBehavior2": ".checkop",
|
||||
"ConfigDuration1": ".checkop",
|
||||
"ConfigDuration2": ".checkop",
|
||||
"FeatureType1": ".checkop",
|
||||
"FeatureType2": ".checkop",
|
||||
"Flag1": ".checkop",
|
||||
"Flag1TypedDict": ".checkop",
|
||||
"Flag2": ".checkop",
|
||||
"Flag2TypedDict": ".checkop",
|
||||
"FlagDisplay1": ".checkop",
|
||||
"FlagDisplay1TypedDict": ".checkop",
|
||||
"FlagDisplay2": ".checkop",
|
||||
"FlagDisplay2TypedDict": ".checkop",
|
||||
"FlagType1": ".checkop",
|
||||
"FlagType2": ".checkop",
|
||||
"FreeTrialDuration1": ".checkop",
|
||||
"FreeTrialDuration2": ".checkop",
|
||||
"IncludedUsage1": ".checkop",
|
||||
"IncludedUsage1TypedDict": ".checkop",
|
||||
"IncludedUsage2": ".checkop",
|
||||
"IncludedUsage2TypedDict": ".checkop",
|
||||
"Preview1": ".checkop",
|
||||
"Preview1TypedDict": ".checkop",
|
||||
"Preview2": ".checkop",
|
||||
"Preview2TypedDict": ".checkop",
|
||||
"Product1": ".checkop",
|
||||
"Product1TypedDict": ".checkop",
|
||||
"Product2": ".checkop",
|
||||
"Product2TypedDict": ".checkop",
|
||||
"ProductDisplay1": ".checkop",
|
||||
"ProductDisplay1TypedDict": ".checkop",
|
||||
"ProductDisplay2": ".checkop",
|
||||
"ProductDisplay2TypedDict": ".checkop",
|
||||
"ProductScenario1": ".checkop",
|
||||
"ProductScenario2": ".checkop",
|
||||
"ProductType1": ".checkop",
|
||||
"ProductType2": ".checkop",
|
||||
"Properties1": ".checkop",
|
||||
"Properties1TypedDict": ".checkop",
|
||||
"Properties2": ".checkop",
|
||||
"Properties2TypedDict": ".checkop",
|
||||
"Scenario1": ".checkop",
|
||||
"Scenario2": ".checkop",
|
||||
"UsageModel1": ".checkop",
|
||||
"UsageModel2": ".checkop",
|
||||
"CreateBalanceDuration": ".createbalanceop",
|
||||
"CreateBalanceGlobals": ".createbalanceop",
|
||||
"CreateBalanceGlobalsTypedDict": ".createbalanceop",
|
||||
@@ -2827,6 +3000,10 @@ _dynamic_imports: dict[str, str] = {
|
||||
"CreatePlanAttachAction": ".createplanop",
|
||||
"CreatePlanBillingMethodRequest": ".createplanop",
|
||||
"CreatePlanBillingMethodResponse": ".createplanop",
|
||||
"CreatePlanConfigRequest": ".createplanop",
|
||||
"CreatePlanConfigRequestTypedDict": ".createplanop",
|
||||
"CreatePlanConfigResponse": ".createplanop",
|
||||
"CreatePlanConfigResponseTypedDict": ".createplanop",
|
||||
"CreatePlanCreditSchema": ".createplanop",
|
||||
"CreatePlanCreditSchemaTypedDict": ".createplanop",
|
||||
"CreatePlanCustomerEligibility": ".createplanop",
|
||||
@@ -3003,6 +3180,10 @@ _dynamic_imports: dict[str, str] = {
|
||||
"FinalizeLockGlobals": ".finalizelockop",
|
||||
"FinalizeLockGlobalsTypedDict": ".finalizelockop",
|
||||
"FinalizeLockResponse": ".finalizelockop",
|
||||
"FinalizeLockResponseBody1": ".finalizelockop",
|
||||
"FinalizeLockResponseBody1TypedDict": ".finalizelockop",
|
||||
"FinalizeLockResponseBody2": ".finalizelockop",
|
||||
"FinalizeLockResponseBody2TypedDict": ".finalizelockop",
|
||||
"FinalizeLockResponseTypedDict": ".finalizelockop",
|
||||
"GetEntityBillingControls": ".getentityop",
|
||||
"GetEntityBillingControlsTypedDict": ".getentityop",
|
||||
@@ -3069,6 +3250,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"GetOrCreateCustomerUsageAlertTypedDict": ".getorcreatecustomerop",
|
||||
"GetPlanAttachAction": ".getplanop",
|
||||
"GetPlanBillingMethod": ".getplanop",
|
||||
"GetPlanConfig": ".getplanop",
|
||||
"GetPlanConfigTypedDict": ".getplanop",
|
||||
"GetPlanCreditSchema": ".getplanop",
|
||||
"GetPlanCreditSchemaTypedDict": ".getplanop",
|
||||
"GetPlanCustomerEligibility": ".getplanop",
|
||||
@@ -3178,6 +3361,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"ListFeaturesType": ".listfeaturesop",
|
||||
"ListPlansAttachAction": ".listplansop",
|
||||
"ListPlansBillingMethod": ".listplansop",
|
||||
"ListPlansConfig": ".listplansop",
|
||||
"ListPlansConfigTypedDict": ".listplansop",
|
||||
"ListPlansCreditSchema": ".listplansop",
|
||||
"ListPlansCreditSchemaTypedDict": ".listplansop",
|
||||
"ListPlansCustomerEligibility": ".listplansop",
|
||||
@@ -3295,6 +3480,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"ItemTypedDict": ".plan",
|
||||
"Plan": ".plan",
|
||||
"PlanBillingMethod": ".plan",
|
||||
"PlanConfig": ".plan",
|
||||
"PlanConfigTypedDict": ".plan",
|
||||
"PlanCreditSchema": ".plan",
|
||||
"PlanCreditSchemaTypedDict": ".plan",
|
||||
"PlanDurationType": ".plan",
|
||||
@@ -3615,6 +3802,10 @@ _dynamic_imports: dict[str, str] = {
|
||||
"TrackParams": ".trackop",
|
||||
"TrackParamsTypedDict": ".trackop",
|
||||
"TrackResponse": ".trackop",
|
||||
"TrackResponseBody1": ".trackop",
|
||||
"TrackResponseBody1TypedDict": ".trackop",
|
||||
"TrackResponseBody2": ".trackop",
|
||||
"TrackResponseBody2TypedDict": ".trackop",
|
||||
"TrackResponseTypedDict": ".trackop",
|
||||
"UpdateBalanceGlobals": ".updatebalanceop",
|
||||
"UpdateBalanceGlobalsTypedDict": ".updatebalanceop",
|
||||
@@ -3738,6 +3929,10 @@ _dynamic_imports: dict[str, str] = {
|
||||
"UpdatePlanBasePriceTypedDict": ".updateplanop",
|
||||
"UpdatePlanBillingMethodRequest": ".updateplanop",
|
||||
"UpdatePlanBillingMethodResponse": ".updateplanop",
|
||||
"UpdatePlanConfigRequest": ".updateplanop",
|
||||
"UpdatePlanConfigRequestTypedDict": ".updateplanop",
|
||||
"UpdatePlanConfigResponse": ".updateplanop",
|
||||
"UpdatePlanConfigResponseTypedDict": ".updateplanop",
|
||||
"UpdatePlanCreditSchema": ".updateplanop",
|
||||
"UpdatePlanCreditSchemaTypedDict": ".updateplanop",
|
||||
"UpdatePlanCustomerEligibility": ".updateplanop",
|
||||
|
||||
@@ -476,6 +476,36 @@ class FreeTrialRequest(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class CreatePlanConfigRequestTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class CreatePlanConfigRequest(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class CreatePlanParamsTypedDict(TypedDict):
|
||||
plan_id: str
|
||||
r"""The ID of the plan to create."""
|
||||
@@ -495,6 +525,8 @@ class CreatePlanParamsTypedDict(TypedDict):
|
||||
r"""Feature configurations for this plan. Each item defines included units, pricing, and reset behavior."""
|
||||
free_trial: NotRequired[FreeTrialRequestTypedDict]
|
||||
r"""Free trial configuration. Customers can try this plan before being charged."""
|
||||
config: NotRequired[CreatePlanConfigRequestTypedDict]
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
|
||||
class CreatePlanParams(BaseModel):
|
||||
@@ -525,6 +557,9 @@ class CreatePlanParams(BaseModel):
|
||||
free_trial: Optional[FreeTrialRequest] = None
|
||||
r"""Free trial configuration. Customers can try this plan before being charged."""
|
||||
|
||||
config: Optional[CreatePlanConfigRequest] = None
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(
|
||||
@@ -536,6 +571,7 @@ class CreatePlanParams(BaseModel):
|
||||
"price",
|
||||
"items",
|
||||
"free_trial",
|
||||
"config",
|
||||
]
|
||||
)
|
||||
nullable_fields = set(["description"])
|
||||
@@ -1121,6 +1157,36 @@ CreatePlanEnv = Union[
|
||||
r"""Environment this plan belongs to ('sandbox' or 'live')."""
|
||||
|
||||
|
||||
class CreatePlanConfigResponseTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class CreatePlanConfigResponse(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
CreatePlanStatus = Union[
|
||||
Literal[
|
||||
"active",
|
||||
@@ -1219,6 +1285,8 @@ class CreatePlanResponseTypedDict(TypedDict):
|
||||
r"""Whether the plan is archived. Archived plans cannot be attached to new customers."""
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
config: CreatePlanConfigResponseTypedDict
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
free_trial: NotRequired[CreatePlanFreeTrialResponseTypedDict]
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
customer_eligibility: NotRequired[CreatePlanCustomerEligibilityTypedDict]
|
||||
@@ -1266,6 +1334,9 @@ class CreatePlanResponse(BaseModel):
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
|
||||
config: CreatePlanConfigResponse
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
free_trial: Optional[CreatePlanFreeTrialResponse] = None
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ from autumn_sdk.types import BaseModel, UNSET_SENTINEL
|
||||
from autumn_sdk.utils import FieldMetadata, HeaderMetadata
|
||||
import pydantic
|
||||
from pydantic import model_serializer
|
||||
from typing import Any, Dict, Literal, Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
from typing import Any, Dict, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
||||
|
||||
|
||||
class FinalizeLockGlobalsTypedDict(TypedDict):
|
||||
@@ -85,13 +85,36 @@ class FinalizeBalanceParams(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class FinalizeLockResponseTypedDict(TypedDict):
|
||||
class FinalizeLockResponseBody2TypedDict(TypedDict):
|
||||
r"""Accepted. Autumn is experiencing degraded service from a downstream provider, so the finalize request was allowed fail-open."""
|
||||
|
||||
success: bool
|
||||
|
||||
|
||||
class FinalizeLockResponseBody2(BaseModel):
|
||||
r"""Accepted. Autumn is experiencing degraded service from a downstream provider, so the finalize request was allowed fail-open."""
|
||||
|
||||
success: bool
|
||||
|
||||
|
||||
class FinalizeLockResponseBody1TypedDict(TypedDict):
|
||||
r"""OK"""
|
||||
|
||||
success: bool
|
||||
|
||||
|
||||
class FinalizeLockResponse(BaseModel):
|
||||
class FinalizeLockResponseBody1(BaseModel):
|
||||
r"""OK"""
|
||||
|
||||
success: bool
|
||||
|
||||
|
||||
FinalizeLockResponseTypedDict = TypeAliasType(
|
||||
"FinalizeLockResponseTypedDict",
|
||||
Union[FinalizeLockResponseBody1TypedDict, FinalizeLockResponseBody2TypedDict],
|
||||
)
|
||||
|
||||
|
||||
FinalizeLockResponse = TypeAliasType(
|
||||
"FinalizeLockResponse", Union[FinalizeLockResponseBody1, FinalizeLockResponseBody2]
|
||||
)
|
||||
|
||||
@@ -635,6 +635,36 @@ GetPlanEnv = Union[
|
||||
r"""Environment this plan belongs to ('sandbox' or 'live')."""
|
||||
|
||||
|
||||
class GetPlanConfigTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class GetPlanConfig(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
GetPlanStatus = Union[
|
||||
Literal[
|
||||
"active",
|
||||
@@ -733,6 +763,8 @@ class GetPlanResponseTypedDict(TypedDict):
|
||||
r"""Whether the plan is archived. Archived plans cannot be attached to new customers."""
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
config: GetPlanConfigTypedDict
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
free_trial: NotRequired[GetPlanFreeTrialTypedDict]
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
customer_eligibility: NotRequired[GetPlanCustomerEligibilityTypedDict]
|
||||
@@ -780,6 +812,9 @@ class GetPlanResponse(BaseModel):
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
|
||||
config: GetPlanConfig
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
free_trial: Optional[GetPlanFreeTrial] = None
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
|
||||
|
||||
@@ -640,6 +640,36 @@ ListPlansEnv = Union[
|
||||
r"""Environment this plan belongs to ('sandbox' or 'live')."""
|
||||
|
||||
|
||||
class ListPlansConfigTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class ListPlansConfig(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
ListPlansStatus = Union[
|
||||
Literal[
|
||||
"active",
|
||||
@@ -738,6 +768,8 @@ class ListPlansListTypedDict(TypedDict):
|
||||
r"""Whether the plan is archived. Archived plans cannot be attached to new customers."""
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
config: ListPlansConfigTypedDict
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
free_trial: NotRequired[ListPlansFreeTrialTypedDict]
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
customer_eligibility: NotRequired[ListPlansCustomerEligibilityTypedDict]
|
||||
@@ -785,6 +817,9 @@ class ListPlansList(BaseModel):
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
|
||||
config: ListPlansConfig
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
free_trial: Optional[ListPlansFreeTrial] = None
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
|
||||
|
||||
@@ -574,6 +574,36 @@ PlanEnv = Union[
|
||||
r"""Environment this plan belongs to ('sandbox' or 'live')."""
|
||||
|
||||
|
||||
class PlanConfigTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class PlanConfig(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
PlanStatus = Union[
|
||||
Literal[
|
||||
"active",
|
||||
@@ -670,6 +700,8 @@ class PlanTypedDict(TypedDict):
|
||||
r"""Whether the plan is archived. Archived plans cannot be attached to new customers."""
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
config: PlanConfigTypedDict
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
free_trial: NotRequired[FreeTrialTypedDict]
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
customer_eligibility: NotRequired[CustomerEligibilityTypedDict]
|
||||
@@ -715,6 +747,9 @@ class Plan(BaseModel):
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
|
||||
config: PlanConfig
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
free_trial: Optional[FreeTrial] = None
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ from autumn_sdk.utils import FieldMetadata, HeaderMetadata, validate_const
|
||||
import pydantic
|
||||
from pydantic import model_serializer
|
||||
from pydantic.functional_validators import AfterValidator
|
||||
from typing import Any, Dict, Literal, Optional
|
||||
from typing_extensions import Annotated, NotRequired, TypedDict
|
||||
from typing import Any, Dict, Literal, Optional, Union
|
||||
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
||||
|
||||
|
||||
class TrackGlobalsTypedDict(TypedDict):
|
||||
@@ -134,7 +134,71 @@ class TrackParams(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class TrackResponseTypedDict(TypedDict):
|
||||
class TrackResponseBody2TypedDict(TypedDict):
|
||||
r"""Accepted. Autumn is experiencing degraded service from a downstream provider, so the event was accepted for replay and will be tracked as soon as the service is restored."""
|
||||
|
||||
customer_id: str
|
||||
r"""The ID of the customer whose usage was tracked."""
|
||||
value: float
|
||||
r"""The amount of usage that was recorded."""
|
||||
balance: Nullable[BalanceTypedDict]
|
||||
r"""The updated balance for the tracked feature. Null if tracking by event_name that affects multiple features."""
|
||||
entity_id: NotRequired[str]
|
||||
r"""The ID of the entity, if entity-scoped tracking was performed."""
|
||||
event_name: NotRequired[str]
|
||||
r"""The event name that was tracked, if event_name was used instead of feature_id."""
|
||||
balances: NotRequired[Dict[str, BalanceTypedDict]]
|
||||
r"""Map of feature_id to updated balance when tracking by event_name affects multiple features."""
|
||||
|
||||
|
||||
class TrackResponseBody2(BaseModel):
|
||||
r"""Accepted. Autumn is experiencing degraded service from a downstream provider, so the event was accepted for replay and will be tracked as soon as the service is restored."""
|
||||
|
||||
customer_id: str
|
||||
r"""The ID of the customer whose usage was tracked."""
|
||||
|
||||
value: float
|
||||
r"""The amount of usage that was recorded."""
|
||||
|
||||
balance: Nullable[Balance]
|
||||
r"""The updated balance for the tracked feature. Null if tracking by event_name that affects multiple features."""
|
||||
|
||||
entity_id: Optional[str] = None
|
||||
r"""The ID of the entity, if entity-scoped tracking was performed."""
|
||||
|
||||
event_name: Optional[str] = None
|
||||
r"""The event name that was tracked, if event_name was used instead of feature_id."""
|
||||
|
||||
balances: Optional[Dict[str, Balance]] = None
|
||||
r"""Map of feature_id to updated balance when tracking by event_name affects multiple features."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["entity_id", "event_name", "balances"])
|
||||
nullable_fields = set(["balance"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
is_nullable_and_explicitly_set = (
|
||||
k in nullable_fields
|
||||
and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
|
||||
)
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if (
|
||||
val is not None
|
||||
or k not in optional_fields
|
||||
or is_nullable_and_explicitly_set
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class TrackResponseBody1TypedDict(TypedDict):
|
||||
r"""OK"""
|
||||
|
||||
customer_id: str
|
||||
@@ -151,7 +215,7 @@ class TrackResponseTypedDict(TypedDict):
|
||||
r"""Map of feature_id to updated balance when tracking by event_name affects multiple features."""
|
||||
|
||||
|
||||
class TrackResponse(BaseModel):
|
||||
class TrackResponseBody1(BaseModel):
|
||||
r"""OK"""
|
||||
|
||||
customer_id: str
|
||||
@@ -198,6 +262,17 @@ class TrackResponse(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
TrackResponseTypedDict = TypeAliasType(
|
||||
"TrackResponseTypedDict",
|
||||
Union[TrackResponseBody1TypedDict, TrackResponseBody2TypedDict],
|
||||
)
|
||||
|
||||
|
||||
TrackResponse = TypeAliasType(
|
||||
"TrackResponse", Union[TrackResponseBody1, TrackResponseBody2]
|
||||
)
|
||||
|
||||
|
||||
try:
|
||||
TrackLock.model_rebuild()
|
||||
except NameError:
|
||||
|
||||
@@ -476,6 +476,36 @@ class UpdatePlanFreeTrialParams(BaseModel):
|
||||
return m
|
||||
|
||||
|
||||
class UpdatePlanConfigRequestTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class UpdatePlanConfigRequest(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class UpdatePlanParamsTypedDict(TypedDict):
|
||||
plan_id: str
|
||||
r"""The ID of the plan to update."""
|
||||
@@ -494,6 +524,8 @@ class UpdatePlanParamsTypedDict(TypedDict):
|
||||
r"""Feature configurations for this plan. Each item defines included units, pricing, and reset behavior."""
|
||||
free_trial: NotRequired[Nullable[UpdatePlanFreeTrialParamsTypedDict]]
|
||||
r"""The free trial of the plan. Set to null to remove the free trial."""
|
||||
config: NotRequired[UpdatePlanConfigRequestTypedDict]
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
version: NotRequired[float]
|
||||
archived: NotRequired[bool]
|
||||
new_plan_id: NotRequired[str]
|
||||
@@ -527,6 +559,9 @@ class UpdatePlanParams(BaseModel):
|
||||
free_trial: OptionalNullable[UpdatePlanFreeTrialParams] = UNSET
|
||||
r"""The free trial of the plan. Set to null to remove the free trial."""
|
||||
|
||||
config: Optional[UpdatePlanConfigRequest] = None
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
version: Optional[float] = None
|
||||
|
||||
archived: Optional[bool] = False
|
||||
@@ -546,6 +581,7 @@ class UpdatePlanParams(BaseModel):
|
||||
"price",
|
||||
"items",
|
||||
"free_trial",
|
||||
"config",
|
||||
"version",
|
||||
"archived",
|
||||
"new_plan_id",
|
||||
@@ -1134,6 +1170,36 @@ UpdatePlanEnv = Union[
|
||||
r"""Environment this plan belongs to ('sandbox' or 'live')."""
|
||||
|
||||
|
||||
class UpdatePlanConfigResponseTypedDict(TypedDict):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: NotRequired[bool]
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
|
||||
class UpdatePlanConfigResponse(BaseModel):
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
ignore_past_due: Optional[bool] = False
|
||||
r"""If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = set(["ignore_past_due"])
|
||||
serialized = handler(self)
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k, serialized.get(n))
|
||||
|
||||
if val != UNSET_SENTINEL:
|
||||
if val is not None or k not in optional_fields:
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
UpdatePlanStatus = Union[
|
||||
Literal[
|
||||
"active",
|
||||
@@ -1232,6 +1298,8 @@ class UpdatePlanResponseTypedDict(TypedDict):
|
||||
r"""Whether the plan is archived. Archived plans cannot be attached to new customers."""
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
config: UpdatePlanConfigResponseTypedDict
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
free_trial: NotRequired[UpdatePlanFreeTrialTypedDict]
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
customer_eligibility: NotRequired[UpdatePlanCustomerEligibilityTypedDict]
|
||||
@@ -1279,6 +1347,9 @@ class UpdatePlanResponse(BaseModel):
|
||||
base_variant_id: Nullable[str]
|
||||
r"""If this is a variant, the ID of the base plan it was created from."""
|
||||
|
||||
config: UpdatePlanConfigResponse
|
||||
r"""Miscellaneous plan-level configuration flags."""
|
||||
|
||||
free_trial: Optional[UpdatePlanFreeTrial] = None
|
||||
r"""Free trial configuration. If set, new customers can try this plan before being charged."""
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ class Plans(BaseSDK):
|
||||
free_trial: Optional[
|
||||
Union[models.FreeTrialRequest, models.FreeTrialRequestTypedDict]
|
||||
] = None,
|
||||
config: Optional[
|
||||
Union[
|
||||
models.CreatePlanConfigRequest, models.CreatePlanConfigRequestTypedDict
|
||||
]
|
||||
] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
@@ -50,6 +55,7 @@ class Plans(BaseSDK):
|
||||
:param price: Base recurring price for the plan. Omit for free or usage-only plans.
|
||||
:param items: Feature configurations for this plan. Each item defines included units, pricing, and reset behavior.
|
||||
:param free_trial: Free trial configuration. Customers can try this plan before being charged.
|
||||
:param config: Miscellaneous plan-level configuration flags.
|
||||
:param retries: Override the default retry configuration for this method
|
||||
:param server_url: Override the default server URL for this method
|
||||
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
||||
@@ -81,6 +87,9 @@ class Plans(BaseSDK):
|
||||
free_trial=utils.get_pydantic_model(
|
||||
free_trial, Optional[models.FreeTrialRequest]
|
||||
),
|
||||
config=utils.get_pydantic_model(
|
||||
config, Optional[models.CreatePlanConfigRequest]
|
||||
),
|
||||
)
|
||||
|
||||
req = self._build_request(
|
||||
@@ -163,6 +172,11 @@ class Plans(BaseSDK):
|
||||
free_trial: Optional[
|
||||
Union[models.FreeTrialRequest, models.FreeTrialRequestTypedDict]
|
||||
] = None,
|
||||
config: Optional[
|
||||
Union[
|
||||
models.CreatePlanConfigRequest, models.CreatePlanConfigRequestTypedDict
|
||||
]
|
||||
] = None,
|
||||
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
||||
server_url: Optional[str] = None,
|
||||
timeout_ms: Optional[int] = None,
|
||||
@@ -183,6 +197,7 @@ class Plans(BaseSDK):
|
||||
:param price: Base recurring price for the plan. Omit for free or usage-only plans.
|
||||
:param items: Feature configurations for this plan. Each item defines included units, pricing, and reset behavior.
|
||||
:param free_trial: Free trial configuration. Customers can try this plan before being charged.
|
||||
:param config: Miscellaneous plan-level configuration flags.
|
||||
:param retries: Override the default retry configuration for this method
|
||||
:param server_url: Override the default server URL for this method
|
||||
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
||||
@@ -214,6 +229,9 @@ class Plans(BaseSDK):
|
||||
free_trial=utils.get_pydantic_model(
|
||||
free_trial, Optional[models.FreeTrialRequest]
|
||||
),
|
||||
config=utils.get_pydantic_model(
|
||||
config, Optional[models.CreatePlanConfigRequest]
|
||||
),
|
||||
)
|
||||
|
||||
req = self._build_request_async(
|
||||
@@ -685,6 +703,11 @@ class Plans(BaseSDK):
|
||||
models.UpdatePlanFreeTrialParamsTypedDict,
|
||||
]
|
||||
] = UNSET,
|
||||
config: Optional[
|
||||
Union[
|
||||
models.UpdatePlanConfigRequest, models.UpdatePlanConfigRequestTypedDict
|
||||
]
|
||||
] = None,
|
||||
version: Optional[float] = None,
|
||||
archived: Optional[bool] = False,
|
||||
new_plan_id: Optional[str] = None,
|
||||
@@ -708,6 +731,7 @@ class Plans(BaseSDK):
|
||||
:param price: The price of the plan. Set to null to remove the base price.
|
||||
:param items: Feature configurations for this plan. Each item defines included units, pricing, and reset behavior.
|
||||
:param free_trial: The free trial of the plan. Set to null to remove the free trial.
|
||||
:param config: Miscellaneous plan-level configuration flags.
|
||||
:param version:
|
||||
:param archived:
|
||||
:param new_plan_id: The new ID to use for the plan. Can only be updated if the plan has not been used by any customers.
|
||||
@@ -742,6 +766,9 @@ class Plans(BaseSDK):
|
||||
free_trial=utils.get_pydantic_model(
|
||||
free_trial, OptionalNullable[models.UpdatePlanFreeTrialParams]
|
||||
),
|
||||
config=utils.get_pydantic_model(
|
||||
config, Optional[models.UpdatePlanConfigRequest]
|
||||
),
|
||||
version=version,
|
||||
archived=archived,
|
||||
new_plan_id=new_plan_id,
|
||||
@@ -830,6 +857,11 @@ class Plans(BaseSDK):
|
||||
models.UpdatePlanFreeTrialParamsTypedDict,
|
||||
]
|
||||
] = UNSET,
|
||||
config: Optional[
|
||||
Union[
|
||||
models.UpdatePlanConfigRequest, models.UpdatePlanConfigRequestTypedDict
|
||||
]
|
||||
] = None,
|
||||
version: Optional[float] = None,
|
||||
archived: Optional[bool] = False,
|
||||
new_plan_id: Optional[str] = None,
|
||||
@@ -853,6 +885,7 @@ class Plans(BaseSDK):
|
||||
:param price: The price of the plan. Set to null to remove the base price.
|
||||
:param items: Feature configurations for this plan. Each item defines included units, pricing, and reset behavior.
|
||||
:param free_trial: The free trial of the plan. Set to null to remove the free trial.
|
||||
:param config: Miscellaneous plan-level configuration flags.
|
||||
:param version:
|
||||
:param archived:
|
||||
:param new_plan_id: The new ID to use for the plan. Can only be updated if the plan has not been used by any customers.
|
||||
@@ -887,6 +920,9 @@ class Plans(BaseSDK):
|
||||
free_trial=utils.get_pydantic_model(
|
||||
free_trial, OptionalNullable[models.UpdatePlanFreeTrialParams]
|
||||
),
|
||||
config=utils.get_pydantic_model(
|
||||
config, Optional[models.UpdatePlanConfigRequest]
|
||||
),
|
||||
version=version,
|
||||
archived=archived,
|
||||
new_plan_id=new_plan_id,
|
||||
|
||||
@@ -307,7 +307,9 @@ class Autumn(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.CheckResponse, http_res)
|
||||
return unmarshal_json_response(models.CheckResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.CheckResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
@@ -420,7 +422,9 @@ class Autumn(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.CheckResponse, http_res)
|
||||
return unmarshal_json_response(models.CheckResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.CheckResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
@@ -530,7 +534,9 @@ class Autumn(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.TrackResponse, http_res)
|
||||
return unmarshal_json_response(models.TrackResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.TrackResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = utils.stream_to_text(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
@@ -640,7 +646,9 @@ class Autumn(BaseSDK):
|
||||
)
|
||||
|
||||
if utils.match_response(http_res, "200", "application/json"):
|
||||
return unmarshal_json_response(models.TrackResponse, http_res)
|
||||
return unmarshal_json_response(models.TrackResponseBody1, http_res)
|
||||
if utils.match_response(http_res, "202", "application/json"):
|
||||
return unmarshal_json_response(models.TrackResponseBody2, http_res)
|
||||
if utils.match_response(http_res, "4XX", "*"):
|
||||
http_res_text = await utils.stream_to_text_async(http_res)
|
||||
raise errors.AutumnDefaultError(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "autumn",
|
||||
"private": true,
|
||||
"packageManager": "bun@1.3.10",
|
||||
"workspaces": {
|
||||
"packages": [
|
||||
"server",
|
||||
@@ -83,6 +84,7 @@
|
||||
"setup": "node scripts/setup/setup.js",
|
||||
"setup:s3-admin": "bun scripts/setup/setupS3Admin.ts",
|
||||
"setup:test": "infisical run --env=dev --recursive -- bun scripts/setup/setup-test.ts",
|
||||
"stripe:link-test": "ENV_FILE=.env infisical run --env=dev --recursive -- bun scripts/setup/link-test-stripe-account.ts",
|
||||
"agent:bootstrap": "bash scripts/setup/agent-bootstrap.sh",
|
||||
"dev:agent": "bash scripts/setup/devAgent.sh",
|
||||
"migrate-functions": "infisical run --env=dev --recursive -- bun scripts/migrations/migrate-functions.ts",
|
||||
@@ -110,7 +112,7 @@
|
||||
"site": "cd apps/website && bun dev && cd ../..",
|
||||
"docs": "bun -F @autumn/docs dev",
|
||||
"docs:build": "bun -F @autumn/docs build",
|
||||
"ts": "bun -F @autumn/server ts && bun -F autumn-js ts && bun -F @autumn/openapi ts && bun -F atmn ts && bun -F checkout ts",
|
||||
"ts": "turbo run ts --filter=@autumn/server --filter=autumn-js --filter=@autumn/openapi --filter=atmn --filter=checkout",
|
||||
"atmn:build": "bun -F atmn build",
|
||||
"openapi:ts": "bun -F @autumn/openapi ts",
|
||||
"js:ts": "bun -F autumn-js ts",
|
||||
@@ -143,6 +145,7 @@
|
||||
"husky": "^9.1.7",
|
||||
"inquirer": "^12.10.0",
|
||||
"knip": "^6.7.0",
|
||||
"ts-to-zod": "^5.1.0"
|
||||
"ts-to-zod": "^5.1.0",
|
||||
"turbo": "^2.9.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ export type HandleBetterAuthRouteFn = (args: {
|
||||
routeName: RouteName;
|
||||
}) => Promise<{ status: number; body: unknown }>;
|
||||
|
||||
export type AutumnEndpoint = ReturnType<typeof createAuthEndpoint>;
|
||||
|
||||
/** Get route config by name from routeConfigs */
|
||||
const getRouteConfig = (routeName: RouteName) => {
|
||||
const route = routeConfigs.find((r) => r.route === routeName);
|
||||
@@ -24,7 +26,7 @@ const getRouteConfig = (routeName: RouteName) => {
|
||||
export const createAutumnEndpoint = <T extends RouteName>(
|
||||
routeName: T,
|
||||
handleRoute: HandleBetterAuthRouteFn,
|
||||
) => {
|
||||
): AutumnEndpoint => {
|
||||
const config = getRouteConfig(routeName);
|
||||
return createAuthEndpoint(
|
||||
`/autumn/${routeName}` as `/autumn/${T}`,
|
||||
@@ -38,5 +40,5 @@ export const createAutumnEndpoint = <T extends RouteName>(
|
||||
status: result.status,
|
||||
});
|
||||
},
|
||||
);
|
||||
) as AutumnEndpoint;
|
||||
};
|
||||
|
||||
@@ -31,6 +31,10 @@ export const listPlansItemDisplaySchema = z.object({
|
||||
secondaryText: z.union([z.string(), z.undefined()]).optional(),
|
||||
});
|
||||
|
||||
export const listPlansConfigSchema = z.object({
|
||||
ignorePastDue: z.boolean(),
|
||||
});
|
||||
|
||||
export const listPlansParamsOutboundSchema = z.object({
|
||||
customer_id: z.union([z.string(), z.undefined()]).optional(),
|
||||
entity_id: z.union([z.string(), z.undefined()]).optional(),
|
||||
@@ -148,6 +152,7 @@ export const listPlansListSchema = z.object({
|
||||
env: listPlansEnvSchema,
|
||||
archived: z.boolean(),
|
||||
baseVariantId: z.string().nullable(),
|
||||
config: listPlansConfigSchema,
|
||||
customerEligibility: z
|
||||
.union([listPlansCustomerEligibilitySchema, z.undefined()])
|
||||
.optional(),
|
||||
|
||||
@@ -1210,6 +1210,16 @@ components:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a past_due
|
||||
state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -1258,6 +1268,7 @@ components:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
Balance:
|
||||
type: object
|
||||
properties:
|
||||
@@ -3250,6 +3261,7 @@ paths:
|
||||
@param price - Base recurring price for the plan. Omit for free or usage-only plans. (optional)
|
||||
@param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
@param freeTrial - Free trial configuration. Customers can try this plan before being charged. (optional)
|
||||
@param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
|
||||
@returns The created plan object.
|
||||
tags:
|
||||
@@ -3496,6 +3508,16 @@ paths:
|
||||
- duration_length
|
||||
description: Free trial configuration. Customers can try this plan before being
|
||||
charged.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a
|
||||
past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
required:
|
||||
- plan_id
|
||||
- name
|
||||
@@ -3872,6 +3894,16 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a
|
||||
past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -3920,6 +3952,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that
|
||||
can be attached to customers.
|
||||
examples:
|
||||
@@ -3967,6 +4000,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: create
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4370,6 +4405,16 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a
|
||||
past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -4418,6 +4463,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that
|
||||
can be attached to customers.
|
||||
examples:
|
||||
@@ -4465,6 +4511,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: get
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4849,6 +4897,16 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in
|
||||
a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -4897,6 +4955,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that
|
||||
can be attached to customers.
|
||||
required:
|
||||
@@ -4947,6 +5006,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: list
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4997,6 +5058,7 @@ paths:
|
||||
@param price - The price of the plan. Set to null to remove the base price. (optional)
|
||||
@param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
@param freeTrial - The free trial of the plan. Set to null to remove the free trial. (optional)
|
||||
@param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
@param newPlanId - The new ID to use for the plan. Can only be updated if the plan has not been used by any customers. (optional)
|
||||
|
||||
@returns The updated plan object.
|
||||
@@ -5241,6 +5303,16 @@ paths:
|
||||
description: Free trial configuration for a plan.
|
||||
- type: "null"
|
||||
description: The free trial of the plan. Set to null to remove the free trial.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a
|
||||
past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
version:
|
||||
type: number
|
||||
archived:
|
||||
@@ -5600,6 +5672,16 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on
|
||||
schedule even when the customer's product is in a
|
||||
past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -5648,6 +5730,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that
|
||||
can be attached to customers.
|
||||
examples:
|
||||
@@ -5695,6 +5778,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: update
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -11540,6 +11625,18 @@ paths:
|
||||
type: boolean
|
||||
required:
|
||||
- success
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream
|
||||
provider, so the finalize request was allowed fail-open.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
success:
|
||||
type: boolean
|
||||
required:
|
||||
- success
|
||||
x-speakeasy-name-override: finalize
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -11609,7 +11706,8 @@ paths:
|
||||
|
||||
|
||||
@returns Whether access is allowed, plus the current balance for that
|
||||
feature.
|
||||
feature. If Autumn is experiencing degraded service from a downstream
|
||||
provider, the API may return 202 and allow access fail-open.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -12204,6 +12302,532 @@ paths:
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream
|
||||
provider, so access was allowed fail-open.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
allowed:
|
||||
type: boolean
|
||||
description: Whether the customer is allowed to use the feature. True if they
|
||||
have sufficient balance or the feature is
|
||||
unlimited/boolean.
|
||||
customer_id:
|
||||
type: string
|
||||
description: The ID of the customer that was checked.
|
||||
entity_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The ID of the entity, if an entity-scoped check was performed.
|
||||
required_balance:
|
||||
type: number
|
||||
description: The required balance that was checked against.
|
||||
balance:
|
||||
anyOf:
|
||||
- $ref: "#/components/schemas/Balance"
|
||||
- type: "null"
|
||||
description: The customer's balance for this feature. Null if the customer has
|
||||
no balance for this feature.
|
||||
flag:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The unique identifier for this flag.
|
||||
plan_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The plan ID this flag originates from, or null for standalone
|
||||
flags.
|
||||
expires_at:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Timestamp when this flag expires, or null for no expiration.
|
||||
feature_id:
|
||||
type: string
|
||||
description: The feature ID this flag is for.
|
||||
feature:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The unique identifier for this feature, used in /check and /track
|
||||
calls.
|
||||
name:
|
||||
type: string
|
||||
description: Human-readable name displayed in the dashboard and billing UI.
|
||||
type:
|
||||
enum:
|
||||
- boolean
|
||||
- metered
|
||||
- credit_system
|
||||
type: string
|
||||
description: "Feature type: 'boolean' for on/off access, 'metered' for
|
||||
usage-tracked features, 'credit_system' for
|
||||
unified credit pools."
|
||||
consumable:
|
||||
type: boolean
|
||||
description: "For metered features: true if usage resets periodically (API
|
||||
calls, credits), false if allocated
|
||||
persistently (seats, storage)."
|
||||
event_names:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: Event names that trigger this feature's balance. Allows multiple
|
||||
features to respond to a single event.
|
||||
credit_schema:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
metered_feature_id:
|
||||
type: string
|
||||
description: ID of the metered feature that draws from this credit system.
|
||||
credit_cost:
|
||||
type: number
|
||||
description: Credits consumed per unit of the metered feature.
|
||||
required:
|
||||
- metered_feature_id
|
||||
- credit_cost
|
||||
description: "For credit_system features: maps metered features to their credit
|
||||
costs."
|
||||
display:
|
||||
type: object
|
||||
properties:
|
||||
singular:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Singular form for UI display (e.g., 'API call', 'seat').
|
||||
plural:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Plural form for UI display (e.g., 'API calls', 'seats').
|
||||
description: Display names for the feature in billing UI and customer-facing
|
||||
components.
|
||||
archived:
|
||||
type: boolean
|
||||
description: Whether the feature is archived and hidden from the dashboard.
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- type
|
||||
- consumable
|
||||
- archived
|
||||
description: The full feature object if expanded.
|
||||
required:
|
||||
- id
|
||||
- plan_id
|
||||
- expires_at
|
||||
- feature_id
|
||||
examples:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
expires_at: null
|
||||
feature_id: dashboard
|
||||
- type: "null"
|
||||
description: The flag associated with this check, if any.
|
||||
preview:
|
||||
type: object
|
||||
properties:
|
||||
scenario:
|
||||
enum:
|
||||
- usage_limit
|
||||
- feature_flag
|
||||
type: string
|
||||
description: The reason access was denied. 'usage_limit' means the customer
|
||||
exceeded their balance, 'feature_flag' means the
|
||||
feature is not included in their plan.
|
||||
title:
|
||||
type: string
|
||||
description: A title suitable for displaying in a paywall or upgrade modal.
|
||||
message:
|
||||
type: string
|
||||
description: A message explaining why access was denied.
|
||||
feature_id:
|
||||
type: string
|
||||
description: The ID of the feature that was checked.
|
||||
feature_name:
|
||||
type: string
|
||||
description: The display name of the feature.
|
||||
products:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The ID of the product you set when creating the product
|
||||
name:
|
||||
type: string
|
||||
description: The name of the product
|
||||
group:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Product group which this product belongs to
|
||||
env:
|
||||
enum:
|
||||
- sandbox
|
||||
- live
|
||||
type: string
|
||||
description: The environment of the product
|
||||
is_add_on:
|
||||
type: boolean
|
||||
description: Whether the product is an add-on and can be purchased alongside
|
||||
other products
|
||||
is_default:
|
||||
type: boolean
|
||||
description: Whether the product is the default product
|
||||
archived:
|
||||
type: boolean
|
||||
description: Whether this product has been archived and is no longer available
|
||||
version:
|
||||
type: number
|
||||
description: The current version of the product
|
||||
created_at:
|
||||
type: number
|
||||
description: The timestamp of when the product was created in milliseconds since
|
||||
epoch
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
anyOf:
|
||||
- enum:
|
||||
- feature
|
||||
- priced_feature
|
||||
- price
|
||||
type: string
|
||||
- type: "null"
|
||||
description: The type of the product item
|
||||
feature_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The feature ID of the product item. If the item is a fixed price,
|
||||
should be `null`
|
||||
feature_type:
|
||||
anyOf:
|
||||
- enum:
|
||||
- single_use
|
||||
- continuous_use
|
||||
- boolean
|
||||
- static
|
||||
type: string
|
||||
- type: "null"
|
||||
description: Single use features are used once and then depleted, like API calls
|
||||
or credits. Continuous use features are
|
||||
those being used on an ongoing-basis, like
|
||||
storage or seats.
|
||||
included_usage:
|
||||
anyOf:
|
||||
- anyOf:
|
||||
- type: number
|
||||
- const: inf
|
||||
- type: "null"
|
||||
description: The amount of usage included for this feature.
|
||||
interval:
|
||||
anyOf:
|
||||
- enum:
|
||||
- minute
|
||||
- hour
|
||||
- day
|
||||
- week
|
||||
- month
|
||||
- quarter
|
||||
- semi_annual
|
||||
- year
|
||||
type: string
|
||||
- type: "null"
|
||||
description: The reset or billing interval of the product item. If null, feature
|
||||
will have no reset date, and if there's a
|
||||
price, it will be billed one-off.
|
||||
interval_count:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The interval count of the product item.
|
||||
price:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The price of the product item. Should be `null` if tiered pricing
|
||||
is set.
|
||||
tiers:
|
||||
anyOf:
|
||||
- type: array
|
||||
items:
|
||||
anyOf:
|
||||
- {}
|
||||
- type: "null"
|
||||
- type: "null"
|
||||
description: Tiered pricing for the product item. Not applicable for fixed price
|
||||
items.
|
||||
tier_behavior:
|
||||
anyOf:
|
||||
- enum:
|
||||
- graduated
|
||||
- volume
|
||||
type: string
|
||||
- type: "null"
|
||||
description: "How tiers are applied: graduated (split across bands) or volume
|
||||
(flat rate for the matched tier). Defaults
|
||||
to graduated."
|
||||
usage_model:
|
||||
anyOf:
|
||||
- enum:
|
||||
- prepaid
|
||||
- pay_per_use
|
||||
type: string
|
||||
- type: "null"
|
||||
description: Whether the feature should be prepaid upfront or billed for how
|
||||
much they use end of billing period.
|
||||
billing_units:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The amount per billing unit (eg. $9 / 250 units)
|
||||
reset_usage_when_enabled:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: Whether the usage should be reset when the product is enabled.
|
||||
entity_feature_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The entity feature ID of the product item if applicable.
|
||||
display:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
primary_text:
|
||||
type: string
|
||||
secondary_text:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
required:
|
||||
- primary_text
|
||||
- type: "null"
|
||||
description: The display of the product item.
|
||||
quantity:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Used in customer context. Quantity of the feature the customer has
|
||||
prepaid for.
|
||||
next_cycle_quantity:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Used in customer context. Quantity of the feature the customer will
|
||||
prepay for in the next cycle.
|
||||
config:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
rollover:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
max:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
max_percentage:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
duration:
|
||||
enum:
|
||||
- month
|
||||
- forever
|
||||
type: string
|
||||
default: month
|
||||
length:
|
||||
type: number
|
||||
required:
|
||||
- length
|
||||
- type: "null"
|
||||
on_increase:
|
||||
anyOf:
|
||||
- enum:
|
||||
- bill_immediately
|
||||
- prorate_immediately
|
||||
- prorate_next_cycle
|
||||
- bill_next_cycle
|
||||
type: string
|
||||
- type: "null"
|
||||
on_decrease:
|
||||
anyOf:
|
||||
- enum:
|
||||
- prorate
|
||||
- prorate_immediately
|
||||
- prorate_next_cycle
|
||||
- none
|
||||
- no_prorations
|
||||
type: string
|
||||
- type: "null"
|
||||
- type: "null"
|
||||
description: Configuration for rollover and proration behavior of the feature.
|
||||
description: Product item defining features and pricing within a product
|
||||
description: Array of product items that define the product's features and
|
||||
pricing
|
||||
free_trial:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
duration:
|
||||
enum:
|
||||
- day
|
||||
- month
|
||||
- year
|
||||
type: string
|
||||
description: The duration type of the free trial
|
||||
length:
|
||||
type: number
|
||||
description: The length of the duration type specified
|
||||
unique_fingerprint:
|
||||
type: boolean
|
||||
description: Whether the free trial is limited to one per customer fingerprint
|
||||
card_required:
|
||||
type: boolean
|
||||
description: Whether the free trial requires a card. If false, the customer can
|
||||
attach the product without going through
|
||||
a checkout flow or having a card on
|
||||
file.
|
||||
trial_available:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
default: true
|
||||
- type: "null"
|
||||
description: Used in customer context. Whether the free trial is available for
|
||||
the customer if they were to attach the
|
||||
product.
|
||||
required:
|
||||
- duration
|
||||
- length
|
||||
- unique_fingerprint
|
||||
- card_required
|
||||
- type: "null"
|
||||
description: Free trial configuration for this product, if available
|
||||
base_variant_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: ID of the base variant this product is derived from
|
||||
scenario:
|
||||
enum:
|
||||
- scheduled
|
||||
- active
|
||||
- new
|
||||
- renew
|
||||
- upgrade
|
||||
- update_prepaid_quantity
|
||||
- downgrade
|
||||
- cancel
|
||||
- expired
|
||||
- past_due
|
||||
type: string
|
||||
description: Scenario for when this product is used in attach flows
|
||||
properties:
|
||||
type: object
|
||||
properties:
|
||||
is_free:
|
||||
type: boolean
|
||||
description: True if the product has no base price or usage prices
|
||||
is_one_off:
|
||||
type: boolean
|
||||
description: True if the product only contains a one-time price
|
||||
interval_group:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The billing interval group for recurring products (e.g., 'monthly',
|
||||
'yearly')
|
||||
has_trial:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: True if the product includes a free trial
|
||||
updateable:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: True if the product can be updated after creation (only applicable
|
||||
if there are prepaid recurring prices)
|
||||
required:
|
||||
- is_free
|
||||
- is_one_off
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- group
|
||||
- env
|
||||
- is_add_on
|
||||
- is_default
|
||||
- archived
|
||||
- version
|
||||
- created_at
|
||||
- items
|
||||
- free_trial
|
||||
- base_variant_id
|
||||
description: Products that would grant access to this feature. Use to display
|
||||
upgrade options.
|
||||
required:
|
||||
- scenario
|
||||
- title
|
||||
- message
|
||||
- feature_id
|
||||
- feature_name
|
||||
- products
|
||||
description: Upgrade/upsell information when access is denied. Only present if
|
||||
with_preview was true and allowed is false.
|
||||
required:
|
||||
- allowed
|
||||
- customer_id
|
||||
- balance
|
||||
- flag
|
||||
examples:
|
||||
- allowed: true
|
||||
customer_id: cus_123
|
||||
entity_id: null
|
||||
required_balance: 1
|
||||
balance:
|
||||
feature_id: messages
|
||||
granted: 100
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
overage_allowed: false
|
||||
max_purchase: null
|
||||
next_reset_at: 1773851121437
|
||||
breakdown:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
included_grant: 100
|
||||
prepaid_grant: 0
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
reset:
|
||||
interval: month
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
x-speakeasy-name-override: check
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -12263,7 +12887,10 @@ paths:
|
||||
|
||||
|
||||
@returns The usage value recorded, with either a single updated balance
|
||||
or a map of updated balances.
|
||||
or a map of updated balances. If Autumn is experiencing degraded service
|
||||
from a downstream provider, the API may return 202 after accepting the
|
||||
event for replay so it can be tracked as soon as the service is
|
||||
restored.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -12386,6 +13013,71 @@ paths:
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream
|
||||
provider, so the event was accepted for replay and will be tracked
|
||||
as soon as the service is restored.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
customer_id:
|
||||
type: string
|
||||
description: The ID of the customer whose usage was tracked.
|
||||
entity_id:
|
||||
type: string
|
||||
description: The ID of the entity, if entity-scoped tracking was performed.
|
||||
event_name:
|
||||
type: string
|
||||
description: The event name that was tracked, if event_name was used instead of
|
||||
feature_id.
|
||||
value:
|
||||
type: number
|
||||
description: The amount of usage that was recorded.
|
||||
balance:
|
||||
anyOf:
|
||||
- $ref: "#/components/schemas/Balance"
|
||||
- type: "null"
|
||||
description: The updated balance for the tracked feature. Null if tracking by
|
||||
event_name that affects multiple features.
|
||||
balances:
|
||||
type: object
|
||||
propertyNames:
|
||||
type: string
|
||||
additionalProperties:
|
||||
$ref: "#/components/schemas/Balance"
|
||||
description: Map of feature_id to updated balance when tracking by event_name
|
||||
affects multiple features.
|
||||
required:
|
||||
- customer_id
|
||||
- value
|
||||
- balance
|
||||
examples:
|
||||
- customer_id: cus_123
|
||||
value: 1
|
||||
balance:
|
||||
feature_id: messages
|
||||
granted: 100
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
overage_allowed: false
|
||||
max_purchase: null
|
||||
next_reset_at: 1773851121437
|
||||
breakdown:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
included_grant: 100
|
||||
prepaid_grant: 0
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
reset:
|
||||
interval: month
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
x-speakeasy-name-override: track
|
||||
parameters:
|
||||
- *a1
|
||||
|
||||
@@ -16,16 +16,38 @@ import {
|
||||
balancesTrackJsDoc,
|
||||
} from "../jsDocs/balancesJsDocs";
|
||||
|
||||
type SpecWithResponses = {
|
||||
responses?: Record<string, object | undefined>;
|
||||
};
|
||||
|
||||
const withAcceptedResponse = <TSpec extends SpecWithResponses>(
|
||||
spec: TSpec,
|
||||
nameOverride: string,
|
||||
description: string,
|
||||
) => ({
|
||||
...spec,
|
||||
"x-speakeasy-name-override": nameOverride,
|
||||
responses: {
|
||||
...spec.responses,
|
||||
202: {
|
||||
...spec.responses?.["200"],
|
||||
description,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const balancesCheckContract = oc
|
||||
.route({
|
||||
method: "POST",
|
||||
path: "/v1/balances.check",
|
||||
operationId: "check",
|
||||
description: balancesCheckJsDoc,
|
||||
spec: (spec) => ({
|
||||
...spec,
|
||||
"x-speakeasy-name-override": "check",
|
||||
}),
|
||||
spec: (spec) =>
|
||||
withAcceptedResponse(
|
||||
spec,
|
||||
"check",
|
||||
"Accepted. Autumn is experiencing degraded service from a downstream provider, so access was allowed fail-open.",
|
||||
),
|
||||
})
|
||||
.input(
|
||||
ExtCheckParamsSchema.meta({
|
||||
@@ -64,10 +86,12 @@ export const balancesTrackContract = oc
|
||||
path: "/v1/balances.track",
|
||||
operationId: "track",
|
||||
description: balancesTrackJsDoc,
|
||||
spec: (spec) => ({
|
||||
...spec,
|
||||
"x-speakeasy-name-override": "track",
|
||||
}),
|
||||
spec: (spec) =>
|
||||
withAcceptedResponse(
|
||||
spec,
|
||||
"track",
|
||||
"Accepted. Autumn is experiencing degraded service from a downstream provider, so the event was accepted for replay and will be tracked as soon as the service is restored.",
|
||||
),
|
||||
})
|
||||
.input(
|
||||
TrackParamsSchema.meta({
|
||||
@@ -156,10 +180,12 @@ export const balancesFinalizeContract = oc
|
||||
tags: ["balances"],
|
||||
description:
|
||||
"Finalize a previously locked balance. Use 'confirm' to commit the deduction, or 'release' to return the held balance.",
|
||||
spec: (spec) => ({
|
||||
...spec,
|
||||
"x-speakeasy-name-override": "finalize",
|
||||
}),
|
||||
spec: (spec) =>
|
||||
withAcceptedResponse(
|
||||
spec,
|
||||
"finalize",
|
||||
"Accepted. Autumn is experiencing degraded service from a downstream provider, so the finalize request was allowed fail-open.",
|
||||
),
|
||||
})
|
||||
.input(
|
||||
FinalizeLockParamsV0Schema.meta({
|
||||
|
||||
@@ -27,7 +27,7 @@ export const balancesCheckJsDoc = createJSDocDescription({
|
||||
],
|
||||
methodName: "check",
|
||||
returns:
|
||||
"Whether access is allowed, plus the current balance for that feature.",
|
||||
"Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.",
|
||||
});
|
||||
|
||||
export const balancesTrackJsDoc = createJSDocDescription({
|
||||
@@ -56,5 +56,5 @@ export const balancesTrackJsDoc = createJSDocDescription({
|
||||
],
|
||||
methodName: "track",
|
||||
returns:
|
||||
"The usage value recorded, with either a single updated balance or a map of updated balances.",
|
||||
"The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.",
|
||||
});
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
lockVersion: 2.0.0
|
||||
id: 7b300647-cd76-49e9-bf77-7d1bf5446d66
|
||||
management:
|
||||
docChecksum: f38917335defaad3a30006a26044a642
|
||||
docChecksum: f77f5b270eb05aabdf92746cfc1c8a1c
|
||||
docVersion: 2.2.0
|
||||
speakeasyVersion: 1.759.3
|
||||
generationVersion: 2.869.25
|
||||
releaseVersion: 0.10.17
|
||||
configChecksum: c6b2bd1231da8dc3af5be7430f3cfbac
|
||||
persistentEdits:
|
||||
generation_id: 3a5123d6-893b-4feb-88cd-f29b20541bbd
|
||||
pristine_commit_hash: 907e29e66eda637e4bf967fbeed5cf8d0ebc3a0b
|
||||
pristine_tree_hash: d73724a3beca30566c4e7ff020eeafcadee9f575
|
||||
generation_id: a3b10b54-8096-4879-ace9-e1d782c59725
|
||||
pristine_commit_hash: dd3f08315b4b61f09a17e02d5f3ae7f181b0f077
|
||||
pristine_tree_hash: f6afcc186b6659c0ea8956f84bdb3a2bb5ec56c9
|
||||
features:
|
||||
typescript:
|
||||
additionalDependencies: 0.1.0
|
||||
@@ -410,70 +410,126 @@ trackedFiles:
|
||||
id: 786823ab8ff0
|
||||
last_write_checksum: sha1:bdaf1519faa1b1024d4e015cb936dc7406959f6d
|
||||
pristine_git_object: dc3e4bd7fc8266aa083959b5eac4f8a111f7479f
|
||||
docs/models/check-config.md:
|
||||
id: 51e4ae8b2551
|
||||
last_write_checksum: sha1:5c8cd73639f2401662e134559d6c1d4556ce0279
|
||||
pristine_git_object: d3f109cef10784fb7a3dd840a34f6214c04e29fe
|
||||
docs/models/check-credit-schema.md:
|
||||
id: 23d351e08612
|
||||
last_write_checksum: sha1:2ecc9e7fd584aa86f0527836fbb37b0afbaa669d
|
||||
pristine_git_object: c77bf103d178ca28a3192f153a676e80735904b2
|
||||
docs/models/check-env.md:
|
||||
id: d46376d0c4e0
|
||||
last_write_checksum: sha1:79f6d930209b23c2bf5eb7ef468feeb2cf92f7b3
|
||||
pristine_git_object: c91506826d1df807c7e52fc71b93d43a08e64356
|
||||
docs/models/check-feature.md:
|
||||
id: 17698212d17f
|
||||
last_write_checksum: sha1:7da866b793c5b1dc17acbe43c867a0bfcf1d988f
|
||||
pristine_git_object: aac2da8f1701079e0ee2d546f741ef5232557632
|
||||
docs/models/check-free-trial.md:
|
||||
id: cf185d0b9316
|
||||
last_write_checksum: sha1:bc98bdff33e3810402bbd6223688c5aa09844685
|
||||
pristine_git_object: 9a2eab113dd5e34faccf718bd046d044ab0e498d
|
||||
docs/models/check-config1.md:
|
||||
id: 12248c65dbd6
|
||||
last_write_checksum: sha1:407da9555ee976adfaaf07ca71a4af839f3942b0
|
||||
pristine_git_object: 56c99235d306fbc59686c31d8076f042ece7d5d3
|
||||
docs/models/check-config2.md:
|
||||
id: c06d98423c85
|
||||
last_write_checksum: sha1:3f01425adf99f5b98bd3fb776efad63477ffa179
|
||||
pristine_git_object: 37a12465f59734444b5f211e211b5d39e9b68667
|
||||
docs/models/check-credit-schema1.md:
|
||||
id: c6a4121792d7
|
||||
last_write_checksum: sha1:7498fb3cb82d21dbb2442176bdc616b9517c720a
|
||||
pristine_git_object: 3d117f48048a47d91bc0bb8fe828bacefe233530
|
||||
docs/models/check-credit-schema2.md:
|
||||
id: cb287a316d3f
|
||||
last_write_checksum: sha1:39a4cc55bb3c56f3d011e9636e4b910695bef383
|
||||
pristine_git_object: a6c02f3e96e45adce816a2ceaf35de2ecfef6eb4
|
||||
docs/models/check-env1.md:
|
||||
id: 39164c945d1e
|
||||
last_write_checksum: sha1:f4c8b026ef7193fb5378997d0024a437bbca10c9
|
||||
pristine_git_object: 5651062b5218ba6e284e37ebe7ce1747e4488511
|
||||
docs/models/check-env2.md:
|
||||
id: 810bf217e738
|
||||
last_write_checksum: sha1:e3f78affbb5b2b3076fa7180f47a4e3d916260f2
|
||||
pristine_git_object: 395bc6a69007183a1e85dfe5c7e36a920280a33c
|
||||
docs/models/check-feature1.md:
|
||||
id: 4911e5ca3bbd
|
||||
last_write_checksum: sha1:6cf187837869d8b6e7ed6317f54889850408f36a
|
||||
pristine_git_object: ea7f5ff13062d1e64b8804efe7f305f4d25935ea
|
||||
docs/models/check-feature2.md:
|
||||
id: 3e789aa99fd1
|
||||
last_write_checksum: sha1:5d7218e3d596e6ae9283c057cf0bb7d8ff46c6df
|
||||
pristine_git_object: 6fd456302a01f5b85a9645ba8dcc8d5652f10cd1
|
||||
docs/models/check-free-trial1.md:
|
||||
id: 13ac0bc6851a
|
||||
last_write_checksum: sha1:22d4778d00f68a471d6ed1fa321a83813f8f6d0b
|
||||
pristine_git_object: bcf98bdacd52e00b9e7e09eb572f5ff4d7a02f8b
|
||||
docs/models/check-free-trial2.md:
|
||||
id: 06c598c39d08
|
||||
last_write_checksum: sha1:8c946023c4a81045f9277d716736fe6fefd2103e
|
||||
pristine_git_object: 55dab740695b859763c4ffabc568e0c12045af17
|
||||
docs/models/check-globals.md:
|
||||
id: c1c736dc89d3
|
||||
last_write_checksum: sha1:ca5e3ab0ab17689f318982a7889bcc89c7c0e1c4
|
||||
pristine_git_object: e7a1e28ebd8cb19e0fd665f56754c4252ced391b
|
||||
docs/models/check-interval.md:
|
||||
id: 2b947e7da9da
|
||||
last_write_checksum: sha1:a45ec5c1aa13d5d55190e3d5defb98dea5e56b28
|
||||
pristine_git_object: 7d90a519f2488653231e338d3d87749b6dd3a429
|
||||
docs/models/check-item.md:
|
||||
id: 65ebecbc13ac
|
||||
last_write_checksum: sha1:7c3aed95d659392564bd1c629f79fac31f752235
|
||||
pristine_git_object: e0e6ed2f5ff1c7c3b2fc7275169503fd19758e7c
|
||||
docs/models/check-interval1.md:
|
||||
id: 7771ce869477
|
||||
last_write_checksum: sha1:229ea582c6e22e87c33355cbac400f3ce7c11ced
|
||||
pristine_git_object: 101b7190ea6edbfdbb64f8d621913cc678e5c9b7
|
||||
docs/models/check-interval2.md:
|
||||
id: 73c11b51e0f4
|
||||
last_write_checksum: sha1:fb169811b4d093482185911fe3622f931171a583
|
||||
pristine_git_object: 6663f4f81d2eb31450edb35fb1e1994b02a21e4a
|
||||
docs/models/check-item1.md:
|
||||
id: 371420ba5084
|
||||
last_write_checksum: sha1:c60759f6237512021ab47e2ead20159cabe1c254
|
||||
pristine_git_object: f2137cf567b3b05143afc2d5b6567b7208d66ce0
|
||||
docs/models/check-item2.md:
|
||||
id: 455e28bf1f61
|
||||
last_write_checksum: sha1:f6c8fc2cbcc944e29d6c9f1affb1819f04a01ff5
|
||||
pristine_git_object: f426f9d7d6e854d2964306d16231ac1a83bfcb7e
|
||||
docs/models/check-lock.md:
|
||||
id: dcd32828bfb4
|
||||
last_write_checksum: sha1:e1abe8cbfa6ae715aee62cd16d53fb9fe9bc42d5
|
||||
pristine_git_object: b21ba54a0652e2c016fcb4434880c429fa4c41b3
|
||||
docs/models/check-on-decrease.md:
|
||||
id: 361f05432960
|
||||
last_write_checksum: sha1:4aae28abd12eeccf2ee789c3684cb06052776115
|
||||
pristine_git_object: e08007c0ffd502919dd23fab540d0ce3ac92150f
|
||||
docs/models/check-on-increase.md:
|
||||
id: 9f889141cf7b
|
||||
last_write_checksum: sha1:539207de265a87ce63f2b37cd9a88d5dddc5ce8b
|
||||
pristine_git_object: 985357bc0cc5110a25535a26fe123d923eccc52b
|
||||
docs/models/check-on-decrease1.md:
|
||||
id: bbd6ca066659
|
||||
last_write_checksum: sha1:5ac919c7c94dce26869b1b96263edd6fe0ef6ffe
|
||||
pristine_git_object: 8d7b2619fdbf6c7759f0b02bdf6222a1481f0c8b
|
||||
docs/models/check-on-decrease2.md:
|
||||
id: 333ab766169b
|
||||
last_write_checksum: sha1:b569dd9fc4f5095e837349449e41747d1547ab2d
|
||||
pristine_git_object: 81fba0dc1ca715c2c87150852f5ea6b3d7ea9b03
|
||||
docs/models/check-on-increase1.md:
|
||||
id: 42764b15d460
|
||||
last_write_checksum: sha1:5c45815e45132fc03f35e20118b8c0ae4c0e23d1
|
||||
pristine_git_object: a6f9602cbdfae47422af9644d90b58637cbc480c
|
||||
docs/models/check-on-increase2.md:
|
||||
id: f8686ee92533
|
||||
last_write_checksum: sha1:1c0a4bf558d318e6be90470c4e18156e23db7780
|
||||
pristine_git_object: a834fd56d91c8463fbfda0c5326874862dd042f9
|
||||
docs/models/check-params.md:
|
||||
id: 1f4a01957fbe
|
||||
last_write_checksum: sha1:c8c546b4aa4d1e459aef8131e522e6bf41ccc7c7
|
||||
pristine_git_object: 5815e9a4d8b5921e63cce39209bb8172a65659d8
|
||||
docs/models/check-response-body1.md:
|
||||
id: fe7fb45cea45
|
||||
last_write_checksum: sha1:26897ebc453ccd5c894ba598f285a74d05fc515b
|
||||
pristine_git_object: 25a19c5abf9e43599ca4d4c06db50bd4befa6296
|
||||
docs/models/check-response-body2.md:
|
||||
id: 5dee363a1bb2
|
||||
last_write_checksum: sha1:33baa24a565d51b768bc28121ed5c596ee7ea4d1
|
||||
pristine_git_object: 8c6dd5fc87a5b3584d6ad74fc457bea794fa8915
|
||||
docs/models/check-response.md:
|
||||
id: d686426b106e
|
||||
last_write_checksum: sha1:c886a81c0a5fc1c3e16c4ac0f85837556d02a049
|
||||
pristine_git_object: f80e7e0b59a829dd4546bd0c6e80c3514b9be4c9
|
||||
docs/models/check-rollover.md:
|
||||
id: e0c3715cbbae
|
||||
last_write_checksum: sha1:80175a4212763459f3ed77feaccd5e14c457d88c
|
||||
pristine_git_object: e84db9458a58a2be052b70c4f23e083554650b06
|
||||
docs/models/check-tier-behavior.md:
|
||||
id: 89be3843344e
|
||||
last_write_checksum: sha1:942afb288468d96e6b14d3ae855b8dfbc2540083
|
||||
pristine_git_object: 77d39923ac11253f4bef2b2a581c9a1c6e634393
|
||||
docs/models/config-duration.md:
|
||||
id: d65392b01d8d
|
||||
last_write_checksum: sha1:ee95e37dba737aae387490c38a25e7cd540d31f4
|
||||
pristine_git_object: d7f89da44a6bcb92ea2604a44881f3492644353b
|
||||
last_write_checksum: sha1:097a5eaecd280f329d04998f22ec0054dac66860
|
||||
pristine_git_object: f92670361472d702fe8f0904bcef87757f774ccc
|
||||
docs/models/check-rollover1.md:
|
||||
id: 1ce2cc8c99b8
|
||||
last_write_checksum: sha1:0bab5a46354397ab98699802d8d8b68bb9438d91
|
||||
pristine_git_object: 37f686b82cce1cb0c19d46e7690ff1600a4b364f
|
||||
docs/models/check-rollover2.md:
|
||||
id: f14d7927e0fe
|
||||
last_write_checksum: sha1:2ac20e2990a0692eae5805f7d1c0e190cade568c
|
||||
pristine_git_object: 0c0c3533abe5f1ba1bd1406d9f9990da76d1d5c8
|
||||
docs/models/check-tier-behavior1.md:
|
||||
id: f706971c8df7
|
||||
last_write_checksum: sha1:9ba7e214d2dec5bd53b56e352fa24181402eea7e
|
||||
pristine_git_object: c0614492aa04236769f57c04c93e6231ebada5d0
|
||||
docs/models/check-tier-behavior2.md:
|
||||
id: a7c60a76efaa
|
||||
last_write_checksum: sha1:3f5cd2bb25df5d2e15981ff6428e3eb2f3b6dbd0
|
||||
pristine_git_object: 286bb306b086cd4ac3b2fb2558763725dda76a7c
|
||||
docs/models/config-duration1.md:
|
||||
id: b92f5461077c
|
||||
last_write_checksum: sha1:d985bf6694856a41dc6e989e459bb9e776465fd2
|
||||
pristine_git_object: a1484c1b5ab2f08ae0d2b352091a10c128b57951
|
||||
docs/models/config-duration2.md:
|
||||
id: 69fbee651fe4
|
||||
last_write_checksum: sha1:42075b517dc431b582ffb160ee3bae87b3939314
|
||||
pristine_git_object: c85f00335a0f5ebaf2db639064603783b7231f8d
|
||||
docs/models/create-balance-duration.md:
|
||||
id: ecd288ab29a3
|
||||
last_write_checksum: sha1:7b89f54a11e3018b909dbf2c2cdb244748a79c40
|
||||
@@ -642,6 +698,14 @@ trackedFiles:
|
||||
id: 4b62f4430e70
|
||||
last_write_checksum: sha1:6f14cf6ec48162bc6154580375c55f699b9925a1
|
||||
pristine_git_object: 5a51ad5a3c5938a475f94789e10e56e93aa198f5
|
||||
docs/models/create-plan-config-request.md:
|
||||
id: 43ddb5f98ee5
|
||||
last_write_checksum: sha1:69d4b3a831978ba13e5973140d21f35746dffa7a
|
||||
pristine_git_object: 01a28803ce9f6db4294cf8b37dc09f4406dbb0eb
|
||||
docs/models/create-plan-config-response.md:
|
||||
id: 2ad1b88a85c3
|
||||
last_write_checksum: sha1:2965fcdded006fc7e79cc236bed9d84051c798c0
|
||||
pristine_git_object: 481a5081af12979bc32ef1f599f253b04cad34d8
|
||||
docs/models/create-plan-credit-schema.md:
|
||||
id: 213fe4cef877
|
||||
last_write_checksum: sha1:9a9109b25682ec0ed4db881cf449e6ed823eb124
|
||||
@@ -716,8 +780,8 @@ trackedFiles:
|
||||
pristine_git_object: 4636c8e7bc514c5398be5f2af59d18fcf652cfd3
|
||||
docs/models/create-plan-params.md:
|
||||
id: 9570d70789a1
|
||||
last_write_checksum: sha1:d8adbcb0249b2161bafbe297f77fbe68ecac9527
|
||||
pristine_git_object: 73f30152ca92f1e90ebc0f6404c58893fba0eea8
|
||||
last_write_checksum: sha1:de76069455af87200818a8d7b2d192cb1b2bf26d
|
||||
pristine_git_object: 215e4320b6640213542773b24f0404e4b5af376e
|
||||
docs/models/create-plan-plan-item.md:
|
||||
id: cc6b2127965e
|
||||
last_write_checksum: sha1:32b1546a311beca13ff1ec2ea13f55fe67b839fb
|
||||
@@ -768,8 +832,8 @@ trackedFiles:
|
||||
pristine_git_object: f99bd3cdd5b9038791efdc0811b61abb4b8c7db9
|
||||
docs/models/create-plan-response.md:
|
||||
id: f48e8b1136af
|
||||
last_write_checksum: sha1:a203f0caab2f9ab1592ac1fe2f94fbf43d11aa87
|
||||
pristine_git_object: 72eae3131ae2b03bdbcb7e1123b8b54c6105d74d
|
||||
last_write_checksum: sha1:caacca009b6ebd1a12cff7200d485eed907db391
|
||||
pristine_git_object: f618e72a80ecdefee38ff6c7fc4efe12493bdaeb
|
||||
docs/models/create-plan-rollover-request.md:
|
||||
id: 10237b75cd73
|
||||
last_write_checksum: sha1:4c1b0ddde1b8d4232668b42e694cff3ca1c19f43
|
||||
@@ -1014,10 +1078,14 @@ trackedFiles:
|
||||
id: 3a927f275515
|
||||
last_write_checksum: sha1:19a85259a30b26567db272e409038d45136a35c8
|
||||
pristine_git_object: cdf1d50ae086bd5778c6c266097c00619c0787df
|
||||
docs/models/feature-type.md:
|
||||
id: c6368d6178e0
|
||||
last_write_checksum: sha1:6cfb774eadb97f33ce64f0e3a0d6a651f989b2c9
|
||||
pristine_git_object: 8d1c1037ac18f2073977feb666331ee662cd3ad3
|
||||
docs/models/feature-type1.md:
|
||||
id: 7a7856945efc
|
||||
last_write_checksum: sha1:d58d7f86b5538743051f1907fe11cba4eb25b587
|
||||
pristine_git_object: 2f84c4455758c76b44852be1ca78db23dc247cd4
|
||||
docs/models/feature-type2.md:
|
||||
id: cba2c8cb3ceb
|
||||
last_write_checksum: sha1:d966dffe5ba0b6cea35acb591f76d3ba354c0ab5
|
||||
pristine_git_object: 22cb0f95afca20abd0512ff1b879945666ae942e
|
||||
docs/models/finalize-balance-params.md:
|
||||
id: d27a9dc54b34
|
||||
last_write_checksum: sha1:4a792e241eec2080f50ce35affdbe233f2452da5
|
||||
@@ -1026,30 +1094,54 @@ trackedFiles:
|
||||
id: 9e46b2266879
|
||||
last_write_checksum: sha1:71ca1201534ec6648233b162a2182853e22c5bf3
|
||||
pristine_git_object: f9b057e603470bb3b10559db649d12276ca9441f
|
||||
docs/models/finalize-lock-response-body1.md:
|
||||
id: a26657e9fc9b
|
||||
last_write_checksum: sha1:3ec646f95ff32c26aabe5344be76ba1fd20141a2
|
||||
pristine_git_object: 1ecb12ad7b1f4295d92707205dfd15a638f04c43
|
||||
docs/models/finalize-lock-response-body2.md:
|
||||
id: b6c64f1548c8
|
||||
last_write_checksum: sha1:8cd028fcf2ae8e01308deb5f4f6aa521fb6e5c12
|
||||
pristine_git_object: d8e92965780a197fb88d8d7ffab88683fe6c038c
|
||||
docs/models/finalize-lock-response.md:
|
||||
id: 1d3e59ed6f9f
|
||||
last_write_checksum: sha1:2cb76104cdcfc8523df0b1bee455803d92d1a03d
|
||||
pristine_git_object: 73e853665d84c32272456719c739e803c14f8494
|
||||
docs/models/flag-display.md:
|
||||
id: ce9b9b5870aa
|
||||
last_write_checksum: sha1:be8f81dafec1083eba0da6699a54562e549da313
|
||||
pristine_git_object: 382a852fd69e97fa81176acdd66a374f5254399a
|
||||
docs/models/flag-type.md:
|
||||
id: bea64d93e37a
|
||||
last_write_checksum: sha1:f347144e427f1c112728d1822c769c87fce21e6f
|
||||
pristine_git_object: 7bb722b222e6bd30c8da293c4e3ab33005c0f14d
|
||||
docs/models/flag.md:
|
||||
id: f7a84826e2db
|
||||
last_write_checksum: sha1:68a6e6d129bcef481cfb50fc83955242d6c63edf
|
||||
pristine_git_object: 2648907da03277b759d0a677570c0aaf679c6aca
|
||||
last_write_checksum: sha1:228fb911552a0230572611e839dd1d88a67e2f0a
|
||||
pristine_git_object: 1245c94d0e602d8ef227c2b8b806fcb182b038c6
|
||||
docs/models/flag-display1.md:
|
||||
id: 795088cca79e
|
||||
last_write_checksum: sha1:434ec2ae0dac8c5387d8a9d605603fe88000d25f
|
||||
pristine_git_object: 794b09f09fbf266c9d5eb6d9466bf62f8b9ed2cd
|
||||
docs/models/flag-display2.md:
|
||||
id: d89ae8a6f251
|
||||
last_write_checksum: sha1:1aa8f537c82e8734615e93edbe9001143f636c6d
|
||||
pristine_git_object: da2af4c5d2803a58d4e4024c4f932bf98d81f47b
|
||||
docs/models/flag-type1.md:
|
||||
id: 15d64d2ad155
|
||||
last_write_checksum: sha1:5c3e6abbce2cc1e2031dec3753e1b772c33c2be2
|
||||
pristine_git_object: f89e223ad297c3a58ae898e13db7189b6dd7f0b1
|
||||
docs/models/flag-type2.md:
|
||||
id: d17b05a3a757
|
||||
last_write_checksum: sha1:06900ede6a3c179425a57395ccfdede8c6cb05cd
|
||||
pristine_git_object: 35462df3dbfed697a499518ef17b3a0a7e18a115
|
||||
docs/models/flag1.md:
|
||||
id: 56f975d669ad
|
||||
last_write_checksum: sha1:76d82de9c6f767225df3d503c13ed5b2ff9235a1
|
||||
pristine_git_object: 9a60283c41cf15707c6a18d145bb6a526f290f66
|
||||
docs/models/flag2.md:
|
||||
id: aa1218c7a1e0
|
||||
last_write_checksum: sha1:de961b4f67dbaee523da2fe948eaa7f3953c402c
|
||||
pristine_git_object: 4e103bd91045d0ea4aa9942bd2ebcef6353459ea
|
||||
docs/models/flags.md:
|
||||
id: cb7c8de0dda0
|
||||
last_write_checksum: sha1:1ab6efab085526a9c4762eee212dcf17657695b1
|
||||
pristine_git_object: 31ef9d606867dca40dea4bc8c751118acfb7077f
|
||||
docs/models/free-trial-duration.md:
|
||||
id: f12ff48f6deb
|
||||
last_write_checksum: sha1:522ce4071e5cacf6aed1573e6b9c4ef8114de6f7
|
||||
pristine_git_object: be7e436b27f6c19e74687875395980c34840b330
|
||||
docs/models/free-trial-duration1.md:
|
||||
id: 489b02917323
|
||||
last_write_checksum: sha1:c8eeda3fd04248398afb5d63fa625a63ad4b3433
|
||||
pristine_git_object: 55a7c3ba219ef88575dd74aef87d4ef591b2f2e4
|
||||
docs/models/free-trial-duration2.md:
|
||||
id: b59a2d07f9ed
|
||||
last_write_checksum: sha1:2344cafa7f5cfa06525a5a9d62dd685f541b8434
|
||||
pristine_git_object: e07184b88c1a11c20ea90e111fc98e2ebfb1a600
|
||||
docs/models/free-trial-request.md:
|
||||
id: 746a54d9b71f
|
||||
last_write_checksum: sha1:3e9f8119181b6d56ed4f0021f8f97766996ffb04
|
||||
@@ -1206,6 +1298,10 @@ trackedFiles:
|
||||
id: 81d8a111a09a
|
||||
last_write_checksum: sha1:25fc939c3c24f1e4fdee1ac9f9668dcaea817291
|
||||
pristine_git_object: d7318d7d8db471de2c14e9f80225da5437dc0aea
|
||||
docs/models/get-plan-config.md:
|
||||
id: 607800ff047a
|
||||
last_write_checksum: sha1:f4d97021b0aee67fcb2c809e9b93bd0d1991d801
|
||||
pristine_git_object: 5983e36521ca84b8505225e9f8eb71d593aca228
|
||||
docs/models/get-plan-credit-schema.md:
|
||||
id: fdfd3a232487
|
||||
last_write_checksum: sha1:bda036d0335542dc4bea36444ead3b4d1fc31c6b
|
||||
@@ -1284,8 +1380,8 @@ trackedFiles:
|
||||
pristine_git_object: 77c04173688934e1b024f1401da75240777ab5c5
|
||||
docs/models/get-plan-response.md:
|
||||
id: fd0d6a5893f8
|
||||
last_write_checksum: sha1:97aae03bfffc36ee5bf342362365923dc0da73e1
|
||||
pristine_git_object: ba0e0dfac6d39006ef18de08de9f2f233d6abda9
|
||||
last_write_checksum: sha1:2380f1b851cf82b1382a13b53ef60eeebca23f96
|
||||
pristine_git_object: f6cfa4064e78a99d02d2e134f233cf4f3cf19b39
|
||||
docs/models/get-plan-rollover.md:
|
||||
id: 8ff9768b18a9
|
||||
last_write_checksum: sha1:1f0608e063f1cb07555af25541af1b3c39aa09d1
|
||||
@@ -1302,10 +1398,14 @@ trackedFiles:
|
||||
id: 5300ef539ed8
|
||||
last_write_checksum: sha1:b334efb80b4e13e356c43248994d2f2640ffcf27
|
||||
pristine_git_object: b6ff1ca2773ceb3a33da7acc3bf2144f2823c16a
|
||||
docs/models/included-usage.md:
|
||||
id: f27abcdfdd7d
|
||||
last_write_checksum: sha1:ca0a41260fa62322a9525f4267ac0ec6d93ae6d8
|
||||
pristine_git_object: 5fe6a61067cd319d6cd0d1e1e7f1d165c0d4579d
|
||||
docs/models/included-usage1.md:
|
||||
id: a4def1415784
|
||||
last_write_checksum: sha1:83f97786c0a5ca88c4f689e318146531cdd84ba8
|
||||
pristine_git_object: cfc9b8b8cde10b6df809ed1cafcca97b60f1d729
|
||||
docs/models/included-usage2.md:
|
||||
id: d32fd48d0d1e
|
||||
last_write_checksum: sha1:1db7b73b664823c5938063172e43017b807eea84
|
||||
pristine_git_object: c3892aa1ab8837c731f49e042711f10729d82df9
|
||||
docs/models/intent.md:
|
||||
id: a4a6fa8818f7
|
||||
last_write_checksum: sha1:39fa3a78bda572fa9b8a765966413b6d2b4436ea
|
||||
@@ -1470,6 +1570,10 @@ trackedFiles:
|
||||
id: 925f450419aa
|
||||
last_write_checksum: sha1:6b7a4aa06733643802a7ca7e0f6fff763ca86eaa
|
||||
pristine_git_object: 0466e6a0248bc7e481df111bed7f2db6e27c1e7e
|
||||
docs/models/list-plans-config.md:
|
||||
id: 0c2ac2565c92
|
||||
last_write_checksum: sha1:c7211fb3a1c9db22f2da181ec43bfa151c5e9f50
|
||||
pristine_git_object: f1e6424536556ef65d6fbc0086b41d6ed4c3a324
|
||||
docs/models/list-plans-credit-schema.md:
|
||||
id: 3f2d4bd971cc
|
||||
last_write_checksum: sha1:11870331e68516a49daa39eab1dc751ee0a8674b
|
||||
@@ -1520,8 +1624,8 @@ trackedFiles:
|
||||
pristine_git_object: 378d7d1cba1dbb7be7733b007749bb6d719e26bf
|
||||
docs/models/list-plans-list.md:
|
||||
id: d916e8f7c446
|
||||
last_write_checksum: sha1:44b80ecdbc23afc3712a4c66b009c235aaeda807
|
||||
pristine_git_object: 94c1c5e7f7a3b7bca023c517724c9188f5787bfd
|
||||
last_write_checksum: sha1:518ad868148d67928c79b2da7a12df4ad4a4c833
|
||||
pristine_git_object: 6883b46582a1178990d14025eaa40e749c2a45db
|
||||
docs/models/list-plans-params.md:
|
||||
id: 4b66bf1417a6
|
||||
last_write_checksum: sha1:ace49e58845a78383d5e26214e791bf7a131fd5b
|
||||
@@ -1552,8 +1656,8 @@ trackedFiles:
|
||||
pristine_git_object: 1f6ac37850068cf1dfe4dc7743d0abab5cebb127
|
||||
docs/models/list-plans-response.md:
|
||||
id: 9441ad31d57f
|
||||
last_write_checksum: sha1:bc3ef6b2727337618f63666765f639f53e8572cb
|
||||
pristine_git_object: 55a7c5e5e99353bdc08a15805106262cf2c6bc4a
|
||||
last_write_checksum: sha1:f19898200a35677e2d68233bc40f1b05ae2bde90
|
||||
pristine_git_object: d2ed9c818b2e80d634ddb6dda47d30a1c7d57a38
|
||||
docs/models/list-plans-rollover.md:
|
||||
id: 19aa526beff0
|
||||
last_write_checksum: sha1:9179fd3d1ab7622bdbf4808116af5cc39c08fc43
|
||||
@@ -1730,6 +1834,10 @@ trackedFiles:
|
||||
id: 4789ae90ae01
|
||||
last_write_checksum: sha1:7e999cb8f855e8f3d917a2024ed3fd88803b45cd
|
||||
pristine_git_object: aa533c8b3c984f8773a81063ee748107b2eff98d
|
||||
docs/models/plan-config.md:
|
||||
id: 261d8a3d0cf4
|
||||
last_write_checksum: sha1:096ce56e419994eabe3e85c5b0dc19d847f87ea5
|
||||
pristine_git_object: 31572368e97f28ca2fe42e948c2b16de6722e375
|
||||
docs/models/plan-credit-schema.md:
|
||||
id: 4a323c1dbf0a
|
||||
last_write_checksum: sha1:167acec310caca3e8e3b1cd5461c5453994f09c9
|
||||
@@ -1800,8 +1908,8 @@ trackedFiles:
|
||||
pristine_git_object: 7bc7590d5b2edd57dc26811f4a9ce9e60d4c02a3
|
||||
docs/models/plan.md:
|
||||
id: 900c4149ef4b
|
||||
last_write_checksum: sha1:62a2df64c93f1320fb1a1175222770ede624008b
|
||||
pristine_git_object: e12ea4639ef56be38114ad4e493c05043a98e7f0
|
||||
last_write_checksum: sha1:cda2b09a51edc8803af0e3f264958871d9453f8e
|
||||
pristine_git_object: 437656dd99caa5529d947667b536dcbdb62ee3d3
|
||||
docs/models/preview-attach-attach-discount.md:
|
||||
id: b0e773c166f7
|
||||
last_write_checksum: sha1:a6efccaad3aedb6172053dc61824402f891ff6ed
|
||||
@@ -2338,34 +2446,58 @@ trackedFiles:
|
||||
id: 3c7caea04355
|
||||
last_write_checksum: sha1:4526b7aa9999cbf699a15b2187aa5bd4de5b6206
|
||||
pristine_git_object: f62b42a1a7d41787d477f99ef1702a735196a400
|
||||
docs/models/preview.md:
|
||||
id: ca71b601ef12
|
||||
last_write_checksum: sha1:aa806d7dd8515ee48400ccbae3f07b86b9694420
|
||||
pristine_git_object: d8d0ac14ea6dafffa2f62eccb094cca9f153c4bf
|
||||
docs/models/preview1.md:
|
||||
id: 203e34d3c393
|
||||
last_write_checksum: sha1:baa476c6f9eca778b764c559b11eb985d9396c46
|
||||
pristine_git_object: 6b9852fd043a11b17349ff52cbdafb537ac867e0
|
||||
docs/models/preview2.md:
|
||||
id: 96d6fae57a72
|
||||
last_write_checksum: sha1:728c176a1f265ca95c54c05ec4b62bb429b26aa2
|
||||
pristine_git_object: 3abb2cf65f13570a222275a9b2c7c38be94d5f81
|
||||
docs/models/processor.md:
|
||||
id: e77acb454265
|
||||
last_write_checksum: sha1:2547723a165d332580ab872bb3cf5f1070ceec3d
|
||||
pristine_git_object: c4c66c1e5f96fa971a6359bbf77bf3b6df448d2b
|
||||
docs/models/product-display.md:
|
||||
id: 21fc9cc2b072
|
||||
last_write_checksum: sha1:f97e0642300ed0870335c631395e187150d12838
|
||||
pristine_git_object: 71aafeb419a55dced06ff025e7aa4ed9af46b812
|
||||
docs/models/product-scenario.md:
|
||||
id: 53b34e452304
|
||||
last_write_checksum: sha1:d8d212b4bce953dba908f5a676ac29b51420b380
|
||||
pristine_git_object: 5389e3320fc5eb7fac528b4f405b73143565b6e5
|
||||
docs/models/product-type.md:
|
||||
id: 739b492c48c8
|
||||
last_write_checksum: sha1:b16bb5e2b258d3eabb0213f6dd24c5b36a5fc581
|
||||
pristine_git_object: 42b3d7af1ce89e608a6c6c41c65098305b5ac826
|
||||
docs/models/product.md:
|
||||
id: c91436bbe13a
|
||||
last_write_checksum: sha1:041b51afd3f44784a3ac0e9fe1d343ce034c6d5c
|
||||
pristine_git_object: 5316a24e66c301315d6be2662e9a814022b0af04
|
||||
docs/models/properties.md:
|
||||
id: 78b1b1d1b631
|
||||
last_write_checksum: sha1:5d6627cde2aa86a31974cd3bf255765757c35da2
|
||||
pristine_git_object: fda272f14753b6e647c681e24011c9de15a57724
|
||||
docs/models/product-display1.md:
|
||||
id: 0ab8e93a2eb3
|
||||
last_write_checksum: sha1:c111a88e04ea033eff7c19977d3a56d24ba22845
|
||||
pristine_git_object: 2eac6685823dcf5710c6fb12670ea593f7a84944
|
||||
docs/models/product-display2.md:
|
||||
id: ec6de1d4fb2e
|
||||
last_write_checksum: sha1:0766d3275e4a6b992f1cb7b1c9e78e1bf4a3af83
|
||||
pristine_git_object: 942b99d64bb2b5f8af337646041845f0f2389d3b
|
||||
docs/models/product-scenario1.md:
|
||||
id: 2d76692936bf
|
||||
last_write_checksum: sha1:d4e3a79025c88076b2e186a155f0019191855db8
|
||||
pristine_git_object: e51e6f25dfc0709cd257497ef67d3c286669f49a
|
||||
docs/models/product-scenario2.md:
|
||||
id: 68f198bdb022
|
||||
last_write_checksum: sha1:341100a208fd01a1068084692136256901378445
|
||||
pristine_git_object: 1e22767d9b6c5398a324476254198d69d40fb86e
|
||||
docs/models/product-type1.md:
|
||||
id: a0c4545ab104
|
||||
last_write_checksum: sha1:573f1476d0dbdccf29519c23178d3083edfc36b3
|
||||
pristine_git_object: 24d3e6b9a36a6fbbbc305db59fc05635b2bcecb2
|
||||
docs/models/product-type2.md:
|
||||
id: c75d4dab1916
|
||||
last_write_checksum: sha1:0e5d9f554d0ab6ebd5073b00b14d5eddaf42c825
|
||||
pristine_git_object: 5add6b6648df42f5dd60678e644fec5a3f2626f4
|
||||
docs/models/product1.md:
|
||||
id: 880ca8ae9886
|
||||
last_write_checksum: sha1:9253388ef4ce974184b84ebeb012d18defed9e21
|
||||
pristine_git_object: 67ec68bcf882341e97e4575429c1656c5a5bbafa
|
||||
docs/models/product2.md:
|
||||
id: 6262b044d234
|
||||
last_write_checksum: sha1:eba731a0429ff4824f8e658bc87b6b9047ff4b3a
|
||||
pristine_git_object: 0a1d5f6fda8ab96d8987a5617bb55fd3882ffbd4
|
||||
docs/models/properties1.md:
|
||||
id: d1dd750f2ed3
|
||||
last_write_checksum: sha1:2336ba133059be249159bdcd6a7981282ad69796
|
||||
pristine_git_object: a3d7dfc6064d13237ed0944d3c5f1ca80d787232
|
||||
docs/models/properties2.md:
|
||||
id: 3ada091965bd
|
||||
last_write_checksum: sha1:aa9bfb0870b6f8161503b9fe62408dcba1e571cd
|
||||
pristine_git_object: e72588a57659e03f689537809123070a75c8c341
|
||||
docs/models/purchase.md:
|
||||
id: f872769b6939
|
||||
last_write_checksum: sha1:f478ae26fe728efde7d8e38ce46593dab6d5f9d0
|
||||
@@ -2402,10 +2534,14 @@ trackedFiles:
|
||||
id: 4551c882db3e
|
||||
last_write_checksum: sha1:400f48d09c30265fc4650ca42db90109dfdda599
|
||||
pristine_git_object: 08b89a9cc150d2d174408e0ccb7d2eea9b8e4014
|
||||
docs/models/scenario.md:
|
||||
id: e3aad8ab5efa
|
||||
last_write_checksum: sha1:092442eb1ef3d6258528e50ee796c1f2dc6ccdeb
|
||||
pristine_git_object: d237cbd24dcea87d28d5fe57feeeda9244676f66
|
||||
docs/models/scenario1.md:
|
||||
id: 46a671d6aaa0
|
||||
last_write_checksum: sha1:1a40c54b7c3f4053fda78bffca450e380d31eb87
|
||||
pristine_git_object: 6ab64adcc85734db7926b0135581597635cf9049
|
||||
docs/models/scenario2.md:
|
||||
id: c2fda7f528b7
|
||||
last_write_checksum: sha1:9d51684de62b540568dd2cfc0e8037478c81a4e5
|
||||
pristine_git_object: 4475bd8dba44c421eb6db5490cebc474911d1eb5
|
||||
docs/models/security.md:
|
||||
id: 452e4d4eb67a
|
||||
last_write_checksum: sha1:d2af82412a97b139d12d416d11a235638001243b
|
||||
@@ -2546,10 +2682,18 @@ trackedFiles:
|
||||
id: 68e025b0826f
|
||||
last_write_checksum: sha1:2fa060bc795efd2a0ae9847a6cea279e939428a3
|
||||
pristine_git_object: 55fa006ced11395c51d165a41989961f9e4fb50d
|
||||
docs/models/track-response-body1.md:
|
||||
id: d7877cb6c21d
|
||||
last_write_checksum: sha1:21b8bfcf5415c11b307fcd01b24f4b9d7eaf5e96
|
||||
pristine_git_object: 58406f1f8e53c70a3dcf907163e4efb296c3d885
|
||||
docs/models/track-response-body2.md:
|
||||
id: 19b3b7964db8
|
||||
last_write_checksum: sha1:bfafaa6d0ab7f90f0f0d59187cc28ae1ca02426f
|
||||
pristine_git_object: d42ee63d96530895da40e96e16dfd31a90362b27
|
||||
docs/models/track-response.md:
|
||||
id: 0d3ebb1bbfdf
|
||||
last_write_checksum: sha1:cbc389501f2c883260810a00712ef6d5d2451230
|
||||
pristine_git_object: 727d375f19c28f14c860435fc13a608219a335d7
|
||||
last_write_checksum: sha1:c63642815e61185f51fcf507d7ec72da814f6283
|
||||
pristine_git_object: 055635deefc56df1bd122c90c0bfe1d65572b389
|
||||
docs/models/trials-used.md:
|
||||
id: 983b78eb51b7
|
||||
last_write_checksum: sha1:0fdc1753311eb276ea3d69f275f9bafaf196e538
|
||||
@@ -2834,6 +2978,14 @@ trackedFiles:
|
||||
id: ddca1b594754
|
||||
last_write_checksum: sha1:684b8ac067ff95bd19c8252fed27767389012afc
|
||||
pristine_git_object: 2f38389e4cc43531f126c82a08713edf787e877f
|
||||
docs/models/update-plan-config-request.md:
|
||||
id: fa3951297b61
|
||||
last_write_checksum: sha1:5d642675fb5464890506da5ddb298a143ed520a1
|
||||
pristine_git_object: 79c5f1d0f2b9d60e2241013dd8803b6cf2c763eb
|
||||
docs/models/update-plan-config-response.md:
|
||||
id: 75c895fbca2f
|
||||
last_write_checksum: sha1:711b349287f71b3f530d351cde4bebce679c8d6e
|
||||
pristine_git_object: 75f575da5daebff8680e5d1baf2d9e3a4f853f2e
|
||||
docs/models/update-plan-credit-schema.md:
|
||||
id: acaf39d42386
|
||||
last_write_checksum: sha1:af3af2720a587f377efbf14df3e586cc376ead26
|
||||
@@ -2908,8 +3060,8 @@ trackedFiles:
|
||||
pristine_git_object: 585c71d0660618338988c819b2c60b5ee4ea29c9
|
||||
docs/models/update-plan-params.md:
|
||||
id: baf87a97d876
|
||||
last_write_checksum: sha1:c2de3cac48cb3dff413360fe334a837079a116ae
|
||||
pristine_git_object: 5e8b0bc939e635beeb18a74fe3abe2afb23f6731
|
||||
last_write_checksum: sha1:048b00f5258601c7af582a64abbeaf8de7938caa
|
||||
pristine_git_object: 3445626b7213751c0b52a5cdf3c613eca096e95d
|
||||
docs/models/update-plan-plan-item.md:
|
||||
id: 681d03177a17
|
||||
last_write_checksum: sha1:9cec44182899deefeaf66dbb255ab7fe80da50b1
|
||||
@@ -2960,8 +3112,8 @@ trackedFiles:
|
||||
pristine_git_object: a91ea7b581af0524ec0a17e2d4dfecca576a5d68
|
||||
docs/models/update-plan-response.md:
|
||||
id: 438137d6d905
|
||||
last_write_checksum: sha1:329a0b80646f3292472ff9cbab0b3ae0ab7568bb
|
||||
pristine_git_object: c6ecdd729c185b0a631a16ba5efb9eab98dd0990
|
||||
last_write_checksum: sha1:e44c03a173c911d8c8e9c392048270ed19229f1a
|
||||
pristine_git_object: 0fa67fd6b6f5b7c2def19cda7c60d1942ea2a7bc
|
||||
docs/models/update-plan-rollover-request.md:
|
||||
id: 70f500c0dfa8
|
||||
last_write_checksum: sha1:4830be56801429a844896eeb64eaee855b1011d8
|
||||
@@ -2998,14 +3150,18 @@ trackedFiles:
|
||||
id: 2f1abbd42a8a
|
||||
last_write_checksum: sha1:5c1757a7109e6925391b398bb87223028bd4492d
|
||||
pristine_git_object: eba25f992fc1e385d65829b01c5846800a44a0b4
|
||||
docs/models/usage-model.md:
|
||||
id: 32a269601e79
|
||||
last_write_checksum: sha1:faa6fbdacaf3e836fef0c74a2430790ed5181d55
|
||||
pristine_git_object: 14952a4ee67b77ab09f4697e1767649ea412d2d5
|
||||
docs/models/usage-model1.md:
|
||||
id: fa88bc92daa3
|
||||
last_write_checksum: sha1:3c948395ac14ed8930fa41e081f6143de1526f82
|
||||
pristine_git_object: 3fcafed36cef9c45bcd170c80b1a998197538abe
|
||||
docs/models/usage-model2.md:
|
||||
id: 4b2c49a4e9d7
|
||||
last_write_checksum: sha1:e46213634d6ca1ca4a76ea51e7676beec5b21f48
|
||||
pristine_git_object: 5e8352cec8aebcd5044ccde5ddcd70a0fbb8537d
|
||||
docs/sdks/autumn/README.md:
|
||||
id: d27c9292a1a3
|
||||
last_write_checksum: sha1:8b3c26a9a0202d01d704f782172e06caef3a9b64
|
||||
pristine_git_object: e613982bdfa00068af639c756df5ef757e4829b5
|
||||
last_write_checksum: sha1:0dc24af0d8472b62c75517844334dd35ad491ffa
|
||||
pristine_git_object: 679856e90f40fadd8549a409a8bb126fd6363578
|
||||
docs/sdks/balances/README.md:
|
||||
id: 6ca85866f00d
|
||||
last_write_checksum: sha1:a4e8baf562d105f12dec6e90ac7a38f8a2c8c5b4
|
||||
@@ -3032,8 +3188,8 @@ trackedFiles:
|
||||
pristine_git_object: c93f73a5c5039722cb5799d69e9e4f208ccecfd8
|
||||
docs/sdks/plans/README.md:
|
||||
id: 2d8c741fff57
|
||||
last_write_checksum: sha1:2cd1f3247a34fc5a32816eff83acbd35e2d0cd8d
|
||||
pristine_git_object: 91259eb35197ab1242d2644e67f67c4e17f80704
|
||||
last_write_checksum: sha1:2b61a17cf98e0c244bfaddc9b5b945d1ec778b12
|
||||
pristine_git_object: 9aca7bb4d101682e58743d6fc70415dcc839c38b
|
||||
docs/sdks/referrals/README.md:
|
||||
id: 50b71f597f20
|
||||
last_write_checksum: sha1:9a541f0191db895e4a8ea17c4b61c725ecc40972
|
||||
@@ -3080,8 +3236,8 @@ trackedFiles:
|
||||
pristine_git_object: 35150249724d4013c7a9bab5043914c68e294790
|
||||
src/funcs/balances-finalize.ts:
|
||||
id: 0cadf4150802
|
||||
last_write_checksum: sha1:77127694ddec8674a3ba9a52cd67def01e4e28eb
|
||||
pristine_git_object: 3f90ce62bddced2b9a1bde942534a394be7edb33
|
||||
last_write_checksum: sha1:96d985206081d494a4f031b5a225bebc1e8b75d9
|
||||
pristine_git_object: dc348d3d1eaca950c5feda453c43c3d66bb3a0d5
|
||||
src/funcs/balances-update.ts:
|
||||
id: a4d3bafe74f2
|
||||
last_write_checksum: sha1:c179574469056b82c8ab32eb9f8bf64c3c647114
|
||||
@@ -3120,8 +3276,8 @@ trackedFiles:
|
||||
pristine_git_object: 61691b0590dbd42f823a8f27518d591f33b97768
|
||||
src/funcs/check.ts:
|
||||
id: e962b1e3321b
|
||||
last_write_checksum: sha1:88705e19bfe4ef3397cc66b815ec842590111be0
|
||||
pristine_git_object: c4526b300b3976a4c4fe429a40e0bf5d0c0df718
|
||||
last_write_checksum: sha1:c3c35363a3c1e4999457e18b0b3c0729aa7dd717
|
||||
pristine_git_object: 995bbfab95f0f6381d7070577a8282aed553d9ea
|
||||
src/funcs/customers-delete.ts:
|
||||
id: 92955b4ca056
|
||||
last_write_checksum: sha1:14160671d93a76cca245a45c25d8465f2e39acd0
|
||||
@@ -3184,8 +3340,8 @@ trackedFiles:
|
||||
pristine_git_object: fe5c26238dbcbfef4adffd82d978cfd3b613f96d
|
||||
src/funcs/plans-create.ts:
|
||||
id: d67d1d814264
|
||||
last_write_checksum: sha1:9bc6bf4d8e612c5a9a4914b3ed564bae963383f5
|
||||
pristine_git_object: 1f6e621322beeee49bf97b983620583849b50645
|
||||
last_write_checksum: sha1:03438a389dc8312ca1452083e25c57659c2f17ed
|
||||
pristine_git_object: 27f9713e25d633e18fd781d5c8480e8771c466ff
|
||||
src/funcs/plans-delete.ts:
|
||||
id: 993ab1ed44c2
|
||||
last_write_checksum: sha1:b2b08ac5da98abb9ecda305f9456212e49b9786e
|
||||
@@ -3200,8 +3356,8 @@ trackedFiles:
|
||||
pristine_git_object: 3ba5652a7b770a940b0112c9a208f75a6de8642e
|
||||
src/funcs/plans-update.ts:
|
||||
id: 86e469e08973
|
||||
last_write_checksum: sha1:b12108c74307779f582ccd7a8819c1ea968847bf
|
||||
pristine_git_object: 3d31c3c41956539a19ff1fee506ee43352995296
|
||||
last_write_checksum: sha1:bfa1ddc48b3a03c38aac1b809ea01224ec75a14c
|
||||
pristine_git_object: a5ec6ae3a68cf3d6f2cd3bf18e7f6dda0363ccb9
|
||||
src/funcs/referrals-create-code.ts:
|
||||
id: f2088dbf847d
|
||||
last_write_checksum: sha1:f885e8dbe651c2f8c07a3297f31901277d9a57ed
|
||||
@@ -3212,8 +3368,8 @@ trackedFiles:
|
||||
pristine_git_object: 5d218a3b4c0d19fbe8ecbb93faef58a04f41282a
|
||||
src/funcs/track.ts:
|
||||
id: eb7e0b123329
|
||||
last_write_checksum: sha1:cb235c96fcac0bc8cc105f7e0efe38577177ca74
|
||||
pristine_git_object: d37789d33ee1991fbd95bafeeab189ee5427c9b9
|
||||
last_write_checksum: sha1:1b4f465358428f86a39948ffb6678de215a92835
|
||||
pristine_git_object: 41a9c7ac2b86c85aef42280879b6ce5c902510ed
|
||||
src/hooks/hooks.ts:
|
||||
id: a2463fc6f69b
|
||||
last_write_checksum: sha1:3a90d88b4c6c07247db8e5f6441a79538232394e
|
||||
@@ -3320,8 +3476,8 @@ trackedFiles:
|
||||
pristine_git_object: 1543f29cf697328e23e26ff3d623ef6d84a4feaf
|
||||
src/models/check-op.ts:
|
||||
id: 42085bda016a
|
||||
last_write_checksum: sha1:b621d75cdce22ec92d3fd5cbd938bddf4da62b95
|
||||
pristine_git_object: 0db3f06ad666fbde55d75ce6443d511dbd933855
|
||||
last_write_checksum: sha1:0653c63228033f9c13814b934095dd88faa887ce
|
||||
pristine_git_object: 0f03290733a87dc35e3da844a26ca662a120bd78
|
||||
src/models/create-balance-op.ts:
|
||||
id: 537b8ff86863
|
||||
last_write_checksum: sha1:4d14f12804833140651eb101cef96b9305b45164
|
||||
@@ -3336,8 +3492,8 @@ trackedFiles:
|
||||
pristine_git_object: 74a7f92cc3812461d09b81b1a85c7275026f2162
|
||||
src/models/create-plan-op.ts:
|
||||
id: e094d152f358
|
||||
last_write_checksum: sha1:ac80a628d0ce4acf2db1c8d26aadfd2c83532413
|
||||
pristine_git_object: 9acfcae0a828bc3e9ba9ad3f6ecf74012b93ecec
|
||||
last_write_checksum: sha1:6107859fc5094bca9697694e3b8cbfb91df38cad
|
||||
pristine_git_object: ad0c4e4420045aca9ec519fa2c3ba157dbee48ed
|
||||
src/models/create-referral-code-op.ts:
|
||||
id: 745cd70e7a69
|
||||
last_write_checksum: sha1:01ce64d29c3bd84e0c9bf1e6a979e7e493f10d67
|
||||
@@ -3372,8 +3528,8 @@ trackedFiles:
|
||||
pristine_git_object: fe9f3ba6325264cd07c3735c675e401a5d91a78e
|
||||
src/models/finalize-lock-op.ts:
|
||||
id: 8b7c7048d1dd
|
||||
last_write_checksum: sha1:8f356c8c314ec0f7eda45c765c63393f61b19247
|
||||
pristine_git_object: e32f582176649899148ca6afba2175c75dc7abdf
|
||||
last_write_checksum: sha1:1b4b9e92bcd8ef4c059768b239c8c74c47403abd
|
||||
pristine_git_object: 1bd8afff1e3e103eaa4c4779bc2b6c4142eb9e02
|
||||
src/models/get-entity-op.ts:
|
||||
id: 7932a3cea5c1
|
||||
last_write_checksum: sha1:c53be8c587568ad3abffb5f5ce9276d83b373bfe
|
||||
@@ -3388,8 +3544,8 @@ trackedFiles:
|
||||
pristine_git_object: deca1630425d491788791d872ba43ff4ef269bc6
|
||||
src/models/get-plan-op.ts:
|
||||
id: 91c8f8dda7c8
|
||||
last_write_checksum: sha1:df46ba07b2f642fdaf861fb0e1d4f65cfd7f3b01
|
||||
pristine_git_object: 665e7ae7909a2d4ab8d04537ed7d45245aecf204
|
||||
last_write_checksum: sha1:f5df6bccbb2c8bd7585033268f32a7c1b3612621
|
||||
pristine_git_object: 009eb7eaaa368b9a865761e9067f56f94f82a748
|
||||
src/models/http-client-errors.ts:
|
||||
id: 5f17dcf0d62b
|
||||
last_write_checksum: sha1:994ced121c54fecd0af038ccfb7855fbfd3868ec
|
||||
@@ -3412,8 +3568,8 @@ trackedFiles:
|
||||
pristine_git_object: 0f260a39a6ffe401412f6ad510b9e752acd42d3e
|
||||
src/models/list-plans-op.ts:
|
||||
id: 513cde894485
|
||||
last_write_checksum: sha1:1d53cc585d7a8b1127bb77c6ee5474bdcc3ccd5b
|
||||
pristine_git_object: e44bfa5332c08c7f6e44771046020cda081b2671
|
||||
last_write_checksum: sha1:2ea91a8bf554199747d047a32edd4a3c7b4b1a53
|
||||
pristine_git_object: 327e836308abe5459b65b535b45df79654340ed7
|
||||
src/models/multi-attach-op.ts:
|
||||
id: 99a2b77c1afc
|
||||
last_write_checksum: sha1:3bad363528e0a60a5a72558a99bfd755277c54fe
|
||||
@@ -3424,8 +3580,8 @@ trackedFiles:
|
||||
pristine_git_object: 4a9318890026bc6e67a8a5b65dc596ae7f25f855
|
||||
src/models/plan.ts:
|
||||
id: 9e9698a64fe7
|
||||
last_write_checksum: sha1:a9266076fdff2f4e9cd96b220b812fbc8e87cf96
|
||||
pristine_git_object: 71ff35a1a51aef807f47cad94057bc0d121d87ec
|
||||
last_write_checksum: sha1:d609d4a0d755d9672a9b1f55f148421acf0e3dd7
|
||||
pristine_git_object: 6034f631bc7041d13e4108aac597ef865d6e0017
|
||||
src/models/preview-attach-op.ts:
|
||||
id: 3efc6e3443a7
|
||||
last_write_checksum: sha1:5468f9876d252848952011798951298d353f45e3
|
||||
@@ -3460,8 +3616,8 @@ trackedFiles:
|
||||
pristine_git_object: f297de760b7e2a3456058f007ef13f7d9620a595
|
||||
src/models/track-op.ts:
|
||||
id: 5e6a750e8fec
|
||||
last_write_checksum: sha1:7ca84225f0debe7dc4f4f4f4586052c07a089b78
|
||||
pristine_git_object: 5643ee40331787c6d2f93e73ed47f0d2c9f779ca
|
||||
last_write_checksum: sha1:5854e5918eb4d709da5aedcf9aa120e13af4122c
|
||||
pristine_git_object: 183a2ea5fa8fbf342c52ae63bfc445209a983dac
|
||||
src/models/update-balance-op.ts:
|
||||
id: 69282313a00e
|
||||
last_write_checksum: sha1:d8a5f711a56c32c9dd9fb71b611df33684a3c260
|
||||
@@ -3480,8 +3636,8 @@ trackedFiles:
|
||||
pristine_git_object: b1b8e80440aa378657be836028b4bf806c6949b4
|
||||
src/models/update-plan-op.ts:
|
||||
id: 54b4f842d3b2
|
||||
last_write_checksum: sha1:130d7434a1183984cb5153086aae9c57cd6a5f75
|
||||
pristine_git_object: d6f73962d26f9352bd679f647ae7dc6516cf0691
|
||||
last_write_checksum: sha1:18a0a4e467e8e8e5bc327024b4c7946743511aba
|
||||
pristine_git_object: 248544b9b92c9cf10b4af81635e5784c45731fae
|
||||
src/sdk/balances.ts:
|
||||
id: 9ad229cb9d64
|
||||
last_write_checksum: sha1:3e195bbaeea3a9bc5afd4095d92949f3cad0956e
|
||||
@@ -3512,16 +3668,16 @@ trackedFiles:
|
||||
pristine_git_object: ecac2264817bb369ff2dbf0f0e9029807e67ff77
|
||||
src/sdk/plans.ts:
|
||||
id: c0cb8188cdc1
|
||||
last_write_checksum: sha1:b970e5940c053fed5735704e9ee346e8306f65f0
|
||||
pristine_git_object: 05783781bb918ed4b858e779ab12d97c224b527f
|
||||
last_write_checksum: sha1:62ee50f030050dae85c77a2f877b2471970f29d6
|
||||
pristine_git_object: 521774c3587bff53d05bf80accc45eb9ccb926ac
|
||||
src/sdk/referrals.ts:
|
||||
id: bf164167845c
|
||||
last_write_checksum: sha1:b73c1db6a419f5c7f6643382d5bc399204e95150
|
||||
pristine_git_object: 01839523f5433d6365b0f2704b81e5aa72288e66
|
||||
src/sdk/sdk.ts:
|
||||
id: 784571af2f69
|
||||
last_write_checksum: sha1:2505d60046dbd734a1da32f481ed4af8500f2cc9
|
||||
pristine_git_object: 8a04912ebb49b7d22dcc52ba740b36111666570a
|
||||
last_write_checksum: sha1:61c9b3c1eb12d00fb48988e99a5b71f2402cf49a
|
||||
pristine_git_object: b2ef09cb26175aee2ba6103f0c287a0db01522ac
|
||||
src/types/async.ts:
|
||||
id: fac8da972f86
|
||||
last_write_checksum: sha1:3ff07b3feaf390ec1aeb18ff938e139c6c4a9585
|
||||
@@ -3861,7 +4017,7 @@ examples:
|
||||
application/json: {}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"list": [{"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4969.56, "billing_method": "usage_based", "max_purchase": 5540.05}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 7445.4, "billing_method": "usage_based", "max_purchase": 66.27}, "display": {"primary_text": "<value>"}}], "created_at": 3936.86, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}]}
|
||||
application/json: {"list": [{"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4969.56, "billing_method": "usage_based", "max_purchase": 5540.05}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 7445.4, "billing_method": "usage_based", "max_purchase": 66.27}, "display": {"primary_text": "<value>"}}], "created_at": 3936.86, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}]}
|
||||
attach:
|
||||
speakeasy-default-attach:
|
||||
parameters:
|
||||
@@ -4120,6 +4276,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"allowed": true, "customer_id": "cus_123", "entity_id": null, "required_balance": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}, "flag": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}
|
||||
"202":
|
||||
application/json: {"allowed": true, "customer_id": "cus_123", "entity_id": null, "required_balance": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}, "flag": {"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "expires_at": null, "feature_id": "dashboard"}}
|
||||
track:
|
||||
speakeasy-default-track:
|
||||
parameters:
|
||||
@@ -4130,6 +4288,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"customer_id": "cus_123", "value": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}
|
||||
"202":
|
||||
application/json: {"customer_id": "cus_123", "value": 1, "balance": {"feature_id": "messages", "granted": 100, "remaining": 72, "usage": 28, "unlimited": false, "overage_allowed": false, "max_purchase": null, "next_reset_at": 1773851121437, "breakdown": [{"id": "cus_ent_39qmLooixXLAqMywgXywjAz96rV", "plan_id": "pro_plan", "included_grant": 100, "prepaid_grant": 0, "remaining": 72, "usage": 28, "unlimited": false, "reset": {"interval": "month", "resets_at": 1773851121437}, "price": null, "expires_at": null}]}}
|
||||
eventsList:
|
||||
speakeasy-default-events-list:
|
||||
parameters:
|
||||
@@ -4277,7 +4437,7 @@ examples:
|
||||
application/json: {"plan_id": "free_plan", "group": "", "name": "Free", "add_on": false, "auto_enable": true, "items": [{"feature_id": "messages", "included": 100, "reset": {"interval": "month"}}]}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": false, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4655.71, "billing_method": "prepaid", "max_purchase": 8104.69}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5104.62, "billing_method": "prepaid", "max_purchase": null}, "display": {"primary_text": "<value>"}}], "created_at": 1016.83, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": false, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4655.71, "billing_method": "prepaid", "max_purchase": 8104.69}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5104.62, "billing_method": "prepaid", "max_purchase": null}, "display": {"primary_text": "<value>"}}], "created_at": 1016.83, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}
|
||||
getPlan:
|
||||
speakeasy-default-get-plan:
|
||||
parameters:
|
||||
@@ -4287,7 +4447,7 @@ examples:
|
||||
application/json: {"plan_id": "pro_plan"}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 6216.63, "billing_method": "usage_based", "max_purchase": 9351.86}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5235.67, "billing_method": "usage_based", "max_purchase": 9347.74}, "display": {"primary_text": "<value>"}}], "created_at": 1101.73, "env": "sandbox", "archived": false, "base_variant_id": "<id>"}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": false, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 6216.63, "billing_method": "usage_based", "max_purchase": 9351.86}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 5235.67, "billing_method": "usage_based", "max_purchase": 9347.74}, "display": {"primary_text": "<value>"}}], "created_at": 1101.73, "env": "sandbox", "archived": false, "base_variant_id": "<id>", "config": {"ignore_past_due": false}}
|
||||
updatePlan:
|
||||
speakeasy-default-update-plan:
|
||||
parameters:
|
||||
@@ -4297,7 +4457,7 @@ examples:
|
||||
application/json: {"plan_id": "pro_plan", "group": "", "name": "Pro Plan (Updated)", "price": {"amount": 15, "interval": "month"}, "archived": false}
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": true, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4113.21, "billing_method": "usage_based", "max_purchase": 5381.55}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 3844.43, "billing_method": "prepaid", "max_purchase": 1075.8}, "display": {"primary_text": "<value>"}}], "created_at": 5898.47, "env": "sandbox", "archived": false, "base_variant_id": null}
|
||||
application/json: {"id": "pro", "name": "Pro Plan", "description": null, "group": null, "version": 1, "add_on": true, "auto_enable": true, "price": {"amount": 10, "interval": "month", "display": {"primary_text": "<value>"}}, "items": [{"feature_id": "<id>", "included": 100, "unlimited": false, "reset": {"interval": "month"}, "price": {"amount": 0.5, "interval": "month", "billing_units": 4113.21, "billing_method": "usage_based", "max_purchase": 5381.55}, "display": {"primary_text": "<value>"}}, {"feature_id": "<id>", "included": 0, "unlimited": false, "reset": null, "price": {"amount": 10, "interval": "month", "billing_units": 3844.43, "billing_method": "prepaid", "max_purchase": 1075.8}, "display": {"primary_text": "<value>"}}], "created_at": 5898.47, "env": "sandbox", "archived": false, "base_variant_id": null, "config": {"ignore_past_due": false}}
|
||||
deletePlan:
|
||||
speakeasy-default-delete-plan:
|
||||
parameters:
|
||||
@@ -4368,6 +4528,8 @@ examples:
|
||||
responses:
|
||||
"200":
|
||||
application/json: {"success": true}
|
||||
"202":
|
||||
application/json: {"success": true}
|
||||
updateEntity:
|
||||
speakeasy-default-update-entity:
|
||||
parameters:
|
||||
|
||||
@@ -1136,6 +1136,14 @@ components:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -1179,6 +1187,7 @@ components:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
Balance:
|
||||
type: object
|
||||
properties:
|
||||
@@ -3072,6 +3081,7 @@ paths:
|
||||
@param price - Base recurring price for the plan. Omit for free or usage-only plans. (optional)
|
||||
@param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
@param freeTrial - Free trial configuration. Customers can try this plan before being charged. (optional)
|
||||
@param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
|
||||
@returns The created plan object.
|
||||
tags:
|
||||
@@ -3298,6 +3308,14 @@ paths:
|
||||
required:
|
||||
- duration_length
|
||||
description: Free trial configuration. Customers can try this plan before being charged.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
required:
|
||||
- plan_id
|
||||
- name
|
||||
@@ -3644,6 +3662,14 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -3687,6 +3713,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that can be attached to customers.
|
||||
examples:
|
||||
- id: pro
|
||||
@@ -3733,6 +3760,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: create
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4103,6 +4132,14 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -4146,6 +4183,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that can be attached to customers.
|
||||
examples:
|
||||
- id: pro
|
||||
@@ -4192,6 +4230,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: get
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4540,6 +4580,14 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -4583,6 +4631,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that can be attached to customers.
|
||||
required:
|
||||
- list
|
||||
@@ -4632,6 +4681,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: list
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -4682,6 +4733,7 @@ paths:
|
||||
@param price - The price of the plan. Set to null to remove the base price. (optional)
|
||||
@param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
@param freeTrial - The free trial of the plan. Set to null to remove the free trial. (optional)
|
||||
@param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
@param newPlanId - The new ID to use for the plan. Can only be updated if the plan has not been used by any customers. (optional)
|
||||
|
||||
@returns The updated plan object.
|
||||
@@ -4911,6 +4963,14 @@ paths:
|
||||
description: Free trial configuration for a plan.
|
||||
- type: "null"
|
||||
description: The free trial of the plan. Set to null to remove the free trial.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
version:
|
||||
type: number
|
||||
archived:
|
||||
@@ -5239,6 +5299,14 @@ paths:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: If this is a variant, the ID of the base plan it was created from.
|
||||
config:
|
||||
type: object
|
||||
properties:
|
||||
ignore_past_due:
|
||||
type: boolean
|
||||
default: false
|
||||
description: If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
description: Miscellaneous plan-level configuration flags.
|
||||
customer_eligibility:
|
||||
type: object
|
||||
properties:
|
||||
@@ -5282,6 +5350,7 @@ paths:
|
||||
- env
|
||||
- archived
|
||||
- base_variant_id
|
||||
- config
|
||||
description: A plan defines a set of features, pricing, and entitlements that can be attached to customers.
|
||||
examples:
|
||||
- id: pro
|
||||
@@ -5328,6 +5397,8 @@ paths:
|
||||
env: sandbox
|
||||
archived: false
|
||||
baseVariantId: null
|
||||
config:
|
||||
ignore_past_due: false
|
||||
x-speakeasy-name-override: update
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -10598,6 +10669,17 @@ paths:
|
||||
type: boolean
|
||||
required:
|
||||
- success
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream provider, so the finalize request was allowed fail-open.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
success:
|
||||
type: boolean
|
||||
required:
|
||||
- success
|
||||
x-speakeasy-name-override: finalize
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -10657,7 +10739,7 @@ paths:
|
||||
@param withPreview - If true, includes upgrade/upsell information in the response when access is denied. Useful for displaying paywalls. (optional)
|
||||
|
||||
|
||||
@returns Whether access is allowed, plus the current balance for that feature.
|
||||
@returns Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -11204,6 +11286,492 @@ paths:
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream provider, so access was allowed fail-open.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
allowed:
|
||||
type: boolean
|
||||
description: Whether the customer is allowed to use the feature. True if they have sufficient balance or the feature is unlimited/boolean.
|
||||
customer_id:
|
||||
type: string
|
||||
description: The ID of the customer that was checked.
|
||||
entity_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The ID of the entity, if an entity-scoped check was performed.
|
||||
required_balance:
|
||||
type: number
|
||||
description: The required balance that was checked against.
|
||||
balance:
|
||||
anyOf:
|
||||
- $ref: "#/components/schemas/Balance"
|
||||
- type: "null"
|
||||
description: The customer's balance for this feature. Null if the customer has no balance for this feature.
|
||||
flag:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The unique identifier for this flag.
|
||||
plan_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The plan ID this flag originates from, or null for standalone flags.
|
||||
expires_at:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Timestamp when this flag expires, or null for no expiration.
|
||||
feature_id:
|
||||
type: string
|
||||
description: The feature ID this flag is for.
|
||||
feature:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The unique identifier for this feature, used in /check and /track calls.
|
||||
name:
|
||||
type: string
|
||||
description: Human-readable name displayed in the dashboard and billing UI.
|
||||
type:
|
||||
enum:
|
||||
- boolean
|
||||
- metered
|
||||
- credit_system
|
||||
type: string
|
||||
description: "Feature type: 'boolean' for on/off access, 'metered' for usage-tracked features, 'credit_system' for unified credit pools."
|
||||
consumable:
|
||||
type: boolean
|
||||
description: "For metered features: true if usage resets periodically (API calls, credits), false if allocated persistently (seats, storage)."
|
||||
event_names:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: Event names that trigger this feature's balance. Allows multiple features to respond to a single event.
|
||||
credit_schema:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
metered_feature_id:
|
||||
type: string
|
||||
description: ID of the metered feature that draws from this credit system.
|
||||
credit_cost:
|
||||
type: number
|
||||
description: Credits consumed per unit of the metered feature.
|
||||
required:
|
||||
- metered_feature_id
|
||||
- credit_cost
|
||||
description: "For credit_system features: maps metered features to their credit costs."
|
||||
display:
|
||||
type: object
|
||||
properties:
|
||||
singular:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Singular form for UI display (e.g., 'API call', 'seat').
|
||||
plural:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Plural form for UI display (e.g., 'API calls', 'seats').
|
||||
description: Display names for the feature in billing UI and customer-facing components.
|
||||
archived:
|
||||
type: boolean
|
||||
description: Whether the feature is archived and hidden from the dashboard.
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- type
|
||||
- consumable
|
||||
- archived
|
||||
description: The full feature object if expanded.
|
||||
required:
|
||||
- id
|
||||
- plan_id
|
||||
- expires_at
|
||||
- feature_id
|
||||
examples:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
expires_at: null
|
||||
feature_id: dashboard
|
||||
- type: "null"
|
||||
description: The flag associated with this check, if any.
|
||||
preview:
|
||||
type: object
|
||||
properties:
|
||||
scenario:
|
||||
enum:
|
||||
- usage_limit
|
||||
- feature_flag
|
||||
type: string
|
||||
description: The reason access was denied. 'usage_limit' means the customer exceeded their balance, 'feature_flag' means the feature is not included in their plan.
|
||||
title:
|
||||
type: string
|
||||
description: A title suitable for displaying in a paywall or upgrade modal.
|
||||
message:
|
||||
type: string
|
||||
description: A message explaining why access was denied.
|
||||
feature_id:
|
||||
type: string
|
||||
description: The ID of the feature that was checked.
|
||||
feature_name:
|
||||
type: string
|
||||
description: The display name of the feature.
|
||||
products:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: The ID of the product you set when creating the product
|
||||
name:
|
||||
type: string
|
||||
description: The name of the product
|
||||
group:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: Product group which this product belongs to
|
||||
env:
|
||||
enum:
|
||||
- sandbox
|
||||
- live
|
||||
type: string
|
||||
description: The environment of the product
|
||||
is_add_on:
|
||||
type: boolean
|
||||
description: Whether the product is an add-on and can be purchased alongside other products
|
||||
is_default:
|
||||
type: boolean
|
||||
description: Whether the product is the default product
|
||||
archived:
|
||||
type: boolean
|
||||
description: Whether this product has been archived and is no longer available
|
||||
version:
|
||||
type: number
|
||||
description: The current version of the product
|
||||
created_at:
|
||||
type: number
|
||||
description: The timestamp of when the product was created in milliseconds since epoch
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
anyOf:
|
||||
- enum:
|
||||
- feature
|
||||
- priced_feature
|
||||
- price
|
||||
type: string
|
||||
- type: "null"
|
||||
description: The type of the product item
|
||||
feature_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The feature ID of the product item. If the item is a fixed price, should be `null`
|
||||
feature_type:
|
||||
anyOf:
|
||||
- enum:
|
||||
- single_use
|
||||
- continuous_use
|
||||
- boolean
|
||||
- static
|
||||
type: string
|
||||
- type: "null"
|
||||
description: Single use features are used once and then depleted, like API calls or credits. Continuous use features are those being used on an ongoing-basis, like storage or seats.
|
||||
included_usage:
|
||||
anyOf:
|
||||
- anyOf:
|
||||
- type: number
|
||||
- const: inf
|
||||
- type: "null"
|
||||
description: The amount of usage included for this feature.
|
||||
interval:
|
||||
anyOf:
|
||||
- enum:
|
||||
- minute
|
||||
- hour
|
||||
- day
|
||||
- week
|
||||
- month
|
||||
- quarter
|
||||
- semi_annual
|
||||
- year
|
||||
type: string
|
||||
- type: "null"
|
||||
description: The reset or billing interval of the product item. If null, feature will have no reset date, and if there's a price, it will be billed one-off.
|
||||
interval_count:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The interval count of the product item.
|
||||
price:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The price of the product item. Should be `null` if tiered pricing is set.
|
||||
tiers:
|
||||
anyOf:
|
||||
- type: array
|
||||
items:
|
||||
anyOf:
|
||||
- {}
|
||||
- type: "null"
|
||||
- type: "null"
|
||||
description: Tiered pricing for the product item. Not applicable for fixed price items.
|
||||
tier_behavior:
|
||||
anyOf:
|
||||
- enum:
|
||||
- graduated
|
||||
- volume
|
||||
type: string
|
||||
- type: "null"
|
||||
description: "How tiers are applied: graduated (split across bands) or volume (flat rate for the matched tier). Defaults to graduated."
|
||||
usage_model:
|
||||
anyOf:
|
||||
- enum:
|
||||
- prepaid
|
||||
- pay_per_use
|
||||
type: string
|
||||
- type: "null"
|
||||
description: Whether the feature should be prepaid upfront or billed for how much they use end of billing period.
|
||||
billing_units:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: The amount per billing unit (eg. $9 / 250 units)
|
||||
reset_usage_when_enabled:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: Whether the usage should be reset when the product is enabled.
|
||||
entity_feature_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The entity feature ID of the product item if applicable.
|
||||
display:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
primary_text:
|
||||
type: string
|
||||
secondary_text:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
required:
|
||||
- primary_text
|
||||
- type: "null"
|
||||
description: The display of the product item.
|
||||
quantity:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Used in customer context. Quantity of the feature the customer has prepaid for.
|
||||
next_cycle_quantity:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
description: Used in customer context. Quantity of the feature the customer will prepay for in the next cycle.
|
||||
config:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
rollover:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
max:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
max_percentage:
|
||||
anyOf:
|
||||
- type: number
|
||||
- type: "null"
|
||||
duration:
|
||||
enum:
|
||||
- month
|
||||
- forever
|
||||
type: string
|
||||
default: month
|
||||
length:
|
||||
type: number
|
||||
required:
|
||||
- length
|
||||
- type: "null"
|
||||
on_increase:
|
||||
anyOf:
|
||||
- enum:
|
||||
- bill_immediately
|
||||
- prorate_immediately
|
||||
- prorate_next_cycle
|
||||
- bill_next_cycle
|
||||
type: string
|
||||
- type: "null"
|
||||
on_decrease:
|
||||
anyOf:
|
||||
- enum:
|
||||
- prorate
|
||||
- prorate_immediately
|
||||
- prorate_next_cycle
|
||||
- none
|
||||
- no_prorations
|
||||
type: string
|
||||
- type: "null"
|
||||
- type: "null"
|
||||
description: Configuration for rollover and proration behavior of the feature.
|
||||
description: Product item defining features and pricing within a product
|
||||
description: Array of product items that define the product's features and pricing
|
||||
free_trial:
|
||||
anyOf:
|
||||
- type: object
|
||||
properties:
|
||||
duration:
|
||||
enum:
|
||||
- day
|
||||
- month
|
||||
- year
|
||||
type: string
|
||||
description: The duration type of the free trial
|
||||
length:
|
||||
type: number
|
||||
description: The length of the duration type specified
|
||||
unique_fingerprint:
|
||||
type: boolean
|
||||
description: Whether the free trial is limited to one per customer fingerprint
|
||||
card_required:
|
||||
type: boolean
|
||||
description: Whether the free trial requires a card. If false, the customer can attach the product without going through a checkout flow or having a card on file.
|
||||
trial_available:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
default: true
|
||||
- type: "null"
|
||||
description: Used in customer context. Whether the free trial is available for the customer if they were to attach the product.
|
||||
required:
|
||||
- duration
|
||||
- length
|
||||
- unique_fingerprint
|
||||
- card_required
|
||||
- type: "null"
|
||||
description: Free trial configuration for this product, if available
|
||||
base_variant_id:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: ID of the base variant this product is derived from
|
||||
scenario:
|
||||
enum:
|
||||
- scheduled
|
||||
- active
|
||||
- new
|
||||
- renew
|
||||
- upgrade
|
||||
- update_prepaid_quantity
|
||||
- downgrade
|
||||
- cancel
|
||||
- expired
|
||||
- past_due
|
||||
type: string
|
||||
description: Scenario for when this product is used in attach flows
|
||||
properties:
|
||||
type: object
|
||||
properties:
|
||||
is_free:
|
||||
type: boolean
|
||||
description: True if the product has no base price or usage prices
|
||||
is_one_off:
|
||||
type: boolean
|
||||
description: True if the product only contains a one-time price
|
||||
interval_group:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: "null"
|
||||
description: The billing interval group for recurring products (e.g., 'monthly', 'yearly')
|
||||
has_trial:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: True if the product includes a free trial
|
||||
updateable:
|
||||
anyOf:
|
||||
- type: boolean
|
||||
- type: "null"
|
||||
description: True if the product can be updated after creation (only applicable if there are prepaid recurring prices)
|
||||
required:
|
||||
- is_free
|
||||
- is_one_off
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- group
|
||||
- env
|
||||
- is_add_on
|
||||
- is_default
|
||||
- archived
|
||||
- version
|
||||
- created_at
|
||||
- items
|
||||
- free_trial
|
||||
- base_variant_id
|
||||
description: Products that would grant access to this feature. Use to display upgrade options.
|
||||
required:
|
||||
- scenario
|
||||
- title
|
||||
- message
|
||||
- feature_id
|
||||
- feature_name
|
||||
- products
|
||||
description: Upgrade/upsell information when access is denied. Only present if with_preview was true and allowed is false.
|
||||
required:
|
||||
- allowed
|
||||
- customer_id
|
||||
- balance
|
||||
- flag
|
||||
examples:
|
||||
- allowed: true
|
||||
customer_id: cus_123
|
||||
entity_id: null
|
||||
required_balance: 1
|
||||
balance:
|
||||
feature_id: messages
|
||||
granted: 100
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
overage_allowed: false
|
||||
max_purchase: null
|
||||
next_reset_at: 1773851121437
|
||||
breakdown:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
included_grant: 100
|
||||
prepaid_grant: 0
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
reset:
|
||||
interval: month
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
x-speakeasy-name-override: check
|
||||
parameters:
|
||||
- *a1
|
||||
@@ -11252,7 +11820,7 @@ paths:
|
||||
@param properties - Additional properties to attach to this usage event. (optional)
|
||||
|
||||
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances.
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -11366,6 +11934,66 @@ paths:
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
"202":
|
||||
description: Accepted. Autumn is experiencing degraded service from a downstream provider, so the event was accepted for replay and will be tracked as soon as the service is restored.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
customer_id:
|
||||
type: string
|
||||
description: The ID of the customer whose usage was tracked.
|
||||
entity_id:
|
||||
type: string
|
||||
description: The ID of the entity, if entity-scoped tracking was performed.
|
||||
event_name:
|
||||
type: string
|
||||
description: The event name that was tracked, if event_name was used instead of feature_id.
|
||||
value:
|
||||
type: number
|
||||
description: The amount of usage that was recorded.
|
||||
balance:
|
||||
anyOf:
|
||||
- $ref: "#/components/schemas/Balance"
|
||||
- type: "null"
|
||||
description: The updated balance for the tracked feature. Null if tracking by event_name that affects multiple features.
|
||||
balances:
|
||||
type: object
|
||||
propertyNames:
|
||||
type: string
|
||||
additionalProperties:
|
||||
$ref: "#/components/schemas/Balance"
|
||||
description: Map of feature_id to updated balance when tracking by event_name affects multiple features.
|
||||
required:
|
||||
- customer_id
|
||||
- value
|
||||
- balance
|
||||
examples:
|
||||
- customer_id: cus_123
|
||||
value: 1
|
||||
balance:
|
||||
feature_id: messages
|
||||
granted: 100
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
overage_allowed: false
|
||||
max_purchase: null
|
||||
next_reset_at: 1773851121437
|
||||
breakdown:
|
||||
- id: cus_ent_39qmLooixXLAqMywgXywjAz96rV
|
||||
plan_id: pro_plan
|
||||
included_grant: 100
|
||||
prepaid_grant: 0
|
||||
remaining: 72
|
||||
usage: 28
|
||||
unlimited: false
|
||||
reset:
|
||||
interval: month
|
||||
resets_at: 1773851121437
|
||||
price: null
|
||||
expires_at: null
|
||||
x-speakeasy-name-override: track
|
||||
parameters:
|
||||
- *a1
|
||||
|
||||
@@ -2,15 +2,15 @@ speakeasyVersion: 1.759.3
|
||||
sources:
|
||||
Autumn API:
|
||||
sourceNamespace: autumn-api
|
||||
sourceRevisionDigest: sha256:48d0d29f5d454f92a932ab5b2038e24e12d1c67de6373802d1e371d4553c63f0
|
||||
sourceBlobDigest: sha256:7019c1735364681528d8a9d51224980dfd8194c1df00d8d201a9554e5a6b3f82
|
||||
sourceRevisionDigest: sha256:d3d26ba6ab7db3f5a3661985d71d8697e1e812c0848b0f62a1cb7ae4e3c7037f
|
||||
sourceBlobDigest: sha256:dcc11a057d047411aebf667a59812453b3c8dd193d38690a4f17effa0387f8a2
|
||||
tags:
|
||||
- latest
|
||||
- 2.2.0
|
||||
Autumn API Stripped:
|
||||
sourceNamespace: autumn-api-stripped
|
||||
sourceRevisionDigest: sha256:23262259d149413f10097c6d7a3218ccd248f0d6f2aed4ced72a3ffca50893ad
|
||||
sourceBlobDigest: sha256:6bce1dbff55410405a54a3f9f7809ecfd8702c0245cc81340bad0dd1541ad710
|
||||
sourceRevisionDigest: sha256:78382a2128f29c0978491db8a16d12a521afc9e92cb2ec02081f36e4e03589f4
|
||||
sourceBlobDigest: sha256:9a2b226378970e998c818cfe866f7f65bacf818b3bcbcbd40fadf4704e38c124
|
||||
tags:
|
||||
- latest
|
||||
- 2.2.0
|
||||
@@ -18,17 +18,17 @@ targets:
|
||||
autumn:
|
||||
source: Autumn API
|
||||
sourceNamespace: autumn-api
|
||||
sourceRevisionDigest: sha256:48d0d29f5d454f92a932ab5b2038e24e12d1c67de6373802d1e371d4553c63f0
|
||||
sourceBlobDigest: sha256:7019c1735364681528d8a9d51224980dfd8194c1df00d8d201a9554e5a6b3f82
|
||||
sourceRevisionDigest: sha256:d3d26ba6ab7db3f5a3661985d71d8697e1e812c0848b0f62a1cb7ae4e3c7037f
|
||||
sourceBlobDigest: sha256:dcc11a057d047411aebf667a59812453b3c8dd193d38690a4f17effa0387f8a2
|
||||
codeSamplesNamespace: autumn-api-typescript-code-samples
|
||||
codeSamplesRevisionDigest: sha256:ed725e6d550745811ba55b8f9abcfd47782d47cfe73d09757a4bbf56b240b6a4
|
||||
codeSamplesRevisionDigest: sha256:ea5f6eed39d476d88dea6d073a04ccf460abdf0a408f6191091d3dd4a11a012f
|
||||
autumn-python:
|
||||
source: Autumn API Stripped
|
||||
sourceNamespace: autumn-api-stripped
|
||||
sourceRevisionDigest: sha256:23262259d149413f10097c6d7a3218ccd248f0d6f2aed4ced72a3ffca50893ad
|
||||
sourceBlobDigest: sha256:6bce1dbff55410405a54a3f9f7809ecfd8702c0245cc81340bad0dd1541ad710
|
||||
sourceRevisionDigest: sha256:78382a2128f29c0978491db8a16d12a521afc9e92cb2ec02081f36e4e03589f4
|
||||
sourceBlobDigest: sha256:9a2b226378970e998c818cfe866f7f65bacf818b3bcbcbd40fadf4704e38c124
|
||||
codeSamplesNamespace: autumn-api-python-code-samples
|
||||
codeSamplesRevisionDigest: sha256:061cc94559a245c03c357d5b0d6126ac4fc685ba6deef135e80ed7bae2a038e2
|
||||
codeSamplesRevisionDigest: sha256:00e6b68bf6ecaab905d0d77badf57de5813a81541f4a7665771e4208c9af4ac6
|
||||
workflow:
|
||||
workflowVersion: 1.0.0
|
||||
speakeasyVersion: pinned
|
||||
|
||||
@@ -181,7 +181,7 @@ const response = await client.check({
|
||||
@param lock - Reserve units of a feature upfront by passing a lock_id, then call balances.finalize to confirm or release the hold. (optional)
|
||||
@param withPreview - If true, includes upgrade/upsell information in the response when access is denied. Useful for displaying paywalls. (optional)
|
||||
|
||||
@returns Whether access is allowed, plus the current balance for that feature.
|
||||
@returns Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.
|
||||
* [track](docs/sdks/autumn/README.md#track) - Records usage for a customer feature and returns updated balances.
|
||||
|
||||
Use this after an action happens to decrement usage, or send a negative value to credit balance back.
|
||||
@@ -205,7 +205,7 @@ const response = await client.track({ customerId: "cus_123", eventName: "ai_chat
|
||||
@param value - The amount of usage to record. Defaults to 1. Use negative values to credit balance (e.g., when removing a seat). (optional)
|
||||
@param properties - Additional properties to attach to this usage event. (optional)
|
||||
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances.
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.
|
||||
|
||||
### [Balances](docs/sdks/balances/README.md)
|
||||
|
||||
@@ -893,7 +893,7 @@ const response = await client.check({
|
||||
@param lock - Reserve units of a feature upfront by passing a lock_id, then call balances.finalize to confirm or release the hold. (optional)
|
||||
@param withPreview - If true, includes upgrade/upsell information in the response when access is denied. Useful for displaying paywalls. (optional)
|
||||
|
||||
@returns Whether access is allowed, plus the current balance for that feature.
|
||||
@returns Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.
|
||||
- [`customersDelete`](docs/sdks/customers/README.md#delete) - Deletes a customer by ID.
|
||||
- [`customersGetOrCreate`](docs/sdks/customers/README.md#getorcreate) - Creates a customer if they do not exist, or returns the existing customer by your external customer ID.
|
||||
|
||||
@@ -1113,7 +1113,7 @@ const response = await client.track({ customerId: "cus_123", eventName: "ai_chat
|
||||
@param value - The amount of usage to record. Defaults to 1. Use negative values to credit balance (e.g., when removing a seat). (optional)
|
||||
@param properties - Additional properties to attach to this usage event. (optional)
|
||||
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances.
|
||||
@returns The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.
|
||||
|
||||
</details>
|
||||
<!-- End Standalone functions [standalone-funcs] -->
|
||||
|
||||
@@ -152,6 +152,7 @@ async function $do(
|
||||
| SDKValidationError
|
||||
>(
|
||||
M.json(200, models.FinalizeLockResponse$inboundSchema),
|
||||
M.json(202, models.FinalizeLockResponse$inboundSchema),
|
||||
M.fail("4XX"),
|
||||
M.fail("5XX"),
|
||||
)(response, req);
|
||||
|
||||
@@ -57,7 +57,7 @@ import { Result } from "../types/fp.js";
|
||||
* @param lock - Reserve units of a feature upfront by passing a lock_id, then call balances.finalize to confirm or release the hold. (optional)
|
||||
* @param withPreview - If true, includes upgrade/upsell information in the response when access is denied. Useful for displaying paywalls. (optional)
|
||||
*
|
||||
* @returns Whether access is allowed, plus the current balance for that feature.
|
||||
* @returns Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.
|
||||
*/
|
||||
export function check(
|
||||
client: AutumnCore,
|
||||
@@ -183,6 +183,7 @@ async function $do(
|
||||
| SDKValidationError
|
||||
>(
|
||||
M.json(200, models.CheckResponse$inboundSchema),
|
||||
M.json(202, models.CheckResponse$inboundSchema),
|
||||
M.fail("4XX"),
|
||||
M.fail("5XX"),
|
||||
)(response, req);
|
||||
|
||||
@@ -103,6 +103,7 @@ import { Result } from "../types/fp.js";
|
||||
* @param price - Base recurring price for the plan. Omit for free or usage-only plans. (optional)
|
||||
* @param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
* @param freeTrial - Free trial configuration. Customers can try this plan before being charged. (optional)
|
||||
* @param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
*
|
||||
* @returns The created plan object.
|
||||
*/
|
||||
|
||||
@@ -71,6 +71,7 @@ import { Result } from "../types/fp.js";
|
||||
* @param price - The price of the plan. Set to null to remove the base price. (optional)
|
||||
* @param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
* @param freeTrial - The free trial of the plan. Set to null to remove the free trial. (optional)
|
||||
* @param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
* @param newPlanId - The new ID to use for the plan. Can only be updated if the plan has not been used by any customers. (optional)
|
||||
*
|
||||
* @returns The updated plan object.
|
||||
|
||||
@@ -49,7 +49,7 @@ import { Result } from "../types/fp.js";
|
||||
* @param value - The amount of usage to record. Defaults to 1. Use negative values to credit balance (e.g., when removing a seat). (optional)
|
||||
* @param properties - Additional properties to attach to this usage event. (optional)
|
||||
*
|
||||
* @returns The usage value recorded, with either a single updated balance or a map of updated balances.
|
||||
* @returns The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.
|
||||
*/
|
||||
export function track(
|
||||
client: AutumnCore,
|
||||
@@ -175,6 +175,7 @@ async function $do(
|
||||
| SDKValidationError
|
||||
>(
|
||||
M.json(200, models.TrackResponse$inboundSchema),
|
||||
M.json(202, models.TrackResponse$inboundSchema),
|
||||
M.fail("4XX"),
|
||||
M.fail("5XX"),
|
||||
)(response, req);
|
||||
|
||||
@@ -74,10 +74,14 @@ export class FailOpenHook implements SDKInitHook, AfterErrorHook {
|
||||
fetcher: async (input, init) => {
|
||||
try {
|
||||
return init == null ? await fetch(input) : await fetch(input, init);
|
||||
} catch {
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log(
|
||||
`Network failed to reach Autumn: ${error}. Returning 555 Network Error.`,
|
||||
);
|
||||
return new Response(null, {
|
||||
status: 503,
|
||||
statusText: "Autumn Unreachable",
|
||||
status: 555,
|
||||
statusText: "Network Error",
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
@@ -316,6 +316,16 @@ export type FreeTrialRequest = {
|
||||
cardRequired?: boolean | undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type CreatePlanConfigRequest = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue?: boolean | undefined;
|
||||
};
|
||||
|
||||
export type CreatePlanParams = {
|
||||
/**
|
||||
* The ID of the plan to create.
|
||||
@@ -353,6 +363,10 @@ export type CreatePlanParams = {
|
||||
* Free trial configuration. Customers can try this plan before being charged.
|
||||
*/
|
||||
freeTrial?: FreeTrialRequest | undefined;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config?: CreatePlanConfigRequest | undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -707,6 +721,16 @@ export const CreatePlanEnv = {
|
||||
*/
|
||||
export type CreatePlanEnv = OpenEnum<typeof CreatePlanEnv>;
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type CreatePlanConfigResponse = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
|
||||
*/
|
||||
@@ -817,6 +841,10 @@ export type CreatePlanResponse = {
|
||||
* If this is a variant, the ID of the base plan it was created from.
|
||||
*/
|
||||
baseVariantId: string | null;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config: CreatePlanConfigResponse;
|
||||
customerEligibility?: CreatePlanCustomerEligibility | undefined;
|
||||
};
|
||||
|
||||
@@ -1160,6 +1188,34 @@ export function freeTrialRequestToJSON(
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export type CreatePlanConfigRequest$Outbound = {
|
||||
ignore_past_due: boolean;
|
||||
};
|
||||
|
||||
/** @internal */
|
||||
export const CreatePlanConfigRequest$outboundSchema: z.ZodMiniType<
|
||||
CreatePlanConfigRequest$Outbound,
|
||||
CreatePlanConfigRequest
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignorePastDue: z._default(z.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
ignorePastDue: "ignore_past_due",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function createPlanConfigRequestToJSON(
|
||||
createPlanConfigRequest: CreatePlanConfigRequest,
|
||||
): string {
|
||||
return JSON.stringify(
|
||||
CreatePlanConfigRequest$outboundSchema.parse(createPlanConfigRequest),
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export type CreatePlanParams$Outbound = {
|
||||
plan_id: string;
|
||||
@@ -1171,6 +1227,7 @@ export type CreatePlanParams$Outbound = {
|
||||
price?: CreatePlanPriceRequest$Outbound | undefined;
|
||||
items?: Array<CreatePlanPlanItem$Outbound> | undefined;
|
||||
free_trial?: FreeTrialRequest$Outbound | undefined;
|
||||
config?: CreatePlanConfigRequest$Outbound | undefined;
|
||||
};
|
||||
|
||||
/** @internal */
|
||||
@@ -1188,6 +1245,7 @@ export const CreatePlanParams$outboundSchema: z.ZodMiniType<
|
||||
price: z.optional(z.lazy(() => CreatePlanPriceRequest$outboundSchema)),
|
||||
items: z.optional(z.array(z.lazy(() => CreatePlanPlanItem$outboundSchema))),
|
||||
freeTrial: z.optional(z.lazy(() => FreeTrialRequest$outboundSchema)),
|
||||
config: z.optional(z.lazy(() => CreatePlanConfigRequest$outboundSchema)),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
@@ -1580,6 +1638,31 @@ export const CreatePlanEnv$inboundSchema: z.ZodMiniType<
|
||||
unknown
|
||||
> = openEnums.inboundSchema(CreatePlanEnv);
|
||||
|
||||
/** @internal */
|
||||
export const CreatePlanConfigResponse$inboundSchema: z.ZodMiniType<
|
||||
CreatePlanConfigResponse,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignore_past_due: z._default(types.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"ignore_past_due": "ignorePastDue",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function createPlanConfigResponseFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<CreatePlanConfigResponse, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => CreatePlanConfigResponse$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'CreatePlanConfigResponse' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const CreatePlanStatus$inboundSchema: z.ZodMiniType<
|
||||
CreatePlanStatus,
|
||||
@@ -1644,6 +1727,7 @@ export const CreatePlanResponse$inboundSchema: z.ZodMiniType<
|
||||
env: CreatePlanEnv$inboundSchema,
|
||||
archived: types.boolean(),
|
||||
base_variant_id: types.nullable(types.string()),
|
||||
config: z.lazy(() => CreatePlanConfigResponse$inboundSchema),
|
||||
customer_eligibility: types.optional(
|
||||
z.lazy(() => CreatePlanCustomerEligibility$inboundSchema),
|
||||
),
|
||||
|
||||
@@ -8,6 +8,7 @@ import { safeParse } from "../lib/schemas.js";
|
||||
import { ClosedEnum } from "../types/enums.js";
|
||||
import { Result as SafeParseResult } from "../types/fp.js";
|
||||
import * as types from "../types/primitives.js";
|
||||
import { smartUnion } from "../types/smart-union.js";
|
||||
import { SDKValidationError } from "./sdk-validation-error.js";
|
||||
|
||||
export type FinalizeLockGlobals = {
|
||||
@@ -46,12 +47,23 @@ export type FinalizeBalanceParams = {
|
||||
};
|
||||
|
||||
/**
|
||||
* OK
|
||||
* Accepted. Autumn is experiencing degraded service from a downstream provider, so the finalize request was allowed fail-open.
|
||||
*/
|
||||
export type FinalizeLockResponse = {
|
||||
export type FinalizeLockResponseBody2 = {
|
||||
success: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* OK
|
||||
*/
|
||||
export type FinalizeLockResponseBody1 = {
|
||||
success: boolean;
|
||||
};
|
||||
|
||||
export type FinalizeLockResponse =
|
||||
| FinalizeLockResponseBody1
|
||||
| FinalizeLockResponseBody2;
|
||||
|
||||
/** @internal */
|
||||
export const Action$outboundSchema: z.ZodMiniEnum<typeof Action> = z.enum(
|
||||
Action,
|
||||
@@ -93,13 +105,50 @@ export function finalizeBalanceParamsToJSON(
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const FinalizeLockResponse$inboundSchema: z.ZodMiniType<
|
||||
FinalizeLockResponse,
|
||||
export const FinalizeLockResponseBody2$inboundSchema: z.ZodMiniType<
|
||||
FinalizeLockResponseBody2,
|
||||
unknown
|
||||
> = z.object({
|
||||
success: types.boolean(),
|
||||
});
|
||||
|
||||
export function finalizeLockResponseBody2FromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<FinalizeLockResponseBody2, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => FinalizeLockResponseBody2$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'FinalizeLockResponseBody2' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const FinalizeLockResponseBody1$inboundSchema: z.ZodMiniType<
|
||||
FinalizeLockResponseBody1,
|
||||
unknown
|
||||
> = z.object({
|
||||
success: types.boolean(),
|
||||
});
|
||||
|
||||
export function finalizeLockResponseBody1FromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<FinalizeLockResponseBody1, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => FinalizeLockResponseBody1$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'FinalizeLockResponseBody1' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const FinalizeLockResponse$inboundSchema: z.ZodMiniType<
|
||||
FinalizeLockResponse,
|
||||
unknown
|
||||
> = smartUnion([
|
||||
z.lazy(() => FinalizeLockResponseBody1$inboundSchema),
|
||||
z.lazy(() => FinalizeLockResponseBody2$inboundSchema),
|
||||
]);
|
||||
|
||||
export function finalizeLockResponseFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<FinalizeLockResponse, SDKValidationError> {
|
||||
|
||||
@@ -368,6 +368,16 @@ export const GetPlanEnv = {
|
||||
*/
|
||||
export type GetPlanEnv = OpenEnum<typeof GetPlanEnv>;
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type GetPlanConfig = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
|
||||
*/
|
||||
@@ -478,6 +488,10 @@ export type GetPlanResponse = {
|
||||
* If this is a variant, the ID of the base plan it was created from.
|
||||
*/
|
||||
baseVariantId: string | null;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config: GetPlanConfig;
|
||||
customerEligibility?: GetPlanCustomerEligibility | undefined;
|
||||
};
|
||||
|
||||
@@ -866,6 +880,31 @@ export function getPlanFreeTrialFromJSON(
|
||||
export const GetPlanEnv$inboundSchema: z.ZodMiniType<GetPlanEnv, unknown> =
|
||||
openEnums.inboundSchema(GetPlanEnv);
|
||||
|
||||
/** @internal */
|
||||
export const GetPlanConfig$inboundSchema: z.ZodMiniType<
|
||||
GetPlanConfig,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignore_past_due: z._default(types.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"ignore_past_due": "ignorePastDue",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function getPlanConfigFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<GetPlanConfig, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => GetPlanConfig$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'GetPlanConfig' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const GetPlanStatus$inboundSchema: z.ZodMiniType<
|
||||
GetPlanStatus,
|
||||
@@ -928,6 +967,7 @@ export const GetPlanResponse$inboundSchema: z.ZodMiniType<
|
||||
env: GetPlanEnv$inboundSchema,
|
||||
archived: types.boolean(),
|
||||
base_variant_id: types.nullable(types.string()),
|
||||
config: z.lazy(() => GetPlanConfig$inboundSchema),
|
||||
customer_eligibility: types.optional(
|
||||
z.lazy(() => GetPlanCustomerEligibility$inboundSchema),
|
||||
),
|
||||
|
||||
@@ -372,6 +372,16 @@ export const ListPlansEnv = {
|
||||
*/
|
||||
export type ListPlansEnv = OpenEnum<typeof ListPlansEnv>;
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type ListPlansConfig = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
|
||||
*/
|
||||
@@ -482,6 +492,10 @@ export type ListPlansList = {
|
||||
* If this is a variant, the ID of the base plan it was created from.
|
||||
*/
|
||||
baseVariantId: string | null;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config: ListPlansConfig;
|
||||
customerEligibility?: ListPlansCustomerEligibility | undefined;
|
||||
};
|
||||
|
||||
@@ -891,6 +905,31 @@ export function listPlansFreeTrialFromJSON(
|
||||
export const ListPlansEnv$inboundSchema: z.ZodMiniType<ListPlansEnv, unknown> =
|
||||
openEnums.inboundSchema(ListPlansEnv);
|
||||
|
||||
/** @internal */
|
||||
export const ListPlansConfig$inboundSchema: z.ZodMiniType<
|
||||
ListPlansConfig,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignore_past_due: z._default(types.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"ignore_past_due": "ignorePastDue",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function listPlansConfigFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<ListPlansConfig, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => ListPlansConfig$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'ListPlansConfig' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const ListPlansStatus$inboundSchema: z.ZodMiniType<
|
||||
ListPlansStatus,
|
||||
@@ -953,6 +992,7 @@ export const ListPlansList$inboundSchema: z.ZodMiniType<
|
||||
env: ListPlansEnv$inboundSchema,
|
||||
archived: types.boolean(),
|
||||
base_variant_id: types.nullable(types.string()),
|
||||
config: z.lazy(() => ListPlansConfig$inboundSchema),
|
||||
customer_eligibility: types.optional(
|
||||
z.lazy(() => ListPlansCustomerEligibility$inboundSchema),
|
||||
),
|
||||
|
||||
@@ -349,6 +349,16 @@ export const PlanEnv = {
|
||||
*/
|
||||
export type PlanEnv = OpenEnum<typeof PlanEnv>;
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type PlanConfig = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
|
||||
*/
|
||||
@@ -456,6 +466,10 @@ export type Plan = {
|
||||
* If this is a variant, the ID of the base plan it was created from.
|
||||
*/
|
||||
baseVariantId: string | null;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config: PlanConfig;
|
||||
customerEligibility?: CustomerEligibility | undefined;
|
||||
};
|
||||
|
||||
@@ -811,6 +825,29 @@ export function freeTrialFromJSON(
|
||||
export const PlanEnv$inboundSchema: z.ZodMiniType<PlanEnv, unknown> = openEnums
|
||||
.inboundSchema(PlanEnv);
|
||||
|
||||
/** @internal */
|
||||
export const PlanConfig$inboundSchema: z.ZodMiniType<PlanConfig, unknown> = z
|
||||
.pipe(
|
||||
z.object({
|
||||
ignore_past_due: z._default(types.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"ignore_past_due": "ignorePastDue",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function planConfigFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<PlanConfig, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => PlanConfig$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'PlanConfig' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const PlanStatus$inboundSchema: z.ZodMiniType<PlanStatus, unknown> =
|
||||
openEnums.inboundSchema(PlanStatus);
|
||||
@@ -866,6 +903,7 @@ export const Plan$inboundSchema: z.ZodMiniType<Plan, unknown> = z.pipe(
|
||||
env: PlanEnv$inboundSchema,
|
||||
archived: types.boolean(),
|
||||
base_variant_id: types.nullable(types.string()),
|
||||
config: z.lazy(() => PlanConfig$inboundSchema),
|
||||
customer_eligibility: types.optional(z.lazy(() =>
|
||||
CustomerEligibility$inboundSchema
|
||||
)),
|
||||
|
||||
@@ -7,6 +7,7 @@ import { remap as remap$ } from "../lib/primitives.js";
|
||||
import { safeParse } from "../lib/schemas.js";
|
||||
import { Result as SafeParseResult } from "../types/fp.js";
|
||||
import * as types from "../types/primitives.js";
|
||||
import { smartUnion } from "../types/smart-union.js";
|
||||
import { Balance, Balance$inboundSchema } from "./balance.js";
|
||||
import { SDKValidationError } from "./sdk-validation-error.js";
|
||||
|
||||
@@ -58,9 +59,9 @@ export type TrackParams = {
|
||||
};
|
||||
|
||||
/**
|
||||
* OK
|
||||
* Accepted. Autumn is experiencing degraded service from a downstream provider, so the event was accepted for replay and will be tracked as soon as the service is restored.
|
||||
*/
|
||||
export type TrackResponse = {
|
||||
export type TrackResponseBody2 = {
|
||||
/**
|
||||
* The ID of the customer whose usage was tracked.
|
||||
*/
|
||||
@@ -87,6 +88,38 @@ export type TrackResponse = {
|
||||
balances?: { [k: string]: Balance } | undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* OK
|
||||
*/
|
||||
export type TrackResponseBody1 = {
|
||||
/**
|
||||
* The ID of the customer whose usage was tracked.
|
||||
*/
|
||||
customerId: string;
|
||||
/**
|
||||
* The ID of the entity, if entity-scoped tracking was performed.
|
||||
*/
|
||||
entityId?: string | undefined;
|
||||
/**
|
||||
* The event name that was tracked, if event_name was used instead of feature_id.
|
||||
*/
|
||||
eventName?: string | undefined;
|
||||
/**
|
||||
* The amount of usage that was recorded.
|
||||
*/
|
||||
value: number;
|
||||
/**
|
||||
* The updated balance for the tracked feature. Null if tracking by event_name that affects multiple features.
|
||||
*/
|
||||
balance: Balance | null;
|
||||
/**
|
||||
* Map of feature_id to updated balance when tracking by event_name affects multiple features.
|
||||
*/
|
||||
balances?: { [k: string]: Balance } | undefined;
|
||||
};
|
||||
|
||||
export type TrackResponse = TrackResponseBody1 | TrackResponseBody2;
|
||||
|
||||
/** @internal */
|
||||
export type TrackLock$Outbound = {
|
||||
lock_id: string;
|
||||
@@ -156,8 +189,8 @@ export function trackParamsToJSON(trackParams: TrackParams): string {
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const TrackResponse$inboundSchema: z.ZodMiniType<
|
||||
TrackResponse,
|
||||
export const TrackResponseBody2$inboundSchema: z.ZodMiniType<
|
||||
TrackResponseBody2,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
@@ -177,6 +210,57 @@ export const TrackResponse$inboundSchema: z.ZodMiniType<
|
||||
}),
|
||||
);
|
||||
|
||||
export function trackResponseBody2FromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<TrackResponseBody2, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => TrackResponseBody2$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'TrackResponseBody2' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const TrackResponseBody1$inboundSchema: z.ZodMiniType<
|
||||
TrackResponseBody1,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
customer_id: types.string(),
|
||||
entity_id: types.optional(types.string()),
|
||||
event_name: types.optional(types.string()),
|
||||
value: types.number(),
|
||||
balance: types.nullable(Balance$inboundSchema),
|
||||
balances: types.optional(z.record(z.string(), Balance$inboundSchema)),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"customer_id": "customerId",
|
||||
"entity_id": "entityId",
|
||||
"event_name": "eventName",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function trackResponseBody1FromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<TrackResponseBody1, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => TrackResponseBody1$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'TrackResponseBody1' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const TrackResponse$inboundSchema: z.ZodMiniType<
|
||||
TrackResponse,
|
||||
unknown
|
||||
> = smartUnion([
|
||||
z.lazy(() => TrackResponseBody1$inboundSchema),
|
||||
z.lazy(() => TrackResponseBody2$inboundSchema),
|
||||
]);
|
||||
|
||||
export function trackResponseFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<TrackResponse, SDKValidationError> {
|
||||
|
||||
@@ -316,6 +316,16 @@ export type UpdatePlanFreeTrialParams = {
|
||||
cardRequired?: boolean | undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type UpdatePlanConfigRequest = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue?: boolean | undefined;
|
||||
};
|
||||
|
||||
export type UpdatePlanParams = {
|
||||
/**
|
||||
* The ID of the plan to update.
|
||||
@@ -350,6 +360,10 @@ export type UpdatePlanParams = {
|
||||
* The free trial of the plan. Set to null to remove the free trial.
|
||||
*/
|
||||
freeTrial?: UpdatePlanFreeTrialParams | null | undefined;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config?: UpdatePlanConfigRequest | undefined;
|
||||
version?: number | undefined;
|
||||
archived?: boolean | undefined;
|
||||
/**
|
||||
@@ -710,6 +724,16 @@ export const UpdatePlanEnv = {
|
||||
*/
|
||||
export type UpdatePlanEnv = OpenEnum<typeof UpdatePlanEnv>;
|
||||
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
export type UpdatePlanConfigResponse = {
|
||||
/**
|
||||
* If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.
|
||||
*/
|
||||
ignorePastDue: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.
|
||||
*/
|
||||
@@ -820,6 +844,10 @@ export type UpdatePlanResponse = {
|
||||
* If this is a variant, the ID of the base plan it was created from.
|
||||
*/
|
||||
baseVariantId: string | null;
|
||||
/**
|
||||
* Miscellaneous plan-level configuration flags.
|
||||
*/
|
||||
config: UpdatePlanConfigResponse;
|
||||
customerEligibility?: UpdatePlanCustomerEligibility | undefined;
|
||||
};
|
||||
|
||||
@@ -1163,6 +1191,34 @@ export function updatePlanFreeTrialParamsToJSON(
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export type UpdatePlanConfigRequest$Outbound = {
|
||||
ignore_past_due: boolean;
|
||||
};
|
||||
|
||||
/** @internal */
|
||||
export const UpdatePlanConfigRequest$outboundSchema: z.ZodMiniType<
|
||||
UpdatePlanConfigRequest$Outbound,
|
||||
UpdatePlanConfigRequest
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignorePastDue: z._default(z.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
ignorePastDue: "ignore_past_due",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function updatePlanConfigRequestToJSON(
|
||||
updatePlanConfigRequest: UpdatePlanConfigRequest,
|
||||
): string {
|
||||
return JSON.stringify(
|
||||
UpdatePlanConfigRequest$outboundSchema.parse(updatePlanConfigRequest),
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export type UpdatePlanParams$Outbound = {
|
||||
plan_id: string;
|
||||
@@ -1174,6 +1230,7 @@ export type UpdatePlanParams$Outbound = {
|
||||
price?: UpdatePlanBasePrice$Outbound | null | undefined;
|
||||
items?: Array<UpdatePlanPlanItem$Outbound> | undefined;
|
||||
free_trial?: UpdatePlanFreeTrialParams$Outbound | null | undefined;
|
||||
config?: UpdatePlanConfigRequest$Outbound | undefined;
|
||||
version?: number | undefined;
|
||||
archived: boolean;
|
||||
new_plan_id?: string | undefined;
|
||||
@@ -1198,6 +1255,7 @@ export const UpdatePlanParams$outboundSchema: z.ZodMiniType<
|
||||
freeTrial: z.optional(
|
||||
z.nullable(z.lazy(() => UpdatePlanFreeTrialParams$outboundSchema)),
|
||||
),
|
||||
config: z.optional(z.lazy(() => UpdatePlanConfigRequest$outboundSchema)),
|
||||
version: z.optional(z.number()),
|
||||
archived: z._default(z.boolean(), false),
|
||||
newPlanId: z.optional(z.string()),
|
||||
@@ -1594,6 +1652,31 @@ export const UpdatePlanEnv$inboundSchema: z.ZodMiniType<
|
||||
unknown
|
||||
> = openEnums.inboundSchema(UpdatePlanEnv);
|
||||
|
||||
/** @internal */
|
||||
export const UpdatePlanConfigResponse$inboundSchema: z.ZodMiniType<
|
||||
UpdatePlanConfigResponse,
|
||||
unknown
|
||||
> = z.pipe(
|
||||
z.object({
|
||||
ignore_past_due: z._default(types.boolean(), false),
|
||||
}),
|
||||
z.transform((v) => {
|
||||
return remap$(v, {
|
||||
"ignore_past_due": "ignorePastDue",
|
||||
});
|
||||
}),
|
||||
);
|
||||
|
||||
export function updatePlanConfigResponseFromJSON(
|
||||
jsonString: string,
|
||||
): SafeParseResult<UpdatePlanConfigResponse, SDKValidationError> {
|
||||
return safeParse(
|
||||
jsonString,
|
||||
(x) => UpdatePlanConfigResponse$inboundSchema.parse(JSON.parse(x)),
|
||||
`Failed to parse 'UpdatePlanConfigResponse' from JSON`,
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
export const UpdatePlanStatus$inboundSchema: z.ZodMiniType<
|
||||
UpdatePlanStatus,
|
||||
@@ -1656,6 +1739,7 @@ export const UpdatePlanResponse$inboundSchema: z.ZodMiniType<
|
||||
env: UpdatePlanEnv$inboundSchema,
|
||||
archived: types.boolean(),
|
||||
base_variant_id: types.nullable(types.string()),
|
||||
config: z.lazy(() => UpdatePlanConfigResponse$inboundSchema),
|
||||
customer_eligibility: types.optional(
|
||||
z.lazy(() => UpdatePlanCustomerEligibility$inboundSchema),
|
||||
),
|
||||
|
||||
@@ -90,6 +90,7 @@ export class Plans extends ClientSDK {
|
||||
* @param price - Base recurring price for the plan. Omit for free or usage-only plans. (optional)
|
||||
* @param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
* @param freeTrial - Free trial configuration. Customers can try this plan before being charged. (optional)
|
||||
* @param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
*
|
||||
* @returns The created plan object.
|
||||
*/
|
||||
@@ -207,6 +208,7 @@ export class Plans extends ClientSDK {
|
||||
* @param price - The price of the plan. Set to null to remove the base price. (optional)
|
||||
* @param items - Feature configurations for this plan. Each item defines included units, pricing, and reset behavior. (optional)
|
||||
* @param freeTrial - The free trial of the plan. Set to null to remove the free trial. (optional)
|
||||
* @param config - Miscellaneous plan-level configuration flags. (optional)
|
||||
* @param newPlanId - The new ID to use for the plan. Can only be updated if the plan has not been used by any customers. (optional)
|
||||
*
|
||||
* @returns The updated plan object.
|
||||
|
||||
@@ -89,7 +89,7 @@ export class Autumn extends ClientSDK {
|
||||
* @param lock - Reserve units of a feature upfront by passing a lock_id, then call balances.finalize to confirm or release the hold. (optional)
|
||||
* @param withPreview - If true, includes upgrade/upsell information in the response when access is denied. Useful for displaying paywalls. (optional)
|
||||
*
|
||||
* @returns Whether access is allowed, plus the current balance for that feature.
|
||||
* @returns Whether access is allowed, plus the current balance for that feature. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 and allow access fail-open.
|
||||
*/
|
||||
async check(
|
||||
request: models.CheckParams,
|
||||
@@ -126,7 +126,7 @@ export class Autumn extends ClientSDK {
|
||||
* @param value - The amount of usage to record. Defaults to 1. Use negative values to credit balance (e.g., when removing a seat). (optional)
|
||||
* @param properties - Additional properties to attach to this usage event. (optional)
|
||||
*
|
||||
* @returns The usage value recorded, with either a single updated balance or a map of updated balances.
|
||||
* @returns The usage value recorded, with either a single updated balance or a map of updated balances. If Autumn is experiencing degraded service from a downstream provider, the API may return 202 after accepting the event for replay so it can be tracked as soon as the service is restored.
|
||||
*/
|
||||
async track(
|
||||
request: models.TrackParams,
|
||||
|
||||
@@ -17,7 +17,7 @@ cache_url="${LOCAL_CACHE_URL:-redis://localhost:6379}"
|
||||
echo "dev-local: overriding Infisical DATABASE_URL/CACHE_URL with local values and disabling CACHE_CERT"
|
||||
echo "dev-local: DATABASE_URL=${logged_database_url}"
|
||||
|
||||
exec infisical run --env=prod -- env \
|
||||
exec infisical run --recursive --env=prod -- env \
|
||||
ENV_FILE=.env.prod \
|
||||
NODE_ENV=development \
|
||||
DATABASE_URL="${database_url}" \
|
||||
|
||||
@@ -47,7 +47,7 @@ const portArgs = [
|
||||
`-ti:${checkoutPort}`,
|
||||
].join(" ");
|
||||
const killCmd = `lsof ${portArgs} | xargs kill -9 2>/dev/null || true`;
|
||||
const devCmd = `ENV_FILE=.env infisical run --env=dev -- bun scripts/dev.ts --worktree ${worktreeNum}`;
|
||||
const devCmd = `ENV_FILE=.env infisical run --recursive --env=dev -- bun scripts/dev.ts --worktree ${worktreeNum}`;
|
||||
|
||||
const rootDir = dirname(fileURLToPath(import.meta.url));
|
||||
const projectRoot = join(rootDir, "..");
|
||||
|
||||
47
scripts/setup/STRIPE_TEST_OAUTH.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# Stripe Test OAuth Linking
|
||||
|
||||
Use this when local tests say the test org has no linked Stripe account, or when Stripe Connect webhooks are visible in Stripe but Autumn cannot map events back to `unit-test-org`.
|
||||
|
||||
The Connect webhook destination should be:
|
||||
|
||||
```txt
|
||||
https://c.autumn.ngrok.app/webhooks/connect/sandbox
|
||||
```
|
||||
|
||||
OAuth still needs the Autumn org row to store the connected account ID:
|
||||
|
||||
```json
|
||||
{ "test_stripe_connect": { "account_id": "acct_..." } }
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
List recent connected accounts for the test org email:
|
||||
|
||||
```sh
|
||||
bun stripe:link-test -- --list --email=unit-test-org@test.com
|
||||
```
|
||||
|
||||
Link an explicit account:
|
||||
|
||||
```sh
|
||||
bun stripe:link-test -- --account-id=acct_...
|
||||
```
|
||||
|
||||
Link the newest account matching the test org email:
|
||||
|
||||
```sh
|
||||
bun stripe:link-test -- --latest --email=unit-test-org@test.com
|
||||
```
|
||||
|
||||
If the org has a direct Stripe secret key, `createStripeCli` will prefer that over OAuth Connect. To force the OAuth account for sandbox tests:
|
||||
|
||||
```sh
|
||||
bun stripe:link-test -- --account-id=acct_... --clear-secret-key
|
||||
```
|
||||
|
||||
After linking, rerun a focused checkout test before the full suite:
|
||||
|
||||
```sh
|
||||
ENV_FILE=.env infisical run --env=dev --recursive -- bun test --timeout 0 server/tests/integration/billing/attach/checkout/stripe-checkout/prepaid/stripe-checkout-prepaid-basic.test.ts
|
||||
```
|
||||
169
scripts/setup/link-test-stripe-account.ts
Normal file
@@ -0,0 +1,169 @@
|
||||
#!/usr/bin/env bun
|
||||
import { AppEnv, organizations } from "@autumn/shared";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { initDrizzle } from "@server/db/initDrizzle.js";
|
||||
import { createStripeCli } from "@server/external/connect/createStripeCli.js";
|
||||
import { initMasterStripe } from "@server/external/connect/initStripeCli.js";
|
||||
import { OrgService } from "@server/internal/orgs/OrgService.js";
|
||||
import { clearOrgCache } from "@server/internal/orgs/orgUtils/clearOrgCache.js";
|
||||
import { loadLocalEnv } from "@server/utils/envUtils.js";
|
||||
|
||||
loadLocalEnv();
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
const readFlag = (name: string) => {
|
||||
const inline = args.find((arg) => arg.startsWith(`${name}=`));
|
||||
if (inline) return inline.slice(name.length + 1);
|
||||
|
||||
const idx = args.indexOf(name);
|
||||
return idx === -1 ? undefined : args[idx + 1];
|
||||
};
|
||||
|
||||
const hasFlag = (name: string) => args.includes(name);
|
||||
|
||||
const usage = () => {
|
||||
console.log(`Usage:
|
||||
bun stripe:link-test -- --account-id=acct_...
|
||||
bun stripe:link-test -- --latest --email=unit-test-org@test.com
|
||||
bun stripe:link-test -- --list --email=unit-test-org@test.com
|
||||
|
||||
Options:
|
||||
--org=<slug-or-id> Autumn org to update. Defaults to TESTS_ORG.
|
||||
--env=<sandbox|live> Stripe environment. Defaults to sandbox.
|
||||
--account-id=<acct_...> Connected Stripe account ID to link.
|
||||
--email=<email> Filter Stripe connected accounts by email.
|
||||
--latest Link the newest connected account matching --email.
|
||||
--clear-secret-key Clear the org's direct Stripe key for this env so Connect is used.
|
||||
--list Print matching connected accounts without updating.
|
||||
`);
|
||||
};
|
||||
|
||||
if (hasFlag("--help") || hasFlag("-h")) {
|
||||
usage();
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const env =
|
||||
(readFlag("--env") || "sandbox").toLowerCase() === "live"
|
||||
? AppEnv.Live
|
||||
: AppEnv.Sandbox;
|
||||
const orgRef = readFlag("--org") || process.env.TESTS_ORG;
|
||||
const email = readFlag("--email");
|
||||
const accountIdArg = readFlag("--account-id");
|
||||
|
||||
if (!orgRef) {
|
||||
throw new Error("Missing org. Pass --org=<slug-or-id> or set TESTS_ORG.");
|
||||
}
|
||||
|
||||
const { db, client } = initDrizzle();
|
||||
|
||||
const getOrg = async () => {
|
||||
const bySlug = await OrgService.getBySlug({ db, slug: orgRef });
|
||||
if (bySlug) return bySlug;
|
||||
|
||||
return await OrgService.get({ db, orgId: orgRef });
|
||||
};
|
||||
|
||||
const listAccounts = async () => {
|
||||
const stripe = initMasterStripe({ env, skipInstrumentation: true });
|
||||
const accounts = await stripe.accounts.list({ limit: 100 });
|
||||
|
||||
return accounts.data
|
||||
.filter((account) => !email || account.email === email)
|
||||
.sort((a, b) => b.created - a.created);
|
||||
};
|
||||
|
||||
try {
|
||||
const org = await getOrg();
|
||||
const accounts = await listAccounts();
|
||||
|
||||
if (hasFlag("--list")) {
|
||||
console.log(
|
||||
JSON.stringify(
|
||||
accounts.map((account) => ({
|
||||
id: account.id,
|
||||
email: account.email,
|
||||
created: new Date(account.created * 1000).toISOString(),
|
||||
charges_enabled: account.charges_enabled,
|
||||
details_submitted: account.details_submitted,
|
||||
})),
|
||||
null,
|
||||
2,
|
||||
),
|
||||
);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const accountId =
|
||||
accountIdArg || (hasFlag("--latest") ? accounts[0]?.id : undefined);
|
||||
|
||||
if (!accountId) {
|
||||
throw new Error(
|
||||
"Missing account. Pass --account-id=acct_... or use --latest with --email=...",
|
||||
);
|
||||
}
|
||||
|
||||
const directKeyField =
|
||||
env === AppEnv.Sandbox ? "test_api_key" : "live_api_key";
|
||||
const directWebhookSecretField =
|
||||
env === AppEnv.Sandbox ? "test_webhook_secret" : "live_webhook_secret";
|
||||
const hasDirectKey = Boolean(org.stripe_config?.[directKeyField]);
|
||||
|
||||
if (hasDirectKey && !hasFlag("--clear-secret-key")) {
|
||||
throw new Error(
|
||||
`${org.slug} has stripe_config.${directKeyField}; createStripeCli will prefer that over Connect. Re-run with --clear-secret-key to use the OAuth account.`,
|
||||
);
|
||||
}
|
||||
|
||||
const stripe = initMasterStripe({ env, accountId, skipInstrumentation: true });
|
||||
await stripe.accounts.retrieve();
|
||||
|
||||
await OrgService.updateStripeConnect({
|
||||
db,
|
||||
orgId: org.id,
|
||||
accountId,
|
||||
env,
|
||||
});
|
||||
|
||||
if (hasDirectKey) {
|
||||
await db
|
||||
.update(organizations)
|
||||
.set({
|
||||
stripe_config: {
|
||||
...(org.stripe_config || {}),
|
||||
[directKeyField]: null,
|
||||
[directWebhookSecretField]: null,
|
||||
},
|
||||
})
|
||||
.where(eq(organizations.id, org.id));
|
||||
await clearOrgCache({ db, orgId: org.id });
|
||||
}
|
||||
|
||||
const updatedOrg = await OrgService.get({ db, orgId: org.id });
|
||||
const resolvedStripe = createStripeCli({
|
||||
org: updatedOrg,
|
||||
env,
|
||||
skipInstrumentation: true,
|
||||
});
|
||||
const resolvedAccount = await resolvedStripe.accounts.retrieve();
|
||||
|
||||
console.log(
|
||||
JSON.stringify(
|
||||
{
|
||||
org: { id: updatedOrg.id, slug: updatedOrg.slug },
|
||||
env,
|
||||
linked_account_id: accountId,
|
||||
resolved_account_id: resolvedAccount.id,
|
||||
test_stripe_connect: updatedOrg.test_stripe_connect,
|
||||
live_stripe_connect: updatedOrg.live_stripe_connect,
|
||||
},
|
||||
null,
|
||||
2,
|
||||
),
|
||||
);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
9
scripts/setup/link-unit-test.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/../.."
|
||||
|
||||
ENV_FILE=.env infisical run --env=dev --recursive -- bun scripts/setup/link-test-stripe-account.ts \
|
||||
--org=unit-test-org \
|
||||
--account-id=acct_1TObjo5ch7bV1B9z \
|
||||
--clear-secret-key
|
||||
@@ -8,7 +8,7 @@ export TEST_FILE_CONCURRENCY=${TEST_FILE_CONCURRENCY:-3}
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
SERVER_DIR="$PROJECT_ROOT/server"
|
||||
BUN_CMD="infisical run --env=dev -- bun"
|
||||
BUN_CMD="infisical run --recursive --env=dev -- bun"
|
||||
|
||||
# Test runner function
|
||||
BUN_PARALLEL() {
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"clear-master": "ENV_FILE=.env infisical run --env=dev --recursive -- bun tests/clearMasterOrg.ts",
|
||||
"cm": "ENV_FILE=.env infisical run --env=dev --recursive -- bun tests/clearMaster.ts",
|
||||
"ts": "bunx tsgo --build --noEmit",
|
||||
"test:unit": "bun test tests/unit",
|
||||
"test:integration": "ENV_FILE=.env infisical run --env=dev --recursive -- bun test --timeout 0 --preload ./tests/setup-integration-tests.ts",
|
||||
"loadtest": "ENV_FILE=.env infisical run --env=dev --recursive -- npx artillery run perf/load-test/artillery.yml",
|
||||
"loadtest:leak": "ENV_FILE=.env infisical run --env=dev --recursive -- bun perf/load-test/runLeakTest.ts",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Load test setup — creates products and 500 customers with Stripe payment methods.
|
||||
*
|
||||
* Run: cd server && bun loadtest:setup
|
||||
* or: ENV_FILE=.env infisical run --env=dev -- bun perf/load-test/setup.ts
|
||||
* or: ENV_FILE=.env infisical run --recursive --env=dev -- bun perf/load-test/setup.ts
|
||||
*/
|
||||
|
||||
import { loadLocalEnv } from "../../src/utils/envUtils.js";
|
||||
|
||||
@@ -21,4 +21,4 @@ fi
|
||||
# # Remove .ts extension if present
|
||||
# path_after_tests="${path_after_tests%.ts}"
|
||||
# # Use scripts/test.ts which auto-detects framework
|
||||
# NODE_ENV=development infisical run --env=dev -- bun ../scripts/test.ts "$path_after_tests"
|
||||
# NODE_ENV=development infisical run --recursive --env=dev -- bun ../scripts/test.ts "$path_after_tests"
|
||||
|
||||
@@ -10,6 +10,7 @@ import { RCMappingService } from "@/external/revenueCat/misc/RCMappingService";
|
||||
import type { RevenueCatWebhookContext } from "@/external/revenueCat/webhookMiddlewares/revenuecatWebhookContext";
|
||||
import { CusService } from "@/internal/customers/CusService";
|
||||
import { computeRolloutSnapshot } from "@/internal/misc/rollouts/rolloutUtils.js";
|
||||
import { pricesOnlyOneOff } from "@/internal/products/prices/priceUtils.js";
|
||||
import { ProductService } from "@/internal/products/ProductService";
|
||||
import { getOrCreateCustomer } from "../../../internal/customers/cusUtils/getOrCreateCustomer";
|
||||
|
||||
@@ -69,8 +70,16 @@ export const resolveRevenuecatResources = async ({
|
||||
}),
|
||||
]);
|
||||
|
||||
// If the customer has a product from a different processor than RevenueCat and it has no subscriptions, throw an error
|
||||
// If the customer has a product from a different processor than RevenueCat and it has no subscriptions, throw an error.
|
||||
//
|
||||
// Exception: true one-off purchases (no recurring intervals) are safe to mix
|
||||
// across processors because they create a parallel cus_product without
|
||||
// replacing the customer's existing subscription. This lets a Stripe-subscribed
|
||||
// customer buy a one-off pack via RevenueCat (and vice versa).
|
||||
const incomingIsOneOff = pricesOnlyOneOff(product.prices);
|
||||
|
||||
if (
|
||||
!incomingIsOneOff &&
|
||||
customer.customer_products.some(
|
||||
(cp) =>
|
||||
cp.processor?.type !== ProcessorType.RevenueCat &&
|
||||
|
||||
@@ -8,6 +8,7 @@ import { stripeLegacySeederMiddleware } from "./webhookMiddlewares/stripeLegacyS
|
||||
import { stripeSyncMiddleware } from "./webhookMiddlewares/stripeSyncMiddleware.js";
|
||||
import { stripeToAutumnCustomerMiddleware } from "./webhookMiddlewares/stripeToAutumnCustomerMiddleware.js";
|
||||
import type { StripeWebhookHonoEnv } from "./webhookMiddlewares/stripeWebhookContext.js";
|
||||
import { stripeWebhookEarlyAckMiddleware } from "./webhookMiddlewares/stripeWebhookEarlyAckMiddleware.js";
|
||||
import { stripeWebhookRefreshMiddleware } from "./webhookMiddlewares/stripeWebhookRefreshMiddleware.js";
|
||||
|
||||
export const stripeWebhookRouter = new Hono<StripeWebhookHonoEnv>();
|
||||
@@ -16,12 +17,13 @@ export const stripeWebhookRouter = new Hono<StripeWebhookHonoEnv>();
|
||||
stripeWebhookRouter.post(
|
||||
"/webhooks/stripe/:orgId/:env",
|
||||
stripeLegacySeederMiddleware,
|
||||
stripeIdempotencyMiddleware,
|
||||
stripeWebhookEarlyAckMiddleware,
|
||||
stripeWebhookRefreshMiddleware,
|
||||
stripeSyncMiddleware,
|
||||
stripeToAutumnCustomerMiddleware,
|
||||
stripeLoggerMiddleware,
|
||||
traceEnrichMiddleware,
|
||||
stripeIdempotencyMiddleware,
|
||||
handleStripeWebhookEvent,
|
||||
);
|
||||
|
||||
@@ -29,11 +31,12 @@ stripeWebhookRouter.post(
|
||||
stripeWebhookRouter.post(
|
||||
"/webhooks/connect/:env",
|
||||
stripeConnectSeederMiddleware,
|
||||
stripeIdempotencyMiddleware,
|
||||
stripeWebhookEarlyAckMiddleware,
|
||||
stripeWebhookRefreshMiddleware,
|
||||
stripeSyncMiddleware,
|
||||
stripeToAutumnCustomerMiddleware,
|
||||
stripeLoggerMiddleware,
|
||||
traceEnrichMiddleware,
|
||||
stripeIdempotencyMiddleware,
|
||||
handleStripeWebhookEvent,
|
||||
);
|
||||
|
||||
@@ -63,6 +63,9 @@ export const stripeLegacySeederMiddleware = async (
|
||||
);
|
||||
} catch (err: unknown) {
|
||||
const message = err instanceof Error ? err.message : String(err);
|
||||
logger.warn(
|
||||
`Stripe legacy webhook signature verification failed: ${message}`,
|
||||
);
|
||||
return c.json({ error: `Webhook Error: ${message}` }, 400);
|
||||
}
|
||||
|
||||
|
||||
38
server/src/external/stripe/webhookMiddlewares/stripeWebhookEarlyAckMiddleware.ts
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
import type { Context, Next } from "hono";
|
||||
import type { StripeWebhookHonoEnv } from "./stripeWebhookContext";
|
||||
|
||||
const getWaitUntil = (c: Context<StripeWebhookHonoEnv>) => {
|
||||
try {
|
||||
return c.executionCtx.waitUntil.bind(c.executionCtx);
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
export const stripeWebhookEarlyAckMiddleware = async (
|
||||
c: Context<StripeWebhookHonoEnv>,
|
||||
next: Next,
|
||||
) => {
|
||||
const ctx = c.get("ctx");
|
||||
const runWebhook = () =>
|
||||
Promise.resolve()
|
||||
.then(next)
|
||||
.catch((error) => {
|
||||
ctx.logger.error(`Stripe webhook background processing failed: ${error}`, {
|
||||
error,
|
||||
});
|
||||
});
|
||||
|
||||
const waitUntil = getWaitUntil(c);
|
||||
if (waitUntil) {
|
||||
try {
|
||||
waitUntil(runWebhook());
|
||||
} catch (error) {
|
||||
ctx.logger.error(`Stripe webhook waitUntil failed: ${error}`, { error });
|
||||
}
|
||||
} else {
|
||||
setImmediate(() => void runWebhook());
|
||||
}
|
||||
|
||||
return c.json({ received: true }, 200);
|
||||
};
|
||||
@@ -7,6 +7,7 @@ import { claimLockReceipt } from "@/internal/balances/utils/lock/claimLockReceip
|
||||
import { deleteLockReceipt } from "@/internal/balances/utils/lock/deleteLockReceipt.js";
|
||||
import { fetchLockReceipt } from "@/internal/balances/utils/lock/fetchLockReceipt.js";
|
||||
import { isFullSubjectRolloutEnabled } from "@/internal/misc/rollouts/fullSubjectRolloutUtils.js";
|
||||
import { addToExtraLogs } from "@/utils/logging/addToExtraLogs.js";
|
||||
import { buildFinalizeLockContext } from "./buildFinalizeLockContext.js";
|
||||
import { runFinalizeLockV2 } from "./runFinalizeLockV2.js";
|
||||
import { runRedisFinalizeLock } from "./runRedisFinalizeLock.js";
|
||||
@@ -24,7 +25,13 @@ export const runFinalizeLock = async (args: RunFinalizeLockArgs) => {
|
||||
return withRedisFailOpen({
|
||||
source: "runFinalizeLock",
|
||||
run: () => runFinalizeLockInner(args),
|
||||
fallback: () => ({ success: true }),
|
||||
fallback: () => {
|
||||
addToExtraLogs({
|
||||
ctx: args.ctx,
|
||||
extras: { finalizeLockFailedOpen: true },
|
||||
});
|
||||
return { success: true };
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
||||