@jskit-ai/agent-docs 0.1.246 → 0.1.248

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.
Files changed (57) hide show
  1. package/guide/agent/app-extras/assistant-conversation.md +10 -4
  2. package/guide/agent/app-extras/realtime.md +8 -4
  3. package/guide/agent/framework/translation.md +227 -0
  4. package/guide/agent/index.md +1 -0
  5. package/package.json +1 -1
  6. package/patterns/feature-package/example/booking-engine/package.json +1 -1
  7. package/patterns/minimal-foundation/example/package.json +3 -3
  8. package/patterns/shell-foundation/example/package.json +4 -4
  9. package/patterns/shell-foundation/example/packages/main/package.json +1 -1
  10. package/reference/autogen/KERNEL_MAP.md +29 -2
  11. package/reference/autogen/PATTERN_INDEX.md +37 -37
  12. package/reference/autogen/packages/assistant-core.md +22 -4
  13. package/reference/autogen/packages/assistant-runtime.md +15 -0
  14. package/reference/autogen/packages/assistant-voice.md +13 -5
  15. package/reference/autogen/packages/auth-core.md +14 -1
  16. package/reference/autogen/packages/auth-provider-local-core.md +1 -1
  17. package/reference/autogen/packages/auth-web.md +12 -2
  18. package/reference/autogen/packages/connector-google-calendar.md +6 -1
  19. package/reference/autogen/packages/connectors-catalog.md +19 -4
  20. package/reference/autogen/packages/connectors-core.md +5 -1
  21. package/reference/autogen/packages/connectors-web.md +5 -0
  22. package/reference/autogen/packages/database-runtime.md +8 -1
  23. package/reference/autogen/packages/http-runtime.md +6 -3
  24. package/reference/autogen/packages/http-web.md +27 -18
  25. package/reference/autogen/packages/kernel.md +76 -7
  26. package/reference/autogen/packages/mobile-capacitor.md +6 -1
  27. package/reference/autogen/packages/payments-core.md +2 -2
  28. package/reference/autogen/packages/payments-web.md +8 -0
  29. package/reference/autogen/packages/realtime.md +6 -0
  30. package/reference/autogen/packages/rewarded-web.md +5 -0
  31. package/reference/autogen/packages/shell-web.md +13 -3
  32. package/reference/autogen/packages/uploads-image-web.md +5 -0
  33. package/reference/autogen/packages/uploads-runtime.md +1 -1
  34. package/reference/autogen/packages/users-core.md +1 -0
  35. package/reference/autogen/packages/users-web.md +22 -0
  36. package/reference/autogen/packages/workspaces-core.md +10 -3
  37. package/reference/autogen/packages/workspaces-web.md +4 -0
  38. package/reference/autogen/tooling/jskit-catalog.md +28 -0
  39. package/skills/jskit/SKILL.md +3 -3
  40. package/skills/jskit/references/pattern-index.md +37 -37
  41. package/skills/jskit/references/patterns/app/minimal-foundation/example/package.json +3 -3
  42. package/skills/jskit/references/patterns/app/shell-foundation/example/package.json +4 -4
  43. package/skills/jskit/references/patterns/app/shell-foundation/example/packages/main/package.json +1 -1
  44. package/skills/jskit/references/patterns/auth/accounts-hub/example/package.json +2 -2
  45. package/skills/jskit/references/patterns/auth/oidc-sign-in/example/package.json +2 -2
  46. package/skills/jskit/references/patterns/auth/supabase-auth/example/package.json +1 -1
  47. package/skills/jskit/references/patterns/connectors/calendar-cli/example/package.json +4 -4
  48. package/skills/jskit/references/patterns/crud/json-api-resource-package/example/packages/books/package.json +2 -2
  49. package/skills/jskit/references/patterns/database/mysql-application/example/package.json +1 -1
  50. package/skills/jskit/references/patterns/database/postgres-application/example/package.json +1 -1
  51. package/skills/jskit/references/patterns/realtime/realtime-application/example/package.json +2 -2
  52. package/skills/jskit/references/patterns/server/feature-package/example/booking-engine/package.json +1 -1
  53. package/skills/jskit/references/patterns/users/account-settings/PATTERN.md +10 -0
  54. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users/package.json +2 -2
  55. package/skills/jskit/references/patterns/users/user-administration-server/example/packages/users-workspace/package.json +3 -3
  56. package/skills/jskit/references/patterns/workspaces/workspace-server/PATTERN.md +7 -0
  57. package/skills/jskit/references/translation.md +227 -0
@@ -19,7 +19,7 @@ Exports
19
19
  - `googleCalendarProvider`
20
20
  Local functions
21
21
  - `queryUrl(path, input)`
22
- - `invalid(message)`
22
+ - `invalid(message, codes)`
23
23
  - `validateEventTime(point)`
24
24
  - `validateRecurrence(body)`
25
25
  - `validAttendee(person)`
@@ -32,6 +32,11 @@ Exports
32
32
  - `googleCalendarDefinition`
33
33
  - `googleScope(name)`
34
34
 
35
+ ### `src/shared/english-definition.js`
36
+ Exports
37
+ - `googleCalendarDefinition`
38
+ - `googleScope`
39
+
35
40
  ### patterns
36
41
 
37
42
  ### `patterns/calendar-cli/example/knexfile.js`
@@ -316,7 +316,7 @@ Exports
316
316
  - `googleAdsSearchOperations`
317
317
  - `createGoogleAdsSearchService({ connections, configuration, context, integrationId })`
318
318
  Local functions
319
- - `error(message)`
319
+ - `error(message, codes)`
320
320
  - `hash(value)`
321
321
  - `requestOperation(fields, build, validateResult)`
322
322
  - `mutated(result)`
@@ -378,7 +378,7 @@ Exports
378
378
  - `googleScope(name)`
379
379
  - `googleOperation(scopes, fields, request, validateResult)`
380
380
  - `googleBatchRequests(requests, product)`
381
- - `inputInvalid(message, statusCode = 422)`
381
+ - `inputInvalid(message, { statusCode = 422, ...codes } = {})`
382
382
  - `googleRead(scopes, fields, destination, validateResult)`
383
383
  - `googleProvider(definition, origin, checkOperation, operations)`
384
384
  - `googleFileVerification(get, field)`
@@ -802,7 +802,7 @@ Local functions
802
802
  - `serializeNativeJson(value)`
803
803
  - `guid(value)`
