@relyio/sdk 0.9.0 → 0.11.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.
@@ -534,6 +534,14 @@ function defineView(id, config) {
534
534
  if (!config.scope?.type) {
535
535
  throw new Error(`View '${id}' must have a valid scope`);
536
536
  }
537
+ const grouped = (config.filters ?? []).findIndex(
538
+ (filter) => typeof filter === "object" && filter !== null && "conditions" in filter
539
+ );
540
+ if (grouped !== -1) {
541
+ throw new Error(
542
+ `View '${id}' filter ${grouped} is a filter group: a view's filters are a flat list, joined by AND. List each of its conditions as a filter of its own, or use 'isAnyOf' for an OR within one field.`
543
+ );
544
+ }
537
545
  if (config.slug !== void 0 && !/^[a-z][a-z0-9-]*$/.test(config.slug)) {
538
546
  throw new Error(
539
547
  `View '${id}' slug '${config.slug}' must be lowercase, start with a letter, and contain only letters, numbers, and hyphens`
@@ -682,5 +690,5 @@ __name(component, "component");
682
690
  var fields = fields_exports;
683
691
 
684
692
  export { BUILT_IN_ROLES, BUILT_IN_ROLE_ACTIONS, ROLE_ACTIONS, buildFallbackChain, defineAssetType, defineComponent, defineContentType, defineContentTypeWorkflow, defineLocale, defineQuery, defineRole, defineSchema, defineSettingsGroup, defineSingleton, defineSingletonContentType, defineView, defineWorkflow, defineWorkflowStage, fields, fieldset, findDefaultLocale, findWorkflowStage, getActiveLocales, getBuiltInRoleActions, getFirstWorkflowStage, getLocaleCodes, getNextWorkflowStage, getWorkflowStageIds, isBuiltInRole, isFinalWorkflowStage, isLocaleDefinition, isRoleDefinition, isWorkflowDefinition, isWorkflowStageDefinition };
685
- //# sourceMappingURL=chunk-YEJUMW4X.js.map
686
- //# sourceMappingURL=chunk-YEJUMW4X.js.map
693
+ //# sourceMappingURL=chunk-2TIJLV2X.js.map
694
+ //# sourceMappingURL=chunk-2TIJLV2X.js.map
@@ -412,7 +412,7 @@ var _InvalidPayloadError = class _InvalidPayloadError extends BaseValidationErro
412
412
  chunkMWMSFIWN_cjs.__name(_InvalidPayloadError, "InvalidPayloadError");
413
413
  var InvalidPayloadError = _InvalidPayloadError;
414
414
 
415
- // ../../platform/api-contract/dist/chunk-PYZCLRXR.js
415
+ // ../../platform/api-contract/dist/chunk-46347LG2.js
416
416
  function defineRoute(route) {
417
417
  if (route.kind === "raw" && route.standardShape === void 0) {
418
418
  throw new Error("kind 'raw' requires a named StandardShape");
@@ -426,6 +426,16 @@ function defineRoute(route) {
426
426
  if (route.kind === "collection" && route.page === void 0) {
427
427
  throw new Error("kind 'collection' requires a page dialect");
428
428
  }
429
+ if (route.queues === true) {
430
+ if (route.kind !== "object" && route.kind !== "empty") {
431
+ throw new Error(
432
+ `kind '${route.kind}' cannot declare \`queues\`: only an object or empty route answers 202 beside its own status`
433
+ );
434
+ }
435
+ if (route.kind === "object" && route.success === 202) {
436
+ throw new Error("a route whose own status is 202 cannot also declare `queues`");
437
+ }
438
+ }
429
439
  if ((route.kind === "object" || route.kind === "collection") && route.negotiated !== void 0) {
430
440
  refuseMismatchedAlternate(route, route.negotiated["text/event-stream"]);
431
441
  }
@@ -897,6 +907,7 @@ var DECLARED_PATHS = {
897
907
  "/internal/media/resolve": true,
898
908
  "/internal/usage/cycle": true,
899
909
  "/internal/usage/ingest": true,
910
+ "/internal/usage/stops": true,
900
911
  "/v1/{contentType}": true,
901
912
  "/v1/{contentType}/{id}": true,
902
913
  "/v1/{contentType}/{id}/children": true,
@@ -6335,5 +6346,5 @@ exports.matchRoute = matchRoute;
6335
6346
  exports.serviceInstructedDelayMs = serviceInstructedDelayMs;
6336
6347
  exports.sleep = sleep;
6337
6348
  exports.validateFile = validateFile;
6338
- //# sourceMappingURL=chunk-SPFRDXAF.cjs.map
6339
- //# sourceMappingURL=chunk-SPFRDXAF.cjs.map
6349
+ //# sourceMappingURL=chunk-4HTIU5YE.cjs.map
6350
+ //# sourceMappingURL=chunk-4HTIU5YE.cjs.map
@@ -410,7 +410,7 @@ var _InvalidPayloadError = class _InvalidPayloadError extends BaseValidationErro
410
410
  __name(_InvalidPayloadError, "InvalidPayloadError");
411
411
  var InvalidPayloadError = _InvalidPayloadError;
412
412
 
413
- // ../../platform/api-contract/dist/chunk-PYZCLRXR.js
413
+ // ../../platform/api-contract/dist/chunk-46347LG2.js
414
414
  function defineRoute(route) {
415
415
  if (route.kind === "raw" && route.standardShape === void 0) {
416
416
  throw new Error("kind 'raw' requires a named StandardShape");
@@ -424,6 +424,16 @@ function defineRoute(route) {
424
424
  if (route.kind === "collection" && route.page === void 0) {
425
425
  throw new Error("kind 'collection' requires a page dialect");
426
426
  }
427
+ if (route.queues === true) {
428
+ if (route.kind !== "object" && route.kind !== "empty") {
429
+ throw new Error(
430
+ `kind '${route.kind}' cannot declare \`queues\`: only an object or empty route answers 202 beside its own status`
431
+ );
432
+ }
433
+ if (route.kind === "object" && route.success === 202) {
434
+ throw new Error("a route whose own status is 202 cannot also declare `queues`");
435
+ }
436
+ }
427
437
  if ((route.kind === "object" || route.kind === "collection") && route.negotiated !== void 0) {
428
438
  refuseMismatchedAlternate(route, route.negotiated["text/event-stream"]);
429
439
  }
@@ -895,6 +905,7 @@ var DECLARED_PATHS = {
895
905
  "/internal/media/resolve": true,
896
906
  "/internal/usage/cycle": true,
897
907
  "/internal/usage/ingest": true,
908
+ "/internal/usage/stops": true,
898
909
  "/v1/{contentType}": true,
899
910
  "/v1/{contentType}/{id}": true,
900
911
  "/v1/{contentType}/{id}/children": true,
@@ -6274,5 +6285,5 @@ function randomClientId() {
6274
6285
  __name(randomClientId, "randomClientId");
6275
6286
 
6276
6287
  export { AdhocQueryBuilder, AdhocQueryClient, AssetClient, AssetFileBuilder, AssetUploadBuilder, AuthorizationError, AutocompleteBuilder, BaseValidationError, BatchBuilder, BatchClient, ChangesExpiredError, ConnectionError, ContentByIdBuilder, ContentClient, ContentQueryBuilder, ErrorMapper, FileUploadError, FileValidationError, HttpClient, InvalidApiKeyError, InvalidPayloadError, LIVE_KEEPALIVE_INTERVAL_MS, LIVE_SOCKET_OPEN_TIMEOUT_MS, LiveEdgeError, MethodNotAllowedError, MissingApiKeyError, NetworkError, PUBLISHABLE_KEY_PREFIX, PayloadTooLargeError, PlanFeatureUnavailableError, RateLimitError, ReadOnlyKeyError, ResourceConflictError, ResourceExpiredError, ResourceNotFoundError, SDKError, SearchBuilder, SearchClient, ServerError, ServiceIndeterminateError, SettingsClient, SimilarBuilder, SingletonClient, TimeoutError, TransactionRolledBackError, TypedRelyIOClient, UnknownContractError, UsageQuotaExceededError, VISITOR_ADMISSION_RETRY_AFTER_SECONDS, ValidationError, createClient, entityTagOf, isAborted, isAssetEntry, isPublishableKey, isResourceNotFound, matchRoute, serviceInstructedDelayMs, sleep, validateFile };
6277
- //# sourceMappingURL=chunk-LGNJIGHL.js.map
6278
- //# sourceMappingURL=chunk-LGNJIGHL.js.map
6288
+ //# sourceMappingURL=chunk-7GLDVHIH.js.map
6289
+ //# sourceMappingURL=chunk-7GLDVHIH.js.map
@@ -536,6 +536,14 @@ function defineView(id, config) {
536
536
  if (!config.scope?.type) {
537
537
  throw new Error(`View '${id}' must have a valid scope`);
538
538
  }
539
+ const grouped = (config.filters ?? []).findIndex(
540
+ (filter) => typeof filter === "object" && filter !== null && "conditions" in filter
541
+ );
542
+ if (grouped !== -1) {
543
+ throw new Error(
544
+ `View '${id}' filter ${grouped} is a filter group: a view's filters are a flat list, joined by AND. List each of its conditions as a filter of its own, or use 'isAnyOf' for an OR within one field.`
545
+ );
546
+ }
539
547
  if (config.slug !== void 0 && !/^[a-z][a-z0-9-]*$/.test(config.slug)) {
540
548
  throw new Error(
541
549
  `View '${id}' slug '${config.slug}' must be lowercase, start with a letter, and contain only letters, numbers, and hyphens`
@@ -717,5 +725,5 @@ exports.isLocaleDefinition = isLocaleDefinition;
717
725
  exports.isRoleDefinition = isRoleDefinition;
718
726
  exports.isWorkflowDefinition = isWorkflowDefinition;
719
727
  exports.isWorkflowStageDefinition = isWorkflowStageDefinition;
720
- //# sourceMappingURL=chunk-72UK5U7T.cjs.map
721
- //# sourceMappingURL=chunk-72UK5U7T.cjs.map
728
+ //# sourceMappingURL=chunk-PO7CUR5U.cjs.map
729
+ //# sourceMappingURL=chunk-PO7CUR5U.cjs.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkSPFRDXAF_cjs = require('../chunk-SPFRDXAF.cjs');
3
+ var chunk4HTIU5YE_cjs = require('../chunk-4HTIU5YE.cjs');
4
4
  require('../chunk-LSRPMNPT.cjs');
5
5
  require('../chunk-TZL374LS.cjs');
6
6
  require('../chunk-MWMSFIWN.cjs');
@@ -9,11 +9,11 @@ require('../chunk-MWMSFIWN.cjs');
9
9
 
10
10
  Object.defineProperty(exports, "TypedRelyIOClient", {
11
11
  enumerable: true,
12
- get: function () { return chunkSPFRDXAF_cjs.TypedRelyIOClient; }
12
+ get: function () { return chunk4HTIU5YE_cjs.TypedRelyIOClient; }
13
13
  });
14
14
  Object.defineProperty(exports, "createClient", {
15
15
  enumerable: true,
16
- get: function () { return chunkSPFRDXAF_cjs.createClient; }
16
+ get: function () { return chunk4HTIU5YE_cjs.createClient; }
17
17
  });
18
18
  //# sourceMappingURL=index.cjs.map
19
19
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
- export { e as ClientSchema, R as Register, f as RegisteredSchema, d as TypedClientConfig, T as TypedRelyIOClient, c as createClient } from '../index-B9axQW8s.cjs';
2
- import '../index-B_rIWO_l.cjs';
3
- import '../define-content-type-cEGjIwT5.cjs';
4
- import '../define-schema-DgbJ5Kwn.cjs';
1
+ export { e as ClientSchema, R as Register, f as RegisteredSchema, d as TypedClientConfig, T as TypedRelyIOClient, c as createClient } from '../index-MLAFUuco.cjs';
2
+ import '../index-BM42r4yg.cjs';
3
+ import '../define-content-type-ENAod5Ve.cjs';
4
+ import '../define-schema-DqpipEHv.cjs';
5
5
  import './live-visitor.js';
6
6
  import '../dev-handshake/index.cjs';
@@ -1,6 +1,6 @@
1
- export { e as ClientSchema, R as Register, f as RegisteredSchema, d as TypedClientConfig, T as TypedRelyIOClient, c as createClient } from '../index-GIfaMlQ7.js';
2
- import '../index-Cv4tmcrw.js';
3
- import '../define-content-type-cEGjIwT5.js';
4
- import '../define-schema-BPj2srgh.js';
1
+ export { e as ClientSchema, R as Register, f as RegisteredSchema, d as TypedClientConfig, T as TypedRelyIOClient, c as createClient } from '../index-BKEAYvvz.js';
2
+ import '../index-C73cK2Tt.js';
3
+ import '../define-content-type-ENAod5Ve.js';
4
+ import '../define-schema-CVi8nwc7.js';
5
5
  import './live-visitor.js';
6
6
  import '../dev-handshake/index.js';
@@ -1,4 +1,4 @@
1
- export { TypedRelyIOClient, createClient } from '../chunk-LGNJIGHL.js';
1
+ export { TypedRelyIOClient, createClient } from '../chunk-7GLDVHIH.js';
2
2
  import '../chunk-BBUB7C2Z.js';
3
3
  import '../chunk-H6IBQSMM.js';
4
4
  import '../chunk-XQ4QHWZE.js';
@@ -208,6 +208,23 @@ interface paths {
208
208
  patch?: never;
209
209
  trace?: never;
210
210
  };
211
+ '/internal/usage/stops': {
212
+ parameters: {
213
+ query?: never;
214
+ header?: never;
215
+ path?: never;
216
+ cookie?: never;
217
+ };
218
+ get?: never;
219
+ put?: never;
220
+ /** Record the Usage Limit stops an edge refused */
221
+ post: operations['recordUsageStops'];
222
+ delete?: never;
223
+ options?: never;
224
+ head?: never;
225
+ patch?: never;
226
+ trace?: never;
227
+ };
211
228
  '/v1/{contentType}': {
212
229
  parameters: {
213
230
  query?: never;
@@ -1041,14 +1058,14 @@ interface components {
1041
1058
  localeStatus?: 'archived' | 'draft' | 'published';
1042
1059
  /** @description Whether `locale` has unpublished changes of its own. */
1043
1060
  localeHasDraft: boolean;
1044
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1061
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1045
1062
  draftLocales: string[];
1063
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1064
+ hasDraft: boolean;
1046
1065
  /** @description The locale the request named, when it named one other than the default. On `?locales=a,b,c` it is always sent: the primary, or `*` when the list names as many locales as the entry has — as on `?locale=*`. */
1047
1066
  requestedLocale?: string;
1048
1067
  /** @description The schema’s default locale. */
1049
1068
  defaultLocale: string;
1050
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1051
- hasDraft: boolean;
1052
1069
  /** @description Each field whose value came from another locale, mapped to that locale. Absent when none did. */
1053
1070
  localeFallbacksApplied?: {
1054
1071
  [key: string]: string;
@@ -1094,7 +1111,7 @@ interface components {
1094
1111
  ErrorResponse: {
1095
1112
  error: {
1096
1113
  /** @enum {string} */
1097
- code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED';
1114
+ code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED' | 'USER_NOT_PROVISIONED';
1098
1115
  messages: string[];
1099
1116
  details?: {
1100
1117
  [key: string]: unknown;
@@ -1337,9 +1354,9 @@ interface components {
1337
1354
  localeStatus?: 'archived' | 'draft' | 'published';
1338
1355
  /** @description Whether `locale` has unpublished changes of its own. */
1339
1356
  localeHasDraft: boolean;
1340
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1357
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1341
1358
  draftLocales: string[];
1342
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1359
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1343
1360
  hasDraft: boolean;
1344
1361
  /**
1345
1362
  * Format: date-time
@@ -1390,8 +1407,10 @@ interface components {
1390
1407
  localeStatus?: 'archived' | 'draft' | 'published';
1391
1408
  /** @description Whether `locale` has unpublished changes of its own. */
1392
1409
  localeHasDraft: boolean;
1393
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1410
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1394
1411
  draftLocales: string[];
1412
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1413
+ hasDraft: boolean;
1395
1414
  /**
1396
1415
  * Format: date-time
1397
1416
  * @description When the group was last written.
@@ -1422,8 +1441,10 @@ interface components {
1422
1441
  localeStatus?: 'archived' | 'draft' | 'published';
1423
1442
  /** @description Whether `locale` has unpublished changes of its own. */
1424
1443
  localeHasDraft: boolean;
1425
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1444
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1426
1445
  draftLocales: string[];
1446
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1447
+ hasDraft: boolean;
1427
1448
  /**
1428
1449
  * Format: date-time
1429
1450
  * @description When the group was last written.
@@ -1465,9 +1486,9 @@ interface components {
1465
1486
  localeStatus?: 'archived' | 'draft' | 'published';
1466
1487
  /** @description Whether `locale` has unpublished changes of its own. */
1467
1488
  localeHasDraft: boolean;
1468
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1489
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1469
1490
  draftLocales: string[];
1470
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1491
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1471
1492
  hasDraft: boolean;
1472
1493
  /**
1473
1494
  * Format: date-time
@@ -1495,7 +1516,7 @@ interface components {
1495
1516
  id?: string;
1496
1517
  error: {
1497
1518
  /** @enum {string} */
1498
- code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED';
1519
+ code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED' | 'USER_NOT_PROVISIONED';
1499
1520
  messages: string[];
1500
1521
  details?: {
1501
1522
  [key: string]: unknown;
@@ -2140,6 +2161,65 @@ interface operations {
2140
2161
  };
2141
2162
  };
2142
2163
  };
2164
+ recordUsageStops: {
2165
+ parameters: {
2166
+ query?: never;
2167
+ header?: never;
2168
+ path?: never;
2169
+ cookie?: never;
2170
+ };
2171
+ requestBody?: never;
2172
+ responses: {
2173
+ /** @description Success. */
2174
+ 200: {
2175
+ headers: {
2176
+ [name: string]: unknown;
2177
+ };
2178
+ content: {
2179
+ 'application/json': {
2180
+ /** @description The payload itself. */
2181
+ data: unknown;
2182
+ };
2183
+ };
2184
+ };
2185
+ /** @description REQUEST_INVALID */
2186
+ 400: {
2187
+ headers: {
2188
+ [name: string]: unknown;
2189
+ };
2190
+ content: {
2191
+ 'application/json': components['schemas']['RefusalRequestInvalid'];
2192
+ };
2193
+ };
2194
+ /** @description ACCESS_DENIED */
2195
+ 403: {
2196
+ headers: {
2197
+ [name: string]: unknown;
2198
+ };
2199
+ content: {
2200
+ 'application/json': components['schemas']['RefusalAccessDenied'];
2201
+ };
2202
+ };
2203
+ /** @description RESOURCE_NOT_FOUND */
2204
+ 404: {
2205
+ headers: {
2206
+ [name: string]: unknown;
2207
+ };
2208
+ content: {
2209
+ 'application/json': components['schemas']['RefusalResourceNotFound'];
2210
+ };
2211
+ };
2212
+ /** @description INTERNAL_ERROR */
2213
+ 500: {
2214
+ headers: {
2215
+ [name: string]: unknown;
2216
+ };
2217
+ content: {
2218
+ 'application/json': components['schemas']['RefusalInternalError'];
2219
+ };
2220
+ };
2221
+ };
2222
+ };
2143
2223
  listEntries: {
2144
2224
  parameters: {
2145
2225
  query?: {
@@ -6753,7 +6833,10 @@ interface DateConfig extends BaseFieldConfig {
6753
6833
  interface DateTimeConfig extends BaseFieldConfig {
6754
6834
  minDateTime?: string;
6755
6835
  maxDateTime?: string;
6756
- /** Store the instant in UTC (`'UTC'`), or keep the author's local time (`'local'`). */
6836
+ /**
6837
+ * Show the instant in UTC (`'UTC'`) or in the author's local time (`'local'`) in the editor. The
6838
+ * instant is stored in UTC either way.
6839
+ */
6757
6840
  timeZoneHandling?: 'UTC' | 'local';
6758
6841
  defaultValue?: string;
6759
6842
  }
@@ -7375,8 +7458,9 @@ type InferAssetType<T extends AnyAssetTypeDefinition, S extends FieldSchemaConte
7375
7458
  * typed by one table. The types describe **what a read returns**, which is not always what a write
7376
7459
  * accepts:
7377
7460
  *
7378
- * - `richText` is the stored HTML string; `date` is `YYYY-MM-DD` and `dateTime` an ISO 8601 string —
7379
- * the client does not revive dates.
7461
+ * - `richText` is the stored HTML string; `date` is `YYYY-MM-DD` and `dateTime` an ISO 8601 string
7462
+ * in UTC at millisecond precision (`2026-10-01T04:30:00.000Z`), whatever offset it was written in
7463
+ * — the client does not revive dates.
7380
7464
  * - A `reference` is the target's id until `include` names it, and then the target entry itself.
7381
7465
  * The type cannot see `include`, so it is both: `string | <entry>`. A single reference whose target
7382
7466
  * was deleted with `onTargetDelete: 'nullify'` is `null`.
@@ -7432,7 +7516,7 @@ type FieldValueByType<C, S extends Context> = OverEveryFieldType<{
7432
7516
  enum: EnumValue<C>;
7433
7517
  /** `YYYY-MM-DD`. */
7434
7518
  date: string;
7435
- /** ISO 8601. */
7519
+ /** ISO 8601 in UTC at millisecond precision: `2026-10-01T04:30:00.000Z`. */
7436
7520
  dateTime: string;
7437
7521
  reference: ReferenceValue<C, S>;
7438
7522
  tags: string[];
@@ -7693,8 +7777,13 @@ type EntryMetadata = components['schemas']['EntryMetadata'];
7693
7777
  * settings group's alike (`INV-LM-PUBLICATION-IS-REPORTED-PER-LOCALE`): a `Pick` of the document's
7694
7778
  * {@link EntryMetadata}, so this package holds no copy of them. `localeStatus` is absent when the
7695
7779
  * locale has no content of its own.
7780
+ *
7781
+ * Unpublished work comes in two kinds, reported apart: `draftLocales` names the locales with edits
7782
+ * of their own, and `hasDraft` is a change to the shared (non-localized) fields. Publishing any
7783
+ * locale makes a shared change live, so it is pending in every locale and no locale code is listed
7784
+ * for it. A locale has unpublished work when `draftLocales` names it or `hasDraft` is `true`.
7696
7785
  */
7697
- type LocalePublicationFields = Pick<EntryMetadata, 'localeStatus' | 'localeHasDraft' | 'draftLocales'>;
7786
+ type LocalePublicationFields = Pick<EntryMetadata, 'localeStatus' | 'localeHasDraft' | 'draftLocales' | 'hasDraft'>;
7698
7787
  /**
7699
7788
  * Infer the TypeScript type of an entry from a content type definition: every field it declares,
7700
7789
  * directly or through fieldsets, typed as a read returns it (`INV-SS-TYPES-INFERRED`), plus
@@ -208,6 +208,23 @@ interface paths {
208
208
  patch?: never;
209
209
  trace?: never;
210
210
  };
211
+ '/internal/usage/stops': {
212
+ parameters: {
213
+ query?: never;
214
+ header?: never;
215
+ path?: never;
216
+ cookie?: never;
217
+ };
218
+ get?: never;
219
+ put?: never;
220
+ /** Record the Usage Limit stops an edge refused */
221
+ post: operations['recordUsageStops'];
222
+ delete?: never;
223
+ options?: never;
224
+ head?: never;
225
+ patch?: never;
226
+ trace?: never;
227
+ };
211
228
  '/v1/{contentType}': {
212
229
  parameters: {
213
230
  query?: never;
@@ -1041,14 +1058,14 @@ interface components {
1041
1058
  localeStatus?: 'archived' | 'draft' | 'published';
1042
1059
  /** @description Whether `locale` has unpublished changes of its own. */
1043
1060
  localeHasDraft: boolean;
1044
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1061
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1045
1062
  draftLocales: string[];
1063
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1064
+ hasDraft: boolean;
1046
1065
  /** @description The locale the request named, when it named one other than the default. On `?locales=a,b,c` it is always sent: the primary, or `*` when the list names as many locales as the entry has — as on `?locale=*`. */
1047
1066
  requestedLocale?: string;
1048
1067
  /** @description The schema’s default locale. */
1049
1068
  defaultLocale: string;
1050
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1051
- hasDraft: boolean;
1052
1069
  /** @description Each field whose value came from another locale, mapped to that locale. Absent when none did. */
1053
1070
  localeFallbacksApplied?: {
1054
1071
  [key: string]: string;
@@ -1094,7 +1111,7 @@ interface components {
1094
1111
  ErrorResponse: {
1095
1112
  error: {
1096
1113
  /** @enum {string} */
1097
- code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED';
1114
+ code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED' | 'USER_NOT_PROVISIONED';
1098
1115
  messages: string[];
1099
1116
  details?: {
1100
1117
  [key: string]: unknown;
@@ -1337,9 +1354,9 @@ interface components {
1337
1354
  localeStatus?: 'archived' | 'draft' | 'published';
1338
1355
  /** @description Whether `locale` has unpublished changes of its own. */
1339
1356
  localeHasDraft: boolean;
1340
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1357
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1341
1358
  draftLocales: string[];
1342
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1359
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1343
1360
  hasDraft: boolean;
1344
1361
  /**
1345
1362
  * Format: date-time
@@ -1390,8 +1407,10 @@ interface components {
1390
1407
  localeStatus?: 'archived' | 'draft' | 'published';
1391
1408
  /** @description Whether `locale` has unpublished changes of its own. */
1392
1409
  localeHasDraft: boolean;
1393
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1410
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1394
1411
  draftLocales: string[];
1412
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1413
+ hasDraft: boolean;
1395
1414
  /**
1396
1415
  * Format: date-time
1397
1416
  * @description When the group was last written.
@@ -1422,8 +1441,10 @@ interface components {
1422
1441
  localeStatus?: 'archived' | 'draft' | 'published';
1423
1442
  /** @description Whether `locale` has unpublished changes of its own. */
1424
1443
  localeHasDraft: boolean;
1425
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1444
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1426
1445
  draftLocales: string[];
1446
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1447
+ hasDraft: boolean;
1427
1448
  /**
1428
1449
  * Format: date-time
1429
1450
  * @description When the group was last written.
@@ -1465,9 +1486,9 @@ interface components {
1465
1486
  localeStatus?: 'archived' | 'draft' | 'published';
1466
1487
  /** @description Whether `locale` has unpublished changes of its own. */
1467
1488
  localeHasDraft: boolean;
1468
- /** @description Every locale holding unpublished content, sorted. A shared-field draft is listed under the default locale. */
1489
+ /** @description Every locale holding unpublished content of its own, sorted. A shared-field draft is not listed: it is `hasDraft`. */
1469
1490
  draftLocales: string[];
1470
- /** @description Whether the shared (non-localized) fields have unpublished changes. */
1491
+ /** @description Whether the shared (non-localized) fields have unpublished changes. Publishing any locale makes them live, so they are unpublished work in every locale. */
1471
1492
  hasDraft: boolean;
1472
1493
  /**
1473
1494
  * Format: date-time
@@ -1495,7 +1516,7 @@ interface components {
1495
1516
  id?: string;
1496
1517
  error: {
1497
1518
  /** @enum {string} */
1498
- code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED';
1519
+ code: 'ACCESS_DENIED' | 'CONTENT_INVALID' | 'INTERNAL_ERROR' | 'INVALID_API_KEY' | 'METHOD_NOT_ALLOWED' | 'MISSING_API_KEY' | 'ORGANIZATION_DELETE_BLOCKED' | 'PAYLOAD_TOO_LARGE' | 'PLAN_DOWNGRADE_BLOCKED' | 'PLAN_FEATURE_UNAVAILABLE' | 'RATE_LIMIT_EXCEEDED' | 'READ_ONLY_KEY' | 'REQUEST_INVALID' | 'REQUEST_TIMEOUT' | 'RESOURCE_CONFLICT' | 'RESOURCE_EXPIRED' | 'RESOURCE_NOT_FOUND' | 'REVERIFICATION_REQUIRED' | 'SERVICE_INDETERMINATE' | 'TRANSACTION_ROLLED_BACK' | 'USAGE_QUOTA_EXCEEDED' | 'USER_NOT_PROVISIONED';
1499
1520
  messages: string[];
1500
1521
  details?: {
1501
1522
  [key: string]: unknown;
@@ -2140,6 +2161,65 @@ interface operations {
2140
2161
  };
2141
2162
  };
2142
2163
  };
2164
+ recordUsageStops: {
2165
+ parameters: {
2166
+ query?: never;
2167
+ header?: never;
2168
+ path?: never;
2169
+ cookie?: never;
2170
+ };
2171
+ requestBody?: never;
2172
+ responses: {
2173
+ /** @description Success. */
2174
+ 200: {
2175
+ headers: {
2176
+ [name: string]: unknown;
2177
+ };
2178
+ content: {
2179
+ 'application/json': {
2180
+ /** @description The payload itself. */
2181
+ data: unknown;
2182
+ };
2183
+ };
2184
+ };
2185
+ /** @description REQUEST_INVALID */
2186
+ 400: {
2187
+ headers: {
2188
+ [name: string]: unknown;
2189
+ };
2190
+ content: {
2191
+ 'application/json': components['schemas']['RefusalRequestInvalid'];
2192
+ };
2193
+ };
2194
+ /** @description ACCESS_DENIED */
2195
+ 403: {
2196
+ headers: {
2197
+ [name: string]: unknown;
2198
+ };
2199
+ content: {
2200
+ 'application/json': components['schemas']['RefusalAccessDenied'];
2201
+ };
2202
+ };
2203
+ /** @description RESOURCE_NOT_FOUND */
2204
+ 404: {
2205
+ headers: {
2206
+ [name: string]: unknown;
2207
+ };
2208
+ content: {
2209
+ 'application/json': components['schemas']['RefusalResourceNotFound'];
2210
+ };
2211
+ };
2212
+ /** @description INTERNAL_ERROR */
2213
+ 500: {
2214
+ headers: {
2215
+ [name: string]: unknown;
2216
+ };
2217
+ content: {
2218
+ 'application/json': components['schemas']['RefusalInternalError'];
2219
+ };
2220
+ };
2221
+ };
2222
+ };
2143
2223
  listEntries: {
2144
2224
  parameters: {
2145
2225
  query?: {
@@ -6753,7 +6833,10 @@ interface DateConfig extends BaseFieldConfig {
6753
6833
  interface DateTimeConfig extends BaseFieldConfig {
6754
6834
  minDateTime?: string;
6755
6835
  maxDateTime?: string;
6756
- /** Store the instant in UTC (`'UTC'`), or keep the author's local time (`'local'`). */
6836
+ /**
6837
+ * Show the instant in UTC (`'UTC'`) or in the author's local time (`'local'`) in the editor. The
6838
+ * instant is stored in UTC either way.
6839
+ */
6757
6840
  timeZoneHandling?: 'UTC' | 'local';
6758
6841
  defaultValue?: string;
6759
6842
  }
@@ -7375,8 +7458,9 @@ type InferAssetType<T extends AnyAssetTypeDefinition, S extends FieldSchemaConte
7375
7458
  * typed by one table. The types describe **what a read returns**, which is not always what a write
7376
7459
  * accepts:
7377
7460
  *
7378
- * - `richText` is the stored HTML string; `date` is `YYYY-MM-DD` and `dateTime` an ISO 8601 string —
7379
- * the client does not revive dates.
7461
+ * - `richText` is the stored HTML string; `date` is `YYYY-MM-DD` and `dateTime` an ISO 8601 string
7462
+ * in UTC at millisecond precision (`2026-10-01T04:30:00.000Z`), whatever offset it was written in
7463
+ * — the client does not revive dates.
7380
7464
  * - A `reference` is the target's id until `include` names it, and then the target entry itself.
7381
7465
  * The type cannot see `include`, so it is both: `string | <entry>`. A single reference whose target
7382
7466
  * was deleted with `onTargetDelete: 'nullify'` is `null`.
@@ -7432,7 +7516,7 @@ type FieldValueByType<C, S extends Context> = OverEveryFieldType<{
7432
7516
  enum: EnumValue<C>;
7433
7517
  /** `YYYY-MM-DD`. */
7434
7518
  date: string;
7435
- /** ISO 8601. */
7519
+ /** ISO 8601 in UTC at millisecond precision: `2026-10-01T04:30:00.000Z`. */
7436
7520
  dateTime: string;
7437
7521
  reference: ReferenceValue<C, S>;
7438
7522
  tags: string[];
@@ -7693,8 +7777,13 @@ type EntryMetadata = components['schemas']['EntryMetadata'];
7693
7777
  * settings group's alike (`INV-LM-PUBLICATION-IS-REPORTED-PER-LOCALE`): a `Pick` of the document's
7694
7778
  * {@link EntryMetadata}, so this package holds no copy of them. `localeStatus` is absent when the
7695
7779
  * locale has no content of its own.
7780
+ *
7781
+ * Unpublished work comes in two kinds, reported apart: `draftLocales` names the locales with edits
7782
+ * of their own, and `hasDraft` is a change to the shared (non-localized) fields. Publishing any
7783
+ * locale makes a shared change live, so it is pending in every locale and no locale code is listed
7784
+ * for it. A locale has unpublished work when `draftLocales` names it or `hasDraft` is `true`.
7696
7785
  */
7697
- type LocalePublicationFields = Pick<EntryMetadata, 'localeStatus' | 'localeHasDraft' | 'draftLocales'>;
7786
+ type LocalePublicationFields = Pick<EntryMetadata, 'localeStatus' | 'localeHasDraft' | 'draftLocales' | 'hasDraft'>;
7698
7787
  /**
7699
7788
  * Infer the TypeScript type of an entry from a content type definition: every field it declares,
7700
7789
  * directly or through fieldsets, typed as a read returns it (`INV-SS-TYPES-INFERRED`), plus