@fantastic.dev/better-stripe 0.17.0 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +52 -9
- package/dist/component/connect/queries.d.ts.map +1 -1
- package/dist/component/connect/queries.js +2 -1
- package/dist/component/connect/queries.js.map +1 -1
- package/dist/component/earnings/arithmetic.d.ts +3 -0
- package/dist/component/earnings/arithmetic.d.ts.map +1 -0
- package/dist/component/earnings/arithmetic.js +11 -0
- package/dist/component/earnings/arithmetic.js.map +1 -0
- package/dist/component/earnings/reads.d.ts.map +1 -1
- package/dist/component/earnings/reads.js +6 -0
- package/dist/component/earnings/reads.js.map +1 -1
- package/dist/component/earnings/triggers.d.ts.map +1 -1
- package/dist/component/earnings/triggers.js +17 -12
- package/dist/component/earnings/triggers.js.map +1 -1
- package/docs/react-workflows.md +5 -3
- package/docs/read-contracts.md +13 -0
- package/package.json +1 -1
- package/src/component/_generated/api.ts +2 -0
- package/src/component/connect/queries.ts +2 -1
- package/src/component/earnings/arithmetic.ts +10 -0
- package/src/component/earnings/reads.ts +6 -0
- package/src/component/earnings/triggers.ts +18 -13
- package/src/component/summary-arithmetic.test.ts +246 -0
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,17 @@
|
|
|
14
14
|
- Remove internal tracker references from public documentation and add a
|
|
15
15
|
regression check that prevents their reintroduction.
|
|
16
16
|
|
|
17
|
+
## [0.17.1](https://github.com/FantasticDevHQ/better-stripe/compare/v0.17.0...v0.17.1) (2026-10-15)
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- **ci:** retry release auto-merge on stale head rejection ([#176](https://github.com/FantasticDevHQ/better-stripe/issues/176)) ([a52cbe8](https://github.com/FantasticDevHQ/better-stripe/commit/a52cbe84480ee1fc804240b04a1200468ca57100))
|
|
22
|
+
- **earnings:** reject unsafe currency summary arithmetic ([#175](https://github.com/FantasticDevHQ/better-stripe/issues/175)) ([52b6db6](https://github.com/FantasticDevHQ/better-stripe/commit/52b6db6074dc45a7f1d8b2d5f8c62ce3e2261ee8))
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
|
|
26
|
+
- explain evidence uploads, navigation guards and release auto-merge ([#177](https://github.com/FantasticDevHQ/better-stripe/issues/177)) ([a089e78](https://github.com/FantasticDevHQ/better-stripe/commit/a089e78dc6c04a15cb87b1488dd9eecf8cd7fa45))
|
|
27
|
+
|
|
17
28
|
## [0.17.0](https://github.com/FantasticDevHQ/better-stripe/compare/v0.16.0...v0.17.0) (2026-10-15)
|
|
18
29
|
|
|
19
30
|
### Features
|
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ See the [customer preview setup and webhook migration guide](docs/accounts-v2-pr
|
|
|
38
38
|
|
|
39
39
|
## Status
|
|
40
40
|
|
|
41
|
-
**Version**: `0.17.
|
|
41
|
+
**Version**: `0.17.1` <!-- x-release-please-version --> (pre-1.0). API may change between minor versions until 1.0.
|
|
42
42
|
|
|
43
43
|
Used in production by its authors. Webhook pipeline is covered by unit tests and a live E2E harness (`npm run e2e:webhooks`) that fires real Stripe-signed events and asserts the ledger.
|
|
44
44
|
|
|
@@ -50,12 +50,12 @@ Releases are automated with [Release Please](https://github.com/googleapis/relea
|
|
|
50
50
|
- `fix: …` makes a patch release.
|
|
51
51
|
- `feat: …` makes a minor release.
|
|
52
52
|
- `feat!: …` (or a `BREAKING CHANGE:` footer) makes a minor release while the package is pre-1.0.
|
|
53
|
-
- `docs:`, `chore:`, `ci:`, `refactor:`, `test:`, `build:` and `perf:` appear in the changelog too. On their own they still open a patch release PR, which
|
|
53
|
+
- `docs:`, `chore:`, `ci:`, `refactor:`, `test:`, `build:` and `perf:` appear in the changelog too. On their own they still open a patch release PR, which auto-merges once its required checks pass.
|
|
54
54
|
|
|
55
55
|
Write the title for consumers of the package: it becomes the changelog entry. A title that isn't a Conventional Commit is left out.
|
|
56
56
|
|
|
57
|
-
2. **On merge to `main`**, the `Release` workflow opens or updates a release PR that bumps `package.json`, `CHANGELOG.md`, the version line above and `.release-please-manifest.json`. It formats the generated changelog with the repository's pinned Prettier and commits any formatting changes through the release GitHub App, so CI validates the formatted branch. An already formatted changelog creates no extra commit.
|
|
58
|
-
3. **
|
|
57
|
+
2. **On merge to `main`**, the `Release` workflow opens or updates a release PR that bumps `package.json`, `CHANGELOG.md`, the version line above and `.release-please-manifest.json`. It formats the generated changelog with the repository's pinned Prettier and commits any formatting changes through the release GitHub App, so CI validates the formatted branch. An already formatted changelog creates no extra commit. After formatting, the workflow enables squash auto-merge for the generated release PR using the release GitHub App.
|
|
58
|
+
3. **Auto-merge waits for green checks**. The active `main` ruleset requires `ci`, `Shadscan UI quality gate (100)` and `codegen`, with no bypass actors. Failed or pending required checks prevent merging. Once GitHub merges the generated release PR, the resulting `Release` workflow run tags the version, creates the GitHub release and publishes to npm through [trusted publishing](https://docs.npmjs.com/trusted-publishers) with provenance. There's no npm token.
|
|
59
59
|
|
|
60
60
|
Release policy lives in `release-please-config.json`. Keep the workflow file named `release.yml`, because the trusted publisher on npmjs.com is bound to that filename. A manually pushed `vX.Y.Z` tag also publishes, but only if it matches `package.json` and `CHANGELOG.md` has a section for it (`scripts/release-notes.mjs`). If publishing fails after the GitHub release is created, use **Re-run failed jobs** on that run. Check npm first if the outcome is uncertain: a published version can't be overwritten.
|
|
61
61
|
|
|
@@ -652,10 +652,42 @@ recovery costs and credits remain host-owned policy. See Stripe's
|
|
|
652
652
|
| `getDisputeByStripeId(ctx, { stripeDisputeId })` | Get a dispute by Stripe dispute ID |
|
|
653
653
|
| `getDisputeWithCountdown(ctx, { stripeDisputeId })` | Get a dispute plus its evidence-due countdown (`daysRemaining`, `isOverdue`) |
|
|
654
654
|
| `listDisputes(ctx, { stripeAccountId?, stripePaymentIntentId?, status?, limit? })` | List disputes with optional filters |
|
|
655
|
+
| `uploadDisputeEvidence(ctx, { stripeDisputeId, actor, field, file, stripeAccountId? })` | Since 0.14.0: validate and upload file bytes, then attach the returned file ID to an authorized dispute draft; never submits |
|
|
655
656
|
| `updateDispute(ctx, { stripeDisputeId, evidence?, metadata?, submit?, stripeAccountId? })` | Submit/stage dispute evidence (`submit: true` finalizes the response) |
|
|
656
657
|
| `closeDispute(ctx, { stripeDisputeId, stripeAccountId? })` | Accept a dispute (concede the chargeback) — irreversible |
|
|
657
658
|
| `reverseTransfers(ctx, { sourceChargeId, percent?, amount? })` | Reverse split/destination transfers for a charge (the primitive behind automatic dispute clawback; also callable manually) |
|
|
658
659
|
|
|
660
|
+
`uploadDisputeEvidence` shipped in [0.14.0](https://github.com/FantasticDevHQ/better-stripe/releases/tag/v0.14.0).
|
|
661
|
+
Call it from an authenticated server adapter with a session-derived actor. A seller
|
|
662
|
+
can upload only for a dispute whose sale belongs to their merchant account.
|
|
663
|
+
|
|
664
|
+
```ts
|
|
665
|
+
const { stripeFileId } = await stripe.uploadDisputeEvidence(ctx, {
|
|
666
|
+
stripeDisputeId,
|
|
667
|
+
actor: { type: "seller", accountId: authorizedSellerAccountId },
|
|
668
|
+
field: "customer_communication",
|
|
669
|
+
file: {
|
|
670
|
+
data: evidenceBytes, // Uint8Array loaded from authorized private storage
|
|
671
|
+
name: "communication.pdf",
|
|
672
|
+
type: "application/pdf",
|
|
673
|
+
},
|
|
674
|
+
});
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
The API accepts nonempty PDF, JPEG or PNG bytes up to 5,000,000 bytes, with a
|
|
678
|
+
matching MIME type and file signature. Stripe validates the complete document.
|
|
679
|
+
Authorization runs before upload and again before attachment. Only the returned
|
|
680
|
+
provider file ID is bound to the chosen evidence field, with explicit
|
|
681
|
+
`submit: false`. The result contains `stripeFileId` and `stripeDisputeId` after
|
|
682
|
+
attachment succeeds. Use a separate authorized `updateDispute` call with
|
|
683
|
+
`submit: true` when the user explicitly finalizes evidence.
|
|
684
|
+
|
|
685
|
+
The optional `stripeAccountId` identifies the provider account owning the charge;
|
|
686
|
+
it is distinct from the seller actor. Resolve it server-side. Do not accept
|
|
687
|
+
browser-provided actors or file IDs as authorization. See the
|
|
688
|
+
[upload workflow guide](docs/react-workflows.md#dispute-evidence-uploads-and-onboarding-navigation)
|
|
689
|
+
for errors, retries and storage/transport limits.
|
|
690
|
+
|
|
659
691
|
Refunds denormalize cumulative state onto the linked `payments` row (`refundedAmount`, `refundStatus: "partially_refunded" | "fully_refunded"`) so "is this payment whole?" is a single read.
|
|
660
692
|
|
|
661
693
|
### Operational
|
|
@@ -1176,6 +1208,16 @@ Existing low-level components remain available below. Props vary by component;
|
|
|
1176
1208
|
Stripe iframe styling uses `appearance`, while custom markup uses render props
|
|
1177
1209
|
or the low-level component's `className`/label props.
|
|
1178
1210
|
|
|
1211
|
+
### Hosted onboarding navigation
|
|
1212
|
+
|
|
1213
|
+
Since 0.14.0, `Onboarding` and `useOnboarding` suppress hosted navigation from
|
|
1214
|
+
create/continue responses after unmount or authenticated scope replacement.
|
|
1215
|
+
Current-scope responses still navigate through `onNavigate` or the default
|
|
1216
|
+
`window.location.assign`. Shared pending locks, duplicate-submit prevention and
|
|
1217
|
+
error state remain intact. Set `scopeKey` to identify the authenticated
|
|
1218
|
+
account/resource; it controls lifecycle isolation and does not authorize access.
|
|
1219
|
+
See the [workflow guide](docs/react-workflows.md#dispute-evidence-uploads-and-onboarding-navigation).
|
|
1220
|
+
|
|
1179
1221
|
### Provider
|
|
1180
1222
|
|
|
1181
1223
|
| Component | Description |
|
|
@@ -1284,11 +1326,12 @@ function BuyerBilling({ userId, customerAccount }: Props) {
|
|
|
1284
1326
|
|
|
1285
1327
|
The app-owned alternative to [Embedded Disputes](#embedded-disputes-stripe-connect) below — build a custom dispute UI on the read hooks and these components instead of Stripe's hosted ConnectJS components.
|
|
1286
1328
|
|
|
1287
|
-
| Component
|
|
1288
|
-
|
|
|
1289
|
-
| `DisputesList`
|
|
1290
|
-
| `DisputeDetail`
|
|
1291
|
-
| `
|
|
1329
|
+
| Component | Description |
|
|
1330
|
+
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1331
|
+
| `DisputesList` | Sorted-by-deadline dispute list (soonest evidence due-by first, no-deadline last), fed by `useDisputes` |
|
|
1332
|
+
| `DisputeDetail` | Amount, reason, status, evidence-due countdown, and linked transfers for one dispute, fed by `useDisputeWithCountdown` |
|
|
1333
|
+
| `EvidenceUpload` | Since 0.14.0: unstyled file-selection, pending, failure and retry control with render props; bind `onUpload(file)` to an authenticated server adapter that attaches to a draft |
|
|
1334
|
+
| `EvidenceForm` | Plain-language evidence form (product description, access activity, additional info, customer communication) that maps through `buildDisputeEvidence` before calling an app-wired `onUpdateDispute`; `stage()` saves a draft, `submit()` finalizes |
|
|
1292
1335
|
|
|
1293
1336
|
### Embedded Disputes (Stripe Connect)
|
|
1294
1337
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/component/connect/queries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/component/connect/queries.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;UAW/B,CAAC;AAIH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;UAMpB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;UAW9B,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;KAsCtB,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;UAW9B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;KA6DtB,CAAC;AAIH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;UAW/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;KA6DvB,CAAC;AAIH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;UAWhC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;KAuBhC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;KAWjC,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAcrC,CAAC;AAIH;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;UAWxB,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;;;;qBAsBhB,MAAM;cAAQ,MAAM;YAAM,MAAM;;KAuBnD,CAAC;AAcH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;GAY7B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;GAQ5B,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;IA6B1B,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CvC,CAAC;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;GA6BtC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getAccountEarnings as getAccountEarningsLegacy, getAccountPayouts as getAccountPayoutsLegacy, } from "../earnings/legacyReads.js";
|
|
2
2
|
import { currencyTotals, previewSize } from "../earnings/reads.js";
|
|
3
|
+
import { addSummaryAmounts } from "../earnings/arithmetic.js";
|
|
3
4
|
import { v } from "convex/values";
|
|
4
5
|
import { paginator } from "convex-helpers/server/pagination";
|
|
5
6
|
import schema from "../schema.js";
|
|
@@ -443,7 +444,7 @@ export const getAccountEarningsByCurrency = query({
|
|
|
443
444
|
currency: r.currency,
|
|
444
445
|
gross: r.gross,
|
|
445
446
|
reversed: r.reversed,
|
|
446
|
-
net: r.gross -
|
|
447
|
+
net: addSummaryAmounts(r.gross, -r.reversed),
|
|
447
448
|
transferCount: r.count,
|
|
448
449
|
})),
|
|
449
450
|
transfers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/component/connect/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,IAAI,wBAAwB,EAC9C,iBAAiB,IAAI,uBAAuB,GAC7C,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,kBAAkB;AAElB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;IACxC,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAC1D;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH,iBAAiB;AAEjB,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC7B,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;IACnC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;IACvC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH,iBAAiB;AAEjB,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;IACvC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAC/C,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC;iBACE,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;iBAClD,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CACxB;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzD,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CACrD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH,kBAAkB;AAElB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;IACxC,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAC9C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;IAChC,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACrC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAC/C,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC;iBACE,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;iBAClD,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CACxB;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzD,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CACrD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC;AAEH,qCAAqC;AAErC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACzC,IAAI,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAChD;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACzC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACnE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IACE,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EACjD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,GAAG,CAAC,EAAE;aAChC,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C,EAAE,CAAC;YACJ,IAAI,QAAQ,CAAC,aAAa;gBAAE,SAAS;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;IAC1C,IAAI,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACzE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;aACA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;IAC9C,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,cAAc,EAAE,uBAAuB;KACxC;IACD,OAAO,EAAE,yBAAyB,CAAC,oBAAoB,CAAC;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;SACtB,KAAK,CAAC,WAAW,CAAC;SAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;SACA,KAAK,CAAC,MAAM,CAAC;SACb,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;CACnC,CAAC,CAAC;AAEH,oEAAoE;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;IACjC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,qBAAqB,CAAC;aAC5B,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CACtC;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,iCAAiC;QACjC,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,EAAE,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEjE,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAC/D,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B,CAAC;QACJ,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBAAE,SAAS;gBACjD,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACnE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC;YACrC,qBAAqB,EAAE,CAAC,CAAC,qBAAqB,IAAI,CAAC;YACnD,WAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAC1B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC;AAEH,+BAA+B;AAC/B,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,uEAAuE;AACvE,oDAAoD;AACpD,wEAAwE;AACxE,yDAAyD;AAEzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACrC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;KACzC,CAAC;IACF,OAAO,EAAE,wBAAwB;CAClC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACrC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;IACnC,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,cAAc,EAAE,uBAAuB;KACxC;IACD,OAAO,EAAE,yBAAyB,CAAC,kBAAkB,CAAC;IACtD,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACrB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,GAAG;YAElC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAClC;YACH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAO,CAAC,CAC7D,CAAC;QACR,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YACnC,GAAG,IAAI,CAAC,cAAc;YACtB,eAAe,EAAE,GAAG;YACpB,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;IAChD,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACrC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;SAC1B,CAAC,CACH;QACD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;KACzC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,GAAG,EACH,IAAI,CAAC,oBAAoB,EACzB,UAAU,CACX,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE;aAC3B,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;aACA,KAAK,CAAC,MAAM,CAAC;aACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ;gBACzB,aAAa,EAAE,CAAC,CAAC,KAAK;aACvB,CAAC,CAAC;YACH,SAAS;SACV,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;IAC/C,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC,CACH;QACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACpE,KAAK,CAAC,MAAM,CAAC;aACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,KAAK;aACrB,CAAC,CAAC;YACH,OAAO;SACR,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/component/connect/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,IAAI,wBAAwB,EAC9C,iBAAiB,IAAI,uBAAuB,GAC7C,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,kBAAkB;AAElB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;IACxC,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAC1D;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH,iBAAiB;AAEjB,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC7B,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;IACnC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;IACvC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH,iBAAiB;AAEjB,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;IACvC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAC/C,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC;iBACE,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;iBAClD,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CACxB;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzD,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CACrD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH,kBAAkB;AAElB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;IACxC,IAAI,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,UAAU,CAAC;aACjB,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CACvC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAC9C;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;IAChC,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,qBAAqB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACrC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9D,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAClD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAC/C,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC;iBACE,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;iBAClD,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CACxB;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzD,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC9C,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CACrD;iBACA,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;iBAChB,KAAK,CAAC,UAAU,CAAC;iBACjB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;iBACrD,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC;AAEH,qCAAqC;AAErC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACzC,IAAI,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAChD;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;IACzC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACnE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IACE,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EACjD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,GAAG,CAAC,EAAE;aAChC,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAC5C,EAAE,CAAC;YACJ,IAAI,QAAQ,CAAC,aAAa;gBAAE,SAAS;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;IAC1C,IAAI,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACzE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;aACA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;IAC9C,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,cAAc,EAAE,uBAAuB;KACxC;IACD,OAAO,EAAE,yBAAyB,CAAC,oBAAoB,CAAC;IACxD,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CACrB,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;SACtB,KAAK,CAAC,WAAW,CAAC;SAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;SACA,KAAK,CAAC,MAAM,CAAC;SACb,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;CACnC,CAAC,CAAC;AAEH,oEAAoE;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;IACjC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,qBAAqB,CAAC;aAC5B,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CACtC;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,iCAAiC;QACjC,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,EAAE,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEjE,0EAA0E;QAC1E,yEAAyE;QACzE,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAC/D,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,GAAG,EAG1B,CAAC;QACJ,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBAAE,SAAS;gBACjD,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACnE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC;YACrC,qBAAqB,EAAE,CAAC,CAAC,qBAAqB,IAAI,CAAC;YACnD,WAAW,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAC1B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC;AAEH,+BAA+B;AAC/B,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,+EAA+E;AAC/E,6EAA6E;AAC7E,uEAAuE;AACvE,oDAAoD;AACpD,wEAAwE;AACxE,yDAAyD;AAEzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACrC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;KACzC,CAAC;IACF,OAAO,EAAE,wBAAwB;CAClC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACrC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;IACnC,IAAI,EAAE;QACJ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACzC,cAAc,EAAE,uBAAuB;KACxC;IACD,OAAO,EAAE,yBAAyB,CAAC,kBAAkB,CAAC;IACtD,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACrB,IACE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,GAAG;YAElC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,SAAS;YACvB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAClC;YACH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAO,CAAC,CAC7D,CAAC;QACR,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YACnC,GAAG,IAAI,CAAC,cAAc;YACtB,eAAe,EAAE,GAAG;YACpB,gBAAgB,EAAE,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;IAChD,IAAI,EAAE;QACJ,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACrC;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;SAC1B,CAAC,CACH;QACD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;KACzC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,GAAG,EACH,IAAI,CAAC,oBAAoB,EACzB,UAAU,CACX,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE;aAC3B,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CACxD;aACA,KAAK,CAAC,MAAM,CAAC;aACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC5C,aAAa,EAAE,CAAC,CAAC,KAAK;aACvB,CAAC,CAAC;YACH,SAAS;SACV,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;IAC/C,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC,CACH;QACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACpE,KAAK,CAAC,MAAM,CAAC;aACb,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,KAAK;aACrB,CAAC,CAAC;YACH,OAAO;SACR,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../../src/component/earnings/arithmetic.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Check exact integer arithmetic before converting back to the public Number representation. */
|
|
2
|
+
export function addSummaryAmounts(left, right) {
|
|
3
|
+
if (!Number.isSafeInteger(left) || !Number.isSafeInteger(right))
|
|
4
|
+
throw new Error("Currency totals require safe integer amounts");
|
|
5
|
+
const result = BigInt(left) + BigInt(right);
|
|
6
|
+
const limit = BigInt(Number.MAX_SAFE_INTEGER);
|
|
7
|
+
if (result > limit || result < -limit)
|
|
8
|
+
throw new Error("Currency totals exceed supported safe integer bounds");
|
|
9
|
+
return Number(result);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=arithmetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arithmetic.js","sourceRoot":"","sources":["../../../src/component/earnings/arithmetic.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAa;IAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,CAAC,KAAK;QACnC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/component/earnings/reads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/component/earnings/reads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,wBAAgB,WAAW,CAAC,KAAK,SAAK,UAIrC;AACD,wBAAsB,cAAc,CAClC,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,GAAG,SAAS;;;;;;;;;;KAoC7B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { addSummaryAmounts } from "./arithmetic.js";
|
|
1
2
|
export function previewSize(value = 50) {
|
|
2
3
|
if (!Number.isInteger(value) || value < 0 || value > 100)
|
|
3
4
|
throw new Error("Preview size must be an integer from 0 to 100");
|
|
@@ -23,6 +24,11 @@ export async function currencyTotals(ctx, accountId, kind) {
|
|
|
23
24
|
.take(501);
|
|
24
25
|
if (rows.length > 500)
|
|
25
26
|
throw new Error("Account exceeds supported currency count");
|
|
27
|
+
for (const row of rows) {
|
|
28
|
+
for (const value of [row.gross, row.reversed, row.paidOut, row.count])
|
|
29
|
+
addSummaryAmounts(value, 0);
|
|
30
|
+
addSummaryAmounts(row.gross, -row.reversed);
|
|
31
|
+
}
|
|
26
32
|
return rows;
|
|
27
33
|
}
|
|
28
34
|
//# sourceMappingURL=reads.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reads.js","sourceRoot":"","sources":["../../../src/component/earnings/reads.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,WAAW,CAAC,KAAK,GAAG,EAAE;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG;QACtD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAa,EACb,SAAiB,EACjB,IAA4B;IAE5B,MAAM,OAAO,GACX,IAAI,KAAK,UAAU;QACjB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;aACT,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC;aACE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC;aACrC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CACnC;aACA,KAAK,EAAE;QACZ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;aACT,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAC7D;aACA,KAAK,EAAE,CAAC;IACjB,IAAI,OAAO;QACT,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE;SACtB,KAAK,CAAC,gBAAgB,CAAC;SACvB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAC9C;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"reads.js","sourceRoot":"","sources":["../../../src/component/earnings/reads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,MAAM,UAAU,WAAW,CAAC,KAAK,GAAG,EAAE;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG;QACtD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAa,EACb,SAAiB,EACjB,IAA4B;IAE5B,MAAM,OAAO,GACX,IAAI,KAAK,UAAU;QACjB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;aACT,KAAK,CAAC,WAAW,CAAC;aAClB,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC;aACE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC;aACrC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CACnC;aACA,KAAK,EAAE;QACZ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;aACT,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAC7D;aACA,KAAK,EAAE,CAAC;IACjB,IAAI,OAAO;QACT,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE;SACtB,KAAK,CAAC,gBAAgB,CAAC;SACvB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAC9C;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC;YACnE,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9B,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/component/earnings/triggers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../../src/component/earnings/triggers.ts"],"names":[],"mappings":"AA+FA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAA0D,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Triggers } from "convex-helpers/server/triggers";
|
|
2
2
|
import { customCtx, customMutation, } from "convex-helpers/server/customFunctions";
|
|
3
|
+
import { addSummaryAmounts } from "./arithmetic.js";
|
|
3
4
|
import { mutation as rawMutation, } from "../_generated/server.js";
|
|
4
5
|
async function adjust(ctx, kind, value, sign) {
|
|
5
6
|
const row = await ctx.db
|
|
@@ -10,11 +11,12 @@ async function adjust(ctx, kind, value, sign) {
|
|
|
10
11
|
.eq("currency", value.currency))
|
|
11
12
|
.unique();
|
|
12
13
|
const totals = {
|
|
13
|
-
gross: (row?.gross ?? 0
|
|
14
|
-
reversed: (row?.reversed ?? 0
|
|
15
|
-
paidOut: (row?.paidOut ?? 0
|
|
16
|
-
count: (row?.count ?? 0
|
|
14
|
+
gross: addSummaryAmounts(row?.gross ?? 0, sign * value.gross),
|
|
15
|
+
reversed: addSummaryAmounts(row?.reversed ?? 0, sign * value.reversed),
|
|
16
|
+
paidOut: addSummaryAmounts(row?.paidOut ?? 0, sign * value.paidOut),
|
|
17
|
+
count: addSummaryAmounts(row?.count ?? 0, sign * value.count),
|
|
17
18
|
};
|
|
19
|
+
addSummaryAmounts(totals.gross, -totals.reversed);
|
|
18
20
|
if (row) {
|
|
19
21
|
if (totals.count === 0)
|
|
20
22
|
await ctx.db.delete("currencyTotals", row._id);
|
|
@@ -48,14 +50,17 @@ triggers.register("transfers", async (ctx, change) => {
|
|
|
48
50
|
}
|
|
49
51
|
});
|
|
50
52
|
triggers.register("payouts", async (ctx, change) => {
|
|
51
|
-
const contribution = (row) =>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
const contribution = (row) => {
|
|
54
|
+
const amount = addSummaryAmounts(row.amount, 0);
|
|
55
|
+
return {
|
|
56
|
+
accountId: row.accountId,
|
|
57
|
+
currency: row.currency,
|
|
58
|
+
gross: 0,
|
|
59
|
+
reversed: 0,
|
|
60
|
+
paidOut: row.status === "paid" ? amount : 0,
|
|
61
|
+
count: 1,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
59
64
|
if (change.oldDoc?.totalsRecorded)
|
|
60
65
|
await adjust(ctx, "payouts", contribution(change.oldDoc), -1);
|
|
61
66
|
if (change.newDoc) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../../src/component/earnings/triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,cAAc,GACf,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACL,QAAQ,IAAI,WAAW,GAExB,MAAM,yBAAyB,CAAC;AAUjC,KAAK,UAAU,MAAM,CACnB,GAAgB,EAChB,IAA4B,EAC5B,KAAmB,EACnB,IAAY;IAEZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE;SACrB,KAAK,CAAC,gBAAgB,CAAC;SACvB,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,CAAC;SACE,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;SAChC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;SAChB,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAClC;SACA,MAAM,EAAE,CAAC;IACZ,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../../src/component/earnings/triggers.ts"],"names":[],"mappings":"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"}
|
package/docs/react-workflows.md
CHANGED
|
@@ -560,9 +560,11 @@ checking that the response still belongs to the mounted scope. `useOnboarding`
|
|
|
560
560
|
uses this lifecycle for both create and continue navigation, including its
|
|
561
561
|
`window.location.assign` fallback. An old response cannot navigate after unmount
|
|
562
562
|
or scope replacement. Current requests preserve shared pending locks and errors.
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
563
|
+
`uploadDisputeEvidence`, `EvidenceUpload` and the onboarding navigation fix shipped
|
|
564
|
+
in [0.14.0](https://github.com/FantasticDevHQ/better-stripe/releases/tag/v0.14.0).
|
|
565
|
+
Version 0.13.0 does not contain them. Consumers must upgrade to
|
|
566
|
+
`@fantastic.dev/better-stripe@0.14.0` or later before using the upload API or relying
|
|
567
|
+
on the package's navigation guard.
|
|
566
568
|
Production storage, session authorization, styling, translations and extended
|
|
567
569
|
hosted onboarding verification remain application responsibilities.
|
|
568
570
|
|
package/docs/read-contracts.md
CHANGED
|
@@ -94,6 +94,19 @@ earnings ledger does not determine settlement availability.
|
|
|
94
94
|
|
|
95
95
|
### Existing installations
|
|
96
96
|
|
|
97
|
+
Summary amounts, counts and derived net amounts must remain safe integers in the
|
|
98
|
+
public Number representation. Checked integer intermediates reject fractional,
|
|
99
|
+
non-finite or unsupported inputs/results before rounding. A rejected transfer,
|
|
100
|
+
payout, reversal or backfill page rolls back its source changes, markers and
|
|
101
|
+
summary updates together. Stored unsafe summary fields also fail closed on reads.
|
|
102
|
+
|
|
103
|
+
These guards prevent new precision loss; they do not repair summaries rounded by
|
|
104
|
+
an earlier release. An affected historical summary needs reconciliation against
|
|
105
|
+
its original records before reuse, even if a later rounded value appears safe.
|
|
106
|
+
The ordinary backfill below skips already-marked records and cannot repair that
|
|
107
|
+
case. Do not treat a successful backfill or a current safe-looking Number as
|
|
108
|
+
proof that previously unsupported arithmetic was exact.
|
|
109
|
+
|
|
97
110
|
After deploying the optional marker fields and summary table, invoke
|
|
98
111
|
`components.betterStripe.earnings.mutations.backfillCurrencyTotals` from a trusted
|
|
99
112
|
server migration. Run separately for `kind: "earnings"` and `kind: "payouts"`,
|
package/package.json
CHANGED
|
@@ -24,6 +24,7 @@ import type * as costRecovery_imports from "../costRecovery/imports.js";
|
|
|
24
24
|
import type * as costRecovery_mutations from "../costRecovery/mutations.js";
|
|
25
25
|
import type * as costRecovery_queries from "../costRecovery/queries.js";
|
|
26
26
|
import type * as costRecovery_reservations from "../costRecovery/reservations.js";
|
|
27
|
+
import type * as earnings_arithmetic from "../earnings/arithmetic.js";
|
|
27
28
|
import type * as earnings_legacyReads from "../earnings/legacyReads.js";
|
|
28
29
|
import type * as earnings_mutations from "../earnings/mutations.js";
|
|
29
30
|
import type * as earnings_reads from "../earnings/reads.js";
|
|
@@ -67,6 +68,7 @@ const fullApi: ApiFromModules<{
|
|
|
67
68
|
"costRecovery/mutations": typeof costRecovery_mutations;
|
|
68
69
|
"costRecovery/queries": typeof costRecovery_queries;
|
|
69
70
|
"costRecovery/reservations": typeof costRecovery_reservations;
|
|
71
|
+
"earnings/arithmetic": typeof earnings_arithmetic;
|
|
70
72
|
"earnings/legacyReads": typeof earnings_legacyReads;
|
|
71
73
|
"earnings/mutations": typeof earnings_mutations;
|
|
72
74
|
"earnings/reads": typeof earnings_reads;
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
getAccountPayouts as getAccountPayoutsLegacy,
|
|
4
4
|
} from "../earnings/legacyReads.js";
|
|
5
5
|
import { currencyTotals, previewSize } from "../earnings/reads.js";
|
|
6
|
+
import { addSummaryAmounts } from "../earnings/arithmetic.js";
|
|
6
7
|
import { v } from "convex/values";
|
|
7
8
|
import { paginator } from "convex-helpers/server/pagination";
|
|
8
9
|
import schema from "../schema.js";
|
|
@@ -557,7 +558,7 @@ export const getAccountEarningsByCurrency = query({
|
|
|
557
558
|
currency: r.currency,
|
|
558
559
|
gross: r.gross,
|
|
559
560
|
reversed: r.reversed,
|
|
560
|
-
net: r.gross -
|
|
561
|
+
net: addSummaryAmounts(r.gross, -r.reversed),
|
|
561
562
|
transferCount: r.count,
|
|
562
563
|
})),
|
|
563
564
|
transfers,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Check exact integer arithmetic before converting back to the public Number representation. */
|
|
2
|
+
export function addSummaryAmounts(left: number, right: number): number {
|
|
3
|
+
if (!Number.isSafeInteger(left) || !Number.isSafeInteger(right))
|
|
4
|
+
throw new Error("Currency totals require safe integer amounts");
|
|
5
|
+
const result = BigInt(left) + BigInt(right);
|
|
6
|
+
const limit = BigInt(Number.MAX_SAFE_INTEGER);
|
|
7
|
+
if (result > limit || result < -limit)
|
|
8
|
+
throw new Error("Currency totals exceed supported safe integer bounds");
|
|
9
|
+
return Number(result);
|
|
10
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { QueryCtx } from "../_generated/server.js";
|
|
2
|
+
import { addSummaryAmounts } from "./arithmetic.js";
|
|
2
3
|
export function previewSize(value = 50) {
|
|
3
4
|
if (!Number.isInteger(value) || value < 0 || value > 100)
|
|
4
5
|
throw new Error("Preview size must be an integer from 0 to 100");
|
|
@@ -37,5 +38,10 @@ export async function currencyTotals(
|
|
|
37
38
|
.take(501);
|
|
38
39
|
if (rows.length > 500)
|
|
39
40
|
throw new Error("Account exceeds supported currency count");
|
|
41
|
+
for (const row of rows) {
|
|
42
|
+
for (const value of [row.gross, row.reversed, row.paidOut, row.count])
|
|
43
|
+
addSummaryAmounts(value, 0);
|
|
44
|
+
addSummaryAmounts(row.gross, -row.reversed);
|
|
45
|
+
}
|
|
40
46
|
return rows;
|
|
41
47
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
customMutation,
|
|
5
5
|
} from "convex-helpers/server/customFunctions";
|
|
6
6
|
import type { DataModel } from "../_generated/dataModel.js";
|
|
7
|
+
import { addSummaryAmounts } from "./arithmetic.js";
|
|
7
8
|
import {
|
|
8
9
|
mutation as rawMutation,
|
|
9
10
|
type MutationCtx,
|
|
@@ -21,7 +22,7 @@ async function adjust(
|
|
|
21
22
|
ctx: MutationCtx,
|
|
22
23
|
kind: "earnings" | "payouts",
|
|
23
24
|
value: Contribution,
|
|
24
|
-
sign:
|
|
25
|
+
sign: 1 | -1,
|
|
25
26
|
) {
|
|
26
27
|
const row = await ctx.db
|
|
27
28
|
.query("currencyTotals")
|
|
@@ -33,11 +34,12 @@ async function adjust(
|
|
|
33
34
|
)
|
|
34
35
|
.unique();
|
|
35
36
|
const totals = {
|
|
36
|
-
gross: (row?.gross ?? 0
|
|
37
|
-
reversed: (row?.reversed ?? 0
|
|
38
|
-
paidOut: (row?.paidOut ?? 0
|
|
39
|
-
count: (row?.count ?? 0
|
|
37
|
+
gross: addSummaryAmounts(row?.gross ?? 0, sign * value.gross),
|
|
38
|
+
reversed: addSummaryAmounts(row?.reversed ?? 0, sign * value.reversed),
|
|
39
|
+
paidOut: addSummaryAmounts(row?.paidOut ?? 0, sign * value.paidOut),
|
|
40
|
+
count: addSummaryAmounts(row?.count ?? 0, sign * value.count),
|
|
40
41
|
};
|
|
42
|
+
addSummaryAmounts(totals.gross, -totals.reversed);
|
|
41
43
|
if (row) {
|
|
42
44
|
if (totals.count === 0) await ctx.db.delete("currencyTotals", row._id);
|
|
43
45
|
else await ctx.db.patch("currencyTotals", row._id, totals);
|
|
@@ -72,14 +74,17 @@ triggers.register("transfers", async (ctx, change) => {
|
|
|
72
74
|
triggers.register("payouts", async (ctx, change) => {
|
|
73
75
|
const contribution = (
|
|
74
76
|
row: NonNullable<typeof change.newDoc>,
|
|
75
|
-
): Contribution =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
): Contribution => {
|
|
78
|
+
const amount = addSummaryAmounts(row.amount, 0);
|
|
79
|
+
return {
|
|
80
|
+
accountId: row.accountId,
|
|
81
|
+
currency: row.currency,
|
|
82
|
+
gross: 0,
|
|
83
|
+
reversed: 0,
|
|
84
|
+
paidOut: row.status === "paid" ? amount : 0,
|
|
85
|
+
count: 1,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
83
88
|
if (change.oldDoc?.totalsRecorded)
|
|
84
89
|
await adjust(ctx, "payouts", contribution(change.oldDoc), -1);
|
|
85
90
|
if (change.newDoc) {
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { convexTest } from "convex-test";
|
|
2
|
+
import { expect, it } from "vitest";
|
|
3
|
+
|
|
4
|
+
import { api } from "./_generated/api.js";
|
|
5
|
+
import schema from "./schema.js";
|
|
6
|
+
|
|
7
|
+
const modules = import.meta.glob("./**/*.*s");
|
|
8
|
+
const max = Number.MAX_SAFE_INTEGER;
|
|
9
|
+
const transfer = (stripeTransferId: string, amount: number) => ({
|
|
10
|
+
stripeTransferId,
|
|
11
|
+
amount,
|
|
12
|
+
destinationAccountId: "acct_a",
|
|
13
|
+
currency: "usd",
|
|
14
|
+
status: "paid" as const,
|
|
15
|
+
});
|
|
16
|
+
const payout = (stripePayoutId: string, amount: number) => ({
|
|
17
|
+
stripePayoutId,
|
|
18
|
+
amount,
|
|
19
|
+
accountId: "acct_a",
|
|
20
|
+
currency: "usd",
|
|
21
|
+
status: "paid" as const,
|
|
22
|
+
});
|
|
23
|
+
const earnings = { destinationAccountId: "acct_a", previewLimit: 0 };
|
|
24
|
+
|
|
25
|
+
it("rejects the public artifact overflow before rounding and rolls back each rejected transfer", async () => {
|
|
26
|
+
const t = convexTest(schema, modules);
|
|
27
|
+
await t.mutation(
|
|
28
|
+
api.connect.mutations.upsertTransfer,
|
|
29
|
+
transfer("tr_max", max),
|
|
30
|
+
);
|
|
31
|
+
const original = await t.query(
|
|
32
|
+
api.connect.queries.getAccountEarningsByCurrency,
|
|
33
|
+
earnings,
|
|
34
|
+
);
|
|
35
|
+
for (const id of ["tr_overflow_1", "tr_overflow_2"])
|
|
36
|
+
await expect(
|
|
37
|
+
t.mutation(api.connect.mutations.upsertTransfer, transfer(id, 1)),
|
|
38
|
+
).rejects.toThrow(/safe integer/i);
|
|
39
|
+
expect(
|
|
40
|
+
await t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
41
|
+
).toEqual(original);
|
|
42
|
+
expect(await t.run((ctx) => ctx.db.query("transfers").take(3))).toHaveLength(
|
|
43
|
+
1,
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("rejects paid payout overflow without persisting the payout or changing its summary", async () => {
|
|
48
|
+
const t = convexTest(schema, modules);
|
|
49
|
+
await t.mutation(api.connect.mutations.upsertPayout, payout("po_max", max));
|
|
50
|
+
await expect(
|
|
51
|
+
t.mutation(api.connect.mutations.upsertPayout, payout("po_overflow", 1)),
|
|
52
|
+
).rejects.toThrow(/safe integer/i);
|
|
53
|
+
expect(
|
|
54
|
+
await t.query(api.connect.queries.getAccountPayoutsByCurrency, {
|
|
55
|
+
accountId: "acct_a",
|
|
56
|
+
previewLimit: 0,
|
|
57
|
+
}),
|
|
58
|
+
).toMatchObject({ totals: [{ paidOut: max, payoutCount: 1 }] });
|
|
59
|
+
expect(await t.run((ctx) => ctx.db.query("payouts").take(2))).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it.each([0.5, Number.NaN, Number.POSITIVE_INFINITY, max + 1])(
|
|
63
|
+
"rejects invalid source amounts %s, including unpaid payouts",
|
|
64
|
+
async (amount) => {
|
|
65
|
+
const t = convexTest(schema, modules);
|
|
66
|
+
await expect(
|
|
67
|
+
t.mutation(
|
|
68
|
+
api.connect.mutations.upsertTransfer,
|
|
69
|
+
transfer("tr_invalid", amount),
|
|
70
|
+
),
|
|
71
|
+
).rejects.toThrow(/safe integer/i);
|
|
72
|
+
await expect(
|
|
73
|
+
t.mutation(api.connect.mutations.upsertPayout, {
|
|
74
|
+
...payout("po_invalid", amount),
|
|
75
|
+
status: "pending",
|
|
76
|
+
}),
|
|
77
|
+
).rejects.toThrow(/safe integer/i);
|
|
78
|
+
expect(
|
|
79
|
+
await t.run((ctx) => ctx.db.query("currencyTotals").take(1)),
|
|
80
|
+
).toEqual([]);
|
|
81
|
+
},
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
it("rolls back subtract/reapply updates that would overflow", async () => {
|
|
85
|
+
const t = convexTest(schema, modules);
|
|
86
|
+
await t.mutation(
|
|
87
|
+
api.connect.mutations.upsertTransfer,
|
|
88
|
+
transfer("tr_max", max),
|
|
89
|
+
);
|
|
90
|
+
await t.mutation(
|
|
91
|
+
api.connect.mutations.upsertTransfer,
|
|
92
|
+
transfer("tr_update", 0),
|
|
93
|
+
);
|
|
94
|
+
const before = await t.run((ctx) => ctx.db.query("transfers").take(3));
|
|
95
|
+
await expect(
|
|
96
|
+
t.mutation(api.connect.mutations.upsertTransfer, transfer("tr_update", 1)),
|
|
97
|
+
).rejects.toThrow(/safe integer/i);
|
|
98
|
+
expect(await t.run((ctx) => ctx.db.query("transfers").take(3))).toEqual(
|
|
99
|
+
before,
|
|
100
|
+
);
|
|
101
|
+
expect(
|
|
102
|
+
await t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
103
|
+
).toMatchObject({ totals: [{ gross: max, transferCount: 2 }] });
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("rolls back a reversal whose cumulative summary would overflow", async () => {
|
|
107
|
+
const t = convexTest(schema, modules);
|
|
108
|
+
await t.mutation(api.connect.mutations.upsertTransfer, {
|
|
109
|
+
...transfer("tr_a", 1),
|
|
110
|
+
reversedAmount: max - 1,
|
|
111
|
+
});
|
|
112
|
+
await t.mutation(api.connect.mutations.upsertTransfer, {
|
|
113
|
+
...transfer("tr_b", 1),
|
|
114
|
+
reversedAmount: 1,
|
|
115
|
+
});
|
|
116
|
+
const before = await t.query(
|
|
117
|
+
api.connect.queries.getAccountEarningsByCurrency,
|
|
118
|
+
earnings,
|
|
119
|
+
);
|
|
120
|
+
await expect(
|
|
121
|
+
t.mutation(api.connect.mutations.recordTransferReversal, {
|
|
122
|
+
stripeTransferId: "tr_b",
|
|
123
|
+
reversedAmount: 2,
|
|
124
|
+
}),
|
|
125
|
+
).rejects.toThrow(/safe integer/i);
|
|
126
|
+
expect(
|
|
127
|
+
await t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
128
|
+
).toEqual(before);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it.each(["earnings", "payouts"] as const)(
|
|
132
|
+
"rolls back an entire %s backfill page and source markers on unsafe totals",
|
|
133
|
+
async (kind) => {
|
|
134
|
+
const t = convexTest(schema, modules);
|
|
135
|
+
await t.run(async (ctx) => {
|
|
136
|
+
if (kind === "earnings") {
|
|
137
|
+
await ctx.db.insert("transfers", transfer("tr_legacy_max", max));
|
|
138
|
+
await ctx.db.insert("transfers", transfer("tr_legacy_overflow", 1));
|
|
139
|
+
} else {
|
|
140
|
+
await ctx.db.insert("payouts", payout("po_legacy_max", max));
|
|
141
|
+
await ctx.db.insert("payouts", payout("po_legacy_overflow", 1));
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
await expect(
|
|
145
|
+
t.mutation(api.earnings.mutations.backfillCurrencyTotals, {
|
|
146
|
+
kind,
|
|
147
|
+
cursor: null,
|
|
148
|
+
}),
|
|
149
|
+
).rejects.toThrow(/safe integer/i);
|
|
150
|
+
expect(
|
|
151
|
+
await t.run((ctx) => ctx.db.query("currencyTotals").take(1)),
|
|
152
|
+
).toEqual([]);
|
|
153
|
+
expect(
|
|
154
|
+
(
|
|
155
|
+
await t.run((ctx) =>
|
|
156
|
+
ctx.db.query(kind === "earnings" ? "transfers" : "payouts").take(2),
|
|
157
|
+
)
|
|
158
|
+
).every((row) => row.totalsRecorded === undefined),
|
|
159
|
+
).toBe(true);
|
|
160
|
+
},
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
it.each([
|
|
164
|
+
["gross", max + 1],
|
|
165
|
+
["reversed", 0.5],
|
|
166
|
+
["paidOut", Number.POSITIVE_INFINITY],
|
|
167
|
+
["count", Number.NaN],
|
|
168
|
+
] as const)(
|
|
169
|
+
"rejects unsafe stored summary field %s before exposing totals",
|
|
170
|
+
async (field, value) => {
|
|
171
|
+
const t = convexTest(schema, modules);
|
|
172
|
+
await t.run((ctx) =>
|
|
173
|
+
ctx.db.insert("currencyTotals", {
|
|
174
|
+
accountId: "acct_a",
|
|
175
|
+
currency: "usd",
|
|
176
|
+
kind: "earnings",
|
|
177
|
+
gross: 100,
|
|
178
|
+
reversed: 0,
|
|
179
|
+
paidOut: 0,
|
|
180
|
+
count: 1,
|
|
181
|
+
[field]: value,
|
|
182
|
+
}),
|
|
183
|
+
);
|
|
184
|
+
await expect(
|
|
185
|
+
t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
186
|
+
).rejects.toThrow(/safe integer/i);
|
|
187
|
+
},
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
it("checks summary counts before persisting a new source record", async () => {
|
|
191
|
+
const t = convexTest(schema, modules);
|
|
192
|
+
await t.run((ctx) =>
|
|
193
|
+
ctx.db.insert("currencyTotals", {
|
|
194
|
+
accountId: "acct_a",
|
|
195
|
+
currency: "usd",
|
|
196
|
+
kind: "earnings",
|
|
197
|
+
gross: 0,
|
|
198
|
+
reversed: 0,
|
|
199
|
+
paidOut: 0,
|
|
200
|
+
count: max,
|
|
201
|
+
}),
|
|
202
|
+
);
|
|
203
|
+
await expect(
|
|
204
|
+
t.mutation(api.connect.mutations.upsertTransfer, transfer("tr_count", 0)),
|
|
205
|
+
).rejects.toThrow(/safe integer/i);
|
|
206
|
+
expect(await t.run((ctx) => ctx.db.query("transfers").take(1))).toEqual([]);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it("rejects an unsafe derived net even when both stored operands are safe integers", async () => {
|
|
210
|
+
const t = convexTest(schema, modules);
|
|
211
|
+
await t.run((ctx) =>
|
|
212
|
+
ctx.db.insert("currencyTotals", {
|
|
213
|
+
accountId: "acct_a",
|
|
214
|
+
currency: "usd",
|
|
215
|
+
kind: "earnings",
|
|
216
|
+
gross: max,
|
|
217
|
+
reversed: -1,
|
|
218
|
+
paidOut: 0,
|
|
219
|
+
count: 1,
|
|
220
|
+
}),
|
|
221
|
+
);
|
|
222
|
+
await expect(
|
|
223
|
+
t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
224
|
+
).rejects.toThrow(/safe integer/i);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it("preserves supported boundary amounts through reversal and reinstatement", async () => {
|
|
228
|
+
const t = convexTest(schema, modules);
|
|
229
|
+
await t.mutation(
|
|
230
|
+
api.connect.mutations.upsertTransfer,
|
|
231
|
+
transfer("tr_boundary", max - 2),
|
|
232
|
+
);
|
|
233
|
+
await t.mutation(api.connect.mutations.recordTransferReversal, {
|
|
234
|
+
stripeTransferId: "tr_boundary",
|
|
235
|
+
reversedAmount: 1,
|
|
236
|
+
});
|
|
237
|
+
await t.mutation(api.connect.mutations.upsertTransfer, {
|
|
238
|
+
...transfer("tr_restore", 1),
|
|
239
|
+
reinstatement: true,
|
|
240
|
+
});
|
|
241
|
+
expect(
|
|
242
|
+
await t.query(api.connect.queries.getAccountEarningsByCurrency, earnings),
|
|
243
|
+
).toMatchObject({
|
|
244
|
+
totals: [{ gross: max - 1, reversed: 1, net: max - 2, transferCount: 2 }],
|
|
245
|
+
});
|
|
246
|
+
});
|