804
804
  - `requestPath(request, index)`
805
- - `sameRecord(matches, message)`
805
+ - `sameRecord(matches, message, codes)`
806
806
  - `cursor(value)`
807
807
  - `bookingDirectoryOperation(kind)`
808
808
  - `validContact(value)`
@@ -828,7 +828,7 @@ Exports
828
828
  - `createWizScanner({ configuration, authorize, resolveReference, resolveScanTarget, executable, environment = { PATH: process.env.PATH || "/usr/bin:/bin" }, timeoutMs = 600_000, maxReportBytes = 16 * 1024 * 1024 })`
829
829
  Local functions
830
830
  - `object(value)`
831
- - `failure(code, message, statusCode = 502)`
831
+ - `failure(code, message, statusCode = 502, codes = {})`
832
832
  - `runCli(executable, args, options, signal, timeoutMs)`
833
833
 
834
834
  ### `src/server/woocommerce.js`
@@ -1029,6 +1029,21 @@ Exports
1029
1029
  - `resendDefinition`
1030
1030
  - `firecrawlDefinition`
1031
1031
 
1032
+ ### `src/shared/english-ai.js`
1033
+ Exports
1034
+ - `aiCatalogue`
1035
+ - `getAiModel`
1036
+ - `listAiModels`
1037
+
1038
+ ### `src/shared/english-definitions.js`
1039
+ Exports
1040
+ - `createCanvaClientMetadata`
1041
+ - `validN8nOAuthDiscovery`
1042
+
1043
+ ### `src/shared/english-texts.js`
1044
+ Exports
1045
+ - `englishTexts`
1046
+
1032
1047
  ### `src/shared/figma.js`
1033
1048
  Exports
1034
1049
  - `figmaDefinition`
@@ -19,7 +19,7 @@ Exports
19
19
  - `createConnectionService({ configuration, providers, resolveReference, store, authorize, executionMode = "application", fetchImpl = globalThis.fetch, now = Date.now })`
20
20
  Local functions
21
21
  - `publicConnection(connection)`
22
- - `requireOperationScope(operation, scopes, message)`
22
+ - `requireOperationScope(operation, scopes, message, { messageCode })`
23
23
  - `operationRequest(operation, input, settings, providerData)`
24
24
  - `validateCallbackUrl(value)`
25
25
  - `connectionMatches(connection, integration, providerId, registration)`
@@ -73,6 +73,8 @@ Exports
73
73
  Exports
74
74
  - `DEFAULT_GRANT_TYPE`
75
75
  - `DEFAULT_TOKEN_ENDPOINT_AUTH_METHOD`
76
+ - `MESSAGE_KEY_SOURCE`
77
+ - `createEnglishProviderTexts(catalog)`
76
78
  - `registrationGrantType(record)`
77
79
  - `registrationClientAuthentication(record)`
78
80
  - `providerGrantTypes(provider)`
@@ -88,6 +90,8 @@ Exports
88
90
  - `IntegrationConfigurationError`
89
91
  - `parseIntegrationConfiguration(text, options)`
90
92
  - `validateIntegrationConfiguration(input, { providers = [], allowUnknownProviders = false } = {})`
93
+ Local functions
94
+ - `schemaFieldErrors(error, fallback, prefix = "")`
91
95
 
92
96
  ### migrations
93
97
 
@@ -14,6 +14,10 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
+ ### `src/client/i18n.js`
18
+ Exports
19
+ - `useJskitText`
20
+
17
21
  ### `src/client/index.js`
18
22
  Exports
19
23
  - `IntegrationConfigurationFields`
@@ -26,6 +30,7 @@ Local functions
26
30
  - `accountModeForGrant(grant, settings, accountMode)`
27
31
  - `settingValue(field)`
28
32
  - `settingHint(field)`
33
+ - `settingItems(field)`
29
34
  - `settingErrors(field)`
30
35
  - `editAssistantPolicy(changes)`
31
36
  - `editIntegration(changes)`
@@ -56,6 +56,7 @@ Local functions
56
56
 
57
57
  ### `src/shared/dateUtils.js`
58
58
  Exports
59
+ - `normalizeDateInput(value)`
59
60
  - `toIsoString(value)`
60
61
  - `toInsertDateTime(dateLike, fallback = new Date())`
61
62
  - `toDatabaseDateTimeUtc(value)`
@@ -63,7 +64,6 @@ Exports
63
64
  - `toJsonTime(value, { temporalPrecision } = {})`
64
65
  - `toJsonDateTime(value, { temporalPrecision } = {})`
65
66
  Local functions
66
- - `normalizeDateInput(value)`
67
67
  - `toDateOrThrow(value)`
68
68
  - `pad(value, size = 2)`
69
69
  - `requireValidDateParts(year, month, day)`
@@ -88,6 +88,7 @@ Local functions
88
88
 
89
89
  ### `src/shared/index.js`
90
90
  Exports
91
+ - `normalizeDateInput`
91
92
  - `toIsoString`
92
93
  - `toInsertDateTime`
93
94
  - `toDatabaseDateTimeUtc`
@@ -111,9 +112,11 @@ Exports
111
112
  - `normalizeNullableString`
112
113
  - `normalizeDbRecordId`
113
114
  - `resolveInsertedRecordId`
115
+ - `parseJsonValue`
114
116
  - `toDbJson`
115
117
  - `runInTransaction`
116
118
  - `createWithTransaction`
119
+ - `lockScopedRecordId`
117
120
 
118
121
  ### `src/shared/repositoryOptions.js`
119
122
  Exports
@@ -125,9 +128,13 @@ Exports
125
128
  - `normalizeNullableString(value, { trim = true } = {})`
126
129
  - `normalizeDbRecordId(value, { fallback = null } = {})`
127
130
  - `resolveInsertedRecordId(insertResult, { fallback = null } = {})`
131
+ - `parseJsonValue(value, fallback = null, options = {})`
128
132
  - `toDbJson(value)`
129
133
  - `runInTransaction(knex, callback)`
130
134
  - `createWithTransaction(knex)`
135
+ - `lockScopedRecordId({ trx, tableName, recordId, scopeId, idColumn = "id", scopeColumn = "workspace_id" } = {})`
136
+ Local functions
137
+ - `requireSqlIdentifier(value, label)`
131
138
 
132
139
  ### `src/shared/transactionManager.js`
133
140
  Exports
@@ -42,7 +42,7 @@ Local functions
42
42
  Exports
