@praxisui/files-upload 9.0.0-beta.86 → 9.0.0-beta.88
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/ai/component-registry.json +91 -11
- package/package.json +5 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-23T02:50:28.389Z",
|
|
4
4
|
"packageName": "@praxisui/files-upload",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.88",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -1991,6 +1991,86 @@
|
|
|
1991
1991
|
{
|
|
1992
1992
|
"chunkIndex": 3,
|
|
1993
1993
|
"chunkKind": "authoring_manifest",
|
|
1994
|
+
"content": "{\"operationId\":\"accept.types.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set accepted file types Effects: set-value, set-value, set-value. Accept only PDF and image uploads.\",\"scope\":\"global\",\"target\":{\"kind\":\"acceptedTypes\",\"resolver\":\"files-accept-list\",\"required\":false},\"inputContract\":{\"required\":[\"accept\"],\"properties\":[\"accept\",\"allowedExtensions\",\"acceptMimeTypes\"],\"semanticTerms\":[\"accept\",\"allowedExtensions\",\"acceptMimeTypes\"]},\"effects\":[\"set-value\",\"set-value\",\"set-value\"],\"affectedPaths\":[\"ui.accept\",\"options.allowedExtensions\",\"options.acceptMimeTypes\"],\"validators\":[{\"validatorId\":\"file-type-list-explicit\",\"level\":\"error\",\"code\":\"PFU001\",\"description\":\"Accepted type edits must provide a non-empty explicit list and may not rely on wildcard-only policy.\"},{\"validatorId\":\"file-type-entry-valid\",\"level\":\"error\",\"code\":\"PFU002\",\"description\":\"Each accepted type must be a valid extension, exact MIME type or controlled subtype wildcard.\"},{\"validatorId\":\"backend-accept-options-consistent\",\"level\":\"error\",\"code\":\"PFU003\",\"description\":\"ui.accept hints must remain consistent with options.allowedExtensions and options.acceptMimeTypes when backend validation is configured.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"accept-pdf-images\",\"request\":\"Accept only PDF and image uploads.\",\"operationId\":\"accept.types.set\",\"params\":{\"accept\":[\"application/pdf\",\"image/*\"],\"allowedExtensions\":[\"pdf\",\"png\",\"jpg\",\"jpeg\"],\"acceptMimeTypes\":[\"application/pdf\",\"image/png\",\"image/jpeg\"]},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
1995
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
1996
|
+
"contentHash": "73fd96d72058e15c43956b8555c4995c9d948cbf55f62b77371e3aa49c5bc447",
|
|
1997
|
+
"sourceKind": "component_definition",
|
|
1998
|
+
"sourceId": "praxis-files-upload",
|
|
1999
|
+
"corpusVersion": "1.0.0"
|
|
2000
|
+
},
|
|
2001
|
+
{
|
|
2002
|
+
"chunkIndex": 4,
|
|
2003
|
+
"chunkKind": "authoring_manifest",
|
|
2004
|
+
"content": "{\"operationId\":\"limit.fileSize.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set max file size Effects: set-value, set-value. Limit each file to 5 MB.\",\"scope\":\"global\",\"target\":{\"kind\":\"sizeLimit\",\"resolver\":\"max-file-size-policy\",\"required\":false},\"inputContract\":{\"required\":[\"maxFileSizeBytes\"],\"properties\":[\"maxFileSizeBytes\",\"maxUploadSizeMb\"],\"semanticTerms\":[\"maxFileSizeBytes\",\"maxUploadSizeMb\"]},\"effects\":[\"set-value\",\"set-value\"],\"affectedPaths\":[\"limits.maxFileSizeBytes\",\"options.maxUploadSizeMb\"],\"validators\":[{\"validatorId\":\"size-limit-numeric\",\"level\":\"error\",\"code\":\"PFU004\",\"description\":\"Single file size limits must be positive numeric byte and MB values.\"},{\"validatorId\":\"size-limit-within-platform-policy\",\"level\":\"error\",\"code\":\"PFU005\",\"description\":\"Single file size limits must not exceed the platform upload policy for the selected backend surface.\"},{\"validatorId\":\"size-limit-client-backend-consistent\",\"level\":\"error\",\"code\":\"PFU006\",\"description\":\"limits.maxFileSizeBytes and options.maxUploadSizeMb must describe the same effective maximum when both are present.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"max-five-mb\",\"request\":\"Limit each file to 5 MB.\",\"operationId\":\"limit.fileSize.set\",\"params\":{\"maxFileSizeBytes\":5242880,\"maxUploadSizeMb\":5},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2005
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2006
|
+
"contentHash": "926dd13e6a3d911a65e2adc5fa7173bb61bd78e49a26622499c2d9ee2d32381b",
|
|
2007
|
+
"sourceKind": "component_definition",
|
|
2008
|
+
"sourceId": "praxis-files-upload",
|
|
2009
|
+
"corpusVersion": "1.0.0"
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
"chunkIndex": 5,
|
|
2013
|
+
"chunkKind": "authoring_manifest",
|
|
2014
|
+
"content": "{\"operationId\":\"limit.fileCount.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set max file count Effects: set-value, set-value. Allow at most three files per upload batch.\",\"scope\":\"global\",\"target\":{\"kind\":\"fileCountLimit\",\"resolver\":\"max-files-per-bulk-policy\",\"required\":false},\"inputContract\":{\"required\":[\"maxFilesPerBulk\"],\"properties\":[\"maxFilesPerBulk\",\"maxBulkSizeBytes\"],\"semanticTerms\":[\"maxFilesPerBulk\",\"maxBulkSizeBytes\"]},\"effects\":[\"set-value\",\"set-value\"],\"affectedPaths\":[\"limits.maxFilesPerBulk\",\"limits.maxBulkSizeBytes\"],\"validators\":[{\"validatorId\":\"file-count-limit-numeric\",\"level\":\"error\",\"code\":\"PFU007\",\"description\":\"Bulk file count limits must be positive integers.\"},{\"validatorId\":\"bulk-size-limit-numeric\",\"level\":\"error\",\"code\":\"PFU008\",\"description\":\"Bulk size limits must be positive numeric byte values when provided.\"},{\"validatorId\":\"bulk-limit-within-platform-policy\",\"level\":\"error\",\"code\":\"PFU009\",\"description\":\"Bulk count and aggregate size limits must not exceed backend batch policy.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"max-three-files\",\"request\":\"Allow at most three files per upload batch.\",\"operationId\":\"limit.fileCount.set\",\"params\":{\"maxFilesPerBulk\":3},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2015
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2016
|
+
"contentHash": "a4b18cb01284b389a3f400e372e8cf84b75c36074e9dae40428af725052e9031",
|
|
2017
|
+
"sourceKind": "component_definition",
|
|
2018
|
+
"sourceId": "praxis-files-upload",
|
|
2019
|
+
"corpusVersion": "1.0.0"
|
|
2020
|
+
},
|
|
2021
|
+
{
|
|
2022
|
+
"chunkIndex": 6,
|
|
2023
|
+
"chunkKind": "authoring_manifest",
|
|
2024
|
+
"content": "{\"operationId\":\"endpoint.presign.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set presign endpoint Effects: compile-domain-patch. Use the official files API for presigned uploads.\",\"scope\":\"global\",\"target\":{\"kind\":\"presignEndpoint\",\"resolver\":\"files-api-base-url-presign-contract\",\"required\":false},\"inputContract\":{\"required\":[\"baseUrl\"],\"properties\":[\"baseUrl\",\"strategy\",\"allowCrossOriginPresignedTarget\"],\"semanticTerms\":[\"baseUrl\",\"strategy\",\"allowCrossOriginPresignedTarget\",\"direct\",\"presign\",\"auto\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"baseUrl\",\"strategy\"],\"validators\":[{\"validatorId\":\"endpoint-url-safe\",\"level\":\"error\",\"code\":\"PFU010\",\"description\":\"Endpoint edits must use a safe absolute or approved relative baseUrl and reject javascript:, data:, credentials-in-URL and path traversal.\"},{\"validatorId\":\"endpoint-uses-praxis-backend-surface\",\"level\":\"error\",\"code\":\"PFU011\",\"description\":\"Endpoint edits must resolve to the approved Praxis files backend surface for the host environment.\"},{\"validatorId\":\"presign-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU012\",\"description\":\"Presign authoring may change baseUrl but must preserve POST baseUrl/upload/presign?filename=... as the runtime contract.\"},{\"validatorId\":\"presign-cross-origin-fields-safe\",\"level\":\"error\",\"code\":\"PFU015\",\"description\":\"Cross-origin presigned upload targets must not receive Praxis metadata/options fields unless explicitly approved by the presign response contract.\"},{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PFU016\",\"description\":\"Endpoint and security policy edits require explicit confirmation before patch compilation.\"}],\"preconditions\":[\"config-initialized\",\"confirmation-collected\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-presign-base-url\",\"request\":\"Use the official files API for presigned uploads.\",\"operationId\":\"endpoint.presign.set\",\"params\":{\"baseUrl\":\"https://api.praxis.example/files\",\"strategy\":\"presign\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2025
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2026
|
+
"contentHash": "8afeff9e779f8e526bbfc0272ced28d67534986b041018f5adca7b3bc29a4cb8",
|
|
2027
|
+
"sourceKind": "component_definition",
|
|
2028
|
+
"sourceId": "praxis-files-upload",
|
|
2029
|
+
"corpusVersion": "1.0.0"
|
|
2030
|
+
},
|
|
2031
|
+
{
|
|
2032
|
+
"chunkIndex": 7,
|
|
2033
|
+
"chunkKind": "authoring_manifest",
|
|
2034
|
+
"content": "{\"operationId\":\"endpoint.upload.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set upload endpoint Effects: compile-domain-patch. Use the official files API for direct uploads. Set upload endpoint to javascript:alert(1).\",\"scope\":\"global\",\"target\":{\"kind\":\"uploadEndpoint\",\"resolver\":\"files-api-base-url-upload-contract\",\"required\":false},\"inputContract\":{\"required\":[\"baseUrl\"],\"properties\":[\"baseUrl\",\"strategy\",\"allowCrossOriginPresignedTarget\"],\"semanticTerms\":[\"baseUrl\",\"strategy\",\"allowCrossOriginPresignedTarget\",\"direct\",\"presign\",\"auto\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"baseUrl\",\"strategy\"],\"validators\":[{\"validatorId\":\"endpoint-url-safe\",\"level\":\"error\",\"code\":\"PFU010\",\"description\":\"Endpoint edits must use a safe absolute or approved relative baseUrl and reject javascript:, data:, credentials-in-URL and path traversal.\"},{\"validatorId\":\"endpoint-uses-praxis-backend-surface\",\"level\":\"error\",\"code\":\"PFU011\",\"description\":\"Endpoint edits must resolve to the approved Praxis files backend surface for the host environment.\"},{\"validatorId\":\"upload-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU013\",\"description\":\"Direct upload authoring may change baseUrl but must preserve POST baseUrl/upload as the runtime contract.\"},{\"validatorId\":\"bulk-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU014\",\"description\":\"Bulk upload authoring may change baseUrl but must preserve POST baseUrl/bulk as the runtime contract.\"},{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PFU016\",\"description\":\"Endpoint and security policy edits require explicit confirmation before patch compilation.\"}],\"preconditions\":[\"config-initialized\",\"confirmation-collected\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-direct-base-url\",\"request\":\"Use the official files API for direct uploads.\",\"operationId\":\"endpoint.upload.set\",\"params\":{\"baseUrl\":\"https://api.praxis.example/files\",\"strategy\":\"direct\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unsafe-endpoint\",\"request\":\"Set upload endpoint to javascript:alert(1).\",\"operationId\":\"endpoint.upload.set\",\"params\":{\"baseUrl\":\"javascript:alert(1)\",\"strategy\":\"direct\"},\"isPositive\":false}]}",
|
|
2035
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2036
|
+
"contentHash": "1cb3038d9b6f27d318fd5eb6780f6ee551b339bbccf807fab31ad86dbda32c80",
|
|
2037
|
+
"sourceKind": "component_definition",
|
|
2038
|
+
"sourceId": "praxis-files-upload",
|
|
2039
|
+
"corpusVersion": "1.0.0"
|
|
2040
|
+
},
|
|
2041
|
+
{
|
|
2042
|
+
"chunkIndex": 8,
|
|
2043
|
+
"chunkKind": "authoring_manifest",
|
|
2044
|
+
"content": "{\"operationId\":\"security.policy.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set upload security policy Effects: merge-object, merge-object, merge-object, merge-object. Enable strict validation and virus scanning for uploads. Disable strict validation without confirmation.\",\"scope\":\"global\",\"target\":{\"kind\":\"securityPolicy\",\"resolver\":\"upload-security-policy\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"strictValidation\",\"enableVirusScanning\",\"defaultConflictPolicy\",\"targetDirectory\",\"showQuotaWarnings\",\"blockOnExceed\",\"autoRetryOn429\",\"showBannerOn429\",\"maxAutoRetry\",\"baseBackoffMs\",\"tenantHeader\",\"userHeader\"],\"semanticTerms\":[\"strictValidation\",\"enableVirusScanning\",\"defaultConflictPolicy\",\"targetDirectory\",\"showQuotaWarnings\",\"blockOnExceed\",\"autoRetryOn429\",\"showBannerOn429\",\"maxAutoRetry\",\"baseBackoffMs\",\"tenantHeader\",\"userHeader\",\"ERROR\",\"SKIP\",\"OVERWRITE\",\"MAKE_UNIQUE\",\"RENAME\"]},\"effects\":[\"merge-object\",\"merge-object\",\"merge-object\",\"merge-object\"],\"affectedPaths\":[\"options.strictValidation\",\"options.enableVirusScanning\",\"options.defaultConflictPolicy\",\"options.targetDirectory\",\"quotas\",\"rateLimit\",\"headers\"],\"validators\":[{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PFU016\",\"description\":\"Endpoint and security policy edits require explicit confirmation before patch compilation.\"},{\"validatorId\":\"security-policy-compatible\",\"level\":\"error\",\"code\":\"PFU017\",\"description\":\"Strict validation, virus scanning, conflict policy, target directory, quota and rate-limit settings must be compatible with backend effective config.\"},{\"validatorId\":\"target-directory-safe\",\"level\":\"error\",\"code\":\"PFU018\",\"description\":\"Target directory values must be normalized backend paths and must reject traversal or absolute filesystem paths.\"},{\"validatorId\":\"conflict-policy-valid\",\"level\":\"error\",\"code\":\"PFU019\",\"description\":\"Default conflict policy must be one of ERROR, SKIP, OVERWRITE, MAKE_UNIQUE or RENAME.\"},{\"validatorId\":\"quota-rate-policy-valid\",\"level\":\"error\",\"code\":\"PFU020\",\"description\":\"Quota and rate-limit UX settings must use non-negative retry counts/backoffs and cannot silently bypass backend enforcement.\"},{\"validatorId\":\"header-names-safe\",\"level\":\"warning\",\"code\":\"PFU021\",\"description\":\"Contextual header names must be explicit HTTP token names and must not override authorization, cookie or content-type headers.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\",\"confirmation-collected\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"tighten-security-policy\",\"request\":\"Enable strict validation and virus scanning for uploads.\",\"operationId\":\"security.policy.set\",\"params\":{\"strictValidation\":true,\"enableVirusScanning\":true,\"defaultConflictPolicy\":\"ERROR\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unconfirmed-security-policy\",\"request\":\"Disable strict validation without confirmation.\",\"operationId\":\"security.policy.set\",\"params\":{\"strictValidation\":false,\"enableVirusScanning\":false},\"isPositive\":false}]}",
|
|
2045
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2046
|
+
"contentHash": "171a8156d374765277cd075608a7a81573ba8b4dce5d7a4072c80756ce6a7350",
|
|
2047
|
+
"sourceKind": "component_definition",
|
|
2048
|
+
"sourceId": "praxis-files-upload",
|
|
2049
|
+
"corpusVersion": "1.0.0"
|
|
2050
|
+
},
|
|
2051
|
+
{
|
|
2052
|
+
"chunkIndex": 9,
|
|
2053
|
+
"chunkKind": "authoring_manifest",
|
|
2054
|
+
"content": "{\"operationId\":\"message.error.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set error message override Effects: merge-object. Show a friendly message when quota is exceeded.\",\"scope\":\"global\",\"target\":{\"kind\":\"errorMessages\",\"resolver\":\"upload-error-code-message\",\"required\":false},\"inputContract\":{\"required\":[\"code\",\"message\"],\"properties\":[\"code\",\"message\"],\"semanticTerms\":[\"code\",\"message\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"messages.errors\"],\"validators\":[{\"validatorId\":\"error-code-known\",\"level\":\"warning\",\"code\":\"PFU022\",\"description\":\"Error message overrides should target known backend error catalog codes or documented host-specific extensions.\"},{\"validatorId\":\"error-message-i18n-compatible\",\"level\":\"warning\",\"code\":\"PFU023\",\"description\":\"User-facing error messages must remain compatible with the host i18n/editor flow and not expose raw technical exception text.\"},{\"validatorId\":\"message-not-empty\",\"level\":\"error\",\"code\":\"PFU024\",\"description\":\"Error message overrides must be non-empty user-facing text.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"quota-message\",\"request\":\"Show a friendly message when quota is exceeded.\",\"operationId\":\"message.error.set\",\"params\":{\"code\":\"QUOTA_EXCEEDED\",\"message\":\"Upload quota reached for this period.\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2055
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2056
|
+
"contentHash": "248eff8fe3424d2e5d6af67c9cac6226cf7bac61ea85c0b589e67442239e6158",
|
|
2057
|
+
"sourceKind": "component_definition",
|
|
2058
|
+
"sourceId": "praxis-files-upload",
|
|
2059
|
+
"corpusVersion": "1.0.0"
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
"chunkIndex": 10,
|
|
2063
|
+
"chunkKind": "authoring_manifest",
|
|
2064
|
+
"content": "{\"operationId\":\"display.mode.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set display mode Effects: set-value, merge-object. Use compact upload display and keep progress visible.\",\"scope\":\"global\",\"target\":{\"kind\":\"display\",\"resolver\":\"files-upload-display-mode-and-ui\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"displayMode\",\"dense\",\"showDropzone\",\"showProgress\",\"manualUpload\",\"showMetadataForm\",\"showConflictPolicySelector\"],\"semanticTerms\":[\"displayMode\",\"dense\",\"showDropzone\",\"showProgress\",\"manualUpload\",\"showMetadataForm\",\"showConflictPolicySelector\",\"full\",\"compact\"]},\"effects\":[\"set-value\",\"merge-object\"],\"affectedPaths\":[\"displayMode\",\"ui.dense\",\"ui.showDropzone\",\"ui.showProgress\",\"ui.manualUpload\",\"ui.showMetadataForm\",\"ui.showConflictPolicySelector\"],\"validators\":[{\"validatorId\":\"display-mode-valid\",\"level\":\"error\",\"code\":\"PFU025\",\"description\":\"Display mode must be full or compact.\"},{\"validatorId\":\"display-ui-compatible\",\"level\":\"warning\",\"code\":\"PFU026\",\"description\":\"Display changes must keep progress, manual upload and metadata form affordances reachable for the selected mode.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"compact-display\",\"request\":\"Use compact upload display and keep progress visible.\",\"operationId\":\"display.mode.set\",\"params\":{\"displayMode\":\"compact\",\"dense\":true,\"showProgress\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
2065
|
+
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
2066
|
+
"contentHash": "638f082a63eb121050f4c886fbd893d303d8a1cd46940784090b86b04f155f7c",
|
|
2067
|
+
"sourceKind": "component_definition",
|
|
2068
|
+
"sourceId": "praxis-files-upload",
|
|
2069
|
+
"corpusVersion": "1.0.0"
|
|
2070
|
+
},
|
|
2071
|
+
{
|
|
2072
|
+
"chunkIndex": 11,
|
|
2073
|
+
"chunkKind": "authoring_manifest",
|
|
1994
2074
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"identity\"}",
|
|
1995
2075
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
1996
2076
|
"contentHash": "3cbffe9d28399566cb29828986a8474ca3db3c86395088eb94fc30379283a6f6",
|
|
@@ -1999,7 +2079,7 @@
|
|
|
1999
2079
|
"corpusVersion": "1.0.0"
|
|
2000
2080
|
},
|
|
2001
2081
|
{
|
|
2002
|
-
"chunkIndex":
|
|
2082
|
+
"chunkIndex": 12,
|
|
2003
2083
|
"chunkKind": "authoring_manifest",
|
|
2004
2084
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"config\",\"type\":\"FilesUploadConfig\",\"description\":\"Upload strategy, UI, limits, backend options, bulk execution, quota/rate feedback, headers and messages.\"},{\"name\":\"filesUploadId\",\"type\":\"string\",\"description\":\"Stable upload id used for config persistence and telemetry correlation.\"},{\"name\":\"componentInstanceId\",\"type\":\"string\",\"description\":\"Optional instance discriminator when the same upload id appears more than once.\"},{\"name\":\"baseUrl\",\"type\":\"string\",\"description\":\"Canonical files API base URL. Direct upload uses baseUrl/upload, bulk uses baseUrl/bulk and presign uses baseUrl/upload/presign.\"},{\"name\":\"displayMode\",\"type\":\"'full' | 'compact'\",\"allowedValues\":[\"full\",\"compact\"],\"description\":\"Runtime display mode input.\"},{\"name\":\"context\",\"type\":\"Record<string, unknown>\",\"description\":\"Host context available to metadata and event consumers.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Enables the Settings Panel configuration editor.\"}]}",
|
|
2005
2085
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2009,7 +2089,7 @@
|
|
|
2009
2089
|
"corpusVersion": "1.0.0"
|
|
2010
2090
|
},
|
|
2011
2091
|
{
|
|
2012
|
-
"chunkIndex":
|
|
2092
|
+
"chunkIndex": 13,
|
|
2013
2093
|
"chunkKind": "authoring_manifest",
|
|
2014
2094
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"acceptedTypes\",\"resolver\":\"files-accept-list\",\"description\":\"Allowed file extensions and MIME types projected to ui.accept, options.allowedExtensions and options.acceptMimeTypes.\"},{\"kind\":\"sizeLimit\",\"resolver\":\"max-file-size-policy\",\"description\":\"Maximum single-file size in limits.maxFileSizeBytes and backend-facing options.maxUploadSizeMb.\"},{\"kind\":\"fileCountLimit\",\"resolver\":\"max-files-per-bulk-policy\",\"description\":\"Maximum number of files accepted in a bulk selection.\"},{\"kind\":\"presignEndpoint\",\"resolver\":\"files-api-base-url-presign-contract\",\"description\":\"Presign operation endpoint derived from baseUrl + /upload/presign; arbitrary per-operation URLs are not accepted.\"},{\"kind\":\"uploadEndpoint\",\"resolver\":\"files-api-base-url-upload-contract\",\"description\":\"Direct and bulk upload endpoints derived from baseUrl + /upload and /bulk.\"},{\"kind\":\"securityPolicy\",\"resolver\":\"upload-security-policy\",\"description\":\"Strict validation, virus scanning, conflict policy, target directory, quotas, rate limit and contextual headers.\"},{\"kind\":\"errorMessages\",\"resolver\":\"upload-error-code-message\",\"description\":\"Host-provided message overrides under messages.errors keyed by backend error code.\"},{\"kind\":\"display\",\"resolver\":\"files-upload-display-mode-and-ui\",\"description\":\"Runtime displayMode plus non-backend visual UI flags.\"}]}",
|
|
2015
2095
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2019,7 +2099,7 @@
|
|
|
2019
2099
|
"corpusVersion": "1.0.0"
|
|
2020
2100
|
},
|
|
2021
2101
|
{
|
|
2022
|
-
"chunkIndex":
|
|
2102
|
+
"chunkIndex": 14,
|
|
2023
2103
|
"chunkKind": "authoring_manifest",
|
|
2024
2104
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"accept.types.set\",\"title\":\"Set accepted file types\",\"scope\":\"global\",\"targetKind\":\"acceptedTypes\",\"target\":{\"kind\":\"acceptedTypes\",\"resolver\":\"files-accept-list\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"accept\"],\"properties\":{\"accept\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"allowedExtensions\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"acceptMimeTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"ui.accept\"},{\"kind\":\"set-value\",\"path\":\"options.allowedExtensions\"},{\"kind\":\"set-value\",\"path\":\"options.acceptMimeTypes\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"file-type-list-explicit\",\"file-type-entry-valid\",\"backend-accept-options-consistent\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"ui.accept\",\"options.allowedExtensions\",\"options.acceptMimeTypes\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"limit.fileSize.set\",\"title\":\"Set max file size\",\"scope\":\"global\",\"targetKind\":\"sizeLimit\",\"target\":{\"kind\":\"sizeLimit\",\"resolver\":\"max-file-size-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"maxFileSizeBytes\"],\"properties\":{\"maxFileSizeBytes\":{\"type\":\"number\"},\"maxUploadSizeMb\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"limits.maxFileSizeBytes\"},{\"kind\":\"set-value\",\"path\":\"options.maxUploadSizeMb\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"size-limit-numeric\",\"size-limit-within-platform-policy\",\"size-limit-client-backend-consistent\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"limits.maxFileSizeBytes\",\"options.maxUploadSizeMb\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"limit.fileCount.set\",\"title\":\"Set max file count\",\"scope\":\"global\",\"targetKind\":\"fileCountLimit\",\"target\":{\"kind\":\"fileCountLimit\",\"resolver\":\"max-files-per-bulk-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"maxFilesPerBulk\"],\"properties\":{\"maxFilesPerBulk\":{\"type\":\"number\"},\"maxBulkSizeBytes\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"limits.maxFilesPerBulk\"},{\"kind\":\"set-value\",\"path\":\"limits.maxBulkSizeBytes\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"file-count-limit-numeric\",\"bulk-size-limit-numeric\",\"bulk-limit-within-platform-policy\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"limits.maxFilesPerBulk\",\"limits.maxBulkSizeBytes\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"endpoint.presign.set\",\"title\":\"Set presign endpoint\",\"scope\":\"global\",\"targetKind\":\"presignEndpoint\",\"target\":{\"kind\":\"presignEndpoint\",\"resolver\":\"files-api-base-url-presign-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"baseUrl\"],\"properties\":{\"baseUrl\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"direct\",\"presign\",\"auto\"]},\"allowCrossOriginPresignedTarget\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"files-upload-presign-base-url\",\"handlerContract\":{\"reads\":[\"baseUrl\",\"strategy\"],\"writes\":[\"baseUrl\",\"strategy\"],\"identityKeys\":[\"baseUrl\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"baseUrl\"],\"properties\":{\"baseUrl\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"direct\",\"presign\",\"auto\"]},\"allowCrossOriginPresignedTarget\":{\"type\":\"boolean\"}}},\"failureModes\":[\"unsafe-url\",\"non-praxis-backend-surface\",\"presign-path-override\",\"cross-origin-presigned-fields-leak\"],\"description\":\"Validates the files API base URL and preserves the canonical POST baseUrl/upload/presign?filename=... contract; arbitrary presign URLs are rejected.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"endpoint-url-safe\",\"endpoint-uses-praxis-backend-surface\",\"presign-endpoint-fixed-contract\",\"presign-cross-origin-fields-safe\",\"security-change-confirmed\"],\"affectedPaths\":[\"baseUrl\",\"strategy\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"confirmation-collected\"]},{\"operationId\":\"endpoint.upload.set\",\"title\":\"Set upload endpoint\",\"scope\":\"global\",\"targetKind\":\"uploadEndpoint\",\"target\":{\"kind\":\"uploadEndpoint\",\"resolver\":\"files-api-base-url-upload-contract\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"baseUrl\"],\"properties\":{\"baseUrl\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"direct\",\"presign\",\"auto\"]},\"allowCrossOriginPresignedTarget\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"files-upload-direct-base-url\",\"handlerContract\":{\"reads\":[\"baseUrl\",\"strategy\"],\"writes\":[\"baseUrl\",\"strategy\"],\"identityKeys\":[\"baseUrl\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"baseUrl\"],\"properties\":{\"baseUrl\":{\"type\":\"string\"},\"strategy\":{\"enum\":[\"direct\",\"presign\",\"auto\"]},\"allowCrossOriginPresignedTarget\":{\"type\":\"boolean\"}}},\"failureModes\":[\"unsafe-url\",\"non-praxis-backend-surface\",\"upload-path-override\",\"bulk-path-override\"],\"description\":\"Validates the files API base URL and preserves the canonical POST baseUrl/upload and POST baseUrl/bulk contracts.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"endpoint-url-safe\",\"endpoint-uses-praxis-backend-surface\",\"upload-endpoint-fixed-contract\",\"bulk-endpoint-fixed-contract\",\"security-change-confirmed\"],\"affectedPaths\":[\"baseUrl\",\"strategy\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"confirmation-collected\"]},{\"operationId\":\"security.policy.set\",\"title\":\"Set upload security policy\",\"scope\":\"global\",\"targetKind\":\"securityPolicy\",\"target\":{\"kind\":\"securityPolicy\",\"resolver\":\"upload-security-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"strictValidation\":{\"type\":\"boolean\"},\"enableVirusScanning\":{\"type\":\"boolean\"},\"defaultConflictPolicy\":{\"enum\":[\"ERROR\",\"SKIP\",\"OVERWRITE\",\"MAKE_UNIQUE\",\"RENAME\"]},\"targetDirectory\":{\"type\":\"string\"},\"showQuotaWarnings\":{\"type\":\"boolean\"},\"blockOnExceed\":{\"type\":\"boolean\"},\"autoRetryOn429\":{\"type\":\"boolean\"},\"showBannerOn429\":{\"type\":\"boolean\"},\"maxAutoRetry\":{\"type\":\"number\"},\"baseBackoffMs\":{\"type\":\"number\"},\"tenantHeader\":{\"type\":\"string\"},\"userHeader\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"options\"},{\"kind\":\"merge-object\",\"path\":\"quotas\"},{\"kind\":\"merge-object\",\"path\":\"rateLimit\"},{\"kind\":\"merge-object\",\"path\":\"headers\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"security-change-confirmed\",\"security-policy-compatible\",\"target-directory-safe\",\"conflict-policy-valid\",\"quota-rate-policy-valid\",\"header-names-safe\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"options.strictValidation\",\"options.enableVirusScanning\",\"options.defaultConflictPolicy\",\"options.targetDirectory\",\"quotas\",\"rateLimit\",\"headers\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"confirmation-collected\"]},{\"operationId\":\"message.error.set\",\"title\":\"Set error message override\",\"scope\":\"global\",\"targetKind\":\"errorMessages\",\"target\":{\"kind\":\"errorMessages\",\"resolver\":\"upload-error-code-message\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"code\",\"message\"],\"properties\":{\"code\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"messages.errors\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"error-code-known\",\"error-message-i18n-compatible\",\"message-not-empty\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"messages.errors\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
2025
2105
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2029,7 +2109,7 @@
|
|
|
2029
2109
|
"corpusVersion": "1.0.0"
|
|
2030
2110
|
},
|
|
2031
2111
|
{
|
|
2032
|
-
"chunkIndex":
|
|
2112
|
+
"chunkIndex": 15,
|
|
2033
2113
|
"chunkKind": "authoring_manifest",
|
|
2034
2114
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"display.mode.set\",\"title\":\"Set display mode\",\"scope\":\"global\",\"targetKind\":\"display\",\"target\":{\"kind\":\"display\",\"resolver\":\"files-upload-display-mode-and-ui\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"displayMode\":{\"enum\":[\"full\",\"compact\"]},\"dense\":{\"type\":\"boolean\"},\"showDropzone\":{\"type\":\"boolean\"},\"showProgress\":{\"type\":\"boolean\"},\"manualUpload\":{\"type\":\"boolean\"},\"showMetadataForm\":{\"type\":\"boolean\"},\"showConflictPolicySelector\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"displayMode\"},{\"kind\":\"merge-object\",\"path\":\"ui\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"display-mode-valid\",\"display-ui-compatible\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"displayMode\",\"ui.dense\",\"ui.showDropzone\",\"ui.showProgress\",\"ui.manualUpload\",\"ui.showMetadataForm\",\"ui.showConflictPolicySelector\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
2035
2115
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2039,7 +2119,7 @@
|
|
|
2039
2119
|
"corpusVersion": "1.0.0"
|
|
2040
2120
|
},
|
|
2041
2121
|
{
|
|
2042
|
-
"chunkIndex":
|
|
2122
|
+
"chunkIndex": 16,
|
|
2043
2123
|
"chunkKind": "authoring_manifest",
|
|
2044
2124
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"file-type-list-explicit\",\"level\":\"error\",\"code\":\"PFU001\",\"description\":\"Accepted type edits must provide a non-empty explicit list and may not rely on wildcard-only policy.\"},{\"validatorId\":\"file-type-entry-valid\",\"level\":\"error\",\"code\":\"PFU002\",\"description\":\"Each accepted type must be a valid extension, exact MIME type or controlled subtype wildcard.\"},{\"validatorId\":\"backend-accept-options-consistent\",\"level\":\"error\",\"code\":\"PFU003\",\"description\":\"ui.accept hints must remain consistent with options.allowedExtensions and options.acceptMimeTypes when backend validation is configured.\"},{\"validatorId\":\"size-limit-numeric\",\"level\":\"error\",\"code\":\"PFU004\",\"description\":\"Single file size limits must be positive numeric byte and MB values.\"},{\"validatorId\":\"size-limit-within-platform-policy\",\"level\":\"error\",\"code\":\"PFU005\",\"description\":\"Single file size limits must not exceed the platform upload policy for the selected backend surface.\"},{\"validatorId\":\"size-limit-client-backend-consistent\",\"level\":\"error\",\"code\":\"PFU006\",\"description\":\"limits.maxFileSizeBytes and options.maxUploadSizeMb must describe the same effective maximum when both are present.\"},{\"validatorId\":\"file-count-limit-numeric\",\"level\":\"error\",\"code\":\"PFU007\",\"description\":\"Bulk file count limits must be positive integers.\"},{\"validatorId\":\"bulk-size-limit-numeric\",\"level\":\"error\",\"code\":\"PFU008\",\"description\":\"Bulk size limits must be positive numeric byte values when provided.\"},{\"validatorId\":\"bulk-limit-within-platform-policy\",\"level\":\"error\",\"code\":\"PFU009\",\"description\":\"Bulk count and aggregate size limits must not exceed backend batch policy.\"},{\"validatorId\":\"endpoint-url-safe\",\"level\":\"error\",\"code\":\"PFU010\",\"description\":\"Endpoint edits must use a safe absolute or approved relative baseUrl and reject javascript:, data:, credentials-in-URL and path traversal.\"},{\"validatorId\":\"endpoint-uses-praxis-backend-surface\",\"level\":\"error\",\"code\":\"PFU011\",\"description\":\"Endpoint edits must resolve to the approved Praxis files backend surface for the host environment.\"},{\"validatorId\":\"presign-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU012\",\"description\":\"Presign authoring may change baseUrl but must preserve POST baseUrl/upload/presign?filename=... as the runtime contract.\"},{\"validatorId\":\"upload-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU013\",\"description\":\"Direct upload authoring may change baseUrl but must preserve POST baseUrl/upload as the runtime contract.\"},{\"validatorId\":\"bulk-endpoint-fixed-contract\",\"level\":\"error\",\"code\":\"PFU014\",\"description\":\"Bulk upload authoring may change baseUrl but must preserve POST baseUrl/bulk as the runtime contract.\"},{\"validatorId\":\"presign-cross-origin-fields-safe\",\"level\":\"error\",\"code\":\"PFU015\",\"description\":\"Cross-origin presigned upload targets must not receive Praxis metadata/options fields unless explicitly approved by the presign response contract.\"},{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PFU016\",\"description\":\"Endpoint and security policy edits require explicit confirmation before patch compilation.\"},{\"validatorId\":\"security-policy-compatible\",\"level\":\"error\",\"code\":\"PFU017\",\"description\":\"Strict validation, virus scanning, conflict policy, target directory, quota and rate-limit settings must be compatible with backend effective config.\"},{\"validatorId\":\"target-directory-safe\",\"level\":\"error\",\"code\":\"PFU018\",\"description\":\"Target directory values must be normalized backend paths and must reject traversal or absolute filesystem paths.\"},{\"validatorId\":\"conflict-policy-valid\",\"level\":\"error\",\"code\":\"PFU019\",\"description\":\"Default conflict policy must be one of ERROR, SKIP, OVERWRITE, MAKE_UNIQUE or RENAME.\"},{\"validatorId\":\"quota-rate-policy-valid\",\"level\":\"error\",\"code\":\"PFU020\",\"description\":\"Quota and rate-limit UX settings must use non-negative retry counts/backoffs and cannot silently bypass backend enforcement.\"},{\"validatorId\":\"header-names-safe\",\"level\":\"warning\",\"code\":\"PFU021\",\"description\":\"Contextual header names must be explicit HTTP token names and must not override authorization, cookie or content-type headers.\"},{\"validatorId\":\"error-code-known\",\"level\":\"warning\",\"code\":\"PFU022\",\"description\":\"Error message overrides should target known backend error catalog codes or documented host-specific extensions.\"},{\"validatorId\":\"error-message-i18n-compatible\",\"level\":\"warning\",\"code\":\"PFU023\",\"description\":\"User-facing error messages must remain compatible with the host i18n/editor flow and not expose raw technical exception text.\"},{\"validatorId\":\"message-not-empty\",\"level\":\"error\",\"code\":\"PFU024\",\"description\":\"Error message overrides must be non-empty user-facing text.\"},{\"validatorId\":\"display-mode-valid\",\"level\":\"error\",\"code\":\"PFU025\",\"description\":\"Display mode must be full or compact.\"},{\"validatorId\":\"display-ui-compatible\",\"level\":\"warning\",\"code\":\"PFU026\",\"description\":\"Display changes must keep progress, manual upload and metadata form affordances reachable for the selected mode.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PFU027\",\"description\":\"Settings Panel editor, AI adapter snapshot and runtime inputs must round-trip config, baseUrl and displayMode without changing upload behavior.\"}]}",
|
|
2045
2125
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2049,7 +2129,7 @@
|
|
|
2049
2129
|
"corpusVersion": "1.0.0"
|
|
2050
2130
|
},
|
|
2051
2131
|
{
|
|
2052
|
-
"chunkIndex":
|
|
2132
|
+
"chunkIndex": 17,
|
|
2053
2133
|
"chunkKind": "authoring_manifest",
|
|
2054
2134
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"Accepted type authoring must keep UI hints and backend-facing validation options aligned; ui.accept alone is not the canonical server policy.\",\"Endpoint authoring changes only the canonical files API baseUrl and strategy; direct, bulk and presign paths remain fixed by FilesApiClient.\",\"Security-affecting edits require confirmation and must round-trip through Settings Panel persistence without weakening strict validation, virus scanning, quota or rate-limit policy by omission.\",\"Error message overrides remain keyed by backend error catalog code and must stay user-facing/i18n-compatible.\",\"Display authoring may change displayMode and UI flags, but must not mutate backend options or upload submission payload.\"]}",
|
|
2055
2135
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2059,7 +2139,7 @@
|
|
|
2059
2139
|
"corpusVersion": "1.0.0"
|
|
2060
2140
|
},
|
|
2061
2141
|
{
|
|
2062
|
-
"chunkIndex":
|
|
2142
|
+
"chunkIndex": 18,
|
|
2063
2143
|
"chunkKind": "authoring_manifest",
|
|
2064
2144
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-files-upload\",\"ownerPackage\":\"@praxisui/files-upload\",\"configSchemaId\":\"FilesUploadConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"accept-pdf-images\",\"request\":\"Accept only PDF and image uploads.\",\"operationId\":\"accept.types.set\",\"params\":{\"accept\":[\"application/pdf\",\"image/*\"],\"allowedExtensions\":[\"pdf\",\"png\",\"jpg\",\"jpeg\"],\"acceptMimeTypes\":[\"application/pdf\",\"image/png\",\"image/jpeg\"]},\"isPositive\":true},{\"id\":\"max-five-mb\",\"request\":\"Limit each file to 5 MB.\",\"operationId\":\"limit.fileSize.set\",\"params\":{\"maxFileSizeBytes\":5242880,\"maxUploadSizeMb\":5},\"isPositive\":true},{\"id\":\"max-three-files\",\"request\":\"Allow at most three files per upload batch.\",\"operationId\":\"limit.fileCount.set\",\"params\":{\"maxFilesPerBulk\":3},\"isPositive\":true},{\"id\":\"set-presign-base-url\",\"request\":\"Use the official files API for presigned uploads.\",\"operationId\":\"endpoint.presign.set\",\"params\":{\"baseUrl\":\"https://api.praxis.example/files\",\"strategy\":\"presign\"},\"isPositive\":true},{\"id\":\"set-direct-base-url\",\"request\":\"Use the official files API for direct uploads.\",\"operationId\":\"endpoint.upload.set\",\"params\":{\"baseUrl\":\"https://api.praxis.example/files\",\"strategy\":\"direct\"},\"isPositive\":true},{\"id\":\"reject-unsafe-endpoint\",\"request\":\"Set upload endpoint to javascript:alert(1).\",\"operationId\":\"endpoint.upload.set\",\"params\":{\"baseUrl\":\"javascript:alert(1)\",\"strategy\":\"direct\"},\"isPositive\":false},{\"id\":\"tighten-security-policy\",\"request\":\"Enable strict validation and virus scanning for uploads.\",\"operationId\":\"security.policy.set\",\"params\":{\"strictValidation\":true,\"enableVirusScanning\":true,\"defaultConflictPolicy\":\"ERROR\"},\"isPositive\":true},{\"id\":\"reject-unconfirmed-security-policy\",\"request\":\"Disable strict validation without confirmation.\",\"operationId\":\"security.policy.set\",\"params\":{\"strictValidation\":false,\"enableVirusScanning\":false},\"isPositive\":false},{\"id\":\"quota-message\",\"request\":\"Show a friendly message when quota is exceeded.\",\"operationId\":\"message.error.set\",\"params\":{\"code\":\"QUOTA_EXCEEDED\",\"message\":\"Upload quota reached for this period.\"},\"isPositive\":true},{\"id\":\"compact-display\",\"request\":\"Use compact upload display and keep progress visible.\",\"operationId\":\"display.mode.set\",\"params\":{\"displayMode\":\"compact\",\"dense\":true,\"showProgress\":true},\"isPositive\":true}]}",
|
|
2065
2145
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/praxis-files-upload-authoring-manifest.ts",
|
|
@@ -2069,7 +2149,7 @@
|
|
|
2069
2149
|
"corpusVersion": "1.0.0"
|
|
2070
2150
|
},
|
|
2071
2151
|
{
|
|
2072
|
-
"chunkIndex":
|
|
2152
|
+
"chunkIndex": 19,
|
|
2073
2153
|
"chunkKind": "context_pack",
|
|
2074
2154
|
"content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"strategy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"direct\",\"label\":\"Direct\"},{\"value\":\"presign\",\"label\":\"Presign\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"ui.dropzone.expandMode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"overlay\",\"label\":\"Overlay\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"ui.list.detailsMode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"sidesheet\",\"label\":\"Side sheet\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"ui.list.detailsAnchor\":{\"mode\":\"enum\",\"options\":[{\"value\":\"item\",\"label\":\"Item\"},{\"value\":\"field\",\"label\":\"Field\"}]},\"options.defaultConflictPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"ERROR\",\"label\":\"Error\"},{\"value\":\"SKIP\",\"label\":\"Skip\"},{\"value\":\"OVERWRITE\",\"label\":\"Overwrite\"},{\"value\":\"MAKE_UNIQUE\",\"label\":\"Make unique\"},{\"value\":\"RENAME\",\"label\":\"Rename\"}]}},\"actionCatalog\":[{\"id\":\"strategy.set\",\"intentExamples\":[\"strategy\",\"upload strategy\"],\"patchTemplate\":{\"strategy\":\"{{value}}\"}},{\"id\":\"ui.showDropzone.enable\",\"intentExamples\":[\"show dropzone\",\"enable dropzone\"],\"patchTemplate\":{\"ui\":{\"showDropzone\":true}}},{\"id\":\"ui.showDropzone.disable\",\"intentExamples\":[\"hide dropzone\",\"disable dropzone\"],\"patchTemplate\":{\"ui\":{\"showDropzone\":false}}},{\"id\":\"ui.manualUpload.enable\",\"intentExamples\":[\"manual upload\",\"upload button\"],\"patchTemplate\":{\"ui\":{\"manualUpload\":true}}},{\"id\":\"ui.manualUpload.disable\",\"intentExamples\":[\"auto upload\",\"instant upload\"],\"patchTemplate\":{\"ui\":{\"manualUpload\":false}}},{\"id\":\"ui.showProgress.enable\",\"intentExamples\":[\"show progress\",\"progress bar\"],\"patchTemplate\":{\"ui\":{\"showProgress\":true}}},{\"id\":\"ui.showProgress.disable\",\"intentExamples\":[\"hide progress\",\"no progress\"],\"patchTemplate\":{\"ui\":{\"showProgress\":false}}},{\"id\":\"limits.maxFileSizeBytes.set\",\"intentExamples\":[\"max file size\",\"size limit\"],\"patchTemplate\":{\"limits\":{\"maxFileSizeBytes\":\"{{value}}\"}}},{\"id\":\"limits.maxFilesPerBulk.set\",\"intentExamples\":[\"max files\",\"files per upload\"],\"patchTemplate\":{\"limits\":{\"maxFilesPerBulk\":\"{{value}}\"}}},{\"id\":\"options.defaultConflictPolicy.set\",\"intentExamples\":[\"conflict policy\",\"overwrite\",\"rename\"],\"patchTemplate\":{\"options\":{\"defaultConflictPolicy\":\"{{value}}\"}}},{\"id\":\"options.allowedExtensions.add\",\"intentExamples\":[\"allowed extensions\",\"extensions\",\"file types\"],\"patchTemplate\":{\"options\":{\"allowedExtensions\":[\"{{value}}\"]}}}],\"fieldResolvers\":{},\"hints\":[\"limits.maxFileSizeBytes expects bytes (e.g., 10485760 for 10MB).\",\"Use options.allowedExtensions for backend validation and ui.accept for input hints.\"]}}",
|
|
2075
2155
|
"sourcePointer": "projects/praxis-files-upload/src/lib/ai/files-upload-context-pack.ts",
|
|
@@ -2079,7 +2159,7 @@
|
|
|
2079
2159
|
"corpusVersion": "1.0.0"
|
|
2080
2160
|
},
|
|
2081
2161
|
{
|
|
2082
|
-
"chunkIndex":
|
|
2162
|
+
"chunkIndex": 20,
|
|
2083
2163
|
"chunkKind": "recipe",
|
|
2084
2164
|
"content": "{\"_comment\":\"Recipe for advanced file upload configuration with Praxis Files Upload.\",\"templateMeta\":{\"registryKey\":\"praxis-files-upload\",\"variantId\":\"base\",\"useWhen\":\"Base files upload configuration aligned with the current @praxisui/files-upload contract.\",\"examplePrompts\":[\"configure file upload limits\",\"set allowed file types for upload\",\"create an evidence upload flow with metadata and validation\"]},\"config\":{\"strategy\":\"direct\",\"ui\":{\"showDropzone\":true,\"accept\":[\"application/pdf\",\"image/png\",\"image/jpeg\",\".pdf\",\".png\",\".jpg\"],\"dense\":false,\"showConflictPolicySelector\":true,\"showMetadataForm\":true,\"showProgress\":true,\"manualUpload\":true,\"dropzone\":{\"expandOnDragProximity\":true,\"proximityPx\":96,\"expandMode\":\"inline\",\"expandHeight\":180,\"expandDebounceMs\":120},\"list\":{\"collapseAfter\":4,\"detailsMode\":\"card\",\"detailsShowTechnical\":true,\"detailsFields\":[\"id\",\"fileName\",\"contentType\",\"fileSize\",\"uploadedAt\",\"scanStatus\"]}},\"limits\":{\"maxFileSizeBytes\":10485760,\"maxFilesPerBulk\":6,\"maxBulkSizeBytes\":52428800},\"options\":{\"defaultConflictPolicy\":\"MAKE_UNIQUE\",\"strictValidation\":true,\"maxUploadSizeMb\":10,\"allowedExtensions\":[\"pdf\",\"png\",\"jpg\",\"jpeg\"],\"acceptMimeTypes\":[\"application/pdf\",\"image/png\",\"image/jpeg\"],\"targetDirectory\":\"mission-evidence\",\"enableVirusScanning\":true},\"bulk\":{\"failFast\":false,\"parallelUploads\":2,\"retryCount\":2,\"retryBackoffMs\":600},\"quotas\":{\"showQuotaWarnings\":true,\"blockOnExceed\":true},\"rateLimit\":{\"autoRetryOn429\":true,\"showBannerOn429\":true,\"maxAutoRetry\":2,\"baseBackoffMs\":1000},\"headers\":{\"tenantHeader\":\"X-Tenant-Id\",\"userHeader\":\"X-User-Id\"},\"messages\":{\"successSingle\":\"Evidence uploaded and ready for review.\",\"successBulk\":\"Evidence batch processed.\",\"errors\":{\"QUOTA_EXCEEDED\":\"Evidence quota reached.\",\"TIPO_ARQUIVO_INVALIDO\":\"Only PDF, PNG and JPEG files are accepted.\",\"FILE_TOO_LARGE\":\"File exceeds the configured size limit.\"}}}}",
|
|
2085
2165
|
"sourcePointer": "examples/ai-recipes/praxis-files-upload.json",
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/files-upload",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.88",
|
|
4
4
|
"description": "File upload components and services for Praxis UI with presigned and direct strategies, quotas and rate-limit handling.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/cdk": "^21.0.0",
|
|
8
8
|
"@angular/core": "^21.0.0",
|
|
9
9
|
"@angular/material": "^21.0.0",
|
|
10
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
11
|
-
"@praxisui/dynamic-fields": "^9.0.0-beta.
|
|
12
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
10
|
+
"@praxisui/core": "^9.0.0-beta.88",
|
|
11
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.88",
|
|
12
|
+
"@praxisui/settings-panel": "^9.0.0-beta.88",
|
|
13
13
|
"@angular/forms": "^21.0.0",
|
|
14
14
|
"@angular/router": "^21.0.0",
|
|
15
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
15
|
+
"@praxisui/ai": "^9.0.0-beta.88",
|
|
16
16
|
"rxjs": "~7.8.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|