@read-frog/api-contract 0.21.1 → 0.22.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/dist/index.d.ts +632 -110
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +266 -78
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/contracts/ebook.ts +3 -1
- package/src/contracts/email-preferences.ts +55 -0
- package/src/contracts/feature-access.ts +17 -0
- package/src/contracts/notebase.ts +14 -0
- package/src/contracts/speech.ts +1 -1
- package/src/contracts/user.ts +22 -0
- package/src/index.ts +7 -3
- package/src/public-errors.ts +6 -11
- package/src/schemas/app-locale.ts +9 -0
- package/src/schemas/billing.ts +47 -35
- package/src/schemas/ebook.ts +16 -8
- package/src/schemas/email-preferences.ts +105 -0
- package/src/schemas/feature-access.ts +18 -0
- package/src/schemas/hosted-ai.ts +46 -3
- package/src/schemas/notebase.ts +16 -0
- package/src/schemas/speech.ts +11 -2
- package/src/schemas/srs.ts +4 -4
- package/src/schemas/stats.ts +2 -2
- package/src/schemas/timezone.ts +21 -0
- package/src/schemas/user.ts +33 -0
- package/src/contracts/beta-access.ts +0 -14
- package/src/schemas/beta-access.ts +0 -18
package/dist/index.js
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
1
|
import { eventIterator, oc } from "@orpc/contract";
|
|
2
|
-
import { BETA_FEATURE_KEYS, EBOOK_ALLOWED_COVER_CONTENT_TYPES, NOTEBASE_COLUMN_MAX_WIDTH, NOTEBASE_COLUMN_MIN_WIDTH, SRS_REVIEW_DURATION_MS_MAX, activeScheduleStatusSchema, cardIdentityShape, cardMemoryStateShape, cardStateSchema, cardStateSchema as cardStateSchema$1, cardTemplateConfigSchema, cardTemplateCreatedBySchema, fsrsMemoryStateSchema, fsrsReviewLogSnapshotSchema, getVideoIdFromUrl, langCodeISO6393Schema, notebaseColumnConfigSchema, reviewRatingSchema, scheduleStatusSchema, scheduleStatusSchema as scheduleStatusSchema$1, schedulingParamsSchema, schedulingParamsShape, srsModelVersionSchema, srsStepSchema, srsWeightsSchema, transcriptSegmentSchema } from "@read-frog/definitions";
|
|
3
2
|
import { z } from "zod";
|
|
4
|
-
|
|
5
|
-
const BetaFeatureKeySchema = z.enum(BETA_FEATURE_KEYS);
|
|
6
|
-
const BetaAccessStatusInputSchema = z.object({ featureKey: BetaFeatureKeySchema }).strict();
|
|
7
|
-
const BetaAccessStatusOutputSchema = z.object({
|
|
8
|
-
featureKey: BetaFeatureKeySchema,
|
|
9
|
-
allowed: z.boolean()
|
|
10
|
-
});
|
|
11
|
-
//#endregion
|
|
12
|
-
//#region src/contracts/beta-access.ts
|
|
13
|
-
const betaAccessContract = { status: oc.route({
|
|
14
|
-
method: "GET",
|
|
15
|
-
path: "/beta-access/status",
|
|
16
|
-
summary: "Get beta access status for a feature",
|
|
17
|
-
tags: ["Beta Access"]
|
|
18
|
-
}).input(BetaAccessStatusInputSchema).output(BetaAccessStatusOutputSchema) };
|
|
19
|
-
//#endregion
|
|
3
|
+
import { EBOOK_ALLOWED_COVER_CONTENT_TYPES, GATED_FEATURE_KEYS, NOTEBASE_COLUMN_MAX_WIDTH, NOTEBASE_COLUMN_MIN_WIDTH, SRS_REVIEW_DURATION_MS_MAX, activeScheduleStatusSchema, canonicalTimeZone, cardIdentityShape, cardMemoryStateShape, cardStateSchema, cardStateSchema as cardStateSchema$1, cardTemplateConfigSchema, cardTemplateCreatedBySchema, fsrsMemoryStateSchema, fsrsReviewLogSnapshotSchema, getVideoIdFromUrl, langCodeISO6393Schema, notebaseColumnConfigSchema, reviewRatingSchema, scheduleStatusSchema, scheduleStatusSchema as scheduleStatusSchema$1, schedulingParamsSchema, schedulingParamsShape, srsModelVersionSchema, srsStepSchema, srsWeightsSchema, transcriptSegmentSchema } from "@read-frog/definitions";
|
|
20
4
|
//#region src/schemas/hosted-ai.ts
|
|
21
5
|
const HostedAiOutputFieldTypeSchema = z.enum(["string", "number"]);
|
|
22
6
|
const HostedAiOutputFieldSchema = z.strictObject({
|
|
@@ -184,13 +168,16 @@ const HostedAiRateLimitErrorDataSchema = z.object({
|
|
|
184
168
|
quotaScope: HostedAiQuotaScopeSchema
|
|
185
169
|
});
|
|
186
170
|
/**
|
|
171
|
+
* A recurring pool: the plan's credit for a day or a week, which refills at
|
|
172
|
+
* `resetAt`.
|
|
173
|
+
*
|
|
187
174
|
* Deliberately free of dollar amounts and of the versioned policy id. Clients
|
|
188
175
|
* render a consumption bar and a reset time, so a percentage and a period kind
|
|
189
176
|
* are all they need, and neither leaks what a call costs us. `usedPercent`
|
|
190
177
|
* counts settled spend only: including in-flight reservations would make the
|
|
191
178
|
* bar jump forward and then back as each stream settles.
|
|
192
179
|
*/
|
|
193
|
-
const
|
|
180
|
+
const HostedAiRecurringCreditStatusSchema = z.strictObject({
|
|
194
181
|
periodKind: HostedAiCreditPeriodKindSchema,
|
|
195
182
|
usedPercent: z.number().min(0).max(100),
|
|
196
183
|
resetAt: z.iso.datetime().nullable(),
|
|
@@ -201,6 +188,25 @@ const HostedAiCreditStatusSchema = z.strictObject({
|
|
|
201
188
|
*/
|
|
202
189
|
features: z.array(HostedAiFeatureSchema).min(1)
|
|
203
190
|
});
|
|
191
|
+
/**
|
|
192
|
+
* A one-time pool, such as credit from a campaign or from support. It never
|
|
193
|
+
* refills: once spent or past `expiresAt` it is gone, so a client shows the
|
|
194
|
+
* expiry, not a reset. It is drawn on only after the plan's own pool for a
|
|
195
|
+
* feature is spent, or for a feature the plan does not fund. Listed until it
|
|
196
|
+
* expires, even when spent. Same fields as a recurring pool otherwise.
|
|
197
|
+
*/
|
|
198
|
+
const HostedAiOneTimeCreditStatusSchema = z.strictObject({
|
|
199
|
+
periodKind: z.literal("once"),
|
|
200
|
+
usedPercent: z.number().min(0).max(100),
|
|
201
|
+
expiresAt: z.iso.datetime(),
|
|
202
|
+
features: z.array(HostedAiFeatureSchema).min(1)
|
|
203
|
+
});
|
|
204
|
+
/**
|
|
205
|
+
* One pool that can pay for Built-in AI, told apart by `periodKind`: a
|
|
206
|
+
* recurring `daily` or `weekly` pool refills at `resetAt`, a one-time (`once`)
|
|
207
|
+
* pool ends at `expiresAt`. Narrow on `periodKind` before reading either.
|
|
208
|
+
*/
|
|
209
|
+
const HostedAiCreditPoolStatusSchema = z.discriminatedUnion("periodKind", [HostedAiRecurringCreditStatusSchema, HostedAiOneTimeCreditStatusSchema]);
|
|
204
210
|
const HostedAiTierStatusSchema = z.strictObject({
|
|
205
211
|
accessAllowed: z.boolean(),
|
|
206
212
|
available: z.boolean(),
|
|
@@ -219,7 +225,21 @@ const HostedAiFeatureStatusSchema = z.strictObject({
|
|
|
219
225
|
advance: HostedAiTierStatusSchema
|
|
220
226
|
});
|
|
221
227
|
const HostedAiStatusOutputSchema = z.strictObject({
|
|
222
|
-
|
|
228
|
+
/**
|
|
229
|
+
* @deprecated Read `pools`. This lists the recurring pools only, never a
|
|
230
|
+
* one-time one: extensions released before mengxi-ream/read-frog#2395 look
|
|
231
|
+
* up a label for every entry's `periodKind`, and one they do not know
|
|
232
|
+
* crashes their usage page. They also throw if the field is missing.
|
|
233
|
+
*
|
|
234
|
+
* TODO(2026-11-07): remove once those extensions have drained (#710).
|
|
235
|
+
*/
|
|
236
|
+
credits: z.array(HostedAiRecurringCreditStatusSchema),
|
|
237
|
+
/**
|
|
238
|
+
* Everything that can pay for a feature, in the order the server draws on it:
|
|
239
|
+
* the plan's recurring pools first, then one-time pools by soonest expiry. A
|
|
240
|
+
* feature can appear in several entries.
|
|
241
|
+
*/
|
|
242
|
+
pools: z.array(HostedAiCreditPoolStatusSchema),
|
|
223
243
|
features: z.strictObject({
|
|
224
244
|
pageTranslation: HostedAiFeatureStatusSchema,
|
|
225
245
|
customAction: HostedAiFeatureStatusSchema,
|
|
@@ -297,18 +317,10 @@ const PUBLIC_APP_ERROR_DEFS = {
|
|
|
297
317
|
message: "Built-in AI credit exhausted",
|
|
298
318
|
status: 429
|
|
299
319
|
},
|
|
300
|
-
NOTEBASE_BETA_RESTRICTED: {
|
|
301
|
-
message: "Notebase is currently in beta for selected accounts",
|
|
302
|
-
status: 403
|
|
303
|
-
},
|
|
304
320
|
NOTEBASE_NOT_FOUND: {
|
|
305
321
|
message: "Notebase not found",
|
|
306
322
|
status: 404
|
|
307
323
|
},
|
|
308
|
-
VIDEO_TRANSCRIPTION_BETA_RESTRICTED: {
|
|
309
|
-
message: "Video transcription is currently in beta for selected accounts",
|
|
310
|
-
status: 403
|
|
311
|
-
},
|
|
312
324
|
VIDEO_TRANSCRIPTION_SUBSCRIPTION_REQUIRED: {
|
|
313
325
|
message: "AI subtitles require a Pro or Ultra subscription",
|
|
314
326
|
status: 403
|
|
@@ -461,6 +473,10 @@ const PUBLIC_APP_ERROR_DEFS = {
|
|
|
461
473
|
EBOOK_UPLOAD_NOT_COMPLETED: {
|
|
462
474
|
message: "Ebook upload has not been completed",
|
|
463
475
|
status: 409
|
|
476
|
+
},
|
|
477
|
+
EMAIL_LINK_INVALID: {
|
|
478
|
+
message: "This email link is not valid",
|
|
479
|
+
status: 400
|
|
464
480
|
}
|
|
465
481
|
};
|
|
466
482
|
function isPublicAppErrorCode(code) {
|
|
@@ -484,6 +500,24 @@ function pickPublicErrorMap(...codes) {
|
|
|
484
500
|
}));
|
|
485
501
|
}
|
|
486
502
|
//#endregion
|
|
503
|
+
//#region src/schemas/app-locale.ts
|
|
504
|
+
/**
|
|
505
|
+
* The languages the website is in (`project.inlang/settings.json`; a test in
|
|
506
|
+
* apps/www keeps the two in step). Used wherever the server writes for a
|
|
507
|
+
* person: Stripe pages, emails, and the account's `locale`.
|
|
508
|
+
*/
|
|
509
|
+
const appLocaleSchema = z.enum([
|
|
510
|
+
"en",
|
|
511
|
+
"es",
|
|
512
|
+
"ja",
|
|
513
|
+
"ko",
|
|
514
|
+
"ru",
|
|
515
|
+
"tr",
|
|
516
|
+
"vi",
|
|
517
|
+
"zh",
|
|
518
|
+
"zh-TW"
|
|
519
|
+
]);
|
|
520
|
+
//#endregion
|
|
487
521
|
//#region src/schemas/billing.ts
|
|
488
522
|
const billingIntervalSchema = z.enum(["month", "year"]);
|
|
489
523
|
const billingSubscriptionStatusSchema = z.enum([
|
|
@@ -502,52 +536,55 @@ const billingPlanSchema = z.enum([
|
|
|
502
536
|
"ultra"
|
|
503
537
|
]);
|
|
504
538
|
/**
|
|
505
|
-
*
|
|
506
|
-
*
|
|
507
|
-
* An explicit set rather than a minimum tier: there is no rank table to keep in
|
|
508
|
-
* step with the plan enum, and any combination is expressible by writing it
|
|
509
|
-
* down. The cost is that nothing derives from it automatically -- a feature's
|
|
510
|
-
* pricing-card placement is a companion edit, noted at each `*_ALLOWED_PLANS`.
|
|
511
|
-
*/
|
|
512
|
-
function isPlanAllowed(plan, allowed) {
|
|
513
|
-
return allowed.includes(plan);
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* Plans that may use the remote MCP server.
|
|
539
|
+
* How many MCP tool calls each plan may make in a day (24 hours from the first
|
|
540
|
+
* one); `null` is no limit. Each `tools/call` counts once, whatever the tool.
|
|
517
541
|
*
|
|
518
|
-
* Read by the server
|
|
519
|
-
* promise
|
|
520
|
-
* the UI can render the plan names from this constant instead of hardcoding
|
|
521
|
-
* them.
|
|
542
|
+
* Read by the MCP server's gate AND by the website's copy, so the pages cannot
|
|
543
|
+
* promise calls the server refuses.
|
|
522
544
|
*
|
|
523
|
-
* Companion edit when this changes: the
|
|
524
|
-
* `apps/www/
|
|
525
|
-
* (higher cards inherit it through their "everything in <lower plan>" line).
|
|
545
|
+
* Companion edit when this changes: the MCP docs under
|
|
546
|
+
* `apps/www/content/docs/mcp/` and `account-and-plans`, which state the numbers.
|
|
526
547
|
*/
|
|
527
|
-
const
|
|
548
|
+
const MCP_DAILY_CALL_LIMITS = {
|
|
549
|
+
free: 10,
|
|
550
|
+
pro: 50,
|
|
551
|
+
ultra: null
|
|
552
|
+
};
|
|
528
553
|
const billingCheckoutPlanSchema = z.enum(["pro", "ultra"]);
|
|
529
554
|
const billingCurrencySchema = z.enum([
|
|
530
555
|
"usd",
|
|
531
556
|
"cad",
|
|
532
557
|
"cny"
|
|
533
558
|
]);
|
|
534
|
-
const billingLocaleSchema =
|
|
535
|
-
"en",
|
|
536
|
-
"es",
|
|
537
|
-
"ja",
|
|
538
|
-
"ko",
|
|
539
|
-
"ru",
|
|
540
|
-
"tr",
|
|
541
|
-
"vi",
|
|
542
|
-
"zh",
|
|
543
|
-
"zh-TW"
|
|
544
|
-
]);
|
|
559
|
+
const billingLocaleSchema = appLocaleSchema;
|
|
545
560
|
const billingAccessSourceSchema = z.enum(["subscription", "pass"]);
|
|
546
561
|
const billingScheduledChangeSchema = z.object({
|
|
547
562
|
plan: billingCheckoutPlanSchema,
|
|
548
563
|
interval: billingIntervalSchema,
|
|
549
564
|
effectiveAt: z.coerce.date()
|
|
550
565
|
}).strict();
|
|
566
|
+
/**
|
|
567
|
+
* The zone a payment deadline is shown in, as a date with no time. UTC−12 is
|
|
568
|
+
* the last zone to finish a day, and `dueBy` is the end of a day there, so the
|
|
569
|
+
* date it shows stays open in every customer's zone until their own midnight.
|
|
570
|
+
*/
|
|
571
|
+
const BILLING_PAYMENT_DUE_TIME_ZONE = "Etc/GMT+12";
|
|
572
|
+
/**
|
|
573
|
+
* A renewal whose payment failed. The plan stays until `dueBy`; paying the
|
|
574
|
+
* invoice before then (or later, until the subscription is canceled) restores
|
|
575
|
+
* the subscription as if the payment had gone through.
|
|
576
|
+
*/
|
|
577
|
+
const billingPaymentDueSchema = z.object({
|
|
578
|
+
/** The last instant of the plan; show it in BILLING_PAYMENT_DUE_TIME_ZONE. */
|
|
579
|
+
dueBy: z.coerce.date(),
|
|
580
|
+
/**
|
|
581
|
+
* The plan the payment keeps. Not `BillingStatus.plan`: past `dueBy` that
|
|
582
|
+
* already reads "free" while the invoice is still payable.
|
|
583
|
+
*/
|
|
584
|
+
plan: billingCheckoutPlanSchema,
|
|
585
|
+
/** The Stripe-hosted page that pays the invoice; null if Stripe gave none. */
|
|
586
|
+
url: z.url().nullable()
|
|
587
|
+
}).strict();
|
|
551
588
|
const billingStatusSchema = z.object({
|
|
552
589
|
plan: billingPlanSchema,
|
|
553
590
|
status: billingSubscriptionStatusSchema.nullable(),
|
|
@@ -562,6 +599,7 @@ const billingStatusSchema = z.object({
|
|
|
562
599
|
cancelAt: z.coerce.date().nullable(),
|
|
563
600
|
accessSource: billingAccessSourceSchema.nullable(),
|
|
564
601
|
scheduledChange: billingScheduledChangeSchema.nullable(),
|
|
602
|
+
paymentDue: billingPaymentDueSchema.nullable(),
|
|
565
603
|
unlimitedNotebaseNotes: z.boolean(),
|
|
566
604
|
notebaseNoteLimit: z.number().int().positive(),
|
|
567
605
|
notebaseNoteCount: z.number().int().min(0)
|
|
@@ -569,10 +607,10 @@ const billingStatusSchema = z.object({
|
|
|
569
607
|
const billingCreateCheckoutSessionInputSchema = z.object({
|
|
570
608
|
currency: billingCurrencySchema,
|
|
571
609
|
interval: billingIntervalSchema,
|
|
572
|
-
locale:
|
|
610
|
+
locale: appLocaleSchema,
|
|
573
611
|
plan: billingCheckoutPlanSchema.default("pro")
|
|
574
612
|
}).strict();
|
|
575
|
-
const billingCreateCustomerPortalSessionInputSchema = z.object({ locale:
|
|
613
|
+
const billingCreateCustomerPortalSessionInputSchema = z.object({ locale: appLocaleSchema }).strict();
|
|
576
614
|
const billingSessionUrlOutputSchema = z.object({ url: z.url() }).strict();
|
|
577
615
|
const billingCancelScheduledChangeOutputSchema = z.object({ success: z.literal(true) }).strict();
|
|
578
616
|
//#endregion
|
|
@@ -797,20 +835,24 @@ const ebookRequestUploadInputSchema = z.object({
|
|
|
797
835
|
title: z.string().min(1).max(500),
|
|
798
836
|
author: z.string().max(500).optional(),
|
|
799
837
|
language: z.string().max(35).optional(),
|
|
800
|
-
|
|
838
|
+
fileByteSize: z.number().int().min(1),
|
|
839
|
+
cover: z.object({
|
|
840
|
+
contentType: ebookCoverContentTypeSchema,
|
|
841
|
+
byteSize: z.number().int().min(1)
|
|
842
|
+
}).strict().optional()
|
|
801
843
|
}).strict();
|
|
802
844
|
/**
|
|
803
|
-
*
|
|
804
|
-
*
|
|
845
|
+
* A signed PUT: send the file to `url` with exactly `headers`. The signature
|
|
846
|
+
* covers the file's type and exact size, so storage refuses any other file.
|
|
805
847
|
*/
|
|
806
|
-
const
|
|
848
|
+
const ebookPresignedUploadSchema = z.object({
|
|
807
849
|
url: z.url(),
|
|
808
|
-
|
|
850
|
+
headers: z.record(z.string(), z.string())
|
|
809
851
|
}).strict();
|
|
810
852
|
const ebookRequestUploadOutputSchema = z.object({
|
|
811
853
|
ebookId: z.uuid(),
|
|
812
|
-
upload:
|
|
813
|
-
coverUpload:
|
|
854
|
+
upload: ebookPresignedUploadSchema,
|
|
855
|
+
coverUpload: ebookPresignedUploadSchema.nullable(),
|
|
814
856
|
expiresAt: z.coerce.date()
|
|
815
857
|
}).strict();
|
|
816
858
|
const ebookFinalizeUploadInputSchema = z.object({ ebookId: z.uuid() }).strict();
|
|
@@ -850,7 +892,7 @@ const ebookContract = {
|
|
|
850
892
|
summary: "Get an ebook with reading progress",
|
|
851
893
|
tags: ["Ebooks"]
|
|
852
894
|
}).input(ebookGetInputSchema).output(ebookGetOutputSchema),
|
|
853
|
-
requestUpload: ebookProcedure.errors(pickPublicErrorMap("EBOOK_BETA_RESTRICTED", "EBOOK_LIMIT_EXCEEDED")).route({
|
|
895
|
+
requestUpload: ebookProcedure.errors(pickPublicErrorMap("EBOOK_BETA_RESTRICTED", "EBOOK_LIMIT_EXCEEDED", "EBOOK_FILE_TOO_LARGE")).route({
|
|
854
896
|
method: "POST",
|
|
855
897
|
path: "/ebooks/uploads",
|
|
856
898
|
summary: "Request presigned upload URLs for a new ebook",
|
|
@@ -888,6 +930,95 @@ const ebookContract = {
|
|
|
888
930
|
}).input(ebookDeleteInputSchema).output(ebookDeleteOutputSchema)
|
|
889
931
|
};
|
|
890
932
|
//#endregion
|
|
933
|
+
//#region src/schemas/email-preferences.ts
|
|
934
|
+
/** A category's key, such as `promotions`. */
|
|
935
|
+
const emailCategoryKeySchema = z.string().max(64).regex(/^[a-z][a-z0-9_]*$/);
|
|
936
|
+
/** The token in an email's unsubscribe link. */
|
|
937
|
+
const emailLinkTokenSchema = z.string().min(1).max(1024);
|
|
938
|
+
const emailCategoryStateSchema = z.object({
|
|
939
|
+
key: z.string(),
|
|
940
|
+
name: z.string(),
|
|
941
|
+
description: z.string().nullable(),
|
|
942
|
+
commercial: z.boolean(),
|
|
943
|
+
required: z.boolean(),
|
|
944
|
+
subscribed: z.boolean()
|
|
945
|
+
}).strict();
|
|
946
|
+
const emailPreferencesStateSchema = z.object({
|
|
947
|
+
categories: z.array(emailCategoryStateSchema),
|
|
948
|
+
unsubscribedAll: z.boolean()
|
|
949
|
+
}).strict();
|
|
950
|
+
/**
|
|
951
|
+
* What the page a link opens shows on top of the state: whose preferences they
|
|
952
|
+
* are, without the full address, and the category the link was for, if any.
|
|
953
|
+
*/
|
|
954
|
+
const emailPreferencesByTokenStateSchema = z.object({
|
|
955
|
+
...emailPreferencesStateSchema.shape,
|
|
956
|
+
maskedEmail: z.string(),
|
|
957
|
+
highlightCategory: z.string().nullable()
|
|
958
|
+
}).strict();
|
|
959
|
+
const emailPreferencesChangesShape = {
|
|
960
|
+
categories: z.record(emailCategoryKeySchema, z.boolean()).optional(),
|
|
961
|
+
unsubscribedAll: z.boolean().optional()
|
|
962
|
+
};
|
|
963
|
+
const emailPreferencesGetInputSchema = z.object({ locale: appLocaleSchema }).strict();
|
|
964
|
+
const emailPreferencesUpdateInputSchema = z.object({
|
|
965
|
+
locale: appLocaleSchema,
|
|
966
|
+
...emailPreferencesChangesShape
|
|
967
|
+
}).strict();
|
|
968
|
+
const emailPreferencesGetByTokenInputSchema = z.object({
|
|
969
|
+
token: emailLinkTokenSchema,
|
|
970
|
+
locale: appLocaleSchema
|
|
971
|
+
}).strict();
|
|
972
|
+
const emailPreferencesUpdateByTokenInputSchema = z.object({
|
|
973
|
+
token: emailLinkTokenSchema,
|
|
974
|
+
locale: appLocaleSchema,
|
|
975
|
+
...emailPreferencesChangesShape
|
|
976
|
+
}).strict();
|
|
977
|
+
//#endregion
|
|
978
|
+
//#region src/contracts/email-preferences.ts
|
|
979
|
+
const emailPreferencesContract = {
|
|
980
|
+
get: oc.route({
|
|
981
|
+
method: "GET",
|
|
982
|
+
path: "/users/me/email-preferences",
|
|
983
|
+
summary: "Get which emails the authenticated user receives",
|
|
984
|
+
tags: ["Email preferences"]
|
|
985
|
+
}).input(emailPreferencesGetInputSchema).output(emailPreferencesStateSchema),
|
|
986
|
+
update: oc.route({
|
|
987
|
+
method: "PATCH",
|
|
988
|
+
path: "/users/me/email-preferences",
|
|
989
|
+
summary: "Change which emails the authenticated user receives",
|
|
990
|
+
tags: ["Email preferences"]
|
|
991
|
+
}).input(emailPreferencesUpdateInputSchema).output(emailPreferencesStateSchema),
|
|
992
|
+
getByToken: oc.route({
|
|
993
|
+
method: "POST",
|
|
994
|
+
path: "/email-preferences/by-token",
|
|
995
|
+
summary: "Get the email preferences an email link is for",
|
|
996
|
+
tags: ["Email preferences"]
|
|
997
|
+
}).errors(pickPublicErrorMap("EMAIL_LINK_INVALID")).input(emailPreferencesGetByTokenInputSchema).output(emailPreferencesByTokenStateSchema),
|
|
998
|
+
updateByToken: oc.route({
|
|
999
|
+
method: "POST",
|
|
1000
|
+
path: "/email-preferences/by-token/update",
|
|
1001
|
+
summary: "Change the email preferences an email link is for",
|
|
1002
|
+
tags: ["Email preferences"]
|
|
1003
|
+
}).errors(pickPublicErrorMap("EMAIL_LINK_INVALID")).input(emailPreferencesUpdateByTokenInputSchema).output(emailPreferencesByTokenStateSchema)
|
|
1004
|
+
};
|
|
1005
|
+
//#endregion
|
|
1006
|
+
//#region src/schemas/feature-access.ts
|
|
1007
|
+
const GatedFeatureKeySchema = z.enum(GATED_FEATURE_KEYS);
|
|
1008
|
+
const FeatureAccessStatusInputSchema = z.object({ featureKey: GatedFeatureKeySchema }).strict();
|
|
1009
|
+
const FeatureAccessStatusOutputSchema = z.object({
|
|
1010
|
+
featureKey: GatedFeatureKeySchema,
|
|
1011
|
+
allowed: z.boolean()
|
|
1012
|
+
});
|
|
1013
|
+
//#endregion
|
|
1014
|
+
//#region src/contracts/feature-access.ts
|
|
1015
|
+
const featureAccessContract = { status: oc.route({
|
|
1016
|
+
method: "GET",
|
|
1017
|
+
path: "/feature-access/status",
|
|
1018
|
+
summary: "Get whether the caller can use a gated feature",
|
|
1019
|
+
tags: ["Feature Access"]
|
|
1020
|
+
}).input(FeatureAccessStatusInputSchema).output(FeatureAccessStatusOutputSchema) };
|
|
1021
|
+
//#endregion
|
|
891
1022
|
//#region src/contracts/hosted-ai.ts
|
|
892
1023
|
const hostedAiStreamErrors = pickPublicErrorMap("HOSTED_AI_TIER_RESTRICTED", "HOSTED_AI_QUOTA_EXHAUSTED");
|
|
893
1024
|
const hostedAiContract = {
|
|
@@ -1265,6 +1396,7 @@ const notebaseSchema = z.object({
|
|
|
1265
1396
|
srsEnableFuzz: schedulingParamsShape.enableFuzz,
|
|
1266
1397
|
srsWeights: srsWeightsSchema.nullable(),
|
|
1267
1398
|
srsModelVersion: srsModelVersionSchema,
|
|
1399
|
+
srsSleepingAt: z.date().nullable(),
|
|
1268
1400
|
createdAt: z.date(),
|
|
1269
1401
|
updatedAt: z.date()
|
|
1270
1402
|
});
|
|
@@ -1325,6 +1457,11 @@ const NotebaseUpdateOutputSchema = z.object({
|
|
|
1325
1457
|
notebase: notebaseSchema,
|
|
1326
1458
|
txid: z.number()
|
|
1327
1459
|
});
|
|
1460
|
+
const NotebaseSetSleepInputSchema = z.object({
|
|
1461
|
+
id: z.uuid(),
|
|
1462
|
+
enabled: z.boolean()
|
|
1463
|
+
}).strict();
|
|
1464
|
+
const NotebaseSetSleepOutputSchema = z.object({ txid: z.number().nullable() });
|
|
1328
1465
|
const NotebaseDeleteInputSchema = z.object({ id: z.uuid() });
|
|
1329
1466
|
const NotebaseDeleteOutputSchema = deletionResultSchema;
|
|
1330
1467
|
const NotebaseGetInputSchema = z.object({ id: z.uuid() });
|
|
@@ -1393,6 +1530,13 @@ const notebaseContract = {
|
|
|
1393
1530
|
description: "Update the supplied name or public study settings of an owned notebase, preserving omitted properties.",
|
|
1394
1531
|
tags: ["Notebases"]
|
|
1395
1532
|
}).errors(pickPublicErrorMap("NOTEBASE_NOT_FOUND")).input(NotebaseUpdateInputSchema).output(NotebaseUpdateOutputSchema),
|
|
1533
|
+
setSleep: defineAgentProcedure({
|
|
1534
|
+
method: "POST",
|
|
1535
|
+
path: "/notebases/{id}/sleep",
|
|
1536
|
+
summary: "Set notebase sleep",
|
|
1537
|
+
description: "Put an owned notebase to sleep (enabled=true) or wake it (enabled=false). A sleeping notebase is left out of the combined review; its cards, memory states and review history are unchanged and it can still be reviewed directly. A request matching the current state succeeds without a change.",
|
|
1538
|
+
tags: ["Notebases"]
|
|
1539
|
+
}).errors(pickPublicErrorMap("NOTEBASE_NOT_FOUND")).input(NotebaseSetSleepInputSchema).output(NotebaseSetSleepOutputSchema),
|
|
1396
1540
|
delete: defineAgentProcedure({
|
|
1397
1541
|
method: "DELETE",
|
|
1398
1542
|
path: "/notebases/{id}",
|
|
@@ -1565,8 +1709,14 @@ const speechSynthesizeInputSchema = z.object({
|
|
|
1565
1709
|
language: langCodeISO6393Schema.optional(),
|
|
1566
1710
|
voice: speechVoiceNameSchema.optional()
|
|
1567
1711
|
}).strict();
|
|
1568
|
-
/**
|
|
1569
|
-
|
|
1712
|
+
/**
|
|
1713
|
+
* Where to download the audio, an MP3: a link to fetch at once, which stops
|
|
1714
|
+
* working at `expiresAt`.
|
|
1715
|
+
*/
|
|
1716
|
+
const speechSynthesizeOutputSchema = z.object({
|
|
1717
|
+
url: z.url(),
|
|
1718
|
+
expiresAt: z.coerce.date()
|
|
1719
|
+
}).strict();
|
|
1570
1720
|
//#endregion
|
|
1571
1721
|
//#region src/contracts/speech.ts
|
|
1572
1722
|
const speechContract = {
|
|
@@ -1591,7 +1741,7 @@ const speechContract = {
|
|
|
1591
1741
|
synthesize: oc.route({
|
|
1592
1742
|
method: "POST",
|
|
1593
1743
|
path: "/speech/synthesize",
|
|
1594
|
-
summary: "Read a text aloud,
|
|
1744
|
+
summary: "Read a text aloud, and link to its MP3 audio",
|
|
1595
1745
|
tags: ["Speech"]
|
|
1596
1746
|
}).input(speechSynthesizeInputSchema).output(speechSynthesizeOutputSchema)
|
|
1597
1747
|
};
|
|
@@ -1621,6 +1771,24 @@ const timezoneSchema = z.string().trim().min(1).refine((timezone) => {
|
|
|
1621
1771
|
return false;
|
|
1622
1772
|
}
|
|
1623
1773
|
}, "Invalid timezone");
|
|
1774
|
+
/**
|
|
1775
|
+
* The zone a call reckons days in, under the name an account's zone is stored
|
|
1776
|
+
* under (`canonicalTimeZone`): "Asia/Calcutta" arrives as "Asia/Kolkata" and
|
|
1777
|
+
* "CST" as "America/Chicago", names that Temporal and a Debian Postgres both
|
|
1778
|
+
* read. A fixed offset ("+08:00") is refused, as Postgres reads it with the
|
|
1779
|
+
* opposite sign and would put the call's days on the wrong side of UTC.
|
|
1780
|
+
*/
|
|
1781
|
+
const canonicalTimezoneSchema = timezoneSchema.transform((timezone, ctx) => {
|
|
1782
|
+
const name = canonicalTimeZone(timezone);
|
|
1783
|
+
if (!name) {
|
|
1784
|
+
ctx.addIssue({
|
|
1785
|
+
code: "custom",
|
|
1786
|
+
message: "Use an IANA time zone identifier instead of a fixed UTC offset. See https://www.iana.org/time-zones"
|
|
1787
|
+
});
|
|
1788
|
+
return z.NEVER;
|
|
1789
|
+
}
|
|
1790
|
+
return name;
|
|
1791
|
+
});
|
|
1624
1792
|
//#endregion
|
|
1625
1793
|
//#region src/schemas/srs.ts
|
|
1626
1794
|
const stepSchema = srsStepSchema;
|
|
@@ -1635,7 +1803,7 @@ const srsReviewInputSchema = z.object({
|
|
|
1635
1803
|
id: z.uuid().optional(),
|
|
1636
1804
|
rating: reviewRatingSchema,
|
|
1637
1805
|
durationMs: z.number().int().min(0).max(SRS_REVIEW_DURATION_MS_MAX),
|
|
1638
|
-
timezone:
|
|
1806
|
+
timezone: canonicalTimezoneSchema
|
|
1639
1807
|
}).strict();
|
|
1640
1808
|
const srsRollbackReviewInputSchema = z.object({
|
|
1641
1809
|
expectedReviewId: z.uuid().optional(),
|
|
@@ -1644,10 +1812,10 @@ const srsRollbackReviewInputSchema = z.object({
|
|
|
1644
1812
|
const srsScheduleStatusStatsSchema = z.record(activeScheduleStatusSchema, z.number().int().min(0));
|
|
1645
1813
|
const srsScheduleStatusStatsInputSchema = z.object({
|
|
1646
1814
|
notebaseIds: z.array(z.uuid()).optional(),
|
|
1647
|
-
timezone:
|
|
1815
|
+
timezone: canonicalTimezoneSchema
|
|
1648
1816
|
}).strict();
|
|
1649
1817
|
const srsScheduleStatusStatsOutputSchema = z.record(z.uuid(), srsScheduleStatusStatsSchema);
|
|
1650
|
-
const srsRecentNotebaseScheduleStatusStatsInputSchema = z.object({ timezone:
|
|
1818
|
+
const srsRecentNotebaseScheduleStatusStatsInputSchema = z.object({ timezone: canonicalTimezoneSchema }).strict();
|
|
1651
1819
|
/** Null when the user has no notebase yet. */
|
|
1652
1820
|
const srsRecentNotebaseScheduleStatusStatsOutputSchema = z.object({
|
|
1653
1821
|
notebase: notebaseSummarySchema,
|
|
@@ -1848,7 +2016,7 @@ const statsInputSchema = z.object({
|
|
|
1848
2016
|
notebaseIds: statsNotebaseIdsSchema.optional(),
|
|
1849
2017
|
from: z.iso.date().optional(),
|
|
1850
2018
|
to: z.iso.date(),
|
|
1851
|
-
timezone:
|
|
2019
|
+
timezone: canonicalTimezoneSchema
|
|
1852
2020
|
}).strict().refine((input) => !input.from || input.from <= input.to, {
|
|
1853
2021
|
message: "from must be before or equal to to",
|
|
1854
2022
|
path: ["from"]
|
|
@@ -1888,6 +2056,13 @@ const userEnsureTimezoneOutputSchema = z.object({
|
|
|
1888
2056
|
}).strict();
|
|
1889
2057
|
const userUpdateTimezoneInputSchema = z.object({ timezone: timezoneSchema }).strict();
|
|
1890
2058
|
const userUpdateTimezoneOutputSchema = z.object({ timezone: timezoneSchema }).strict();
|
|
2059
|
+
const userEnsureLocaleInputSchema = z.object({ locale: appLocaleSchema }).strict();
|
|
2060
|
+
const userEnsureLocaleOutputSchema = z.object({
|
|
2061
|
+
locale: appLocaleSchema,
|
|
2062
|
+
updated: z.boolean()
|
|
2063
|
+
}).strict();
|
|
2064
|
+
const userUpdateLocaleInputSchema = z.object({ locale: appLocaleSchema }).strict();
|
|
2065
|
+
const userUpdateLocaleOutputSchema = z.object({ locale: appLocaleSchema }).strict();
|
|
1891
2066
|
//#endregion
|
|
1892
2067
|
//#region src/contracts/user.ts
|
|
1893
2068
|
const userContract = {
|
|
@@ -1902,7 +2077,19 @@ const userContract = {
|
|
|
1902
2077
|
path: "/users/me/timezone",
|
|
1903
2078
|
summary: "Update the authenticated user's timezone",
|
|
1904
2079
|
tags: ["Users"]
|
|
1905
|
-
}).input(userUpdateTimezoneInputSchema).output(userUpdateTimezoneOutputSchema)
|
|
2080
|
+
}).input(userUpdateTimezoneInputSchema).output(userUpdateTimezoneOutputSchema),
|
|
2081
|
+
ensureLocale: oc.route({
|
|
2082
|
+
method: "POST",
|
|
2083
|
+
path: "/users/me/locale/ensure",
|
|
2084
|
+
summary: "Ensure the authenticated user has a locale",
|
|
2085
|
+
tags: ["Users"]
|
|
2086
|
+
}).input(userEnsureLocaleInputSchema).output(userEnsureLocaleOutputSchema),
|
|
2087
|
+
updateLocale: oc.route({
|
|
2088
|
+
method: "PATCH",
|
|
2089
|
+
path: "/users/me/locale",
|
|
2090
|
+
summary: "Update the authenticated user's locale",
|
|
2091
|
+
tags: ["Users"]
|
|
2092
|
+
}).input(userUpdateLocaleInputSchema).output(userUpdateLocaleOutputSchema)
|
|
1906
2093
|
};
|
|
1907
2094
|
//#endregion
|
|
1908
2095
|
//#region src/schemas/video-transcript.ts
|
|
@@ -1953,11 +2140,12 @@ const videoTranscriptUsageSchema = z.object({
|
|
|
1953
2140
|
//#endregion
|
|
1954
2141
|
//#region src/index.ts
|
|
1955
2142
|
const contract = {
|
|
1956
|
-
betaAccess: betaAccessContract,
|
|
1957
2143
|
billing: billingContract,
|
|
1958
2144
|
card: cardContract,
|
|
1959
2145
|
cardTemplate: cardTemplateContract,
|
|
1960
2146
|
ebook: ebookContract,
|
|
2147
|
+
emailPreferences: emailPreferencesContract,
|
|
2148
|
+
featureAccess: featureAccessContract,
|
|
1961
2149
|
hostedAi: hostedAiContract,
|
|
1962
2150
|
masteryGoal: masteryGoalContract,
|
|
1963
2151
|
mcpConnection: mcpConnectionContract,
|
|
@@ -1996,6 +2184,6 @@ const contract = {
|
|
|
1996
2184
|
}
|
|
1997
2185
|
};
|
|
1998
2186
|
//#endregion
|
|
1999
|
-
export {
|
|
2187
|
+
export { BILLING_PAYMENT_DUE_TIME_ZONE, CardGenerateInputSchema, CardGenerateOutputSchema, CardGetInputSchema, CardGetOutputSchema, CardListInputSchema, CardListOutputSchema, CardTemplateCreateInputSchema, CardTemplateCreateOutputSchema, CardTemplateDeleteInputSchema, CardTemplateDeleteOutputSchema, CardTemplateGetInputSchema, CardTemplateGetOutputSchema, CardTemplateInvalidColumnsDataSchema, CardTemplateInvalidLayoutDataSchema, CardTemplateListInputSchema, CardTemplateListOutputSchema, CardTemplateNotebaseColumnInUseDataSchema, CardTemplateUpdateInputSchema, CardTemplateUpdateOutputSchema, CellValidationFailedDataSchema, CellValidationFailureDetailsSchema, CellValidationFailureReasonSchema, DEFAULT_SPEECH_PREFERENCES, FeatureAccessStatusInputSchema, FeatureAccessStatusOutputSchema, GatedFeatureKeySchema, HOSTED_AI_CLIENT_STREAM_PART_TYPES, HOSTED_AI_NOTE_SUGGESTION_MAX_NOTES, HOSTED_AI_NOTE_SUGGESTION_MAX_NOTE_FIELDS, HostedAiCreditPeriodKindSchema, HostedAiCreditPolicyIdSchema, HostedAiCreditPoolStatusSchema, HostedAiFeatureSchema, HostedAiFeatureStatusSchema, HostedAiModelTierSchema, HostedAiNoteSuggestionObjectSchema, HostedAiNoteSuggestionStreamInputSchema, HostedAiOneTimeCreditStatusSchema, HostedAiOutputFieldSchema, HostedAiOutputFieldTypeSchema, HostedAiQuotaExhaustedDataSchema, HostedAiQuotaScopeSchema, HostedAiRateLimitErrorDataSchema, HostedAiRecurringCreditStatusSchema, HostedAiRequestIdSchema, HostedAiStatusInputSchema, HostedAiStatusOutputSchema, HostedAiStreamPartSchema, HostedAiStreamStructuredObjectInputSchema, HostedAiStreamTextInputSchema, HostedAiTierRestrictedDataSchema, HostedAiTierStatusSchema, HostedAiUnavailableReasonSchema, MASTERY_GOAL_TARGET_MAX, MCP_DAILY_CALL_LIMITS, NOTEBASE_ROW_CREATE_MANY_MAX_ROWS, NOTEBASE_ROW_DELETE_MANY_MAX_ROWS, NOTEBASE_ROW_UPDATE_MANY_MAX_ROWS, NotebaseColumnCreateInputSchema, NotebaseColumnCreateOutputSchema, NotebaseColumnDeleteInputSchema, NotebaseColumnDeleteOutputSchema, NotebaseColumnReorderInputSchema, NotebaseColumnReorderOutputSchema, NotebaseColumnUpdateInputSchema, NotebaseColumnUpdateOutputSchema, NotebaseCreateInputSchema, NotebaseCreateOutputSchema, NotebaseDeleteInputSchema, NotebaseDeleteOutputSchema, NotebaseGetInputSchema, NotebaseGetOutputSchema, NotebaseGetSchemaInputSchema, NotebaseGetSchemaOutputSchema, NotebaseGetSummaryInputSchema, NotebaseGetSummaryOutputSchema, NotebaseListInputSchema, NotebaseListItemSchema, NotebaseListOutputSchema, NotebaseRowCreateInputSchema, NotebaseRowCreateManyInputSchema, NotebaseRowCreateManyOutputSchema, NotebaseRowCreateOutputSchema, NotebaseRowDeleteInputSchema, NotebaseRowDeleteManyInputSchema, NotebaseRowDeleteManyOutputSchema, NotebaseRowDeleteOutputSchema, NotebaseRowGetInputSchema, NotebaseRowGetOutputSchema, NotebaseRowListInputSchema, NotebaseRowListOutputSchema, NotebaseRowReorderInputSchema, NotebaseRowReorderOutputSchema, NotebaseRowUpdateInputSchema, NotebaseRowUpdateManyInputSchema, NotebaseRowUpdateManyOutputSchema, NotebaseRowUpdateOutputSchema, NotebaseSetSleepInputSchema, NotebaseSetSleepOutputSchema, NotebaseUpdateInputSchema, NotebaseUpdateOutputSchema, PUBLIC_APP_ERROR_DEFS, SPEECH_DAILY_REQUEST_LIMITS, SPEECH_RATE_MAX, SPEECH_RATE_MIN, SPEECH_TEXT_MAX_LENGTH, SRS_REVIEW_CLIENT_ID_NAMESPACE, SRS_REVIEW_DURATION_MS_MAX, SpeechDailyLimitReachedDataSchema, activityStatsOutputSchema, appLocaleSchema, billingAccessSourceSchema, billingCancelScheduledChangeOutputSchema, billingCheckoutPlanSchema, billingCreateCheckoutSessionInputSchema, billingCreateCustomerPortalSessionInputSchema, billingCurrencySchema, billingIntervalSchema, billingLocaleSchema, billingPaymentDueSchema, billingPlanSchema, billingScheduledChangeSchema, billingSessionUrlOutputSchema, billingStatusSchema, billingSubscriptionStatusSchema, canonicalTimezoneSchema, cardSchema, cardStateSchema, cardTemplateSchema, contract, createSrsReviewClientId, defineAgentProcedure, deletionResultSchema, ebookCoverContentTypeSchema, ebookDeleteInputSchema, ebookDeleteOutputSchema, ebookDetailSchema, ebookFinalizeUploadInputSchema, ebookFinalizeUploadOutputSchema, ebookGetDownloadUrlInputSchema, ebookGetDownloadUrlOutputSchema, ebookGetInputSchema, ebookGetOutputSchema, ebookListInputSchema, ebookListItemSchema, ebookListOutputSchema, ebookPresignedUploadSchema, ebookQuotaSchema, ebookRenameDataSchema, ebookRenameInputSchema, ebookRenameOutputSchema, ebookRequestUploadInputSchema, ebookRequestUploadOutputSchema, ebookStatusSchema, ebookUpdateProgressDataSchema, ebookUpdateProgressInputSchema, ebookUpdateProgressOutputSchema, emailCategoryKeySchema, emailCategoryStateSchema, emailLinkTokenSchema, emailPreferencesByTokenStateSchema, emailPreferencesGetByTokenInputSchema, emailPreferencesGetInputSchema, emailPreferencesStateSchema, emailPreferencesUpdateByTokenInputSchema, emailPreferencesUpdateInputSchema, expectedUpdatedAtSchema, getPublicErrorDefinition, isPublicAppErrorCode, masteryGoalOutputSchema, masteryGoalTargetSchema, masteryGoalUpdateInputSchema, mcpConnectionListOutputSchema, mcpConnectionRevokeInputSchema, mcpConnectionRevokeOutputSchema, mcpConnectionSchema, notebaseActivityStatsItemSchema, notebaseActivityStatsOutputSchema, notebaseColumnCreateDataSchema, notebaseColumnSchema, notebaseColumnUpdateDataSchema, notebaseColumnWidthSchema, notebaseCreateDataSchema, notebaseRowCellsSchema, notebaseRowCreateDataSchema, notebaseRowGrowthStatsItemSchema, notebaseRowGrowthStatsOutputSchema, notebaseRowSchema, notebaseRowUpdateDataSchema, notebaseSchema, notebaseSummarySchema, notebaseUpdateDataSchema, notebaseViewConfigSchema, notebaseViewCreateDataSchema, notebaseViewFilterSchema, notebaseViewFiltersSchema, notebaseViewSchema, notebaseViewSortSchema, notebaseViewSortsSchema, notebaseViewTypeSchema, notebaseViewUpdateDataSchema, pageSchema, paginationShape, pickPublicErrorMap, renderedCardSchema, reviewRatingSchema, scheduleStatusSchema, schedulingParamsSchema, speechPreferencesSchema, speechPreferencesUpdateInputSchema, speechRateSchema, speechSynthesizeInputSchema, speechSynthesizeOutputSchema, speechVoiceGenderSchema, speechVoiceNameSchema, speechVoiceSchema, speechVoicesOutputSchema, srsAcknowledgeOptimizerResultsInputSchema, srsAcknowledgeOptimizerResultsOutputSchema, srsActivityStatsItemSchema, srsActivityStatsOutputSchema, srsListCardRevlogsInputSchema, srsListCardRevlogsOutputSchema, srsListUnreadOptimizerResultsInputSchema, srsListUnreadOptimizerResultsOutputSchema, srsManualCardStatusInputSchema, srsMemoryGrowthStatsItemSchema, srsMemoryGrowthStatsOutputSchema, srsOptimizerUnreadResultSchema, srsRecentNotebaseScheduleStatusStatsInputSchema, srsRecentNotebaseScheduleStatusStatsOutputSchema, srsReviewInputSchema, srsReviewOutputSchema, srsRevlogSchema, srsRevlogWithoutSnapshotSchema, srsRollbackReviewInputSchema, srsRollbackReviewOutputSchema, srsScheduleStatusStatsInputSchema, srsScheduleStatusStatsOutputSchema, srsScheduleStatusStatsSchema, srsSetCardBuriedInputSchema, srsSetCardBuriedOutputSchema, srsSetCardSuspendedInputSchema, srsSetCardSuspendedOutputSchema, srsTxidOutputSchema, statsInputSchema, stepSchema, timezoneSchema, userEnsureLocaleInputSchema, userEnsureLocaleOutputSchema, userEnsureTimezoneInputSchema, userEnsureTimezoneOutputSchema, userUpdateLocaleInputSchema, userUpdateLocaleOutputSchema, userUpdateTimezoneInputSchema, userUpdateTimezoneOutputSchema, videoTranscriptCreateInputSchema, videoTranscriptGetInputSchema, videoTranscriptResourceSchema, videoTranscriptStatusSchema, videoTranscriptSubtitlesSchema, videoTranscriptUsagePoolSchema, videoTranscriptUsageSchema };
|
|
2000
2188
|
|
|
2001
2189
|
//# sourceMappingURL=index.js.map
|