43
43
  - `normalizeFieldErrors`
44
44
  - `resolveFieldErrors`
45
- - `createValidationFailure({ error = "Validation failed.", code = "validation_failed", fieldErrors = {} } = {})`
45
+ - `createValidationFailure({ error = "Validation failed.", code = "validation_failed", fieldErrors = {}, fieldErrorCodes = null } = {})`
46
46
 
47
47
  ### `src/shared/clientRuntime/client.js`
48
48
  Exports
@@ -94,6 +94,7 @@ Local functions
94
94
  - `simplifyResourceObject(resource = {}, options = {})`
95
95
  - `assertPrimaryDataType(resource = {}, expectedType = "")`
96
96
  - `resolveCollectionPageMeta(document = {})`
97
+ - `decodeJsonApiErrorFields(payload = {})`
97
98
 
98
99
  ### `src/shared/clientRuntime/retry.js`
99
100
  Exports
@@ -226,7 +227,7 @@ Exports
226
227
  - `createJsonApiResourceRouteTransport({ type = "", requestType = "", responseType = "", query = null, allowBodyId = false, successKind = "record", pointerPrefix = "/data/attributes", mapRequestRelationships = null, getRecordType = null, getRecordId = null, getRecordAttributes = null, getRecordRelationships = null, getRecordLinks = null, getRecordMeta = null, getIncluded = null, getDocumentLinks = null, getDocumentMeta = null, getCollectionItems = null } = {})`
227
228
  - `createJsonApiResourceRouteContract({ type = "", requestType = "", responseType = "", body = null, query = null, output = null, outputKind = "record", successStatus = 200, includeValidation400 = false, allowSparseFields = false, allowBodyId = false, pointerPrefix = "/data/attributes", bodyAttributeExcludeKeys = [], outputAttributeExcludeKeys = [], bodyRelationshipEntries = [], outputRelationshipEntries = [], getRecordType = null, getRecordId = null, getRecordAttributes = null, getRecordRelationships = null, getRecordLinks = null, getRecordMeta = null, getIncluded = null, getDocumentLinks = null, getDocumentMeta = null, getCollectionItems = null, mapRequestRelationships = null } = {})`
228
229
  Local functions
229
- - `createJsonApiTransportError(statusCode, message, code)`
230
+ - `createJsonApiTransportError(statusCode, message, code, params = {})`
230
231
  - `resolveRouteType(type = "")`
231
232
  - `resolveRouteTypes(value = {})`
232
233
  - `resolveEmbeddedAttributesTransportSchema(definition, { context = "JSON:API resource", defaultMode = "replace", removeId = false, removeKeys = [], allowSparseFields = false } = {})`
@@ -246,7 +247,7 @@ Exports
246
247
  - `JSON_API_CONTENT_TYPE`
247
248
  - `resolveJsonApiTransportTypes({ type = "", requestType = "", responseType = "" } = {}, { context = "JSON:API transport" } = {})`
248
249
  - `createJsonApiDocument({ data = undefined, included = undefined, links = undefined, meta = undefined, errors = undefined } = {})`
249
- - `createJsonApiErrorDocumentFromFailure({ statusCode = 500, code = "", message = "", transactionOutcome, fieldErrors = {}, validationIssues = [], validationContext = "", pointerPrefix = "/data/attributes" } = {})`
250
+ - `createJsonApiErrorDocumentFromFailure({ statusCode = 500, code = "", message = "", params = {}, messageCode = "", messageParams = {}, transactionOutcome, fieldErrors = {}, fieldErrorCodes = {}, validationIssues = [], validationIssueCodes = [], validationContext = "", pointerPrefix = "/data/attributes" } = {})`
250
251
  - `createJsonApiErrorObject({ status = "", code = "", title = "", detail = "", source = undefined, links = undefined, meta = undefined } = {})`
251
252
  - `createJsonApiResourceObject({ type = "", id = null, attributes = undefined, relationships = undefined, links = undefined, meta = undefined } = {})`
252
253
  - `isJsonApiCollectionDocument(payload = {})`
@@ -254,6 +255,7 @@ Exports
254
255
  - `isJsonApiErrorDocument(payload = {})`
255
256
  - `isJsonApiResourceDocument(payload = {})`
256
257
  - `isJsonContentType(contentType = "")`
258
+ - `normalizeCodedEntry(entry)`
257
259
  - `normalizeJsonApiDocument(payload = {})`
258
260
  - `normalizeJsonApiResourceObject(resource = {})`
259
261
  - `simplifyJsonApiDocument(payload = {})`
@@ -266,6 +268,7 @@ Local functions
266
268
  - `escapeJsonPointerSegment(value = "")`
267
269
  - `resolveValidationFieldName(issue = {})`
268
270
  - `resolveJsonApiValidationSource(issue = {}, validationContext = "")`
271
+ - `createJsonApiErrorMeta({ transactionOutcome, params, messageCode, messageParams, fieldErrorCode })`
269
272
  - `simplifyJsonApiResourceObject(resource = {})`
270
273
 
271
274
  ### `src/shared/validators/operationValidation.js`
@@ -40,6 +40,7 @@ Local functions
40
40
  - `execute(action = {})`
41
41
  - `isActionDisabled(action = {})`
42
42
  - `isActionExecuting(action = {})`
43
+ - `actionLabel(action = {})`
43
44
 
44
45
  ### `src/client/components/CrudListDateFilterControl.vue`
45
46
  Exports
@@ -57,7 +58,8 @@ Exports
57
58
  - None
58
59
  Local functions
59
60
  - `optionItems(filter = {})`
60
- - `placeholder(filter = {}, fallback = "")`
61
+ - `filterLabel(filter = {}, key = "", params = {})`
62
+ - `placeholder(filter = {}, fallbackKey = "")`
61
63
 
62
64
  ### `src/client/components/CrudListFilterSurface.vue`
63
65
  Exports
@@ -71,6 +73,7 @@ Exports
71
73
  - None
72
74
  Local functions
73
75
  - `isRowActionLoading(action = {})`
76
+ - `rowActionLabel(action = {})`
74
77
  - `isRowActionDisabled(action = {})`
75
78
  - `runRowAction(action = {})`
76
79
 
@@ -173,7 +176,7 @@ Exports
173
176
  - `resolveLookupSelectedValues(filter = {}, rawValue = undefined)`
