stitchkit 0.116.0 → 0.118.0
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 +56 -0
- package/dist/agent-runtime/run-acquisition.d.ts +9 -2
- package/dist/agent-runtime/run-acquisition.d.ts.map +1 -1
- package/dist/agent-runtime/run-execution.d.ts +3 -0
- package/dist/agent-runtime/run-execution.d.ts.map +1 -1
- package/dist/agent-runtime/run-failure.d.ts +4 -1
- package/dist/agent-runtime/run-failure.d.ts.map +1 -1
- package/dist/agent-runtime/run-store-retry.d.ts +8 -0
- package/dist/agent-runtime/run-store-retry.d.ts.map +1 -0
- package/dist/agent-runtime/run-terminal.d.ts.map +1 -1
- package/dist/agent-runtime/run-unacquired.d.ts +19 -0
- package/dist/agent-runtime/run-unacquired.d.ts.map +1 -0
- package/dist/agent-runtime/store-conformance.d.ts +8 -0
- package/dist/agent-runtime/store-conformance.d.ts.map +1 -1
- package/dist/agent-runtime/store-driver-contract.d.ts +5 -0
- package/dist/agent-runtime/store-driver-contract.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-commit.d.ts +34 -4
- package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime/harness.js +2 -2
- package/dist/entrypoints/agent-runtime/sqlite/bun.js +3 -3
- package/dist/entrypoints/agent-runtime/sqlite/node.js +3 -3
- package/dist/entrypoints/agent-runtime/testing.js +22 -4
- package/dist/entrypoints/agent-runtime.d.ts +1 -1
- package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime.js +13 -11
- package/dist/entrypoints/application/diagnostic-journal.js +1 -1
- package/dist/entrypoints/application/directory-inbox.js +3 -3
- package/dist/entrypoints/cli/publish.js +2 -2
- package/dist/entrypoints/files.js +2 -2
- package/dist/entrypoints/primitives.js +51 -154
- package/dist/entrypoints/server.js +6 -6
- package/dist/entrypoints/telegram.d.ts +1 -1
- package/dist/entrypoints/telegram.d.ts.map +1 -1
- package/dist/entrypoints/telegram.js +352 -137
- package/dist/entrypoints/tracking/contract.d.ts +11 -0
- package/dist/entrypoints/tracking/contract.d.ts.map +1 -0
- package/dist/entrypoints/tracking/contract.js +162 -0
- package/dist/entrypoints/tracking/performance.d.ts +8 -0
- package/dist/entrypoints/tracking/performance.d.ts.map +1 -0
- package/dist/entrypoints/tracking/performance.js +181 -0
- package/dist/entrypoints/tracking/server.d.ts +1 -0
- package/dist/entrypoints/tracking/server.d.ts.map +1 -1
- package/dist/entrypoints/tracking/server.js +40 -12
- package/dist/entrypoints/tracking.d.ts +4 -3
- package/dist/entrypoints/tracking.d.ts.map +1 -1
- package/dist/entrypoints/tracking.js +43 -143
- package/dist/entrypoints/xlsx.d.ts +4 -0
- package/dist/entrypoints/xlsx.d.ts.map +1 -0
- package/dist/entrypoints/xlsx.js +406 -0
- package/dist/{index-fa435yq2.js → index-073nw9qr.js} +8 -8
- package/dist/index-1f40z584.js +7 -0
- package/dist/{index-fdk4r4r6.js → index-75ns2ybj.js} +1 -1
- package/dist/{index-jq2ky8fw.js → index-cycp3r3e.js} +124 -181
- package/dist/{index-4g6qmgdx.js → index-ghtpfz4z.js} +9 -9
- package/dist/{index-n3v695sb.js → index-hdjmdwsj.js} +277 -96
- package/dist/{index-zqkz4af9.js → index-nqxrm176.js} +1 -1
- package/dist/index-qezhmp51.js +242 -0
- package/dist/index-vv1sch8a.js +94 -0
- package/dist/{index-fggxgbrk.js → index-xx1j310k.js} +165 -102
- package/dist/internal/exclusive-lock.d.ts.map +1 -1
- package/dist/primitives/decimal.d.ts +10 -0
- package/dist/primitives/decimal.d.ts.map +1 -1
- package/dist/primitives/index.d.ts +3 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/money.d.ts +20 -0
- package/dist/primitives/money.d.ts.map +1 -1
- package/dist/primitives/quantity.d.ts.map +1 -1
- package/dist/primitives/rounding.d.ts +40 -0
- package/dist/primitives/rounding.d.ts.map +1 -0
- package/dist/telegram/budget-transformer.d.ts +2 -2
- package/dist/telegram/not-dispatched.d.ts +2 -2
- package/dist/telegram/not-dispatched.d.ts.map +1 -1
- package/dist/telegram/outbound-budget.d.ts +53 -16
- package/dist/telegram/outbound-budget.d.ts.map +1 -1
- package/dist/telegram/outbound-cost.d.ts +5 -0
- package/dist/telegram/outbound-cost.d.ts.map +1 -0
- package/dist/telegram/outbound-pauses.d.ts +17 -0
- package/dist/telegram/outbound-pauses.d.ts.map +1 -0
- package/dist/telegram/outbound-queue.d.ts +17 -0
- package/dist/telegram/outbound-queue.d.ts.map +1 -0
- package/dist/telegram/update-intake-work.d.ts +20 -1
- package/dist/telegram/update-intake-work.d.ts.map +1 -1
- package/dist/telegram/update-intake.d.ts +12 -3
- package/dist/telegram/update-intake.d.ts.map +1 -1
- package/dist/telegram/update-store-check.d.ts +1 -1
- package/dist/telegram/update-store-check.d.ts.map +1 -1
- package/dist/telegram/update-store-postgres.d.ts.map +1 -1
- package/dist/telegram/update-store-sqlite.d.ts.map +1 -1
- package/dist/telegram/update-store.d.ts +5 -1
- package/dist/telegram/update-store.d.ts.map +1 -1
- package/dist/tracking/attribution.d.ts +1 -1
- package/dist/tracking/attribution.d.ts.map +1 -1
- package/dist/tracking/client-visit.d.ts +3 -1
- package/dist/tracking/client-visit.d.ts.map +1 -1
- package/dist/tracking/client.d.ts.map +1 -1
- package/dist/tracking/performance/collector.d.ts +61 -0
- package/dist/tracking/performance/collector.d.ts.map +1 -0
- package/dist/tracking/performance/schema.d.ts +45 -0
- package/dist/tracking/performance/schema.d.ts.map +1 -0
- package/dist/tracking/performance/summary.d.ts +12 -0
- package/dist/tracking/performance/summary.d.ts.map +1 -0
- package/dist/tracking/privacy.d.ts +5 -0
- package/dist/tracking/privacy.d.ts.map +1 -0
- package/dist/tracking/server/telemetry-health.d.ts +31 -0
- package/dist/tracking/server/telemetry-health.d.ts.map +1 -0
- package/dist/xlsx/cells.d.ts +17 -0
- package/dist/xlsx/cells.d.ts.map +1 -0
- package/dist/xlsx/render.d.ts +11 -0
- package/dist/xlsx/render.d.ts.map +1 -0
- package/dist/xlsx/schema.d.ts +119 -0
- package/dist/xlsx/schema.d.ts.map +1 -0
- package/dist/xlsx/zip.d.ts +13 -0
- package/dist/xlsx/zip.d.ts.map +1 -0
- package/llms/agent-runtime.2.txt +40 -16
- package/llms/agent-runtime.3.txt +17 -0
- package/llms/agent-runtime.txt +4 -1
- package/llms/primitives.txt +21 -0
- package/llms/stitchkit.txt +9 -6
- package/llms/telegram.txt +46 -15
- package/llms/tracking-contract.txt +32 -0
- package/llms/tracking-performance.txt +21 -0
- package/llms/tracking-server.txt +1 -0
- package/llms/tracking.txt +75 -12
- package/llms/{upgrading-0.105.0-0.116.0.txt → upgrading-0.105.0-0.118.0.txt} +73 -3
- package/llms/upgrading.txt +1 -1
- package/llms/xlsx.txt +107 -0
- package/llms-full.txt +392 -34
- package/llms.txt +11 -7
- package/package.json +27 -9
- package/dist/{index-z3d6smer.js → index-tdpmfks8.js} +5 -5
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
export interface DecimalParts {
|
|
2
3
|
readonly coefficient: bigint;
|
|
3
4
|
readonly scale: number;
|
|
@@ -7,4 +8,13 @@ export declare function normalizeDecimal(parts: DecimalParts): DecimalParts;
|
|
|
7
8
|
export declare function formatDecimal(parts: DecimalParts): string;
|
|
8
9
|
export declare function addDecimal(left: DecimalParts, right: DecimalParts): DecimalParts;
|
|
9
10
|
export declare function multiplyDecimalRatio(value: DecimalParts, numerator: bigint, denominator: bigint): DecimalParts;
|
|
11
|
+
/**
|
|
12
|
+
* A decimal as a string in its one canonical spelling: `10.5`, never `10.50`,
|
|
13
|
+
* `+10.5`, `.5`, or a number. Two equal values serialize alike, so a digest or a
|
|
14
|
+
* unique index over them agrees. A JSON number is refused: it is a float by the
|
|
15
|
+
* time anyone reads it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DecimalStringSchema: z.ZodString;
|
|
18
|
+
/** A decimal string as a database or a form spells it, brought to the canonical one. */
|
|
19
|
+
export declare const DecimalInputSchema: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
10
20
|
//# sourceMappingURL=decimal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../../src/primitives/decimal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../../src/primitives/decimal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAOxD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAQlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAKhF;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,YAAY,CAYd;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,aAMS,CAAC;AAE1C,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,wDAG4B,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
export { type AuditOmitPolicy, type AuditPolicy, type AuditRecord, type AuditRecordPolicy, AuditRecordSchema, assertAuditDeclared, audit, type CreateAuditRecordInput, createAuditRecord, } from './audit.js';
|
|
2
2
|
export { CanonicalJsonError, type CanonicalJsonOptions, type CanonicalJsonRefusal, canonicalJson, } from './canonical-json.js';
|
|
3
3
|
export { type DeadlineResult, DeadlineResultSchema, defineDeadlinePolicy, } from './deadline.js';
|
|
4
|
+
export { DecimalInputSchema, DecimalStringSchema } from './decimal.js';
|
|
4
5
|
export { type DomainEventDeliveryClaim, DomainEventDeliveryClaimSchema, type DomainEventDeliveryOutcome, DomainEventDeliveryOutcomeSchema, type DomainEventDeliveryPlan, type DomainEventDestination, DomainEventDestinationSchema, type DomainEventDispatchResult, type DomainEventOutbox, type DomainEventRoute, type DomainEventTransport, defineDomainEventDelivery, } from './delivery.js';
|
|
5
6
|
export { createDomainEventSchema, type DomainEvent, type DomainEventActor, DomainEventActorSchema, DomainEventSchema, type DomainEventSubject, DomainEventSubjectSchema, } from './event.js';
|
|
6
7
|
export { createExportResultSchema, defineExportOperation, } from './export-operation.js';
|
|
7
8
|
export { defineLifecycle, type LifecycleDefinition, type LifecycleState, type LifecycleTransitionDefinition, type LifecycleTransitionEvent, LifecycleTransitionEventSchema, type LifecycleTransitionFailure, type LifecycleTransitionInput, type LifecycleTransitionResult, type LifecycleTransitionSuccess, } from './lifecycle.js';
|
|
8
9
|
export { type SourceRisk, type SourceText, scanMoneyNumberRisks, scanOwnerFilterRisks, } from './migration-checks.js';
|
|
9
|
-
export { addMoney, createMoneySchema, defineMoney, type Money, type MoneyShare, type MoneySplit, multiplyMoney, shareMoney, splitMoney, subtractMoney, } from './money.js';
|
|
10
|
+
export { addMoney, createMoneySchema, defineMoney, type Money, type MoneyShare, type MoneySplit, moneyFromDecimal, moneyToDecimal, multiplyMoney, multiplyMoneyByDecimal, roundMoney, shareMoney, splitMoney, subtractMoney, } from './money.js';
|
|
10
11
|
export { defineOwnerScope, type OwnerScope, type OwnerScopeDefinition, type OwnerScopeResolution, } from './owner-scope.js';
|
|
11
12
|
export { definePermissionMatrix, type PermissionCheckResult, type PermissionGrantMatrix, } from './permission.js';
|
|
12
13
|
export { addQuantity, createQuantitySchema, defineUnitSystem, type Quantity, type QuantityProjection, QuantityProjectionSchema, type UnitConversion, } from './quantity.js';
|
|
14
|
+
export { defineRoundingPolicy, type RoundingMode, RoundingModeSchema, type RoundingPolicy, RoundingPolicySchema, roundDecimal, } from './rounding.js';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,gCAAgC,EAChC,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,UAAU,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,EACL,KAAK,sBAAsB,EAC3B,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EACL,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,gCAAgC,EAChC,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,UAAU,EACf,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,cAAc,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type RoundingPolicy } from './rounding.js';
|
|
2
3
|
export interface Money<TCurrency extends string = string> {
|
|
3
4
|
readonly minor: string;
|
|
4
5
|
readonly currency: TCurrency;
|
|
@@ -10,6 +11,25 @@ export declare function createMoneySchema<const TCurrency extends string>(curren
|
|
|
10
11
|
export declare function addMoney<TCurrency extends string>(left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>): Money<TCurrency>;
|
|
11
12
|
export declare function subtractMoney<TCurrency extends string>(left: Money<TCurrency>, right: Money<NoInfer<TCurrency>>): Money<TCurrency>;
|
|
12
13
|
export declare function multiplyMoney<TCurrency extends string>(value: Money<TCurrency>, quantity: bigint | number): Money<TCurrency>;
|
|
14
|
+
/**
|
|
15
|
+
* `5041.82` at scale 2 is 504182 minor units. Refuses a value finer than the
|
|
16
|
+
* currency, because dropping those digits here would be a rounding nobody chose:
|
|
17
|
+
* round first, with a policy, if that is what is meant.
|
|
18
|
+
*/
|
|
19
|
+
export declare function moneyFromDecimal<const TCurrency extends string>(currency: TCurrency, value: string, scale: number): Money<TCurrency>;
|
|
20
|
+
/** The amount in major units with every place of the currency: `5041.80`, not `5041.8`. */
|
|
21
|
+
export declare function moneyToDecimal(value: Money, scale: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* Bring an amount to the steps of a policy, whose table is in minor units.
|
|
24
|
+
* `below` and `step` of `{ below: '100000', step: '100' }` mean a price under
|
|
25
|
+
* 1000.00 rounds to whole units of a two-place currency.
|
|
26
|
+
*/
|
|
27
|
+
export declare function roundMoney<TCurrency extends string>(value: Money<TCurrency>, policy: RoundingPolicy): Money<TCurrency>;
|
|
28
|
+
/**
|
|
29
|
+
* Multiply by a decimal such as a quantity of `2.5` or a rate of `0.2`. The exact
|
|
30
|
+
* product is computed first and rounded once, by the policy the caller names.
|
|
31
|
+
*/
|
|
32
|
+
export declare function multiplyMoneyByDecimal<TCurrency extends string>(value: Money<TCurrency>, factor: string, policy: RoundingPolicy): Money<TCurrency>;
|
|
13
33
|
export interface MoneyShare<TCurrency extends string> {
|
|
14
34
|
readonly amount: Money<TCurrency>;
|
|
15
35
|
readonly remainder: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../src/primitives/money.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../src/primitives/money.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../../src/primitives/quantity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../../src/primitives/quantity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,MAAM,WAAW,QAAQ,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK;;;kBAE3E;AAUD,wBAAgB,WAAW,CAAC,KAAK,SAAS,MAAM,EAC9C,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EACrB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAC9B,QAAQ,CAAC,KAAK,CAAC,CAQjB;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;CAAE,GACjE;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEN,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;2BAWnC,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,EAAE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;CACxD;;wBAFiB,SAAS,KAAK,EAAE;8BACV,SAAS,cAAc,CAAC,KAAK,CAAC,EAAE;;WAqB7C,SAAS,SAAS,KAAK,SAAS,MAAM,QAAQ,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;aAI3E,SAAS,SAAS,KAAK,SACvB,QAAQ,CAAC,SAAS,CAAC,GACzB,kBAAkB,CAAC,SAAS,CAAC;YAGxB,KAAK,SAAS,KAAK,EAAE,GAAG,SAAS,KAAK,UACpC,QAAQ,CAAC,KAAK,CAAC,MACnB,GAAG,GACN,kBAAkB,CAAC,GAAG,CAAC;GA4B7B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type DecimalParts } from './decimal.js';
|
|
3
|
+
/**
|
|
4
|
+
* How a value between two steps lands. `half-up` takes a tie away from zero and
|
|
5
|
+
* `half-even` to the even step, `up` always leaves zero and `down` always nears it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RoundingModeSchema: z.ZodEnum<{
|
|
8
|
+
down: "down";
|
|
9
|
+
"half-even": "half-even";
|
|
10
|
+
"half-up": "half-up";
|
|
11
|
+
up: "up";
|
|
12
|
+
}>;
|
|
13
|
+
export type RoundingMode = z.infer<typeof RoundingModeSchema>;
|
|
14
|
+
/**
|
|
15
|
+
* A rounding table: the first tier whose `below` exceeds the magnitude gives the
|
|
16
|
+
* step. Data rather than a callback, so it can be stored with the prices it
|
|
17
|
+
* produced and read back when one of them is questioned.
|
|
18
|
+
*/
|
|
19
|
+
export declare const RoundingPolicySchema: z.ZodObject<{
|
|
20
|
+
mode: z.ZodEnum<{
|
|
21
|
+
down: "down";
|
|
22
|
+
"half-even": "half-even";
|
|
23
|
+
"half-up": "half-up";
|
|
24
|
+
up: "up";
|
|
25
|
+
}>;
|
|
26
|
+
tiers: z.ZodArray<z.ZodObject<{
|
|
27
|
+
below: z.ZodOptional<z.ZodString>;
|
|
28
|
+
step: z.ZodString;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type RoundingPolicy = z.infer<typeof RoundingPolicySchema>;
|
|
32
|
+
export declare function defineRoundingPolicy(policy: z.input<typeof RoundingPolicySchema>): RoundingPolicy;
|
|
33
|
+
/** Whether every result of the table is a whole number, whatever the value. */
|
|
34
|
+
export declare function hasWholeSteps(policy: RoundingPolicy): boolean;
|
|
35
|
+
export declare function roundParts(value: DecimalParts, policy: RoundingPolicy): DecimalParts;
|
|
36
|
+
/** The exact product, rounded once. */
|
|
37
|
+
export declare function multiplyAndRound(left: DecimalParts, right: DecimalParts, policy: RoundingPolicy): DecimalParts;
|
|
38
|
+
/** A decimal string brought to the table's step, in canonical spelling. */
|
|
39
|
+
export declare function roundDecimal(value: string, policy: RoundingPolicy): string;
|
|
40
|
+
//# sourceMappingURL=rounding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rounding.d.ts","sourceRoot":"","sources":["../../src/primitives/rounding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,YAAY,EAIlB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;EAAiD,CAAC;AACjF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAmB9D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAgB7B,CAAC;AACL,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAC3C,cAAc,CAGhB;AA+BD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAE7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY,CAQpF;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,cAAc,GACrB,YAAY,CAKd;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAE1E"}
|
|
@@ -22,7 +22,7 @@ import type { TelegramOutboundBudget, TelegramOutboundCallOptions } from './outb
|
|
|
22
22
|
*
|
|
23
23
|
* Install it as the bot's one transformer; it replaces any limiter written
|
|
24
24
|
* beside it. A refusal Telegram returns as a response, not only a thrown one,
|
|
25
|
-
* pauses
|
|
25
|
+
* pauses its chat (see `TelegramOutboundBudget.run`), and the call is never
|
|
26
26
|
* repeated here.
|
|
27
27
|
*
|
|
28
28
|
* A cancellation that arrives while the call still waits for its turn, or in
|
|
@@ -31,7 +31,7 @@ import type { TelegramOutboundBudget, TelegramOutboundCallOptions } from './outb
|
|
|
31
31
|
* request was handed on is the client's ordinary error and the outcome is
|
|
32
32
|
* unknown, not a definite failure.
|
|
33
33
|
*
|
|
34
|
-
* `options
|
|
34
|
+
* `options` apply to every call through this client: a campaign installs
|
|
35
35
|
* `{ lane: 'bulk' }` on its own `Api`, and replies stay ahead of it.
|
|
36
36
|
*/
|
|
37
37
|
export declare function telegramBudgetTransformer(budget: TelegramOutboundBudget, options?: TelegramOutboundCallOptions): Transformer;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Where a Bot API request stopped before any byte of it was written: the address lookup, the
|
|
3
|
-
* connection,
|
|
3
|
+
* connection, the request itself (a body that could not be read), or the outbound budget's queue.
|
|
4
4
|
*/
|
|
5
|
-
export type TelegramNotDispatchedStage = 'lookup' | 'connect' | 'request';
|
|
5
|
+
export type TelegramNotDispatchedStage = 'lookup' | 'connect' | 'request' | 'queue';
|
|
6
6
|
/**
|
|
7
7
|
* The request provably never reached Telegram, so sending it again cannot duplicate a message.
|
|
8
8
|
* Thrown only before the first byte is written; any failure after that is an ordinary error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"not-dispatched.d.ts","sourceRoot":"","sources":["../../src/telegram/not-dispatched.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"not-dispatched.d.ts","sourceRoot":"","sources":["../../src/telegram/not-dispatched.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAIjD,QAAQ,CAAC,KAAK,EAAE,0BAA0B;IAH5C,SAAkB,IAAI,gCAAgC;IACtD,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,YACW,KAAK,EAAE,0BAA0B,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAG9B;CACF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,0BAA0B,CAOrC;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAO1E"}
|
|
@@ -18,12 +18,16 @@
|
|
|
18
18
|
* campaign; a campaign runs at whatever rate replies leave it.
|
|
19
19
|
*
|
|
20
20
|
* **It paces; it does not retry.** A 429 on a method that spends the budget
|
|
21
|
-
* pauses
|
|
22
|
-
* fallback when it stated none)
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* pauses the chat it was sent to for the wait Telegram stated (or a declared
|
|
22
|
+
* fallback when it stated none); every other chat of the token goes on. Telegram
|
|
23
|
+
* words a group's limit, a chat's pace and the bot's own limit alike, and only
|
|
24
|
+
* the addressee differs, so one chat's refusal is read as that chat's. Refusals
|
|
25
|
+
* from several chats inside a short window are read as the bot's own limit and
|
|
26
|
+
* pause the token, as does a 429 with no chat to blame. A 429 on an edit or a
|
|
27
|
+
* read concerns that call and pauses nothing. A network failure or a 5xx is
|
|
28
|
+
* returned to the caller unchanged: repeating a send whose external outcome is
|
|
29
|
+
* unknown is the caller's decision, and a primitive that retried it would turn
|
|
30
|
+
* one unknown message into two.
|
|
27
31
|
*
|
|
28
32
|
* The schedule is a strict token budget, not a bucket with a full burst: the
|
|
29
33
|
* first call after an idle period is immediate, and every later call occupies
|
|
@@ -39,10 +43,17 @@ export interface TelegramOutboundBudgetConfig {
|
|
|
39
43
|
/** Telegram messages per second. Default 24. */
|
|
40
44
|
readonly messagesPerSecond?: number;
|
|
41
45
|
/**
|
|
42
|
-
* How long a 429 without `retry_after` pauses
|
|
46
|
+
* How long a 429 without `retry_after` pauses. Default 1000 ms.
|
|
43
47
|
* Telegram's own `retry_after` is always used instead when present.
|
|
44
48
|
*/
|
|
45
49
|
readonly retryAfterFallbackMs?: number;
|
|
50
|
+
/**
|
|
51
|
+
* How many different chats have to get a 429 inside `tokenPauseWindowMs`
|
|
52
|
+
* before the token pauses instead of those chats. Default 3.
|
|
53
|
+
*/
|
|
54
|
+
readonly tokenPauseChats?: number;
|
|
55
|
+
/** The window `tokenPauseChats` is counted in. Default 5000 ms. */
|
|
56
|
+
readonly tokenPauseWindowMs?: number;
|
|
46
57
|
/**
|
|
47
58
|
* Test seam: the monotonic clock. Default `performance.now`. A wall clock can
|
|
48
59
|
* jump backwards and turn a pause into a burst, so the default is monotonic.
|
|
@@ -65,12 +76,32 @@ export interface TelegramOutboundBudgetStats {
|
|
|
65
76
|
/** How many of them are in the `bulk` lane. */
|
|
66
77
|
readonly queuedBulk: number;
|
|
67
78
|
readonly messagesPerSecond: number;
|
|
68
|
-
/** How much of the current
|
|
79
|
+
/** How much of the current token pause is still ahead, in milliseconds. */
|
|
69
80
|
readonly pausedForMs: number;
|
|
81
|
+
/** Chats on their own 429 pause right now. */
|
|
82
|
+
readonly pausedChats: number;
|
|
70
83
|
}
|
|
71
84
|
export interface TelegramOutboundCallOptions {
|
|
72
85
|
/** Default `interactive`. */
|
|
73
86
|
readonly lane?: TelegramOutboundLane;
|
|
87
|
+
/** The addressed chat: a pause of that chat holds this call. `run` reads `chat_id` itself. */
|
|
88
|
+
readonly chatId?: number | string;
|
|
89
|
+
/**
|
|
90
|
+
* What this call's own 429 does. `pause` (the default) pauses its chat. `call`
|
|
91
|
+
* pauses nothing, for a chat known to run into its limit: the refusal concerns
|
|
92
|
+
* this send alone. The call still spends the budget and waits out other pauses.
|
|
93
|
+
*/
|
|
94
|
+
readonly refusal?: 'pause' | 'call';
|
|
95
|
+
/**
|
|
96
|
+
* Give up after this long in the queue with `TelegramNotDispatchedError`,
|
|
97
|
+
* stage `queue`: nothing was sent, so repeating it is safe. A burst to one
|
|
98
|
+
* chat on pause otherwise queues without limit. Default: wait.
|
|
99
|
+
*/
|
|
100
|
+
readonly maxWaitMs?: number;
|
|
101
|
+
}
|
|
102
|
+
/** Which chat a pause or a wait concerns. */
|
|
103
|
+
export interface TelegramOutboundChatOptions {
|
|
104
|
+
readonly chatId?: number | string;
|
|
74
105
|
}
|
|
75
106
|
/**
|
|
76
107
|
* A token's outbound budget. `run` is the narrow adapter a client transformer
|
|
@@ -80,9 +111,10 @@ export interface TelegramOutboundBudget {
|
|
|
80
111
|
/**
|
|
81
112
|
* Run one Bot API call under the budget, in the `interactive` lane by default.
|
|
82
113
|
* A non-send method passes through without spending a message. A 429 on a send
|
|
83
|
-
* pauses
|
|
84
|
-
* the Bot API's `{ ok: false, … }` body, as a client transformer's `send`
|
|
85
|
-
*
|
|
114
|
+
* pauses the chat in the payload's `chat_id`, whether `send` throws it or resolves
|
|
115
|
+
* with the Bot API's `{ ok: false, … }` body, as a client transformer's `send`
|
|
116
|
+
* does; several chats refused at once, or a call with no chat, pause the token.
|
|
117
|
+
* A 429 on a non-send method pauses nothing. The error is rethrown, or the
|
|
86
118
|
* response returned, unchanged and the call is not repeated.
|
|
87
119
|
*/
|
|
88
120
|
run<T>(method: string, payload: unknown, signal: AbortSignal | undefined, send: () => Promise<T>, options?: TelegramOutboundCallOptions): Promise<T>;
|
|
@@ -94,13 +126,18 @@ export interface TelegramOutboundBudget {
|
|
|
94
126
|
acquire(cost: number, signal?: AbortSignal, options?: TelegramOutboundCallOptions): Promise<void>;
|
|
95
127
|
/** Pause every sender of this token for at least `milliseconds`. Never shortens an existing pause. */
|
|
96
128
|
pause(milliseconds: number): void;
|
|
97
|
-
/** Pause the token after a rate-limited refusal; another failure does nothing. */
|
|
98
|
-
pauseAfter(error: unknown): void;
|
|
99
129
|
/**
|
|
100
|
-
*
|
|
101
|
-
* is
|
|
130
|
+
* Pause after a rate-limited refusal; another failure does nothing. With
|
|
131
|
+
* `chatId` this is that chat's pause, counted like a refusal `run` saw; without
|
|
132
|
+
* it, the token's.
|
|
133
|
+
*/
|
|
134
|
+
pauseAfter(error: unknown, options?: TelegramOutboundChatOptions): void;
|
|
135
|
+
/**
|
|
136
|
+
* Wait out the current pause without spending a token, and that chat's own
|
|
137
|
+
* with `chatId`. For a retry path that is not a send (edit, delete) and does
|
|
138
|
+
* not go through `acquire`.
|
|
102
139
|
*/
|
|
103
|
-
waitUntilResumed(signal?: AbortSignal): Promise<void>;
|
|
140
|
+
waitUntilResumed(signal?: AbortSignal, options?: TelegramOutboundChatOptions): Promise<void>;
|
|
104
141
|
/** Measured counters. It never contains the token. */
|
|
105
142
|
stats(): TelegramOutboundBudgetStats;
|
|
106
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbound-budget.d.ts","sourceRoot":"","sources":["../../src/telegram/outbound-budget.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"outbound-budget.d.ts","sourceRoot":"","sources":["../../src/telegram/outbound-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** One message-producing call costs one; an empty or malformed array still costs one. */
|
|
2
|
+
export declare function sendCost(method: string, payload: unknown): number;
|
|
3
|
+
/** The chat a call addresses; a Bot API `chat_id` is a number or an `@username`. */
|
|
4
|
+
export declare function chatOf(payload: unknown): string | undefined;
|
|
5
|
+
//# sourceMappingURL=outbound-cost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-cost.d.ts","sourceRoot":"","sources":["../../src/telegram/outbound-cost.ts"],"names":[],"mappings":"AA2CA,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMjE;AAED,oFAAoF;AACpF,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI3D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** When a refusal is read as the bot's own limit rather than one chat's. */
|
|
2
|
+
export interface OutboundPausePolicy {
|
|
3
|
+
readonly tokenPauseChats: number;
|
|
4
|
+
readonly tokenPauseWindowMs: number;
|
|
5
|
+
}
|
|
6
|
+
/** A token's pauses: its own, and one per chat that got a 429. */
|
|
7
|
+
export interface OutboundPauses {
|
|
8
|
+
/** The instant `chat`, or the token when `chat` is undefined, may send again. */
|
|
9
|
+
resumesAt(chat: string | undefined): number;
|
|
10
|
+
pauseToken(milliseconds: number): void;
|
|
11
|
+
/** One chat's refusal, counted towards reading it as the token's. */
|
|
12
|
+
pauseChat(chat: string, milliseconds: number): void;
|
|
13
|
+
pausedForMs(): number;
|
|
14
|
+
pausedChats(): number;
|
|
15
|
+
}
|
|
16
|
+
export declare function createOutboundPauses({ tokenPauseChats, tokenPauseWindowMs }: OutboundPausePolicy, now: () => number, onPause: () => void): OutboundPauses;
|
|
17
|
+
//# sourceMappingURL=outbound-pauses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-pauses.d.ts","sourceRoot":"","sources":["../../src/telegram/outbound-pauses.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAC5C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,qEAAqE;IACrE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACpD,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,eAAe,EAAE,kBAAkB,EAAE,EAAE,mBAAmB,EAC5D,GAAG,EAAE,MAAM,MAAM,EACjB,OAAO,EAAE,MAAM,IAAI,GAClB,cAAc,CAkDhB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TelegramOutboundCallOptions } from './outbound-budget.js';
|
|
2
|
+
import type { OutboundPauses } from './outbound-pauses.js';
|
|
3
|
+
/** One token's waiting calls, granted one interval apart around whatever is paused. */
|
|
4
|
+
export interface OutboundQueue {
|
|
5
|
+
acquire(cost: number, signal?: AbortSignal, options?: TelegramOutboundCallOptions): Promise<void>;
|
|
6
|
+
/** Wake the drain: a pause changed what it was sleeping on. */
|
|
7
|
+
wake(): void;
|
|
8
|
+
wait(milliseconds: number, signal?: AbortSignal): Promise<void>;
|
|
9
|
+
counts(): {
|
|
10
|
+
readonly granted: number;
|
|
11
|
+
readonly messages: number;
|
|
12
|
+
readonly queued: number;
|
|
13
|
+
readonly queuedBulk: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare function createOutboundQueue(interval: number, now: () => number, sleepFor: (milliseconds: number, signal?: AbortSignal) => Promise<void>, pauses: OutboundPauses): OutboundQueue;
|
|
17
|
+
//# sourceMappingURL=outbound-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-queue.d.ts","sourceRoot":"","sources":["../../src/telegram/outbound-queue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAwB,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcxD,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC5B,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,+DAA+D;IAC/D,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI;QACR,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,MAAM,EACjB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EACvE,MAAM,EAAE,cAAc,GACrB,aAAa,CAwLf"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TelegramUpdateAttemptIntakeConfig, TelegramUpdateEnvelope, TelegramUpdateIntakeConfig, TelegramUpdateStoreStep } from './update-intake.js';
|
|
2
|
-
import type { StoredTelegramUpdateExhaustion, TelegramUpdateAttemptIdentity, TelegramUpdateDurableStore, TelegramUpdateFencedStore, TelegramUpdateStore } from './update-store.js';
|
|
2
|
+
import type { StoredTelegramUpdateExhaustion, TelegramUpdateAttemptIdentity, TelegramUpdateDueQuery, TelegramUpdateDurableStore, TelegramUpdateFencedStore, TelegramUpdateStore } from './update-store.js';
|
|
3
3
|
type TelegramUpdateAnyIntakeConfig<TUpdate extends TelegramUpdateEnvelope> = TelegramUpdateIntakeConfig<TUpdate> | TelegramUpdateAttemptIntakeConfig<TUpdate>;
|
|
4
4
|
export type TelegramUpdateStoreErrorReporter = (error: unknown, step: TelegramUpdateStoreStep) => void;
|
|
5
5
|
/** One shared concurrency budget for ordinary attempts and exhaustion delivery. */
|
|
@@ -8,6 +8,25 @@ export interface TelegramUpdateWorkSlots {
|
|
|
8
8
|
release(): void;
|
|
9
9
|
}
|
|
10
10
|
export declare function createTelegramUpdateWorkSlots(maxConcurrent: number): TelegramUpdateWorkSlots;
|
|
11
|
+
/** The updates this process holds, each behind the earlier ones of its chat. */
|
|
12
|
+
export interface TelegramUpdateLines {
|
|
13
|
+
has(updateId: number): boolean;
|
|
14
|
+
/** Join the update's line; `false` when it is already in one. */
|
|
15
|
+
schedule(update: Record<string, unknown>): boolean;
|
|
16
|
+
pending(): readonly Promise<void>[];
|
|
17
|
+
}
|
|
18
|
+
export declare function createTelegramUpdateLines(run: (update: Record<string, unknown>, updateId: number) => Promise<void>): TelegramUpdateLines;
|
|
19
|
+
/**
|
|
20
|
+
* Every row due, read to the empty page. A scheduled row stays due until
|
|
21
|
+
* claimed, so only a cursor reaches past the first page. A store on a
|
|
22
|
+
* synchronous driver never leaves the microtask queue, so each page yields:
|
|
23
|
+
* webhooks and lease renewals run during a read.
|
|
24
|
+
*/
|
|
25
|
+
export declare function readTelegramUpdatesDue(store: TelegramUpdateStore, read: Omit<TelegramUpdateDueQuery, 'afterUpdateId'> & {
|
|
26
|
+
readonly skip: (updateId: number) => boolean;
|
|
27
|
+
readonly parse: (body: string) => Record<string, unknown> | undefined;
|
|
28
|
+
readonly reading: () => boolean;
|
|
29
|
+
}): Promise<Record<string, unknown>[]>;
|
|
11
30
|
export interface TelegramUpdateExhaustionScheduler {
|
|
12
31
|
schedule(row: StoredTelegramUpdateExhaustion, active: boolean): boolean;
|
|
13
32
|
pending(): readonly Promise<void>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-intake-work.d.ts","sourceRoot":"","sources":["../../src/telegram/update-intake-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iCAAiC,EACjC,sBAAsB,EAEtB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB,KAAK,6BAA6B,CAAC,OAAO,SAAS,sBAAsB,IACrE,0BAA0B,CAAC,OAAO,CAAC,GACnC,iCAAiC,CAAC,OAAO,CAAC,CAAC;AAE/C,MAAM,MAAM,gCAAgC,GAAG,CAC7C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,uBAAuB,KAC1B,IAAI,CAAC;AAEV,mFAAmF;AACnF,MAAM,WAAW,uBAAuB;IACtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,uBAAuB,CAiB5F;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,GAAG,EAAE,8BAA8B,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IACxE,OAAO,IAAI,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CACrC;AAED,uFAAuF;AACvF,wBAAgB,uCAAuC,CACrD,OAAO,SAAS,sBAAsB,EACtC,OAAO,EAAE;IACT,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;CAC7D,GAAG,iCAAiC,CA4CpC;AAYD,yEAAyE;AACzE,wBAAgB,iCAAiC,CAC/C,OAAO,SAAS,sBAAsB,EACtC,OAAO,EAAE;IACT,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,CAAC;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAC3E,QAAQ,CAAC,mBAAmB,EAAE,CAAC,QAAQ,EAAE,6BAA6B,KAAK,OAAO,CAAC;CACpF,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CA+JvE"}
|
|
1
|
+
{"version":3,"file":"update-intake-work.d.ts","sourceRoot":"","sources":["../../src/telegram/update-intake-work.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@
|
|
|
17
17
|
* `pending` whose process never got to it, `failed` whose retry is due,
|
|
18
18
|
* `processing` whose lease nobody renewed. Delivery is at least once: a
|
|
19
19
|
* handler that finished but could not be recorded as finished runs again.
|
|
20
|
+
*
|
|
21
|
+
* The start reads the whole queue into the lines of its chats, page by page,
|
|
22
|
+
* and whatever arrives meanwhile waits for it: a line is ordered by when it was
|
|
23
|
+
* joined, so the only way to keep a chat in `update_id` order after a crash is
|
|
24
|
+
* for the rows the dead process left to join first. The attempt the crash
|
|
25
|
+
* interrupted stays under its lease and comes when that lapses.
|
|
20
26
|
*/
|
|
21
27
|
import type { TelegramUpdateAttemptIdentity, TelegramUpdateFencedStore, TelegramUpdateStore } from './update-store.js';
|
|
22
28
|
import type { TelegramUpdateAcceptance } from './webhook.js';
|
|
@@ -86,7 +92,7 @@ export interface TelegramUpdateIntakeOptions<TUpdate extends TelegramUpdateEnvel
|
|
|
86
92
|
readonly handleExhaustion?: (exhaustion: TelegramUpdateExhaustion<TUpdate>) => unknown;
|
|
87
93
|
/** An observational report that `handleExhaustion` threw; it never acknowledges the row. */
|
|
88
94
|
readonly onExhaustionFailure?: (failure: TelegramUpdateExhaustionFailure<TUpdate>) => void;
|
|
89
|
-
/**
|
|
95
|
+
/** A step failed; the update stays recorded and a later sweep takes it. */
|
|
90
96
|
readonly onStoreError?: (error: unknown, step: TelegramUpdateStoreStep) => void;
|
|
91
97
|
/** Default `Date.now`. */
|
|
92
98
|
readonly now?: () => number;
|
|
@@ -106,9 +112,12 @@ export interface TelegramUpdateAttemptIntakeConfig<TUpdate extends TelegramUpdat
|
|
|
106
112
|
export interface TelegramUpdateIntake {
|
|
107
113
|
/** Record one webhook body; handling starts after, once the intake is started. */
|
|
108
114
|
accept(body: string): Promise<TelegramUpdateAcceptance>;
|
|
109
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Start handling, beginning with everything recorded before. Resolves once
|
|
117
|
+
* that queue is scheduled, not handled; `accept` works throughout.
|
|
118
|
+
*/
|
|
110
119
|
start(): Promise<void>;
|
|
111
|
-
/** Take over
|
|
120
|
+
/** Take over everything due now; how many updates were scheduled. */
|
|
112
121
|
sweep(): Promise<number>;
|
|
113
122
|
/** Resolves once nothing is scheduled. */
|
|
114
123
|
idle(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-intake.d.ts","sourceRoot":"","sources":["../../src/telegram/update-intake.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update-intake.d.ts","sourceRoot":"","sources":["../../src/telegram/update-intake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EACV,6BAA6B,EAE7B,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAE1D,mFAAmF;AACnF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,8DAA8D;AAC9D,MAAM,WAAW,4BAA6B,SAAQ,6BAA6B;IACjF,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,6BAA6B,CAAC;IAC9C,+FAA+F;IAC/F,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC;AAED,8EAA8E;AAC9E,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,sBAAsB,CAC9E,SAAQ,6BAA6B;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,iEAAiE;AACjE,MAAM,WAAW,+BAA+B,CAAC,OAAO,SAAS,sBAAsB;IACrF,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,kFAAkF;AAClF,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,QAAQ,EAAE,6BAA6B;IAAnE,YAA4B,QAAQ,EAAE,6BAA6B,EAKlE;CACF;AAED,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7E,qFAAqF;AACrF,MAAM,WAAW,2BAA2B,CAAC,OAAO,SAAS,sBAAsB;IACjF;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,KAAK,CAAC;IACrE,iBAAiB;IACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,wBAAwB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IACvF,4FAA4F;IAC5F,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3F,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAChF,0BAA0B;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,kDAAkD;AAClD,MAAM,WAAW,0BAA0B,CAAC,OAAO,SAAS,sBAAsB,CAChF,SAAQ,2BAA2B,CAAC,OAAO,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC/C;AAED,gFAAgF;AAChF,MAAM,WAAW,iCAAiC,CAAC,OAAO,SAAS,sBAAsB,CACvF,SAAQ,2BAA2B,CAAC,OAAO,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,mFAAmF;IACnF,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA4B,KAAK,OAAO,CAAC;CAC7F;AAMD,MAAM,WAAW,oBAAoB;IACnC,kFAAkF;IAClF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,0CAA0C;IAC1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,2DAA2D;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA8FD,wBAAgB,0BAA0B,CAAC,OAAO,SAAS,sBAAsB,EAC/E,MAAM,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAC1C,oBAAoB,CAAC;AACxB,wBAAgB,0BAA0B,CAAC,OAAO,SAAS,sBAAsB,EAC/E,MAAM,EAAE,iCAAiC,CAAC,OAAO,CAAC,GACjD,oBAAoB,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The rules of `TelegramUpdateStore`, as a check any store can be put
|
|
3
3
|
* through — the ones shipped here and an application's own over its ORM.
|
|
4
4
|
*
|
|
5
|
-
* A store is
|
|
5
|
+
* A store is six conditional statements, and each is easy to write almost
|
|
6
6
|
* right: a claim that does not check the lease, a settle that does not check
|
|
7
7
|
* the attempt, a claim read and then written in two statements so that two
|
|
8
8
|
* processes both take one update. Nothing fails in a test with one process;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-store-check.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-store-check.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAqYxB;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAC7D,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-store-postgres.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAIV,0BAA0B,EAE3B,MAAM,gBAAgB,CAAC;AAExB,oFAAoF;AACpF,MAAM,MAAM,qBAAqB,GAAG,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,KAC5C,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AAEjC,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,kCAAkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAaD,mEAAmE;AACnE,wBAAgB,iCAAiC,CAAC,KAAK,SAAqB,GAAG,MAAM,CAepF;AA4HD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iCAAiC,GACxC,0BAA0B,
|
|
1
|
+
{"version":3,"file":"update-store-postgres.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAIV,0BAA0B,EAE3B,MAAM,gBAAgB,CAAC;AAExB,oFAAoF;AACpF,MAAM,MAAM,qBAAqB,GAAG,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,KAC5C,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AAEjC,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,kCAAkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAaD,mEAAmE;AACnE,wBAAgB,iCAAiC,CAAC,KAAK,SAAqB,GAAG,MAAM,CAepF;AA4HD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iCAAiC,GACxC,0BAA0B,CAyK5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-store-sqlite.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAKV,0BAA0B,EAE3B,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QACtF,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;KAC3D,CAAC;CACH;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"update-store-sqlite.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAKV,0BAA0B,EAE3B,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QACpB,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QACtF,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;KAC3D,CAAC;CACH;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAgJD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,+BAA+B,GACtC,0BAA0B,CA8I5B"}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* - `renew` and `settle` act only while the record is still `processing` under
|
|
14
14
|
* the same attempt, so a process that lost its lease cannot overwrite the
|
|
15
15
|
* one that took it over;
|
|
16
|
+
* - `due` lists a record until it is claimed, so a queue is read page by page,
|
|
17
|
+
* strictly after `afterUpdateId`;
|
|
16
18
|
* - a durable abandonment keeps `settledAt` empty until the consumer has
|
|
17
19
|
* handled its final obligation. It stays in this record and is never pruned
|
|
18
20
|
* while it is pending.
|
|
@@ -43,6 +45,8 @@ export interface TelegramUpdateDueQuery {
|
|
|
43
45
|
/** A `pending` record is due once received at or before this — its own process had its chance. */
|
|
44
46
|
readonly pendingBefore: number;
|
|
45
47
|
readonly limit: number;
|
|
48
|
+
/** Continue strictly after this `update_id`; omit to begin at the first row. */
|
|
49
|
+
readonly afterUpdateId?: number;
|
|
46
50
|
}
|
|
47
51
|
export interface StoredTelegramUpdate {
|
|
48
52
|
readonly updateId: number;
|
|
@@ -78,7 +82,7 @@ export interface TelegramUpdateStore {
|
|
|
78
82
|
now?: number): Promise<boolean>;
|
|
79
83
|
/** End this attempt; ignored when the attempt no longer holds the update. */
|
|
80
84
|
settle(updateId: number, attempt: number, settlement: TelegramUpdateSettlement): Promise<void>;
|
|
81
|
-
/**
|
|
85
|
+
/** One page of claimable updates in `update_id` order; a row stays due until it is claimed. */
|
|
82
86
|
due(query: TelegramUpdateDueQuery): Promise<readonly StoredTelegramUpdate[]>;
|
|
83
87
|
/** Forget `completed` and `abandoned` updates settled before `before`; how many were forgotten. */
|
|
84
88
|
prune(before: number): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-store.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"update-store.d.ts","sourceRoot":"","sources":["../../src/telegram/update-store.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kGAAkG;IAClG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,+FAA+F;AAC/F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,8BACf,SAAQ,oBAAoB,EAC1B,6BAA6B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,4EAA4E;AAC5E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,gGAAgG;IAChG,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,0FAA0F;IAC1F,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1F,6FAA6F;IAC7F,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,wBAAwB,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,+FAA+F;IAC/F,GAAG,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;IAC7E,mGAAmG;IACnG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,yFAAyF;AACzF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,oFAAoF;IACpF,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;IACtD,iDAAiD;IACjD,UAAU,CACR,QAAQ,EAAE,6BAA6B,EACvC,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,0EAA0E;IAC1E,IAAI,CAAC,QAAQ,EAAE,6BAA6B,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,qFAAqF;IACrF,WAAW,CACT,QAAQ,EAAE,6BAA6B,EACvC,UAAU,EAAE,wBAAwB,GACnC,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA2B,SAAQ,yBAAyB;IAC3E,OAAO,CACL,QAAQ,EAAE,6BAA6B,EACvC,UAAU,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,cAAc,CACZ,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,SAAS,8BAA8B,EAAE,CAAC,CAAC;IACtD,qBAAqB,CAAC,QAAQ,EAAE,6BAA6B,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9F;AAuBD;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,0BAA0B,CAuKtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/tracking/attribution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../../src/tracking/attribution.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1D,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACtC,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,EAAE,eAAe,CAAC;CAC/B;AA2DD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAWjE;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,WAAW,GAAE,SAAS,YAAY,EAAO,GACxC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAY3C;AAmCD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,WAAgB,EAChB,UAAmC,EACnC,KAAgC,EAChC,GAAgB,GACjB,EAAE,uBAAuB,GAAG,mBAAmB,CAwC/C"}
|
|
@@ -7,7 +7,7 @@ import type { Draft } from './client.js';
|
|
|
7
7
|
import { deliverTrackingBatch } from './delivery.js';
|
|
8
8
|
import type { TrackingHost } from './host.js';
|
|
9
9
|
import type { TrackingOutbox, TrackingQueuedEvent } from './outbox.js';
|
|
10
|
-
import type { TrackEventsRequest, TrackEventsResponse, TrackingEventEnvelope, VisitBootstrapResponse, VisitEntryContext } from './schemas.js';
|
|
10
|
+
import type { TrackEventsRequest, TrackEventsResponse, TrackingEventEnvelope, UtmData, VisitBootstrapResponse, VisitEntryContext } from './schemas.js';
|
|
11
11
|
import { createSequenceReserve } from './sequence-reserve.js';
|
|
12
12
|
/** What one tab knows about its visit, shared by bootstrap, delivery and the unload path. */
|
|
13
13
|
export interface VisitState {
|
|
@@ -45,6 +45,8 @@ export declare function createOutboxFlusher<TEvent extends TrackingQueuedEvent>(
|
|
|
45
45
|
}): () => Promise<void>;
|
|
46
46
|
/** The shared sequence source is the outbox; without one, the per-tab fallback is the design. */
|
|
47
47
|
export declare function createVisitSequences(outbox: Pick<TrackingOutbox, 'reserveSequences'> | undefined, visit: VisitState, options: Parameters<typeof createSequenceReserve>[1], fail: (what: string, error: unknown) => void): import("./sequence-reserve.js").SequenceReserve;
|
|
48
|
+
/** Campaign tags arrive in a URL anyone can write, secrets included. */
|
|
49
|
+
export declare function redactedUtm(utm: UtmData): UtmData;
|
|
48
50
|
export declare function pageAttribution(host: TrackingHost, storage: NonNullable<TrackingHost['storage']>, referrerMap: readonly ReferrerRule[] | undefined, search: string, pathname: string): ResolvedAttribution;
|
|
49
51
|
/** A page view; the referrer belongs to the first view of the visit only. */
|
|
50
52
|
export declare function pageViewDraft<TType extends string>(host: TrackingHost, type: TType, pathname: string, previous: string | null): Draft<TType>;
|