174
177
  - `createLookupOptionsFromItems(items = [], filter = {}, labelResolver = null)`
175
178
  - `mergeSelectedLookupOptions(options = [], selectedValues = [], cachedOptions = new Map())`
176
- - `resolveLookupOptionLabel(options = [], cachedOptions = new Map(), value = "", fallback = "Option")`
179
+ - `resolveLookupOptionLabel(options = [], cachedOptions = new Map(), value = "", fallback = "")`
177
180
  Local functions
178
181
  - `createLookupOptionFromItem(item = {}, filter = {}, labelResolver = null)`
179
182
 
@@ -197,7 +200,7 @@ Local functions
197
200
 
198
201
  ### `src/client/composables/records/useAddEdit.js`
199
202
  Exports
200
- - `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.add-edit", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, validationFeedback = true, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null } = {})`
203
+ - `useAddEdit({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", resource = null, apiSuffix = "", queryKeyFactory = null, viewPermissions = [], savePermissions = [], readMethod = "GET", readEnabled = true, writeMethod = "PATCH", client = null, transport = null, requestRecovery = null, requestRecoveryLabel = t("jskit.http.resource.label"), placementSource = "http-web.add-edit", fallbackLoadError = t("jskit.http.resource.loadFailed"), fallbackSaveError = "", fieldErrorKeys = [], clearOnRouteChange = true, model, input, mapLoadedToModel, buildRawPayload, buildSavePayload, onSaveSuccess, validationFeedback = true, requestQueryParams = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", viewUrlTemplate = "", listUrlTemplate = "", saveRecordIdSelector = null, messages = {}, realtime = null } = {})`
201
204
 
202
205
  ### `src/client/composables/records/useCrudAddEdit.js`
203
206
  Exports
@@ -219,11 +222,11 @@ Exports
219
222
 
220
223
  ### `src/client/composables/records/useList.js`
221
224
  Exports
222
- - `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "http-web.list", fallbackLoadError = "Unable to load list.", initialPageParam = null, getNextPageParam, selectItems, client = null, transport = null, requestOptions, queryOptions, requestRecovery, requestRecoveryLabel = "List", realtime = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, routeQueryValueResolvers = null, requestQueryParams = null, requestFieldsets = null, syncToRoute = false } = {})`
225
+ - `useList({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readEnabled = true, placementSource = "http-web.list", fallbackLoadError = t("jskit.http.list.loadFailed"), initialPageParam = null, getNextPageParam, selectItems, client = null, transport = null, requestOptions, queryOptions, requestRecovery, requestRecoveryLabel = t("jskit.http.list.label"), realtime = null, recordIdParam = "recordId", recordIdSelector = null, viewUrlTemplate = "", editUrlTemplate = "", search = null, queryParams = null, routeQueryValueResolvers = null, requestQueryParams = null, requestFieldsets = null, syncToRoute = false } = {})`
223
226
 
224
227
  ### `src/client/composables/records/useView.js`
225
228
  Exports
226
- - `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, client = null, transport = null, requestRecovery = null, requestRecoveryLabel = "Resource", placementSource = "http-web.view", fallbackLoadError = "Unable to load resource.", notFoundStatuses = [404], notFoundMessage = "Record not found.", model, mapLoadedToModel, requestQueryParams = null, requestFieldsets = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined } = {})`
229
+ - `useView({ resource = null, ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", queryKeyFactory = null, viewPermissions = [], readMethod = "GET", readEnabled = true, client = null, transport = null, requestRecovery = null, requestRecoveryLabel = t("jskit.http.resource.label"), placementSource = "http-web.view", fallbackLoadError = t("jskit.http.resource.loadFailed"), notFoundStatuses = [404], notFoundMessage = t("jskit.http.crud.recordNotFound"), model, mapLoadedToModel, requestQueryParams = null, requestFieldsets = null, recordIdParam = "recordId", routeParams = null, routeRecordId = null, apiUrlTemplate = "", listUrlTemplate = "", editUrlTemplate = "", includeRecordIdInQueryKey = false, realtime = undefined } = {})`
227
230
 
228
231
  ### `src/client/composables/runtime/addEditUiRuntime.js`
229
232
  Exports
@@ -255,7 +258,7 @@ Local functions
255
258
 
256
259
  ### `src/client/composables/runtime/operationValidationHelpers.js`
257
260
  Exports
258
- - `validateOperationInput({ input, rawPayload = {}, fieldBag = null, feedback = null, validationMessage = "Validation failed." } = {})`
261
+ - `validateOperationInput({ input, rawPayload = {}, fieldBag = null, feedback = null, validationMessage = "" } = {})`
259
262
 
260
263
  ### `src/client/composables/runtime/useAddEditCore.js`
261
264
  Exports
@@ -269,7 +272,7 @@ Exports
269
272
  Exports
270
273
  - `buildEndpointReadRequestOptions({ method = "GET", query = null, transport = null } = {})`
271
274
  - `buildEndpointWriteRequestOptions({ method = "PATCH", body = undefined, options = null, transport = null } = {})`
272
- - `useEndpointResource({ queryKey, path = "", enabled = true, client = null, readMethod = "GET", writeMethod = "PATCH", readQuery = null, transport = null, refreshOnPull = false, realtime = null, queryOptions = null, mutationOptions = null, requestRecovery = null, requestRecoveryLabel = "Request", fallbackLoadError = "Unable to load resource.", fallbackSaveError = "Unable to save resource." } = {})`
275
+ - `useEndpointResource({ queryKey, path = "", enabled = true, client = null, readMethod = "GET", writeMethod = "PATCH", readQuery = null, transport = null, refreshOnPull = false, realtime = null, queryOptions = null, mutationOptions = null, requestRecovery = null, // No label: shell-web's request recovery names the app. requestRecoveryLabel = "", fallbackLoadError = "jskit.http.resource.loadFailed", fallbackSaveError = "jskit.http.resource.saveFailed" } = {})`
273
276
  Local functions
274
277
  - `resolveRequestQuery(value = null)`
275
278
 
@@ -281,7 +284,7 @@ Exports
281
284
  ### `src/client/composables/runtime/useListCore.js`
282
285
  Exports
283
286
  - `buildListRequestOptions({ requestOptions = null, transport = null, pageParam = null } = {})`
284
- - `useListCore({ queryKey, path = "", enabled = true, client = null, transport = null, initialPageParam = null, getNextPageParam, selectItems, requestOptions = null, queryOptions = null, requestRecovery = null, requestRecoveryLabel = "List", fallbackLoadError = "Unable to load list." } = {})`
287
+ - `useListCore({ queryKey, path = "", enabled = true, client = null, transport = null, initialPageParam = null, getNextPageParam, selectItems, requestOptions = null, queryOptions = null, requestRecovery = null, requestRecoveryLabel = t("jskit.http.list.label"), fallbackLoadError = t("jskit.http.list.loadFailed") } = {})`
285
288
  Local functions
286
289
  - `resolveRequestOptionsObject(value = null)`
287
290
  - `resolveListRequestMethod(requestOptions = null)`
@@ -292,7 +295,7 @@ Exports
292
295
 
293
296
  ### `src/client/composables/runtime/useViewCore.js`
294
297
  Exports
295
- - `useViewCore({ resource, model, canView, mapLoadedToModel, notFoundStatuses = [404], notFoundMessage = "Record not found." } = {})`
298
+ - `useViewCore({ resource, model, canView, mapLoadedToModel, notFoundStatuses = [404], notFoundMessage = "" } = {})`
296
299
  Local functions
297
300
  - `normalizeStatusList(value)`
298
301
 
@@ -302,8 +305,9 @@ Exports
302
305
 
303
306
  ### `src/client/composables/support/errorMessageHelpers.js`
304
307
  Exports
305
- - `toQueryErrorMessage(error, fallbackMessage = "", defaultMessage = "Request failed.")`
306
- - `toUiErrorMessage(error, fallbackMessage = "", defaultMessage = "Request failed.")`
308
+ - `toQueryErrorMessage(error, fallbackMessage = "", defaultMessage = "")`
309
+ - `toUiErrorMessage(error, fallbackMessage = "", defaultMessage = "")`
310
+ - `toUiFieldErrors(error)`
307
311
 
308
312
  ### `src/client/composables/support/listQueryParamSupport.js`
309
313
  Exports
@@ -409,11 +413,11 @@ Local functions
409
413
 
410
414
  ### `src/client/composables/useCommand.js`
411
415
  Exports
412
- - `useCommand({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", runPermissions = [], writeMethod = "POST", client = null, resource: commandResource = null, transport = null, placementSource = "http-web.command", fallbackRunError = "Unable to complete action.", fieldErrorKeys = [], clearOnRouteChange = true, model, input, buildRawPayload, buildCommandPayload, buildCommandOptions, onRunSuccess, onRunError, suppressSuccessMessage = false, messages = {}, realtime = null } = {})`
416
+ - `useCommand({ ownershipFilter = ROUTE_VISIBILITY_WORKSPACE, surfaceId = "", access = "auto", apiSuffix = "", runPermissions = [], writeMethod = "POST", client = null, resource: commandResource = null, transport = null, placementSource = "http-web.command", fallbackRunError = "jskit.http.feedback.actionFailed", fieldErrorKeys = [], clearOnRouteChange = true, model, input, buildRawPayload, buildCommandPayload, buildCommandOptions, onRunSuccess, onRunError, suppressSuccessMessage = false, messages = {}, realtime = null } = {})`
413
417
 
414
418
  ### `src/client/composables/useCrudAddEditScreen.js`
415
419
  Exports
416
- - `useCrudAddEditScreen({ screen = null, mode = "new", title = "", subtitle = "", saveLabel = "Save", cancelTo = "", resource = null, operationName = "", formFields = [], addEditOptions = {}, saveSuccess = {}, fieldBinding = null, createModel = null, buildPayload = null, mapPayloadToModel = null, input = null, preserveCancelQuery = false } = {})`
420
+ - `useCrudAddEditScreen({ screen = null, mode = "new", title = "", subtitle = "", saveLabel = "", cancelTo = "", resource = null, operationName = "", formFields = [], addEditOptions = {}, saveSuccess = {}, fieldBinding = null, createModel = null, buildPayload = null, mapPayloadToModel = null, input = null, preserveCancelQuery = false } = {})`
417
421
  Local functions
418
422
  - `normalizeProvidedScreen(screen = null)`
419
423
 
@@ -421,7 +425,7 @@ Local functions
421
425
  Exports
422
426
  - `requireCrudDeleteOperation(resource = null)`
423
427
  - `resolveDeleteApiSuffix(screen, apiUrlTemplate = "")`
424
- - `useCrudDeleteAction({ screen = null, resource = null, resourceNamespace = "", apiUrlTemplate = "", access = "auto", client = null, router: routerOverride = null, fallbackDeleteError = "Unable to delete record." } = {})`
428
+ - `useCrudDeleteAction({ screen = null, resource = null, resourceNamespace = "", apiUrlTemplate = "", access = "auto", client = null, router: routerOverride = null, fallbackDeleteError = t("jskit.http.crud.delete.failed") } = {})`
425
429
  Local functions
426
430
  - `requireCrudViewScreen(screen = null)`
427
431
  - `resolveListLocation(screen)`
@@ -453,7 +457,7 @@ Local functions
453
457
 
454
458
  ### `src/client/composables/useCrudListParentTitle.js`
455
459
  Exports
456
- - `useCrudListParentTitle({ listRuntime = null, resource = {}, recordIdParam = "recordId", queryKeyPrefix = ["http-web", "crud-list-parent-title"], placementSource = "http-web.crud-list-parent-title", fallbackLoadError = "Unable to load parent record.", notFoundMessage = "Parent record not found.", route = null, viewRuntimeFactory = useView } = {})`
460
+ - `useCrudListParentTitle({ listRuntime = null, resource = {}, recordIdParam = "recordId", queryKeyPrefix = ["http-web", "crud-list-parent-title"], placementSource = "http-web.crud-list-parent-title", fallbackLoadError = t("jskit.http.crud.parent.loadFailed"), notFoundMessage = t("jskit.http.crud.parent.notFound"), route = null, viewRuntimeFactory = useView } = {})`
457
461
  Local functions
458
462
  - `normalizeQueryKeyPrefix(value = [])`
459
463
 
@@ -466,7 +470,7 @@ Local functions
466
470
  ### `src/client/composables/useCrudListScreen.js`
467
471
  Exports
468
472
  - `__testables`
469
- - `useCrudListScreen({ client = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], listRowActions = [], syntheticRows = null, routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), requestQueryParams = null, requestFieldsets = null, readEnabled = true, requestRecoveryLabel = "Records", fallbackLoadError = "Unable to load records." } = {})`
473
+ - `useCrudListScreen({ client = null, resource = null, resourceNamespace = "resource", apiSuffix = "", recordIdParam = "recordId", recordIdSelector = null, titleFallbackFieldKey = "", viewUrlTemplate = "", editUrlTemplate = "", newUrlTemplate = "", recordChangedEvents = [], listFilters = {}, listBulkActions = [], listRowActions = [], syntheticRows = null, routeQueryBlacklist = Object.freeze(["include", "cursor", "limit"]), requestQueryParams = null, requestFieldsets = null, readEnabled = true, requestRecoveryLabel = t("jskit.http.crud.records"), fallbackLoadError = t("jskit.http.crud.list.loadFailed") } = {})`
470
474
  Local functions
471
475
  - `buildCrudListActionContext(records, client)`
472
476
  - `formatCrudListCardValue(value)`
@@ -479,11 +483,11 @@ Local functions
479
483
 
480
484
  ### `src/client/composables/useCrudViewScreen.js`
481
485
  Exports
482
- - `useCrudViewScreen({ resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", requestQueryParams = null, requestFieldsets = null, readEnabled = true, queryKeyFactory = null, requestRecoveryLabel = "Record", fallbackLoadError = "Unable to load record.", notFoundMessage = "Record not found." } = {})`
486
+ - `useCrudViewScreen({ resource = null, resourceNamespace = "resource", apiUrlTemplate = "", recordIdParam = "recordId", titleFallbackFieldKey = "", listUrlTemplate = "", editUrlTemplate = "", recordChangedEvent = "", requestQueryParams = null, requestFieldsets = null, readEnabled = true, queryKeyFactory = null, requestRecoveryLabel = t("jskit.http.crud.record"), fallbackLoadError = t("jskit.http.crud.view.loadFailed"), notFoundMessage = t("jskit.http.crud.recordNotFound") } = {})`
483
487
 
484
488
  ### `src/client/composables/usePagedCollection.js`
485
489
  Exports
486
- - `usePagedCollection({ queryKey, enabled = true, initialPageParam = null, queryFn, getNextPageParam = defaultGetNextPageParam, selectItems = defaultSelectItems, dedupeBy = null, queryOptions = null, fallbackLoadError = "Unable to load list." } = {})`
490
+ - `usePagedCollection({ queryKey, enabled = true, initialPageParam = null, queryFn, getNextPageParam = defaultGetNextPageParam, selectItems = defaultSelectItems, dedupeBy = null, queryOptions = null, fallbackLoadError = t("jskit.http.list.loadFailed") } = {})`
487
491
  - `trimInfinitePagesToFirst(data = null)`
488
492
  Local functions
489
493
  - `defaultSelectItems(page)`
@@ -522,6 +526,11 @@ Exports
522
526
  - `CRUD_LIST_FILTER_PRESENCE_OPTIONS`
523
527
  - `defineCrudListFilters`
524
528
 
529
+ ### `src/client/i18n.js`
530
+ Exports
531
+ - `createTextError`
532
+ - `useJskitText`
533
+
525
534
  ### `src/client/index.js`
526
535
  Exports
527
536
  - `CrudAddEditScreen`
@@ -41,6 +41,20 @@ Local functions
41
41
  - `resolveProviderDependencies(provider, capabilities)`
42
42
  - `normalizeProviderOutputs(provider, value)`
43
43
 
44
+ ### `shared/i18n/index.js`
45
+ Exports
46
+ - `catalogMessage(catalog, key = "")`
47
+ - `flattenCatalog(catalog, prefix = "")`
48
+ - `formatMessage(template = "", params = {})`
49
+ - `mergeCatalogs(...catalogs)`
50
+ - `messageKeyForCode(code = "")`
51
+ - `messageParams(template = "")`
52
+ Local functions
53
+ - `isRecord(value)`
54
+ - `placeholderEnd(template, start)`
55
+ - `parseMessage(template = "")`
56
+ - `pluralChoice(count, choices)`
57
+
44
58
  ### `shared/index.js`
45
59
  Exports
46
60
  - `resolveLinkPath`
@@ -108,6 +122,8 @@ Exports
108
122
  - `normalizeQueryToken(value, { fallback = "__none__" } = {})`
109
123
  - `normalizeObject(value, { fallback = {} } = {})`
110
124
  - `normalizeIfInSource(source, normalized, fieldName, normalizer = (value) => value)`
125
+ - `normalizeIfPresent(value, normalizer = (entry) => entry)`
126
+ - `normalizeOrNull(value, normalizer = (entry) => entry)`
111
127
  - `isRecord(value)`
112
128
  - `normalizeArray(value)`
113
129
  - `normalizeUniqueTextList(value, { acceptSingle = false } = {})`
@@ -299,7 +315,9 @@ Exports
299
315
  - `resolveSchemaTransportSchemaDefinition`
300
316
  - `executeJsonRestSchemaDefinition`
301
317
  - `buildSchemaValidationError`
318
+ - `codedFieldErrors`
302
319
  - `validateSchemaPayload`
320
+ - `resolveValidationIssueCode`
303
321
  - `RECORD_ID_PATTERN`
304
322
  - `recordIdSchema`
305
323
  - `nullableRecordIdSchema`
@@ -322,7 +340,8 @@ Local functions
322
340
  - `requireJsonRestSchemaInstance(schemaDefinition = null, { context = "schema definition.schema" } = {})`
323
341
  - `resolveJsonRestSchemaFieldMessages(schemaDefinition = null, fieldName = "")`
324
342
  - `resolveJsonRestSchemaParentFieldMessages(schemaDefinition = null, fieldName = "")`
325
- - `resolveJsonRestSchemaFieldErrorMessage(fieldName, entry, schemaDefinition = null)`
343
+ - `resolveFieldMessageOverride(messages, key)`
344
+ - `resolveJsonRestSchemaFieldError(fieldName, entry, schemaDefinition = null)`
326
345
 
327
346
  ### `shared/validators/mergeObjectSchemas.js`
328
347
  Exports
@@ -356,9 +375,15 @@ Local functions
356
375
 
357
376
  ### `shared/validators/schemaPayloadValidation.js`
358
377
  Exports
359
- - `buildSchemaValidationError({ message = "Schema validation failed.", fieldErrors = null, errors = null, cause, statusCode = null } = {})`
378
+ - `buildSchemaValidationError({ message = SCHEMA_VALIDATION_FAILED_MESSAGE, fieldErrors = null, fieldErrorCodes = null, errors = null, cause, statusCode = null } = {})`
379
+ - `codedFieldErrors(error)`
380
+ - `errorFieldErrors(error)`
360
381
  - `validateSchemaPayload(schemaDefinition, payload, { phase = "input", context = "schema definition", statusCode = null } = {})`
361
382
 
383
+ ### `shared/validators/validationIssueCodes.js`
384
+ Exports
385
+ - `resolveValidationIssueCode(issue = {})`
386
+
362
387
  ### client
363
388
 
364
389
  ### `client/appConfig.js`
@@ -376,12 +401,13 @@ Exports
376
401
  - `createAsyncModuleRecoveryState({ label = "App module", message = "", retry = null } = {})`
377
402
  - `dismissAsyncModuleRecovery(state)`
378
403
  - `dynamicImportErrorMessage(error = null, { label = "App module", stale = isDynamicImportError(error) } = {})`
379
- - `guardedReloadApp({ browserWindow = typeof window !== "undefined" ? window : null, fetchFn = typeof fetch === "function" ? fetch : null, state = null, label = "App", message = "The app cannot reload because the app server is not reachable. Restart the server, then click Retry or Reload." } = {})`
404
+ - `guardedReloadApp({ browserWindow = typeof window !== "undefined" ? window : null, fetchFn = typeof fetch === "function" ? fetch : null, state = null, label = "App", message = RELOAD_UNAVAILABLE.message, messageCode = message === RELOAD_UNAVAILABLE.message ? RELOAD_UNAVAILABLE.messageCode : "", messageParams = {} } = {})`
380
405
  - `installAsyncModuleRecoveryHandlers({ router = null, state, label = "App module", onNotify = null, windowObject = typeof window !== "undefined" ? window : null } = {})`
381
406
  - `isDynamicImportError(error = null)`
382
- - `notifyAsyncModuleLoadError(state, error = null, { label = "App module", message = "", retry = null, stale = isDynamicImportError(error) } = {})`
407
+ - `notifyAsyncModuleLoadError(state, error = null, { label = "App module", message = "", messageCode = "", messageParams = {}, retry = null, stale = isDynamicImportError(error) } = {})`
383
408
  Local functions
384
409
  - `errorText(error = null)`
410
+ - `dynamicImportErrorMessageCode(label, stale)`
385
411
 
386
412
  ### `client/componentInteraction.js`
387
413
  Exports
@@ -393,11 +419,39 @@ Exports
393
419
  Local functions
394
420
  - `normalizeComponentId(value)`
395
421
 
422
+ ### `client/i18n.js`
423
+ Exports
424
+ - `createTextError(keyOrMessage = "", params = {})`
425
+ - `registerJskitMessages(catalog = {})`
426
+ - `setJskitI18n(i18n = null)`
427
+ - `useJskitText()`
428
+ Local functions
429
+ - `registry()`
430
+ - `mergeEnglishIntoI18n()`
431
+ - `activeLocale()`
432
+ - `pluralOptions(params)`
433
+ - `t(key = "", params = {}, { locale } = {})`
434
+ - `hasMessage(key = "")`
435
+ - `text(value, options)`
436
+ - `codedMessage(code, params = {}, sentEnglish = "")`
437
+ - `serverMessage(source, fallback = "")`
438
+ - `fieldErrorMessages(error)`
439
+ - `validDate(value)`
440
+ - `formatDate(value, options)`
441
+ - `formatTime(value, options)`
442
+ - `formatDateTime(value, options)`
443
+ - `formatNumber(value, options)`
444
+ - `formatRelativeTime(value, { now = Date.now(), ...options } = {})`
445
+
396
446
  ### `client/index.js`
397
447
  Exports
398
448
  - `getClientAppConfig`
399
449
  - `resolveMobileConfig`
400
450
  - `resolveClientAssetMode`
451
+ - `createTextError`
452
+ - `registerJskitMessages`
453
+ - `setJskitI18n`
454
+ - `useJskitText`
401
455
  - `createAsyncModuleRecoveryState`
402
456
  - `dismissAsyncModuleRecovery`
403
457
  - `dynamicImportErrorMessage`
@@ -455,7 +509,7 @@ Exports
455
509
  - `resolveClientBootstrapDebugEnabled({ env = {}, debugEnabled = undefined, debugEnvKey = "VITE_JSKIT_CLIENT_DEBUG" } = {})`
456
510
  - `createClientBootstrapLogger({ env = {}, logger = console, debugEnabled = undefined, debugEnvKey = "VITE_JSKIT_CLIENT_DEBUG" } = {})`
457
511
  - `createSurfaceShellRouter({ createRouter, history, routes = [], surfaceRuntime, surfaceMode, fallbackRoute = null, notFoundComponent = null, guard = false, scrollBehavior = shellScrollBehavior } = {})`
458
- - `bootstrapClientShellApp({ createApp, rootComponent, appConfig = {}, appPlugins = [], pinia = null, queryClient = null, router, bootClientModules, surfaceRuntime, surfaceMode, env = {}, fallbackRoute = null, logger = console, createBootstrapLogger = null, debugEnabled = undefined, debugEnvKey = "VITE_JSKIT_CLIENT_DEBUG", debugMessage = "Client modules bootstrapped before router install.", onAfterModulesBootstrapped = null, onAfterRouterReady = null, mountSelector = "#app" } = {})`
512
+ - `bootstrapClientShellApp({ createApp, rootComponent, appConfig = {}, appPlugins = [], i18n = null, pinia = null, queryClient = null, router, bootClientModules, surfaceRuntime, surfaceMode, env = {}, fallbackRoute = null, logger = console, createBootstrapLogger = null, debugEnabled = undefined, debugEnvKey = "VITE_JSKIT_CLIENT_DEBUG", debugMessage = "Client modules bootstrapped before router install.", onAfterModulesBootstrapped = null, onAfterRouterReady = null, mountSelector = "#app" } = {})`
459
513
  Local functions
460
514
  - `installAppPlugins(app, appPlugins = [])`
461
515
  - `isSurfaceRootRecord(record)`
@@ -488,7 +542,8 @@ Exports
488
542
  - `bootInstalledClientModules(context = {})`
489
543
  - `CLIENT_BOOTSTRAP_VIRTUAL_ID`
490
544
  - `CLIENT_BOOTSTRAP_RESOLVED_ID`
491
- - `createVirtualModuleSource(clientModules = [])`
545
+ - `createVirtualModuleSource(clientModules = [], localePackageIds = [])`
546
+ - `resolveLocalePackageIds(installedPackages = [])`
492
547
  - `resolveClientOptimizeIncludeSpecifiers(clientModules = [], excludeSpecifiers = [])`
493
548
  - `resolveClientOptimizeExcludeSpecifiers(clientModules = [])`
494
549
  - `resolveCanonicalLocalPackageId(resolvedId, localPackage)`
@@ -590,6 +645,7 @@ Exports
590
645
  - `normalizeActionInput(definition, input)`
591
646
  - `normalizeActionOutput(definition, output)`
592
647
  Local functions
648
+ - `schemaFieldErrorDetails(error)`
593
649
  - `createActionValidationError({ status = 400, message = "Validation failed.", code = "ACTION_VALIDATION_FAILED", details, cause } = {})`
594
650
 
595
651
  ### `server/actions/registry.js`
@@ -645,8 +701,11 @@ Local functions
645
701
  - `hasHeaderValue(headers = {}, key = "")`
646
702
  - `hasRequestBody(headers = {})`
647
703
  - `resolveValidationFieldErrors(error)`
704
+ - `fieldErrorPayloadFields({ fieldErrors, fieldErrorCodes } = {})`
705
+ - `messageCodeFields(error, expose = true)`
706
+ - `hiddenServerErrorFields(code = "")`
648
707
  - `resolveRequestRouteTransport(request)`
649
- - `applyRouteTransportErrorResponse(reply, request, error, { statusCode = 500, normalizedErrorCode = "", message = error?.message, exposeDetails = true } = {})`
708
+ - `applyRouteTransportErrorResponse(reply, request, error, { statusCode = 500, normalizedErrorCode = "", message = error?.message, exposeDetails = true, messageFields = {} } = {})`
650
709
  - `resolveApiErrorStatus(error, code)`
651
710
  - `applyErrorHeaders(reply, error)`
652
711
 
@@ -738,6 +797,14 @@ Local functions
738
797
  - `isJsonValue(value, ancestors = new Set())`
739
798
  - `schemaCacheKey(schema)`
740
799
 
800
+ ### `server/i18n.js`
801
+ Exports
802
+ - `createServerI18n({ appRoot = "", catalogs = [] } = {})`
803
+ Local functions
804
+ - `loadAppTranslations(appRoot)`
805
+ - `appTranslations(appRoot)`
806
+ - `localeCandidates(locale = "")`
807
+
741
808
  ### `server/platform/index.js`
742
809
  Exports
743
810
  - `registerSurfaceRequestConstraint`
@@ -798,6 +865,8 @@ Exports
798
865
  - `DomainValidationError`
799
866
  - `ConflictError`
800
867
  - `NotFoundError`
868
+ Local functions
869
+ - `normalizeErrorParams(params)`
801
870
 
802
871
  ### `server/runtime/EventProvider.js`
803
872
  Exports
@@ -14,6 +14,11 @@ Use this on demand; do not load the full index at startup.
14
14
 
15
15
  ### src
16
16
 
17
+ ### `src/client/i18n.js`
18
+ Exports
19
+ - `createTextError`
20
+ - `useJskitText`
21
+
17
22
  ### `src/client/index.js`
18
23
  Exports
19
24
  - `MobileCapacitorClientProvider`
@@ -35,7 +40,7 @@ Exports
35
40
  - `isCapacitorApiRequestTarget(url = "")`
36
41
  - `resolveCapacitorAbsoluteHttpUrl(url = "", apiBaseUrl = "", messages = {})`
37
42
  Local functions
38
- - `parseAbsoluteHttpUrl(url = "", { apiBaseUrl = "", emptyUrlMessage = "URL is required.", missingApiBaseUrlMessage = "config.mobile.apiBaseUrl is required.", invalidApiBaseUrlMessage = "config.mobile.apiBaseUrl must be a valid absolute URL.", invalidApiBaseUrlProtocolMessage = "config.mobile.apiBaseUrl must use http or https.", invalidUrlProtocolMessage = "URL must use http or https." } = {})`
43
+ - `parseAbsoluteHttpUrl(url = "", { apiBaseUrl = "", emptyUrlMessage = "jskit.mobile.apiRequest.urlRequired", missingApiBaseUrlMessage = "jskit.mobile.apiRequest.apiBaseUrlRequired", invalidApiBaseUrlMessage = "jskit.mobile.apiRequest.apiBaseUrlInvalid", invalidApiBaseUrlProtocolMessage = "jskit.mobile.apiRequest.apiBaseUrlProtocol", invalidUrlProtocolMessage = "jskit.mobile.apiRequest.urlProtocol" } = {})`
39
44
  - `normalizeFetchInput(input = "")`
40
45
 
41
46
  ### `src/client/runtime/globalCapacitorAppAdapter.js`
@@ -58,7 +58,7 @@ Exports
58
58
  - `createPaymentService({ store, configuration, clock = Date.now })`
59
59
  - `PaymentError`
60
60
  Local functions
61
- - `fail(code, message, status)`
61
+ - `fail(code, message, status, options)`
62
62
  - `reference(value)`
63
63
  - `units(value)`
64
64
  - `timestamp(value)`
@@ -78,7 +78,7 @@ Local functions
78
78
  Exports
79
79
  - `validatePaymentConfiguration(document)`
80
80
  Local functions
81
- - `configurationError(message, fieldErrors)`
81
+ - `configurationError(message, fieldErrors, { messageCode, messageParams = {} })`
82
82
 
83
83
  ### migrations
84
84
 
@@ -18,12 +18,20 @@ Use this on demand; do not load the full index at startup.
18
18
  Exports
19
19
  - None
20
20
  Local functions
21
+ - `historyTitle(item)`
22
+ - `historyTotal(item)`
23
+ - `statusLabel(status)`
24
+ - `locale()`
21
25
  - `number(value)`
22
26
  - `date(value)`
23
27
  - `planName(id)`
24
28
  - `checkout(plan)`
25
29
  - `loadHistory(collection, after = null)`
26
30
 
31
+ ### `src/client/i18n.js`
32
+ Exports
33
+ - `useJskitText`
34
+
27
35
  ### fixtures
28
36
 
29
37
  ### `fixtures/payment-account/main.js`