From d6b025757771db126c13dec4f84cbc7ec224eab5 Mon Sep 17 00:00:00 2001 From: amith-skyflow <168510106+amith-skyflow@users.noreply.github.com> Date: Sat, 26 Apr 2025 14:21:17 +0530 Subject: [PATCH 01/22] SK-1912: add fern code (#194) * SK-2001: add fern code and update headers --- .github/workflows/beta-release.yml | 1 - .github/workflows/common-ci.yml | 4 +- .github/workflows/common-release.yml | 6 +- .github/workflows/internal-release.yml | 1 - .github/workflows/release.yml | 1 - package-lock.json | 10076 ++++++++++++---- package.json | 26 +- src/ _generated_/rest/Client.ts | 68 + src/ _generated_/rest/api.ts | 22 - src/ _generated_/rest/api/audit-api.ts | 546 - .../rest/api/authentication-api.ts | 162 - src/ _generated_/rest/api/binlookup-api.ts | 162 - .../rest/api/errors/BadRequestError.ts | 18 + .../rest/api/errors/NotFoundError.ts | 18 + .../rest/api/errors/UnauthorizedError.ts | 18 + src/ _generated_/rest/api/errors/index.ts | 3 + src/ _generated_/rest/api/index.ts | 3 + src/ _generated_/rest/api/query-api.ts | 170 - src/ _generated_/rest/api/records-api.ts | 1275 -- .../rest/api/resources/audit/client/Client.ts | 289 + .../rest/api/resources/audit/client/index.ts | 1 + .../AuditServiceListAuditEventsRequest.ts | 146 + .../resources/audit/client/requests/index.ts | 1 + .../rest/api/resources/audit/index.ts | 2 + ...stAuditEventsRequestFilterOpsActionType.ts | 43 + ...EventsRequestFilterOpsContextAccessType.ts | 11 + ...tEventsRequestFilterOpsContextActorType.ts | 10 + ...itEventsRequestFilterOpsContextAuthMode.ts | 15 + ...AuditEventsRequestFilterOpsResourceType.ts | 67 + ...iceListAuditEventsRequestSortOpsOrderBy.ts | 9 + .../rest/api/resources/audit/types/index.ts | 6 + .../resources/authentication/client/Client.ts | 137 + .../resources/authentication/client/index.ts | 1 + .../client/requests/V1GetAuthTokenRequest.ts | 25 + .../authentication/client/requests/index.ts | 1 + .../api/resources/authentication/index.ts | 1 + .../api/resources/binLookup/client/Client.ts | 124 + .../api/resources/binLookup/client/index.ts | 1 + .../client/requests/V1BinListRequest.ts | 21 + .../binLookup/client/requests/index.ts | 1 + .../rest/api/resources/binLookup/index.ts | 1 + src/ _generated_/rest/api/resources/index.ts | 14 + .../rest/api/resources/query/client/Client.ts | 127 + .../rest/api/resources/query/client/index.ts | 1 + .../requests/QueryServiceExecuteQueryBody.ts | 14 + .../resources/query/client/requests/index.ts | 1 + .../rest/api/resources/query/index.ts | 1 + .../api/resources/records/client/Client.ts | 1140 ++ .../api/resources/records/client/index.ts | 1 + .../requests/FileServiceUploadFileRequest.ts | 12 + .../RecordServiceBatchOperationBody.ts | 41 + .../RecordServiceBulkDeleteRecordBody.ts | 14 + .../RecordServiceBulkGetRecordRequest.ts | 52 + .../requests/RecordServiceGetRecordRequest.ts | 28 + .../requests/RecordServiceInsertRecordBody.ts | 40 + .../requests/RecordServiceUpdateRecordBody.ts | 26 + .../records/client/requests/index.ts | 7 + .../rest/api/resources/records/index.ts | 2 + ...ecordServiceBulkGetRecordRequestOrderBy.ts | 10 + ...ordServiceBulkGetRecordRequestRedaction.ts | 11 + .../RecordServiceGetRecordRequestRedaction.ts | 11 + .../rest/api/resources/records/types/index.ts | 3 + .../api/resources/tokens/client/Client.ts | 225 + .../rest/api/resources/tokens/client/index.ts | 1 + .../client/requests/V1DetokenizePayload.ts | 27 + .../client/requests/V1TokenizePayload.ts | 14 + .../resources/tokens/client/requests/index.ts | 2 + .../rest/api/resources/tokens/index.ts | 1 + src/ _generated_/rest/api/tokens-api.ts | 267 - .../api/types/AuditEventAuditResourceType.ts | 70 + .../rest/api/types/AuditEventContext.ts | 32 + .../rest/api/types/AuditEventData.ts | 11 + .../rest/api/types/AuditEventHttpInfo.ts | 10 + .../rest/api/types/BatchRecordMethod.ts | 15 + .../rest/api/types/ContextAccessType.ts | 13 + .../rest/api/types/ContextAuthMode.ts | 14 + .../DetokenizeRecordResponseValueType.ts | 25 + .../rest/api/types/GooglerpcStatus.ts | 11 + .../rest/api/types/ProtobufAny.ts | 7 + .../rest/api/types/RedactionEnumRedaction.ts | 14 + .../rest/api/types/RequestActionType.ts | 43 + .../rest/api/types/V1AuditAfterOptions.ts | 10 + .../rest/api/types/V1AuditEventResponse.ts | 18 + .../rest/api/types/V1AuditResponse.ts | 11 + .../rest/api/types/V1AuditResponseEvent.ts | 20 + .../api/types/V1AuditResponseEventRequest.ts | 25 + .../api/types/V1BatchOperationResponse.ts | 10 + .../rest/api/types/V1BatchRecord.ts | 26 + .../rest/api/types/V1BinListResponse.ts | 13 + .../api/types/V1BulkDeleteRecordResponse.ts | 8 + .../rest/api/types/V1BulkGetRecordResponse.ts | 10 + src/ _generated_/rest/api/types/V1Byot.ts | 17 + src/ _generated_/rest/api/types/V1Card.ts | 27 + .../rest/api/types/V1DeleteFileResponse.ts | 10 + .../rest/api/types/V1DeleteRecordResponse.ts | 10 + .../api/types/V1DetokenizeRecordRequest.ts | 11 + .../api/types/V1DetokenizeRecordResponse.ts | 15 + .../rest/api/types/V1DetokenizeResponse.ts | 10 + .../rest/api/types/V1FieldRecords.ts | 13 + .../rest/api/types/V1FileAvScanStatus.ts | 28 + .../rest/api/types/V1GetAuthTokenResponse.ts | 10 + .../api/types/V1GetFileScanStatusResponse.ts | 9 + .../rest/api/types/V1GetQueryResponse.ts | 10 + .../rest/api/types/V1InsertRecordResponse.ts | 10 + .../rest/api/types/V1MemberType.ts | 13 + .../rest/api/types/V1RecordMetaProperties.ts | 10 + .../rest/api/types/V1TokenizeRecordRequest.ts | 10 + .../api/types/V1TokenizeRecordResponse.ts | 8 + .../rest/api/types/V1TokenizeResponse.ts | 10 + .../rest/api/types/V1UpdateRecordResponse.ts | 10 + .../rest/api/types/V1VaultFieldMapping.ts | 15 + .../rest/api/types/V1VaultSchemaConfig.ts | 16 + src/ _generated_/rest/api/types/index.ts | 43 + src/ _generated_/rest/base.ts | 86 - src/ _generated_/rest/common.ts | 151 - src/ _generated_/rest/configuration.ts | 110 - src/ _generated_/rest/core/auth/BasicAuth.ts | 31 + .../rest/core/auth/BearerToken.ts | 15 + src/ _generated_/rest/core/auth/index.ts | 2 + .../rest/core/fetcher/APIResponse.ts | 23 + src/ _generated_/rest/core/fetcher/Fetcher.ts | 151 + .../rest/core/fetcher/HttpResponsePromise.ts | 116 + .../rest/core/fetcher/RawResponse.ts | 59 + .../rest/core/fetcher/Supplier.ts | 11 + .../rest/core/fetcher/createRequestUrl.ts | 10 + .../rest/core/fetcher/getFetchFn.ts | 25 + .../rest/core/fetcher/getHeader.ts | 8 + .../rest/core/fetcher/getRequestBody.ts | 16 + .../rest/core/fetcher/getResponseBody.ts | 34 + src/ _generated_/rest/core/fetcher/index.ts | 8 + .../rest/core/fetcher/makeRequest.ts | 44 + .../rest/core/fetcher/requestWithRetries.ts | 33 + src/ _generated_/rest/core/fetcher/signals.ts | 38 + .../Node18UniversalStreamWrapper.ts | 257 + .../stream-wrappers/NodePre18StreamWrapper.ts | 107 + .../stream-wrappers/UndiciStreamWrapper.ts | 243 + .../stream-wrappers/chooseStreamWrapper.ts | 34 + .../core/form-data-utils/FormDataWrapper.ts | 181 + .../form-data-utils/encodeAsFormParameter.ts | 15 + .../rest/core/form-data-utils/index.ts | 2 + src/ _generated_/rest/core/index.ts | 4 + src/ _generated_/rest/core/json.ts | 27 + src/ _generated_/rest/core/runtime/index.ts | 1 + src/ _generated_/rest/core/runtime/runtime.ts | 131 + src/ _generated_/rest/environments.ts | 10 + src/ _generated_/rest/errors/SkyflowError.ts | 55 + .../rest/errors/SkyflowTimeoutError.ts | 10 + src/ _generated_/rest/errors/index.ts | 2 + src/ _generated_/rest/index.ts | 22 +- .../models/audit-event-audit-resource-type.ts | 59 - .../rest/models/audit-event-context.ts | 107 - .../rest/models/audit-event-data.ts | 30 - .../rest/models/audit-event-httpinfo.ts | 36 - .../rest/models/batch-record-method.ts | 34 - .../rest/models/context-access-type.ts | 32 - .../rest/models/context-auth-mode.ts | 33 - .../detokenize-record-response-value-type.ts | 38 - .../rest/models/googlerpc-status copy.ts | 45 - .../rest/models/googlerpc-status.ts | 45 - src/ _generated_/rest/models/index.ts | 58 - .../rest/models/protobuf-any copy.ts | 32 - src/ _generated_/rest/models/protobuf-any.ts | 32 - .../query-service-execute-query-body.ts | 30 - .../record-service-batch-operation-body.ts | 50 - .../record-service-bulk-delete-record-body.ts | 30 - .../record-service-insert-record-body.ts | 62 - .../record-service-update-record-body.ts | 50 - .../rest/models/redaction-enum-redaction.ts | 33 - .../rest/models/request-action-type.ts | 47 - .../rest/models/v1-audit-after-options.ts | 36 - .../rest/models/v1-audit-event-response.ts | 51 - .../models/v1-audit-response-event-request.ts | 92 - .../rest/models/v1-audit-response-event.ts | 69 - .../rest/models/v1-audit-response.ts | 42 - .../models/v1-batch-operation-response.ts | 36 - .../rest/models/v1-batch-record.ts | 92 - .../rest/models/v1-binlist-request.ts | 51 - .../rest/models/v1-binlist-response.ts | 33 - .../models/v1-bulk-delete-record-response.ts | 30 - .../models/v1-bulk-get-record-response.ts | 33 - src/ _generated_/rest/models/v1-byot.ts | 32 - src/ _generated_/rest/models/v1-card.ts | 78 - .../rest/models/v1-delete-file-response.ts | 36 - .../rest/models/v1-delete-record-response.ts | 36 - .../rest/models/v1-detokenize-payload.ts | 45 - .../models/v1-detokenize-record-request.ts | 41 - .../models/v1-detokenize-record-response.ts | 53 - .../rest/models/v1-detokenize-response.ts | 33 - .../rest/models/v1-field-records.ts | 36 - .../rest/models/v1-file-avscan-status.ts | 38 - src/ _generated_/rest/models/v1-file-info.ts | 30 - .../rest/models/v1-get-auth-token-request.ts | 60 - .../rest/models/v1-get-auth-token-response.ts | 36 - .../rest/models/v1-get-by-token-response.ts | 36 - .../v1-get-file-scan-status-response.ts | 35 - .../rest/models/v1-get-query-response.ts | 33 - .../rest/models/v1-insert-record-response.ts | 33 - .../rest/models/v1-member-type.ts | 32 - .../rest/models/v1-record-meta-properties.ts | 36 - .../rest/models/v1-sort-options-order-by.ts | 31 - .../rest/models/v1-tokenize-payload.ts | 33 - .../rest/models/v1-tokenize-record-request.ts | 36 - .../models/v1-tokenize-record-response.ts | 30 - .../rest/models/v1-tokenize-response.ts | 33 - .../rest/models/v1-update-record-response.ts | 36 - .../rest/models/v1-update-request-record.ts | 36 - .../rest/models/v1-vault-field-mapping.ts | 42 - .../rest/models/v1-vault-schema-config.ts | 45 - src/ _generated_/rest/version.ts | 1 + src/error/codes/index.ts | 5 + src/error/messages/index.ts | 5 + src/index.ts | 5 +- src/service-account/client/index.ts | 13 +- src/service-account/index.ts | 26 +- src/utils/validations/index.ts | 109 +- src/vault/client/index.ts | 161 +- src/vault/controller/connections/index.ts | 71 +- src/vault/controller/vault/index.ts | 149 +- src/vault/model/options/fileUpload/index.ts | 49 + src/vault/model/options/update/index.ts | 6 +- src/vault/model/request/detokenize/index.ts | 29 +- src/vault/model/request/file-upload/index.ts | 32 +- src/vault/model/request/update/index.ts | 8 +- src/vault/types/index.ts | 9 +- test/service-account/token.test.js | 51 +- test/vault/client/client.test.js | 303 +- test/vault/controller/connection.test.js | 176 +- test/vault/controller/vault.test.js | 691 +- tsconfig.json | 3 +- 229 files changed, 14118 insertions(+), 8702 deletions(-) create mode 100644 src/ _generated_/rest/Client.ts delete mode 100644 src/ _generated_/rest/api.ts delete mode 100644 src/ _generated_/rest/api/audit-api.ts delete mode 100644 src/ _generated_/rest/api/authentication-api.ts delete mode 100644 src/ _generated_/rest/api/binlookup-api.ts create mode 100644 src/ _generated_/rest/api/errors/BadRequestError.ts create mode 100644 src/ _generated_/rest/api/errors/NotFoundError.ts create mode 100644 src/ _generated_/rest/api/errors/UnauthorizedError.ts create mode 100644 src/ _generated_/rest/api/errors/index.ts create mode 100644 src/ _generated_/rest/api/index.ts delete mode 100644 src/ _generated_/rest/api/query-api.ts delete mode 100644 src/ _generated_/rest/api/records-api.ts create mode 100644 src/ _generated_/rest/api/resources/audit/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/audit/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts create mode 100644 src/ _generated_/rest/api/resources/audit/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/audit/index.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts create mode 100644 src/ _generated_/rest/api/resources/audit/types/index.ts create mode 100644 src/ _generated_/rest/api/resources/authentication/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/authentication/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts create mode 100644 src/ _generated_/rest/api/resources/authentication/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/authentication/index.ts create mode 100644 src/ _generated_/rest/api/resources/binLookup/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/binLookup/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts create mode 100644 src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/binLookup/index.ts create mode 100644 src/ _generated_/rest/api/resources/index.ts create mode 100644 src/ _generated_/rest/api/resources/query/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/query/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts create mode 100644 src/ _generated_/rest/api/resources/query/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/query/index.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts create mode 100644 src/ _generated_/rest/api/resources/records/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/records/index.ts create mode 100644 src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts create mode 100644 src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts create mode 100644 src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts create mode 100644 src/ _generated_/rest/api/resources/records/types/index.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/tokens/index.ts delete mode 100644 src/ _generated_/rest/api/tokens-api.ts create mode 100644 src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts create mode 100644 src/ _generated_/rest/api/types/AuditEventContext.ts create mode 100644 src/ _generated_/rest/api/types/AuditEventData.ts create mode 100644 src/ _generated_/rest/api/types/AuditEventHttpInfo.ts create mode 100644 src/ _generated_/rest/api/types/BatchRecordMethod.ts create mode 100644 src/ _generated_/rest/api/types/ContextAccessType.ts create mode 100644 src/ _generated_/rest/api/types/ContextAuthMode.ts create mode 100644 src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts create mode 100644 src/ _generated_/rest/api/types/GooglerpcStatus.ts create mode 100644 src/ _generated_/rest/api/types/ProtobufAny.ts create mode 100644 src/ _generated_/rest/api/types/RedactionEnumRedaction.ts create mode 100644 src/ _generated_/rest/api/types/RequestActionType.ts create mode 100644 src/ _generated_/rest/api/types/V1AuditAfterOptions.ts create mode 100644 src/ _generated_/rest/api/types/V1AuditEventResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1AuditResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1AuditResponseEvent.ts create mode 100644 src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts create mode 100644 src/ _generated_/rest/api/types/V1BatchOperationResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1BatchRecord.ts create mode 100644 src/ _generated_/rest/api/types/V1BinListResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1Byot.ts create mode 100644 src/ _generated_/rest/api/types/V1Card.ts create mode 100644 src/ _generated_/rest/api/types/V1DeleteFileResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts create mode 100644 src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1DetokenizeResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1FieldRecords.ts create mode 100644 src/ _generated_/rest/api/types/V1FileAvScanStatus.ts create mode 100644 src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1GetQueryResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1InsertRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1MemberType.ts create mode 100644 src/ _generated_/rest/api/types/V1RecordMetaProperties.ts create mode 100644 src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts create mode 100644 src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1TokenizeResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1VaultFieldMapping.ts create mode 100644 src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts create mode 100644 src/ _generated_/rest/api/types/index.ts delete mode 100644 src/ _generated_/rest/base.ts delete mode 100644 src/ _generated_/rest/common.ts delete mode 100644 src/ _generated_/rest/configuration.ts create mode 100644 src/ _generated_/rest/core/auth/BasicAuth.ts create mode 100644 src/ _generated_/rest/core/auth/BearerToken.ts create mode 100644 src/ _generated_/rest/core/auth/index.ts create mode 100644 src/ _generated_/rest/core/fetcher/APIResponse.ts create mode 100644 src/ _generated_/rest/core/fetcher/Fetcher.ts create mode 100644 src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts create mode 100644 src/ _generated_/rest/core/fetcher/RawResponse.ts create mode 100644 src/ _generated_/rest/core/fetcher/Supplier.ts create mode 100644 src/ _generated_/rest/core/fetcher/createRequestUrl.ts create mode 100644 src/ _generated_/rest/core/fetcher/getFetchFn.ts create mode 100644 src/ _generated_/rest/core/fetcher/getHeader.ts create mode 100644 src/ _generated_/rest/core/fetcher/getRequestBody.ts create mode 100644 src/ _generated_/rest/core/fetcher/getResponseBody.ts create mode 100644 src/ _generated_/rest/core/fetcher/index.ts create mode 100644 src/ _generated_/rest/core/fetcher/makeRequest.ts create mode 100644 src/ _generated_/rest/core/fetcher/requestWithRetries.ts create mode 100644 src/ _generated_/rest/core/fetcher/signals.ts create mode 100644 src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts create mode 100644 src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts create mode 100644 src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts create mode 100644 src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts create mode 100644 src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts create mode 100644 src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts create mode 100644 src/ _generated_/rest/core/form-data-utils/index.ts create mode 100644 src/ _generated_/rest/core/index.ts create mode 100644 src/ _generated_/rest/core/json.ts create mode 100644 src/ _generated_/rest/core/runtime/index.ts create mode 100644 src/ _generated_/rest/core/runtime/runtime.ts create mode 100644 src/ _generated_/rest/environments.ts create mode 100644 src/ _generated_/rest/errors/SkyflowError.ts create mode 100644 src/ _generated_/rest/errors/SkyflowTimeoutError.ts create mode 100644 src/ _generated_/rest/errors/index.ts delete mode 100644 src/ _generated_/rest/models/audit-event-audit-resource-type.ts delete mode 100644 src/ _generated_/rest/models/audit-event-context.ts delete mode 100644 src/ _generated_/rest/models/audit-event-data.ts delete mode 100644 src/ _generated_/rest/models/audit-event-httpinfo.ts delete mode 100644 src/ _generated_/rest/models/batch-record-method.ts delete mode 100644 src/ _generated_/rest/models/context-access-type.ts delete mode 100644 src/ _generated_/rest/models/context-auth-mode.ts delete mode 100644 src/ _generated_/rest/models/detokenize-record-response-value-type.ts delete mode 100644 src/ _generated_/rest/models/googlerpc-status copy.ts delete mode 100644 src/ _generated_/rest/models/googlerpc-status.ts delete mode 100644 src/ _generated_/rest/models/index.ts delete mode 100644 src/ _generated_/rest/models/protobuf-any copy.ts delete mode 100644 src/ _generated_/rest/models/protobuf-any.ts delete mode 100644 src/ _generated_/rest/models/query-service-execute-query-body.ts delete mode 100644 src/ _generated_/rest/models/record-service-batch-operation-body.ts delete mode 100644 src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts delete mode 100644 src/ _generated_/rest/models/record-service-insert-record-body.ts delete mode 100644 src/ _generated_/rest/models/record-service-update-record-body.ts delete mode 100644 src/ _generated_/rest/models/redaction-enum-redaction.ts delete mode 100644 src/ _generated_/rest/models/request-action-type.ts delete mode 100644 src/ _generated_/rest/models/v1-audit-after-options.ts delete mode 100644 src/ _generated_/rest/models/v1-audit-event-response.ts delete mode 100644 src/ _generated_/rest/models/v1-audit-response-event-request.ts delete mode 100644 src/ _generated_/rest/models/v1-audit-response-event.ts delete mode 100644 src/ _generated_/rest/models/v1-audit-response.ts delete mode 100644 src/ _generated_/rest/models/v1-batch-operation-response.ts delete mode 100644 src/ _generated_/rest/models/v1-batch-record.ts delete mode 100644 src/ _generated_/rest/models/v1-binlist-request.ts delete mode 100644 src/ _generated_/rest/models/v1-binlist-response.ts delete mode 100644 src/ _generated_/rest/models/v1-bulk-delete-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-bulk-get-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-byot.ts delete mode 100644 src/ _generated_/rest/models/v1-card.ts delete mode 100644 src/ _generated_/rest/models/v1-delete-file-response.ts delete mode 100644 src/ _generated_/rest/models/v1-delete-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-detokenize-payload.ts delete mode 100644 src/ _generated_/rest/models/v1-detokenize-record-request.ts delete mode 100644 src/ _generated_/rest/models/v1-detokenize-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-detokenize-response.ts delete mode 100644 src/ _generated_/rest/models/v1-field-records.ts delete mode 100644 src/ _generated_/rest/models/v1-file-avscan-status.ts delete mode 100644 src/ _generated_/rest/models/v1-file-info.ts delete mode 100644 src/ _generated_/rest/models/v1-get-auth-token-request.ts delete mode 100644 src/ _generated_/rest/models/v1-get-auth-token-response.ts delete mode 100644 src/ _generated_/rest/models/v1-get-by-token-response.ts delete mode 100644 src/ _generated_/rest/models/v1-get-file-scan-status-response.ts delete mode 100644 src/ _generated_/rest/models/v1-get-query-response.ts delete mode 100644 src/ _generated_/rest/models/v1-insert-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-member-type.ts delete mode 100644 src/ _generated_/rest/models/v1-record-meta-properties.ts delete mode 100644 src/ _generated_/rest/models/v1-sort-options-order-by.ts delete mode 100644 src/ _generated_/rest/models/v1-tokenize-payload.ts delete mode 100644 src/ _generated_/rest/models/v1-tokenize-record-request.ts delete mode 100644 src/ _generated_/rest/models/v1-tokenize-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-tokenize-response.ts delete mode 100644 src/ _generated_/rest/models/v1-update-record-response.ts delete mode 100644 src/ _generated_/rest/models/v1-update-request-record.ts delete mode 100644 src/ _generated_/rest/models/v1-vault-field-mapping.ts delete mode 100644 src/ _generated_/rest/models/v1-vault-schema-config.ts create mode 100644 src/ _generated_/rest/version.ts create mode 100644 src/vault/model/options/fileUpload/index.ts diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 4c2af9cd..a7f44e8f 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -12,6 +12,5 @@ jobs: build-and-deploy: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://registry.npmjs.org' tag: beta secrets: inherit diff --git a/.github/workflows/common-ci.yml b/.github/workflows/common-ci.yml index b0723b93..92f51d18 100644 --- a/.github/workflows/common-ci.yml +++ b/.github/workflows/common-ci.yml @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 + - uses: actions/setup-node@v3 with: - node-version: 14.17.6 + node-version: '20.x' - name: Install Packages run: npm install diff --git a/.github/workflows/common-release.yml b/.github/workflows/common-release.yml index 6ba89718..a752624d 100644 --- a/.github/workflows/common-release.yml +++ b/.github/workflows/common-release.yml @@ -3,9 +3,6 @@ name: Common Release Workflow on: workflow_call: inputs: - registry-url: - required: true - type: string tag: required: false type: string @@ -21,8 +18,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@v1 with: - node-version: 14.17.6 - registry-url: ${{ inputs.registry-url }} + node-version: 16.20.2 - name: Install Packages run: npm install diff --git a/.github/workflows/internal-release.yml b/.github/workflows/internal-release.yml index c3f5a63d..a87afa1d 100644 --- a/.github/workflows/internal-release.yml +++ b/.github/workflows/internal-release.yml @@ -15,6 +15,5 @@ jobs: call-common-workflow: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://prekarilabs.jfrog.io/prekarilabs/api/npm/npm/' tag: internal secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3a7b7bfc..5ed01bb4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,5 @@ jobs: call-common-workflow: uses: ./.github/workflows/common-release.yml with: - registry-url: 'https://registry.npmjs.org' tag: public secrets: inherit diff --git a/package-lock.json b/package-lock.json index e9301565..25dbf60a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,25 @@ { "name": "skyflow-node", - "version": "1.14.0", - "lockfileVersion": 3, + "version": "2.0.0-beta.1-dev.ad67c9b", + "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "skyflow-node", - "version": "1.14.0", + "version": "2.0.0-beta.1-dev.ad67c9b", "license": "MIT", "dependencies": { - "axios": "^1.6.1", "dotenv": "^16.4.5", + "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", + "formdata-node": "^6.0.3", + "js-base64": "3.7.7", "jsonwebtoken": "^9.0.2", - "jwt-decode": "^2.2.0" + "jwt-decode": "^2.2.0", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "url-join": "4.0.1" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.25.7", @@ -20,11 +27,20 @@ "@babel/plugin-transform-runtime": "^7.25.7", "@babel/preset-env": "^7.25.8", "@babel/preset-typescript": "^7.25.7", + "@types/jest": "^29.5.14", "@types/jsonwebtoken": "^9.0.6", - "@types/node": "12.11.5 - 12.20.42", + "@types/node": "^18.19.70", + "@types/node-fetch": "^2.6.12", + "@types/qs": "^6.9.17", + "@types/readable-stream": "^4.0.18", + "@types/url-join": "4.0.1", "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typescript": "^4.0 || ^5.0" + "jest-environment-jsdom": "^29.7.0", + "prettier": "^3.4.2", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", + "typescript": "~5.7.2", + "webpack": "^5.97.1" } }, "node_modules/@ampproject/remapping": { @@ -41,12 +57,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.9.tgz", - "integrity": "sha512-z88xeGxnzehn2sqZ8UdGQEvYErF1odv2CftxInpSYJt6uHuPe9YjahKZITGs3l5LeI9d2ROG+obuDAoSlqbNfQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -54,30 +71,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.9.tgz", - "integrity": "sha512-yD+hEuJ/+wAJ4Ox2/rpNv5HIuPG82x3ZlQvYVn8iYCprdxzE7P1udpGF1jyjQVBU4dgznN+k2h103vxZ7NdPyw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.9.tgz", - "integrity": "sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helpers": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -93,12 +110,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.9.tgz", - "integrity": "sha512-omlUGkr5EaoIJrhLf9CJ0TvjBRpd9+AXRG//0GEQ9THSo8wPiTlbpy1/Ow8ZTrbXpjd9FHXfbFQx32I04ht0FA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "dev": true, "dependencies": { - "@babel/types": "^7.25.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -119,26 +137,13 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -149,17 +154,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/traverse": "^7.27.0", "semver": "^6.3.1" }, "engines": { @@ -170,13 +175,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -187,9 +192,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -229,13 +234,12 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.9.tgz", - "integrity": "sha512-TvLZY/F3+GvdRYFZFyxMvnsKi+4oJdgZzU3BoGN9Uc2d9C6zfNwJcKKhjqLAhK8i46mv93jsO74fDh3ih6rpHA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, @@ -259,9 +263,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -285,14 +289,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -301,19 +305,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", @@ -369,40 +360,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.9.tgz", - "integrity": "sha512-oKWp3+usOJSzDZOucZUAMayhPz/xVjzymyDzUN8dk0Wd3RWMlGLXi07UCQ/CgQVb8LvXx3XBajJH4XGgkt7H7g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz", - "integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -586,9 +562,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.9.tgz", - "integrity": "sha512-4GHX5uzr5QMOOuzV0an9MFju4hKlm0OyePl/lHhcsTVae5t/IKVHnb8W67Vr6FuLlk5lPqLB7n7O+K5R46emYg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -601,9 +577,9 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.9.tgz", - "integrity": "sha512-u3EN9ub8LyYvgTnrgp8gboElouayiwPdnM7x5tcnW3iSt09/lQYPwMNK40I9IUxo7QOZhAsPHCmmuO7EPdruqg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -803,14 +779,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -837,12 +813,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -852,12 +828,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -883,9 +859,9 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.9.tgz", - "integrity": "sha512-UIf+72C7YJ+PJ685/PpATbCz00XqiFEzHX5iysRwfvNT0Ko+FaXSvRgLytFSp8xUItrG9pFM/KoBBZDrY/cYyg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1012,12 +988,11 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1043,12 +1018,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { @@ -1152,14 +1127,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1234,12 +1208,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1406,12 +1380,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1421,6 +1395,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", @@ -1437,15 +1427,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1503,12 +1493,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1518,12 +1508,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1533,14 +1523,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" }, @@ -1615,14 +1605,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.9.tgz", - "integrity": "sha512-XqDEt+hfsQukahSX9JOBDHhpUHDhj2zGSxoqWQFCMajOSBnbhBdgON/bU/5PkBA1yX5tqW6tTzuIPVsZTQ7h5Q==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -1630,16 +1620,16 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.9", - "@babel/plugin-syntax-import-attributes": "^7.25.9", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", "@babel/plugin-transform-classes": "^7.25.9", "@babel/plugin-transform-computed-properties": "^7.25.9", "@babel/plugin-transform-destructuring": "^7.25.9", @@ -1647,21 +1637,21 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", "@babel/plugin-transform-function-name": "^7.25.9", "@babel/plugin-transform-json-strings": "^7.25.9", "@babel/plugin-transform-literals": "^7.25.9", "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -1672,21 +1662,22 @@ "@babel/plugin-transform-private-property-in-object": "^7.25.9", "@babel/plugin-transform-property-literals": "^7.25.9", "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", "@babel/plugin-transform-reserved-words": "^7.25.9", "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1711,16 +1702,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.9.tgz", - "integrity": "sha512-XWxw1AcKk36kgxf4C//fl0ikjLeqGUWn062/Fd8GtpTfDJOX6Ud95FK+4JlDA36BX4bNGndXi3a6Vr4Jo5/61A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -1730,9 +1721,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", - "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1742,30 +1733,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1774,9 +1765,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz", - "integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -1834,76 +1825,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", @@ -1951,76 +1872,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -2136,86 +1987,16 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { @@ -2288,76 +2069,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -2375,80 +2086,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -2477,6 +2118,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -2517,6 +2168,15 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2558,6 +2218,32 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -2591,27 +2277,103 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", - "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", "dev": true, "dependencies": { + "@types/ms": "*", "@types/node": "*" } }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, "node_modules/@types/node": { - "version": "12.20.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.42.tgz", - "integrity": "sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw==", + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==", + "dev": true + }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", @@ -2627,40 +2389,310 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -2696,16 +2728,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2727,76 +2749,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -2845,13 +2797,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -2859,25 +2811,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2931,6 +2883,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2954,9 +2925,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -2973,9 +2944,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -3006,6 +2977,29 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -3017,6 +3011,33 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3036,9 +3057,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001669", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", - "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "dev": true, "funding": [ { @@ -3056,17 +3077,19 @@ ] }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -3078,6 +3101,15 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -3094,9 +3126,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", - "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true }, "node_modules/cliui": { @@ -3130,18 +3162,21 @@ "dev": true }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/combined-stream": { @@ -3155,6 +3190,12 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3168,12 +3209,12 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", "dev": true, "dependencies": { - "browserslist": "^4.23.3" + "browserslist": "^4.24.4" }, "funding": { "type": "opencollective", @@ -3201,94 +3242,62 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/create-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "cssom": "~0.3.6" }, "engines": { "node": ">=8" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">= 8" + "node": ">=12" } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -3302,6 +3311,12 @@ } } }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true + }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -3351,10 +3366,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "engines": { "node": ">=12" }, @@ -3362,6 +3390,19 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3386,9 +3427,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.43", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.43.tgz", - "integrity": "sha512-NxnmFBHDl5Sachd2P46O7UJiMaMHMLSofoIWVJq3mj8NJgG0umiSeljAVP9lGzjI0UDLJJ5jjoGjcrB8RSbjLQ==", + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", "dev": true }, "node_modules/emittery": { @@ -3409,6 +3450,31 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3418,6 +3484,53 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3428,12 +3541,55 @@ } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=4.0" } }, "node_modules/esprima": { @@ -3449,6 +3605,27 @@ "node": ">=4" } }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3458,6 +3635,22 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3506,12 +3699,34 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3576,38 +3791,36 @@ "node": ">=8" } }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==", + "engines": { + "node": ">= 18" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3632,7 +3845,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3655,6 +3867,29 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3664,6 +3899,18 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -3697,7 +3944,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globals": { + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", @@ -3706,6 +3959,17 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3713,19 +3977,43 @@ "dev": true }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3733,12 +4021,51 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3748,6 +4075,37 @@ "node": ">=10.17.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/import-local": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", @@ -3800,9 +4158,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -3841,6 +4199,12 @@ "node": ">=0.12.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3885,9 +4249,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3910,27 +4274,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -3976,76 +4319,6 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -4117,76 +4390,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", @@ -4220,80 +4423,10 @@ } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -4335,76 +4468,6 @@ } } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", @@ -4420,76 +4483,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -4518,74 +4511,31 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "peerDependencies": { + "canvas": "^2.5.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, "node_modules/jest-environment-node": { @@ -4667,80 +4617,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -4757,76 +4637,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", @@ -4900,76 +4710,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runner": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", @@ -5002,76 +4742,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-runtime": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", @@ -5105,76 +4775,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -5206,68 +4806,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -5276,18 +4818,6 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -5305,76 +4835,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -5392,21 +4852,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -5419,61 +4864,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -5493,169 +4883,5667 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { - "has-flag": "^4.0.0" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==" + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz", + "integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==", + "dev": true + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-jest": { + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "dev": true, + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.37.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true + }, + "@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "requires": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "requires": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "requires": { + "@babel/types": "^7.27.0" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.25.9.tgz", + "integrity": "sha512-I/Vl1aQnPsrrn837oLbo+VQtkNcjuuiATqwmuweg4fTauwHHQoxyjmjjOVKyO8OaTxgqYTKW3LuQsykXjDf5Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-typescript": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" + } + }, + "@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/jsonwebtoken": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", + "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "dev": true, + "requires": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true + }, + "@types/node": { + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true + }, + "@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "dev": true, + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "@types/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-wDXw9LEEUHyV+7UWy7U315nrJGJ7p1BzaCxDpEoLr789Dk1WDVMMlf3iBfbG2F8NdWnYyFbtTxUn2ZNbm1Q4LQ==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true + }, + "acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "requires": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "requires": { + "browserslist": "^4.24.4" + } + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + } + }, + "form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==" + }, + "formdata-node": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", + "integrity": "sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" } }, - "node_modules/js-tokens": { + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" + }, + "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/js-yaml": { + "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "dependencies": { + "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } + "jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + } + }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true }, - "node_modules/json-parse-even-better-errors": { + "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json5": { + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/jsonwebtoken": { + "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { + "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -5667,885 +10555,993 @@ "ms": "^2.1.1", "semver": "^7.5.4" }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==" + } } }, - "node_modules/jwa": { + "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { + "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "node_modules/jws": { + "jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { + "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "node_modules/jwt-decode": { + "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==" }, - "node_modules/kleur": { + "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/leven": { + "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/lines-and-columns": { + "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/locate-path": { + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "dependencies": { + "requires": { "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/lodash.debounce": { + "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.includes": { + "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "node_modules/lodash.isboolean": { + "lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, - "node_modules/lodash.isinteger": { + "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, - "node_modules/lodash.isnumber": { + "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" }, - "node_modules/lodash.isplainobject": { + "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, - "node_modules/lodash.isstring": { + "lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, - "node_modules/lodash.memoize": { + "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, - "node_modules/lodash.once": { + "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "node_modules/lru-cache": { + "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "dependencies": { + "requires": { "yallist": "^3.0.2" } }, - "node_modules/make-dir": { + "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "dependencies": { + "requires": { "semver": "^7.5.3" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } } }, - "node_modules/make-error": { + "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "node_modules/makeerror": { + "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "dependencies": { + "requires": { "tmpl": "1.0.5" } }, - "node_modules/merge-stream": { + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/micromatch": { + "micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "dependencies": { + "requires": { "braces": "^3.0.3", "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/mime-db": { + "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, - "node_modules/mime-types": { + "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { + "requires": { "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" } }, - "node_modules/mimic-fn": { + "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/minimatch": { + "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "dependencies": { + "requires": { "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" } }, - "node_modules/ms": { + "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/natural-compare": { + "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-int64": { + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true }, - "node_modules/normalize-path": { + "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/npm-run-path": { + "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "dependencies": { + "requires": { "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/once": { + "nwsapi": { + "version": "2.2.19", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz", + "integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==", + "dev": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "dependencies": { + "requires": { "wrappy": "1" } }, - "node_modules/onetime": { + "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "dependencies": { + "requires": { "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-limit": { + "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "dependencies": { + "requires": { "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { + "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "dependencies": { + "requires": { "p-limit": "^2.2.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } } }, - "node_modules/p-try": { + "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/parse-json": { + "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { + "parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "requires": { + "entities": "^4.5.0" + } + }, + "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/path-is-absolute": { + "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/path-key": { + "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/path-parse": { + "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/picocolors": { + "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "node_modules/picomatch": { + "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } + "dev": true }, - "node_modules/pirates": { + "pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } + "dev": true }, - "node_modules/pkg-dir": { + "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "dependencies": { + "requires": { "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/pretty-format": { + "prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true + }, + "pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "dependencies": { + "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, - "node_modules/prompts": { + "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "dependencies": { + "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } }, - "node_modules/pure-rand": { + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "pure-rand": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "requires": { + "safe-buffer": "^5.1.0" + } }, - "node_modules/react-is": { + "react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, - "node_modules/regenerate": { + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + }, + "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "node_modules/regenerate-unicode-properties": { + "regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, - "dependencies": { + "requires": { "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regenerator-runtime": { + "regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, - "node_modules/regenerator-transform": { + "regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "dependencies": { + "requires": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, - "dependencies": { + "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/regjsgen": { + "regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true }, - "node_modules/regjsparser": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz", - "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==", + "regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, - "dependencies": { + "requires": { "jsesc": "~3.0.2" }, - "bin": { - "regjsparser": "bin/parser" + "dependencies": { + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + } } }, - "node_modules/require-directory": { + "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", + "requires": { + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { + "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "dependencies": { + "requires": { "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/resolve-from": { + "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "xmlchars": "^2.2.0" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { + "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "randombytes": "^2.1.0" } }, - "node_modules/shebang-command": { + "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "dependencies": { + "requires": { "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/shebang-regex": { + "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" } }, - "node_modules/signal-exit": { + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sisteransi": { + "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "node_modules/slash": { + "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/source-map": { + "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/source-map-support": { + "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "dependencies": { + "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/sprintf-js": { + "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/stack-utils": { + "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "dependencies": { + "requires": { "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, - "node_modules/string-length": { + "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "dependencies": { + "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/string-width": { + "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "dependencies": { + "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-ansi": { + "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "dependencies": { + "requires": { "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" } }, - "node_modules/strip-bom": { + "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dev": true }, - "node_modules/strip-final-newline": { + "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/strip-json-comments": { + "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "has-flag": "^4.0.0" } }, - "node_modules/supports-preserve-symlinks-flag": { + "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "node_modules/test-exclude": { + "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "dependencies": { + "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" } }, - "node_modules/tmpl": { + "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-regex-range": { + "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "dependencies": { + "requires": { "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" } }, - "node_modules/ts-jest": { - "version": "29.2.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", - "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "dependencies": { + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "ts-jest": { + "version": "29.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", + "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "dev": true, + "requires": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", @@ -6553,285 +11549,315 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.1", + "type-fest": "^4.37.0", "yargs-parser": "^21.1.1" }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true }, - "esbuild": { - "optional": true + "type-fest": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", + "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "dev": true } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" }, - "engines": { - "node": ">=10" + "dependencies": { + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } } }, - "node_modules/type-detect": { + "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/type-fest": { + "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } + "typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true }, - "node_modules/unicode-canonical-property-names-ecmascript": { + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-match-property-ecmascript": { + "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "dependencies": { + "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/unicode-match-property-value-ecmascript": { + "unicode-match-property-value-ecmascript": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "engines": { - "node": ">=4" - } + "dev": true }, - "node_modules/unicode-property-aliases-ecmascript": { + "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/v8-to-istanbul": { + "v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, - "dependencies": { + "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" } }, - "node_modules/walker": { + "w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "dependencies": { + "requires": { "makeerror": "1.0.12" } }, - "node_modules/which": { + "watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "dependencies": { + "requires": { "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/wrap-ansi": { + "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { + "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/write-file-atomic": { + "write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "dependencies": { + "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/y18n": { + "ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/yallist": { + "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yargs": { + "yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "dependencies": { + "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -6839,31 +11865,19 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" } }, - "node_modules/yargs-parser": { + "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } + "dev": true }, - "node_modules/yocto-queue": { + "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index f9180486..21054320 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,17 @@ "tokenization" ], "dependencies": { - "axios": "^1.6.1", "dotenv": "^16.4.5", "jsonwebtoken": "^9.0.2", - "jwt-decode": "^2.2.0" + "jwt-decode": "^2.2.0", + "url-join": "4.0.1", + "form-data": "^4.0.0", + "formdata-node": "^6.0.3", + "node-fetch": "^2.7.0", + "qs": "^6.13.1", + "readable-stream": "^4.5.2", + "js-base64": "3.7.7", + "form-data-encoder": "^4.0.2" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.25.7", @@ -44,9 +51,18 @@ "@babel/preset-env": "^7.25.8", "@babel/preset-typescript": "^7.25.7", "@types/jsonwebtoken": "^9.0.6", - "@types/node": "12.11.5 - 12.20.42", + "@types/node": "^18.19.70", "jest": "^29.7.0", - "ts-jest": "^29.2.5", - "typescript": "^4.0 || ^5.0" + "ts-jest": "^29.1.1", + "typescript": "~5.7.2", + "@types/url-join": "4.0.1", + "@types/qs": "^6.9.17", + "@types/node-fetch": "^2.6.12", + "@types/readable-stream": "^4.0.18", + "webpack": "^5.97.1", + "ts-loader": "^9.5.1", + "@types/jest": "^29.5.14", + "jest-environment-jsdom": "^29.7.0", + "prettier": "^3.4.2" } } diff --git a/src/ _generated_/rest/Client.ts b/src/ _generated_/rest/Client.ts new file mode 100644 index 00000000..ebbf651b --- /dev/null +++ b/src/ _generated_/rest/Client.ts @@ -0,0 +1,68 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "./environments"; +import * as core from "./core"; +import { Audit } from "./api/resources/audit/client/Client"; +import { BinLookup } from "./api/resources/binLookup/client/Client"; +import { Records } from "./api/resources/records/client/Client"; +import { Tokens } from "./api/resources/tokens/client/Client"; +import { Query } from "./api/resources/query/client/Client"; +import { Authentication } from "./api/resources/authentication/client/Client"; + +export declare namespace SkyflowClient { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class SkyflowClient { + protected _audit: Audit | undefined; + protected _binLookup: BinLookup | undefined; + protected _records: Records | undefined; + protected _tokens: Tokens | undefined; + protected _query: Query | undefined; + protected _authentication: Authentication | undefined; + + constructor(protected readonly _options: SkyflowClient.Options) {} + + public get audit(): Audit { + return (this._audit ??= new Audit(this._options)); + } + + public get binLookup(): BinLookup { + return (this._binLookup ??= new BinLookup(this._options)); + } + + public get records(): Records { + return (this._records ??= new Records(this._options)); + } + + public get tokens(): Tokens { + return (this._tokens ??= new Tokens(this._options)); + } + + public get query(): Query { + return (this._query ??= new Query(this._options)); + } + + public get authentication(): Authentication { + return (this._authentication ??= new Authentication(this._options)); + } +} diff --git a/src/ _generated_/rest/api.ts b/src/ _generated_/rest/api.ts deleted file mode 100644 index 0ac7e383..00000000 --- a/src/ _generated_/rest/api.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export * from './api/audit-api'; -export * from './api/binlookup-api'; -export * from './api/query-api'; -export * from './api/records-api'; -export * from './api/tokens-api'; -export * from './api/authentication-api'; - diff --git a/src/ _generated_/rest/api/audit-api.ts b/src/ _generated_/rest/api/audit-api.ts deleted file mode 100644 index a53d382c..00000000 --- a/src/ _generated_/rest/api/audit-api.ts +++ /dev/null @@ -1,546 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1AuditResponse } from '../models'; -/** - * AuditApi - axios parameter creator - * @export - */ -export const AuditApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - auditServiceListAuditEvents: async (filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'filterOpsAccountID' is not null or undefined - assertParamExists('auditServiceListAuditEvents', 'filterOpsAccountID', filterOpsAccountID) - const localVarPath = `/v1/audit/events`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (filterOpsContextChangeID !== undefined) { - localVarQueryParameter['filterOps.context.changeID'] = filterOpsContextChangeID; - } - - if (filterOpsContextRequestID !== undefined) { - localVarQueryParameter['filterOps.context.requestID'] = filterOpsContextRequestID; - } - - if (filterOpsContextTraceID !== undefined) { - localVarQueryParameter['filterOps.context.traceID'] = filterOpsContextTraceID; - } - - if (filterOpsContextSessionID !== undefined) { - localVarQueryParameter['filterOps.context.sessionID'] = filterOpsContextSessionID; - } - - if (filterOpsContextActor !== undefined) { - localVarQueryParameter['filterOps.context.actor'] = filterOpsContextActor; - } - - if (filterOpsContextActorType !== undefined) { - localVarQueryParameter['filterOps.context.actorType'] = filterOpsContextActorType; - } - - if (filterOpsContextAccessType !== undefined) { - localVarQueryParameter['filterOps.context.accessType'] = filterOpsContextAccessType; - } - - if (filterOpsContextIpAddress !== undefined) { - localVarQueryParameter['filterOps.context.ipAddress'] = filterOpsContextIpAddress; - } - - if (filterOpsContextOrigin !== undefined) { - localVarQueryParameter['filterOps.context.origin'] = filterOpsContextOrigin; - } - - if (filterOpsContextAuthMode !== undefined) { - localVarQueryParameter['filterOps.context.authMode'] = filterOpsContextAuthMode; - } - - if (filterOpsContextJwtID !== undefined) { - localVarQueryParameter['filterOps.context.jwtID'] = filterOpsContextJwtID; - } - - if (filterOpsContextBearerTokenContextID !== undefined) { - localVarQueryParameter['filterOps.context.bearerTokenContextID'] = filterOpsContextBearerTokenContextID; - } - - if (filterOpsParentAccountID !== undefined) { - localVarQueryParameter['filterOps.parentAccountID'] = filterOpsParentAccountID; - } - - if (filterOpsAccountID !== undefined) { - localVarQueryParameter['filterOps.accountID'] = filterOpsAccountID; - } - - if (filterOpsWorkspaceID !== undefined) { - localVarQueryParameter['filterOps.workspaceID'] = filterOpsWorkspaceID; - } - - if (filterOpsVaultID !== undefined) { - localVarQueryParameter['filterOps.vaultID'] = filterOpsVaultID; - } - - if (filterOpsResourceIDs !== undefined) { - localVarQueryParameter['filterOps.resourceIDs'] = filterOpsResourceIDs; - } - - if (filterOpsActionType !== undefined) { - localVarQueryParameter['filterOps.actionType'] = filterOpsActionType; - } - - if (filterOpsResourceType !== undefined) { - localVarQueryParameter['filterOps.resourceType'] = filterOpsResourceType; - } - - if (filterOpsTags !== undefined) { - localVarQueryParameter['filterOps.tags'] = filterOpsTags; - } - - if (filterOpsResponseCode !== undefined) { - localVarQueryParameter['filterOps.responseCode'] = filterOpsResponseCode; - } - - if (filterOpsStartTime !== undefined) { - localVarQueryParameter['filterOps.startTime'] = filterOpsStartTime; - } - - if (filterOpsEndTime !== undefined) { - localVarQueryParameter['filterOps.endTime'] = filterOpsEndTime; - } - - if (filterOpsApiName !== undefined) { - localVarQueryParameter['filterOps.apiName'] = filterOpsApiName; - } - - if (filterOpsResponseMessage !== undefined) { - localVarQueryParameter['filterOps.responseMessage'] = filterOpsResponseMessage; - } - - if (filterOpsHttpMethod !== undefined) { - localVarQueryParameter['filterOps.httpMethod'] = filterOpsHttpMethod; - } - - if (filterOpsHttpURI !== undefined) { - localVarQueryParameter['filterOps.httpURI'] = filterOpsHttpURI; - } - - if (sortOpsSortBy !== undefined) { - localVarQueryParameter['sortOps.sortBy'] = sortOpsSortBy; - } - - if (sortOpsOrderBy !== undefined) { - localVarQueryParameter['sortOps.orderBy'] = sortOpsOrderBy; - } - - if (afterOpsTimestamp !== undefined) { - localVarQueryParameter['afterOps.timestamp'] = afterOpsTimestamp; - } - - if (afterOpsChangeID !== undefined) { - localVarQueryParameter['afterOps.changeID'] = afterOpsChangeID; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (offset !== undefined) { - localVarQueryParameter['offset'] = offset; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuditApi - functional programming interface - * @export - */ -export const AuditApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuditApiAxiosParamCreator(configuration) - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['AuditApi.auditServiceListAuditEvents']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * AuditApi - factory interface - * @export - */ -export const AuditApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuditApiFp(configuration) - return { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuditApi - interface - * @export - * @interface AuditApi - */ -export interface AuditApiInterface { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuditApiInterface - */ - auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * AuditApi - object-oriented interface - * @export - * @class AuditApi - * @extends {BaseAPI} - */ -export class AuditApi extends BaseAPI implements AuditApiInterface { - /** - * Lists audit events that match query parameters. - * @summary List Audit Events - * @param {string} filterOpsAccountID Resources with the specified account ID. - * @param {string} [filterOpsContextChangeID] ID for the audit event. - * @param {string} [filterOpsContextRequestID] ID for the request that caused the event. - * @param {string} [filterOpsContextTraceID] ID for the request set by the service that received the request. - * @param {string} [filterOpsContextSessionID] ID for the session in which the request was sent. - * @param {string} [filterOpsContextActor] Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @param {AuditServiceListAuditEventsFilterOpsContextActorTypeEnum} [filterOpsContextActorType] Type of member who sent the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum} [filterOpsContextAccessType] Type of access for the request. - * @param {string} [filterOpsContextIpAddress] IP Address of the client that made the request. - * @param {string} [filterOpsContextOrigin] HTTP Origin request header (including scheme, hostname, and port) of the request. - * @param {AuditServiceListAuditEventsFilterOpsContextAuthModeEnum} [filterOpsContextAuthMode] Authentication mode the `actor` used. - * @param {string} [filterOpsContextJwtID] ID of the JWT token. - * @param {string} [filterOpsContextBearerTokenContextID] Embedded User Context. - * @param {string} [filterOpsParentAccountID] Resources with the specified parent account ID. - * @param {string} [filterOpsWorkspaceID] Resources with the specified workspace ID. - * @param {string} [filterOpsVaultID] Resources with the specified vault ID. - * @param {string} [filterOpsResourceIDs] Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of \"\\<resourceType\\>/\\<resourceID\\>\". For example, \"VAULT/12345, USER/67890\". - * @param {AuditServiceListAuditEventsFilterOpsActionTypeEnum} [filterOpsActionType] Events with the specified action type. - * @param {AuditServiceListAuditEventsFilterOpsResourceTypeEnum} [filterOpsResourceType] Resources with the specified type. - * @param {string} [filterOpsTags] Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, \"login, get\". - * @param {number} [filterOpsResponseCode] HTTP response code of the request. - * @param {string} [filterOpsStartTime] Start timestamp for the query, in SQL format. - * @param {string} [filterOpsEndTime] End timestamp for the query, in SQL format. - * @param {string} [filterOpsApiName] Name of the API called in the request. - * @param {string} [filterOpsResponseMessage] Response message of the request. - * @param {string} [filterOpsHttpMethod] HTTP method of the request. - * @param {string} [filterOpsHttpURI] HTTP URI of the request. - * @param {string} [sortOpsSortBy] Fully-qualified field by which to sort results. Field names should be in camel case (for example, \"capitalization.camelCase\"). - * @param {AuditServiceListAuditEventsSortOpsOrderByEnum} [sortOpsOrderBy] Ascending or descending ordering of results. - * @param {string} [afterOpsTimestamp] Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {string} [afterOpsChangeID] Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @param {number} [limit] Number of results to return. - * @param {number} [offset] Record position at which to start returning results. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuditApi - */ - public auditServiceListAuditEvents(filterOpsAccountID: string, filterOpsContextChangeID?: string, filterOpsContextRequestID?: string, filterOpsContextTraceID?: string, filterOpsContextSessionID?: string, filterOpsContextActor?: string, filterOpsContextActorType?: AuditServiceListAuditEventsFilterOpsContextActorTypeEnum, filterOpsContextAccessType?: AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum, filterOpsContextIpAddress?: string, filterOpsContextOrigin?: string, filterOpsContextAuthMode?: AuditServiceListAuditEventsFilterOpsContextAuthModeEnum, filterOpsContextJwtID?: string, filterOpsContextBearerTokenContextID?: string, filterOpsParentAccountID?: string, filterOpsWorkspaceID?: string, filterOpsVaultID?: string, filterOpsResourceIDs?: string, filterOpsActionType?: AuditServiceListAuditEventsFilterOpsActionTypeEnum, filterOpsResourceType?: AuditServiceListAuditEventsFilterOpsResourceTypeEnum, filterOpsTags?: string, filterOpsResponseCode?: number, filterOpsStartTime?: string, filterOpsEndTime?: string, filterOpsApiName?: string, filterOpsResponseMessage?: string, filterOpsHttpMethod?: string, filterOpsHttpURI?: string, sortOpsSortBy?: string, sortOpsOrderBy?: AuditServiceListAuditEventsSortOpsOrderByEnum, afterOpsTimestamp?: string, afterOpsChangeID?: string, limit?: number, offset?: number, options?: RawAxiosRequestConfig) { - return AuditApiFp(this.configuration).auditServiceListAuditEvents(filterOpsAccountID, filterOpsContextChangeID, filterOpsContextRequestID, filterOpsContextTraceID, filterOpsContextSessionID, filterOpsContextActor, filterOpsContextActorType, filterOpsContextAccessType, filterOpsContextIpAddress, filterOpsContextOrigin, filterOpsContextAuthMode, filterOpsContextJwtID, filterOpsContextBearerTokenContextID, filterOpsParentAccountID, filterOpsWorkspaceID, filterOpsVaultID, filterOpsResourceIDs, filterOpsActionType, filterOpsResourceType, filterOpsTags, filterOpsResponseCode, filterOpsStartTime, filterOpsEndTime, filterOpsApiName, filterOpsResponseMessage, filterOpsHttpMethod, filterOpsHttpURI, sortOpsSortBy, sortOpsOrderBy, afterOpsTimestamp, afterOpsChangeID, limit, offset, options).then((request) => request(this.axios, this.basePath)); - } -} - -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextActorTypeEnum = { - None: 'NONE', - User: 'USER', - ServiceAccount: 'SERVICE_ACCOUNT' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextActorTypeEnum = typeof AuditServiceListAuditEventsFilterOpsContextActorTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextActorTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum = { - AccessNone: 'ACCESS_NONE', - Api: 'API', - Sql: 'SQL', - OktaLogin: 'OKTA_LOGIN' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum = typeof AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextAccessTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsContextAuthModeEnum = { - AuthNone: 'AUTH_NONE', - OktaJwt: 'OKTA_JWT', - ServiceAccountJwt: 'SERVICE_ACCOUNT_JWT', - PatJwt: 'PAT_JWT' -} as const; -export type AuditServiceListAuditEventsFilterOpsContextAuthModeEnum = typeof AuditServiceListAuditEventsFilterOpsContextAuthModeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsContextAuthModeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsActionTypeEnum = { - None: 'NONE', - Assign: 'ASSIGN', - Create: 'CREATE', - Delete: 'DELETE', - Execute: 'EXECUTE', - List: 'LIST', - Read: 'READ', - Unassign: 'UNASSIGN', - Update: 'UPDATE', - Validate: 'VALIDATE', - Login: 'LOGIN', - Rotate: 'ROTATE', - Schedulerotation: 'SCHEDULEROTATION', - Schedulerotationalert: 'SCHEDULEROTATIONALERT', - Import: 'IMPORT', - Getimportparameters: 'GETIMPORTPARAMETERS', - Ping: 'PING', - Getcloudprovider: 'GETCLOUDPROVIDER' -} as const; -export type AuditServiceListAuditEventsFilterOpsActionTypeEnum = typeof AuditServiceListAuditEventsFilterOpsActionTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsActionTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsFilterOpsResourceTypeEnum = { - NoneApi: 'NONE_API', - Account: 'ACCOUNT', - Audit: 'AUDIT', - BaseDataType: 'BASE_DATA_TYPE', - FieldTemplate: 'FIELD_TEMPLATE', - File: 'FILE', - Key: 'KEY', - Policy: 'POLICY', - ProtoParse: 'PROTO_PARSE', - Record: 'RECORD', - Role: 'ROLE', - Rule: 'RULE', - Secret: 'SECRET', - ServiceAccount: 'SERVICE_ACCOUNT', - Token: 'TOKEN', - User: 'USER', - Vault: 'VAULT', - VaultTemplate: 'VAULT_TEMPLATE', - Workspace: 'WORKSPACE', - Table: 'TABLE', - PolicyTemplate: 'POLICY_TEMPLATE', - Member: 'MEMBER', - Tag: 'TAG', - Connection: 'CONNECTION', - Migration: 'MIGRATION', - ScheduledJob: 'SCHEDULED_JOB', - Job: 'JOB', - ColumnName: 'COLUMN_NAME', - NetworkToken: 'NETWORK_TOKEN', - Subscription: 'SUBSCRIPTION' -} as const; -export type AuditServiceListAuditEventsFilterOpsResourceTypeEnum = typeof AuditServiceListAuditEventsFilterOpsResourceTypeEnum[keyof typeof AuditServiceListAuditEventsFilterOpsResourceTypeEnum]; -/** - * @export - */ -export const AuditServiceListAuditEventsSortOpsOrderByEnum = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING' -} as const; -export type AuditServiceListAuditEventsSortOpsOrderByEnum = typeof AuditServiceListAuditEventsSortOpsOrderByEnum[keyof typeof AuditServiceListAuditEventsSortOpsOrderByEnum]; diff --git a/src/ _generated_/rest/api/authentication-api.ts b/src/ _generated_/rest/api/authentication-api.ts deleted file mode 100644 index 82b78d0e..00000000 --- a/src/ _generated_/rest/api/authentication-api.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1GetAuthTokenRequest } from '../models'; -// @ts-ignore -import type { V1GetAuthTokenResponse } from '../models'; -/** - * AuthenticationApi - axios parameter creator - * @export - */ -export const AuthenticationApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authenticationServiceGetAuthToken: async (body: V1GetAuthTokenRequest, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'body' is not null or undefined - assertParamExists('authenticationServiceGetAuthToken', 'body', body) - const localVarPath = `/v1/auth/sa/oauth/token`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuthenticationApi - functional programming interface - * @export - */ -export const AuthenticationApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuthenticationApiAxiosParamCreator(configuration) - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.authenticationServiceGetAuthToken(body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['AuthenticationApi.authenticationServiceGetAuthToken']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * AuthenticationApi - factory interface - * @export - */ -export const AuthenticationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuthenticationApiFp(configuration) - return { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.authenticationServiceGetAuthToken(body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuthenticationApi - interface - * @export - * @interface AuthenticationApi - */ -export interface AuthenticationApiInterface { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApiInterface - */ - authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * AuthenticationApi - object-oriented interface - * @export - * @class AuthenticationApi - * @extends {BaseAPI} - */ -export class AuthenticationApi extends BaseAPI implements AuthenticationApiInterface { - /** - *

Generates a Bearer Token to authenticate with Skyflow. This method doesn\'t require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

- * @summary Get Bearer Token - * @param {V1GetAuthTokenRequest} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApi - */ - public authenticationServiceGetAuthToken(body: V1GetAuthTokenRequest, options?: RawAxiosRequestConfig) { - return AuthenticationApiFp(this.configuration).authenticationServiceGetAuthToken(body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/binlookup-api.ts b/src/ _generated_/rest/api/binlookup-api.ts deleted file mode 100644 index 457ef97b..00000000 --- a/src/ _generated_/rest/api/binlookup-api.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1BINListRequest } from '../models'; -// @ts-ignore -import type { V1BINListResponse } from '../models'; -/** - * BINLookupApi - axios parameter creator - * @export - */ -export const BINLookupApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - bINListServiceListCardsOfBIN: async (body: V1BINListRequest, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'body' is not null or undefined - assertParamExists('bINListServiceListCardsOfBIN', 'body', body) - const localVarPath = `/v1/card_lookup`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BINLookupApi - functional programming interface - * @export - */ -export const BINLookupApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BINLookupApiAxiosParamCreator(configuration) - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.bINListServiceListCardsOfBIN(body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['BINLookupApi.bINListServiceListCardsOfBIN']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * BINLookupApi - factory interface - * @export - */ -export const BINLookupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BINLookupApiFp(configuration) - return { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.bINListServiceListCardsOfBIN(body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BINLookupApi - interface - * @export - * @interface BINLookupApi - */ -export interface BINLookupApiInterface { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BINLookupApiInterface - */ - bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * BINLookupApi - object-oriented interface - * @export - * @class BINLookupApi - * @extends {BaseAPI} - */ -export class BINLookupApi extends BaseAPI implements BINLookupApiInterface { - /** - * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. - * @summary Get BIN - * @param {V1BINListRequest} body Request to return specific card metadata. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BINLookupApi - */ - public bINListServiceListCardsOfBIN(body: V1BINListRequest, options?: RawAxiosRequestConfig) { - return BINLookupApiFp(this.configuration).bINListServiceListCardsOfBIN(body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/errors/BadRequestError.ts b/src/ _generated_/rest/api/errors/BadRequestError.ts new file mode 100644 index 00000000..e19131a1 --- /dev/null +++ b/src/ _generated_/rest/api/errors/BadRequestError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class BadRequestError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "BadRequestError", + statusCode: 400, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, BadRequestError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/NotFoundError.ts b/src/ _generated_/rest/api/errors/NotFoundError.ts new file mode 100644 index 00000000..ff59e84a --- /dev/null +++ b/src/ _generated_/rest/api/errors/NotFoundError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class NotFoundError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "NotFoundError", + statusCode: 404, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, NotFoundError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/UnauthorizedError.ts b/src/ _generated_/rest/api/errors/UnauthorizedError.ts new file mode 100644 index 00000000..73c2b114 --- /dev/null +++ b/src/ _generated_/rest/api/errors/UnauthorizedError.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as core from "../../core"; + +export class UnauthorizedError extends errors.SkyflowError { + constructor(body: Record, rawResponse?: core.RawResponse) { + super({ + message: "UnauthorizedError", + statusCode: 401, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, UnauthorizedError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/index.ts b/src/ _generated_/rest/api/errors/index.ts new file mode 100644 index 00000000..f88b64db --- /dev/null +++ b/src/ _generated_/rest/api/errors/index.ts @@ -0,0 +1,3 @@ +export * from "./NotFoundError"; +export * from "./BadRequestError"; +export * from "./UnauthorizedError"; diff --git a/src/ _generated_/rest/api/index.ts b/src/ _generated_/rest/api/index.ts new file mode 100644 index 00000000..30060724 --- /dev/null +++ b/src/ _generated_/rest/api/index.ts @@ -0,0 +1,3 @@ +export * from "./resources"; +export * from "./types"; +export * from "./errors"; diff --git a/src/ _generated_/rest/api/query-api.ts b/src/ _generated_/rest/api/query-api.ts deleted file mode 100644 index 4e76fdd9..00000000 --- a/src/ _generated_/rest/api/query-api.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { QueryServiceExecuteQueryBody } from '../models'; -// @ts-ignore -import type { V1GetQueryResponse } from '../models'; -/** - * QueryApi - axios parameter creator - * @export - */ -export const QueryApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Returns records for a valid SQL query. This endpoint
  • Can return redacted record values.
  • Supports only the SELECT command.
  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
  • Can\'t modify the vault or perform transactions.
  • Can\'t return tokens.
  • Can\'t return file download or render URLs.
  • Doesn\'t support the WHERE keyword with columns using transient tokenization.
  • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
    • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - queryServiceExecuteQuery: async (vaultID: string, body: QueryServiceExecuteQueryBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('queryServiceExecuteQuery', 'vaultID', vaultID) - // verify required parameter 'body' is not null or undefined - assertParamExists('queryServiceExecuteQuery', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/query` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * QueryApi - functional programming interface - * @export - */ -export const QueryApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = QueryApiAxiosParamCreator(configuration) - return { - /** - * Returns records for a valid SQL query. This endpoint
      • Can return redacted record values.
      • Supports only the SELECT command.
      • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
      • Can\'t modify the vault or perform transactions.
      • Can\'t return tokens.
      • Can\'t return file download or render URLs.
      • Doesn\'t support the WHERE keyword with columns using transient tokenization.
      • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
        • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.queryServiceExecuteQuery(vaultID, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['QueryApi.queryServiceExecuteQuery']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * QueryApi - factory interface - * @export - */ -export const QueryApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = QueryApiFp(configuration) - return { - /** - * Returns records for a valid SQL query. This endpoint
          • Can return redacted record values.
          • Supports only the SELECT command.
          • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
          • Can\'t modify the vault or perform transactions.
          • Can\'t return tokens.
          • Can\'t return file download or render URLs.
          • Doesn\'t support the WHERE keyword with columns using transient tokenization.
          • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
            • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.queryServiceExecuteQuery(vaultID, body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * QueryApi - interface - * @export - * @interface QueryApi - */ -export interface QueryApiInterface { - /** - * Returns records for a valid SQL query. This endpoint
              • Can return redacted record values.
              • Supports only the SELECT command.
              • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
              • Can\'t modify the vault or perform transactions.
              • Can\'t return tokens.
              • Can\'t return file download or render URLs.
              • Doesn\'t support the WHERE keyword with columns using transient tokenization.
              • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
                • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof QueryApiInterface - */ - queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * QueryApi - object-oriented interface - * @export - * @class QueryApi - * @extends {BaseAPI} - */ -export class QueryApi extends BaseAPI implements QueryApiInterface { - /** - * Returns records for a valid SQL query. This endpoint
                  • Can return redacted record values.
                  • Supports only the SELECT command.
                  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
                  • Can\'t modify the vault or perform transactions.
                  • Can\'t return tokens.
                  • Can\'t return file download or render URLs.
                  • Doesn\'t support the WHERE keyword with columns using transient tokenization.
                  • Doesn\'t support `?` conditional for columns with column-level encryption disabled.
                    • - * @summary Execute Query - * @param {string} vaultID ID of the vault. - * @param {QueryServiceExecuteQueryBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof QueryApi - */ - public queryServiceExecuteQuery(vaultID: string, body: QueryServiceExecuteQueryBody, options?: RawAxiosRequestConfig) { - return QueryApiFp(this.configuration).queryServiceExecuteQuery(vaultID, body, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/records-api.ts b/src/ _generated_/rest/api/records-api.ts deleted file mode 100644 index b2de051e..00000000 --- a/src/ _generated_/rest/api/records-api.ts +++ /dev/null @@ -1,1275 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
                      • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
                      • Production: https://_*identifier*.vault.skyflowapis.com
                      When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -// import { FormData } from '../models'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { RecordServiceBatchOperationBody } from '../models'; -// @ts-ignore -import type { RecordServiceBulkDeleteRecordBody } from '../models'; -// @ts-ignore -import type { RecordServiceInsertRecordBody } from '../models'; -// @ts-ignore -import type { RecordServiceUpdateRecordBody } from '../models'; -// @ts-ignore -import type { V1BatchOperationResponse } from '../models'; -// @ts-ignore -import type { V1BulkDeleteRecordResponse } from '../models'; -// @ts-ignore -import type { V1BulkGetRecordResponse } from '../models'; -// @ts-ignore -import type { V1DeleteFileResponse } from '../models'; -// @ts-ignore -import type { V1DeleteRecordResponse } from '../models'; -// @ts-ignore -import type { V1FieldRecords } from '../models'; -// @ts-ignore -import type { V1GetFileScanStatusResponse } from '../models'; -// @ts-ignore -import type { V1InsertRecordResponse } from '../models'; -// @ts-ignore -import type { V1UpdateRecordResponse } from '../models'; -/** - * RecordsApi - axios parameter creator - * @export - */ -export const RecordsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceDeleteFile: async (vaultID: string, tableName: string, iD: string, columnName: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'vaultID', vaultID) - // verify required parameter 'tableName' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'tableName', tableName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'iD', iD) - // verify required parameter 'columnName' is not null or undefined - assertParamExists('fileServiceDeleteFile', 'columnName', columnName) - const localVarPath = `/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"tableName"}}`, encodeURIComponent(String(tableName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))) - .replace(`{${"columnName"}}`, encodeURIComponent(String(columnName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceGetFileScanStatus: async (vaultID: string, tableName: string, iD: string, columnName: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'vaultID', vaultID) - // verify required parameter 'tableName' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'tableName', tableName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'iD', iD) - // verify required parameter 'columnName' is not null or undefined - assertParamExists('fileServiceGetFileScanStatus', 'columnName', columnName) - const localVarPath = `/v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}/scan-status` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"tableName"}}`, encodeURIComponent(String(tableName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))) - .replace(`{${"columnName"}}`, encodeURIComponent(String(columnName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceUploadFile: async (vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('fileServiceUploadFile', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('fileServiceUploadFile', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('fileServiceUploadFile', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}/files` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - const localVarFormParams = new FormData(); - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - if (fileColumnName !== undefined && fileColumnName.has('columnName')) { - localVarFormParams.append(`${fileColumnName.get('columnName')}`, new Blob([JSON.stringify(fileColumnName)], { type: "application/json", })); - } - - - localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = localVarFormParams; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBatchOperation: async (vaultID: string, body: RecordServiceBatchOperationBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBatchOperation', 'vaultID', vaultID) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceBatchOperation', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkDeleteRecord: async (vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'objectName', objectName) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceBulkDeleteRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkGetRecord: async (vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceBulkGetRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceBulkGetRecord', 'objectName', objectName) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skyflowIds) { - localVarQueryParameter['skyflow_ids'] = skyflowIds; - } - - if (redaction !== undefined) { - localVarQueryParameter['redaction'] = redaction; - } - - if (tokenization !== undefined) { - localVarQueryParameter['tokenization'] = tokenization; - } - - if (fields) { - localVarQueryParameter['fields'] = fields; - } - - if (offset !== undefined) { - localVarQueryParameter['offset'] = offset; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (downloadURL !== undefined) { - localVarQueryParameter['downloadURL'] = downloadURL; - } - - if (columnName !== undefined) { - localVarQueryParameter['column_name'] = columnName; - } - - if (columnValues) { - localVarQueryParameter['column_values'] = columnValues; - } - - if (orderBy !== undefined) { - localVarQueryParameter['order_by'] = orderBy; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDeleteRecord: async (vaultID: string, objectName: string, iD: string, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceDeleteRecord', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceGetRecord: async (vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceGetRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceGetRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceGetRecord', 'iD', iD) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (redaction !== undefined) { - localVarQueryParameter['redaction'] = redaction; - } - - if (tokenization !== undefined) { - localVarQueryParameter['tokenization'] = tokenization; - } - - if (fields) { - localVarQueryParameter['fields'] = fields; - } - - if (downloadURL !== undefined) { - localVarQueryParameter['downloadURL'] = downloadURL; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceInsertRecord: async (vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'objectName', objectName) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceInsertRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceUpdateRecord: async (vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'vaultID', vaultID) - // verify required parameter 'objectName' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'objectName', objectName) - // verify required parameter 'iD' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'iD', iD) - // verify required parameter 'body' is not null or undefined - assertParamExists('recordServiceUpdateRecord', 'body', body) - const localVarPath = `/v1/vaults/{vaultID}/{objectName}/{ID}` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))) - .replace(`{${"objectName"}}`, encodeURIComponent(String(objectName))) - .replace(`{${"ID"}}`, encodeURIComponent(String(iD))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(body, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * RecordsApi - functional programming interface - * @export - */ -export const RecordsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = RecordsApiAxiosParamCreator(configuration) - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceDeleteFile(vaultID, tableName, iD, columnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceDeleteFile']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceGetFileScanStatus']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.fileServiceUploadFile']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBatchOperation(vaultID, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBatchOperation']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBulkDeleteRecord(vaultID, objectName, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBulkDeleteRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceBulkGetRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceDeleteRecord(vaultID, objectName, iD, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceDeleteRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceGetRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceInsertRecord(vaultID, objectName, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceInsertRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceUpdateRecord(vaultID, objectName, iD, body, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['RecordsApi.recordServiceUpdateRecord']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * RecordsApi - factory interface - * @export - */ -export const RecordsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = RecordsApiFp(configuration) - return { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceDeleteFile(vaultID, tableName, iD, columnName, options).then((request) => request(axios, basePath)); - }, - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options).then((request) => request(axios, basePath)); - }, - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options).then((request) => request(axios, basePath)); - }, - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBatchOperation(vaultID, body, options).then((request) => request(axios, basePath)); - }, - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBulkDeleteRecord(vaultID, objectName, body, options).then((request) => request(axios, basePath)); - }, - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options).then((request) => request(axios, basePath)); - }, - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceDeleteRecord(vaultID, objectName, iD, options).then((request) => request(axios, basePath)); - }, - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options).then((request) => request(axios, basePath)); - }, - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceInsertRecord(vaultID, objectName, body, options).then((request) => request(axios, basePath)); - }, - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceUpdateRecord(vaultID, objectName, iD, body, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * RecordsApi - interface - * @export - * @interface RecordsApi - */ -export interface RecordsApiInterface { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApiInterface - */ - recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * RecordsApi - object-oriented interface - * @export - * @class RecordsApi - * @extends {BaseAPI} - */ -export class RecordsApi extends BaseAPI implements RecordsApiInterface { - /** - * Deletes a file from the specified record. - * @summary Delete File - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceDeleteFile(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceDeleteFile(vaultID, tableName, iD, columnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns the anti-virus scan status of a file. - * @summary Get File Scan Status - * @param {string} vaultID ID of the vault. - * @param {string} tableName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {string} columnName Name of the column that contains the file. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceGetFileScanStatus(vaultID: string, tableName: string, iD: string, columnName: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceGetFileScanStatus(vaultID, tableName, iD, columnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Uploads a file to the specified record. - * @summary Upload File - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {FormData} [fileColumnName] Name of the column to store the file in. The column must have a form-data data type. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public fileServiceUploadFile(vaultID: string, objectName: string, iD: string, fileColumnName?: FormData, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).fileServiceUploadFile(vaultID, objectName, iD, fileColumnName, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Performs multiple record operations in a single transaction. - * @summary Batch Operation - * @param {string} vaultID ID of the vault. - * @param {RecordServiceBatchOperationBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBatchOperation(vaultID: string, body: RecordServiceBatchOperationBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBatchOperation(vaultID, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Deletes the specified records from a table. - * @summary Bulk Delete Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceBulkDeleteRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBulkDeleteRecord(vaultID: string, objectName: string, body: RecordServiceBulkDeleteRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBulkDeleteRecord(vaultID, objectName, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Gets the specified records from a table. - * @summary Get Record(s) - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table that contains the records. - * @param {Array} [skyflowIds] `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.<br /><br />If not specified, returns the first 25 records in the table. - * @param {RecordServiceBulkGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {string} [offset] Record position at which to start receiving data. - * @param {string} [limit] Number of record to return. Maximum 25. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {string} [columnName] Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {Array} [columnValues] Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.<br /><br />`column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. - * @param {RecordServiceBulkGetRecordOrderByEnum} [orderBy] Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceBulkGetRecord(vaultID: string, objectName: string, skyflowIds?: Array, redaction?: RecordServiceBulkGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, offset?: string, limit?: string, downloadURL?: boolean, columnName?: string, columnValues?: Array, orderBy?: RecordServiceBulkGetRecordOrderByEnum, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceBulkGetRecord(vaultID, objectName, skyflowIds, redaction, tokenization, fields, offset, limit, downloadURL, columnName, columnValues, orderBy, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Deletes the specified record from a table.

Note: This method doesn\'t delete transient field tokens. Transient field values are available until they expire based on the fields\' time-to-live (TTL) setting. - * @summary Delete Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record to delete. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceDeleteRecord(vaultID: string, objectName: string, iD: string, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceDeleteRecord(vaultID, objectName, iD, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns the specified record from a table. - * @summary Get Record By ID - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceGetRecordRedactionEnum} [redaction] Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. - * @param {boolean} [tokenization] If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @param {Array} [fields] Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.<br /><br />If not specified, returns all fields. - * @param {boolean} [downloadURL] If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceGetRecord(vaultID: string, objectName: string, iD: string, redaction?: RecordServiceGetRecordRedactionEnum, tokenization?: boolean, fields?: Array, downloadURL?: boolean, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceGetRecord(vaultID, objectName, iD, redaction, tokenization, fields, downloadURL, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Inserts a record in the specified table.

The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. - * @summary Insert Records - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {RecordServiceInsertRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceInsertRecord(vaultID: string, objectName: string, body: RecordServiceInsertRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceInsertRecord(vaultID, objectName, body, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Updates the specified record in a table.

When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed.

The time-to-live (TTL) for a transient field resets when the field value is updated. - * @summary Update Record - * @param {string} vaultID ID of the vault. - * @param {string} objectName Name of the table. - * @param {string} iD `skyflow_id` of the record. - * @param {RecordServiceUpdateRecordBody} body - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RecordsApi - */ - public recordServiceUpdateRecord(vaultID: string, objectName: string, iD: string, body: RecordServiceUpdateRecordBody, options?: RawAxiosRequestConfig) { - return RecordsApiFp(this.configuration).recordServiceUpdateRecord(vaultID, objectName, iD, body, options).then((request) => request(this.axios, this.basePath)); - } -} - -/** - * @export - */ -export const RecordServiceBulkGetRecordRedactionEnum = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; -export type RecordServiceBulkGetRecordRedactionEnum = typeof RecordServiceBulkGetRecordRedactionEnum[keyof typeof RecordServiceBulkGetRecordRedactionEnum]; -/** - * @export - */ -export const RecordServiceBulkGetRecordOrderByEnum = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING', - None: 'NONE' -} as const; -export type RecordServiceBulkGetRecordOrderByEnum = typeof RecordServiceBulkGetRecordOrderByEnum[keyof typeof RecordServiceBulkGetRecordOrderByEnum]; -/** - * @export - */ -export const RecordServiceGetRecordRedactionEnum = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; -export type RecordServiceGetRecordRedactionEnum = typeof RecordServiceGetRecordRedactionEnum[keyof typeof RecordServiceGetRecordRedactionEnum]; diff --git a/src/ _generated_/rest/api/resources/audit/client/Client.ts b/src/ _generated_/rest/api/resources/audit/client/Client.ts new file mode 100644 index 00000000..89b42416 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/Client.ts @@ -0,0 +1,289 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Audit { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Audit { + constructor(protected readonly _options: Audit.Options) {} + + /** + * Lists audit events that match query parameters. + * + * @param {Skyflow.AuditServiceListAuditEventsRequest} request + * @param {Audit.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.audit.auditServiceListAuditEvents({ + * "filterOps.accountID": "filterOps.accountID" + * }) + */ + public auditServiceListAuditEvents( + request: Skyflow.AuditServiceListAuditEventsRequest, + requestOptions?: Audit.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__auditServiceListAuditEvents(request, requestOptions)); + } + + private async __auditServiceListAuditEvents( + request: Skyflow.AuditServiceListAuditEventsRequest, + requestOptions?: Audit.RequestOptions, + ): Promise> { + const { + "filterOps.context.changeID": filterOpsContextChangeId, + "filterOps.context.requestID": filterOpsContextRequestId, + "filterOps.context.traceID": filterOpsContextTraceId, + "filterOps.context.sessionID": filterOpsContextSessionId, + "filterOps.context.actor": filterOpsContextActor, + "filterOps.context.actorType": filterOpsContextActorType, + "filterOps.context.accessType": filterOpsContextAccessType, + "filterOps.context.ipAddress": filterOpsContextIpAddress, + "filterOps.context.origin": filterOpsContextOrigin, + "filterOps.context.authMode": filterOpsContextAuthMode, + "filterOps.context.jwtID": filterOpsContextJwtId, + "filterOps.context.bearerTokenContextID": filterOpsContextBearerTokenContextId, + "filterOps.parentAccountID": filterOpsParentAccountId, + "filterOps.accountID": filterOpsAccountId, + "filterOps.workspaceID": filterOpsWorkspaceId, + "filterOps.vaultID": filterOpsVaultId, + "filterOps.resourceIDs": filterOpsResourceIDs, + "filterOps.actionType": filterOpsActionType, + "filterOps.resourceType": filterOpsResourceType, + "filterOps.tags": filterOpsTags, + "filterOps.responseCode": filterOpsResponseCode, + "filterOps.startTime": filterOpsStartTime, + "filterOps.endTime": filterOpsEndTime, + "filterOps.apiName": filterOpsApiName, + "filterOps.responseMessage": filterOpsResponseMessage, + "filterOps.httpMethod": filterOpsHttpMethod, + "filterOps.httpURI": filterOpsHttpUri, + "sortOps.sortBy": sortOpsSortBy, + "sortOps.orderBy": sortOpsOrderBy, + "afterOps.timestamp": afterOpsTimestamp, + "afterOps.changeID": afterOpsChangeId, + limit, + offset, + } = request; + const _queryParams: Record = {}; + if (filterOpsContextChangeId != null) { + _queryParams["filterOps.context.changeID"] = filterOpsContextChangeId; + } + + if (filterOpsContextRequestId != null) { + _queryParams["filterOps.context.requestID"] = filterOpsContextRequestId; + } + + if (filterOpsContextTraceId != null) { + _queryParams["filterOps.context.traceID"] = filterOpsContextTraceId; + } + + if (filterOpsContextSessionId != null) { + _queryParams["filterOps.context.sessionID"] = filterOpsContextSessionId; + } + + if (filterOpsContextActor != null) { + _queryParams["filterOps.context.actor"] = filterOpsContextActor; + } + + if (filterOpsContextActorType != null) { + _queryParams["filterOps.context.actorType"] = filterOpsContextActorType; + } + + if (filterOpsContextAccessType != null) { + _queryParams["filterOps.context.accessType"] = filterOpsContextAccessType; + } + + if (filterOpsContextIpAddress != null) { + _queryParams["filterOps.context.ipAddress"] = filterOpsContextIpAddress; + } + + if (filterOpsContextOrigin != null) { + _queryParams["filterOps.context.origin"] = filterOpsContextOrigin; + } + + if (filterOpsContextAuthMode != null) { + _queryParams["filterOps.context.authMode"] = filterOpsContextAuthMode; + } + + if (filterOpsContextJwtId != null) { + _queryParams["filterOps.context.jwtID"] = filterOpsContextJwtId; + } + + if (filterOpsContextBearerTokenContextId != null) { + _queryParams["filterOps.context.bearerTokenContextID"] = filterOpsContextBearerTokenContextId; + } + + if (filterOpsParentAccountId != null) { + _queryParams["filterOps.parentAccountID"] = filterOpsParentAccountId; + } + + _queryParams["filterOps.accountID"] = filterOpsAccountId; + if (filterOpsWorkspaceId != null) { + _queryParams["filterOps.workspaceID"] = filterOpsWorkspaceId; + } + + if (filterOpsVaultId != null) { + _queryParams["filterOps.vaultID"] = filterOpsVaultId; + } + + if (filterOpsResourceIDs != null) { + _queryParams["filterOps.resourceIDs"] = filterOpsResourceIDs; + } + + if (filterOpsActionType != null) { + _queryParams["filterOps.actionType"] = filterOpsActionType; + } + + if (filterOpsResourceType != null) { + _queryParams["filterOps.resourceType"] = filterOpsResourceType; + } + + if (filterOpsTags != null) { + _queryParams["filterOps.tags"] = filterOpsTags; + } + + if (filterOpsResponseCode != null) { + _queryParams["filterOps.responseCode"] = filterOpsResponseCode.toString(); + } + + if (filterOpsStartTime != null) { + _queryParams["filterOps.startTime"] = filterOpsStartTime; + } + + if (filterOpsEndTime != null) { + _queryParams["filterOps.endTime"] = filterOpsEndTime; + } + + if (filterOpsApiName != null) { + _queryParams["filterOps.apiName"] = filterOpsApiName; + } + + if (filterOpsResponseMessage != null) { + _queryParams["filterOps.responseMessage"] = filterOpsResponseMessage; + } + + if (filterOpsHttpMethod != null) { + _queryParams["filterOps.httpMethod"] = filterOpsHttpMethod; + } + + if (filterOpsHttpUri != null) { + _queryParams["filterOps.httpURI"] = filterOpsHttpUri; + } + + if (sortOpsSortBy != null) { + _queryParams["sortOps.sortBy"] = sortOpsSortBy; + } + + if (sortOpsOrderBy != null) { + _queryParams["sortOps.orderBy"] = sortOpsOrderBy; + } + + if (afterOpsTimestamp != null) { + _queryParams["afterOps.timestamp"] = afterOpsTimestamp; + } + + if (afterOpsChangeId != null) { + _queryParams["afterOps.changeID"] = afterOpsChangeId; + } + + if (limit != null) { + _queryParams["limit"] = limit.toString(); + } + + if (offset != null) { + _queryParams["offset"] = offset.toString(); + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/audit/events", + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1AuditResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling GET /v1/audit/events."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/audit/client/index.ts b/src/ _generated_/rest/api/resources/audit/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts b/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts new file mode 100644 index 00000000..761482c1 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/requests/AuditServiceListAuditEventsRequest.ts @@ -0,0 +1,146 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * "filterOps.accountID": "filterOps.accountID" + * } + */ +export interface AuditServiceListAuditEventsRequest { + /** + * ID for the audit event. + */ + "filterOps.context.changeID"?: string; + /** + * ID for the request that caused the event. + */ + "filterOps.context.requestID"?: string; + /** + * ID for the request set by the service that received the request. + */ + "filterOps.context.traceID"?: string; + /** + * ID for the session in which the request was sent. + */ + "filterOps.context.sessionID"?: string; + /** + * Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. + */ + "filterOps.context.actor"?: string; + /** + * Type of member who sent the request. + */ + "filterOps.context.actorType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextActorType; + /** + * Type of access for the request. + */ + "filterOps.context.accessType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextAccessType; + /** + * IP Address of the client that made the request. + */ + "filterOps.context.ipAddress"?: string; + /** + * HTTP Origin request header (including scheme, hostname, and port) of the request. + */ + "filterOps.context.origin"?: string; + /** + * Authentication mode the `actor` used. + */ + "filterOps.context.authMode"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsContextAuthMode; + /** + * ID of the JWT token. + */ + "filterOps.context.jwtID"?: string; + /** + * Embedded User Context. + */ + "filterOps.context.bearerTokenContextID"?: string; + /** + * Resources with the specified parent account ID. + */ + "filterOps.parentAccountID"?: string; + /** + * Resources with the specified account ID. + */ + "filterOps.accountID": string; + /** + * Resources with the specified workspace ID. + */ + "filterOps.workspaceID"?: string; + /** + * Resources with the specified vault ID. + */ + "filterOps.vaultID"?: string; + /** + * Resources with a specified ID. If a resource matches at least one ID, the associated event is returned. Format is a comma-separated list of "\/\". For example, "VAULT/12345, USER/67890". + */ + "filterOps.resourceIDs"?: string; + /** + * Events with the specified action type. + */ + "filterOps.actionType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsActionType; + /** + * Resources with the specified type. + */ + "filterOps.resourceType"?: Skyflow.AuditServiceListAuditEventsRequestFilterOpsResourceType; + /** + * Events with associated tags. If an event matches at least one tag, the event is returned. Comma-separated list. For example, "login, get". + */ + "filterOps.tags"?: string; + /** + * HTTP response code of the request. + */ + "filterOps.responseCode"?: number; + /** + * Start timestamp for the query, in SQL format. + */ + "filterOps.startTime"?: string; + /** + * End timestamp for the query, in SQL format. + */ + "filterOps.endTime"?: string; + /** + * Name of the API called in the request. + */ + "filterOps.apiName"?: string; + /** + * Response message of the request. + */ + "filterOps.responseMessage"?: string; + /** + * HTTP method of the request. + */ + "filterOps.httpMethod"?: string; + /** + * HTTP URI of the request. + */ + "filterOps.httpURI"?: string; + /** + * Fully-qualified field by which to sort results. Field names should be in camel case (for example, "capitalization.camelCase"). + */ + "sortOps.sortBy"?: string; + /** + * Ascending or descending ordering of results. + */ + "sortOps.orderBy"?: Skyflow.AuditServiceListAuditEventsRequestSortOpsOrderBy; + /** + * Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + */ + "afterOps.timestamp"?: string; + /** + * Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. + */ + "afterOps.changeID"?: string; + /** + * Number of results to return. + */ + limit?: number; + /** + * Record position at which to start returning results. + */ + offset?: number; +} diff --git a/src/ _generated_/rest/api/resources/audit/client/requests/index.ts b/src/ _generated_/rest/api/resources/audit/client/requests/index.ts new file mode 100644 index 00000000..ac03b1b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/client/requests/index.ts @@ -0,0 +1 @@ +export { type AuditServiceListAuditEventsRequest } from "./AuditServiceListAuditEventsRequest"; diff --git a/src/ _generated_/rest/api/resources/audit/index.ts b/src/ _generated_/rest/api/resources/audit/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts new file mode 100644 index 00000000..69706d72 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsActionType.ts @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsActionType = + | "NONE" + | "ASSIGN" + | "CREATE" + | "DELETE" + | "EXECUTE" + | "LIST" + | "READ" + | "UNASSIGN" + | "UPDATE" + | "VALIDATE" + | "LOGIN" + | "ROTATE" + | "SCHEDULEROTATION" + | "SCHEDULEROTATIONALERT" + | "IMPORT" + | "GETIMPORTPARAMETERS" + | "PING" + | "GETCLOUDPROVIDER"; +export const AuditServiceListAuditEventsRequestFilterOpsActionType = { + None: "NONE", + Assign: "ASSIGN", + Create: "CREATE", + Delete: "DELETE", + Execute: "EXECUTE", + List: "LIST", + Read: "READ", + Unassign: "UNASSIGN", + Update: "UPDATE", + Validate: "VALIDATE", + Login: "LOGIN", + Rotate: "ROTATE", + Schedulerotation: "SCHEDULEROTATION", + Schedulerotationalert: "SCHEDULEROTATIONALERT", + Import: "IMPORT", + Getimportparameters: "GETIMPORTPARAMETERS", + Ping: "PING", + Getcloudprovider: "GETCLOUDPROVIDER", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts new file mode 100644 index 00000000..3591fd9a --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAccessType.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextAccessType = "ACCESS_NONE" | "API" | "SQL" | "OKTA_LOGIN"; +export const AuditServiceListAuditEventsRequestFilterOpsContextAccessType = { + AccessNone: "ACCESS_NONE", + Api: "API", + Sql: "SQL", + OktaLogin: "OKTA_LOGIN", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts new file mode 100644 index 00000000..271f9b03 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextActorType.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextActorType = "NONE" | "USER" | "SERVICE_ACCOUNT"; +export const AuditServiceListAuditEventsRequestFilterOpsContextActorType = { + None: "NONE", + User: "USER", + ServiceAccount: "SERVICE_ACCOUNT", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts new file mode 100644 index 00000000..e10a492c --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsContextAuthMode.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsContextAuthMode = + | "AUTH_NONE" + | "OKTA_JWT" + | "SERVICE_ACCOUNT_JWT" + | "PAT_JWT"; +export const AuditServiceListAuditEventsRequestFilterOpsContextAuthMode = { + AuthNone: "AUTH_NONE", + OktaJwt: "OKTA_JWT", + ServiceAccountJwt: "SERVICE_ACCOUNT_JWT", + PatJwt: "PAT_JWT", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts new file mode 100644 index 00000000..2ccebbdb --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestFilterOpsResourceType.ts @@ -0,0 +1,67 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestFilterOpsResourceType = + | "NONE_API" + | "ACCOUNT" + | "AUDIT" + | "BASE_DATA_TYPE" + | "FIELD_TEMPLATE" + | "FILE" + | "KEY" + | "POLICY" + | "PROTO_PARSE" + | "RECORD" + | "ROLE" + | "RULE" + | "SECRET" + | "SERVICE_ACCOUNT" + | "TOKEN" + | "USER" + | "VAULT" + | "VAULT_TEMPLATE" + | "WORKSPACE" + | "TABLE" + | "POLICY_TEMPLATE" + | "MEMBER" + | "TAG" + | "CONNECTION" + | "MIGRATION" + | "SCHEDULED_JOB" + | "JOB" + | "COLUMN_NAME" + | "NETWORK_TOKEN" + | "SUBSCRIPTION"; +export const AuditServiceListAuditEventsRequestFilterOpsResourceType = { + NoneApi: "NONE_API", + Account: "ACCOUNT", + Audit: "AUDIT", + BaseDataType: "BASE_DATA_TYPE", + FieldTemplate: "FIELD_TEMPLATE", + File: "FILE", + Key: "KEY", + Policy: "POLICY", + ProtoParse: "PROTO_PARSE", + Record: "RECORD", + Role: "ROLE", + Rule: "RULE", + Secret: "SECRET", + ServiceAccount: "SERVICE_ACCOUNT", + Token: "TOKEN", + User: "USER", + Vault: "VAULT", + VaultTemplate: "VAULT_TEMPLATE", + Workspace: "WORKSPACE", + Table: "TABLE", + PolicyTemplate: "POLICY_TEMPLATE", + Member: "MEMBER", + Tag: "TAG", + Connection: "CONNECTION", + Migration: "MIGRATION", + ScheduledJob: "SCHEDULED_JOB", + Job: "JOB", + ColumnName: "COLUMN_NAME", + NetworkToken: "NETWORK_TOKEN", + Subscription: "SUBSCRIPTION", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts new file mode 100644 index 00000000..8a12bebb --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/AuditServiceListAuditEventsRequestSortOpsOrderBy.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type AuditServiceListAuditEventsRequestSortOpsOrderBy = "ASCENDING" | "DESCENDING"; +export const AuditServiceListAuditEventsRequestSortOpsOrderBy = { + Ascending: "ASCENDING", + Descending: "DESCENDING", +} as const; diff --git a/src/ _generated_/rest/api/resources/audit/types/index.ts b/src/ _generated_/rest/api/resources/audit/types/index.ts new file mode 100644 index 00000000..efdcfb41 --- /dev/null +++ b/src/ _generated_/rest/api/resources/audit/types/index.ts @@ -0,0 +1,6 @@ +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextActorType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextAccessType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsContextAuthMode"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsActionType"; +export * from "./AuditServiceListAuditEventsRequestFilterOpsResourceType"; +export * from "./AuditServiceListAuditEventsRequestSortOpsOrderBy"; diff --git a/src/ _generated_/rest/api/resources/authentication/client/Client.ts b/src/ _generated_/rest/api/resources/authentication/client/Client.ts new file mode 100644 index 00000000..7c3b0039 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/Client.ts @@ -0,0 +1,137 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Authentication { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Authentication { + constructor(protected readonly _options: Authentication.Options) {} + + /** + *

Generates a Bearer Token to authenticate with Skyflow. This method doesn't require the Authorization header.

Note: For recommended ways to authenticate, see API authentication.

+ * + * @param {Skyflow.V1GetAuthTokenRequest} request + * @param {Authentication.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.authentication.authenticationServiceGetAuthToken({ + * grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", + * assertion: "eyLhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaXNzIjoiY29tcGFueSIsImV4cCI6MTYxNTE5MzgwNywiaWF0IjoxNjE1MTY1MDQwLCJhdWQiOiKzb21lYXVkaWVuY2UifQ.4pcPyMDQ9o1PSyXnrXCjTwXyr4BSezdI1AVTmud2fU3" + * }) + */ + public authenticationServiceGetAuthToken( + request: Skyflow.V1GetAuthTokenRequest, + requestOptions?: Authentication.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__authenticationServiceGetAuthToken(request, requestOptions)); + } + + private async __authenticationServiceGetAuthToken( + request: Skyflow.V1GetAuthTokenRequest, + requestOptions?: Authentication.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/auth/sa/oauth/token", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetAuthTokenResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError( + _response.error.body as Record, + _response.rawResponse, + ); + case 401: + throw new Skyflow.UnauthorizedError( + _response.error.body as Record, + _response.rawResponse, + ); + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/auth/sa/oauth/token."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/authentication/client/index.ts b/src/ _generated_/rest/api/resources/authentication/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts b/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts new file mode 100644 index 00000000..a1ef4fba --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/requests/V1GetAuthTokenRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer", + * assertion: "eyLhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaXNzIjoiY29tcGFueSIsImV4cCI6MTYxNTE5MzgwNywiaWF0IjoxNjE1MTY1MDQwLCJhdWQiOiKzb21lYXVkaWVuY2UifQ.4pcPyMDQ9o1PSyXnrXCjTwXyr4BSezdI1AVTmud2fU3" + * } + */ +export interface V1GetAuthTokenRequest { + /** Grant type of the request. Set this to `urn:ietf:params:oauth:grant-type:jwt-bearer`. */ + grant_type: string; + /** User-signed JWT token that contains the following fields:
  • iss: Issuer of the JWT.
  • key: Unique identifier for the key.
  • aud: Recipient the JWT is intended for.
  • exp: Time the JWT expires.
  • sub: Subject of the JWT.
  • ctx: (Optional) Value for Context-aware authorization.
*/ + assertion: string; + /** Subject token. */ + subject_token?: string; + /** Subject token type. */ + subject_token_type?: string; + /** Token use type. Either `delegation` or `impersonation`. */ + requested_token_use?: string; + /** Subset of available roles to associate with the requested token. Uses the format "role:\ role:\". */ + scope?: string; +} diff --git a/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts b/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts new file mode 100644 index 00000000..635fca22 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/client/requests/index.ts @@ -0,0 +1 @@ +export { type V1GetAuthTokenRequest } from "./V1GetAuthTokenRequest"; diff --git a/src/ _generated_/rest/api/resources/authentication/index.ts b/src/ _generated_/rest/api/resources/authentication/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/authentication/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/binLookup/client/Client.ts b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts new file mode 100644 index 00000000..2a88056a --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts @@ -0,0 +1,124 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace BinLookup { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class BinLookup { + constructor(protected readonly _options: BinLookup.Options) {} + + /** + * Note: This endpoint is in beta and subject to change.

Returns the specified card metadata. + * + * @param {Skyflow.V1BinListRequest} request + * @param {BinLookup.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.binLookup.binListServiceListCardsOfBin({ + * BIN: "012345" + * }) + */ + public binListServiceListCardsOfBin( + request: Skyflow.V1BinListRequest = {}, + requestOptions?: BinLookup.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__binListServiceListCardsOfBin(request, requestOptions)); + } + + private async __binListServiceListCardsOfBin( + request: Skyflow.V1BinListRequest = {}, + requestOptions?: BinLookup.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/card_lookup", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BinListResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/card_lookup."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/binLookup/client/index.ts b/src/ _generated_/rest/api/resources/binLookup/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts b/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts new file mode 100644 index 00000000..7bf1c52e --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/requests/V1BinListRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * BIN: "012345" + * } + */ +export interface V1BinListRequest { + /** Fields to return. If not specified, all fields are returned. */ + fields?: string[]; + /** BIN of the card. */ + BIN?: string; + vault_schema_config?: Skyflow.V1VaultSchemaConfig; + /** skyflow_id of the record. */ + skyflow_id?: string; +} diff --git a/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts b/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts new file mode 100644 index 00000000..b3ac57f5 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/client/requests/index.ts @@ -0,0 +1 @@ +export { type V1BinListRequest } from "./V1BinListRequest"; diff --git a/src/ _generated_/rest/api/resources/binLookup/index.ts b/src/ _generated_/rest/api/resources/binLookup/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/binLookup/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/index.ts b/src/ _generated_/rest/api/resources/index.ts new file mode 100644 index 00000000..a6ae3aed --- /dev/null +++ b/src/ _generated_/rest/api/resources/index.ts @@ -0,0 +1,14 @@ +export * as audit from "./audit"; +export * from "./audit/types"; +export * as records from "./records"; +export * from "./records/types"; +export * as binLookup from "./binLookup"; +export * as tokens from "./tokens"; +export * as query from "./query"; +export * as authentication from "./authentication"; +export * from "./audit/client/requests"; +export * from "./binLookup/client/requests"; +export * from "./records/client/requests"; +export * from "./tokens/client/requests"; +export * from "./query/client/requests"; +export * from "./authentication/client/requests"; diff --git a/src/ _generated_/rest/api/resources/query/client/Client.ts b/src/ _generated_/rest/api/resources/query/client/Client.ts new file mode 100644 index 00000000..d6339a16 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/Client.ts @@ -0,0 +1,127 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Query { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Query { + constructor(protected readonly _options: Query.Options) {} + + /** + * Returns records for a valid SQL query. This endpoint
  • Can return redacted record values.
  • Supports only the SELECT command.
  • Returns a maximum of 25 records. To return additional records, perform another query using the OFFSET keyword.
  • Can't modify the vault or perform transactions.
  • Can't return tokens.
  • Can't return file download or render URLs.
  • Doesn't support the WHERE keyword with columns using transient tokenization.
  • Doesn't support `?` conditional for columns with column-level encryption disabled.
    • + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.QueryServiceExecuteQueryBody} request + * @param {Query.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.query.queryServiceExecuteQuery("vaultID", { + * query: "select * from opportunities where id=\"01010000ade21cded569d43944544ec6\"" + * }) + */ + public queryServiceExecuteQuery( + vaultId: string, + request: Skyflow.QueryServiceExecuteQueryBody = {}, + requestOptions?: Query.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__queryServiceExecuteQuery(vaultId, request, requestOptions)); + } + + private async __queryServiceExecuteQuery( + vaultId: string, + request: Skyflow.QueryServiceExecuteQueryBody = {}, + requestOptions?: Query.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/query`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetQueryResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/vaults/{vaultID}/query."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/query/client/index.ts b/src/ _generated_/rest/api/resources/query/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts b/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts new file mode 100644 index 00000000..45b1a14c --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/requests/QueryServiceExecuteQueryBody.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * query: "select * from opportunities where id=\"01010000ade21cded569d43944544ec6\"" + * } + */ +export interface QueryServiceExecuteQueryBody { + /** The SQL query to execute.

      Supported commands:
      • SELECT
      Supported operators:
      • >
      • <
      • =
      • AND
      • OR
      • NOT
      • LIKE
      • ILIKE
      • NULL
      • NOT NULL
      Supported keywords:
      • FROM
      • JOIN
      • INNER JOIN
      • LEFT OUTER JOIN
      • LEFT JOIN
      • RIGHT OUTER JOIN
      • RIGHT JOIN
      • FULL OUTER JOIN
      • FULL JOIN
      • OFFSET
      • LIMIT
      • WHERE
      Supported functions:
      • AVG()
      • SUM()
      • COUNT()
      • MIN()
      • MAX()
      • REDACTION()
      */ + query?: string; +} diff --git a/src/ _generated_/rest/api/resources/query/client/requests/index.ts b/src/ _generated_/rest/api/resources/query/client/requests/index.ts new file mode 100644 index 00000000..25ea32e1 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/client/requests/index.ts @@ -0,0 +1 @@ +export { type QueryServiceExecuteQueryBody } from "./QueryServiceExecuteQueryBody"; diff --git a/src/ _generated_/rest/api/resources/query/index.ts b/src/ _generated_/rest/api/resources/query/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/query/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/records/client/Client.ts b/src/ _generated_/rest/api/resources/records/client/Client.ts new file mode 100644 index 00000000..96ea98ce --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/Client.ts @@ -0,0 +1,1140 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; +import * as fs from "fs"; +import { Blob } from "buffer"; + +export declare namespace Records { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Records { + constructor(protected readonly _options: Records.Options) {} + + /** + * Performs multiple record operations in a single transaction. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.RecordServiceBatchOperationBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBatchOperation("vaultID", { + * records: [{ + * fields: { + * "drivers_license_number": "89867453", + * "name": "Connor", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * }, + * tableName: "persons", + * method: "POST", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * downloadURL: false, + * upsert: "drivers_license_number" + * }, { + * tableName: "persons", + * method: "GET", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * ID: "f1dbc55c-7c9b-495d-9a36-72bb2b619202", + * downloadURL: true + * }] + * }) + */ + public recordServiceBatchOperation( + vaultId: string, + request: Skyflow.RecordServiceBatchOperationBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBatchOperation(vaultId, request, requestOptions), + ); + } + + private async __recordServiceBatchOperation( + vaultId: string, + request: Skyflow.RecordServiceBatchOperationBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BatchOperationResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/vaults/{vaultID}."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Gets the specified records from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table that contains the records. + * @param {Skyflow.RecordServiceBulkGetRecordRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBulkGetRecord("vaultID", "objectName") + */ + public recordServiceBulkGetRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBulkGetRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceBulkGetRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const { + skyflow_ids: skyflowIds, + redaction, + tokenization, + fields, + offset, + limit, + downloadURL: downloadUrl, + column_name: columnName, + column_values: columnValues, + order_by: orderBy, + } = request; + const _queryParams: Record = {}; + if (skyflowIds != null) { + if (Array.isArray(skyflowIds)) { + _queryParams["skyflow_ids"] = skyflowIds.map((item) => item); + } else { + _queryParams["skyflow_ids"] = skyflowIds; + } + } + + if (redaction != null) { + _queryParams["redaction"] = redaction; + } + + if (tokenization != null) { + _queryParams["tokenization"] = tokenization.toString(); + } + + if (fields != null) { + if (Array.isArray(fields)) { + _queryParams["fields"] = fields.map((item) => item); + } else { + _queryParams["fields"] = fields; + } + } + + if (offset != null) { + _queryParams["offset"] = offset; + } + + if (limit != null) { + _queryParams["limit"] = limit; + } + + if (downloadUrl != null) { + _queryParams["downloadURL"] = downloadUrl.toString(); + } + + if (columnName != null) { + _queryParams["column_name"] = columnName; + } + + if (columnValues != null) { + if (Array.isArray(columnValues)) { + _queryParams["column_values"] = columnValues.map((item) => item); + } else { + _queryParams["column_values"] = columnValues; + } + } + + if (orderBy != null) { + _queryParams["order_by"] = orderBy; + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BulkGetRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Inserts a record in the specified table.

      The time-to-live (TTL) for a transient field begins when the field value is set during record insertion.

      Columns that have a string data type and a uniqueness constraint accept strings up to 2500 characters. If an inserted string exceeds 2500 characters, the call returns a token insertion error. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {Skyflow.RecordServiceInsertRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceInsertRecord("vaultID", "objectName", { + * records: [{ + * fields: { + * "drivers_license_number": "13456789", + * "name": "John", + * "phone_number": "1236784563", + * "ssn": "123-45-6789" + * } + * }, { + * fields: { + * "drivers_license_number": "98765432", + * "name": "James", + * "phone_number": "9876543215", + * "ssn": "345-45-9876" + * } + * }], + * tokenization: true, + * upsert: "drivers_license_number", + * homogeneous: false + * }) + */ + public recordServiceInsertRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceInsertRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceInsertRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceInsertRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceInsertRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1InsertRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes the specified records from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {Skyflow.RecordServiceBulkDeleteRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceBulkDeleteRecord("vaultID", "objectName", { + * skyflow_ids: ["51782ea4-91a5-4430-a06d-f4b76efd3d2f", "110ce08f-6059-4874-b1ae-7c6651d286ff"] + * }) + */ + public recordServiceBulkDeleteRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkDeleteRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceBulkDeleteRecord(vaultId, objectName, request, requestOptions), + ); + } + + private async __recordServiceBulkDeleteRecord( + vaultId: string, + objectName: string, + request: Skyflow.RecordServiceBulkDeleteRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1BulkDeleteRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{objectName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns the specified record from a table. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {Skyflow.RecordServiceGetRecordRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceGetRecord("vaultID", "objectName", "ID") + */ + public recordServiceGetRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceGetRecord(vaultId, objectName, id, request, requestOptions), + ); + } + + private async __recordServiceGetRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceGetRecordRequest = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const { redaction, tokenization, fields, downloadURL: downloadUrl } = request; + const _queryParams: Record = {}; + if (redaction != null) { + _queryParams["redaction"] = redaction; + } + + if (tokenization != null) { + _queryParams["tokenization"] = tokenization.toString(); + } + + if (fields != null) { + if (Array.isArray(fields)) { + _queryParams["fields"] = fields.map((item) => item); + } else { + _queryParams["fields"] = fields; + } + } + + if (downloadUrl != null) { + _queryParams["downloadURL"] = downloadUrl.toString(); + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1FieldRecords, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Updates the specified record in a table.

      When you update a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed.

      The time-to-live (TTL) for a transient field resets when the field value is updated. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {Skyflow.RecordServiceUpdateRecordBody} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceUpdateRecord("vaultID", "objectName", "ID", { + * record: { + * fields: { + * "drivers_license_number": "89867453", + * "name": "Steve Smith", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * } + * }, + * tokenization: true + * }) + */ + public recordServiceUpdateRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceUpdateRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceUpdateRecord(vaultId, objectName, id, request, requestOptions), + ); + } + + private async __recordServiceUpdateRecord( + vaultId: string, + objectName: string, + id: string, + request: Skyflow.RecordServiceUpdateRecordBody = {}, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "PUT", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1UpdateRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling PUT /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes the specified record from a table.

      Note: This method doesn't delete transient field tokens. Transient field values are available until they expire based on the fields' time-to-live (TTL) setting. + * + * @param {string} vaultId - ID of the vault. + * @param {string} objectName - Name of the table. + * @param {string} id - `skyflow_id` of the record to delete. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.recordServiceDeleteRecord("vaultID", "objectName", "ID") + */ + public recordServiceDeleteRecord( + vaultId: string, + objectName: string, + id: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__recordServiceDeleteRecord(vaultId, objectName, id, requestOptions), + ); + } + + private async __recordServiceDeleteRecord( + vaultId: string, + objectName: string, + id: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DeleteRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{objectName}/{ID}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Uploads a file to the specified record. + * + * @param {File | fs.ReadStream | Blob | undefined} file + * @param {string} vaultId + * @param {string} objectName + * @param {string} id + * @param {Skyflow.FileServiceUploadFileRequest} request + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID", {}) + */ + public fileServiceUploadFile( + file: File | fs.ReadStream | Blob | undefined, + vaultId: string, + objectName: string, + id: string, + request: Skyflow.FileServiceUploadFileRequest, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceUploadFile(file, vaultId, objectName, id, request, requestOptions), + ); + } + + private async __fileServiceUploadFile( + file: File | fs.ReadStream | Blob | undefined, + vaultId: string, + objectName: string, + id: string, + request: Skyflow.FileServiceUploadFileRequest, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _request = await core.newFormData(); + if (file != null && request.columnName != null) { + await _request.appendFile(request.columnName, file); + + } + + const _maybeEncodedRequest = await _request.getRequest(); + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(objectName)}/${encodeURIComponent(id)}/files`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ..._maybeEncodedRequest.headers, + ...requestOptions?.headers, + }, + requestType: "file", + duplex: _maybeEncodedRequest.duplex, + body: _maybeEncodedRequest.body, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1UpdateRecordResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/{objectName}/{ID}/files.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Deletes a file from the specified record. + * + * @param {string} vaultId - ID of the vault. + * @param {string} tableName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {string} columnName - Name of the column that contains the file. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceDeleteFile("vaultID", "tableName", "ID", "columnName") + */ + public fileServiceDeleteFile( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceDeleteFile(vaultId, tableName, id, columnName, requestOptions), + ); + } + + private async __fileServiceDeleteFile( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(tableName)}/${encodeURIComponent(id)}/files/${encodeURIComponent(columnName)}`, + ), + method: "DELETE", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DeleteFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling DELETE /v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns the anti-virus scan status of a file. + * + * @param {string} vaultId - ID of the vault. + * @param {string} tableName - Name of the table. + * @param {string} id - `skyflow_id` of the record. + * @param {string} columnName - Name of the column that contains the file. + * @param {Records.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.records.fileServiceGetFileScanStatus("vaultID", "tableName", "ID", "columnName") + */ + public fileServiceGetFileScanStatus( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise( + this.__fileServiceGetFileScanStatus(vaultId, tableName, id, columnName, requestOptions), + ); + } + + private async __fileServiceGetFileScanStatus( + vaultId: string, + tableName: string, + id: string, + columnName: string, + requestOptions?: Records.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/${encodeURIComponent(tableName)}/${encodeURIComponent(id)}/files/${encodeURIComponent(columnName)}/scan-status`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1GetFileScanStatusResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling GET /v1/vaults/{vaultID}/{tableName}/{ID}/files/{columnName}/scan-status.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/records/client/index.ts b/src/ _generated_/rest/api/resources/records/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts new file mode 100644 index 00000000..9a4af29f --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * {} + */ +export interface FileServiceUploadFileRequest { + /** Name of the column to store the file in. The column must have a file data type. */ + columnName?: string; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts new file mode 100644 index 00000000..e2b9c606 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBatchOperationBody.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * records: [{ + * fields: { + * "drivers_license_number": "89867453", + * "name": "Connor", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * }, + * tableName: "persons", + * method: "POST", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * downloadURL: false, + * upsert: "drivers_license_number" + * }, { + * tableName: "persons", + * method: "GET", + * batchID: "persons-12345", + * redaction: "PLAIN_TEXT", + * tokenization: false, + * ID: "f1dbc55c-7c9b-495d-9a36-72bb2b619202", + * downloadURL: true + * }] + * } + */ +export interface RecordServiceBatchOperationBody { + /** Record operations to perform. */ + records?: Skyflow.V1BatchRecord[]; + /** Continue performing operations on partial errors. */ + continueOnError?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts new file mode 100644 index 00000000..c919ac55 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkDeleteRecordBody.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * { + * skyflow_ids: ["51782ea4-91a5-4430-a06d-f4b76efd3d2f", "110ce08f-6059-4874-b1ae-7c6651d286ff"] + * } + */ +export interface RecordServiceBulkDeleteRecordBody { + /** `skyflow_id` values of the records to delete. If `*` is specified, this operation deletes all records in the table. */ + skyflow_ids?: string[]; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts new file mode 100644 index 00000000..a0753c0e --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceBulkGetRecordRequest.ts @@ -0,0 +1,52 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface RecordServiceBulkGetRecordRequest { + /** + * `skyflow_id` values of the records to return, with one value per `skyflow_ids` URL parameter. For example, `?skyflow_ids=abc&skyflow_ids=123`.

      If not specified, returns the first 25 records in the table. + */ + skyflow_ids?: string | string[]; + /** + * Redaction level to enforce for the returned records. Subject to policies assigned to the API caller. + */ + redaction?: Skyflow.RecordServiceBulkGetRecordRequestRedaction; + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. + */ + tokenization?: boolean; + /** + * Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.

      If not specified, returns all fields. + */ + fields?: string | string[]; + /** + * Record position at which to start receiving data. + */ + offset?: string; + /** + * Number of record to return. Maximum 25. + */ + limit?: string; + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + */ + downloadURL?: boolean; + /** + * Name of the column. It must be configured as unique in the schema. If you provide both column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. + */ + column_name?: string; + /** + * Column values of the records to return, with one value per `column_values` URL parameter. For example, `?column_values=abc&column_values=123`.

      `column_name` is mandatory when providing `column_values`. If you use column name or column value, you cannot use `skyflow_ids`. Passing either of these parameters with `skyflow_ids` returns an error. + */ + column_values?: string | string[]; + /** + * Order to return records, based on `skyflow_id` values. To disable, set to `NONE`. + */ + order_by?: Skyflow.RecordServiceBulkGetRecordRequestOrderBy; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts new file mode 100644 index 00000000..2bfb3b93 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceGetRecordRequest.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface RecordServiceGetRecordRequest { + /** + * Redaction level to enforce for the returned record. Subject to policies assigned to the API caller. + */ + redaction?: Skyflow.RecordServiceGetRecordRequestRedaction; + /** + * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. + */ + tokenization?: boolean; + /** + * Fields to return for the record, with one value per `fields` URL parameter. For example, `?fields=abc&fields=123`.

      If not specified, returns all fields. + */ + fields?: string | string[]; + /** + * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. + */ + downloadURL?: boolean; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts new file mode 100644 index 00000000..fa2d157b --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceInsertRecordBody.ts @@ -0,0 +1,40 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * records: [{ + * fields: { + * "drivers_license_number": "13456789", + * "name": "John", + * "phone_number": "1236784563", + * "ssn": "123-45-6789" + * } + * }, { + * fields: { + * "drivers_license_number": "98765432", + * "name": "James", + * "phone_number": "9876543215", + * "ssn": "345-45-9876" + * } + * }], + * tokenization: true, + * upsert: "drivers_license_number", + * homogeneous: false + * } + */ +export interface RecordServiceInsertRecordBody { + /** Record values and tokens. */ + records?: Skyflow.V1FieldRecords[]; + /** If `true`, this operation returns tokens for fields with tokenization enabled. */ + tokenization?: boolean; + /** Name of a unique column in the table. Uses upsert operations to check if a record exists based on the unique column's value. If a matching record exists, the record updates with the values you provide. If a matching record doesn't exist, the upsert operation inserts a new record.

      When you upsert a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn't included, it's removed. */ + upsert?: string; + /** If `true`, this operation mandates that all the records have the same fields. This parameter does not work with upsert. */ + homogeneous?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts new file mode 100644 index 00000000..c9f6df32 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/RecordServiceUpdateRecordBody.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * record: { + * fields: { + * "drivers_license_number": "89867453", + * "name": "Steve Smith", + * "phone_number": "8794523160", + * "ssn": "143-89-2306" + * } + * }, + * tokenization: true + * } + */ +export interface RecordServiceUpdateRecordBody { + record?: Skyflow.V1FieldRecords; + /** If `true`, this operation returns tokens for fields with tokenization enabled. */ + tokenization?: boolean; + byot?: Skyflow.V1Byot; +} diff --git a/src/ _generated_/rest/api/resources/records/client/requests/index.ts b/src/ _generated_/rest/api/resources/records/client/requests/index.ts new file mode 100644 index 00000000..85290118 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/client/requests/index.ts @@ -0,0 +1,7 @@ +export { type RecordServiceBatchOperationBody } from "./RecordServiceBatchOperationBody"; +export { type RecordServiceBulkGetRecordRequest } from "./RecordServiceBulkGetRecordRequest"; +export { type RecordServiceInsertRecordBody } from "./RecordServiceInsertRecordBody"; +export { type RecordServiceBulkDeleteRecordBody } from "./RecordServiceBulkDeleteRecordBody"; +export { type RecordServiceGetRecordRequest } from "./RecordServiceGetRecordRequest"; +export { type RecordServiceUpdateRecordBody } from "./RecordServiceUpdateRecordBody"; +export { type FileServiceUploadFileRequest } from "./FileServiceUploadFileRequest"; diff --git a/src/ _generated_/rest/api/resources/records/index.ts b/src/ _generated_/rest/api/resources/records/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts new file mode 100644 index 00000000..b2f4cefb --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestOrderBy.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceBulkGetRecordRequestOrderBy = "ASCENDING" | "DESCENDING" | "NONE"; +export const RecordServiceBulkGetRecordRequestOrderBy = { + Ascending: "ASCENDING", + Descending: "DESCENDING", + None: "NONE", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts new file mode 100644 index 00000000..d8be1627 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceBulkGetRecordRequestRedaction.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceBulkGetRecordRequestRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RecordServiceBulkGetRecordRequestRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts b/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts new file mode 100644 index 00000000..06bd6235 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/RecordServiceGetRecordRequestRedaction.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RecordServiceGetRecordRequestRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RecordServiceGetRecordRequestRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/resources/records/types/index.ts b/src/ _generated_/rest/api/resources/records/types/index.ts new file mode 100644 index 00000000..23472a04 --- /dev/null +++ b/src/ _generated_/rest/api/resources/records/types/index.ts @@ -0,0 +1,3 @@ +export * from "./RecordServiceBulkGetRecordRequestRedaction"; +export * from "./RecordServiceBulkGetRecordRequestOrderBy"; +export * from "./RecordServiceGetRecordRequestRedaction"; diff --git a/src/ _generated_/rest/api/resources/tokens/client/Client.ts b/src/ _generated_/rest/api/resources/tokens/client/Client.ts new file mode 100644 index 00000000..5f5b90fc --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/Client.ts @@ -0,0 +1,225 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Tokens { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Tokens { + constructor(protected readonly _options: Tokens.Options) {} + + /** + * Returns records that correspond to the specified tokens. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.V1DetokenizePayload} request + * @param {Tokens.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.tokens.recordServiceDetokenize("vaultID", { + * detokenizationParameters: [{ + * token: "afbd1074-51c1-4a16-9eee-e2c0ecb52125", + * redaction: "PLAIN_TEXT" + * }, { + * token: "05383487-fcae-42e5-a48e-5bd62a51af12", + * redaction: "DEFAULT" + * }], + * downloadURL: false + * }) + */ + public recordServiceDetokenize( + vaultId: string, + request: Skyflow.V1DetokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__recordServiceDetokenize(vaultId, request, requestOptions)); + } + + private async __recordServiceDetokenize( + vaultId: string, + request: Skyflow.V1DetokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/detokenize`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DetokenizeResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/detokenize.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

      Note: This endpoint doesn't insert records—it returns tokens for existing values. To insert records and tokenize that new record's values, see Insert Record and the tokenization parameter. + * + * @param {string} vaultId - ID of the vault. + * @param {Skyflow.V1TokenizePayload} request + * @param {Tokens.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.tokens.recordServiceTokenize("vaultID") + */ + public recordServiceTokenize( + vaultId: string, + request: Skyflow.V1TokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__recordServiceTokenize(vaultId, request, requestOptions)); + } + + private async __recordServiceTokenize( + vaultId: string, + request: Skyflow.V1TokenizePayload = {}, + requestOptions?: Tokens.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/vaults/${encodeURIComponent(vaultId)}/tokenize`, + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1TokenizeResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError( + _response.error.body as Record, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/vaults/{vaultID}/tokenize.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/index.ts b/src/ _generated_/rest/api/resources/tokens/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts new file mode 100644 index 00000000..cbb631a3 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/V1DetokenizePayload.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * detokenizationParameters: [{ + * token: "afbd1074-51c1-4a16-9eee-e2c0ecb52125", + * redaction: "PLAIN_TEXT" + * }, { + * token: "05383487-fcae-42e5-a48e-5bd62a51af12", + * redaction: "DEFAULT" + * }], + * downloadURL: false + * } + */ +export interface V1DetokenizePayload { + /** Detokenization details. */ + detokenizationParameters?: Skyflow.V1DetokenizeRecordRequest[]; + /** If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. */ + downloadURL?: boolean; + /** If `true`, the detokenization request continues even if an error occurs. */ + continueOnError?: boolean; +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts new file mode 100644 index 00000000..3564355a --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/V1TokenizePayload.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * {} + */ +export interface V1TokenizePayload { + /** Tokenization details. */ + tokenizationParameters?: Skyflow.V1TokenizeRecordRequest[]; +} diff --git a/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts b/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts new file mode 100644 index 00000000..6f3f1781 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/client/requests/index.ts @@ -0,0 +1,2 @@ +export { type V1DetokenizePayload } from "./V1DetokenizePayload"; +export { type V1TokenizePayload } from "./V1TokenizePayload"; diff --git a/src/ _generated_/rest/api/resources/tokens/index.ts b/src/ _generated_/rest/api/resources/tokens/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/tokens/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/tokens-api.ts b/src/ _generated_/rest/api/tokens-api.ts deleted file mode 100644 index 7f3bc5c2..00000000 --- a/src/ _generated_/rest/api/tokens-api.ts +++ /dev/null @@ -1,267 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
      • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
      • Production: https://_*identifier*.vault.skyflowapis.com
      When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from '../configuration'; -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; -// URLSearchParams not necessarily used -// @ts-ignore -import { URL, URLSearchParams } from 'url'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base'; -// @ts-ignore -import type { GooglerpcStatus } from '../models'; -// @ts-ignore -import type { V1DetokenizePayload } from '../models'; -// @ts-ignore -import type { V1DetokenizeResponse } from '../models'; -// @ts-ignore -import type { V1TokenizePayload } from '../models'; -// @ts-ignore -import type { V1TokenizeResponse } from '../models'; -/** - * TokensApi - axios parameter creator - * @export - */ -export const TokensApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDetokenize: async (vaultID: string, detokenizePayload: V1DetokenizePayload, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceDetokenize', 'vaultID', vaultID) - // verify required parameter 'detokenizePayload' is not null or undefined - assertParamExists('recordServiceDetokenize', 'detokenizePayload', detokenizePayload) - const localVarPath = `/v1/vaults/{vaultID}/detokenize` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(detokenizePayload, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceTokenize: async (vaultID: string, tokenizePayload: V1TokenizePayload, options: RawAxiosRequestConfig = {}): Promise => { - // verify required parameter 'vaultID' is not null or undefined - assertParamExists('recordServiceTokenize', 'vaultID', vaultID) - // verify required parameter 'tokenizePayload' is not null or undefined - assertParamExists('recordServiceTokenize', 'tokenizePayload', tokenizePayload) - const localVarPath = `/v1/vaults/{vaultID}/tokenize` - .replace(`{${"vaultID"}}`, encodeURIComponent(String(vaultID))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication Bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(tokenizePayload, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * TokensApi - functional programming interface - * @export - */ -export const TokensApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = TokensApiAxiosParamCreator(configuration) - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceDetokenize(vaultID, detokenizePayload, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['TokensApi.recordServiceDetokenize']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.recordServiceTokenize(vaultID, tokenizePayload, options); - const localVarOperationServerIndex = configuration?.serverIndex ?? 0; - const localVarOperationServerBasePath = operationServerMap['TokensApi.recordServiceTokenize']?.[localVarOperationServerIndex]?.url; - return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); - }, - } -}; - -/** - * TokensApi - factory interface - * @export - */ -export const TokensApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = TokensApiFp(configuration) - return { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceDetokenize(vaultID, detokenizePayload, options).then((request) => request(axios, basePath)); - }, - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise { - return localVarFp.recordServiceTokenize(vaultID, tokenizePayload, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * TokensApi - interface - * @export - * @interface TokensApi - */ -export interface TokensApiInterface { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApiInterface - */ - recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise; - - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApiInterface - */ - recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig): AxiosPromise; - -} - -/** - * TokensApi - object-oriented interface - * @export - * @class TokensApi - * @extends {BaseAPI} - */ -export class TokensApi extends BaseAPI implements TokensApiInterface { - /** - * Returns records that correspond to the specified tokens. - * @summary Detokenize - * @param {string} vaultID ID of the vault. - * @param {V1DetokenizePayload} detokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApi - */ - public recordServiceDetokenize(vaultID: string, detokenizePayload: V1DetokenizePayload, options?: RawAxiosRequestConfig) { - return TokensApiFp(this.configuration).recordServiceDetokenize(vaultID, detokenizePayload, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Returns tokens that correspond to the specified records. Only applicable for fields with deterministic tokenization.

Note: This endpoint doesn\'t insert records—it returns tokens for existing values. To insert records and tokenize that new record\'s values, see Insert Record and the tokenization parameter. - * @summary Tokenize - * @param {string} vaultID ID of the vault. - * @param {V1TokenizePayload} tokenizePayload - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TokensApi - */ - public recordServiceTokenize(vaultID: string, tokenizePayload: V1TokenizePayload, options?: RawAxiosRequestConfig) { - return TokensApiFp(this.configuration).recordServiceTokenize(vaultID, tokenizePayload, options).then((request) => request(this.axios, this.basePath)); - } -} - diff --git a/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts b/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts new file mode 100644 index 00000000..a54b5edb --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventAuditResourceType.ts @@ -0,0 +1,70 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of the resource. + */ +export type AuditEventAuditResourceType = + | "NONE_API" + | "ACCOUNT" + | "AUDIT" + | "BASE_DATA_TYPE" + | "FIELD_TEMPLATE" + | "FILE" + | "KEY" + | "POLICY" + | "PROTO_PARSE" + | "RECORD" + | "ROLE" + | "RULE" + | "SECRET" + | "SERVICE_ACCOUNT" + | "TOKEN" + | "USER" + | "VAULT" + | "VAULT_TEMPLATE" + | "WORKSPACE" + | "TABLE" + | "POLICY_TEMPLATE" + | "MEMBER" + | "TAG" + | "CONNECTION" + | "MIGRATION" + | "SCHEDULED_JOB" + | "JOB" + | "COLUMN_NAME" + | "NETWORK_TOKEN" + | "SUBSCRIPTION"; +export const AuditEventAuditResourceType = { + NoneApi: "NONE_API", + Account: "ACCOUNT", + Audit: "AUDIT", + BaseDataType: "BASE_DATA_TYPE", + FieldTemplate: "FIELD_TEMPLATE", + File: "FILE", + Key: "KEY", + Policy: "POLICY", + ProtoParse: "PROTO_PARSE", + Record: "RECORD", + Role: "ROLE", + Rule: "RULE", + Secret: "SECRET", + ServiceAccount: "SERVICE_ACCOUNT", + Token: "TOKEN", + User: "USER", + Vault: "VAULT", + VaultTemplate: "VAULT_TEMPLATE", + Workspace: "WORKSPACE", + Table: "TABLE", + PolicyTemplate: "POLICY_TEMPLATE", + Member: "MEMBER", + Tag: "TAG", + Connection: "CONNECTION", + Migration: "MIGRATION", + ScheduledJob: "SCHEDULED_JOB", + Job: "JOB", + ColumnName: "COLUMN_NAME", + NetworkToken: "NETWORK_TOKEN", + Subscription: "SUBSCRIPTION", +} as const; diff --git a/src/ _generated_/rest/api/types/AuditEventContext.ts b/src/ _generated_/rest/api/types/AuditEventContext.ts new file mode 100644 index 00000000..659eeb8f --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventContext.ts @@ -0,0 +1,32 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Context for an audit event. + */ +export interface AuditEventContext { + /** ID for the audit event. */ + changeID?: string; + /** ID for the request that caused the event. */ + requestID?: string; + /** ID for the request set by the service that received the request. */ + traceID?: string; + /** ID for the session in which the request was sent. */ + sessionID?: string; + /** Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. */ + actor?: string; + actorType?: Skyflow.V1MemberType; + accessType?: Skyflow.ContextAccessType; + /** IP Address of the client that made the request. */ + ipAddress?: string; + /** HTTP Origin request header (including scheme, hostname, and port) of the request. */ + origin?: string; + authMode?: Skyflow.ContextAuthMode; + /** ID of the JWT token. */ + jwtID?: string; + /** Embedded User Context. */ + bearerTokenContextID?: string; +} diff --git a/src/ _generated_/rest/api/types/AuditEventData.ts b/src/ _generated_/rest/api/types/AuditEventData.ts new file mode 100644 index 00000000..d842bbec --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventData.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Any Sensitive data that needs to be wrapped. + */ +export interface AuditEventData { + /** The entire body of the data requested or the query fired. */ + content?: string; +} diff --git a/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts b/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts new file mode 100644 index 00000000..6ebab4d7 --- /dev/null +++ b/src/ _generated_/rest/api/types/AuditEventHttpInfo.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface AuditEventHttpInfo { + /** The http URI that is used. */ + URI?: string; + /** http method used. */ + method?: string; +} diff --git a/src/ _generated_/rest/api/types/BatchRecordMethod.ts b/src/ _generated_/rest/api/types/BatchRecordMethod.ts new file mode 100644 index 00000000..3aafa2fe --- /dev/null +++ b/src/ _generated_/rest/api/types/BatchRecordMethod.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Method of the operation. + */ +export type BatchRecordMethod = "NONE" | "POST" | "PUT" | "GET" | "DELETE"; +export const BatchRecordMethod = { + None: "NONE", + Post: "POST", + Put: "PUT", + Get: "GET", + Delete: "DELETE", +} as const; diff --git a/src/ _generated_/rest/api/types/ContextAccessType.ts b/src/ _generated_/rest/api/types/ContextAccessType.ts new file mode 100644 index 00000000..59b4e99b --- /dev/null +++ b/src/ _generated_/rest/api/types/ContextAccessType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of access for the request. + */ +export type ContextAccessType = "ACCESS_NONE" | "API" | "SQL"; +export const ContextAccessType = { + AccessNone: "ACCESS_NONE", + Api: "API", + Sql: "SQL", +} as const; diff --git a/src/ _generated_/rest/api/types/ContextAuthMode.ts b/src/ _generated_/rest/api/types/ContextAuthMode.ts new file mode 100644 index 00000000..8276167e --- /dev/null +++ b/src/ _generated_/rest/api/types/ContextAuthMode.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Authentication mode the `actor` used. + */ +export type ContextAuthMode = "AUTH_NONE" | "OKTA_JWT" | "SERVICE_ACCOUNT_JWT" | "PAT_JWT"; +export const ContextAuthMode = { + AuthNone: "AUTH_NONE", + OktaJwt: "OKTA_JWT", + ServiceAccountJwt: "SERVICE_ACCOUNT_JWT", + PatJwt: "PAT_JWT", +} as const; diff --git a/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts b/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts new file mode 100644 index 00000000..3e196ac9 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetokenizeRecordResponseValueType.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type DetokenizeRecordResponseValueType = + | "NONE" + | "STRING" + | "INTEGER" + | "FLOAT" + | "BOOL" + | "DATETIME" + | "JSON" + | "ARRAY" + | "DATE"; +export const DetokenizeRecordResponseValueType = { + None: "NONE", + String: "STRING", + Integer: "INTEGER", + Float: "FLOAT", + Bool: "BOOL", + Datetime: "DATETIME", + Json: "JSON", + Array: "ARRAY", + Date: "DATE", +} as const; diff --git a/src/ _generated_/rest/api/types/GooglerpcStatus.ts b/src/ _generated_/rest/api/types/GooglerpcStatus.ts new file mode 100644 index 00000000..70e20691 --- /dev/null +++ b/src/ _generated_/rest/api/types/GooglerpcStatus.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface GooglerpcStatus { + code?: number; + message?: string; + details?: Skyflow.ProtobufAny[]; +} diff --git a/src/ _generated_/rest/api/types/ProtobufAny.ts b/src/ _generated_/rest/api/types/ProtobufAny.ts new file mode 100644 index 00000000..9f90a613 --- /dev/null +++ b/src/ _generated_/rest/api/types/ProtobufAny.ts @@ -0,0 +1,7 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ProtobufAny { + "@type"?: string; +} diff --git a/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts b/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts new file mode 100644 index 00000000..9787dfb5 --- /dev/null +++ b/src/ _generated_/rest/api/types/RedactionEnumRedaction.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Redaction type. Subject to policies assigned to the API caller. When used for detokenization, only supported for vaults that support [column groups](/tokenization-column-groups/). + */ +export type RedactionEnumRedaction = "DEFAULT" | "REDACTED" | "MASKED" | "PLAIN_TEXT"; +export const RedactionEnumRedaction = { + Default: "DEFAULT", + Redacted: "REDACTED", + Masked: "MASKED", + PlainText: "PLAIN_TEXT", +} as const; diff --git a/src/ _generated_/rest/api/types/RequestActionType.ts b/src/ _generated_/rest/api/types/RequestActionType.ts new file mode 100644 index 00000000..41a68d0b --- /dev/null +++ b/src/ _generated_/rest/api/types/RequestActionType.ts @@ -0,0 +1,43 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type RequestActionType = + | "NONE" + | "ASSIGN" + | "CREATE" + | "DELETE" + | "EXECUTE" + | "LIST" + | "READ" + | "UNASSIGN" + | "UPDATE" + | "VALIDATE" + | "LOGIN" + | "ROTATE" + | "SCHEDULEROTATION" + | "SCHEDULEROTATIONALERT" + | "IMPORT" + | "GETIMPORTPARAMETERS" + | "PING" + | "GETCLOUDPROVIDER"; +export const RequestActionType = { + None: "NONE", + Assign: "ASSIGN", + Create: "CREATE", + Delete: "DELETE", + Execute: "EXECUTE", + List: "LIST", + Read: "READ", + Unassign: "UNASSIGN", + Update: "UPDATE", + Validate: "VALIDATE", + Login: "LOGIN", + Rotate: "ROTATE", + Schedulerotation: "SCHEDULEROTATION", + Schedulerotationalert: "SCHEDULEROTATIONALERT", + Import: "IMPORT", + Getimportparameters: "GETIMPORTPARAMETERS", + Ping: "PING", + Getcloudprovider: "GETCLOUDPROVIDER", +} as const; diff --git a/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts b/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts new file mode 100644 index 00000000..5f48d4a7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditAfterOptions.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1AuditAfterOptions { + /** Timestamp provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. */ + timestamp?: string; + /** Change ID provided in the previous audit response's `nextOps` attribute. An alternate way to manage response pagination. Can't be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. */ + changeID?: string; +} diff --git a/src/ _generated_/rest/api/types/V1AuditEventResponse.ts b/src/ _generated_/rest/api/types/V1AuditEventResponse.ts new file mode 100644 index 00000000..1f952068 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditEventResponse.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains fields for defining Response Properties. + */ +export interface V1AuditEventResponse { + /** The status of the overall operation. */ + code?: number; + /** The status message for the overall operation. */ + message?: string; + data?: Skyflow.AuditEventData; + /** time when this response is generated, use extention method to set it. */ + timestamp?: string; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponse.ts b/src/ _generated_/rest/api/types/V1AuditResponse.ts new file mode 100644 index 00000000..7103d1b7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1AuditResponse { + /** Events matching the query. */ + event?: Skyflow.V1AuditResponseEvent[]; + nextOps?: Skyflow.V1AuditAfterOptions; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts b/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts new file mode 100644 index 00000000..95da80d3 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponseEvent.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Audit event details. + */ +export interface V1AuditResponseEvent { + context?: Skyflow.AuditEventContext; + request?: Skyflow.V1AuditResponseEventRequest; + response?: Skyflow.V1AuditEventResponse; + /** Parent account ID of the account that made the request, if any. */ + parentAccountID?: string; + /** ID of the account that made the request. */ + accountID?: string; + /** IDs for resources involved in the event. Presented in `{resourceType}/{resourceID}` format. For example, `VAULT/cd1d815aa09b4cbfbb803bd20349f202`. */ + resourceIDs?: string[]; +} diff --git a/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts b/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts new file mode 100644 index 00000000..868caa87 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AuditResponseEventRequest.ts @@ -0,0 +1,25 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains fields for defining Request Properties. + */ +export interface V1AuditResponseEventRequest { + data?: Skyflow.AuditEventData; + /** API name. */ + apiName?: string; + /** The workspaceID (if any) of the request. */ + workspaceID?: string; + /** The vaultID (if any) of the request. */ + vaultID?: string; + /** Tags associated with the event. To provide better search capabilities. Like login. */ + tags?: string[]; + /** time when this request is generated, use extention method to set it. */ + timestamp?: string; + actionType?: Skyflow.RequestActionType; + resourceType?: Skyflow.AuditEventAuditResourceType; + httpInfo?: Skyflow.AuditEventHttpInfo; +} diff --git a/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts b/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts new file mode 100644 index 00000000..35fc2db7 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BatchOperationResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1BatchOperationResponse { + /** ID of the vault. */ + vaultID?: string; + /** Responses in the same order as in the request. Responses have the same payload structure as their corresponding APIs:
  • `POST` returns an Insert Records response.
  • `PUT` returns an Update Record response.
  • `GET` returns a Get Record response.
  • `DELETE` returns a Delete Record response.
*/ + responses?: Record[]; +} diff --git a/src/ _generated_/rest/api/types/V1BatchRecord.ts b/src/ _generated_/rest/api/types/V1BatchRecord.ts new file mode 100644 index 00000000..8b6ec36d --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BatchRecord.ts @@ -0,0 +1,26 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1BatchRecord { + /** Field and value key pairs. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. Only valid when `method` is `POST` or `PUT`. */ + fields?: Record; + /** Name of the table to perform the operation on. */ + tableName?: string; + method?: Skyflow.BatchRecordMethod; + /** ID to group operations by. Operations in the same group are executed sequentially. */ + batchID?: string; + redaction?: Skyflow.RedactionEnumRedaction; + /** If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. */ + tokenization?: boolean; + /** `skyflow_id` for the record. Only valid when `method` is `GET`, `DELETE`, or `PUT`. */ + ID?: string; + /** If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. */ + downloadURL?: boolean; + /** Column that stores primary keys for upsert operations. The column must be marked as unique in the vault schema. Only valid when `method` is `POST`. */ + upsert?: string; + /** Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1BinListResponse.ts b/src/ _generated_/rest/api/types/V1BinListResponse.ts new file mode 100644 index 00000000..3b833b9e --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BinListResponse.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to the Get BIN request. + */ +export interface V1BinListResponse { + /** Card metadata associated with the specified BIN. */ + cards_data?: Skyflow.V1Card[]; +} diff --git a/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts b/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts new file mode 100644 index 00000000..7a8c518f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BulkDeleteRecordResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1BulkDeleteRecordResponse { + /** IDs for the deleted records, or `*` if all records were deleted. */ + RecordIDResponse?: string[]; +} diff --git a/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts b/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts new file mode 100644 index 00000000..a088ae08 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1BulkGetRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1BulkGetRecordResponse { + /** The specified records. */ + records?: Skyflow.V1FieldRecords[]; +} diff --git a/src/ _generated_/rest/api/types/V1Byot.ts b/src/ _generated_/rest/api/types/V1Byot.ts new file mode 100644 index 00000000..de5c2ef8 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1Byot.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Token insertion behavior. + * + * - DISABLE: Tokens aren't allowed for any fields. If tokens are specified, the request fails. + * - ENABLE: Tokens are allowed—but not required—for all fields. If tokens are specified, they're inserted. + * - ENABLE_STRICT: Tokens are required for all fields. If tokens are specified, they're inserted. If not, the request fails. + */ +export type V1Byot = "DISABLE" | "ENABLE" | "ENABLE_STRICT"; +export const V1Byot = { + Disable: "DISABLE", + Enable: "ENABLE", + EnableStrict: "ENABLE_STRICT", +} as const; diff --git a/src/ _generated_/rest/api/types/V1Card.ts b/src/ _generated_/rest/api/types/V1Card.ts new file mode 100644 index 00000000..5d04bb6e --- /dev/null +++ b/src/ _generated_/rest/api/types/V1Card.ts @@ -0,0 +1,27 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Card metadata of the requested BIN. + */ +export interface V1Card { + /** BIN of the card. */ + BIN?: string; + /** Name of the card issuer bank. */ + issuer_name?: string; + /** Country code of the card. */ + country_code?: string; + /** Currency of the card. */ + currency?: string; + /** Type of the card. */ + card_type?: string; + /** Category of the card. */ + card_category?: string; + /** Scheme of the card. */ + card_scheme?: string; + /** Last four digits of the card number. */ + card_last_four_digits?: string; + /** Expiry date of the card. */ + card_expiry?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts b/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts new file mode 100644 index 00000000..33d46c8b --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DeleteFileResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1DeleteFileResponse { + /** ID of the record. */ + skyflow_id?: string; + /** If `true`, the file was deleted. */ + deleted?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts b/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts new file mode 100644 index 00000000..9449ad38 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DeleteRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1DeleteRecordResponse { + /** ID of the deleted record. */ + skyflow_id?: string; + /** If `true`, the record was deleted. */ + deleted?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts b/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts new file mode 100644 index 00000000..e5f40632 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeRecordRequest.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeRecordRequest { + /** Token that identifies the record to detokenize. */ + token?: string; + redaction?: Skyflow.RedactionEnumRedaction; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts b/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts new file mode 100644 index 00000000..f340e9ed --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeRecordResponse.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeRecordResponse { + /** Token of the record. */ + token?: string; + valueType?: Skyflow.DetokenizeRecordResponseValueType; + /** Data corresponding to the token. */ + value?: string; + /** Error if token isn't found. */ + error?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts b/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts new file mode 100644 index 00000000..ccf01437 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetokenizeResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1DetokenizeResponse { + /** Records corresponding to the specified tokens. */ + records?: Skyflow.V1DetokenizeRecordResponse[]; +} diff --git a/src/ _generated_/rest/api/types/V1FieldRecords.ts b/src/ _generated_/rest/api/types/V1FieldRecords.ts new file mode 100644 index 00000000..ac2ea289 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1FieldRecords.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Record values and tokens. + */ +export interface V1FieldRecords { + /** Fields and values for the record. For example, `{'field_1':'value_1', 'field_2':'value_2'}`. */ + fields?: Record; + /** Fields and tokens for the record. For example, `{'field_1':'token_1', 'field_2':'token_2'}`. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts b/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts new file mode 100644 index 00000000..d5fd19c9 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1FileAvScanStatus.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Anti-virus scan status of the file. + */ +export type V1FileAvScanStatus = + | "SCAN_NONE" + | "SCAN_CLEAN" + | "SCAN_INFECTED" + | "SCAN_DELETED" + | "SCAN_ERROR" + | "SCAN_PENDING" + | "SCAN_UNSCANNABLE" + | "SCAN_FILE_NOT_FOUND" + | "SCAN_INVALID"; +export const V1FileAvScanStatus = { + ScanNone: "SCAN_NONE", + ScanClean: "SCAN_CLEAN", + ScanInfected: "SCAN_INFECTED", + ScanDeleted: "SCAN_DELETED", + ScanError: "SCAN_ERROR", + ScanPending: "SCAN_PENDING", + ScanUnscannable: "SCAN_UNSCANNABLE", + ScanFileNotFound: "SCAN_FILE_NOT_FOUND", + ScanInvalid: "SCAN_INVALID", +} as const; diff --git a/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts b/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts new file mode 100644 index 00000000..860942f1 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetAuthTokenResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1GetAuthTokenResponse { + /** AccessToken. */ + accessToken?: string; + /** TokenType : Bearer. */ + tokenType?: string; +} diff --git a/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts b/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts new file mode 100644 index 00000000..22388127 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetFileScanStatusResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1GetFileScanStatusResponse { + av_scan_status?: Skyflow.V1FileAvScanStatus; +} diff --git a/src/ _generated_/rest/api/types/V1GetQueryResponse.ts b/src/ _generated_/rest/api/types/V1GetQueryResponse.ts new file mode 100644 index 00000000..0e257ff4 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1GetQueryResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1GetQueryResponse { + /** Records returned by the query. */ + records?: Skyflow.V1FieldRecords[]; +} diff --git a/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts b/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts new file mode 100644 index 00000000..f92f7939 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1InsertRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1InsertRecordResponse { + /** Identifiers for the inserted records. */ + records?: Skyflow.V1RecordMetaProperties[]; +} diff --git a/src/ _generated_/rest/api/types/V1MemberType.ts b/src/ _generated_/rest/api/types/V1MemberType.ts new file mode 100644 index 00000000..d0024f29 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1MemberType.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of the member. + */ +export type V1MemberType = "NONE" | "USER" | "SERVICE_ACCOUNT"; +export const V1MemberType = { + None: "NONE", + User: "USER", + ServiceAccount: "SERVICE_ACCOUNT", +} as const; diff --git a/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts b/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts new file mode 100644 index 00000000..cc680523 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1RecordMetaProperties.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1RecordMetaProperties { + /** ID of the inserted record. */ + skyflow_id?: string; + /** Tokens for the record. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts b/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts new file mode 100644 index 00000000..c00e4a84 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeRecordRequest.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1TokenizeRecordRequest { + /** Existing value to return a token for. */ + value?: string; + /** Name of the column group that the value belongs to. */ + columnGroup?: string; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts b/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts new file mode 100644 index 00000000..4945257f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeRecordResponse.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1TokenizeRecordResponse { + /** Token corresponding to a value. */ + token?: string; +} diff --git a/src/ _generated_/rest/api/types/V1TokenizeResponse.ts b/src/ _generated_/rest/api/types/V1TokenizeResponse.ts new file mode 100644 index 00000000..3bc9f865 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1TokenizeResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface V1TokenizeResponse { + /** Tokens corresponding to the specified values. */ + records?: Skyflow.V1TokenizeRecordResponse[]; +} diff --git a/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts b/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts new file mode 100644 index 00000000..50ac89ce --- /dev/null +++ b/src/ _generated_/rest/api/types/V1UpdateRecordResponse.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface V1UpdateRecordResponse { + /** ID of the updated record. */ + skyflow_id?: string; + /** Tokens for the record. */ + tokens?: Record; +} diff --git a/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts b/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts new file mode 100644 index 00000000..691ef47c --- /dev/null +++ b/src/ _generated_/rest/api/types/V1VaultFieldMapping.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Mapping of the fields in the vault to the fields to use for the lookup. + */ +export interface V1VaultFieldMapping { + /** Name of the column that stores the card number. */ + card_number?: string; + /** Name of the column that stores the card number suffix. */ + card_last_four_digits?: string; + /** Name of the column that stores the expiry date. */ + card_expiry?: string; +} diff --git a/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts b/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts new file mode 100644 index 00000000..e8b6aaf1 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1VaultSchemaConfig.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Details of the vault that stores additional card details. + */ +export interface V1VaultSchemaConfig { + /** ID of the vault that stores card details. */ + id?: string; + /** Name of the table that stores card details. */ + table_name?: string; + mapping?: Skyflow.V1VaultFieldMapping; +} diff --git a/src/ _generated_/rest/api/types/index.ts b/src/ _generated_/rest/api/types/index.ts new file mode 100644 index 00000000..b3448324 --- /dev/null +++ b/src/ _generated_/rest/api/types/index.ts @@ -0,0 +1,43 @@ +export * from "./AuditEventAuditResourceType"; +export * from "./AuditEventContext"; +export * from "./AuditEventData"; +export * from "./AuditEventHttpInfo"; +export * from "./BatchRecordMethod"; +export * from "./ContextAccessType"; +export * from "./ContextAuthMode"; +export * from "./DetokenizeRecordResponseValueType"; +export * from "./V1GetAuthTokenResponse"; +export * from "./RedactionEnumRedaction"; +export * from "./RequestActionType"; +export * from "./GooglerpcStatus"; +export * from "./ProtobufAny"; +export * from "./V1AuditAfterOptions"; +export * from "./V1AuditEventResponse"; +export * from "./V1AuditResponse"; +export * from "./V1AuditResponseEvent"; +export * from "./V1AuditResponseEventRequest"; +export * from "./V1BinListResponse"; +export * from "./V1Byot"; +export * from "./V1BatchOperationResponse"; +export * from "./V1BatchRecord"; +export * from "./V1BulkDeleteRecordResponse"; +export * from "./V1BulkGetRecordResponse"; +export * from "./V1Card"; +export * from "./V1DeleteFileResponse"; +export * from "./V1DeleteRecordResponse"; +export * from "./V1DetokenizeRecordRequest"; +export * from "./V1DetokenizeRecordResponse"; +export * from "./V1DetokenizeResponse"; +export * from "./V1FieldRecords"; +export * from "./V1FileAvScanStatus"; +export * from "./V1GetFileScanStatusResponse"; +export * from "./V1GetQueryResponse"; +export * from "./V1InsertRecordResponse"; +export * from "./V1MemberType"; +export * from "./V1RecordMetaProperties"; +export * from "./V1TokenizeRecordRequest"; +export * from "./V1TokenizeRecordResponse"; +export * from "./V1TokenizeResponse"; +export * from "./V1UpdateRecordResponse"; +export * from "./V1VaultFieldMapping"; +export * from "./V1VaultSchemaConfig"; diff --git a/src/ _generated_/rest/base.ts b/src/ _generated_/rest/base.ts deleted file mode 100644 index d20af695..00000000 --- a/src/ _generated_/rest/base.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from './configuration'; -// Some imports not used depending on template conditions -// @ts-ignore -import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; -import globalAxios from 'axios'; - -export const BASE_PATH = "https://identifier.vault.skyflowapis.com".replace(/\/+$/, ""); - -/** - * - * @export - */ -export const COLLECTION_FORMATS = { - csv: ",", - ssv: " ", - tsv: "\t", - pipes: "|", -}; - -/** - * - * @export - * @interface RequestArgs - */ -export interface RequestArgs { - url: string; - options: RawAxiosRequestConfig; -} - -/** - * - * @export - * @class BaseAPI - */ -export class BaseAPI { - protected configuration: Configuration | undefined; - - constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) { - if (configuration) { - this.configuration = configuration; - this.basePath = configuration.basePath ?? basePath; - } - } -}; - -/** - * - * @export - * @class RequiredError - * @extends {Error} - */ -export class RequiredError extends Error { - constructor(public field: string, msg?: string) { - super(msg); - this.name = "RequiredError" - } -} - -interface ServerMap { - [key: string]: { - url: string, - description: string, - }[]; -} - -/** - * - * @export - */ -export const operationServerMap: ServerMap = { -} diff --git a/src/ _generated_/rest/common.ts b/src/ _generated_/rest/common.ts deleted file mode 100644 index 33461d93..00000000 --- a/src/ _generated_/rest/common.ts +++ /dev/null @@ -1,151 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import type { Configuration } from "./configuration"; -import type { RequestArgs } from "./base"; -import type { AxiosInstance, AxiosResponse } from 'axios'; -import { RequiredError } from "./base"; -import { URL, URLSearchParams } from 'url'; - -/** - * - * @export - */ -export const DUMMY_BASE_URL = 'https://example.com' - -/** - * - * @throws {RequiredError} - * @export - */ -export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) { - if (paramValue === null || paramValue === undefined) { - throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`); - } -} - -/** - * - * @export - */ -export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) { - if (configuration && configuration.apiKey) { - const localVarApiKeyValue = typeof configuration.apiKey === 'function' - ? await configuration.apiKey(keyParamName) - : await configuration.apiKey; - object[keyParamName] = localVarApiKeyValue; - } -} - -/** - * - * @export - */ -export const setBasicAuthToObject = function (object: any, configuration?: Configuration) { - if (configuration && (configuration.username || configuration.password)) { - object["auth"] = { username: configuration.username, password: configuration.password }; - } -} - -/** - * - * @export - */ -export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) { - if (configuration && configuration.accessToken) { - const accessToken = typeof configuration.accessToken === 'function' - ? await configuration.accessToken() - : await configuration.accessToken; - object["Authorization"] = "Bearer " + accessToken; - } -} - -/** - * - * @export - */ -export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) { - if (configuration && configuration.accessToken) { - const localVarAccessTokenValue = typeof configuration.accessToken === 'function' - ? await configuration.accessToken(name, scopes) - : await configuration.accessToken; - object["Authorization"] = "Bearer " + localVarAccessTokenValue; - } -} - -function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { - if (parameter == null) return; - if (typeof parameter === "object") { - if (Array.isArray(parameter)) { - (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); - } - else { - Object.keys(parameter).forEach(currentKey => - setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`) - ); - } - } - else { - if (urlSearchParams.has(key)) { - urlSearchParams.append(key, parameter); - } - else { - urlSearchParams.set(key, parameter); - } - } -} - -/** - * - * @export - */ -export const setSearchParams = function (url: URL, ...objects: any[]) { - const searchParams = new URLSearchParams(url.search); - setFlattenedQueryParams(searchParams, objects); - url.search = searchParams.toString(); -} - -/** - * - * @export - */ -export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { - const nonString = typeof value !== 'string'; - const needsSerialization = nonString && configuration && configuration.isJsonMime - ? configuration.isJsonMime(requestOptions.headers['Content-Type']) - : nonString; - return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) - : (value || ""); -} - -/** - * - * @export - */ -export const toPathString = function (url: URL) { - return url.pathname + url.search + url.hash -} - -/** - * - * @export - */ -export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) { - return >(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { - const axiosRequestArgs = {...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url}; - return axios.request(axiosRequestArgs); - }; -} diff --git a/src/ _generated_/rest/configuration.ts b/src/ _generated_/rest/configuration.ts deleted file mode 100644 index dd958991..00000000 --- a/src/ _generated_/rest/configuration.ts +++ /dev/null @@ -1,110 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export interface ConfigurationParameters { - apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); - username?: string; - password?: string; - accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); - basePath?: string; - serverIndex?: number; - baseOptions?: any; - formDataCtor?: new () => any; -} - -export class Configuration { - /** - * parameter for apiKey security - * @param name security name - * @memberof Configuration - */ - apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); - /** - * parameter for basic security - * - * @type {string} - * @memberof Configuration - */ - username?: string; - /** - * parameter for basic security - * - * @type {string} - * @memberof Configuration - */ - password?: string; - /** - * parameter for oauth2 security - * @param name security name - * @param scopes oauth2 scope - * @memberof Configuration - */ - accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); - /** - * override base path - * - * @type {string} - * @memberof Configuration - */ - basePath?: string; - /** - * override server index - * - * @type {number} - * @memberof Configuration - */ - serverIndex?: number; - /** - * base options for axios calls - * - * @type {any} - * @memberof Configuration - */ - baseOptions?: any; - /** - * The FormData constructor that will be used to create multipart form data - * requests. You can inject this here so that execution environments that - * do not support the FormData class can still run the generated client. - * - * @type {new () => FormData} - */ - formDataCtor?: new () => any; - - constructor(param: ConfigurationParameters = {}) { - this.apiKey = param.apiKey; - this.username = param.username; - this.password = param.password; - this.accessToken = param.accessToken; - this.basePath = param.basePath; - this.serverIndex = param.serverIndex; - this.baseOptions = param.baseOptions; - this.formDataCtor = param.formDataCtor; - } - - /** - * Check if the given MIME is a JSON MIME. - * JSON MIME examples: - * application/json - * application/json; charset=UTF8 - * APPLICATION/JSON - * application/vnd.company+json - * @param mime - MIME (Multipurpose Internet Mail Extensions) - * @return True if the given MIME is JSON, false otherwise. - */ - public isJsonMime(mime: string): boolean { - const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); - return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); - } -} diff --git a/src/ _generated_/rest/core/auth/BasicAuth.ts b/src/ _generated_/rest/core/auth/BasicAuth.ts new file mode 100644 index 00000000..146df215 --- /dev/null +++ b/src/ _generated_/rest/core/auth/BasicAuth.ts @@ -0,0 +1,31 @@ +import { Base64 } from "js-base64"; + +export interface BasicAuth { + username: string; + password: string; +} + +const BASIC_AUTH_HEADER_PREFIX = /^Basic /i; + +export const BasicAuth = { + toAuthorizationHeader: (basicAuth: BasicAuth | undefined): string | undefined => { + if (basicAuth == null) { + return undefined; + } + const token = Base64.encode(`${basicAuth.username}:${basicAuth.password}`); + return `Basic ${token}`; + }, + fromAuthorizationHeader: (header: string): BasicAuth => { + const credentials = header.replace(BASIC_AUTH_HEADER_PREFIX, ""); + const decoded = Base64.decode(credentials); + const [username, password] = decoded.split(":", 2); + + if (username == null || password == null) { + throw new Error("Invalid basic auth"); + } + return { + username, + password, + }; + }, +}; diff --git a/src/ _generated_/rest/core/auth/BearerToken.ts b/src/ _generated_/rest/core/auth/BearerToken.ts new file mode 100644 index 00000000..fe987fc9 --- /dev/null +++ b/src/ _generated_/rest/core/auth/BearerToken.ts @@ -0,0 +1,15 @@ +export type BearerToken = string; + +const BEARER_AUTH_HEADER_PREFIX = /^Bearer /i; + +export const BearerToken = { + toAuthorizationHeader: (token: BearerToken | undefined): string | undefined => { + if (token == null) { + return undefined; + } + return `Bearer ${token}`; + }, + fromAuthorizationHeader: (header: string): BearerToken => { + return header.replace(BEARER_AUTH_HEADER_PREFIX, "").trim() as BearerToken; + }, +}; diff --git a/src/ _generated_/rest/core/auth/index.ts b/src/ _generated_/rest/core/auth/index.ts new file mode 100644 index 00000000..ee293b34 --- /dev/null +++ b/src/ _generated_/rest/core/auth/index.ts @@ -0,0 +1,2 @@ +export { BasicAuth } from "./BasicAuth"; +export { BearerToken } from "./BearerToken"; diff --git a/src/ _generated_/rest/core/fetcher/APIResponse.ts b/src/ _generated_/rest/core/fetcher/APIResponse.ts new file mode 100644 index 00000000..6335291b --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/APIResponse.ts @@ -0,0 +1,23 @@ +import { RawResponse } from "./RawResponse"; + +/** + * The response of an API call. + * It is a successful response or a failed response. + */ +export type APIResponse = SuccessfulResponse | FailedResponse; + +export interface SuccessfulResponse { + ok: true; + body: T; + /** + * @deprecated Use `rawResponse` instead + */ + headers?: Record; + rawResponse: RawResponse; +} + +export interface FailedResponse { + ok: false; + error: T; + rawResponse: RawResponse; +} diff --git a/src/ _generated_/rest/core/fetcher/Fetcher.ts b/src/ _generated_/rest/core/fetcher/Fetcher.ts new file mode 100644 index 00000000..336ee10b --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/Fetcher.ts @@ -0,0 +1,151 @@ +import { toJson } from "../json"; +import { APIResponse } from "./APIResponse"; +import { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse"; +import { createRequestUrl } from "./createRequestUrl"; +import { getFetchFn } from "./getFetchFn"; +import { getRequestBody } from "./getRequestBody"; +import { getResponseBody } from "./getResponseBody"; +import { makeRequest } from "./makeRequest"; +import { requestWithRetries } from "./requestWithRetries"; + +export type FetchFunction = (args: Fetcher.Args) => Promise>; + +export declare namespace Fetcher { + export interface Args { + url: string; + method: string; + contentType?: string; + headers?: Record; + queryParameters?: Record; + body?: unknown; + timeoutMs?: number; + maxRetries?: number; + withCredentials?: boolean; + abortSignal?: AbortSignal; + requestType?: "json" | "file" | "bytes"; + responseType?: "json" | "blob" | "sse" | "streaming" | "text" | "arrayBuffer"; + duplex?: "half"; + } + + export type Error = FailedStatusCodeError | NonJsonError | TimeoutError | UnknownError; + + export interface FailedStatusCodeError { + reason: "status-code"; + statusCode: number; + body: unknown; + } + + export interface NonJsonError { + reason: "non-json"; + statusCode: number; + rawBody: string; + } + + export interface TimeoutError { + reason: "timeout"; + } + + export interface UnknownError { + reason: "unknown"; + errorMessage: string; + } +} + +export async function fetcherImpl(args: Fetcher.Args): Promise> { + const headers: Record = {}; + if (args.body !== undefined && args.contentType != null) { + headers["Content-Type"] = args.contentType; + } + + if (args.headers != null) { + for (const [key, value] of Object.entries(args.headers)) { + if (value != null) { + headers[key] = value; + } + } + } + + const url = createRequestUrl(args.url, args.queryParameters); + const requestBody: BodyInit | undefined = await getRequestBody({ + body: args.body, + type: args.requestType === "json" ? "json" : "other", + }); + const fetchFn = await getFetchFn(); + + try { + const response = await requestWithRetries( + async () => + makeRequest( + fetchFn, + url, + args.method, + headers, + requestBody, + args.timeoutMs, + args.abortSignal, + args.withCredentials, + args.duplex, + ), + args.maxRetries, + ); + const responseBody = await getResponseBody(response, args.responseType); + + if (response.status >= 200 && response.status < 400) { + return { + ok: true, + body: responseBody as R, + headers: response.headers, + rawResponse: toRawResponse(response), + }; + } else { + return { + ok: false, + error: { + reason: "status-code", + statusCode: response.status, + body: responseBody, + }, + rawResponse: toRawResponse(response), + }; + } + } catch (error) { + if (args.abortSignal != null && args.abortSignal.aborted) { + return { + ok: false, + error: { + reason: "unknown", + errorMessage: "The user aborted a request", + }, + rawResponse: abortRawResponse, + }; + } else if (error instanceof Error && error.name === "AbortError") { + return { + ok: false, + error: { + reason: "timeout", + }, + rawResponse: abortRawResponse, + }; + } else if (error instanceof Error) { + return { + ok: false, + error: { + reason: "unknown", + errorMessage: error.message, + }, + rawResponse: unknownRawResponse, + }; + } + + return { + ok: false, + error: { + reason: "unknown", + errorMessage: toJson(error), + }, + rawResponse: unknownRawResponse, + }; + } +} + +export const fetcher: FetchFunction = fetcherImpl; diff --git a/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts b/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts new file mode 100644 index 00000000..6b0bc4fc --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/HttpResponsePromise.ts @@ -0,0 +1,116 @@ +import { WithRawResponse } from "./RawResponse"; + +/** + * A promise that returns the parsed response and lets you retrieve the raw response too. + */ +export class HttpResponsePromise extends Promise { + private innerPromise: Promise>; + private unwrappedPromise: Promise | undefined; + + private constructor(promise: Promise>) { + // Initialize with a no-op to avoid premature parsing + super((resolve) => { + resolve(undefined as unknown as T); + }); + this.innerPromise = promise; + } + + /** + * Creates an `HttpResponsePromise` from a function that returns a promise. + * + * @param fn - A function that returns a promise resolving to a `WithRawResponse` object. + * @param args - Arguments to pass to the function. + * @returns An `HttpResponsePromise` instance. + */ + public static fromFunction Promise>, T>( + fn: F, + ...args: Parameters + ): HttpResponsePromise { + return new HttpResponsePromise(fn(...args)); + } + + /** + * Creates a function that returns an `HttpResponsePromise` from a function that returns a promise. + * + * @param fn - A function that returns a promise resolving to a `WithRawResponse` object. + * @returns A function that returns an `HttpResponsePromise` instance. + */ + public static interceptFunction< + F extends (...args: never[]) => Promise>, + T = Awaited>["data"], + >(fn: F): (...args: Parameters) => HttpResponsePromise { + return (...args: Parameters): HttpResponsePromise => { + return HttpResponsePromise.fromPromise(fn(...args)); + }; + } + + /** + * Creates an `HttpResponsePromise` from an existing promise. + * + * @param promise - A promise resolving to a `WithRawResponse` object. + * @returns An `HttpResponsePromise` instance. + */ + public static fromPromise(promise: Promise>): HttpResponsePromise { + return new HttpResponsePromise(promise); + } + + /** + * Creates an `HttpResponsePromise` from an executor function. + * + * @param executor - A function that takes resolve and reject callbacks to create a promise. + * @returns An `HttpResponsePromise` instance. + */ + public static fromExecutor( + executor: (resolve: (value: WithRawResponse) => void, reject: (reason?: unknown) => void) => void, + ): HttpResponsePromise { + const promise = new Promise>(executor); + return new HttpResponsePromise(promise); + } + + /** + * Creates an `HttpResponsePromise` from a resolved result. + * + * @param result - A `WithRawResponse` object to resolve immediately. + * @returns An `HttpResponsePromise` instance. + */ + public static fromResult(result: WithRawResponse): HttpResponsePromise { + const promise = Promise.resolve(result); + return new HttpResponsePromise(promise); + } + + private unwrap(): Promise { + if (!this.unwrappedPromise) { + this.unwrappedPromise = this.innerPromise.then(({ data }) => data); + } + return this.unwrappedPromise; + } + + /** @inheritdoc */ + public override then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | null, + ): Promise { + return this.unwrap().then(onfulfilled, onrejected); + } + + /** @inheritdoc */ + public override catch( + onrejected?: ((reason: unknown) => TResult | PromiseLike) | null, + ): Promise { + return this.unwrap().catch(onrejected); + } + + /** @inheritdoc */ + public override finally(onfinally?: (() => void) | null): Promise { + return this.unwrap().finally(onfinally); + } + + /** + * Retrieves the data and raw response. + * + * @returns A promise resolving to a `WithRawResponse` object. + */ + public async withRawResponse(): Promise> { + return await this.innerPromise; + } +} diff --git a/src/ _generated_/rest/core/fetcher/RawResponse.ts b/src/ _generated_/rest/core/fetcher/RawResponse.ts new file mode 100644 index 00000000..c975f23c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/RawResponse.ts @@ -0,0 +1,59 @@ +/** + * The raw response from the fetch call excluding the body. + */ +export type RawResponse = Omit< + { + [K in keyof Response as Response[K] extends Function ? never : K]: Response[K]; // strips out functions + }, + "ok" | "body" | "bodyUsed" +>; // strips out body and bodyUsed + +/** + * A raw response indicating that the request was aborted. + */ +export const abortRawResponse: RawResponse = { + headers: new Headers(), + redirected: false, + status: 499, + statusText: "Client Closed Request", + type: "error", + url: "", +} as const; + +/** + * A raw response indicating an unknown error. + */ +export const unknownRawResponse: RawResponse = { + headers: new Headers(), + redirected: false, + status: 0, + statusText: "Unknown Error", + type: "error", + url: "", +} as const; + +/** + * Converts a `RawResponse` object into a `RawResponse` by extracting its properties, + * excluding the `body` and `bodyUsed` fields. + * + * @param response - The `RawResponse` object to convert. + * @returns A `RawResponse` object containing the extracted properties of the input response. + */ +export function toRawResponse(response: Response): RawResponse { + return { + headers: response.headers, + redirected: response.redirected, + status: response.status, + statusText: response.statusText, + type: response.type, + url: response.url, + }; +} + +/** + * Creates a `RawResponse` from a standard `Response` object. + */ +export interface WithRawResponse { + readonly data: T; + readonly rawResponse: RawResponse; +} diff --git a/src/ _generated_/rest/core/fetcher/Supplier.ts b/src/ _generated_/rest/core/fetcher/Supplier.ts new file mode 100644 index 00000000..867c931c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/Supplier.ts @@ -0,0 +1,11 @@ +export type Supplier = T | Promise | (() => T | Promise); + +export const Supplier = { + get: async (supplier: Supplier): Promise => { + if (typeof supplier === "function") { + return (supplier as () => T)(); + } else { + return supplier; + } + }, +}; diff --git a/src/ _generated_/rest/core/fetcher/createRequestUrl.ts b/src/ _generated_/rest/core/fetcher/createRequestUrl.ts new file mode 100644 index 00000000..f1157ce7 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/createRequestUrl.ts @@ -0,0 +1,10 @@ +import qs from "qs"; + +export function createRequestUrl( + baseUrl: string, + queryParameters?: Record, +): string { + return Object.keys(queryParameters ?? {}).length > 0 + ? `${baseUrl}?${qs.stringify(queryParameters, { arrayFormat: "repeat" })}` + : baseUrl; +} diff --git a/src/ _generated_/rest/core/fetcher/getFetchFn.ts b/src/ _generated_/rest/core/fetcher/getFetchFn.ts new file mode 100644 index 00000000..9fd9bfc4 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getFetchFn.ts @@ -0,0 +1,25 @@ +import { RUNTIME } from "../runtime"; + +/** + * Returns a fetch function based on the runtime + */ +export async function getFetchFn(): Promise { + // In Node.js 18+ environments, use native fetch + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + return fetch; + } + + // In Node.js 18 or lower environments, the SDK always uses`node-fetch`. + if (RUNTIME.type === "node") { + return (await import("node-fetch")).default as any; + } + + // Otherwise the SDK uses global fetch if available, + // and falls back to node-fetch. + if (typeof fetch == "function") { + return fetch; + } + + // Defaults to node `node-fetch` if global fetch isn't available + return (await import("node-fetch")).default as any; +} diff --git a/src/ _generated_/rest/core/fetcher/getHeader.ts b/src/ _generated_/rest/core/fetcher/getHeader.ts new file mode 100644 index 00000000..50f922b0 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getHeader.ts @@ -0,0 +1,8 @@ +export function getHeader(headers: Record, header: string): string | undefined { + for (const [headerKey, headerValue] of Object.entries(headers)) { + if (headerKey.toLowerCase() === header.toLowerCase()) { + return headerValue; + } + } + return undefined; +} diff --git a/src/ _generated_/rest/core/fetcher/getRequestBody.ts b/src/ _generated_/rest/core/fetcher/getRequestBody.ts new file mode 100644 index 00000000..fce5589c --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getRequestBody.ts @@ -0,0 +1,16 @@ +import { toJson } from "../json"; + +export declare namespace GetRequestBody { + interface Args { + body: unknown; + type: "json" | "file" | "bytes" | "other"; + } +} + +export async function getRequestBody({ body, type }: GetRequestBody.Args): Promise { + if (type.includes("json")) { + return toJson(body); + } else { + return body as BodyInit; + } +} diff --git a/src/ _generated_/rest/core/fetcher/getResponseBody.ts b/src/ _generated_/rest/core/fetcher/getResponseBody.ts new file mode 100644 index 00000000..d046e6ea --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/getResponseBody.ts @@ -0,0 +1,34 @@ +import { chooseStreamWrapper } from "./stream-wrappers/chooseStreamWrapper"; + +export async function getResponseBody(response: Response, responseType?: string): Promise { + if (response.body != null && responseType === "blob") { + return await response.blob(); + } else if (response.body != null && responseType === "arrayBuffer") { + return await response.arrayBuffer(); + } else if (response.body != null && responseType === "sse") { + return response.body; + } else if (response.body != null && responseType === "streaming") { + return chooseStreamWrapper(response.body); + } else if (response.body != null && responseType === "text") { + return await response.text(); + } else { + const text = await response.text(); + if (text.length > 0) { + try { + let responseBody = JSON.parse(text); + return responseBody; + } catch (err) { + return { + ok: false, + error: { + reason: "non-json", + statusCode: response.status, + rawBody: text, + }, + }; + } + } else { + return undefined; + } + } +} diff --git a/src/ _generated_/rest/core/fetcher/index.ts b/src/ _generated_/rest/core/fetcher/index.ts new file mode 100644 index 00000000..249f5176 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/index.ts @@ -0,0 +1,8 @@ +export type { APIResponse } from "./APIResponse"; +export { fetcher } from "./Fetcher"; +export type { Fetcher, FetchFunction } from "./Fetcher"; +export { getHeader } from "./getHeader"; +export { Supplier } from "./Supplier"; +export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse"; +export type { RawResponse, WithRawResponse } from "./RawResponse"; +export { HttpResponsePromise } from "./HttpResponsePromise"; diff --git a/src/ _generated_/rest/core/fetcher/makeRequest.ts b/src/ _generated_/rest/core/fetcher/makeRequest.ts new file mode 100644 index 00000000..1af42bb9 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/makeRequest.ts @@ -0,0 +1,44 @@ +import { anySignal, getTimeoutSignal } from "./signals"; + +export const makeRequest = async ( + fetchFn: (url: string, init: RequestInit) => Promise, + url: string, + method: string, + headers: Record, + requestBody: BodyInit | undefined, + timeoutMs?: number, + abortSignal?: AbortSignal, + withCredentials?: boolean, + duplex?: "half", +): Promise => { + const signals: AbortSignal[] = []; + + // Add timeout signal + let timeoutAbortId: NodeJS.Timeout | undefined = undefined; + if (timeoutMs != null) { + const { signal, abortId } = getTimeoutSignal(timeoutMs); + timeoutAbortId = abortId; + signals.push(signal); + } + + // Add arbitrary signal + if (abortSignal != null) { + signals.push(abortSignal); + } + let newSignals = anySignal(signals); + const response = await fetchFn(url, { + method: method, + headers, + body: requestBody, + signal: newSignals, + credentials: withCredentials ? "include" : undefined, + // @ts-ignore + duplex, + }); + + if (timeoutAbortId != null) { + clearTimeout(timeoutAbortId); + } + + return response; +}; diff --git a/src/ _generated_/rest/core/fetcher/requestWithRetries.ts b/src/ _generated_/rest/core/fetcher/requestWithRetries.ts new file mode 100644 index 00000000..add3cce0 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/requestWithRetries.ts @@ -0,0 +1,33 @@ +const INITIAL_RETRY_DELAY = 1000; // in milliseconds +const MAX_RETRY_DELAY = 60000; // in milliseconds +const DEFAULT_MAX_RETRIES = 2; +const JITTER_FACTOR = 0.2; // 20% random jitter + +function addJitter(delay: number): number { + // Generate a random value between -JITTER_FACTOR and +JITTER_FACTOR + const jitterMultiplier = 1 + (Math.random() * 2 - 1) * JITTER_FACTOR; + return delay * jitterMultiplier; +} + +export async function requestWithRetries( + requestFn: () => Promise, + maxRetries: number = DEFAULT_MAX_RETRIES, +): Promise { + let response: Response = await requestFn(); + + for (let i = 0; i < maxRetries; ++i) { + if ([408, 429].includes(response.status) || response.status >= 500) { + // Calculate base delay using exponential backoff (in milliseconds) + const baseDelay = Math.min(INITIAL_RETRY_DELAY * Math.pow(2, i), MAX_RETRY_DELAY); + + // Add jitter to the delay + const delayWithJitter = addJitter(baseDelay); + + await new Promise((resolve) => setTimeout(resolve, delayWithJitter)); + response = await requestFn(); + } else { + break; + } + } + return response!; +} diff --git a/src/ _generated_/rest/core/fetcher/signals.ts b/src/ _generated_/rest/core/fetcher/signals.ts new file mode 100644 index 00000000..a8d32a2e --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/signals.ts @@ -0,0 +1,38 @@ +const TIMEOUT = "timeout"; + +export function getTimeoutSignal(timeoutMs: number): { signal: AbortSignal; abortId: NodeJS.Timeout } { + const controller = new AbortController(); + const abortId = setTimeout(() => controller.abort(TIMEOUT), timeoutMs); + return { signal: controller.signal, abortId }; +} + +/** + * Returns an abort signal that is getting aborted when + * at least one of the specified abort signals is aborted. + * + * Requires at least node.js 18. + */ +export function anySignal(...args: AbortSignal[] | [AbortSignal[]]): AbortSignal { + // Allowing signals to be passed either as array + // of signals or as multiple arguments. + const signals = (args.length === 1 && Array.isArray(args[0]) ? args[0] : args) as AbortSignal[]; + + const controller = new AbortController(); + + for (const signal of signals) { + if (signal.aborted) { + // Exiting early if one of the signals + // is already aborted. + controller.abort((signal as any)?.reason); + break; + } + + // Listening for signals and removing the listeners + // when at least one symbol is aborted. + signal.addEventListener("abort", () => controller.abort((signal as any)?.reason), { + signal: controller.signal, + }); + } + + return controller.signal; +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts new file mode 100644 index 00000000..6f1a82e9 --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.ts @@ -0,0 +1,257 @@ +import type { Writable } from "readable-stream"; + +import { EventCallback, StreamWrapper } from "./chooseStreamWrapper"; + +export class Node18UniversalStreamWrapper + implements + StreamWrapper | Writable | WritableStream, ReadFormat> +{ + private readableStream: ReadableStream; + private reader: ReadableStreamDefaultReader; + private events: Record; + private paused: boolean; + private resumeCallback: ((value?: unknown) => void) | null; + private encoding: string | null; + + constructor(readableStream: ReadableStream) { + this.readableStream = readableStream; + this.reader = this.readableStream.getReader(); + this.events = { + data: [], + end: [], + error: [], + readable: [], + close: [], + pause: [], + resume: [], + }; + this.paused = false; + this.resumeCallback = null; + this.encoding = null; + } + + public on(event: string, callback: EventCallback): void { + this.events[event]?.push(callback); + } + + public off(event: string, callback: EventCallback): void { + this.events[event] = this.events[event]?.filter((cb) => cb !== callback); + } + + public pipe( + dest: Node18UniversalStreamWrapper | Writable | WritableStream, + ): Node18UniversalStreamWrapper | Writable | WritableStream { + this.on("data", async (chunk) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._write(chunk); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } else { + dest.write(chunk); + } + }); + + this.on("end", async () => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._end(); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.close(); + } else { + dest.end(); + } + }); + + this.on("error", async (error) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._error(error); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.abort(error); + } else { + dest.destroy(error); + } + }); + + this._startReading(); + + return dest; + } + + public pipeTo( + dest: Node18UniversalStreamWrapper | Writable | WritableStream, + ): Node18UniversalStreamWrapper | Writable | WritableStream { + return this.pipe(dest); + } + + public unpipe(dest: Node18UniversalStreamWrapper | Writable | WritableStream): void { + this.off("data", async (chunk) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._write(chunk); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } else { + dest.write(chunk); + } + }); + + this.off("end", async () => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._end(); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.close(); + } else { + dest.end(); + } + }); + + this.off("error", async (error) => { + if (dest instanceof Node18UniversalStreamWrapper) { + dest._error(error); + } else if (dest instanceof WritableStream) { + const writer = dest.getWriter(); + writer.abort(error); + } else { + dest.destroy(error); + } + }); + } + + public destroy(error?: Error): void { + this.reader + .cancel(error) + .then(() => { + this._emit("close"); + }) + .catch((err) => { + this._emit("error", err); + }); + } + + public pause(): void { + this.paused = true; + this._emit("pause"); + } + + public resume(): void { + if (this.paused) { + this.paused = false; + this._emit("resume"); + if (this.resumeCallback) { + this.resumeCallback(); + this.resumeCallback = null; + } + } + } + + public get isPaused(): boolean { + return this.paused; + } + + public async read(): Promise { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + + if (done) { + return undefined; + } + return value; + } + + public setEncoding(encoding: string): void { + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: ReadFormat[] = []; + + while (true) { + const { done, value } = await this.reader.read(); + if (done) { + break; + } + if (value) { + chunks.push(value); + } + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(await new Blob(chunks).arrayBuffer()); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + private _write(chunk: ReadFormat): void { + this._emit("data", chunk); + } + + private _end(): void { + this._emit("end"); + } + + private _error(error: any): void { + this._emit("error", error); + } + + private _emit(event: string, data?: any): void { + if (this.events[event]) { + for (const callback of this.events[event] || []) { + callback(data); + } + } + } + + private async _startReading(): Promise { + try { + this._emit("readable"); + while (true) { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + this._emit("end"); + this._emit("close"); + break; + } + if (value) { + this._emit("data", value); + } + } + } catch (error) { + this._emit("error", error); + } + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + return { + next: async () => { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return { done: true, value: undefined }; + } + return { done: false, value }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts new file mode 100644 index 00000000..23c01a1a --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/NodePre18StreamWrapper.ts @@ -0,0 +1,107 @@ +import type { Readable, Writable } from "readable-stream"; + +import { EventCallback, StreamWrapper } from "./chooseStreamWrapper"; + +export class NodePre18StreamWrapper implements StreamWrapper { + private readableStream: Readable; + private encoding: string | undefined; + + constructor(readableStream: Readable) { + this.readableStream = readableStream; + } + + public on(event: string, callback: EventCallback): void { + this.readableStream.on(event, callback); + } + + public off(event: string, callback: EventCallback): void { + this.readableStream.off(event, callback); + } + + public pipe(dest: Writable): Writable { + this.readableStream.pipe(dest); + return dest; + } + + public pipeTo(dest: Writable): Writable { + return this.pipe(dest); + } + + public unpipe(dest?: Writable): void { + if (dest) { + this.readableStream.unpipe(dest); + } else { + this.readableStream.unpipe(); + } + } + + public destroy(error?: Error): void { + this.readableStream.destroy(error); + } + + public pause(): void { + this.readableStream.pause(); + } + + public resume(): void { + this.readableStream.resume(); + } + + public get isPaused(): boolean { + return this.readableStream.isPaused(); + } + + public async read(): Promise { + return new Promise((resolve, reject) => { + const chunk = this.readableStream.read(); + if (chunk) { + resolve(chunk); + } else { + this.readableStream.once("readable", () => { + const chunk = this.readableStream.read(); + resolve(chunk); + }); + this.readableStream.once("error", reject); + } + }); + } + + public setEncoding(encoding?: string): void { + this.readableStream.setEncoding(encoding as BufferEncoding); + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: Uint8Array[] = []; + const encoder = new TextEncoder(); + this.readableStream.setEncoding((this.encoding || "utf-8") as BufferEncoding); + + for await (const chunk of this.readableStream) { + chunks.push(encoder.encode(chunk)); + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(Buffer.concat(chunks)); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + public [Symbol.asyncIterator](): AsyncIterableIterator { + const readableStream = this.readableStream; + const iterator = readableStream[Symbol.asyncIterator](); + + // Create and return an async iterator that yields buffers + return { + async next(): Promise> { + const { value, done } = await iterator.next(); + return { value: value as Buffer, done }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts new file mode 100644 index 00000000..091e2a7f --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/UndiciStreamWrapper.ts @@ -0,0 +1,243 @@ +import { StreamWrapper } from "./chooseStreamWrapper"; + +type EventCallback = (data?: any) => void; + +export class UndiciStreamWrapper + implements StreamWrapper | WritableStream, ReadFormat> +{ + private readableStream: ReadableStream; + private reader: ReadableStreamDefaultReader; + private events: Record; + private paused: boolean; + private resumeCallback: ((value?: unknown) => void) | null; + private encoding: string | null; + + constructor(readableStream: ReadableStream) { + this.readableStream = readableStream; + this.reader = this.readableStream.getReader(); + this.events = { + data: [], + end: [], + error: [], + readable: [], + close: [], + pause: [], + resume: [], + }; + this.paused = false; + this.resumeCallback = null; + this.encoding = null; + } + + public on(event: string, callback: EventCallback): void { + this.events[event]?.push(callback); + } + + public off(event: string, callback: EventCallback): void { + this.events[event] = this.events[event]?.filter((cb) => cb !== callback); + } + + public pipe( + dest: UndiciStreamWrapper | WritableStream, + ): UndiciStreamWrapper | WritableStream { + this.on("data", (chunk) => { + if (dest instanceof UndiciStreamWrapper) { + dest._write(chunk); + } else { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } + }); + + this.on("end", () => { + if (dest instanceof UndiciStreamWrapper) { + dest._end(); + } else { + const writer = dest.getWriter(); + writer.close(); + } + }); + + this.on("error", (error) => { + if (dest instanceof UndiciStreamWrapper) { + dest._error(error); + } else { + const writer = dest.getWriter(); + writer.abort(error); + } + }); + + this._startReading(); + + return dest; + } + + public pipeTo( + dest: UndiciStreamWrapper | WritableStream, + ): UndiciStreamWrapper | WritableStream { + return this.pipe(dest); + } + + public unpipe(dest: UndiciStreamWrapper | WritableStream): void { + this.off("data", (chunk) => { + if (dest instanceof UndiciStreamWrapper) { + dest._write(chunk); + } else { + const writer = dest.getWriter(); + writer.write(chunk).then(() => writer.releaseLock()); + } + }); + + this.off("end", () => { + if (dest instanceof UndiciStreamWrapper) { + dest._end(); + } else { + const writer = dest.getWriter(); + writer.close(); + } + }); + + this.off("error", (error) => { + if (dest instanceof UndiciStreamWrapper) { + dest._error(error); + } else { + const writer = dest.getWriter(); + writer.abort(error); + } + }); + } + + public destroy(error?: Error): void { + this.reader + .cancel(error) + .then(() => { + this._emit("close"); + }) + .catch((err) => { + this._emit("error", err); + }); + } + + public pause(): void { + this.paused = true; + this._emit("pause"); + } + + public resume(): void { + if (this.paused) { + this.paused = false; + this._emit("resume"); + if (this.resumeCallback) { + this.resumeCallback(); + this.resumeCallback = null; + } + } + } + + public get isPaused(): boolean { + return this.paused; + } + + public async read(): Promise { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return undefined; + } + return value; + } + + public setEncoding(encoding: string): void { + this.encoding = encoding; + } + + public async text(): Promise { + const chunks: BlobPart[] = []; + + while (true) { + const { done, value } = await this.reader.read(); + if (done) { + break; + } + if (value) { + chunks.push(value); + } + } + + const decoder = new TextDecoder(this.encoding || "utf-8"); + return decoder.decode(await new Blob(chunks).arrayBuffer()); + } + + public async json(): Promise { + const text = await this.text(); + return JSON.parse(text); + } + + private _write(chunk: ReadFormat): void { + this._emit("data", chunk); + } + + private _end(): void { + this._emit("end"); + } + + private _error(error: any): void { + this._emit("error", error); + } + + private _emit(event: string, data?: any): void { + if (this.events[event]) { + for (const callback of this.events[event] || []) { + callback(data); + } + } + } + + private async _startReading(): Promise { + try { + this._emit("readable"); + while (true) { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + this._emit("end"); + this._emit("close"); + break; + } + if (value) { + this._emit("data", value); + } + } + } catch (error) { + this._emit("error", error); + } + } + + [Symbol.asyncIterator](): AsyncIterableIterator { + return { + next: async () => { + if (this.paused) { + await new Promise((resolve) => { + this.resumeCallback = resolve; + }); + } + const { done, value } = await this.reader.read(); + if (done) { + return { done: true, value: undefined }; + } + return { done: false, value }; + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } +} diff --git a/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts b/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts new file mode 100644 index 00000000..8c7492fc --- /dev/null +++ b/src/ _generated_/rest/core/fetcher/stream-wrappers/chooseStreamWrapper.ts @@ -0,0 +1,34 @@ +import type { Readable } from "readable-stream"; + +import { RUNTIME } from "../../runtime"; + +export type EventCallback = (data?: any) => void; + +export interface StreamWrapper { + setEncoding(encoding?: string): void; + on(event: string, callback: EventCallback): void; + off(event: string, callback: EventCallback): void; + pipe(dest: WritableStream): WritableStream; + pipeTo(dest: WritableStream): WritableStream; + unpipe(dest?: WritableStream): void; + destroy(error?: Error): void; + pause(): void; + resume(): void; + get isPaused(): boolean; + read(): Promise; + text(): Promise; + json(): Promise; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +export async function chooseStreamWrapper(responseBody: any): Promise>> { + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + return new (await import("./Node18UniversalStreamWrapper")).Node18UniversalStreamWrapper( + responseBody as ReadableStream, + ); + } else if (RUNTIME.type !== "node" && typeof fetch === "function") { + return new (await import("./UndiciStreamWrapper")).UndiciStreamWrapper(responseBody as ReadableStream); + } else { + return new (await import("./NodePre18StreamWrapper")).NodePre18StreamWrapper(responseBody as Readable); + } +} diff --git a/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts b/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts new file mode 100644 index 00000000..25b60617 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/FormDataWrapper.ts @@ -0,0 +1,181 @@ +import { RUNTIME } from "../runtime"; + +export type MaybePromise = Promise | T; + +interface FormDataRequest { + body: Body; + headers: Record; + duplex?: "half"; +} + +function isNamedValue(value: unknown): value is { name: string } { + return typeof value === "object" && value != null && "name" in value; +} + +export interface CrossPlatformFormData { + setup(): Promise; + + append(key: string, value: unknown): void; + + appendFile(key: string, value: unknown, fileName?: string): Promise; + + getRequest(): MaybePromise>; +} + +export async function newFormData(): Promise { + let formdata: CrossPlatformFormData; + if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) { + formdata = new Node18FormData(); + } else if (RUNTIME.type === "node") { + formdata = new Node16FormData(); + } else { + formdata = new WebFormData(); + } + await formdata.setup(); + return formdata; +} + +export type Node18FormDataFd = + | { + append(name: string, value: unknown, fileName?: string): void; + } + | undefined; + +/** + * Form Data Implementation for Node.js 18+ + */ +export class Node18FormData implements CrossPlatformFormData { + private fd: Node18FormDataFd; + + public async setup() { + this.fd = new (await import("formdata-node")).FormData(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: unknown, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + + if (value instanceof Blob) { + this.fd?.append(key, value, fileName); + } else { + this.fd?.append(key, { + type: undefined, + name: fileName, + [Symbol.toStringTag]: "File", + stream() { + return value; + }, + }); + } + } + + public async getRequest(): Promise> { + const encoder = new (await import("form-data-encoder")).FormDataEncoder(this.fd as any); + return { + body: (await import("readable-stream")).Readable.from(encoder), + headers: encoder.headers, + duplex: "half", + }; + } +} + +export type Node16FormDataFd = + | { + append( + name: string, + value: unknown, + options?: + | string + | { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + }, + ): void; + + getHeaders(): Record; + } + | undefined; + +/** + * Form Data Implementation for Node.js 16-18 + */ +export class Node16FormData implements CrossPlatformFormData { + private fd: Node16FormDataFd; + + public async setup(): Promise { + this.fd = new (await import("form-data")).default(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: unknown, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + + let bufferedValue; + if (value instanceof Blob) { + bufferedValue = Buffer.from(await (value as any).arrayBuffer()); + } else { + bufferedValue = value; + } + + if (fileName == null) { + this.fd?.append(key, bufferedValue); + } else { + this.fd?.append(key, bufferedValue, { filename: fileName }); + } + } + + public getRequest(): FormDataRequest { + return { + body: this.fd, + headers: this.fd ? this.fd.getHeaders() : {}, + }; + } +} + +export type WebFormDataFd = { append(name: string, value: string | Blob, fileName?: string): void } | undefined; + +/** + * Form Data Implementation for Web + */ +export class WebFormData implements CrossPlatformFormData { + protected fd: WebFormDataFd; + + public async setup(): Promise { + this.fd = new FormData(); + } + + public append(key: string, value: any): void { + this.fd?.append(key, value); + } + + public async appendFile(key: string, value: any, fileName?: string): Promise { + if (fileName == null && isNamedValue(value)) { + fileName = value.name; + } + if (value instanceof Blob) { + this.fd?.append(key, value, fileName); + return; + } + this.fd?.append(key, new Blob([value]), fileName); + } + + public getRequest(): FormDataRequest { + return { + body: this.fd, + headers: {}, + }; + } +} diff --git a/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts b/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts new file mode 100644 index 00000000..3b3f4c12 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/encodeAsFormParameter.ts @@ -0,0 +1,15 @@ +import qs from "qs"; + +/** + * Takes an unknown value, stringifies it using qs, and parses it into a key-value record + */ +export function encodeAsFormParameter(value: unknown): Record { + const stringified = qs.stringify(value, { encode: false }); + + const keyValuePairs = stringified.split("&").map((pair) => { + const [key, value] = pair.split("="); + return [key, value] as const; + }); + + return Object.fromEntries(keyValuePairs); +} diff --git a/src/ _generated_/rest/core/form-data-utils/index.ts b/src/ _generated_/rest/core/form-data-utils/index.ts new file mode 100644 index 00000000..62121d58 --- /dev/null +++ b/src/ _generated_/rest/core/form-data-utils/index.ts @@ -0,0 +1,2 @@ +export { encodeAsFormParameter } from "./encodeAsFormParameter"; +export * from "./FormDataWrapper"; diff --git a/src/ _generated_/rest/core/index.ts b/src/ _generated_/rest/core/index.ts new file mode 100644 index 00000000..b7edbb61 --- /dev/null +++ b/src/ _generated_/rest/core/index.ts @@ -0,0 +1,4 @@ +export * from "./fetcher"; +export * from "./auth"; +export * from "./runtime"; +export * from "./form-data-utils"; diff --git a/src/ _generated_/rest/core/json.ts b/src/ _generated_/rest/core/json.ts new file mode 100644 index 00000000..c052f324 --- /dev/null +++ b/src/ _generated_/rest/core/json.ts @@ -0,0 +1,27 @@ +/** + * Serialize a value to JSON + * @param value A JavaScript value, usually an object or array, to be converted. + * @param replacer A function that transforms the results. + * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. + * @returns JSON string + */ +export const toJson = ( + value: unknown, + replacer?: (this: unknown, key: string, value: unknown) => unknown, + space?: string | number, +): string => { + return JSON.stringify(value, replacer, space); +}; + +/** + * Parse JSON string to object, array, or other type + * @param text A valid JSON string. + * @param reviver A function that transforms the results. This function is called for each member of the object. If a member contains nested objects, the nested objects are transformed before the parent object is. + * @returns Parsed object, array, or other type + */ +export function fromJson( + text: string, + reviver?: (this: unknown, key: string, value: unknown) => unknown, +): T { + return JSON.parse(text, reviver); +} diff --git a/src/ _generated_/rest/core/runtime/index.ts b/src/ _generated_/rest/core/runtime/index.ts new file mode 100644 index 00000000..5c76dbb1 --- /dev/null +++ b/src/ _generated_/rest/core/runtime/index.ts @@ -0,0 +1 @@ +export { RUNTIME } from "./runtime"; diff --git a/src/ _generated_/rest/core/runtime/runtime.ts b/src/ _generated_/rest/core/runtime/runtime.ts new file mode 100644 index 00000000..a9750175 --- /dev/null +++ b/src/ _generated_/rest/core/runtime/runtime.ts @@ -0,0 +1,131 @@ +interface DenoGlobal { + version: { + deno: string; + }; +} + +interface BunGlobal { + version: string; +} + +declare const Deno: DenoGlobal | undefined; +declare const Bun: BunGlobal | undefined; +declare const EdgeRuntime: string | undefined; + +/** + * A constant that indicates which environment and version the SDK is running in. + */ +export const RUNTIME: Runtime = evaluateRuntime(); + +export interface Runtime { + type: "browser" | "web-worker" | "deno" | "bun" | "node" | "react-native" | "unknown" | "workerd" | "edge-runtime"; + version?: string; + parsedVersion?: number; +} + +function evaluateRuntime(): Runtime { + /** + * A constant that indicates whether the environment the code is running is a Web Browser. + */ + const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; + if (isBrowser) { + return { + type: "browser", + version: window.navigator.userAgent, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Cloudflare. + * https://developers.cloudflare.com/workers/runtime-apis/web-standards/#navigatoruseragent + */ + const isCloudflare = typeof globalThis !== "undefined" && globalThis?.navigator?.userAgent === "Cloudflare-Workers"; + if (isCloudflare) { + return { + type: "workerd", + }; + } + + /** + * A constant that indicates whether the environment the code is running is Edge Runtime. + * https://vercel.com/docs/functions/runtimes/edge-runtime#check-if-you're-running-on-the-edge-runtime + */ + const isEdgeRuntime = typeof EdgeRuntime === "string"; + if (isEdgeRuntime) { + return { + type: "edge-runtime", + }; + } + + /** + * A constant that indicates whether the environment the code is running is a Web Worker. + */ + const isWebWorker = + typeof self === "object" && + // @ts-ignore + typeof self?.importScripts === "function" && + (self.constructor?.name === "DedicatedWorkerGlobalScope" || + self.constructor?.name === "ServiceWorkerGlobalScope" || + self.constructor?.name === "SharedWorkerGlobalScope"); + if (isWebWorker) { + return { + type: "web-worker", + }; + } + + /** + * A constant that indicates whether the environment the code is running is Deno. + * FYI Deno spoofs process.versions.node, see https://deno.land/std@0.177.0/node/process.ts?s=versions + */ + const isDeno = + typeof Deno !== "undefined" && typeof Deno.version !== "undefined" && typeof Deno.version.deno !== "undefined"; + if (isDeno) { + return { + type: "deno", + version: Deno.version.deno, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Bun.sh. + */ + const isBun = typeof Bun !== "undefined" && typeof Bun.version !== "undefined"; + if (isBun) { + return { + type: "bun", + version: Bun.version, + }; + } + + /** + * A constant that indicates whether the environment the code is running is Node.JS. + */ + const isNode = + typeof process !== "undefined" && + "version" in process && + !!process.version && + "versions" in process && + !!process.versions?.node; + if (isNode) { + return { + type: "node", + version: process.versions.node, + parsedVersion: Number(process.versions.node.split(".")[0]), + }; + } + + /** + * A constant that indicates whether the environment the code is running is in React-Native. + * https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Core/setUpNavigator.js + */ + const isReactNative = typeof navigator !== "undefined" && navigator?.product === "ReactNative"; + if (isReactNative) { + return { + type: "react-native", + }; + } + + return { + type: "unknown", + }; +} diff --git a/src/ _generated_/rest/environments.ts b/src/ _generated_/rest/environments.ts new file mode 100644 index 00000000..a2633a97 --- /dev/null +++ b/src/ _generated_/rest/environments.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export const SkyflowEnvironment = { + Production: "https://identifier.vault.skyflowapis.com", + Sandbox: "https://identifier.vault.skyflowapis-preview.com", +} as const; + +export type SkyflowEnvironment = typeof SkyflowEnvironment.Production | typeof SkyflowEnvironment.Sandbox; diff --git a/src/ _generated_/rest/errors/SkyflowError.ts b/src/ _generated_/rest/errors/SkyflowError.ts new file mode 100644 index 00000000..003768c2 --- /dev/null +++ b/src/ _generated_/rest/errors/SkyflowError.ts @@ -0,0 +1,55 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as core from "../core"; +import { toJson } from "../core/json"; + +export class SkyflowError extends Error { + public readonly statusCode?: number; + public readonly body?: unknown; + public readonly rawResponse?: core.RawResponse; + + constructor({ + message, + statusCode, + body, + rawResponse, + }: { + message?: string; + statusCode?: number; + body?: unknown; + rawResponse?: core.RawResponse; + }) { + super(buildMessage({ message, statusCode, body })); + Object.setPrototypeOf(this, SkyflowError.prototype); + this.statusCode = statusCode; + this.body = body; + this.rawResponse = rawResponse; + } +} + +function buildMessage({ + message, + statusCode, + body, +}: { + message: string | undefined; + statusCode: number | undefined; + body: unknown | undefined; +}): string { + let lines: string[] = []; + if (message != null) { + lines.push(message); + } + + if (statusCode != null) { + lines.push(`Status code: ${statusCode.toString()}`); + } + + if (body != null) { + lines.push(`Body: ${toJson(body, undefined, 2)}`); + } + + return lines.join("\n"); +} diff --git a/src/ _generated_/rest/errors/SkyflowTimeoutError.ts b/src/ _generated_/rest/errors/SkyflowTimeoutError.ts new file mode 100644 index 00000000..75024f63 --- /dev/null +++ b/src/ _generated_/rest/errors/SkyflowTimeoutError.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export class SkyflowTimeoutError extends Error { + constructor(message: string) { + super(message); + Object.setPrototypeOf(this, SkyflowTimeoutError.prototype); + } +} diff --git a/src/ _generated_/rest/errors/index.ts b/src/ _generated_/rest/errors/index.ts new file mode 100644 index 00000000..5567f00d --- /dev/null +++ b/src/ _generated_/rest/errors/index.ts @@ -0,0 +1,2 @@ +export { SkyflowError } from "./SkyflowError"; +export { SkyflowTimeoutError } from "./SkyflowTimeoutError"; diff --git a/src/ _generated_/rest/index.ts b/src/ _generated_/rest/index.ts index 9df9d8d7..0706e084 100644 --- a/src/ _generated_/rest/index.ts +++ b/src/ _generated_/rest/index.ts @@ -1,18 +1,4 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -export * from "./api"; -export * from "./configuration"; -export * from "./models"; +export * as Skyflow from "./api"; +export { SkyflowClient } from "./Client"; +export { SkyflowEnvironment } from "./environments"; +export { SkyflowError, SkyflowTimeoutError } from "./errors"; diff --git a/src/ _generated_/rest/models/audit-event-audit-resource-type.ts b/src/ _generated_/rest/models/audit-event-audit-resource-type.ts deleted file mode 100644 index 2e3a0192..00000000 --- a/src/ _generated_/rest/models/audit-event-audit-resource-type.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of the resource. - * @export - * @enum {string} - */ - -export const AuditEventAuditResourceType = { - NoneApi: 'NONE_API', - Account: 'ACCOUNT', - Audit: 'AUDIT', - BaseDataType: 'BASE_DATA_TYPE', - FieldTemplate: 'FIELD_TEMPLATE', - File: 'FILE', - Key: 'KEY', - Policy: 'POLICY', - ProtoParse: 'PROTO_PARSE', - Record: 'RECORD', - Role: 'ROLE', - Rule: 'RULE', - Secret: 'SECRET', - ServiceAccount: 'SERVICE_ACCOUNT', - Token: 'TOKEN', - User: 'USER', - Vault: 'VAULT', - VaultTemplate: 'VAULT_TEMPLATE', - Workspace: 'WORKSPACE', - Table: 'TABLE', - PolicyTemplate: 'POLICY_TEMPLATE', - Member: 'MEMBER', - Tag: 'TAG', - Connection: 'CONNECTION', - Migration: 'MIGRATION', - ScheduledJob: 'SCHEDULED_JOB', - Job: 'JOB', - ColumnName: 'COLUMN_NAME', - NetworkToken: 'NETWORK_TOKEN', - Subscription: 'SUBSCRIPTION' -} as const; - -export type AuditEventAuditResourceType = typeof AuditEventAuditResourceType[keyof typeof AuditEventAuditResourceType]; - - - diff --git a/src/ _generated_/rest/models/audit-event-context.ts b/src/ _generated_/rest/models/audit-event-context.ts deleted file mode 100644 index eedfeb1b..00000000 --- a/src/ _generated_/rest/models/audit-event-context.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ContextAccessType } from './context-access-type'; -// May contain unused imports in some cases -// @ts-ignore -import type { ContextAuthMode } from './context-auth-mode'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1MemberType } from './v1-member-type'; - -/** - * Context for an audit event. - * @export - * @interface AuditEventContext - */ -export interface AuditEventContext { - /** - * ID for the audit event. - * @type {string} - * @memberof AuditEventContext - */ - 'changeID'?: string; - /** - * ID for the request that caused the event. - * @type {string} - * @memberof AuditEventContext - */ - 'requestID'?: string; - /** - * ID for the request set by the service that received the request. - * @type {string} - * @memberof AuditEventContext - */ - 'traceID'?: string; - /** - * ID for the session in which the request was sent. - * @type {string} - * @memberof AuditEventContext - */ - 'sessionID'?: string; - /** - * Member who sent the request. Depending on `actorType`, this may be a user ID or a service account ID. - * @type {string} - * @memberof AuditEventContext - */ - 'actor'?: string; - /** - * - * @type {V1MemberType} - * @memberof AuditEventContext - */ - 'actorType'?: V1MemberType; - /** - * - * @type {ContextAccessType} - * @memberof AuditEventContext - */ - 'accessType'?: ContextAccessType; - /** - * IP Address of the client that made the request. - * @type {string} - * @memberof AuditEventContext - */ - 'ipAddress'?: string; - /** - * HTTP Origin request header (including scheme, hostname, and port) of the request. - * @type {string} - * @memberof AuditEventContext - */ - 'origin'?: string; - /** - * - * @type {ContextAuthMode} - * @memberof AuditEventContext - */ - 'authMode'?: ContextAuthMode; - /** - * ID of the JWT token. - * @type {string} - * @memberof AuditEventContext - */ - 'jwtID'?: string; - /** - * Embedded User Context. - * @type {string} - * @memberof AuditEventContext - */ - 'bearerTokenContextID'?: string; -} - - - diff --git a/src/ _generated_/rest/models/audit-event-data.ts b/src/ _generated_/rest/models/audit-event-data.ts deleted file mode 100644 index 79d0a0fe..00000000 --- a/src/ _generated_/rest/models/audit-event-data.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Any Sensitive data that needs to be wrapped. - * @export - * @interface AuditEventData - */ -export interface AuditEventData { - /** - * The entire body of the data requested or the query fired. - * @type {string} - * @memberof AuditEventData - */ - 'content'?: string; -} - diff --git a/src/ _generated_/rest/models/audit-event-httpinfo.ts b/src/ _generated_/rest/models/audit-event-httpinfo.ts deleted file mode 100644 index 72900374..00000000 --- a/src/ _generated_/rest/models/audit-event-httpinfo.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface AuditEventHTTPInfo - */ -export interface AuditEventHTTPInfo { - /** - * The http URI that is used. - * @type {string} - * @memberof AuditEventHTTPInfo - */ - 'URI'?: string; - /** - * http method used. - * @type {string} - * @memberof AuditEventHTTPInfo - */ - 'method'?: string; -} - diff --git a/src/ _generated_/rest/models/batch-record-method.ts b/src/ _generated_/rest/models/batch-record-method.ts deleted file mode 100644 index d4b9149c..00000000 --- a/src/ _generated_/rest/models/batch-record-method.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Method of the operation. - * @export - * @enum {string} - */ - -export const BatchRecordMethod = { - None: 'NONE', - Post: 'POST', - Put: 'PUT', - Get: 'GET', - Delete: 'DELETE' -} as const; - -export type BatchRecordMethod = typeof BatchRecordMethod[keyof typeof BatchRecordMethod]; - - - diff --git a/src/ _generated_/rest/models/context-access-type.ts b/src/ _generated_/rest/models/context-access-type.ts deleted file mode 100644 index d617fceb..00000000 --- a/src/ _generated_/rest/models/context-access-type.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of access for the request. - * @export - * @enum {string} - */ - -export const ContextAccessType = { - AccessNone: 'ACCESS_NONE', - Api: 'API', - Sql: 'SQL' -} as const; - -export type ContextAccessType = typeof ContextAccessType[keyof typeof ContextAccessType]; - - - diff --git a/src/ _generated_/rest/models/context-auth-mode.ts b/src/ _generated_/rest/models/context-auth-mode.ts deleted file mode 100644 index fb29b110..00000000 --- a/src/ _generated_/rest/models/context-auth-mode.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Authentication mode the `actor` used. - * @export - * @enum {string} - */ - -export const ContextAuthMode = { - AuthNone: 'AUTH_NONE', - OktaJwt: 'OKTA_JWT', - ServiceAccountJwt: 'SERVICE_ACCOUNT_JWT', - PatJwt: 'PAT_JWT' -} as const; - -export type ContextAuthMode = typeof ContextAuthMode[keyof typeof ContextAuthMode]; - - - diff --git a/src/ _generated_/rest/models/detokenize-record-response-value-type.ts b/src/ _generated_/rest/models/detokenize-record-response-value-type.ts deleted file mode 100644 index 67d1f924..00000000 --- a/src/ _generated_/rest/models/detokenize-record-response-value-type.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const DetokenizeRecordResponseValueType = { - None: 'NONE', - String: 'STRING', - Integer: 'INTEGER', - Float: 'FLOAT', - Bool: 'BOOL', - Datetime: 'DATETIME', - Json: 'JSON', - Array: 'ARRAY', - Date: 'DATE' -} as const; - -export type DetokenizeRecordResponseValueType = typeof DetokenizeRecordResponseValueType[keyof typeof DetokenizeRecordResponseValueType]; - - - diff --git a/src/ _generated_/rest/models/googlerpc-status copy.ts b/src/ _generated_/rest/models/googlerpc-status copy.ts deleted file mode 100644 index 5ac0fb94..00000000 --- a/src/ _generated_/rest/models/googlerpc-status copy.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ProtobufAny } from './protobuf-any'; - -/** - * - * @export - * @interface GooglerpcStatus - */ -export interface GooglerpcStatus { - /** - * - * @type {number} - * @memberof GooglerpcStatus - */ - 'code'?: number; - /** - * - * @type {string} - * @memberof GooglerpcStatus - */ - 'message'?: string; - /** - * - * @type {Array} - * @memberof GooglerpcStatus - */ - 'details'?: Array; -} - diff --git a/src/ _generated_/rest/models/googlerpc-status.ts b/src/ _generated_/rest/models/googlerpc-status.ts deleted file mode 100644 index 2cc089fe..00000000 --- a/src/ _generated_/rest/models/googlerpc-status.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { ProtobufAny } from './protobuf-any'; - -/** - * - * @export - * @interface GooglerpcStatus - */ -export interface GooglerpcStatus { - /** - * - * @type {number} - * @memberof GooglerpcStatus - */ - 'code'?: number; - /** - * - * @type {string} - * @memberof GooglerpcStatus - */ - 'message'?: string; - /** - * - * @type {Array} - * @memberof GooglerpcStatus - */ - 'details'?: Array; -} - diff --git a/src/ _generated_/rest/models/index.ts b/src/ _generated_/rest/models/index.ts deleted file mode 100644 index ba8a29ef..00000000 --- a/src/ _generated_/rest/models/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -export * from './audit-event-audit-resource-type'; -export * from './audit-event-context'; -export * from './audit-event-data'; -export * from './audit-event-httpinfo'; -export * from './batch-record-method'; -export * from './context-access-type'; -export * from './context-auth-mode'; -export * from './detokenize-record-response-value-type'; -export * from './googlerpc-status'; -export * from './protobuf-any'; -export * from './query-service-execute-query-body'; -export * from './record-service-batch-operation-body'; -export * from './record-service-bulk-delete-record-body'; -export * from './record-service-insert-record-body'; -export * from './record-service-update-record-body'; -export * from './redaction-enum-redaction'; -export * from './request-action-type'; -export * from './v1-audit-after-options'; -export * from './v1-audit-event-response'; -export * from './v1-audit-response'; -export * from './v1-audit-response-event'; -export * from './v1-audit-response-event-request'; -export * from './v1-binlist-request'; -export * from './v1-binlist-response'; -export * from './v1-byot'; -export * from './v1-batch-operation-response'; -export * from './v1-batch-record'; -export * from './v1-bulk-delete-record-response'; -export * from './v1-bulk-get-record-response'; -export * from './v1-card'; -export * from './v1-delete-file-response'; -export * from './v1-delete-record-response'; -export * from './v1-detokenize-payload'; -export * from './v1-detokenize-record-request'; -export * from './v1-detokenize-record-response'; -export * from './v1-detokenize-response'; -export * from './v1-field-records'; -export * from './v1-file-avscan-status'; -export * from './v1-file-info'; -export * from './v1-get-by-token-response'; -export * from './v1-get-file-scan-status-response'; -export * from './v1-get-query-response'; -export * from './v1-insert-record-response'; -export * from './v1-member-type'; -export * from './v1-record-meta-properties'; -export * from './v1-sort-options-order-by'; -export * from './v1-tokenize-payload'; -export * from './v1-tokenize-record-request'; -export * from './v1-tokenize-record-response'; -export * from './v1-tokenize-response'; -export * from './v1-update-record-response'; -export * from './v1-update-request-record'; -export * from './v1-vault-field-mapping'; -export * from './v1-vault-schema-config'; -export * from './googlerpc-status'; -export * from './protobuf-any'; -export * from './v1-get-auth-token-request'; -export * from './v1-get-auth-token-response'; \ No newline at end of file diff --git a/src/ _generated_/rest/models/protobuf-any copy.ts b/src/ _generated_/rest/models/protobuf-any copy.ts deleted file mode 100644 index 44140df3..00000000 --- a/src/ _generated_/rest/models/protobuf-any copy.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface ProtobufAny - */ -export interface ProtobufAny { - [key: string]: object | any; - - /** - * - * @type {string} - * @memberof ProtobufAny - */ - '@type'?: string; -} - diff --git a/src/ _generated_/rest/models/protobuf-any.ts b/src/ _generated_/rest/models/protobuf-any.ts deleted file mode 100644 index 1a8ce5b0..00000000 --- a/src/ _generated_/rest/models/protobuf-any.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface ProtobufAny - */ -export interface ProtobufAny { - [key: string]: object | any; - - /** - * - * @type {string} - * @memberof ProtobufAny - */ - '@type'?: string; -} - diff --git a/src/ _generated_/rest/models/query-service-execute-query-body.ts b/src/ _generated_/rest/models/query-service-execute-query-body.ts deleted file mode 100644 index 776905a0..00000000 --- a/src/ _generated_/rest/models/query-service-execute-query-body.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface QueryServiceExecuteQueryBody - */ -export interface QueryServiceExecuteQueryBody { - /** - * The SQL query to execute.

Supported commands:
  • SELECT
Supported operators:
  • >
  • <
  • =
  • AND
  • OR
  • NOT
  • LIKE
  • ILIKE
  • NULL
  • NOT NULL
Supported keywords:
  • FROM
  • JOIN
  • INNER JOIN
  • LEFT OUTER JOIN
  • LEFT JOIN
  • RIGHT OUTER JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN
  • FULL JOIN
  • OFFSET
  • LIMIT
  • WHERE
Supported functions:
  • AVG()
  • SUM()
  • COUNT()
  • MIN()
  • MAX()
  • REDACTION()
- * @type {string} - * @memberof QueryServiceExecuteQueryBody - */ - 'query'?: string; -} - diff --git a/src/ _generated_/rest/models/record-service-batch-operation-body.ts b/src/ _generated_/rest/models/record-service-batch-operation-body.ts deleted file mode 100644 index d59eed26..00000000 --- a/src/ _generated_/rest/models/record-service-batch-operation-body.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1BatchRecord } from './v1-batch-record'; - -/** - * - * @export - * @interface RecordServiceBatchOperationBody - */ -export interface RecordServiceBatchOperationBody { - /** - * Record operations to perform. - * @type {Array} - * @memberof RecordServiceBatchOperationBody - */ - 'records'?: Array; - /** - * Continue performing operations on partial errors. - * @type {boolean} - * @memberof RecordServiceBatchOperationBody - */ - 'continueOnError'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceBatchOperationBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts b/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts deleted file mode 100644 index 91652c7e..00000000 --- a/src/ _generated_/rest/models/record-service-bulk-delete-record-body.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface RecordServiceBulkDeleteRecordBody - */ -export interface RecordServiceBulkDeleteRecordBody { - /** - * `skyflow_id` values of the records to delete. If `*` is specified, this operation deletes all records in the table. - * @type {Array} - * @memberof RecordServiceBulkDeleteRecordBody - */ - 'skyflow_ids'?: Array; -} - diff --git a/src/ _generated_/rest/models/record-service-insert-record-body.ts b/src/ _generated_/rest/models/record-service-insert-record-body.ts deleted file mode 100644 index 4e3451ae..00000000 --- a/src/ _generated_/rest/models/record-service-insert-record-body.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface RecordServiceInsertRecordBody - */ -export interface RecordServiceInsertRecordBody { - /** - * Record values and tokens. - * @type {Array} - * @memberof RecordServiceInsertRecordBody - */ - 'records'?: Array; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. - * @type {boolean} - * @memberof RecordServiceInsertRecordBody - */ - 'tokenization'?: boolean; - /** - * Name of a unique column in the table. Uses upsert operations to check if a record exists based on the unique column\'s value. If a matching record exists, the record updates with the values you provide. If a matching record doesn\'t exist, the upsert operation inserts a new record.

When you upsert a field, include the entire contents you want the field to store. For JSON fields, include all nested fields and values. If a nested field isn\'t included, it\'s removed. - * @type {string} - * @memberof RecordServiceInsertRecordBody - */ - 'upsert'?: string; - /** - * If `true`, this operation mandates that all the records have the same fields. This parameter does not work with upsert. - * @type {boolean} - * @memberof RecordServiceInsertRecordBody - */ - 'homogeneous'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceInsertRecordBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/record-service-update-record-body.ts b/src/ _generated_/rest/models/record-service-update-record-body.ts deleted file mode 100644 index c541c27d..00000000 --- a/src/ _generated_/rest/models/record-service-update-record-body.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1BYOT } from './v1-byot'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface RecordServiceUpdateRecordBody - */ -export interface RecordServiceUpdateRecordBody { - /** - * - * @type {V1FieldRecords} - * @memberof RecordServiceUpdateRecordBody - */ - 'record'?: V1FieldRecords; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. - * @type {boolean} - * @memberof RecordServiceUpdateRecordBody - */ - 'tokenization'?: boolean; - /** - * - * @type {V1BYOT} - * @memberof RecordServiceUpdateRecordBody - */ - 'byot'?: V1BYOT; -} - - - diff --git a/src/ _generated_/rest/models/redaction-enum-redaction.ts b/src/ _generated_/rest/models/redaction-enum-redaction.ts deleted file mode 100644 index 4ce52c08..00000000 --- a/src/ _generated_/rest/models/redaction-enum-redaction.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Redaction type. Subject to policies assigned to the API caller. When used for detokenization, only supported for vaults that support [column groups](/tokenization-column-groups/). - * @export - * @enum {string} - */ - -export const RedactionEnumREDACTION = { - Default: 'DEFAULT', - Redacted: 'REDACTED', - Masked: 'MASKED', - PlainText: 'PLAIN_TEXT' -} as const; - -export type RedactionEnumREDACTION = typeof RedactionEnumREDACTION[keyof typeof RedactionEnumREDACTION]; - - - diff --git a/src/ _generated_/rest/models/request-action-type.ts b/src/ _generated_/rest/models/request-action-type.ts deleted file mode 100644 index ac0c0c3e..00000000 --- a/src/ _generated_/rest/models/request-action-type.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const RequestActionType = { - None: 'NONE', - Assign: 'ASSIGN', - Create: 'CREATE', - Delete: 'DELETE', - Execute: 'EXECUTE', - List: 'LIST', - Read: 'READ', - Unassign: 'UNASSIGN', - Update: 'UPDATE', - Validate: 'VALIDATE', - Login: 'LOGIN', - Rotate: 'ROTATE', - Schedulerotation: 'SCHEDULEROTATION', - Schedulerotationalert: 'SCHEDULEROTATIONALERT', - Import: 'IMPORT', - Getimportparameters: 'GETIMPORTPARAMETERS', - Ping: 'PING', - Getcloudprovider: 'GETCLOUDPROVIDER' -} as const; - -export type RequestActionType = typeof RequestActionType[keyof typeof RequestActionType]; - - - diff --git a/src/ _generated_/rest/models/v1-audit-after-options.ts b/src/ _generated_/rest/models/v1-audit-after-options.ts deleted file mode 100644 index 6e1d07b3..00000000 --- a/src/ _generated_/rest/models/v1-audit-after-options.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1AuditAfterOptions - */ -export interface V1AuditAfterOptions { - /** - * Timestamp provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @type {string} - * @memberof V1AuditAfterOptions - */ - 'timestamp'?: string; - /** - * Change ID provided in the previous audit response\'s `nextOps` attribute. An alternate way to manage response pagination. Can\'t be used with `sortOps` or `offset`. For the first request in a series of audit requests, leave blank. - * @type {string} - * @memberof V1AuditAfterOptions - */ - 'changeID'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-audit-event-response.ts b/src/ _generated_/rest/models/v1-audit-event-response.ts deleted file mode 100644 index 0189c834..00000000 --- a/src/ _generated_/rest/models/v1-audit-event-response.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventData } from './audit-event-data'; - -/** - * Contains fields for defining Response Properties. - * @export - * @interface V1AuditEventResponse - */ -export interface V1AuditEventResponse { - /** - * The status of the overall operation. - * @type {number} - * @memberof V1AuditEventResponse - */ - 'code'?: number; - /** - * The status message for the overall operation. - * @type {string} - * @memberof V1AuditEventResponse - */ - 'message'?: string; - /** - * - * @type {AuditEventData} - * @memberof V1AuditEventResponse - */ - 'data'?: AuditEventData; - /** - * time when this response is generated, use extention method to set it. - * @type {string} - * @memberof V1AuditEventResponse - */ - 'timestamp'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-audit-response-event-request.ts b/src/ _generated_/rest/models/v1-audit-response-event-request.ts deleted file mode 100644 index 79c0c255..00000000 --- a/src/ _generated_/rest/models/v1-audit-response-event-request.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventAuditResourceType } from './audit-event-audit-resource-type'; -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventData } from './audit-event-data'; -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventHTTPInfo } from './audit-event-httpinfo'; -// May contain unused imports in some cases -// @ts-ignore -import type { RequestActionType } from './request-action-type'; - -/** - * Contains fields for defining Request Properties. - * @export - * @interface V1AuditResponseEventRequest - */ -export interface V1AuditResponseEventRequest { - /** - * - * @type {AuditEventData} - * @memberof V1AuditResponseEventRequest - */ - 'data'?: AuditEventData; - /** - * API name. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'apiName'?: string; - /** - * The workspaceID (if any) of the request. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'workspaceID'?: string; - /** - * The vaultID (if any) of the request. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'vaultID'?: string; - /** - * Tags associated with the event. To provide better search capabilities. Like login. - * @type {Array} - * @memberof V1AuditResponseEventRequest - */ - 'tags'?: Array; - /** - * time when this request is generated, use extention method to set it. - * @type {string} - * @memberof V1AuditResponseEventRequest - */ - 'timestamp'?: string; - /** - * - * @type {RequestActionType} - * @memberof V1AuditResponseEventRequest - */ - 'actionType'?: RequestActionType; - /** - * - * @type {AuditEventAuditResourceType} - * @memberof V1AuditResponseEventRequest - */ - 'resourceType'?: AuditEventAuditResourceType; - /** - * - * @type {AuditEventHTTPInfo} - * @memberof V1AuditResponseEventRequest - */ - 'httpInfo'?: AuditEventHTTPInfo; -} - - - diff --git a/src/ _generated_/rest/models/v1-audit-response-event.ts b/src/ _generated_/rest/models/v1-audit-response-event.ts deleted file mode 100644 index 416a07d5..00000000 --- a/src/ _generated_/rest/models/v1-audit-response-event.ts +++ /dev/null @@ -1,69 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { AuditEventContext } from './audit-event-context'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditEventResponse } from './v1-audit-event-response'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditResponseEventRequest } from './v1-audit-response-event-request'; - -/** - * Audit event details. - * @export - * @interface V1AuditResponseEvent - */ -export interface V1AuditResponseEvent { - /** - * - * @type {AuditEventContext} - * @memberof V1AuditResponseEvent - */ - 'context'?: AuditEventContext; - /** - * - * @type {V1AuditResponseEventRequest} - * @memberof V1AuditResponseEvent - */ - 'request'?: V1AuditResponseEventRequest; - /** - * - * @type {V1AuditEventResponse} - * @memberof V1AuditResponseEvent - */ - 'response'?: V1AuditEventResponse; - /** - * Parent account ID of the account that made the request, if any. - * @type {string} - * @memberof V1AuditResponseEvent - */ - 'parentAccountID'?: string; - /** - * ID of the account that made the request. - * @type {string} - * @memberof V1AuditResponseEvent - */ - 'accountID'?: string; - /** - * IDs for resources involved in the event. Presented in `{resourceType}/{resourceID}` format. For example, `VAULT/cd1d815aa09b4cbfbb803bd20349f202`. - * @type {Array} - * @memberof V1AuditResponseEvent - */ - 'resourceIDs'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-audit-response.ts b/src/ _generated_/rest/models/v1-audit-response.ts deleted file mode 100644 index 511054e2..00000000 --- a/src/ _generated_/rest/models/v1-audit-response.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditAfterOptions } from './v1-audit-after-options'; -// May contain unused imports in some cases -// @ts-ignore -import type { V1AuditResponseEvent } from './v1-audit-response-event'; - -/** - * - * @export - * @interface V1AuditResponse - */ -export interface V1AuditResponse { - /** - * Events matching the query. - * @type {Array} - * @memberof V1AuditResponse - */ - 'event'?: Array; - /** - * - * @type {V1AuditAfterOptions} - * @memberof V1AuditResponse - */ - 'nextOps'?: V1AuditAfterOptions; -} - diff --git a/src/ _generated_/rest/models/v1-batch-operation-response.ts b/src/ _generated_/rest/models/v1-batch-operation-response.ts deleted file mode 100644 index 838512bd..00000000 --- a/src/ _generated_/rest/models/v1-batch-operation-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1BatchOperationResponse - */ -export interface V1BatchOperationResponse { - /** - * ID of the vault. - * @type {string} - * @memberof V1BatchOperationResponse - */ - 'vaultID'?: string; - /** - * Responses in the same order as in the request. Responses have the same payload structure as their corresponding APIs:
  • `POST` returns an Insert Records response.
  • `PUT` returns an Update Record response.
  • `GET` returns a Get Record response.
  • `DELETE` returns a Delete Record response.
- * @type {Array} - * @memberof V1BatchOperationResponse - */ - 'responses'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-batch-record.ts b/src/ _generated_/rest/models/v1-batch-record.ts deleted file mode 100644 index fe6c8a1b..00000000 --- a/src/ _generated_/rest/models/v1-batch-record.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { BatchRecordMethod } from './batch-record-method'; -// May contain unused imports in some cases -// @ts-ignore -import type { RedactionEnumREDACTION } from './redaction-enum-redaction'; - -/** - * - * @export - * @interface V1BatchRecord - */ -export interface V1BatchRecord { - /** - * Field and value key pairs. For example, `{\'field_1\':\'value_1\', \'field_2\':\'value_2\'}`. Only valid when `method` is `POST` or `PUT`. - * @type {object} - * @memberof V1BatchRecord - */ - 'fields'?: object; - /** - * Name of the table to perform the operation on. - * @type {string} - * @memberof V1BatchRecord - */ - 'tableName'?: string; - /** - * - * @type {BatchRecordMethod} - * @memberof V1BatchRecord - */ - 'method'?: BatchRecordMethod; - /** - * ID to group operations by. Operations in the same group are executed sequentially. - * @type {string} - * @memberof V1BatchRecord - */ - 'batchID'?: string; - /** - * - * @type {RedactionEnumREDACTION} - * @memberof V1BatchRecord - */ - 'redaction'?: RedactionEnumREDACTION; - /** - * If `true`, this operation returns tokens for fields with tokenization enabled. Only applicable if `skyflow_id` values are specified. - * @type {boolean} - * @memberof V1BatchRecord - */ - 'tokenization'?: boolean; - /** - * `skyflow_id` for the record. Only valid when `method` is `GET`, `DELETE`, or `PUT`. - * @type {string} - * @memberof V1BatchRecord - */ - 'ID'?: string; - /** - * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @type {boolean} - * @memberof V1BatchRecord - */ - 'downloadURL'?: boolean; - /** - * Column that stores primary keys for upsert operations. The column must be marked as unique in the vault schema. Only valid when `method` is `POST`. - * @type {string} - * @memberof V1BatchRecord - */ - 'upsert'?: string; - /** - * Fields and tokens for the record. For example, `{\'field_1\':\'token_1\', \'field_2\':\'token_2\'}`. - * @type {object} - * @memberof V1BatchRecord - */ - 'tokens'?: object; -} - - - diff --git a/src/ _generated_/rest/models/v1-binlist-request.ts b/src/ _generated_/rest/models/v1-binlist-request.ts deleted file mode 100644 index 5f4f32d6..00000000 --- a/src/ _generated_/rest/models/v1-binlist-request.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1VaultSchemaConfig } from './v1-vault-schema-config'; - -/** - * Request to return specific card metadata. - * @export - * @interface V1BINListRequest - */ -export interface V1BINListRequest { - /** - * Fields to return. If not specified, all fields are returned. - * @type {Array} - * @memberof V1BINListRequest - */ - 'fields'?: Array; - /** - * BIN of the card. - * @type {string} - * @memberof V1BINListRequest - */ - 'BIN'?: string; - /** - * - * @type {V1VaultSchemaConfig} - * @memberof V1BINListRequest - */ - 'vault_schema_config'?: V1VaultSchemaConfig; - /** - * skyflow_id of the record. - * @type {string} - * @memberof V1BINListRequest - */ - 'skyflow_id'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-binlist-response.ts b/src/ _generated_/rest/models/v1-binlist-response.ts deleted file mode 100644 index a60f59cc..00000000 --- a/src/ _generated_/rest/models/v1-binlist-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1Card } from './v1-card'; - -/** - * Response to the Get BIN request. - * @export - * @interface V1BINListResponse - */ -export interface V1BINListResponse { - /** - * Card metadata associated with the specified BIN. - * @type {Array} - * @memberof V1BINListResponse - */ - 'cards_data'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts b/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts deleted file mode 100644 index 909aa698..00000000 --- a/src/ _generated_/rest/models/v1-bulk-delete-record-response.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1BulkDeleteRecordResponse - */ -export interface V1BulkDeleteRecordResponse { - /** - * IDs for the deleted records, or `*` if all records were deleted. - * @type {Array} - * @memberof V1BulkDeleteRecordResponse - */ - 'RecordIDResponse'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-bulk-get-record-response.ts b/src/ _generated_/rest/models/v1-bulk-get-record-response.ts deleted file mode 100644 index 26e86956..00000000 --- a/src/ _generated_/rest/models/v1-bulk-get-record-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface V1BulkGetRecordResponse - */ -export interface V1BulkGetRecordResponse { - /** - * The specified records. - * @type {Array} - * @memberof V1BulkGetRecordResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-byot.ts b/src/ _generated_/rest/models/v1-byot.ts deleted file mode 100644 index cd493dae..00000000 --- a/src/ _generated_/rest/models/v1-byot.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Token insertion behavior. - DISABLE: Tokens aren\'t allowed for any fields. If tokens are specified, the request fails. - ENABLE: Tokens are allowed—but not required—for all fields. If tokens are specified, they\'re inserted. - ENABLE_STRICT: Tokens are required for all fields. If tokens are specified, they\'re inserted. If not, the request fails. - * @export - * @enum {string} - */ - -export const V1BYOT = { - Disable: 'DISABLE', - Enable: 'ENABLE', - EnableStrict: 'ENABLE_STRICT' -} as const; - -export type V1BYOT = typeof V1BYOT[keyof typeof V1BYOT]; - - - diff --git a/src/ _generated_/rest/models/v1-card.ts b/src/ _generated_/rest/models/v1-card.ts deleted file mode 100644 index dd9a0a6a..00000000 --- a/src/ _generated_/rest/models/v1-card.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Card metadata of the requested BIN. - * @export - * @interface V1Card - */ -export interface V1Card { - /** - * BIN of the card. - * @type {string} - * @memberof V1Card - */ - 'BIN'?: string; - /** - * Name of the card issuer bank. - * @type {string} - * @memberof V1Card - */ - 'issuer_name'?: string; - /** - * Country code of the card. - * @type {string} - * @memberof V1Card - */ - 'country_code'?: string; - /** - * Currency of the card. - * @type {string} - * @memberof V1Card - */ - 'currency'?: string; - /** - * Type of the card. - * @type {string} - * @memberof V1Card - */ - 'card_type'?: string; - /** - * Category of the card. - * @type {string} - * @memberof V1Card - */ - 'card_category'?: string; - /** - * Scheme of the card. - * @type {string} - * @memberof V1Card - */ - 'card_scheme'?: string; - /** - * Last four digits of the card number. - * @type {string} - * @memberof V1Card - */ - 'card_last_four_digits'?: string; - /** - * Expiry date of the card. - * @type {string} - * @memberof V1Card - */ - 'card_expiry'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-delete-file-response.ts b/src/ _generated_/rest/models/v1-delete-file-response.ts deleted file mode 100644 index 8b9d4d92..00000000 --- a/src/ _generated_/rest/models/v1-delete-file-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1DeleteFileResponse - */ -export interface V1DeleteFileResponse { - /** - * ID of the record. - * @type {string} - * @memberof V1DeleteFileResponse - */ - 'skyflow_id'?: string; - /** - * If `true`, the file was deleted. - * @type {boolean} - * @memberof V1DeleteFileResponse - */ - 'deleted'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-delete-record-response.ts b/src/ _generated_/rest/models/v1-delete-record-response.ts deleted file mode 100644 index 0e5c39fc..00000000 --- a/src/ _generated_/rest/models/v1-delete-record-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1DeleteRecordResponse - */ -export interface V1DeleteRecordResponse { - /** - * ID of the deleted record. - * @type {string} - * @memberof V1DeleteRecordResponse - */ - 'skyflow_id'?: string; - /** - * If `true`, the record was deleted. - * @type {boolean} - * @memberof V1DeleteRecordResponse - */ - 'deleted'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-detokenize-payload.ts b/src/ _generated_/rest/models/v1-detokenize-payload.ts deleted file mode 100644 index ac93e14e..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-payload.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1DetokenizeRecordRequest } from './v1-detokenize-record-request'; - -/** - * - * @export - * @interface V1DetokenizePayload - */ -export interface V1DetokenizePayload { - /** - * Detokenization details. - * @type {Array} - * @memberof V1DetokenizePayload - */ - 'detokenizationParameters'?: Array; - /** - * If `true`, returns download URLs for fields with a file data type. URLs are valid for 15 minutes. If virus scanning is enabled, only returns if the file is clean. - * @type {boolean} - * @memberof V1DetokenizePayload - */ - 'downloadURL'?: boolean; - /** - * If `true`, the detokenization request continues even if an error occurs. - * @type {boolean} - * @memberof V1DetokenizePayload - */ - 'continueOnError'?: boolean; -} - diff --git a/src/ _generated_/rest/models/v1-detokenize-record-request.ts b/src/ _generated_/rest/models/v1-detokenize-record-request.ts deleted file mode 100644 index ba5bc7bd..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-record-request.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { RedactionEnumREDACTION } from './redaction-enum-redaction'; - -/** - * - * @export - * @interface V1DetokenizeRecordRequest - */ -export interface V1DetokenizeRecordRequest { - /** - * Token that identifies the record to detokenize. - * @type {string} - * @memberof V1DetokenizeRecordRequest - */ - 'token'?: string; - /** - * - * @type {RedactionEnumREDACTION} - * @memberof V1DetokenizeRecordRequest - */ - 'redaction'?: RedactionEnumREDACTION; -} - - - diff --git a/src/ _generated_/rest/models/v1-detokenize-record-response.ts b/src/ _generated_/rest/models/v1-detokenize-record-response.ts deleted file mode 100644 index 2da52663..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-record-response.ts +++ /dev/null @@ -1,53 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { DetokenizeRecordResponseValueType } from './detokenize-record-response-value-type'; - -/** - * - * @export - * @interface V1DetokenizeRecordResponse - */ -export interface V1DetokenizeRecordResponse { - /** - * Token of the record. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'token'?: string; - /** - * - * @type {DetokenizeRecordResponseValueType} - * @memberof V1DetokenizeRecordResponse - */ - 'valueType'?: DetokenizeRecordResponseValueType; - /** - * Data corresponding to the token. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'value'?: string; - /** - * Error if token isn\'t found. - * @type {string} - * @memberof V1DetokenizeRecordResponse - */ - 'error'?: string; -} - - - diff --git a/src/ _generated_/rest/models/v1-detokenize-response.ts b/src/ _generated_/rest/models/v1-detokenize-response.ts deleted file mode 100644 index b8d63279..00000000 --- a/src/ _generated_/rest/models/v1-detokenize-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1DetokenizeRecordResponse } from './v1-detokenize-record-response'; - -/** - * - * @export - * @interface V1DetokenizeResponse - */ -export interface V1DetokenizeResponse { - /** - * Records corresponding to the specified tokens. - * @type {Array} - * @memberof V1DetokenizeResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-field-records.ts b/src/ _generated_/rest/models/v1-field-records.ts deleted file mode 100644 index 817e7fed..00000000 --- a/src/ _generated_/rest/models/v1-field-records.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Record values and tokens. - * @export - * @interface V1FieldRecords - */ -export interface V1FieldRecords { - /** - * Fields and values for the record. For example, `{\'field_1\':\'value_1\', \'field_2\':\'value_2\'}`. - * @type {object} - * @memberof V1FieldRecords - */ - 'fields'?: object; - /** - * Fields and tokens for the record. For example, `{\'field_1\':\'token_1\', \'field_2\':\'token_2\'}`. - * @type {object} - * @memberof V1FieldRecords - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-file-avscan-status.ts b/src/ _generated_/rest/models/v1-file-avscan-status.ts deleted file mode 100644 index 9f1bbe30..00000000 --- a/src/ _generated_/rest/models/v1-file-avscan-status.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Anti-virus scan status of the file. - * @export - * @enum {string} - */ - -export const V1FileAVScanStatus = { - None: 'SCAN_NONE', - Clean: 'SCAN_CLEAN', - Infected: 'SCAN_INFECTED', - Deleted: 'SCAN_DELETED', - Error: 'SCAN_ERROR', - Pending: 'SCAN_PENDING', - Unscannable: 'SCAN_UNSCANNABLE', - FileNotFound: 'SCAN_FILE_NOT_FOUND', - Invalid: 'SCAN_INVALID' -} as const; - -export type V1FileAVScanStatus = typeof V1FileAVScanStatus[keyof typeof V1FileAVScanStatus]; - - - diff --git a/src/ _generated_/rest/models/v1-file-info.ts b/src/ _generated_/rest/models/v1-file-info.ts deleted file mode 100644 index 58993a17..00000000 --- a/src/ _generated_/rest/models/v1-file-info.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1FileInfo - */ -export interface V1FileInfo { - /** - * The JSON Data for the notebook. - * @type {object} - * @memberof V1FileInfo - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-get-auth-token-request.ts b/src/ _generated_/rest/models/v1-get-auth-token-request.ts deleted file mode 100644 index a49d53c7..00000000 --- a/src/ _generated_/rest/models/v1-get-auth-token-request.ts +++ /dev/null @@ -1,60 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetAuthTokenRequest - */ -export interface V1GetAuthTokenRequest { - /** - * Grant type of the request. Set this to `urn:ietf:params:oauth:grant-type:jwt-bearer`. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'grant_type': string; - /** - * User-signed JWT token that contains the following fields:
  • iss: Issuer of the JWT.
  • key: Unique identifier for the key.
  • aud: Recipient the JWT is intended for.
  • exp: Time the JWT expires.
  • sub: Subject of the JWT.
  • ctx: (Optional) Value for Context-aware authorization.
- * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'assertion': string; - /** - * Subject token. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'subject_token'?: string; - /** - * Subject token type. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'subject_token_type'?: string; - /** - * Token use type. Either `delegation` or `impersonation`. - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'requested_token_use'?: string; - /** - * Subset of available roles to associate with the requested token. Uses the format \"role:\\ role:\\\". - * @type {string} - * @memberof V1GetAuthTokenRequest - */ - 'scope'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-get-auth-token-response.ts b/src/ _generated_/rest/models/v1-get-auth-token-response.ts deleted file mode 100644 index 5599bc47..00000000 --- a/src/ _generated_/rest/models/v1-get-auth-token-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Management API - * # Management API This API controls aspects of your account and schema, including workspaces, vaults, keys, users, permissions, and more. The Management API is available from two base URIs:
  • Sandbox: https://manage.skyflowapis-preview.com
  • Production: https://manage.skyflowapis.com
When you make an API call, you need to add two headers:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
X-SKYFLOW-ACCOUNT-IDYour Skyflow account ID.X-SKYFLOW-ACCOUNT-ID: h451b763713e4424a7jke1bbkbbc84ef
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetAuthTokenResponse - */ -export interface V1GetAuthTokenResponse { - /** - * AccessToken. - * @type {string} - * @memberof V1GetAuthTokenResponse - */ - 'accessToken'?: string; - /** - * TokenType : Bearer. - * @type {string} - * @memberof V1GetAuthTokenResponse - */ - 'tokenType'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-get-by-token-response.ts b/src/ _generated_/rest/models/v1-get-by-token-response.ts deleted file mode 100644 index 7289954a..00000000 --- a/src/ _generated_/rest/models/v1-get-by-token-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1GetByTokenResponse - */ -export interface V1GetByTokenResponse { - /** - * Token of the returned record. - * @type {string} - * @memberof V1GetByTokenResponse - */ - 'token_id'?: string; - /** - * Record corresponding to the token. - * @type {object} - * @memberof V1GetByTokenResponse - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts b/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts deleted file mode 100644 index 1c90f9e6..00000000 --- a/src/ _generated_/rest/models/v1-get-file-scan-status-response.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FileAVScanStatus } from './v1-file-avscan-status'; - -/** - * - * @export - * @interface V1GetFileScanStatusResponse - */ -export interface V1GetFileScanStatusResponse { - /** - * - * @type {V1FileAVScanStatus} - * @memberof V1GetFileScanStatusResponse - */ - 'av_scan_status'?: V1FileAVScanStatus; -} - - - diff --git a/src/ _generated_/rest/models/v1-get-query-response.ts b/src/ _generated_/rest/models/v1-get-query-response.ts deleted file mode 100644 index c61f771c..00000000 --- a/src/ _generated_/rest/models/v1-get-query-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1FieldRecords } from './v1-field-records'; - -/** - * - * @export - * @interface V1GetQueryResponse - */ -export interface V1GetQueryResponse { - /** - * Records returned by the query. - * @type {Array} - * @memberof V1GetQueryResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-insert-record-response.ts b/src/ _generated_/rest/models/v1-insert-record-response.ts deleted file mode 100644 index ba160914..00000000 --- a/src/ _generated_/rest/models/v1-insert-record-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1RecordMetaProperties } from './v1-record-meta-properties'; - -/** - * - * @export - * @interface V1InsertRecordResponse - */ -export interface V1InsertRecordResponse { - /** - * Identifiers for the inserted records. - * @type {Array} - * @memberof V1InsertRecordResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-member-type.ts b/src/ _generated_/rest/models/v1-member-type.ts deleted file mode 100644 index 7c940db4..00000000 --- a/src/ _generated_/rest/models/v1-member-type.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Type of the member. - * @export - * @enum {string} - */ - -export const V1MemberType = { - None: 'NONE', - User: 'USER', - ServiceAccount: 'SERVICE_ACCOUNT' -} as const; - -export type V1MemberType = typeof V1MemberType[keyof typeof V1MemberType]; - - - diff --git a/src/ _generated_/rest/models/v1-record-meta-properties.ts b/src/ _generated_/rest/models/v1-record-meta-properties.ts deleted file mode 100644 index 5753e0e6..00000000 --- a/src/ _generated_/rest/models/v1-record-meta-properties.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1RecordMetaProperties - */ -export interface V1RecordMetaProperties { - /** - * ID of the inserted record. - * @type {string} - * @memberof V1RecordMetaProperties - */ - 'skyflow_id'?: string; - /** - * Tokens for the record. - * @type {object} - * @memberof V1RecordMetaProperties - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-sort-options-order-by.ts b/src/ _generated_/rest/models/v1-sort-options-order-by.ts deleted file mode 100644 index 320a2eed..00000000 --- a/src/ _generated_/rest/models/v1-sort-options-order-by.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @enum {string} - */ - -export const V1SortOptionsOrderBy = { - Ascending: 'ASCENDING', - Descending: 'DESCENDING' -} as const; - -export type V1SortOptionsOrderBy = typeof V1SortOptionsOrderBy[keyof typeof V1SortOptionsOrderBy]; - - - diff --git a/src/ _generated_/rest/models/v1-tokenize-payload.ts b/src/ _generated_/rest/models/v1-tokenize-payload.ts deleted file mode 100644 index 0adc9fd6..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-payload.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1TokenizeRecordRequest } from './v1-tokenize-record-request'; - -/** - * - * @export - * @interface V1TokenizePayload - */ -export interface V1TokenizePayload { - /** - * Tokenization details. - * @type {Array} - * @memberof V1TokenizePayload - */ - 'tokenizationParameters'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-record-request.ts b/src/ _generated_/rest/models/v1-tokenize-record-request.ts deleted file mode 100644 index 3a86cd3e..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-record-request.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1TokenizeRecordRequest - */ -export interface V1TokenizeRecordRequest { - /** - * Existing value to return a token for. - * @type {string} - * @memberof V1TokenizeRecordRequest - */ - 'value'?: string; - /** - * Name of the column group that the value belongs to. - * @type {string} - * @memberof V1TokenizeRecordRequest - */ - 'columnGroup'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-record-response.ts b/src/ _generated_/rest/models/v1-tokenize-record-response.ts deleted file mode 100644 index 47d914b4..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-record-response.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1TokenizeRecordResponse - */ -export interface V1TokenizeRecordResponse { - /** - * Token corresponding to a value. - * @type {string} - * @memberof V1TokenizeRecordResponse - */ - 'token'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-tokenize-response.ts b/src/ _generated_/rest/models/v1-tokenize-response.ts deleted file mode 100644 index 439f5f13..00000000 --- a/src/ _generated_/rest/models/v1-tokenize-response.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1TokenizeRecordResponse } from './v1-tokenize-record-response'; - -/** - * - * @export - * @interface V1TokenizeResponse - */ -export interface V1TokenizeResponse { - /** - * Tokens corresponding to the specified values. - * @type {Array} - * @memberof V1TokenizeResponse - */ - 'records'?: Array; -} - diff --git a/src/ _generated_/rest/models/v1-update-record-response.ts b/src/ _generated_/rest/models/v1-update-record-response.ts deleted file mode 100644 index 69c9c6a1..00000000 --- a/src/ _generated_/rest/models/v1-update-record-response.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1UpdateRecordResponse - */ -export interface V1UpdateRecordResponse { - /** - * ID of the updated record. - * @type {string} - * @memberof V1UpdateRecordResponse - */ - 'skyflow_id'?: string; - /** - * Tokens for the record. - * @type {object} - * @memberof V1UpdateRecordResponse - */ - 'tokens'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-update-request-record.ts b/src/ _generated_/rest/models/v1-update-request-record.ts deleted file mode 100644 index 6d2dbb97..00000000 --- a/src/ _generated_/rest/models/v1-update-request-record.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * - * @export - * @interface V1UpdateRequestRecord - */ -export interface V1UpdateRequestRecord { - /** - * ID of the record to be updated. - * @type {string} - * @memberof V1UpdateRequestRecord - */ - 'ID'?: string; - /** - * Record data. - * @type {object} - * @memberof V1UpdateRequestRecord - */ - 'fields'?: object; -} - diff --git a/src/ _generated_/rest/models/v1-vault-field-mapping.ts b/src/ _generated_/rest/models/v1-vault-field-mapping.ts deleted file mode 100644 index 5fcf4f84..00000000 --- a/src/ _generated_/rest/models/v1-vault-field-mapping.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - - -/** - * Mapping of the fields in the vault to the fields to use for the lookup. - * @export - * @interface V1VaultFieldMapping - */ -export interface V1VaultFieldMapping { - /** - * Name of the column that stores the card number. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_number'?: string; - /** - * Name of the column that stores the card number suffix. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_last_four_digits'?: string; - /** - * Name of the column that stores the expiry date. - * @type {string} - * @memberof V1VaultFieldMapping - */ - 'card_expiry'?: string; -} - diff --git a/src/ _generated_/rest/models/v1-vault-schema-config.ts b/src/ _generated_/rest/models/v1-vault-schema-config.ts deleted file mode 100644 index afabed0c..00000000 --- a/src/ _generated_/rest/models/v1-vault-schema-config.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Skyflow Data API - * # Data API This API inserts, retrieves, and otherwise manages data in a vault. The Data API is available from two base URIs. *identifier* is the identifier in your vault\'s URL.
  • Sandbox: https://_*identifier*.vault.skyflowapis-preview.com
  • Production: https://_*identifier*.vault.skyflowapis.com
When you make an API call, you need to add a header:
HeaderValueExample
AuthorizationA Bearer Token. See API Authentication.Authorization: Bearer eyJhbGciOiJSUzI...1NiIsJdfPA
- * - * The version of the OpenAPI document: v1 - * Contact: support@skyflow.com - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -// May contain unused imports in some cases -// @ts-ignore -import type { V1VaultFieldMapping } from './v1-vault-field-mapping'; - -/** - * Details of the vault that stores additional card details. - * @export - * @interface V1VaultSchemaConfig - */ -export interface V1VaultSchemaConfig { - /** - * ID of the vault that stores card details. - * @type {string} - * @memberof V1VaultSchemaConfig - */ - 'id'?: string; - /** - * Name of the table that stores card details. - * @type {string} - * @memberof V1VaultSchemaConfig - */ - 'table_name'?: string; - /** - * - * @type {V1VaultFieldMapping} - * @memberof V1VaultSchemaConfig - */ - 'mapping'?: V1VaultFieldMapping; -} - diff --git a/src/ _generated_/rest/version.ts b/src/ _generated_/rest/version.ts new file mode 100644 index 00000000..e3655fb3 --- /dev/null +++ b/src/ _generated_/rest/version.ts @@ -0,0 +1 @@ +export const SDK_VERSION = "1.0.21"; diff --git a/src/error/codes/index.ts b/src/error/codes/index.ts index 4be92e25..fc312b84 100644 --- a/src/error/codes/index.ts +++ b/src/error/codes/index.ts @@ -118,6 +118,11 @@ const SKYFLOW_ERROR_CODE = { MISSING_FILE_PATH_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.MISSING_FILE_PATH_IN_UPLOAD_FILE }, INVALID_FILE_PATH_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_FILE_PATH_IN_UPLOAD_FILE }, INVALID_FILE_UPLOAD_REQUEST: { http_code: 400, message: errorMessages.INVALID_FILE_UPLOAD_REQUEST }, + MISSING_FILE_SOURCE_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.MISSING_FILE_SOURCE_IN_UPLOAD_FILE }, + MISSING_FILE_NAME_FOR_BASE64: { http_code: 400, message: errorMessages.MISSING_FILE_NAME_FOR_BASE64 }, + INVALID_FILE_OBJECT_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_FILE_OBJECT_IN_UPLOAD_FILE }, + MISSING_FILE_NAME_IN_FILE_OBJECT: { http_code: 400, message: errorMessages.MISSING_FILE_NAME_IN_FILE_OBJECT }, + INVALID_BASE64_IN_UPLOAD_FILE: { http_code: 400, message: errorMessages.INVALID_BASE64_IN_UPLOAD_FILE }, MISSING_SKYFLOW_ID_IN_UPDATE: { http_code: 400, message: errorMessages.MISSING_SKYFLOW_ID_IN_UPDATE }, INVALID_SKYFLOW_ID_IN_UPDATE: { http_code: 400, message: errorMessages.INVALID_SKYFLOW_ID_IN_UPDATE }, diff --git a/src/error/messages/index.ts b/src/error/messages/index.ts index f4f6aed8..ccb56fb8 100644 --- a/src/error/messages/index.ts +++ b/src/error/messages/index.ts @@ -114,6 +114,11 @@ const errorMessages = { INVALID_COLUMN_NAME_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid column name in file upload request. Specify a valid column name.`, MISSING_FILE_PATH_IN_UPLOAD_FILE: `${errorPrefix} Validation error. File path cannot be empty in file upload request. Specify a valid file path as string.`, INVALID_FILE_PATH_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid file path in file upload request. Specify a valid file path.`, + MISSING_FILE_SOURCE_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Provide exactly one of filePath, base64, or fileObject.`, + MISSING_FILE_NAME_FOR_BASE64: `${errorPrefix} Validation error. File name is required when providing a base64 string`, + INVALID_FILE_OBJECT_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid file object in file upload request. Specify a valid file object.`, + MISSING_FILE_NAME_IN_FILE_OBJECT: `${errorPrefix} Validation error. File name is required when providing a file object. Specify a valid file name.`, + INVALID_BASE64_IN_UPLOAD_FILE: `${errorPrefix} Validation error. Invalid base64 string in file upload request. Specify a valid base64 string.`, MISSING_SKYFLOW_ID_IN_UPDATE: `${errorPrefix} Validation error. Skyflow id name cannot be empty in update request. Specify a skyflow Id name as string.`, INVALID_SKYFLOW_ID_IN_UPDATE: `${errorPrefix} Validation error. Invalid skyflow Id in update request. Specify a valid skyflow Id.`, diff --git a/src/index.ts b/src/index.ts index f8edec2e..145621f4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import GetRequest from './vault/model/request/get'; import GetOptions from './vault/model/options/get'; import DetokenizeRequest from './vault/model/request/detokenize'; import DetokenizeOptions from './vault/model/options/detokenize'; +import FileUploadOptions from './vault/model/options/fileUpload'; import DeleteRequest from './vault/model/request/delete'; import UpdateRequest from './vault/model/request/update'; import FileUploadRequest from './vault/model/request/file-upload'; @@ -26,7 +27,7 @@ import UpdateResponse from './vault/model/response/update'; import FileUploadResponse from './vault/model/response/file-upload'; import QueryResponse from './vault/model/response/query'; import InvokeConnectionResponse from './vault/model/response/invoke/invoke'; -import { SkyflowConfig, TokenizeRequestType } from './vault/types'; +import { SkyflowConfig, TokenizeRequestType, DetokenizeData } from './vault/types'; import VaultConfig from './vault/config/vault'; import SkyflowError from './error'; import ConnectionConfig from './vault/config/connection'; @@ -61,6 +62,7 @@ export { GetOptions, GetResponse, DetokenizeRequest, + DetokenizeData, DetokenizeOptions, DetokenizeResponse, DeleteRequest, @@ -69,6 +71,7 @@ export { UpdateOptions, UpdateResponse, FileUploadRequest, + FileUploadOptions, FileUploadResponse, QueryRequest, QueryResponse, diff --git a/src/service-account/client/index.ts b/src/service-account/client/index.ts index b2d07a97..77289fda 100644 --- a/src/service-account/client/index.ts +++ b/src/service-account/client/index.ts @@ -1,18 +1,15 @@ // imports -import { AuthenticationApi, Configuration } from "../../ _generated_/rest"; - +import { Authentication } from "../../ _generated_/rest/api/resources/authentication/client/Client"; class Client { - configuration: Configuration; - - authApi: AuthenticationApi; + authApi: Authentication; constructor(tokenURI: string) { - this.configuration = new Configuration({ - basePath: tokenURI, + this.authApi = new Authentication({ + baseUrl: tokenURI, + token:'' }); - this.authApi = new AuthenticationApi(this.configuration); } } diff --git a/src/service-account/index.ts b/src/service-account/index.ts index e31c3f4c..e19257f6 100644 --- a/src/service-account/index.ts +++ b/src/service-account/index.ts @@ -1,6 +1,6 @@ import * as fs from 'fs'; import jwt from "jsonwebtoken"; -import { V1GetAuthTokenRequest } from '../ _generated_/rest'; +import { V1GetAuthTokenRequest } from '../ _generated_/rest/api'; import { getBaseUrl, LogLevel, MessageType, parameterizedString, printLog } from '../utils'; import Client from './client'; import logs from '../utils/logs'; @@ -144,8 +144,8 @@ function getToken(credentials, options?: BearerTokenOptions): Promise { - successResponse(res, options?.logLevel).then((response) => resolve(response)).catch(err => reject(err)) + ).withRawResponse().then((res: any) => { + successResponse(res.data, options?.logLevel).then((response) => resolve(response)).catch(err => reject(err)) }) .catch((err) => { failureResponse(err).catch(err => reject(err)) @@ -284,27 +284,25 @@ function generateSignedDataTokensFromCreds(credentials, options: SignedDataToken function failureResponse(err: any) { return new Promise((_, reject) => { - if (err.response) { - let data = err.response.data - const headerMap = err.response.headers - const requestId = headerMap['x-request-id']; - const contentType = headerMap["content-type"]; + if (err.rawResponse) { + const requestId = err?.rawResponse?.headers?.get('x-request-id');; + const contentType = err?.rawResponse?.headers?.get('content-type'); if (contentType && contentType.includes('application/json')) { - let description = data; + let description = err?.body; if (description?.error?.message) { description =description?.error?.message; } printLog(description, MessageType.ERROR); reject(new SkyflowError({ - http_code: err.response.status, + http_code: err?.body?.error?.http_code, message: description, request_ID: requestId, })); } else if (contentType && contentType.includes('text/plain')) { - let description = data + let description = err?.body; printLog(description, MessageType.ERROR); reject(new SkyflowError({ - http_code: err.response.status, + http_code: err?.body?.error?.http_code, message: description, request_ID: requestId })); @@ -331,8 +329,8 @@ function successResponse(res: any, logLevel?: LogLevel): Promise printLog(logs.infoLogs.GENERATE_BEARER_TOKEN_SUCCESS, MessageType.LOG, logLevel); return new Promise((resolve, _) => { resolve({ - accessToken: res.data.accessToken, - tokenType: res.data.tokenType, + accessToken: res.accessToken, + tokenType: res.tokenType, }); }) } diff --git a/src/utils/validations/index.ts b/src/utils/validations/index.ts index 09b31ba6..5409dd4d 100644 --- a/src/utils/validations/index.ts +++ b/src/utils/validations/index.ts @@ -1,5 +1,5 @@ import { CONNECTION, CONNECTION_ID, Env, isValidURL, LogLevel, MessageType, RequestMethod, OrderByEnum, parameterizedString, printLog, RedactionType, SKYFLOW_ID, VAULT, VAULT_ID, TokenMode } from ".."; -import { V1BYOT } from "../../ _generated_/rest"; +import { V1Byot } from "../../ _generated_/rest/api"; import SkyflowError from "../../error"; import SKYFLOW_ERROR_CODE from "../../error/codes"; import ConnectionConfig from "../../vault/config/connection"; @@ -23,6 +23,7 @@ import { SkyflowConfig, StringKeyValueMapType } from "../../vault/types"; import * as fs from 'fs'; import { isExpired } from "../jwt-utils"; import logs from "../logs"; +import FileUploadOptions from "../../vault/model/options/fileUpload"; export function isEnv(value?: string): boolean { return value !== undefined && Object.values(Env).includes(value as Env); @@ -33,7 +34,7 @@ export function isRedactionType(value?: string): boolean { } export function isByot(value?: string): boolean { - return value !== undefined && Object.values(V1BYOT).includes(value as V1BYOT); + return value !== undefined && Object.values(V1Byot).includes(value as V1Byot); } export function isOrderBy(value?: string): boolean { @@ -557,7 +558,7 @@ export const validateUpdateRequest = (updateRequest: UpdateRequest, updateOption throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPDATE); } - if (updateRequest?.data[SKYFLOW_ID] && typeof updateRequest.data[SKYFLOW_ID] !== 'string' || updateRequest.data[SKYFLOW_ID].trim().length === 0) { + if (updateRequest?.data[SKYFLOW_ID] && typeof updateRequest.data[SKYFLOW_ID] !== 'string' || (updateRequest.data[SKYFLOW_ID] as string).trim().length === 0) { printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_UPDATE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPDATE); } @@ -738,35 +739,34 @@ export const validateDetokenizeOptions = (detokenizeOptions?: DetokenizeOptions) export const validateDetokenizeRequest = (detokenizeRequest: DetokenizeRequest, detokenizeOptions?: DetokenizeOptions, logLevel: LogLevel = LogLevel.ERROR) => { if (detokenizeRequest) { - if (!detokenizeRequest?.tokens) { + if (!detokenizeRequest?.data) { printLog(logs.errorLogs.EMPTY_TOKENS_IN_DETOKENIZE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKENS_IN_DETOKENIZE) } - if (!Array.isArray(detokenizeRequest.tokens)) { + if (!Array.isArray(detokenizeRequest.data)) { printLog(logs.errorLogs.INVALID_TOKENS_IN_DETOKENIZE, MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKENS_TYPE_IN_DETOKENIZE) } - const tokens = detokenizeRequest?.tokens; + const records = detokenizeRequest?.data; - if (tokens.length === 0) + if (records.length === 0) throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKENS_IN_DETOKENIZE); - tokens.forEach((token, index) => { - if (!token) { + records.forEach((record, index) => { + if (!record) { printLog(parameterizedString(logs.errorLogs.INVALID_TOKEN_IN_DETOKENIZE, [index]), MessageType.ERROR, logLevel); throw new SkyflowError(SKYFLOW_ERROR_CODE.EMPTY_TOKEN_IN_DETOKENIZE, [index]); } - if (typeof token !== 'string' || token.trim().length === 0) { + if (typeof record.token !== 'string' || record.token.trim().length === 0) { throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_IN_DETOKENIZE, [index]); } + if (record?.redactionType && (typeof record.redactionType !== 'string' || !isRedactionType(record.redactionType))) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_REDACTION_TYPE); + } }); - if (detokenizeRequest?.redactionType && (typeof detokenizeRequest.redactionType !== 'string' || !isRedactionType(detokenizeRequest.redactionType))) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_REDACTION_TYPE); - } - validateDetokenizeOptions(detokenizeOptions); } else { @@ -857,47 +857,70 @@ export const validateDeleteRequest = (deleteRequest: DeleteRequest, logLevel: Lo } } -export const validateUploadFileRequest = (fileRequest: FileUploadRequest, logLevel: LogLevel = LogLevel.ERROR) => { - if (fileRequest) { - if (!fileRequest?.tableName || !Object.prototype.hasOwnProperty.call(fileRequest, '_tableName')) { - printLog(logs.errorLogs.EMPTY_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_TABLE_IN_UPLOAD_FILE); - } +export const validateUploadFileRequest = (fileRequest: FileUploadRequest, options?: FileUploadOptions, logLevel: LogLevel = LogLevel.ERROR) => { + if (!fileRequest) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_UPLOAD_REQUEST); + } - if (typeof fileRequest?.tableName !== 'string' || fileRequest?.tableName.trim().length === 0) { - printLog(logs.errorLogs.INVALID_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TABLE_IN_UPLOAD_FILE); - } + if (!fileRequest?.tableName || !Object.prototype.hasOwnProperty.call(fileRequest, '_tableName')) { + printLog(logs.errorLogs.EMPTY_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_TABLE_IN_UPLOAD_FILE); + } - if (!fileRequest?.skyflowId || !Object.prototype.hasOwnProperty.call(fileRequest, '_skyflowId')) { - printLog(logs.errorLogs.EMPTY_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPLOAD_FILE); - } + if (typeof fileRequest?.tableName !== 'string' || fileRequest?.tableName.trim().length === 0) { + printLog(logs.errorLogs.INVALID_TABLE_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TABLE_IN_UPLOAD_FILE); + } - if (typeof fileRequest?.skyflowId !== 'string' || fileRequest.skyflowId.trim().length === 0) { - printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPLOAD_FILE); - } + if (!fileRequest?.skyflowId || !Object.prototype.hasOwnProperty.call(fileRequest, '_skyflowId')) { + printLog(logs.errorLogs.EMPTY_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_SKYFLOW_ID_IN_UPLOAD_FILE); + } + if (typeof fileRequest?.skyflowId !== 'string' || fileRequest.skyflowId.trim().length === 0) { + printLog(logs.errorLogs.INVALID_SKYFLOW_ID_IN_FILE_UPLOAD, MessageType.ERROR, logLevel); + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_SKYFLOW_ID_IN_UPLOAD_FILE); + } - if (!fileRequest?.columnName || !Object.prototype.hasOwnProperty.call(fileRequest, '_columnName')) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_COLUMN_NAME_IN_UPLOAD_FILE); - } + if (!fileRequest?.columnName || !Object.prototype.hasOwnProperty.call(fileRequest, '_columnName')) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_COLUMN_NAME_IN_UPLOAD_FILE); + } - if (typeof fileRequest?.columnName !== 'string' || fileRequest?.columnName.trim().length === 0) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_COLUMN_NAME_IN_UPLOAD_FILE); + if (typeof fileRequest?.columnName !== 'string' || fileRequest?.columnName.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_COLUMN_NAME_IN_UPLOAD_FILE); + } + + if(options){ + const hasFilePath = !!options.getFilePath(); + if(hasFilePath && typeof options.getFilePath() !== 'string') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_PATH_IN_UPLOAD_FILE); + } + const hasBase64 = !!options.getBase64(); + if(hasBase64 && typeof options.getBase64() !== 'string') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_BASE64_IN_UPLOAD_FILE); + } + const hasFileObject = !!options.getFileObject(); + if(hasFileObject && typeof options.getFileObject() !== 'object') { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_OBJECT_IN_UPLOAD_FILE); } + if (!hasFilePath && !hasBase64 && !hasFileObject) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_SOURCE_IN_UPLOAD_FILE); + } - if (!fileRequest?.filePath || !Object.prototype.hasOwnProperty.call(fileRequest, '_filePath')) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_PATH_IN_UPLOAD_FILE); + if (hasBase64 && !options.getFileName()) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_NAME_FOR_BASE64); } - if (typeof fileRequest?.filePath !== 'string' || fileRequest?.filePath.trim().length === 0 || !isValidPath(fileRequest.filePath)) { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_PATH_IN_UPLOAD_FILE); + if (hasFileObject) { + const fileObject = options.getFileObject(); + if (!(fileObject instanceof File)) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_OBJECT_IN_UPLOAD_FILE); + } + if (!fileObject.name || typeof fileObject.name !== 'string' || fileObject.name.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.MISSING_FILE_NAME_IN_FILE_OBJECT); + } } - } else { - throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_UPLOAD_REQUEST); } } diff --git a/src/vault/client/index.ts b/src/vault/client/index.ts index 8c3bd799..49134eb0 100644 --- a/src/vault/client/index.ts +++ b/src/vault/client/index.ts @@ -1,5 +1,7 @@ // imports -import { Configuration, QueryApi, RecordsApi, TokensApi } from "../../ _generated_/rest"; +import { Query } from "../../ _generated_/rest/api/resources/query/client/Client"; +import { Records } from "../../ _generated_/rest/api/resources/records/client/Client"; +import { Tokens } from "../../ _generated_/rest/api/resources/tokens/client/Client"; import SkyflowError from "../../error"; import errorMessages from "../../error/messages"; import { AuthInfo, AuthType, LogLevel, MessageType, printLog, TYPES } from "../../utils/index"; @@ -13,13 +15,13 @@ class VaultClient { url!: string; - configuration!: Configuration; + configuration!: Records.Options; - vaultAPI!: RecordsApi; + vaultAPI!: Records; - tokensAPI!: TokensApi; + tokensAPI!: Tokens; - queryAPI!: QueryApi; + queryAPI!: Query; individualCredentials?: Credentials; @@ -50,10 +52,10 @@ class VaultClient { private initConfig(authInfo: AuthInfo) { this.authInfo = authInfo; - this.configuration = new Configuration({ - basePath: this.url, - accessToken: authInfo.key, - }); + this.configuration = { + baseUrl: this.url, + token: authInfo.key, + }; } @@ -66,14 +68,14 @@ class VaultClient { case TYPES.INSERT: case TYPES.INSERT_BATCH: case TYPES.UPDATE: - this.vaultAPI = new RecordsApi(this.configuration); + this.vaultAPI = new Records(this.configuration); break; case TYPES.DETOKENIZE: case TYPES.TOKENIZE: - this.tokensAPI = new TokensApi(this.configuration); + this.tokensAPI = new Tokens(this.configuration); break; case TYPES.QUERY: - this.queryAPI = new QueryApi(this.configuration); + this.queryAPI = new Query(this.configuration); break; default: break; @@ -111,14 +113,50 @@ class VaultClient { this.skyflowCredentials = credentials; } - failureResponse = (err: any) => new Promise((_, reject) => { - const contentType = err.response?.headers['content-type']; - const data = err.response?.data; - const requestId = err.response?.headers['x-request-id']; - - const errorFromClientHeader = err.response?.headers?.['error-from-client']; - const errorFromClient = errorFromClientHeader ? String(errorFromClientHeader).toLowerCase() === 'true' : undefined; + private normalizeErrorMeta(err: any) { + const isNewFormat = !!err?.rawResponse; + if (isNewFormat) { + const headers = err?.rawResponse?.headers; + const contentType = headers?.get('content-type'); + const requestId = headers?.get('x-request-id'); + const errorFromClientHeader = headers?.get('error-from-client'); + const errorFromClient = errorFromClientHeader + ? String(errorFromClientHeader).toLowerCase() === 'true' + : undefined; + + return { + isNewFormat, + contentType, + requestId, + errorFromClient + }; + } else { + const headers = err?.headers || {}; + const contentType = headers.get('content-type'); + const requestId = headers.get('x-request-id'); + + + + const errorFromClientHeader = headers.get('error-from-client'); + const errorFromClient = errorFromClientHeader + ? String(errorFromClientHeader).toLowerCase() === 'true' + : undefined; + + return { + isNewFormat, + contentType, + requestId, + errorFromClient + }; + } + } + + failureResponse = (err: any) => new Promise((_, reject) => { + const { isNewFormat, contentType, requestId, errorFromClient } = this.normalizeErrorMeta(err); + + const data = isNewFormat ? err?.body?.error : err; + if (contentType) { if (contentType.includes('application/json')) { this.handleJsonError(err, data, requestId, reject, errorFromClient); @@ -131,43 +169,79 @@ class VaultClient { this.handleGenericError(err, requestId, reject, errorFromClient); } }); + private handleJsonError(err: any, data: any, requestId: string, reject: Function, errorFromClient?: boolean) { - let description = data; - const statusCode = description?.error?.http_status; - const grpcCode = description?.error?.grpc_code; - let details = description?.error?.details; - - if (errorFromClient !== undefined) { - details = Array.isArray(details) - ? [...details, { errorFromClient: errorFromClient }] - : [{ errorFromClient: errorFromClient }]; + const isNewFormat = !!err?.rawResponse; + + if (isNewFormat) { + let description = data?.message; + const statusCode = data?.http_code; + const grpcCode = data?.grpc_code; + let details = data?.details || []; + + if (errorFromClient !== undefined) { + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; + } + + this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details, isNewFormat); + } else { + let description = data; + const statusCode = description?.statusCode; + const grpcCode = description?.grpcCode; + let details = description?.error?.details; + + if (errorFromClient !== undefined) { + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; + } + + description = description?.body?.error?.message || description; + this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details, isNewFormat); } - - description = description?.error?.message || description; - this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details); } - + + private handleTextError(err: any, data: any, requestId: string, reject: Function, errorFromClient?: boolean) { + const isNewFormat = !!err?.rawResponse let details: any = []; - + if (errorFromClient !== undefined) { details.push({ errorFromClient }); } - - this.logAndRejectError(data, err, requestId, reject, undefined, undefined, details); + + const description = isNewFormat ? data?.message: data?.body?.error?.message; + this.logAndRejectError(description, err, requestId, reject, undefined, undefined, details, isNewFormat); } - + + private handleGenericError(err: any, requestId: string, reject: Function, errorFromClient?: boolean) { - const description = err?.response?.data || err?.message || errorMessages.ERROR_OCCURRED; + const isNewFormat = !!err?.rawResponse; + let description: any; + let grpcCode: any; let details: any = []; - + + if (isNewFormat) { + description = err?.body?.error?.message || err?.message; + grpcCode = err?.body?.error?.grpc_code; + details = err?.body?.error?.details || []; + } else { + description = err?.body?.error?.message || errorMessages.ERROR_OCCURRED; + } + if (errorFromClient !== undefined) { - details.push({ errorFromClient }); + details = Array.isArray(details) + ? [...details, { errorFromClient }] + : [{ errorFromClient }]; } - this.logAndRejectError(description, err, requestId, reject, undefined, undefined, details); + + this.logAndRejectError(description, err, requestId, reject, undefined, grpcCode, details, isNewFormat); } - + + private logAndRejectError( description: string, err: any, @@ -175,11 +249,12 @@ class VaultClient { reject: Function, httpStatus?: number, grpcCode?: number, - details?: any + details?: any, + isNewError?: boolean ) { printLog(description, MessageType.ERROR, this.getLogLevel()); reject(new SkyflowError({ - http_code: err?.response?.status || 400, + http_code: isNewError ? err?.statusCode : err?.response?.status || 400, message: description, request_ID: requestId, grpc_code: grpcCode, diff --git a/src/vault/controller/connections/index.ts b/src/vault/controller/connections/index.ts index 7845699b..1281046d 100644 --- a/src/vault/controller/connections/index.ts +++ b/src/vault/controller/connections/index.ts @@ -1,5 +1,4 @@ //imports -import axios from "axios"; import { fillUrlWithPathAndQueryParams, generateSDKMetrics, getBearerToken, LogLevel, MessageType, RequestMethod, parameterizedString, printLog, SDK_METRICS_HEADER_KEY, SKYFLOW_AUTH_HEADER_KEY, REQUEST_ID_KEY, TYPES } from "../../../utils"; import InvokeConnectionRequest from "../../model/request/inkove"; import logs from "../../../utils/logs"; @@ -18,6 +17,30 @@ class ConnectionController { this.logLevel = client.getLogLevel(); } + private buildInvokeConnectionBody(invokeRequest: InvokeConnectionRequest){ + let requestBody; + const contentType = invokeRequest.headers?.['Content-Type'] || 'application/json'; + if (contentType === 'application/json') { + requestBody = JSON.stringify(invokeRequest.body); + } else if (contentType === 'application/x-www-form-urlencoded') { + const urlSearchParams = new URLSearchParams(); + Object.entries(invokeRequest.body || {}).forEach(([key, value]) => { + if (typeof value === 'object' && value !== null) { + Object.entries(value).forEach(([nestedKey, nestedValue]) => { + urlSearchParams.append(`${key}[${nestedKey}]`, nestedValue as string); + }); + } else { + urlSearchParams.append(key, value as string); + } + }); + requestBody = urlSearchParams.toString(); + } else { + requestBody = invokeRequest.body; + } + + return requestBody; + } + invoke(invokeRequest: InvokeConnectionRequest): Promise { return new Promise((resolve, reject) => { try { @@ -31,23 +54,39 @@ class ConnectionController { const sdkHeaders = {}; sdkHeaders[SKYFLOW_AUTH_HEADER_KEY] = token.key; sdkHeaders[SDK_METRICS_HEADER_KEY] = JSON.stringify(generateSDKMetrics()); - axios({ - url: filledUrl, + + fetch(filledUrl, { method: invokeRequest.method || RequestMethod.POST, - data: invokeRequest.body, - headers: { ...invokeRequest.headers, ...sdkHeaders } - }).then((response: any) => { - printLog(logs.infoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED, MessageType.LOG, this.logLevel); - let requestId = response.headers[REQUEST_ID_KEY] - const invokeConnectionResponse = new InvokeConnectionResponse({ - data: response.data, - metadata: {requestId} + body: this.buildInvokeConnectionBody(invokeRequest), + headers: { ...invokeRequest.headers, ...sdkHeaders }, + }) + .then(async (response) => { + if(!response.ok){ + const errorBody = await response.json().catch(() => null); + + const error = { + body: errorBody, + statusCode: response.status, + message: response.statusText, + headers: response.headers + }; + throw error; + } + const headers = response.headers; + return response.json().then((body) => ({ headers, body })); + }) + .then(({headers, body}) => { + printLog(logs.infoLogs.INVOKE_CONNECTION_REQUEST_RESOLVED, MessageType.LOG, this.logLevel); + const requestId = headers?.get(REQUEST_ID_KEY) || ''; + const invokeConnectionResponse = new InvokeConnectionResponse({ + data: body, + metadata: { requestId } + }); + resolve(invokeConnectionResponse); + }).catch((err) => { + printLog(logs.errorLogs.INVOKE_CONNECTION_REQUEST_REJECTED, MessageType.LOG, this.logLevel); + this.client.failureResponse(err).catch((err) => reject(err)) }); - resolve(invokeConnectionResponse); - }).catch((err) => { - printLog(logs.errorLogs.INVOKE_CONNECTION_REQUEST_REJECTED, MessageType.LOG, this.logLevel); - this.client.failureResponse(err).catch((err)=>reject(err)) - }); }).catch(err => { reject(err); }) diff --git a/src/vault/controller/vault/index.ts b/src/vault/controller/vault/index.ts index 9facd08f..b504bb74 100644 --- a/src/vault/controller/vault/index.ts +++ b/src/vault/controller/vault/index.ts @@ -1,7 +1,7 @@ //imports import * as fs from 'fs'; import InsertRequest from "../../model/request/insert"; -import { BatchRecordMethod, QueryServiceExecuteQueryBody, RecordServiceBatchOperationBody, RecordServiceBulkDeleteRecordBody, RecordServiceInsertRecordBody, RecordServiceUpdateRecordBody, V1BYOT, V1DetokenizePayload, V1DetokenizeRecordRequest, V1FieldRecords, V1TokenizePayload, V1TokenizeRecordRequest } from "../../../ _generated_/rest"; +import { BatchRecordMethod, QueryServiceExecuteQueryBody, RecordServiceBatchOperationBody, RecordServiceBulkDeleteRecordBody, RecordServiceInsertRecordBody, RecordServiceUpdateRecordBody, V1Byot, V1DetokenizePayload, V1DetokenizeRecordRequest, V1FieldRecords, V1TokenizePayload, V1TokenizeRecordRequest } from '../../../ _generated_/rest/api'; import InsertOptions from "../../model/options/insert"; import GetRequest from "../../model/request/get"; import GetOptions from "../../model/options/get"; @@ -26,8 +26,10 @@ import { generateSDKMetrics, getBearerToken, MessageType, parameterizedString, p import GetColumnRequest from '../../model/request/get-column'; import logs from '../../../utils/logs'; import VaultClient from '../../client'; -import { RawAxiosRequestConfig } from 'axios'; import { validateDeleteRequest, validateDetokenizeRequest, validateGetColumnRequest, validateGetRequest, validateInsertRequest, validateQueryRequest, validateTokenizeRequest, validateUpdateRequest, validateUploadFileRequest } from '../../../utils/validations'; +import path from 'path'; +import { Records } from '../../../ _generated_/rest/api/resources/records/client/Client'; +import FileUploadOptions from '../../model/options/fileUpload'; class VaultController { @@ -56,7 +58,7 @@ class VaultController { return []; } - private parseDetokenizeResponse(records: any[]): ParsedDetokenizeResponse { + private parseDetokenizeResponse(records: any[], requestId: any): ParsedDetokenizeResponse { const response: ParsedDetokenizeResponse = { success: [], errors: [] @@ -67,6 +69,7 @@ class VaultController { records.forEach(record => { if (record.error) { response.errors.push({ + requestId: requestId, token: record.token, error: record.error }); @@ -81,7 +84,7 @@ class VaultController { return response; } - private parseInsertBatchResponse(records: any[]): InsertResponse { + private parseInsertBatchResponse(records: any[], requestId: any): InsertResponse { const response: ParsedInsertBatchResponse = { success: [], errors: [] @@ -93,9 +96,10 @@ class VaultController { records.forEach((record, index) => { if (this.isSuccess(record)) { + this.processSuccess(record, index, response); } else { - this.processError(record, index, response); + this.processError(record, index, requestId, response); } }); @@ -116,8 +120,9 @@ class VaultController { }); } - private processError(record: any, index: number, response: ParsedInsertBatchResponse): void { + private processError(record: any, index: number, requestId: any, response: ParsedInsertBatchResponse): void { response.errors.push({ + requestId: requestId, requestIndex: index, error: record?.Body?.error }); @@ -132,7 +137,8 @@ class VaultController { this.client.initAPI(authInfo, requestType); apiCall({ headers: { ...sdkHeaders } }) .then((response: any) => { - const data = response.data; + const { data, rawResponse } = response; + const requestId = rawResponse?.headers?.get('x-request-id'); printLog(logs.infoLogs[`${requestType}_REQUEST_RESOLVED`], MessageType.LOG, this.client.getLogLevel()); switch (requestType) { case TYPES.INSERT: @@ -140,10 +146,10 @@ class VaultController { case TYPES.QUERY: case TYPES.DETOKENIZE: case TYPES.TOKENIZE: - resolve(this.handleRecordsResponse(data)) + resolve({records: this.handleRecordsResponse(data), requestId}) break; case TYPES.INSERT_BATCH: - resolve(this.handleInsertBatchResponse(data)) + resolve({records: this.handleInsertBatchResponse(data), requestId}) break; case TYPES.UPDATE: case TYPES.FILE_UPLOAD: @@ -167,11 +173,11 @@ class VaultController { private buildBatchInsertBody(request: InsertRequest, options?: InsertOptions): RecordServiceBatchOperationBody { const records = request.data.map((record, index) => ({ - fields: record, + fields: record as Record || {}, tableName: request.tableName, tokenization: options?.getReturnTokens() || false, method: BatchRecordMethod.Post, - tokens: this.getTokens(index, options?.getTokens()), + tokens: this.getTokens(index, options?.getTokens()) as Record, upsert: options?.getUpsertColumn(), })); return { @@ -220,23 +226,22 @@ class VaultController { const operationType = isContinueOnError ? TYPES.INSERT_BATCH : TYPES.INSERT; const tableName = request.tableName; - this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => + (headers: Records.RequestOptions | undefined) => isContinueOnError - ? this.client.vaultAPI.recordServiceBatchOperation(this.client.vaultId, requestBody, headers) - : this.client.vaultAPI.recordServiceInsertRecord(this.client.vaultId, tableName, requestBody as RecordServiceInsertRecordBody, headers), + ? this.client.vaultAPI.recordServiceBatchOperation(this.client.vaultId, requestBody, headers).withRawResponse() + : this.client.vaultAPI.recordServiceInsertRecord(this.client.vaultId, tableName, requestBody as RecordServiceInsertRecordBody, headers).withRawResponse(), operationType ).then((resp: any) => { printLog(logs.infoLogs.INSERT_DATA_SUCCESS, MessageType.LOG, this.client.getLogLevel()); const parsedResponse = isContinueOnError - ? this.parseInsertBatchResponse(resp) - : this.parseBulkInsertResponse(resp); + ? this.parseInsertBatchResponse(resp.records, resp.requestId) + : this.parseBulkInsertResponse(resp.records); resolve(parsedResponse); }) - .catch(error => { - reject(error); - }); + .catch(error => { + reject(error); + }); } catch (error) { if (error instanceof Error) printLog(removeSDKVersion(error.message), MessageType.ERROR, this.client.getLogLevel()); @@ -256,7 +261,7 @@ class VaultController { const skyflowId = request.data[SKYFLOW_ID]; delete request.data[SKYFLOW_ID]; const record = { fields: request.data, tokens: options?.getTokens() }; - const strictMode = options?.getTokenMode() ? options?.getTokenMode() : V1BYOT.Disable; + const strictMode = options?.getTokenMode() ? options?.getTokenMode() : V1Byot.Disable; const updateData: RecordServiceUpdateRecordBody = { record: record, tokenization: options?.getReturnTokens(), @@ -264,13 +269,13 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceUpdateRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceUpdateRecord( this.client.vaultId, request.tableName, - skyflowId, + skyflowId as string, updateData, headers - ), + ).withRawResponse(), TYPES.UPDATE ).then(data => { printLog(logs.infoLogs.UPDATE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -304,12 +309,12 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceBulkDeleteRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceBulkDeleteRecord( this.client.vaultId, request.tableName, deleteRequest, headers - ), + ).withRawResponse(), TYPES.DELETE ).then(data => { printLog(logs.infoLogs.DELETE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -351,27 +356,30 @@ class VaultController { columnName = request.columnName as string; columnValues = request.columnValues as Array; } + const payload = { + skyflow_ids: records, + redaction: options?.getRedactionType(), + tokenization: options?.getReturnTokens(), + fields: options?.getFields(), + offset: options?.getOffset(), + limit: options?.getLimit(), + downloadURL: options?.getDownloadURL(), + column_name: columnName, + column_values: columnValues, + order_by: options?.getOrderBy(), + }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.recordServiceBulkGetRecord( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.recordServiceBulkGetRecord( this.client.vaultId, request.tableName, - records, - options?.getRedactionType(), - options?.getReturnTokens(), - options?.getFields(), - options?.getOffset(), - options?.getLimit(), - options?.getDownloadURL(), - columnName, - columnValues, - options?.getOrderBy(), + payload, headers - ), + ).withRawResponse(), TYPES.GET - ).then(records => { + ).then(response => { printLog(logs.infoLogs.GET_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const processedRecords = records.map(record => ({ + const processedRecords = response.records.map(record => ({ ...record.fields, })); resolve(new GetResponse({ data: processedRecords, errors: [] })); @@ -387,29 +395,48 @@ class VaultController { }); } - uploadFile(request: FileUploadRequest): Promise { + uploadFile(request: FileUploadRequest, options?: FileUploadOptions): Promise { return new Promise((resolve, reject) => { try { printLog(logs.infoLogs.UPLOAD_FILE_TRIGGERED, MessageType.LOG, this.client.getLogLevel()); printLog(logs.infoLogs.VALIDATE_FILE_UPLOAD_INPUT, MessageType.LOG, this.client.getLogLevel()); // Validation checks - validateUploadFileRequest(request, this.client.getLogLevel()); + validateUploadFileRequest(request, options, this.client.getLogLevel()); //handle file exits - const formData = new FormData(); - const fileStream = fs.createReadStream(request.filePath) as unknown as Blob; - formData.append('file', fileStream); - formData.append('columnName', request.columnName); + let fileBlob: Blob | File | undefined; + let fileName: string | undefined; + + if(options?.getFilePath()) { + const fileBuffer = fs.readFileSync(options.getFilePath()!); + fileName = path.basename(options.getFilePath()!); + fileBlob = new File([fileBuffer], fileName, { + type: 'application/json' + }); + } + else if (options?.getBase64()) { + const buffer = Buffer.from(options.getBase64()!, 'base64'); + fileName = options.getFileName()!; + fileBlob = new File([buffer], fileName, { + type: 'application/json' + }); + } + + else if (options?.getFileObject() as File) { + fileBlob = options?.getFileObject(); + } this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.vaultAPI.fileServiceUploadFile( + (headers: Records.RequestOptions | undefined) => this.client.vaultAPI.fileServiceUploadFile( + fileBlob as unknown as import('buffer').Blob, this.client.vaultId, request.tableName, request.skyflowId, - formData, - headers - ), + { + columnName: request.columnName + } + ).withRawResponse(), TYPES.FILE_UPLOAD ).then(data => { printLog(logs.infoLogs.FILE_UPLOAD_DATA_SUCCESS, MessageType.LOG, this.client.getLogLevel()); @@ -440,15 +467,15 @@ class VaultController { }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.queryAPI.queryServiceExecuteQuery( + (headers: Records.RequestOptions | undefined) => this.client.queryAPI.queryServiceExecuteQuery( this.client.vaultId, query, headers - ), + ).withRawResponse(), TYPES.QUERY - ).then(records => { + ).then(response => { printLog(logs.infoLogs.QUERY_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const processedRecords = records.map(record => ({ + const processedRecords = response.records.map(record => ({ ...record?.fields, tokenizedData: { ...record?.tokens, @@ -476,15 +503,15 @@ class VaultController { //validations checks validateDetokenizeRequest(request, options, this.client.getLogLevel()); - const fields = request.tokens.map(record => ({ token: record, redaction: request?.redactionType || RedactionType.PLAIN_TEXT })) as Array; + const fields = request.data.map(record => ({ token: record.token, redaction: record?.redactionType || RedactionType.DEFAULT })) as Array; const detokenizePayload: V1DetokenizePayload = { detokenizationParameters: fields, continueOnError: options?.getContinueOnError(), downloadURL: options?.getDownloadURL() }; this.handleRequest( - (headers: RawAxiosRequestConfig | undefined) => this.client.tokensAPI.recordServiceDetokenize(this.client.vaultId, detokenizePayload, headers), + (headers: Records.RequestOptions | undefined) => this.client.tokensAPI.recordServiceDetokenize(this.client.vaultId, detokenizePayload, headers).withRawResponse(), TYPES.DETOKENIZE - ).then(records => { + ).then(response => { printLog(logs.infoLogs.DETOKENIZE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - const parsedResponse: ParsedDetokenizeResponse = this.parseDetokenizeResponse(records); + const parsedResponse: ParsedDetokenizeResponse = this.parseDetokenizeResponse(response.records, response.requestId); resolve(new DetokenizeResponse({ detokenizedFields: parsedResponse.success, errors: parsedResponse.errors })); }) .catch(error => { @@ -511,11 +538,11 @@ class VaultController { const tokenizePayload: V1TokenizePayload = { tokenizationParameters: fields }; this.handleRequest( - () => this.client.tokensAPI.recordServiceTokenize(this.client.vaultId, tokenizePayload), + (headers: Records.RequestOptions | undefined) => this.client.tokensAPI.recordServiceTokenize(this.client.vaultId, tokenizePayload,headers).withRawResponse(), TYPES.TOKENIZE - ).then(records => { + ).then(response => { printLog(logs.infoLogs.TOKENIZE_SUCCESS, MessageType.LOG, this.client.getLogLevel()); - resolve(new TokenizeResponse({ tokens: records, errors: [] })) + resolve(new TokenizeResponse({ tokens: response.records, errors: [] })) }) .catch(error => { reject(error); diff --git a/src/vault/model/options/fileUpload/index.ts b/src/vault/model/options/fileUpload/index.ts new file mode 100644 index 00000000..1b0563a0 --- /dev/null +++ b/src/vault/model/options/fileUpload/index.ts @@ -0,0 +1,49 @@ + +class FileUploadOptions { + // Fields with default values + private filePath?: string; + private base64?: string; + private fileObject?: File; + private fileName?: string; + + // Constructor + constructor() { } + + // Setters + setFilePath(filePath: string): void { + this.filePath = filePath; + } + setBase64(base64: string): void { + this.base64 = base64; + } + + setFileObject(fileObject: File): void { + this.fileObject = fileObject; + } + + setFileName(fileName: string): void { + this.fileName = fileName; + } + + + + // Getters + getFilePath(): string | undefined { + return this.filePath; + } + + getBase64(): string | undefined { + return this.base64; + } + + getFileObject(): File | undefined { + return this.fileObject; + } + + getFileName(): string | undefined { + return this.fileName; + } +} + + +export default FileUploadOptions; \ No newline at end of file diff --git a/src/vault/model/options/update/index.ts b/src/vault/model/options/update/index.ts index 3485321e..f6dec32a 100644 --- a/src/vault/model/options/update/index.ts +++ b/src/vault/model/options/update/index.ts @@ -6,7 +6,7 @@ class UpdateOptions { //fields private returnTokens?: boolean; private tokenMode?: TokenMode; - private tokens?: object; + private tokens?: Record; // Constructor constructor() { @@ -16,7 +16,7 @@ class UpdateOptions { this.returnTokens = returnTokens; } - setTokens(tokens: object) { + setTokens(tokens: Record) { this.tokens = tokens; } @@ -28,7 +28,7 @@ class UpdateOptions { return this.tokenMode; } - getTokens(): object | undefined { + getTokens(): Record | undefined { return this.tokens; } diff --git a/src/vault/model/request/detokenize/index.ts b/src/vault/model/request/detokenize/index.ts index 53884447..01a17623 100644 --- a/src/vault/model/request/detokenize/index.ts +++ b/src/vault/model/request/detokenize/index.ts @@ -1,37 +1,24 @@ //imports - -import { RedactionType } from "../../../../utils"; +import { DetokenizeData } from "../../../types"; class DetokenizeRequest { //fields - private _tokens: Array; - private _redactionType?: RedactionType; + private _data: DetokenizeData[]; // Constructor - constructor(tokens: Array, redactionType?: RedactionType) { - this._tokens = tokens; - this._redactionType = redactionType; - } - - // Getter for redactionType - public get redactionType(): RedactionType | undefined { - return this._redactionType; - } - - // Setter for redactionType - public set redactionType(value: RedactionType) { - this._redactionType = value; + constructor(data: DetokenizeData[]) { + this._data = data; } // Getter for tokens - public get tokens(): Array { - return this._tokens; + public get data(): DetokenizeData[] { + return this._data; } // Setter for tokens - public set tokens(value: Array) { - this._tokens = value; + public set data(value: DetokenizeData[]) { + this._data = value; } } diff --git a/src/vault/model/request/file-upload/index.ts b/src/vault/model/request/file-upload/index.ts index 38a4e12f..74acb6ca 100644 --- a/src/vault/model/request/file-upload/index.ts +++ b/src/vault/model/request/file-upload/index.ts @@ -1,60 +1,38 @@ -//imports +// Imports class FileUploadRequest { - - //fields private _tableName: string; private _skyflowId: string; private _columnName: string; - private _filePath: string; // Constructor - constructor(tableName: string, skyflowId: string, columnName: string, filePath: string) { + constructor(tableName: string, skyflowId: string, columnName: string) { this._tableName = tableName; this._skyflowId = skyflowId; this._columnName = columnName; - this._filePath = filePath; - } + } - // Getter for tableName + // Getters and Setters public get tableName(): string { return this._tableName; } - - // Setter for tableName public set tableName(value: string) { this._tableName = value; } - // Getter for skyflowId public get skyflowId(): string { return this._skyflowId; } - - // Setter for skyflowId public set skyflowId(value: string) { this._skyflowId = value; } - // Getter for columnName public get columnName(): string { return this._columnName; } - - // Setter for columnName public set columnName(value: string) { this._columnName = value; } - - // Getter for filePath - public get filePath(): string { - return this._filePath; - } - - // Setter for filePath - public set filePath(value: string) { - this._filePath = value; - } } -export default FileUploadRequest; +export default FileUploadRequest; \ No newline at end of file diff --git a/src/vault/model/request/update/index.ts b/src/vault/model/request/update/index.ts index 3cf82cfc..14f99dd9 100644 --- a/src/vault/model/request/update/index.ts +++ b/src/vault/model/request/update/index.ts @@ -4,10 +4,10 @@ class UpdateRequest { //fields private _tableName: string; - private _data: object; + private _data: Record; // Constructor - constructor(tableName: string, data: object) { + constructor(tableName: string, data: Record) { this._tableName = tableName; this._data = data; } @@ -23,12 +23,12 @@ class UpdateRequest { } // Getter for updateData - public get data(): object { + public get data(): Record { return this._data; } // Setter for updateData - public set data(value: object) { + public set data(value: Record) { this._data = value; } diff --git a/src/vault/types/index.ts b/src/vault/types/index.ts index 2efe1d8d..55a68709 100644 --- a/src/vault/types/index.ts +++ b/src/vault/types/index.ts @@ -1,4 +1,4 @@ -import { LogLevel } from "../../utils"; +import { LogLevel, RedactionType } from "../../utils"; import ConnectionConfig from "../config/connection"; import VaultConfig from "../config/vault" import Credentials from "../config/credentials"; @@ -49,6 +49,7 @@ export interface SuccessDetokenizeResponse { } export interface ErrorDetokenizeResponse { + requestId: string; token: string; error: string; } @@ -59,6 +60,7 @@ export interface ParsedDetokenizeResponse { } export interface ErrorInsertBatchResponse { + requestId: string; requestIndex: number; error: string; } @@ -66,4 +68,9 @@ export interface ErrorInsertBatchResponse { export interface ParsedInsertBatchResponse { success: insertResponseType[]; errors: ErrorInsertBatchResponse[]; +} + +export interface DetokenizeData { + token: string; + redactionType?: RedactionType; } \ No newline at end of file diff --git a/test/service-account/token.test.js b/test/service-account/token.test.js index 7ca2f481..08038ca4 100644 --- a/test/service-account/token.test.js +++ b/test/service-account/token.test.js @@ -12,7 +12,6 @@ import { import SkyflowError from '../../src/error'; import errorMessages from '../../src/error/messages'; import jwt from 'jsonwebtoken'; -import axios from 'axios'; import { LogLevel } from "../../src"; describe("File Validity Tests", () => { @@ -317,10 +316,11 @@ describe('Signed Data Token Generation Test', () => { }); describe('getToken Tests', () => { + let mockClient; const credentials = { clientID: "test-client-id", keyID: "test-key-id", - tokenURI: "https://manage.skyflow.dev", /// remove this URL + tokenURI: "https://test-token-uri.com", // privateKey: "KEY", data: "DATA", }; @@ -342,15 +342,17 @@ describe('getToken Tests', () => { }; const mockTokenResponse = { - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - } + accessToken: 'mocked_access_token', + tokenType: 'Bearer', }; - // Mocking axios and jwt globally for all tests beforeEach(() => { - jest.spyOn(axios, 'post').mockResolvedValue(mockTokenResponse); + mockClient = { + authApi: { + authenticationServiceGetAuthToken: jest.fn(), + }, + }; + jest.spyOn(jwt, 'sign').mockReturnValue('mocked_token'); jest.spyOn(jwt, 'sign').mockReturnValue('mocked_token'); }); @@ -362,35 +364,18 @@ describe('getToken Tests', () => { const runTokenTest = async (creds, logLevel = LogLevel.OFF) => { const result = await getToken(JSON.stringify(creds), { logLevel }); expect(result).toBeDefined(); - expect(result.access_token).toBe('mocked_access_token'); - expect(result.token_type).toBe('Bearer'); - expect(axios.post).toHaveBeenCalledWith( - creds.tokenURI, - expect.anything(), - expect.anything() - ); + expect(result.accessToken).toBe('mocked_access_token'); + expect(result.tokenType).toBe('Bearer'); }; - test("should get token with valid credentials", async () => { - jest.mock('axios'); - axios.post.mockResolvedValue({ - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - }, - }); - await getToken(JSON.stringify(credentials), { logLevel: LogLevel.OFF }); - }); - test("should get Bearer Token with valid credentials", async () => { const filePath = 'test/demo-credentials/valid.json'; - jest.mock('axios'); - axios.post.mockResolvedValue({ - data: { - access_token: 'mocked_access_token', - token_type: 'Bearer', - }, - }); + mockClient.authApi.authenticationServiceGetAuthToken.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockTokenResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); await generateBearerToken(filePath, { logLevel: LogLevel.OFF }); }); diff --git a/test/vault/client/client.test.js b/test/vault/client/client.test.js index 6e769ebc..7ac03949 100644 --- a/test/vault/client/client.test.js +++ b/test/vault/client/client.test.js @@ -1,10 +1,15 @@ import VaultClient from '../../../src/vault/client'; // Adjust the import path -import { Configuration, QueryApi, RecordsApi, TokensApi } from '../../../src/ _generated_/rest'; +import { Query } from '../../../src/ _generated_/rest/api/resources/query/client/Client'; +import { Records } from '../../../src/ _generated_/rest/api/resources/records/client/Client'; +import { Tokens } from '../../../src/ _generated_/rest/api/resources/tokens/client/Client'; import { AuthType, LogLevel, TYPES } from '../../../src/utils'; import { isExpired } from '../../../src/utils/jwt-utils'; import SkyflowError from '../../../src/error'; jest.mock('../../../src/ _generated_/rest'); +jest.mock('../../../src/ _generated_/rest/api/resources/records/client/Client'); +jest.mock('../../../src/ _generated_/rest/api/resources/query/client/Client'); +jest.mock('../../../src/ _generated_/rest/api/resources/tokens/client/Client'); jest.mock('../../../src/utils/jwt-utils'); jest.mock('../../../src/error'); @@ -43,54 +48,54 @@ describe('VaultClient', () => { test('should initialize RecordsApi for DELETE', () => { vaultClient.initAPI(authInfo, TYPES.DELETE); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for FILE_UPLOAD', () => { vaultClient.initAPI(authInfo, TYPES.FILE_UPLOAD); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for GET', () => { vaultClient.initAPI(authInfo, TYPES.GET); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for INSERT', () => { vaultClient.initAPI(authInfo, TYPES.INSERT); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for INSERT_BATCH', () => { vaultClient.initAPI(authInfo, TYPES.INSERT_BATCH); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize RecordsApi for UPDATE', () => { vaultClient.initAPI(authInfo, TYPES.UPDATE); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize TokensApi for DETOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.DETOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize TokensApi for TOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.TOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize QueryApi for QUERY', () => { vaultClient.initAPI(authInfo, TYPES.QUERY); - expect(QueryApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Query).toHaveBeenCalled(); }); test('should not initialize API for unsupported type', () => { vaultClient.initAPI(authInfo, 'UNSUPPORTED_TYPE'); - expect(RecordsApi).not.toHaveBeenCalled(); - expect(TokensApi).not.toHaveBeenCalled(); - expect(QueryApi).not.toHaveBeenCalled(); + expect(Records).not.toHaveBeenCalled(); + expect(Tokens).not.toHaveBeenCalled(); + expect(Query).not.toHaveBeenCalled(); }); }); @@ -116,24 +121,24 @@ describe('VaultClient', () => { test('should initialize RecordsApi for INSERT', () => { vaultClient.initAPI(authInfo, TYPES.INSERT); - expect(RecordsApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Records).toHaveBeenCalled(); }); test('should initialize TokensApi for TOKENIZE', () => { vaultClient.initAPI(authInfo, TYPES.TOKENIZE); - expect(TokensApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Tokens).toHaveBeenCalled(); }); test('should initialize QueryApi for QUERY', () => { vaultClient.initAPI(authInfo, TYPES.QUERY); - expect(QueryApi).toHaveBeenCalledWith(expect.any(Configuration)); + expect(Query).toHaveBeenCalled(); }); test('should not initialize API for unsupported type', () => { vaultClient.initAPI(authInfo, 'UNSUPPORTED'); - expect(RecordsApi).not.toHaveBeenCalled(); - expect(TokensApi).not.toHaveBeenCalled(); - expect(QueryApi).not.toHaveBeenCalled(); + expect(Records).not.toHaveBeenCalled(); + expect(Tokens).not.toHaveBeenCalled(); + expect(Query).not.toHaveBeenCalled(); }); }); @@ -207,163 +212,211 @@ describe('VaultClient', () => { }); describe('failureResponse', () => { - test('should handle JSON error responses correctly', () => { + test('should handle JSON error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { error: { message: 'JSON error occurred', http_status: 400 } }, - status: 400, + rawResponse: { + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ]), }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle JSON error responses with empty error correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { error: { } }, - status: 400, + body: { + error: { + message: 'JSON error occurred', + http_code: 400, + grpc_code: 3, + details: [], + }, }, + statusCode: 400, }; - vaultClient.failureResponse(errorResponse).catch(err => { + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses with empty data correctly', () => { + test('should handle text error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - data: { }, - status: 400, + rawResponse: { + headers: new Map([ + ['content-type', 'text/plain'], + ['x-request-id', 'abc-123'], + ]), }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle JSON error responses without data correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345' }, - status: 400, + body: { + error: { + message: 'Text error occurred', + }, }, + statusCode: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - - test('should handle without error responses correctly', () => { - const errorResponse = {}; - vaultClient.failureResponse(errorResponse).catch(err => { - expect(err).toBeInstanceOf(SkyflowError); - }) - }); - test('should handle text error responses correctly', () => { - const errorResponse = { - response: { - headers: { 'content-type': 'text/plain', 'x-request-id': '12345' }, - data: 'Text error occurred', - status: 500, - }, - }; - vaultClient.failureResponse(errorResponse).catch(err => { + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle errors without content-type correctly', () => { + test('should handle generic error responses with rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'none' }, - status: 500, + rawResponse: { + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + }, + body: { + error: { + message: 'Generic error occurred', + grpc_code: 5, + }, }, + statusCode: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - - test('should handle generic errors without content-type correctly', () => { + + test('should handle rawResponse with error-from-client header correctly', async () => { const errorResponse = { - response: { - headers: {}, - status: 500, + rawResponse: { + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), }, + body: { + error: { + message: 'Client error occurred', + http_code: 403, + grpc_code: 7, + details: [], + }, + }, + statusCode: 403, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }); + } }); - test('should handle JSON error responses correctly with error-from-client header', () => { + + test('should handle JSON error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, } }, + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), + data: { + error: { + message: 'JSON error occurred', + http_status: 400, + grpc_code: 3, + details: [{ field: 'field1', issue: 'issue1' }], + }, + }, status: 400, - }, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses correctly with error-from-client header and details list', () => { + + test('should handle text error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, details: [] } }, - status: 400, - }, + headers: new Map([ + ['content-type', 'text/plain'], + ['x-request-id', 'abc-123'], + ]), + data: 'Text error occurred', + status: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle JSON error responses correctly with error-from-client header and details being null ', () => { + test('should handle generic error responses without rawResponse correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'application/json', 'x-request-id': '12345', 'error-from-client': 'true' }, - data: { error: { message: 'JSON error occurred', http_status: 400, details: null } }, - status: 400, - }, + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + data: { + error: { + message: 'Generic error occurred', + }, + }, + status: 500, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle text error responses correctly with error-from-client header', () => { + test('should handle error responses without content-type correctly', async () => { const errorResponse = { - response: { - headers: { 'content-type': 'text/plain', 'x-request-id': '12345', 'error-from-client': 'false' }, - data: 'Text error occurred', + headers: new Map([ + ['x-request-id', 'abc-123'], + ]), + data: { + error: { + message: 'Error without content-type', + }, + }, status: 500, - }, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }) + } }); - test('should handle generic errors without content-type and with error-from-client header', () => { + test('should handle error responses with error-from-client header correctly', async () => { const errorResponse = { - response: { - headers: {'error-from-client': 'true'}, - status: 500, - }, + headers: new Map([ + ['content-type', 'application/json'], + ['x-request-id', 'abc-123'], + ['error-from-client', 'true'], + ]), + data: { + error: { + message: 'Client error occurred', + http_status: 403, + grpc_code: 7, + details: [], + }, + }, + status: 403, }; - vaultClient.failureResponse(errorResponse).catch(err => { + + try { + await vaultClient.failureResponse(errorResponse); + } catch (err) { expect(err).toBeInstanceOf(SkyflowError); - }); + } }); }); diff --git a/test/vault/controller/connection.test.js b/test/vault/controller/connection.test.js index 1ec65e3c..9e8a0ed8 100644 --- a/test/vault/controller/connection.test.js +++ b/test/vault/controller/connection.test.js @@ -1,126 +1,158 @@ -import axios from "axios"; -import { fillUrlWithPathAndQueryParams, generateSDKMetrics, getBearerToken, LogLevel, MessageType, RequestMethod, parameterizedString, printLog, SDK_METRICS_HEADER_KEY, TYPES } from "../../../src/utils"; -import logs from "../../../src/utils/logs"; +import { + fillUrlWithPathAndQueryParams, + generateSDKMetrics, + getBearerToken, + LogLevel, + RequestMethod, + SDK_METRICS_HEADER_KEY, + SKYFLOW_AUTH_HEADER_KEY, +} from "../../../src/utils"; import { validateInvokeConnectionRequest } from "../../../src/utils/validations"; import VaultClient from "../../../src/vault/client"; import ConnectionController from "../../../src/vault/controller/connections"; -jest.mock("axios"); jest.mock("../../../src/utils"); jest.mock("../../../src/utils/validations"); -describe("ConnectionController", () => { +describe("ConnectionController Tests", () => { let mockClient; let connectionController; beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); mockClient = new VaultClient(); connectionController = new ConnectionController(mockClient); - jest.clearAllMocks(); // Clear previous mocks before each test }); it("should invoke a connection successfully", async () => { - const invokeRequest = { + const token = { key: "bearer_token" }; + + // Mocking methods + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); + mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue(token)); + fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); + generateSDKMetrics.mockReturnValue({ metric: "value" }); + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + global.fetch = jest.fn().mockResolvedValue({ + ok: true, + status: 200, + statusText: "OK", + json: jest.fn().mockResolvedValue({ data: { success: true } }), + headers: { + get: jest.fn().mockImplementation((key) => { + if (key === "x-request-id") return "request_id"; + return null; + }), + }, + }); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, + }; + + const expectedResult = { + data: { success: true }, + metadata: { requestId: "request_id" }, + errors: undefined, }; + + const result = await connectionController.invoke(request); + + expect(fetch).toHaveBeenCalledWith("https://api.example.com/resource", { + method: RequestMethod.POST, + body: JSON.stringify(request.body), + headers: { + ...request.headers, + [SKYFLOW_AUTH_HEADER_KEY]: token.key, + [SDK_METRICS_HEADER_KEY]: JSON.stringify(generateSDKMetrics()), + }, + }); + }); + it("should handle errors in fetch call", async () => { const token = { key: "bearer_token" }; - const response = { data: { success: true }, headers: { 'x-request-id': 'request_id' } }; - - // Mocking implementations + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockResolvedValue(token); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue(token)); fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); generateSDKMetrics.mockReturnValue({ metric: "value" }); - axios.mockResolvedValue(response); - validateInvokeConnectionRequest.mockImplementation(() => {}); // No-op for validation - - const result = await connectionController.invoke(invokeRequest); - - expect(validateInvokeConnectionRequest).toHaveBeenCalledWith(invokeRequest); - expect(getBearerToken).toHaveBeenCalledWith(mockClient.getCredentials(), LogLevel.ERROR); - expect(axios).toHaveBeenCalledWith({ - url: "https://api.example.com/resource", - method: RequestMethod.POST, - data: invokeRequest.body, + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + global.fetch = jest.fn().mockResolvedValue({ + ok: false, + status: 500, + statusText: "Internal Server Error", + json: jest.fn().mockResolvedValue({ error: "Something went wrong" }), headers: { - ...invokeRequest.headers, - 'x-skyflow-authorization': token.key, - [SDK_METRICS_HEADER_KEY]: JSON.stringify(generateSDKMetrics()), + get: jest.fn().mockImplementation(() => null), }, }); - expect(result).toEqual({ data: response.data, metadata: { requestId: 'request_id' } }); - }); - - it("should handle errors in getBearerToken", async () => { - const invokeRequest = { + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; + + const expectedError = { + body: { error: "Something went wrong" }, + statusCode: 500, + message: "Internal Server Error", + headers: expect.anything(), + }; + + await expect(connectionController.invoke(request)).rejects.toThrow(); + }); - // Mocking implementations + it("should handle errors in getBearerToken", async () => { + const tokenError = new Error("Token Error"); + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockRejectedValue(new Error("Token error")); - - await expect(connectionController.invoke(invokeRequest)).rejects.toThrow("Token error"); - }); - - it("should handle errors in axios call", async () => { - const invokeRequest = { + getBearerToken.mockImplementation(jest.fn().mockRejectedValue(tokenError)); + fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); + generateSDKMetrics.mockReturnValue({ metric: "value" }); + validateInvokeConnectionRequest.mockImplementation(jest.fn()); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, - // method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, - }; - - const token = { key: "bearer_token" }; - const errorResponse = { - response: { - status: 500, - data: { message: "Internal Server Error" }, - headers: { 'x-request-id': 'request_id' }, - } + method: RequestMethod.POST, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; + + await expect(connectionController.invoke(request)).rejects.toThrow(); + }); - // Mocking implementations + it("should handle synchronous validation errors", async () => { + const validationError = new Error("Validation Error"); + mockClient.getLogLevel = jest.fn().mockReturnValue(LogLevel.INFO); mockClient.getCredentials = jest.fn().mockReturnValue({ username: "user", password: "pass" }); - getBearerToken.mockResolvedValue(token); + getBearerToken.mockImplementation(jest.fn().mockResolvedValue({ key: "bearer_token" })); fillUrlWithPathAndQueryParams.mockReturnValue("https://api.example.com/resource"); generateSDKMetrics.mockReturnValue({ metric: "value" }); - validateInvokeConnectionRequest.mockImplementation(() => {}); - axios.mockRejectedValue(errorResponse); - mockClient.failureResponse = jest.fn().mockResolvedValue(undefined); - - connectionController.invoke(invokeRequest).catch(err=>{ - expect(err).toBeDefined(); - }) - - expect(mockClient.failureResponse).not.toHaveBeenCalledWith(errorResponse); - }); - - it("should handle synchronous validation errors", async () => { - const invokeRequest = { + validateInvokeConnectionRequest.mockImplementation(() => { + throw validationError; + }); + + const request = { pathParams: { id: "123" }, queryParams: { search: "test" }, body: { data: "sample" }, method: RequestMethod.POST, - headers: { "Custom-Header": "value" }, + headers: { "Content-Type": "application/json", "Custom-Header": "value" }, }; - - const validationError = new Error("Validation error"); - validateInvokeConnectionRequest.mockImplementation(() => { throw validationError; }); - - await expect(connectionController.invoke(invokeRequest)).rejects.toThrow(validationError); + + await expect(connectionController.invoke(request)).rejects.toThrow(); }); }); diff --git a/test/vault/controller/vault.test.js b/test/vault/controller/vault.test.js index e3e9c44b..5adbbab1 100644 --- a/test/vault/controller/vault.test.js +++ b/test/vault/controller/vault.test.js @@ -139,8 +139,18 @@ describe('VaultController insert method', () => { mockVaultClient = { getLogLevel: jest.fn().mockReturnValue('DEBUG'), vaultAPI: { - recordServiceInsertRecord: jest.fn(), - recordServiceBatchOperation: jest.fn(), + recordServiceInsertRecord: jest.fn().mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + records: [{ skyflow_id: 'id123', tokens: {} }], + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })), + recordServiceBatchOperation: jest.fn().mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }], + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })), }, initAPI: jest.fn(), getCredentials: jest.fn().mockReturnValue({}), @@ -162,43 +172,20 @@ describe('VaultController insert method', () => { getUpsertColumn: jest.fn().mockReturnValue(''), getHomogeneous: jest.fn().mockReturnValue(false), getTokenMode: jest.fn().mockReturnValue(''), - getTokens: jest.fn().mockReturnValue([{}]) - }; - const mockResponseData = { records: [{ skyflow_id: 'id123', tokens: {} }] }; - - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); - - const response = await vaultController.insert(mockRequest, mockOptions); - - expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).toHaveBeenCalledWith( - mockVaultClient.vaultId, - mockRequest.tableName, - expect.any(Object), // Request body - expect.any(Object) // Headers - ); - expect(response).toBeInstanceOf(InsertResponse); - expect(response.insertedFields).toHaveLength(1); - }); - - test('should successfully insert records with bulk insert', async () => { - const mockRequest = { - data: [{ field1: 'value1' }], - tableName: 'testTable', - }; - const mockOptions = { - getContinueOnError: jest.fn().mockReturnValue(false), - getReturnTokens: jest.fn().mockReturnValue(true), - getUpsertColumn: jest.fn().mockReturnValue(''), - getHomogeneous: jest.fn().mockReturnValue(false), - getTokenMode: jest.fn().mockReturnValue(''), - getTokens: jest.fn().mockReturnValue([{}]) + getTokens: jest.fn().mockReturnValue([{}]), }; - const mockResponseData = { records: [{ skyflow_id: 'id123', tokens: {} }] }; - - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + records: [{ skyflow_id: 'id456', tokens: { token1: 'value1' } }] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + const response = await vaultController.insert(mockRequest, mockOptions); - + expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).toHaveBeenCalledWith( mockVaultClient.vaultId, mockRequest.tableName, @@ -222,9 +209,13 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([{}]) }; - const mockResponseData = { skyflow_id: 'id123', tokens: {} }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { skyflow_id: 'id123', tokens: {} }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -251,9 +242,15 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = { responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] }; - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -274,10 +271,16 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = { responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, null] }; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, null] + }, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + const response = await vaultController.insert(mockRequest, mockOptions); expect(mockVaultClient.vaultAPI.recordServiceBatchOperation).toHaveBeenCalled(); @@ -297,10 +300,13 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = null; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: null, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); expect(mockVaultClient.vaultAPI.recordServiceBatchOperation).toHaveBeenCalled(); @@ -320,9 +326,14 @@ describe('VaultController insert method', () => { getTokenMode: jest.fn().mockReturnValue(''), getTokens: jest.fn().mockReturnValue([]) }; - const mockResponseData = [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }]; - - mockVaultClient.vaultAPI.recordServiceBatchOperation.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBatchOperation.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: {data: { + responses: [{ Body: { records: [{ skyflow_id: 'id123' }] }, Status: 200 }, { Body: { records: [{ skyflow_id: 'id123' }] }, Status: 400 }] + }}, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); const response = await vaultController.insert(mockRequest, mockOptions); @@ -352,7 +363,7 @@ describe('VaultController insert method', () => { expect(mockVaultClient.vaultAPI.recordServiceInsertRecord).not.toHaveBeenCalled(); }); - test('should log and reject on API error', async () => { + test('should handle errors in the insert second Promise chain', async () => { const mockRequest = { data: [{ field1: 'value1' }], tableName: 'testTable', @@ -362,12 +373,43 @@ describe('VaultController insert method', () => { getReturnTokens: jest.fn().mockReturnValue(true), getUpsertColumn: jest.fn().mockReturnValue(''), getHomogeneous: jest.fn().mockReturnValue(false), - getTokenMode: jest.fn().mockReturnValue('') + getTokenMode: jest.fn().mockReturnValue(''), + getTokens: jest.fn().mockReturnValue({}), }; - const errorResponse = new Error("Validation error"); - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(errorResponse.message); - await expect(vaultController.insert(mockRequest, mockOptions)).rejects.toEqual(errorResponse); + const validationError = new Error("Validation error"); + (validateInsertRequest).mockImplementation(() => { + throw validationError; + }); + + await expect(vaultController.insert(mockRequest, mockOptions)).rejects.toThrow('Validation error'); + }); + + test('should log and reject on API error', async () => { + const mockRequest = { + data: [{ field1: 'value1' }], + tableName: 'testTable', + }; + const mockOptions = { + getContinueOnError: jest.fn().mockReturnValue(false), + getReturnTokens: jest.fn().mockReturnValue(true), + getUpsertColumn: jest.fn().mockReturnValue(''), + getHomogeneous: jest.fn().mockReturnValue(false), + getTokenMode: jest.fn().mockReturnValue(''), + getTokens: jest.fn().mockReturnValue({}), + }; + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); + + try { + await vaultController.insert(mockRequest, mockOptions); + } catch (error) { + expect(error).toBeDefined(); + } }); }); @@ -392,23 +434,34 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -423,22 +476,34 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records with different request', async () => { const mockRequest = { - tokens: ['token1', 'token2'], + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(false), getDownloadURL: jest.fn().mockReturnValue(true) }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -453,19 +518,31 @@ describe('VaultController detokenize method', () => { test('should successfully detokenize records with empty options', async () => { const mockRequest = { - tokens: ['token1', 'token2'], + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockDetokenizeResponse = { - data: { - records: [ - { token: 'token1', value: 'value1' }, - { token: 'token2', error: 'error2' } - ] - } + records: [ + { token: 'token1', value: 'value1' }, + { token: 'token2', error: 'error2' } + ] }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest); @@ -480,20 +557,31 @@ describe('VaultController detokenize method', () => { test('should return unknown detokenize records', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) }; const mockDetokenizeResponse = { - data: { - records: {} - } + records: {} }; - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(mockDetokenizeResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockDetokenizeResponse, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }) + })); const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -508,9 +596,18 @@ describe('VaultController detokenize method', () => { test('should reject detokenize records with validation error', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; + const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), getDownloadURL: jest.fn().mockReturnValue(false) @@ -525,7 +622,16 @@ describe('VaultController detokenize method', () => { test('should handle API error during detokenize', async () => { const mockRequest = { - tokens: ['token1', 'token2'] + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -535,8 +641,13 @@ describe('VaultController detokenize method', () => { validateDetokenizeRequest.mockImplementation(() => { // throw new Error('Validation error'); }); + const errorResponse = new Error("Invalid"); - mockVaultClient.tokensAPI.recordServiceDetokenize.mockRejectedValueOnce(errorResponse); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.detokenize(mockRequest, mockOptions)).rejects.toThrow('Invalid'); expect(mockVaultClient.tokensAPI.recordServiceDetokenize).toHaveBeenCalled(); @@ -544,8 +655,16 @@ describe('VaultController detokenize method', () => { test('should log and resolve with empty arrays when no records are returned', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -556,7 +675,12 @@ describe('VaultController detokenize method', () => { // throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceDetokenize.mockResolvedValueOnce(new Error("Invalid")); + const errorResponse = new Error("Invalid"); + mockVaultClient.tokensAPI.recordServiceDetokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); try { const response = await vaultController.detokenize(mockRequest, mockOptions); @@ -567,8 +691,16 @@ describe('VaultController detokenize method', () => { test('should reject when an unexpected error occurs', async () => { const mockRequest = { - tokens: ['token1', 'token2'], - redactionType: 'PLAIN_TEXT', + data: [ + { + token: 'token1', + redactionType: 'PLAIN_TEXT', + }, + { + token: 'token2', + redactionType: 'PLAIN_TEXT', + } + ] }; const mockOptions = { getContinueOnError: jest.fn().mockReturnValue(true), @@ -612,7 +744,12 @@ describe('VaultController delete method', () => { }; const mockResponseData = { RecordIDResponse: ['id123'] }; - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.delete(mockRequest); @@ -651,7 +788,11 @@ describe('VaultController delete method', () => { validateDeleteRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.delete(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord).toHaveBeenCalled(); @@ -666,7 +807,12 @@ describe('VaultController delete method', () => { validateDeleteRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockResolvedValueOnce({ data: mockResponseData }); + mockVaultClient.vaultAPI.recordServiceBulkDeleteRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.delete(mockRequest); @@ -713,16 +859,18 @@ describe('VaultController tokenize method', () => { const mockRequest = { values: [{ value: 'sensitiveData', columnGroup: 'group1' }], }; - const mockResponseData = { data: { records: [{ token: 'token123' }] } }; + const mockResponseData = { records: [{ token: 'token123' }] }; - mockVaultClient.tokensAPI.recordServiceTokenize.mockResolvedValueOnce(mockResponseData); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.tokenize(mockRequest); - expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalledWith( - mockVaultClient.vaultId, - expect.any(Object) // Tokenize payload - ); + expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalled(); expect(response).toBeInstanceOf(TokenizeResponse); expect(response.tokens).toHaveLength(1); expect(response.errors).toHaveLength(0); @@ -751,7 +899,11 @@ describe('VaultController tokenize method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.tokensAPI.recordServiceTokenize.mockRejectedValueOnce(errorResponse.message); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.tokenize(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.tokensAPI.recordServiceTokenize).toHaveBeenCalled(); @@ -766,7 +918,12 @@ describe('VaultController tokenize method', () => { validateTokenizeRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceTokenize.mockResolvedValueOnce(mockResponseData); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try { const response = await vaultController.tokenize(mockRequest); @@ -784,7 +941,11 @@ describe('VaultController tokenize method', () => { validateTokenizeRequest.mockImplementation(() => { throw new Error('Validation error'); }); - mockVaultClient.tokensAPI.recordServiceTokenize.mockRejectedValueOnce(errorResponse); + mockVaultClient.tokensAPI.recordServiceTokenize.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.tokenize(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.tokensAPI.recordServiceTokenize).not.toHaveBeenCalled(); @@ -814,12 +975,19 @@ describe('VaultController query method', () => { const mockRequest = { query: 'SELECT * FROM table WHERE id=1', }; - const mockResponseData = {data:{ records: [{ - fields: { id: '1', name: 'test' }, - tokens: { id: 'token123' }, - }]}}; + const mockResponseData = { + records: [{ + fields: { id: '1', name: 'test' }, + tokens: { id: 'token123' }, + }] + }; - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.query(mockRequest); @@ -841,7 +1009,12 @@ describe('VaultController query method', () => { }; const mockResponseData = {data:null}; - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.query(mockRequest); @@ -877,7 +1050,12 @@ describe('VaultController query method', () => { validateQueryRequest.mockImplementation(() => { // throw new Error('Validation error'); }); - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockRejectedValueOnce(errorResponse); + + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.query(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.queryAPI.queryServiceExecuteQuery).toHaveBeenCalled(); @@ -889,7 +1067,12 @@ describe('VaultController query method', () => { }; const mockResponseData = []; // Simulate no records returned - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockResolvedValueOnce(mockResponseData); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.query(mockRequest); } catch(err){ @@ -903,7 +1086,11 @@ describe('VaultController query method', () => { }; const errorResponse = new Error('Invalid'); - mockVaultClient.queryAPI.queryServiceExecuteQuery.mockRejectedValueOnce(errorResponse); + mockVaultClient.queryAPI.queryServiceExecuteQuery.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + } + }); await expect(vaultController.query(mockRequest)).rejects.toEqual(errorResponse); expect(mockVaultClient.queryAPI.queryServiceExecuteQuery).toHaveBeenCalled(); @@ -940,9 +1127,14 @@ describe('VaultController update method', () => { getTokenMode: jest.fn().mockReturnValue("DISABLE"), getTokens: jest.fn().mockReturnValue({}), }; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -966,9 +1158,14 @@ describe('VaultController update method', () => { tableName: 'testTable', }; const mockOptions = null; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -995,9 +1192,14 @@ describe('VaultController update method', () => { getTokenMode: jest.fn().mockReturnValue("ENABLE"), getTokens: jest.fn().mockReturnValue({}), }; - const mockResponseData = {data: { skyflow_id: 'id123', tokens: { field1: 'token123' } }}; + const mockResponseData = { skyflow_id: 'id123', tokens: { field1: 'token123' } }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.update(mockRequest, mockOptions); @@ -1049,7 +1251,9 @@ describe('VaultController update method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + })); await expect(vaultController.update(mockRequest, mockOptions)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceUpdateRecord).toHaveBeenCalled(); @@ -1067,7 +1271,12 @@ describe('VaultController update method', () => { }; const mockResponseData = { skyflow_id: 'id123' }; - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.update(mockRequest, mockOptions); @@ -1091,7 +1300,9 @@ describe('VaultController update method', () => { }); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceUpdateRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(errorResponse) + })); await expect(vaultController.update(mockRequest, mockOptions)).rejects.toEqual(errorResponse); expect(mockVaultClient.vaultAPI.recordServiceUpdateRecord).toHaveBeenCalled(); @@ -1101,8 +1312,8 @@ describe('VaultController update method', () => { describe('VaultController uploadFile method', () => { let mockVaultClient; let vaultController; - let mockFormData; let mockFs; + let mockPath; beforeEach(() => { mockVaultClient = { @@ -1115,103 +1326,152 @@ describe('VaultController uploadFile method', () => { vaultId: 'vault123', failureResponse: jest.fn().mockRejectedValueOnce(new SkyflowError({http_code:500,message:"Invalid"})) }; - mockFormData = require('form-data'); mockFs = require('fs'); + mockPath = require('path'); vaultController = new VaultController(mockVaultClient); jest.clearAllMocks(); }); - test('should successfully upload file', async () => { + test('should successfully upload file using filePath', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockOptions = { + getFilePath: jest.fn().mockReturnValue('/path/to/file'), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), }; - const mockResponseData = {data:{ skyflow_id: 'id123' }}; + const mockFileBuffer = Buffer.from('file content'); + const mockFileName = 'file.json'; + jest.spyOn(mockFs, 'readFileSync').mockReturnValueOnce(mockFileBuffer); + jest.spyOn(mockPath, 'basename').mockReturnValueOnce(mockFileName); - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockResolvedValueOnce(mockResponseData); + const mockResponseData = { skyflow_id: 'id123' }; - const response = await vaultController.uploadFile(mockRequest); + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - expect(mockFs.createReadStream).toHaveBeenCalledWith(mockRequest.filePath); + const response = await vaultController.uploadFile(mockRequest, mockOptions); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); expect(response).toBeInstanceOf(FileUploadResponse); expect(response.skyflowId).toBe('id123'); expect(response.errors).toHaveLength(0); }); - test('should handle validation errors during upload', async () => { + test('should successfully upload file using base64', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', }; + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn().mockReturnValue('base64string'), + getFileObject: jest.fn(), + getFileName: jest.fn().mockReturnValue('file.json'), + }; + const mockBuffer = Buffer.from('base64string', 'base64'); + const mockResponseData = { skyflow_id: 'id123' }; + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - validateUploadFileRequest.mockImplementation(() => { - throw new Error('Validation error'); - }); + const response = await vaultController.uploadFile(mockRequest, mockOptions); - await expect(vaultController.uploadFile(mockRequest)).rejects.toThrow('Validation error'); - expect(validateUploadFileRequest).toHaveBeenCalled(); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); + expect(response).toBeInstanceOf(FileUploadResponse); + expect(response.skyflowId).toBe('id123'); + expect(response.errors).toHaveLength(0); }); - test('should handle file stream creation failure', async () => { + test('should successfully upload file using fileObject', async () => { const mockRequest = { - filePath: '/path/to/nonexistent/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockFileObject = new File(['file content'], 'file.json', { type: 'application/json' }); + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn(), + getFileObject: jest.fn().mockReturnValue(mockFileObject), + getFileName: jest.fn(), }; + const mockResponseData = { skyflow_id: 'id123' }; + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); - jest.spyOn(mockFs, 'createReadStream').mockImplementationOnce(() => { - throw new Error('Validation error'); - }); + const response = await vaultController.uploadFile(mockRequest, mockOptions); - await expect(vaultController.uploadFile(mockRequest)).rejects.toThrow('Validation error'); - expect(mockFs.createReadStream).not.toHaveBeenCalledWith(mockRequest.filePath); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); + expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); + expect(response).toBeInstanceOf(FileUploadResponse); + expect(response.skyflowId).toBe('id123'); + expect(response.errors).toHaveLength(0); }); - test('should handle API errors during file upload', async () => { + test('should handle validation errors during upload', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', + }; + const mockOptions = { + getFilePath: jest.fn(), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), }; - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); + validateUploadFileRequest.mockImplementation(() => { - // throw new Error('Validation error'); + throw new Error('Validation error'); }); - const errorResponse = new Error('Validation error'); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockRejectedValueOnce(errorResponse); - await expect(vaultController.uploadFile(mockRequest)).rejects.toEqual(errorResponse); + await expect(vaultController.uploadFile(mockRequest, mockOptions)).rejects.toThrow('Validation error'); + expect(validateUploadFileRequest).toHaveBeenCalled(); expect(mockVaultClient.vaultAPI.fileServiceUploadFile).not.toHaveBeenCalled(); }); - test('should log and reject errors during file upload', async () => { + test('should handle API errors during file upload', async () => { const mockRequest = { - filePath: '/path/to/file', - columnName: 'testColumn', tableName: 'testTable', skyflowId: 'id123', + columnName: 'testColumn', }; - const mockStream = { on: jest.fn() }; - jest.spyOn(mockFs, 'createReadStream').mockReturnValueOnce(mockStream); + const mockOptions = { + getFilePath: jest.fn().mockReturnValue('/path/to/file'), + getBase64: jest.fn(), + getFileObject: jest.fn(), + getFileName: jest.fn(), + }; + const mockFileBuffer = Buffer.from('file content'); + jest.spyOn(mockFs, 'readFileSync').mockReturnValueOnce(mockFileBuffer); + mockVaultClient.vaultAPI.fileServiceUploadFile.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); - const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.fileServiceUploadFile.mockRejectedValueOnce(errorResponse); + try { + await vaultController.uploadFile(mockRequest, mockOptions) + } catch (error) { + expect(error).toBeDefined(); + } - await expect(vaultController.uploadFile(mockRequest)).rejects.toEqual(errorResponse); - expect(mockVaultClient.vaultAPI.fileServiceUploadFile).toHaveBeenCalled(); - // expect(printLog).toHaveBeenCalledWith(errorResponse.message, MessageType.ERROR, mockVaultClient.getLogLevel()); }); }); @@ -1239,9 +1499,14 @@ describe('VaultController get method', () => { test('should successfully get records for GetRequest', async () => { const mockRequest = createGetRequest(['id1', 'id2']); - const mockResponseData = { data: { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] } }; + const mockResponseData = { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] }; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest); @@ -1256,7 +1521,7 @@ describe('VaultController get method', () => { test('should successfully get records for GetRequest with options', async () => { const mockRequest = createGetRequest(['id1', 'id2']); - const mockResponseData = { data: { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] } }; + const mockResponseData = { records: [{ fields: { field1: 'value1' } }, { fields: { field2: 'value2' } }] }; const mockOptions = { getRedactionType: jest.fn().mockReturnValue(true), getReturnTokens: jest.fn().mockReturnValue(true), @@ -1267,7 +1532,12 @@ describe('VaultController get method', () => { getOrderBy: jest.fn().mockReturnValue(true) }; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest,mockOptions); @@ -1282,9 +1552,14 @@ describe('VaultController get method', () => { test('should successfully get records for GetColumnRequest', async () => { const mockRequest = createGetColumnRequest('columnName', ['value1', 'value2']); - const mockResponseData = { data: { records:[{ fields: { field1: 'value1' } }]}}; + const mockResponseData = { records:[{ fields: { field1: 'value1' } }]}; - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); const response = await vaultController.get(mockRequest); @@ -1328,7 +1603,11 @@ describe('VaultController get method', () => { const errorResponse = new Error('Invalid'); validateGetRequest.mockImplementation(() => { }); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + }; + }); await expect(vaultController.get(mockRequest)).rejects.toEqual(errorResponse); @@ -1340,7 +1619,11 @@ describe('VaultController get method', () => { const mockRequest = createGetRequest(['id1']); const errorResponse = new Error('Invalid'); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockRejectedValueOnce(errorResponse); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(errorResponse), + }; + }); await expect(vaultController.get(mockRequest)).rejects.toEqual(errorResponse); }); @@ -1350,7 +1633,12 @@ describe('VaultController get method', () => { const mockResponseData = [{ fields: { field1: 'value1' } }]; validateGetRequest.mockImplementation(() => { }); - mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockResolvedValueOnce(mockResponseData); + mockVaultClient.vaultAPI.recordServiceBulkGetRecord.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValueOnce({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } } + }) + })); try{ const response = await vaultController.get(mockRequest); @@ -1399,10 +1687,19 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); + // You can check if the error contains the right message try { await vaultController.insert({ tableName: 'users', data: [{}] }); @@ -1423,7 +1720,15 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); @@ -1444,7 +1749,15 @@ describe('VaultController Error Handling', () => { }, }; - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); @@ -1459,7 +1772,15 @@ describe('VaultController Error Handling', () => { test('failureResponse should handle generic error when no response object', async () => { const mockError = new Error('Network Error'); - mockVaultClient.vaultAPI.recordServiceInsertRecord.mockRejectedValueOnce(mockError); + mockVaultClient.failureResponse.mockImplementation((error) => { + return Promise.reject(new Error('Processed failure response')); + }); + + mockVaultClient.vaultAPI.recordServiceInsertRecord.mockImplementation(() => { + return { + withRawResponse: jest.fn().mockRejectedValue(mockError), + }; + }); await expect(vaultController.insert({ tableName: 'users', data: [{}] })).rejects.toThrow(SkyflowError); diff --git a/tsconfig.json b/tsconfig.json index fe5799a5..03e5aeef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,9 +3,10 @@ "sourceMap": true, "noImplicitAny": false, "target": "es6", - "lib": ["es2015", "es2017", "dom"], + "lib": ["es2015", "es2017", "es2019", "dom"], "esModuleInterop": true, "module": "commonjs", + "moduleResolution": "node", "removeComments": true, "allowSyntheticDefaultImports": true, "allowJs": true, From 42822d4e787a41d5369741ee6bba92a49d17b61e Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 08:53:07 +0000 Subject: [PATCH 02/22] [AUTOMATED] Private Release 2.0.0-beta.3-dev.d6b0257 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 21054320..4db1df61 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.1-dev.ad67c9b", + "version": "2.0.0-beta.3-dev.d6b0257", "description": "Skyflow SDK for Node.js", "main": "./lib/index.js", "module": "./lib/index.js", From a5e9d14877ec2192f0839843ec9a100616afc61a Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 14:36:58 +0530 Subject: [PATCH 03/22] SK-2001: update common release workflow --- .github/workflows/common-release.yml | 4 ++-- samples/vault-api/detokenzie-records.ts | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/common-release.yml b/.github/workflows/common-release.yml index a752624d..b9e26997 100644 --- a/.github/workflows/common-release.yml +++ b/.github/workflows/common-release.yml @@ -18,7 +18,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@v1 with: - node-version: 16.20.2 + node-version: '20.x' - name: Install Packages run: npm install @@ -77,7 +77,7 @@ jobs: run: | if [[ "${{ inputs.tag }}" == "beta" ]]; then npm publish --tag beta - if [[ "${{ inputs.tag }}" == "public" ]]; then + elif [[ "${{ inputs.tag }}" == "public" ]]; then npm publish elif [[ "${{ inputs.tag }}" == "internal" ]]; then curl -u ${{ secrets.JFROG_USERNAME }}:${{ secrets.JFROG_PASSWORD }} https://prekarilabs.jfrog.io/prekarilabs/api/npm/auth/ > ~/.npmrc diff --git a/samples/vault-api/detokenzie-records.ts b/samples/vault-api/detokenzie-records.ts index 298f2578..f17547a1 100644 --- a/samples/vault-api/detokenzie-records.ts +++ b/samples/vault-api/detokenzie-records.ts @@ -9,7 +9,8 @@ import { Skyflow, SkyflowError, VaultConfig, - SkyflowConfig + SkyflowConfig, + DetokenizeData } from 'skyflow-node'; /** @@ -46,13 +47,20 @@ async function performDetokenization() { const skyflowClient: Skyflow = new Skyflow(skyflowConfig); // Step 4: Prepare Detokenization Data - const detokenizeData: Array = ['token1', 'token2', 'token3']; // Tokens to be detokenized - const redactionType: RedactionType = RedactionType.REDACTED; // Redaction type + const detokenizeData: DetokenizeData[] = [ + { + token: "token1", // Token to be detokenized + redactionType: RedactionType.PLAIN_TEXT, // Redaction type + }, + { + token: "token2", // Token to be detokenized + redactionType: RedactionType.MASKED, // Redaction type + }, + ]; // Create Detokenize Request const detokenizeRequest: DetokenizeRequest = new DetokenizeRequest( - detokenizeData, - redactionType + detokenizeData ); // Configure Detokenize Options @@ -83,4 +91,4 @@ async function performDetokenization() { } // Invoke the detokenization function -performDetokenization(); +performDetokenization(); \ No newline at end of file From fbd7efbe8bb6bd4f423cea34f31329a2d707c68e Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 09:07:47 +0000 Subject: [PATCH 04/22] [AUTOMATED] Private Release 2.0.0-beta.3-dev.a5e9d14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4db1df61..3108a0f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.d6b0257", + "version": "2.0.0-beta.3-dev.a5e9d14", "description": "Skyflow SDK for Node.js", "main": "./lib/index.js", "module": "./lib/index.js", From d1a30964371b3fe45ee062b659045b4915b29cbd Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 14:39:45 +0530 Subject: [PATCH 05/22] SK-2001: removed npm usafe-perm --- .github/workflows/common-release.yml | 1 - samples/vault-api/detokenzie-records.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/common-release.yml b/.github/workflows/common-release.yml index b9e26997..d8eeadc7 100644 --- a/.github/workflows/common-release.yml +++ b/.github/workflows/common-release.yml @@ -82,7 +82,6 @@ jobs: elif [[ "${{ inputs.tag }}" == "internal" ]]; then curl -u ${{ secrets.JFROG_USERNAME }}:${{ secrets.JFROG_PASSWORD }} https://prekarilabs.jfrog.io/prekarilabs/api/npm/auth/ > ~/.npmrc npm config set registry https://prekarilabs.jfrog.io/prekarilabs/api/npm/npm/ - npm config set unsafe-perm true npm publish fi env: diff --git a/samples/vault-api/detokenzie-records.ts b/samples/vault-api/detokenzie-records.ts index f17547a1..cd80ef13 100644 --- a/samples/vault-api/detokenzie-records.ts +++ b/samples/vault-api/detokenzie-records.ts @@ -91,4 +91,4 @@ async function performDetokenization() { } // Invoke the detokenization function -performDetokenization(); \ No newline at end of file +performDetokenization(); From 8afdf9e7205eb594f8ab9dc0cbd300b307b1e9ba Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 09:10:53 +0000 Subject: [PATCH 06/22] [AUTOMATED] Private Release 2.0.0-beta.3-dev.d1a3096 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3108a0f0..14cd6f0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.a5e9d14", + "version": "2.0.0-beta.3-dev.d1a3096", "description": "Skyflow SDK for Node.js", "main": "./lib/index.js", "module": "./lib/index.js", From fc182c821935bf3f90f77f40cec9dbae6a89744e Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 14:42:39 +0530 Subject: [PATCH 07/22] SK-2001: added npm config fix --- .github/workflows/common-release.yml | 1 + samples/vault-api/detokenzie-records.ts | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/common-release.yml b/.github/workflows/common-release.yml index d8eeadc7..c7ec0dd1 100644 --- a/.github/workflows/common-release.yml +++ b/.github/workflows/common-release.yml @@ -82,6 +82,7 @@ jobs: elif [[ "${{ inputs.tag }}" == "internal" ]]; then curl -u ${{ secrets.JFROG_USERNAME }}:${{ secrets.JFROG_PASSWORD }} https://prekarilabs.jfrog.io/prekarilabs/api/npm/auth/ > ~/.npmrc npm config set registry https://prekarilabs.jfrog.io/prekarilabs/api/npm/npm/ + npm config fix npm publish fi env: diff --git a/samples/vault-api/detokenzie-records.ts b/samples/vault-api/detokenzie-records.ts index cd80ef13..c72642b7 100644 --- a/samples/vault-api/detokenzie-records.ts +++ b/samples/vault-api/detokenzie-records.ts @@ -75,7 +75,6 @@ async function performDetokenization() { // Handle Successful Response console.log('Detokenization successful:', response); - } catch (error) { // Comprehensive Error Handling if (error instanceof SkyflowError) { From dc6f3f696a90a217bf71ae6c47cd4b725ffc93e0 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Sat, 26 Apr 2025 09:13:32 +0000 Subject: [PATCH 08/22] [AUTOMATED] Private Release 2.0.0-beta.3-dev.fc182c8 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 14cd6f0d..6c8f9d92 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.d1a3096", + "version": "2.0.0-beta.3-dev.fc182c8", "description": "Skyflow SDK for Node.js", "main": "./lib/index.js", "module": "./lib/index.js", From 0faee11207ec720e627c9ef2b82da184ce698595 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 28 Apr 2025 10:41:58 +0530 Subject: [PATCH 09/22] SK-2001: fix error status --- src/vault/client/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vault/client/index.ts b/src/vault/client/index.ts index 49134eb0..fdae0c2b 100644 --- a/src/vault/client/index.ts +++ b/src/vault/client/index.ts @@ -176,8 +176,8 @@ class VaultClient { if (isNewFormat) { let description = data?.message; - const statusCode = data?.http_code; const grpcCode = data?.grpc_code; + const status = data?.http_status; let details = data?.details || []; if (errorFromClient !== undefined) { @@ -186,7 +186,7 @@ class VaultClient { : [{ errorFromClient }]; } - this.logAndRejectError(description, err, requestId, reject, statusCode, grpcCode, details, isNewFormat); + this.logAndRejectError(description, err, requestId, reject, status, grpcCode, details, isNewFormat); } else { let description = data; const statusCode = description?.statusCode; From a546645385d037e80efc79ed78b958a7dedf6ed1 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 28 Apr 2025 05:13:03 +0000 Subject: [PATCH 10/22] [AUTOMATED] Private Release 2.0.0-beta.3-dev.0faee11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c8f9d92..2a604f3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.fc182c8", + "version": "2.0.0-beta.3-dev.0faee11", "description": "Skyflow SDK for Node.js", "main": "./lib/index.js", "module": "./lib/index.js", From 55fe16020f6ef8e96571e1b44cb116c85fa57f4e Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 28 Apr 2025 18:08:53 +0530 Subject: [PATCH 11/22] SK-2001: updated vault client --- src/vault/client/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vault/client/index.ts b/src/vault/client/index.ts index fdae0c2b..2bd1095d 100644 --- a/src/vault/client/index.ts +++ b/src/vault/client/index.ts @@ -156,7 +156,7 @@ class VaultClient { const { isNewFormat, contentType, requestId, errorFromClient } = this.normalizeErrorMeta(err); const data = isNewFormat ? err?.body?.error : err; - + if (contentType) { if (contentType.includes('application/json')) { this.handleJsonError(err, data, requestId, reject, errorFromClient); @@ -214,7 +214,9 @@ class VaultClient { } const description = isNewFormat ? data?.message: data?.body?.error?.message; - this.logAndRejectError(description, err, requestId, reject, undefined, undefined, details, isNewFormat); + const status = isNewFormat ? data?.http_status : err?.body?.error?.http_status; + const grpcCode = isNewFormat ? data?.grpc_code : err?.body?.error?.grpc_code; + this.logAndRejectError(description, err, requestId, reject, status, grpcCode, details, isNewFormat); } @@ -254,7 +256,7 @@ class VaultClient { ) { printLog(description, MessageType.ERROR, this.getLogLevel()); reject(new SkyflowError({ - http_code: isNewError ? err?.statusCode : err?.response?.status || 400, + http_code: isNewError ? err?.statusCode : err?.body?.error?.http_code || 400, message: description, request_ID: requestId, grpc_code: grpcCode, From 199438b9f1522f24bc31cb0efe26b33b2e06ebe3 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Tue, 29 Apr 2025 13:13:14 +0530 Subject: [PATCH 12/22] SK-1996: Added detect generated code using fern --- src/ _generated_/rest/Client.ts | 18 + .../rest/api/errors/BadRequestError.ts | 2 +- .../rest/api/errors/InternalServerError.ts | 19 + .../rest/api/errors/NotFoundError.ts | 2 +- .../rest/api/errors/UnauthorizedError.ts | 2 +- src/ _generated_/rest/api/errors/index.ts | 1 + .../rest/api/resources/audit/client/Client.ts | 5 +- .../resources/authentication/client/Client.ts | 15 +- .../api/resources/binLookup/client/Client.ts | 5 +- .../api/resources/deprecated/client/Client.ts | 305 +++++ .../api/resources/deprecated/client/index.ts | 1 + .../DetectServiceDetectStatusRequest.ts | 14 + .../DetectServiceDetectTextRequest.ts | 34 + .../client/requests/V1DetectFileRequest.ts | 46 + .../deprecated/client/requests/index.ts | 3 + .../rest/api/resources/deprecated/index.ts | 1 + .../rest/api/resources/files/client/Client.ts | 1100 +++++++++++++++++ .../rest/api/resources/files/client/index.ts | 1 + .../client/requests/DeidentifyAudioRequest.ts | 47 + .../requests/DeidentifyDocumentRequest.ts | 35 + .../client/requests/DeidentifyFileRequest.ts | 35 + .../client/requests/DeidentifyImageRequest.ts | 41 + .../client/requests/DeidentifyPdfRequest.ts | 39 + .../requests/DeidentifyPresentationRequest.ts | 35 + .../requests/DeidentifySpreadsheetRequest.ts | 35 + .../DeidentifyStructuredTextRequest.ts | 35 + .../client/requests/DeidentifyTextRequest.ts | 35 + .../files/client/requests/GetRunRequest.ts | 28 + .../resources/files/client/requests/index.ts | 10 + .../rest/api/resources/files/index.ts | 2 + .../files/types/DeidentifyAudioRequestFile.ts | 15 + .../DeidentifyAudioRequestFileDataFormat.ts | 12 + ...identifyAudioRequestOutputTranscription.ts | 20 + .../types/DeidentifyDocumentRequestFile.ts | 15 + ...DeidentifyDocumentRequestFileDataFormat.ts | 13 + .../files/types/DeidentifyFileRequestFile.ts | 15 + .../DeidentifyFileRequestFileDataFormat.ts | 48 + .../files/types/DeidentifyImageRequestFile.ts | 15 + .../DeidentifyImageRequestFileDataFormat.ts | 16 + .../DeidentifyImageRequestMaskingMethod.ts | 12 + .../files/types/DeidentifyPdfRequestFile.ts | 13 + .../DeidentifyPresentationRequestFile.ts | 15 + ...entifyPresentationRequestFileDataFormat.ts | 12 + .../types/DeidentifySpreadsheetRequestFile.ts | 15 + ...dentifySpreadsheetRequestFileDataFormat.ts | 13 + .../DeidentifyStructuredTextRequestFile.ts | 15 + ...tifyStructuredTextRequestFileDataFormat.ts | 12 + .../files/types/DeidentifyTextRequestFile.ts | 13 + .../rest/api/resources/files/types/index.ts | 18 + src/ _generated_/rest/api/resources/index.ts | 8 + .../rest/api/resources/query/client/Client.ts | 5 +- .../api/resources/records/client/Client.ts | 68 +- .../requests/FileServiceUploadFileRequest.ts | 5 +- .../api/resources/strings/client/Client.ts | 277 +++++ .../api/resources/strings/client/index.ts | 1 + .../requests/DeidentifyStringRequest.ts | 72 ++ .../requests/ReidentifyStringRequest.ts | 21 + .../strings/client/requests/index.ts | 2 + .../rest/api/resources/strings/index.ts | 2 + .../types/ReidentifyStringRequestFormat.ts | 17 + .../rest/api/resources/strings/types/index.ts | 1 + .../api/resources/tokens/client/Client.ts | 10 +- .../api/types/AdvancedOptionsColumnMapping.ts | 17 + .../types/AdvancedOptionsEntityColumnMap.ts | 14 + .../api/types/AdvancedOptionsVaultSchema.ts | 14 + src/ _generated_/rest/api/types/AllowRegex.ts | 8 + .../api/types/AudioConfigTranscriptionType.ts | 41 + .../rest/api/types/DeidentifyFileOutput.ts | 17 + .../DeidentifyFileOutputProcessedFileType.ts | 30 + .../rest/api/types/DeidentifyFileResponse.ts | 11 + .../api/types/DeidentifyStatusResponse.ts | 31 + .../DeidentifyStatusResponseOutputType.ts | 12 + .../types/DeidentifyStatusResponseStatus.ts | 13 + .../api/types/DeidentifyStringResponse.ts | 19 + .../rest/api/types/DetectDataAccuracy.ts | 35 + .../rest/api/types/DetectDataEntities.ts | 200 +++ .../api/types/DetectFileRequestDataType.ts | 15 + .../types/DetectRequestDeidentifyOption.ts | 17 + .../rest/api/types/DetectedEntity.ts | 20 + .../rest/api/types/EntityLocation.ts | 17 + src/ _generated_/rest/api/types/EntityType.ts | 136 ++ .../rest/api/types/EntityTypes.ts | 10 + .../rest/api/types/ErrorResponse.ts | 9 + .../rest/api/types/ErrorResponseError.ts | 14 + .../rest/api/types/ErrorString.ts | 8 + .../ProcessedFileOutputProcessedFileType.ts | 41 + .../api/types/ReidentifyStringResponse.ts | 11 + src/ _generated_/rest/api/types/ResourceId.ts | 8 + .../rest/api/types/RestrictRegex.ts | 8 + src/ _generated_/rest/api/types/TokenType.ts | 18 + .../rest/api/types/TokenTypeDefault.ts | 10 + .../rest/api/types/TokenTypeWithoutVault.ts | 16 + .../api/types/TokenTypeWithoutVaultDefault.ts | 9 + .../rest/api/types/Transformations.ts | 13 + .../api/types/TransformationsShiftDates.ts | 17 + ...ransformationsShiftDatesEntityTypesItem.ts | 10 + src/ _generated_/rest/api/types/Uuid.ts | 8 + .../rest/api/types/V1AdvancedOptions.ts | 16 + .../rest/api/types/V1AudioConfig.ts | 15 + .../rest/api/types/V1AudioOptions.ts | 19 + .../rest/api/types/V1DetectFileResponse.ts | 11 + .../rest/api/types/V1DetectStatusResponse.ts | 16 + .../api/types/V1DetectStatusResponseStatus.ts | 19 + .../rest/api/types/V1DetectTextRequest.ts | 30 + .../rest/api/types/V1DetectTextResponse.ts | 15 + .../rest/api/types/V1FileDataFormat.ts | 68 + .../rest/api/types/V1ImageOptions.ts | 13 + .../rest/api/types/V1Locations.ts | 17 + .../rest/api/types/V1PdfConfig.ts | 12 + .../rest/api/types/V1PdfOptions.ts | 13 + .../rest/api/types/V1ProcessedFileOutput.ts | 15 + .../rest/api/types/V1ResponseEntities.ts | 20 + src/ _generated_/rest/api/types/VaultId.ts | 8 + src/ _generated_/rest/api/types/index.ts | 51 + src/utils/index.ts | 66 + src/vault/controller/detect/index.ts | 9 +- .../model/options/deidentify-text/index.ts | 65 + .../deidentify-text/token-format/index.ts | 50 + .../deidentify-text/transformations/index.ts | 19 + .../model/request/deidentify-text/index.ts | 21 + src/vault/skyflow/index.ts | 50 +- src/vault/types/index.ts | 5 +- 122 files changed, 4164 insertions(+), 103 deletions(-) create mode 100644 src/ _generated_/rest/api/errors/InternalServerError.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectStatusRequest.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectTextRequest.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/requests/V1DetectFileRequest.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/deprecated/index.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyAudioRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyDocumentRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyFileRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyImageRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPdfRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPresentationRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifySpreadsheetRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyStructuredTextRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/DeidentifyTextRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/GetRunRequest.ts create mode 100644 src/ _generated_/rest/api/resources/files/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/files/index.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestOutputTranscription.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestMaskingMethod.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyPdfRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFileDataFormat.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/DeidentifyTextRequestFile.ts create mode 100644 src/ _generated_/rest/api/resources/files/types/index.ts create mode 100644 src/ _generated_/rest/api/resources/strings/client/Client.ts create mode 100644 src/ _generated_/rest/api/resources/strings/client/index.ts create mode 100644 src/ _generated_/rest/api/resources/strings/client/requests/DeidentifyStringRequest.ts create mode 100644 src/ _generated_/rest/api/resources/strings/client/requests/ReidentifyStringRequest.ts create mode 100644 src/ _generated_/rest/api/resources/strings/client/requests/index.ts create mode 100644 src/ _generated_/rest/api/resources/strings/index.ts create mode 100644 src/ _generated_/rest/api/resources/strings/types/ReidentifyStringRequestFormat.ts create mode 100644 src/ _generated_/rest/api/resources/strings/types/index.ts create mode 100644 src/ _generated_/rest/api/types/AdvancedOptionsColumnMapping.ts create mode 100644 src/ _generated_/rest/api/types/AdvancedOptionsEntityColumnMap.ts create mode 100644 src/ _generated_/rest/api/types/AdvancedOptionsVaultSchema.ts create mode 100644 src/ _generated_/rest/api/types/AllowRegex.ts create mode 100644 src/ _generated_/rest/api/types/AudioConfigTranscriptionType.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyFileOutput.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyFileOutputProcessedFileType.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyFileResponse.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyStatusResponse.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyStatusResponseOutputType.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyStatusResponseStatus.ts create mode 100644 src/ _generated_/rest/api/types/DeidentifyStringResponse.ts create mode 100644 src/ _generated_/rest/api/types/DetectDataAccuracy.ts create mode 100644 src/ _generated_/rest/api/types/DetectDataEntities.ts create mode 100644 src/ _generated_/rest/api/types/DetectFileRequestDataType.ts create mode 100644 src/ _generated_/rest/api/types/DetectRequestDeidentifyOption.ts create mode 100644 src/ _generated_/rest/api/types/DetectedEntity.ts create mode 100644 src/ _generated_/rest/api/types/EntityLocation.ts create mode 100644 src/ _generated_/rest/api/types/EntityType.ts create mode 100644 src/ _generated_/rest/api/types/EntityTypes.ts create mode 100644 src/ _generated_/rest/api/types/ErrorResponse.ts create mode 100644 src/ _generated_/rest/api/types/ErrorResponseError.ts create mode 100644 src/ _generated_/rest/api/types/ErrorString.ts create mode 100644 src/ _generated_/rest/api/types/ProcessedFileOutputProcessedFileType.ts create mode 100644 src/ _generated_/rest/api/types/ReidentifyStringResponse.ts create mode 100644 src/ _generated_/rest/api/types/ResourceId.ts create mode 100644 src/ _generated_/rest/api/types/RestrictRegex.ts create mode 100644 src/ _generated_/rest/api/types/TokenType.ts create mode 100644 src/ _generated_/rest/api/types/TokenTypeDefault.ts create mode 100644 src/ _generated_/rest/api/types/TokenTypeWithoutVault.ts create mode 100644 src/ _generated_/rest/api/types/TokenTypeWithoutVaultDefault.ts create mode 100644 src/ _generated_/rest/api/types/Transformations.ts create mode 100644 src/ _generated_/rest/api/types/TransformationsShiftDates.ts create mode 100644 src/ _generated_/rest/api/types/TransformationsShiftDatesEntityTypesItem.ts create mode 100644 src/ _generated_/rest/api/types/Uuid.ts create mode 100644 src/ _generated_/rest/api/types/V1AdvancedOptions.ts create mode 100644 src/ _generated_/rest/api/types/V1AudioConfig.ts create mode 100644 src/ _generated_/rest/api/types/V1AudioOptions.ts create mode 100644 src/ _generated_/rest/api/types/V1DetectFileResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1DetectStatusResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1DetectStatusResponseStatus.ts create mode 100644 src/ _generated_/rest/api/types/V1DetectTextRequest.ts create mode 100644 src/ _generated_/rest/api/types/V1DetectTextResponse.ts create mode 100644 src/ _generated_/rest/api/types/V1FileDataFormat.ts create mode 100644 src/ _generated_/rest/api/types/V1ImageOptions.ts create mode 100644 src/ _generated_/rest/api/types/V1Locations.ts create mode 100644 src/ _generated_/rest/api/types/V1PdfConfig.ts create mode 100644 src/ _generated_/rest/api/types/V1PdfOptions.ts create mode 100644 src/ _generated_/rest/api/types/V1ProcessedFileOutput.ts create mode 100644 src/ _generated_/rest/api/types/V1ResponseEntities.ts create mode 100644 src/ _generated_/rest/api/types/VaultId.ts create mode 100644 src/vault/model/options/deidentify-text/index.ts create mode 100644 src/vault/model/options/deidentify-text/token-format/index.ts create mode 100644 src/vault/model/options/deidentify-text/transformations/index.ts create mode 100644 src/vault/model/request/deidentify-text/index.ts diff --git a/src/ _generated_/rest/Client.ts b/src/ _generated_/rest/Client.ts index ebbf651b..0ca90c4e 100644 --- a/src/ _generated_/rest/Client.ts +++ b/src/ _generated_/rest/Client.ts @@ -10,6 +10,9 @@ import { Records } from "./api/resources/records/client/Client"; import { Tokens } from "./api/resources/tokens/client/Client"; import { Query } from "./api/resources/query/client/Client"; import { Authentication } from "./api/resources/authentication/client/Client"; +import { Deprecated } from "./api/resources/deprecated/client/Client"; +import { Strings } from "./api/resources/strings/client/Client"; +import { Files } from "./api/resources/files/client/Client"; export declare namespace SkyflowClient { export interface Options { @@ -39,6 +42,9 @@ export class SkyflowClient { protected _tokens: Tokens | undefined; protected _query: Query | undefined; protected _authentication: Authentication | undefined; + protected _deprecated: Deprecated | undefined; + protected _strings: Strings | undefined; + protected _files: Files | undefined; constructor(protected readonly _options: SkyflowClient.Options) {} @@ -65,4 +71,16 @@ export class SkyflowClient { public get authentication(): Authentication { return (this._authentication ??= new Authentication(this._options)); } + + public get deprecated(): Deprecated { + return (this._deprecated ??= new Deprecated(this._options)); + } + + public get strings(): Strings { + return (this._strings ??= new Strings(this._options)); + } + + public get files(): Files { + return (this._files ??= new Files(this._options)); + } } diff --git a/src/ _generated_/rest/api/errors/BadRequestError.ts b/src/ _generated_/rest/api/errors/BadRequestError.ts index e19131a1..1776da9a 100644 --- a/src/ _generated_/rest/api/errors/BadRequestError.ts +++ b/src/ _generated_/rest/api/errors/BadRequestError.ts @@ -6,7 +6,7 @@ import * as errors from "../../errors/index"; import * as core from "../../core"; export class BadRequestError extends errors.SkyflowError { - constructor(body: Record, rawResponse?: core.RawResponse) { + constructor(body?: unknown, rawResponse?: core.RawResponse) { super({ message: "BadRequestError", statusCode: 400, diff --git a/src/ _generated_/rest/api/errors/InternalServerError.ts b/src/ _generated_/rest/api/errors/InternalServerError.ts new file mode 100644 index 00000000..4141147e --- /dev/null +++ b/src/ _generated_/rest/api/errors/InternalServerError.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as errors from "../../errors/index"; +import * as Skyflow from "../index"; +import * as core from "../../core"; + +export class InternalServerError extends errors.SkyflowError { + constructor(body: Skyflow.ErrorResponse, rawResponse?: core.RawResponse) { + super({ + message: "InternalServerError", + statusCode: 500, + body: body, + rawResponse: rawResponse, + }); + Object.setPrototypeOf(this, InternalServerError.prototype); + } +} diff --git a/src/ _generated_/rest/api/errors/NotFoundError.ts b/src/ _generated_/rest/api/errors/NotFoundError.ts index ff59e84a..357bc100 100644 --- a/src/ _generated_/rest/api/errors/NotFoundError.ts +++ b/src/ _generated_/rest/api/errors/NotFoundError.ts @@ -6,7 +6,7 @@ import * as errors from "../../errors/index"; import * as core from "../../core"; export class NotFoundError extends errors.SkyflowError { - constructor(body: Record, rawResponse?: core.RawResponse) { + constructor(body?: unknown, rawResponse?: core.RawResponse) { super({ message: "NotFoundError", statusCode: 404, diff --git a/src/ _generated_/rest/api/errors/UnauthorizedError.ts b/src/ _generated_/rest/api/errors/UnauthorizedError.ts index 73c2b114..5dc2279b 100644 --- a/src/ _generated_/rest/api/errors/UnauthorizedError.ts +++ b/src/ _generated_/rest/api/errors/UnauthorizedError.ts @@ -6,7 +6,7 @@ import * as errors from "../../errors/index"; import * as core from "../../core"; export class UnauthorizedError extends errors.SkyflowError { - constructor(body: Record, rawResponse?: core.RawResponse) { + constructor(body?: unknown, rawResponse?: core.RawResponse) { super({ message: "UnauthorizedError", statusCode: 401, diff --git a/src/ _generated_/rest/api/errors/index.ts b/src/ _generated_/rest/api/errors/index.ts index f88b64db..07acead1 100644 --- a/src/ _generated_/rest/api/errors/index.ts +++ b/src/ _generated_/rest/api/errors/index.ts @@ -1,3 +1,4 @@ export * from "./NotFoundError"; export * from "./BadRequestError"; export * from "./UnauthorizedError"; +export * from "./InternalServerError"; diff --git a/src/ _generated_/rest/api/resources/audit/client/Client.ts b/src/ _generated_/rest/api/resources/audit/client/Client.ts index 89b42416..a184cd0a 100644 --- a/src/ _generated_/rest/api/resources/audit/client/Client.ts +++ b/src/ _generated_/rest/api/resources/audit/client/Client.ts @@ -253,10 +253,7 @@ export class Audit { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/resources/authentication/client/Client.ts b/src/ _generated_/rest/api/resources/authentication/client/Client.ts index 7c3b0039..63edf19c 100644 --- a/src/ _generated_/rest/api/resources/authentication/client/Client.ts +++ b/src/ _generated_/rest/api/resources/authentication/client/Client.ts @@ -91,20 +91,11 @@ export class Authentication { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 400: - throw new Skyflow.BadRequestError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); case 401: - throw new Skyflow.UnauthorizedError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/resources/binLookup/client/Client.ts b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts index 2a88056a..f25ff9d6 100644 --- a/src/ _generated_/rest/api/resources/binLookup/client/Client.ts +++ b/src/ _generated_/rest/api/resources/binLookup/client/Client.ts @@ -88,10 +88,7 @@ export class BinLookup { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/resources/deprecated/client/Client.ts b/src/ _generated_/rest/api/resources/deprecated/client/Client.ts new file mode 100644 index 00000000..77006f92 --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/Client.ts @@ -0,0 +1,305 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Deprecated { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Deprecated { + constructor(protected readonly _options: Deprecated.Options) {} + + /** + * Note: This operation is deprecated. Use one of the De-identify File operations.

Detects and deidentifies sensitive data from image, audio, and video files. + * + * @param {Skyflow.V1DetectFileRequest} request + * @param {Deprecated.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.deprecated.detectServiceDetectFileInput({ + * file: "fkdjfhdlnnggtsjj...", + * data_format: "mp3", + * input_type: "BASE64", + * vault_id: "a372f752689c9bfc8ca3d4dba", + * restrict_entity_types: ["name", "age", "location", "ssn", "bank_account", "credit_card", "credit_card_expiration", "cvv", "date", "date_interval", "dob", "driver_license", "email_address", "healthcare_number", "numerical_pii", "phone_number", "medical_code", "account_number", "gender_sexuality", "name_medical_professional", "occupation", "organization", "organization_medical_facility"], + * return_entities: true, + * accuracy: "high_multilingual", + * audio: { + * output_transcription: "none", + * output_processed_audio: false + * } + * }) + */ + public detectServiceDetectFileInput( + request: Skyflow.V1DetectFileRequest, + requestOptions?: Deprecated.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__detectServiceDetectFileInput(request, requestOptions)); + } + + private async __detectServiceDetectFileInput( + request: Skyflow.V1DetectFileRequest, + requestOptions?: Deprecated.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/file", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DetectFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/detect/file."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Note: This operation is deprecated. Use Get Detect Run.

Returns the status of a file deidentification request. + * + * @param {string} id - ID of the deidentification request. + * @param {Skyflow.DetectServiceDetectStatusRequest} request + * @param {Deprecated.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.deprecated.detectServiceDetectStatus("ID") + */ + public detectServiceDetectStatus( + id: string, + request: Skyflow.DetectServiceDetectStatusRequest = {}, + requestOptions?: Deprecated.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__detectServiceDetectStatus(id, request, requestOptions)); + } + + private async __detectServiceDetectStatus( + id: string, + request: Skyflow.DetectServiceDetectStatusRequest = {}, + requestOptions?: Deprecated.RequestOptions, + ): Promise> { + const { vault_id: vaultId } = request; + const _queryParams: Record = {}; + if (vaultId != null) { + _queryParams["vault_id"] = vaultId; + } + + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/detect/status/${encodeURIComponent(id)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DetectStatusResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling GET /v1/detect/status/{ID}."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Note: This operation is deprecated. Use De-identify String.

Detects and deidentifies sensitive data from text. + * + * @param {Skyflow.DetectServiceDetectTextRequest} request + * @param {Deprecated.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.NotFoundError} + * + * @example + * await client.deprecated.detectServiceDetectText({ + * text: "text", + * vault_id: "c848741aefb74bf38780da5399a76507" + * }) + */ + public detectServiceDetectText( + request: Skyflow.DetectServiceDetectTextRequest, + requestOptions?: Deprecated.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__detectServiceDetectText(request, requestOptions)); + } + + private async __detectServiceDetectText( + request: Skyflow.DetectServiceDetectTextRequest, + requestOptions?: Deprecated.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/text", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.V1DetectTextResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 404: + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/detect/text."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/deprecated/client/index.ts b/src/ _generated_/rest/api/resources/deprecated/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectStatusRequest.ts b/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectStatusRequest.ts new file mode 100644 index 00000000..aa322f8e --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectStatusRequest.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * @example + * {} + */ +export interface DetectServiceDetectStatusRequest { + /** + * ID of the vault. + */ + vault_id?: string; +} diff --git a/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectTextRequest.ts b/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectTextRequest.ts new file mode 100644 index 00000000..2ca28786 --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/requests/DetectServiceDetectTextRequest.ts @@ -0,0 +1,34 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * text: "text", + * vault_id: "c848741aefb74bf38780da5399a76507" + * } + */ +export interface DetectServiceDetectTextRequest { + /** Data to deidentify. */ + text: string; + /** ID of the vault. */ + vault_id: string; + /** Will give a handle to delete the tokens generated during a specific interaction. */ + session_id?: string; + /** Entities to detect and deidentify. */ + restrict_entity_types?: Skyflow.DetectDataEntities[]; + deidentify_token_format?: Skyflow.DetectRequestDeidentifyOption; + /** Regular expressions to ignore when detecting entities. */ + allow_regex?: string[]; + /** Regular expressions to always restrict. Strings matching these regular expressions are replaced with 'RESTRICTED'. */ + restrict_regex?: string[]; + /** If `true`, returns the details for the detected entities. */ + return_entities?: boolean; + accuracy?: Skyflow.DetectDataAccuracy; + advanced_options?: Skyflow.V1AdvancedOptions; + /** Indicates whether entities should be stored in the vault. */ + store_entities?: boolean; +} diff --git a/src/ _generated_/rest/api/resources/deprecated/client/requests/V1DetectFileRequest.ts b/src/ _generated_/rest/api/resources/deprecated/client/requests/V1DetectFileRequest.ts new file mode 100644 index 00000000..8164b613 --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/requests/V1DetectFileRequest.ts @@ -0,0 +1,46 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * file: "fkdjfhdlnnggtsjj...", + * data_format: "mp3", + * input_type: "BASE64", + * vault_id: "a372f752689c9bfc8ca3d4dba", + * restrict_entity_types: ["name", "age", "location", "ssn", "bank_account", "credit_card", "credit_card_expiration", "cvv", "date", "date_interval", "dob", "driver_license", "email_address", "healthcare_number", "numerical_pii", "phone_number", "medical_code", "account_number", "gender_sexuality", "name_medical_professional", "occupation", "organization", "organization_medical_facility"], + * return_entities: true, + * accuracy: "high_multilingual", + * audio: { + * output_transcription: "none", + * output_processed_audio: false + * } + * } + */ +export interface V1DetectFileRequest { + /** Path of the file or base64-encoded data that has to be processed. */ + file: string; + data_format: Skyflow.V1FileDataFormat; + input_type: Skyflow.DetectFileRequestDataType; + /** ID of the vault. */ + vault_id: string; + /** Will give a handle to delete the tokens generated during a specific interaction. */ + session_id?: string; + /** Entities to detect and deidentify. */ + restrict_entity_types?: Skyflow.DetectDataEntities[]; + /** Regular expressions to ignore when detecting entities. */ + allow_regex?: string[]; + /** Regular expressions to always restrict. Strings matching these regular expressions are replaced with 'RESTRICTED'. */ + restrict_regex?: string[]; + /** If `true`, returns the details for the detected entities. */ + return_entities?: boolean; + accuracy?: Skyflow.DetectDataAccuracy; + audio?: Skyflow.V1AudioConfig; + image?: Skyflow.V1ImageOptions; + pdf?: Skyflow.V1PdfConfig; + advanced_options?: Skyflow.V1AdvancedOptions; + deidentify_token_format?: Skyflow.DetectRequestDeidentifyOption; +} diff --git a/src/ _generated_/rest/api/resources/deprecated/client/requests/index.ts b/src/ _generated_/rest/api/resources/deprecated/client/requests/index.ts new file mode 100644 index 00000000..7720b72e --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/client/requests/index.ts @@ -0,0 +1,3 @@ +export { type V1DetectFileRequest } from "./V1DetectFileRequest"; +export { type DetectServiceDetectStatusRequest } from "./DetectServiceDetectStatusRequest"; +export { type DetectServiceDetectTextRequest } from "./DetectServiceDetectTextRequest"; diff --git a/src/ _generated_/rest/api/resources/deprecated/index.ts b/src/ _generated_/rest/api/resources/deprecated/index.ts new file mode 100644 index 00000000..5ec76921 --- /dev/null +++ b/src/ _generated_/rest/api/resources/deprecated/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/files/client/Client.ts b/src/ _generated_/rest/api/resources/files/client/Client.ts new file mode 100644 index 00000000..02e6bfca --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/Client.ts @@ -0,0 +1,1100 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Files { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Files { + constructor(protected readonly _options: Files.Options) {} + + /** + * De-identifies sensitive data from a file. This operation includes options applicable to all supported file types.

For more specific options, see the category-specific operations (like De-identify Document) and the file type-specific opertions (like De-identify PDF). + * + * @param {Skyflow.DeidentifyFileRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyFile({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * }) + * + * @example + * await client.files.deidentifyFile({ + * vault_id: "VAULT_ID", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * }) + */ + public deidentifyFile( + request: Skyflow.DeidentifyFileRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyFile(request, requestOptions)); + } + + private async __deidentifyFile( + request: Skyflow.DeidentifyFileRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling POST /v1/detect/deidentify/file."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a document file. This operation includes options applicable to all supported document file types.

For more specific options, see the file type-specific opertions (like De-identify PDF) where they're available. For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyDocumentRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyDocument({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "docx" + * } + * }) + * + * @example + * await client.files.deidentifyDocument({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "docx" + * } + * }) + */ + public deidentifyDocument( + request: Skyflow.DeidentifyDocumentRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyDocument(request, requestOptions)); + } + + private async __deidentifyDocument( + request: Skyflow.DeidentifyDocumentRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/document", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/document.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a PDF file. This operation includes options specific to PDF files.

For broader file type support, see De-identify Document and De-identify File. + * + * @param {Skyflow.DeidentifyPdfRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyPdf({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "pdf" + * } + * }) + * + * @example + * await client.files.deidentifyPdf({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "pdf" + * } + * }) + */ + public deidentifyPdf( + request: Skyflow.DeidentifyPdfRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyPdf(request, requestOptions)); + } + + private async __deidentifyPdf( + request: Skyflow.DeidentifyPdfRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/document/pdf", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/document/pdf.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from an image file. This operation includes options applicable to all supported image file types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyImageRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyImage({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "jpg" + * } + * }) + * + * @example + * await client.files.deidentifyImage({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "jpg" + * } + * }) + */ + public deidentifyImage( + request: Skyflow.DeidentifyImageRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyImage(request, requestOptions)); + } + + private async __deidentifyImage( + request: Skyflow.DeidentifyImageRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/image", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/image.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a text file. This operation includes options applicable to all supported image text types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyTextRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyText({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * }) + * + * @example + * await client.files.deidentifyText({ + * vault_id: "VAULT_ID", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * }) + */ + public deidentifyText( + request: Skyflow.DeidentifyTextRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyText(request, requestOptions)); + } + + private async __deidentifyText( + request: Skyflow.DeidentifyTextRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/text", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/text.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a structured text file. This operation includes options applicable to all supported structured text file types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyStructuredTextRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyStructuredText({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "json" + * } + * }) + * + * @example + * await client.files.deidentifyStructuredText({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "json" + * } + * }) + */ + public deidentifyStructuredText( + request: Skyflow.DeidentifyStructuredTextRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyStructuredText(request, requestOptions)); + } + + private async __deidentifyStructuredText( + request: Skyflow.DeidentifyStructuredTextRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/structured_text", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/structured_text.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a spreadsheet file. This operation includes options applicable to all supported spreadsheet file types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifySpreadsheetRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifySpreadsheet({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "csv" + * } + * }) + * + * @example + * await client.files.deidentifySpreadsheet({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "csv" + * } + * }) + */ + public deidentifySpreadsheet( + request: Skyflow.DeidentifySpreadsheetRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifySpreadsheet(request, requestOptions)); + } + + private async __deidentifySpreadsheet( + request: Skyflow.DeidentifySpreadsheetRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/spreadsheet", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/spreadsheet.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from a presentation file. This operation includes options applicable to all supported presentation file types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyPresentationRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyPresentation({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "pptx" + * } + * }) + * + * @example + * await client.files.deidentifyPresentation({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "pptx" + * } + * }) + */ + public deidentifyPresentation( + request: Skyflow.DeidentifyPresentationRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyPresentation(request, requestOptions)); + } + + private async __deidentifyPresentation( + request: Skyflow.DeidentifyPresentationRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/presentation", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/presentation.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * De-identifies sensitive data from an audio file. This operation includes options applicable to all supported audio file types.

For broader file type support, see De-identify File. + * + * @param {Skyflow.DeidentifyAudioRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.deidentifyAudio({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "mp3" + * } + * }) + * + * @example + * await client.files.deidentifyAudio({ + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "mp3" + * } + * }) + */ + public deidentifyAudio( + request: Skyflow.DeidentifyAudioRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyAudio(request, requestOptions)); + } + + private async __deidentifyAudio( + request: Skyflow.DeidentifyAudioRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/file/audio", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyFileResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/file/audio.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Returns the status of the detect run. + * + * @param {Skyflow.Uuid} runId - ID of the detect run. + * @param {Skyflow.GetRunRequest} request + * @param {Files.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.NotFoundError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.files.getRun("run_id", { + * vault_id: "vault_id" + * }) + */ + public getRun( + runId: Skyflow.Uuid, + request: Skyflow.GetRunRequest, + requestOptions?: Files.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__getRun(runId, request, requestOptions)); + } + + private async __getRun( + runId: Skyflow.Uuid, + request: Skyflow.GetRunRequest, + requestOptions?: Files.RequestOptions, + ): Promise> { + const { vault_id: vaultId } = request; + const _queryParams: Record = {}; + _queryParams["vault_id"] = vaultId; + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + `v1/detect/runs/${encodeURIComponent(runId)}`, + ), + method: "GET", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + queryParameters: _queryParams, + requestType: "json", + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyStatusResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 404: + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError("Timeout exceeded when calling GET /v1/detect/runs/{run_id}."); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/files/client/index.ts b/src/ _generated_/rest/api/resources/files/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyAudioRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyAudioRequest.ts new file mode 100644 index 00000000..1da9531d --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyAudioRequest.ts @@ -0,0 +1,47 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "mp3" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "mp3" + * } + * } + */ +export interface DeidentifyAudioRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyAudioRequestFile; + /** If `true`, includes processed audio file in the response. */ + output_processed_audio?: boolean; + /** Type of transcription to output. */ + output_transcription?: Skyflow.DeidentifyAudioRequestOutputTranscription; + /** Relative loudness of the bleep in dB. Positive values increase its loudness, and negative values decrease it. */ + bleep_gain?: number; + /** The pitch of the bleep sound, in Hz. The higher the number, the higher the pitch. */ + bleep_frequency?: number; + /** Padding added to the beginning of a bleep, in seconds. */ + bleep_start_padding?: number; + /** Padding added to the end of a bleep, in seconds. */ + bleep_stop_padding?: number; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyDocumentRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyDocumentRequest.ts new file mode 100644 index 00000000..3b4e7b89 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyDocumentRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "docx" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "docx" + * } + * } + */ +export interface DeidentifyDocumentRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyDocumentRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyFileRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyFileRequest.ts new file mode 100644 index 00000000..4a549f24 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyFileRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * } + */ +export interface DeidentifyFileRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyFileRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyImageRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyImageRequest.ts new file mode 100644 index 00000000..f34f70f2 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyImageRequest.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "jpg" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "jpg" + * } + * } + */ +export interface DeidentifyImageRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyImageRequestFile; + /** If `true`, includes processed image in the output. */ + output_processed_image?: boolean; + /** If `true`, includes OCR text output in the response. */ + output_ocr_text?: boolean; + /** Method to mask the entities in the image. */ + masking_method?: Skyflow.DeidentifyImageRequestMaskingMethod; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPdfRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPdfRequest.ts new file mode 100644 index 00000000..0ffcd8fc --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPdfRequest.ts @@ -0,0 +1,39 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "pdf" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "pdf" + * } + * } + */ +export interface DeidentifyPdfRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyPdfRequestFile; + /** Pixel density at which to process the PDF file. */ + density?: number; + /** Max resolution at which to process the PDF file. */ + max_resolution?: number; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPresentationRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPresentationRequest.ts new file mode 100644 index 00000000..ee660819 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyPresentationRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "pptx" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "pptx" + * } + * } + */ +export interface DeidentifyPresentationRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyPresentationRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifySpreadsheetRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifySpreadsheetRequest.ts new file mode 100644 index 00000000..9560ed75 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifySpreadsheetRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "csv" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "csv" + * } + * } + */ +export interface DeidentifySpreadsheetRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifySpreadsheetRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyStructuredTextRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyStructuredTextRequest.ts new file mode 100644 index 00000000..74daccbb --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyStructuredTextRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "SGkgaSBhbSBEZXZhbnNodSwgbGl2...aW5nIGluIGNhbGlmb3JuaWEuIA==", + * data_format: "json" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "BASE64_DATA", + * data_format: "json" + * } + * } + */ +export interface DeidentifyStructuredTextRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyStructuredTextRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyTextRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyTextRequest.ts new file mode 100644 index 00000000..66af6144 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/DeidentifyTextRequest.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * file: { + * base64: "Zm9vYmFy", + * data_format: "txt" + * } + * } + */ +export interface DeidentifyTextRequest { + vault_id: Skyflow.VaultId; + /** File to de-identify. Files are specified as Base64-encoded data. */ + file: Skyflow.DeidentifyTextRequestFile; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenTypeWithoutVault; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/GetRunRequest.ts b/src/ _generated_/rest/api/resources/files/client/requests/GetRunRequest.ts new file mode 100644 index 00000000..4feb3c84 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/GetRunRequest.ts @@ -0,0 +1,28 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "vault_id" + * } + * + * @example + * { + * vault_id: "vault_id" + * } + * + * @example + * { + * vault_id: "vault_id" + * } + */ +export interface GetRunRequest { + /** + * ID of the vault. + */ + vault_id: Skyflow.ResourceId; +} diff --git a/src/ _generated_/rest/api/resources/files/client/requests/index.ts b/src/ _generated_/rest/api/resources/files/client/requests/index.ts new file mode 100644 index 00000000..d01e1608 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/client/requests/index.ts @@ -0,0 +1,10 @@ +export { type DeidentifyFileRequest } from "./DeidentifyFileRequest"; +export { type DeidentifyDocumentRequest } from "./DeidentifyDocumentRequest"; +export { type DeidentifyPdfRequest } from "./DeidentifyPdfRequest"; +export { type DeidentifyImageRequest } from "./DeidentifyImageRequest"; +export { type DeidentifyTextRequest } from "./DeidentifyTextRequest"; +export { type DeidentifyStructuredTextRequest } from "./DeidentifyStructuredTextRequest"; +export { type DeidentifySpreadsheetRequest } from "./DeidentifySpreadsheetRequest"; +export { type DeidentifyPresentationRequest } from "./DeidentifyPresentationRequest"; +export { type DeidentifyAudioRequest } from "./DeidentifyAudioRequest"; +export { type GetRunRequest } from "./GetRunRequest"; diff --git a/src/ _generated_/rest/api/resources/files/index.ts b/src/ _generated_/rest/api/resources/files/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFile.ts new file mode 100644 index 00000000..fb5bb6a9 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyAudioRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyAudioRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFileDataFormat.ts new file mode 100644 index 00000000..87938c0a --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestFileDataFormat.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyAudioRequestFileDataFormat = "mp3" | "wav"; +export const DeidentifyAudioRequestFileDataFormat = { + Mp3: "mp3", + Wav: "wav", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestOutputTranscription.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestOutputTranscription.ts new file mode 100644 index 00000000..b370f8b3 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyAudioRequestOutputTranscription.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of transcription to output. + */ +export type DeidentifyAudioRequestOutputTranscription = + | "diarized_transcription" + | "medical_diarized_transcription" + | "medical_transcription" + | "plaintext_transcription" + | "transcription"; +export const DeidentifyAudioRequestOutputTranscription = { + DiarizedTranscription: "diarized_transcription", + MedicalDiarizedTranscription: "medical_diarized_transcription", + MedicalTranscription: "medical_transcription", + PlaintextTranscription: "plaintext_transcription", + Transcription: "transcription", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFile.ts new file mode 100644 index 00000000..b3894b96 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyDocumentRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyDocumentRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFileDataFormat.ts new file mode 100644 index 00000000..850c863f --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyDocumentRequestFileDataFormat.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyDocumentRequestFileDataFormat = "doc" | "docx" | "pdf"; +export const DeidentifyDocumentRequestFileDataFormat = { + Doc: "doc", + Docx: "docx", + Pdf: "pdf", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFile.ts new file mode 100644 index 00000000..749adb46 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyFileRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyFileRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFileDataFormat.ts new file mode 100644 index 00000000..5927453a --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyFileRequestFileDataFormat.ts @@ -0,0 +1,48 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyFileRequestFileDataFormat = + | "bmp" + | "csv" + | "doc" + | "docx" + | "jpeg" + | "jpg" + | "json" + | "mp3" + | "pdf" + | "png" + | "ppt" + | "pptx" + | "tif" + | "tiff" + | "txt" + | "wav" + | "xls" + | "xlsx" + | "xml"; +export const DeidentifyFileRequestFileDataFormat = { + Bmp: "bmp", + Csv: "csv", + Doc: "doc", + Docx: "docx", + Jpeg: "jpeg", + Jpg: "jpg", + Json: "json", + Mp3: "mp3", + Pdf: "pdf", + Png: "png", + Ppt: "ppt", + Pptx: "pptx", + Tif: "tif", + Tiff: "tiff", + Txt: "txt", + Wav: "wav", + Xls: "xls", + Xlsx: "xlsx", + Xml: "xml", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFile.ts new file mode 100644 index 00000000..da7cb1c2 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyImageRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyImageRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFileDataFormat.ts new file mode 100644 index 00000000..00a407fa --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestFileDataFormat.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyImageRequestFileDataFormat = "bmp" | "jpeg" | "jpg" | "png" | "tif" | "tiff"; +export const DeidentifyImageRequestFileDataFormat = { + Bmp: "bmp", + Jpeg: "jpeg", + Jpg: "jpg", + Png: "png", + Tif: "tif", + Tiff: "tiff", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestMaskingMethod.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestMaskingMethod.ts new file mode 100644 index 00000000..ced4ca50 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyImageRequestMaskingMethod.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Method to mask the entities in the image. + */ +export type DeidentifyImageRequestMaskingMethod = "blackout" | "blur"; +export const DeidentifyImageRequestMaskingMethod = { + Blackout: "blackout", + Blur: "blur", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyPdfRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyPdfRequestFile.ts new file mode 100644 index 00000000..f8efc2b5 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyPdfRequestFile.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyPdfRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: "pdf"; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFile.ts new file mode 100644 index 00000000..57871605 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyPresentationRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyPresentationRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFileDataFormat.ts new file mode 100644 index 00000000..94f9d253 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyPresentationRequestFileDataFormat.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyPresentationRequestFileDataFormat = "ppt" | "pptx"; +export const DeidentifyPresentationRequestFileDataFormat = { + Ppt: "ppt", + Pptx: "pptx", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFile.ts new file mode 100644 index 00000000..41cb9fe2 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifySpreadsheetRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifySpreadsheetRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFileDataFormat.ts new file mode 100644 index 00000000..041eb16e --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifySpreadsheetRequestFileDataFormat.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifySpreadsheetRequestFileDataFormat = "csv" | "xls" | "xlsx"; +export const DeidentifySpreadsheetRequestFileDataFormat = { + Csv: "csv", + Xls: "xls", + Xlsx: "xlsx", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFile.ts new file mode 100644 index 00000000..66432e03 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFile.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyStructuredTextRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: Skyflow.DeidentifyStructuredTextRequestFileDataFormat; +} diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFileDataFormat.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFileDataFormat.ts new file mode 100644 index 00000000..74dc1435 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyStructuredTextRequestFileDataFormat.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Data format of the file. + */ +export type DeidentifyStructuredTextRequestFileDataFormat = "json" | "xml"; +export const DeidentifyStructuredTextRequestFileDataFormat = { + Json: "json", + Xml: "xml", +} as const; diff --git a/src/ _generated_/rest/api/resources/files/types/DeidentifyTextRequestFile.ts b/src/ _generated_/rest/api/resources/files/types/DeidentifyTextRequestFile.ts new file mode 100644 index 00000000..7b1a08ca --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/DeidentifyTextRequestFile.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * File to de-identify. Files are specified as Base64-encoded data. + */ +export interface DeidentifyTextRequestFile { + /** Base64-encoded data of the file to de-identify. */ + base64: string; + /** Data format of the file. */ + data_format: "txt"; +} diff --git a/src/ _generated_/rest/api/resources/files/types/index.ts b/src/ _generated_/rest/api/resources/files/types/index.ts new file mode 100644 index 00000000..51f03325 --- /dev/null +++ b/src/ _generated_/rest/api/resources/files/types/index.ts @@ -0,0 +1,18 @@ +export * from "./DeidentifyFileRequestFileDataFormat"; +export * from "./DeidentifyFileRequestFile"; +export * from "./DeidentifyDocumentRequestFileDataFormat"; +export * from "./DeidentifyDocumentRequestFile"; +export * from "./DeidentifyPdfRequestFile"; +export * from "./DeidentifyImageRequestFileDataFormat"; +export * from "./DeidentifyImageRequestFile"; +export * from "./DeidentifyImageRequestMaskingMethod"; +export * from "./DeidentifyTextRequestFile"; +export * from "./DeidentifyStructuredTextRequestFileDataFormat"; +export * from "./DeidentifyStructuredTextRequestFile"; +export * from "./DeidentifySpreadsheetRequestFileDataFormat"; +export * from "./DeidentifySpreadsheetRequestFile"; +export * from "./DeidentifyPresentationRequestFileDataFormat"; +export * from "./DeidentifyPresentationRequestFile"; +export * from "./DeidentifyAudioRequestFileDataFormat"; +export * from "./DeidentifyAudioRequestFile"; +export * from "./DeidentifyAudioRequestOutputTranscription"; diff --git a/src/ _generated_/rest/api/resources/index.ts b/src/ _generated_/rest/api/resources/index.ts index a6ae3aed..4d7fe175 100644 --- a/src/ _generated_/rest/api/resources/index.ts +++ b/src/ _generated_/rest/api/resources/index.ts @@ -2,13 +2,21 @@ export * as audit from "./audit"; export * from "./audit/types"; export * as records from "./records"; export * from "./records/types"; +export * as strings from "./strings"; +export * from "./strings/types"; +export * as files from "./files"; +export * from "./files/types"; export * as binLookup from "./binLookup"; export * as tokens from "./tokens"; export * as query from "./query"; export * as authentication from "./authentication"; +export * as deprecated from "./deprecated"; export * from "./audit/client/requests"; export * from "./binLookup/client/requests"; export * from "./records/client/requests"; export * from "./tokens/client/requests"; export * from "./query/client/requests"; export * from "./authentication/client/requests"; +export * from "./deprecated/client/requests"; +export * from "./strings/client/requests"; +export * from "./files/client/requests"; diff --git a/src/ _generated_/rest/api/resources/query/client/Client.ts b/src/ _generated_/rest/api/resources/query/client/Client.ts index d6339a16..8754ac4a 100644 --- a/src/ _generated_/rest/api/resources/query/client/Client.ts +++ b/src/ _generated_/rest/api/resources/query/client/Client.ts @@ -91,10 +91,7 @@ export class Query { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/resources/records/client/Client.ts b/src/ _generated_/rest/api/resources/records/client/Client.ts index 96ea98ce..54d9d3c4 100644 --- a/src/ _generated_/rest/api/resources/records/client/Client.ts +++ b/src/ _generated_/rest/api/resources/records/client/Client.ts @@ -117,10 +117,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -274,10 +271,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -387,10 +381,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -483,10 +474,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -602,10 +590,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -709,10 +694,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -802,10 +784,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -837,43 +816,39 @@ export class Records { /** * Uploads a file to the specified record. * - * @param {File | fs.ReadStream | Blob | undefined} file + * @param {File | fs.ReadStream | Blob | undefined} fileColumnName * @param {string} vaultId * @param {string} objectName * @param {string} id - * @param {Skyflow.FileServiceUploadFileRequest} request * @param {Records.RequestOptions} requestOptions - Request-specific configuration. * * @throws {@link Skyflow.NotFoundError} * * @example - * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID", {}) + * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID") */ public fileServiceUploadFile( - file: File | fs.ReadStream | Blob | undefined, + fileColumnName: File | fs.ReadStream | Blob | undefined, vaultId: string, objectName: string, id: string, - request: Skyflow.FileServiceUploadFileRequest, requestOptions?: Records.RequestOptions, ): core.HttpResponsePromise { return core.HttpResponsePromise.fromPromise( - this.__fileServiceUploadFile(file, vaultId, objectName, id, request, requestOptions), + this.__fileServiceUploadFile(fileColumnName, vaultId, objectName, id, requestOptions), ); } private async __fileServiceUploadFile( - file: File | fs.ReadStream | Blob | undefined, + fileColumnName: File | fs.ReadStream | Blob | undefined, vaultId: string, objectName: string, id: string, - request: Skyflow.FileServiceUploadFileRequest, requestOptions?: Records.RequestOptions, ): Promise> { const _request = await core.newFormData(); - if (file != null && request.columnName != null) { - await _request.appendFile(request.columnName, file); - + if (fileColumnName != null) { + await _request.appendFile("fileColumnName", fileColumnName); } const _maybeEncodedRequest = await _request.getRequest(); @@ -910,10 +885,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -1006,10 +978,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -1102,10 +1071,7 @@ export class Records { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts index 9a4af29f..fbbd7e13 100644 --- a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts +++ b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts @@ -6,7 +6,4 @@ * @example * {} */ -export interface FileServiceUploadFileRequest { - /** Name of the column to store the file in. The column must have a file data type. */ - columnName?: string; -} +export interface FileServiceUploadFileRequest {} diff --git a/src/ _generated_/rest/api/resources/strings/client/Client.ts b/src/ _generated_/rest/api/resources/strings/client/Client.ts new file mode 100644 index 00000000..c0e588ea --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/client/Client.ts @@ -0,0 +1,277 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as environments from "../../../../environments"; +import * as core from "../../../../core"; +import * as Skyflow from "../../../index"; +import urlJoin from "url-join"; +import * as errors from "../../../../errors/index"; + +export declare namespace Strings { + export interface Options { + environment?: core.Supplier; + /** Specify a custom URL to connect the client to. */ + baseUrl?: core.Supplier; + token: core.Supplier; + fetcher?: core.FetchFunction; + } + + export interface RequestOptions { + /** The maximum time to wait for a response in seconds. */ + timeoutInSeconds?: number; + /** The number of times to retry the request. Defaults to 2. */ + maxRetries?: number; + /** A hook to abort the request. */ + abortSignal?: AbortSignal; + /** Additional headers to include in the request. */ + headers?: Record; + } +} + +export class Strings { + constructor(protected readonly _options: Strings.Options) {} + + /** + * De-identifies sensitive data from a string. + * + * @param {Skyflow.DeidentifyStringRequest} request + * @param {Strings.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "My name is John Doe, and my email is johndoe@acme.com." + * }) + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "S: 62yo female here for first visit. No concerns today. Her FP (Dr. Benyamin) is retiring soon. Up to date on pap, mammo, labs, BMD. On the waitlist for colonoscopy. Past Medical and Surgical hx: nil. Meds: nil. Allergies: Pn. Family and Social hx: see CPP. O: Temp 35.2;BP 145-73; HR 58. Appears well. A: First visit. P: CPP updated. RTC prn. A007. First visit. Type Name: Clinical Note" + * }) + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "My name is John Doe, and my email is johndoe@acme.com.", + * entity_types: ["name", "email_address"], + * token_type: { + * default: "entity_only" + * } + * }) + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "VAULT_ID", + * text: "My name is John Doe, and my email is johndoe@acme.com.", + * token_type: { + * default: "vault_token" + * } + * }) + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "VAULT_ID", + * text: "My name is John Doe, and my email is johndoe@acme.com." + * }) + * + * @example + * await client.strings.deidentifyString({ + * vault_id: "VAULT_ID", + * text: "My name is John, and my email is johndoe@acme.com.", + * entity_types: ["name", "email_address"], + * token_type: { + * default: "entity_only" + * }, + * allow_regex: ["John"], + * transformations: { + * shift_dates: { + * max_days: 5, + * min_days: 1, + * entity_types: ["date"] + * } + * } + * }) + */ + public deidentifyString( + request: Skyflow.DeidentifyStringRequest, + requestOptions?: Strings.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__deidentifyString(request, requestOptions)); + } + + private async __deidentifyString( + request: Skyflow.DeidentifyStringRequest, + requestOptions?: Strings.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/deidentify/string", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.DeidentifyStringResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/deidentify/string.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + /** + * Re-identifies tokens in a string. + * + * @param {Skyflow.ReidentifyStringRequest} request + * @param {Strings.RequestOptions} requestOptions - Request-specific configuration. + * + * @throws {@link Skyflow.BadRequestError} + * @throws {@link Skyflow.UnauthorizedError} + * @throws {@link Skyflow.InternalServerError} + * + * @example + * await client.strings.reidentifyString({ + * text: "My name is [NAME_1], and my email is [EMAIL_1].", + * vault_id: "1ad6db07-8405-46cf-9a1e-db148ff9f4c5" + * }) + */ + public reidentifyString( + request: Skyflow.ReidentifyStringRequest, + requestOptions?: Strings.RequestOptions, + ): core.HttpResponsePromise { + return core.HttpResponsePromise.fromPromise(this.__reidentifyString(request, requestOptions)); + } + + private async __reidentifyString( + request: Skyflow.ReidentifyStringRequest, + requestOptions?: Strings.RequestOptions, + ): Promise> { + const _response = await (this._options.fetcher ?? core.fetcher)({ + url: urlJoin( + (await core.Supplier.get(this._options.baseUrl)) ?? + (await core.Supplier.get(this._options.environment)) ?? + environments.SkyflowEnvironment.Production, + "v1/detect/reidentify/string", + ), + method: "POST", + headers: { + Authorization: await this._getAuthorizationHeader(), + "X-Fern-Language": "JavaScript", + "X-Fern-SDK-Name": "skyflow", + "X-Fern-SDK-Version": "1.0.21", + "User-Agent": "skyflow/1.0.21", + "X-Fern-Runtime": core.RUNTIME.type, + "X-Fern-Runtime-Version": core.RUNTIME.version, + ...requestOptions?.headers, + }, + contentType: "application/json", + requestType: "json", + body: request, + timeoutMs: requestOptions?.timeoutInSeconds != null ? requestOptions.timeoutInSeconds * 1000 : 60000, + maxRetries: requestOptions?.maxRetries, + abortSignal: requestOptions?.abortSignal, + }); + if (_response.ok) { + return { data: _response.body as Skyflow.ReidentifyStringResponse, rawResponse: _response.rawResponse }; + } + + if (_response.error.reason === "status-code") { + switch (_response.error.statusCode) { + case 400: + throw new Skyflow.BadRequestError(_response.error.body as unknown, _response.rawResponse); + case 401: + throw new Skyflow.UnauthorizedError(_response.error.body as unknown, _response.rawResponse); + case 500: + throw new Skyflow.InternalServerError( + _response.error.body as Skyflow.ErrorResponse, + _response.rawResponse, + ); + default: + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.body, + rawResponse: _response.rawResponse, + }); + } + } + + switch (_response.error.reason) { + case "non-json": + throw new errors.SkyflowError({ + statusCode: _response.error.statusCode, + body: _response.error.rawBody, + rawResponse: _response.rawResponse, + }); + case "timeout": + throw new errors.SkyflowTimeoutError( + "Timeout exceeded when calling POST /v1/detect/reidentify/string.", + ); + case "unknown": + throw new errors.SkyflowError({ + message: _response.error.errorMessage, + rawResponse: _response.rawResponse, + }); + } + } + + protected async _getAuthorizationHeader(): Promise { + return `Bearer ${await core.Supplier.get(this._options.token)}`; + } +} diff --git a/src/ _generated_/rest/api/resources/strings/client/index.ts b/src/ _generated_/rest/api/resources/strings/client/index.ts new file mode 100644 index 00000000..415726b7 --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/client/index.ts @@ -0,0 +1 @@ +export * from "./requests"; diff --git a/src/ _generated_/rest/api/resources/strings/client/requests/DeidentifyStringRequest.ts b/src/ _generated_/rest/api/resources/strings/client/requests/DeidentifyStringRequest.ts new file mode 100644 index 00000000..d157c3ce --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/client/requests/DeidentifyStringRequest.ts @@ -0,0 +1,72 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "My name is John Doe, and my email is johndoe@acme.com." + * } + * + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "S: 62yo female here for first visit. No concerns today. Her FP (Dr. Benyamin) is retiring soon. Up to date on pap, mammo, labs, BMD. On the waitlist for colonoscopy. Past Medical and Surgical hx: nil. Meds: nil. Allergies: Pn. Family and Social hx: see CPP. O: Temp 35.2;BP 145-73; HR 58. Appears well. A: First visit. P: CPP updated. RTC prn. A007. First visit. Type Name: Clinical Note" + * } + * + * @example + * { + * vault_id: "f4b3b3b33b3b3b3b3b3b3b3b3b3b3b3b", + * text: "My name is John Doe, and my email is johndoe@acme.com.", + * entity_types: ["name", "email_address"], + * token_type: { + * default: "entity_only" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * text: "My name is John Doe, and my email is johndoe@acme.com.", + * token_type: { + * default: "vault_token" + * } + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * text: "My name is John Doe, and my email is johndoe@acme.com." + * } + * + * @example + * { + * vault_id: "VAULT_ID", + * text: "My name is John, and my email is johndoe@acme.com.", + * entity_types: ["name", "email_address"], + * token_type: { + * default: "entity_only" + * }, + * allow_regex: ["John"], + * transformations: { + * shift_dates: { + * max_days: 5, + * min_days: 1, + * entity_types: ["date"] + * } + * } + * } + */ +export interface DeidentifyStringRequest { + vault_id: Skyflow.VaultId; + /** String to de-identify. */ + text: string; + entity_types?: Skyflow.EntityTypes; + token_type?: Skyflow.TokenType; + allow_regex?: Skyflow.AllowRegex; + restrict_regex?: Skyflow.RestrictRegex; + transformations?: Skyflow.Transformations; +} diff --git a/src/ _generated_/rest/api/resources/strings/client/requests/ReidentifyStringRequest.ts b/src/ _generated_/rest/api/resources/strings/client/requests/ReidentifyStringRequest.ts new file mode 100644 index 00000000..0a8a2f86 --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/client/requests/ReidentifyStringRequest.ts @@ -0,0 +1,21 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../../index"; + +/** + * @example + * { + * text: "My name is [NAME_1], and my email is [EMAIL_1].", + * vault_id: "1ad6db07-8405-46cf-9a1e-db148ff9f4c5" + * } + */ +export interface ReidentifyStringRequest { + /** String to re-identify. */ + text: string; + /** ID of the vault where the entities are stored. */ + vault_id: string; + /** Mapping of perferred data formatting options to entity types. Returned values are dependent on the configuration of the vault storing the data and the permissions of the user or account making the request. */ + format?: Skyflow.ReidentifyStringRequestFormat; +} diff --git a/src/ _generated_/rest/api/resources/strings/client/requests/index.ts b/src/ _generated_/rest/api/resources/strings/client/requests/index.ts new file mode 100644 index 00000000..a10c579b --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/client/requests/index.ts @@ -0,0 +1,2 @@ +export { type DeidentifyStringRequest } from "./DeidentifyStringRequest"; +export { type ReidentifyStringRequest } from "./ReidentifyStringRequest"; diff --git a/src/ _generated_/rest/api/resources/strings/index.ts b/src/ _generated_/rest/api/resources/strings/index.ts new file mode 100644 index 00000000..c9240f83 --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./client"; diff --git a/src/ _generated_/rest/api/resources/strings/types/ReidentifyStringRequestFormat.ts b/src/ _generated_/rest/api/resources/strings/types/ReidentifyStringRequestFormat.ts new file mode 100644 index 00000000..712a5f81 --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/types/ReidentifyStringRequestFormat.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../../../index"; + +/** + * Mapping of perferred data formatting options to entity types. Returned values are dependent on the configuration of the vault storing the data and the permissions of the user or account making the request. + */ +export interface ReidentifyStringRequestFormat { + /** Entity types to fully redact. */ + redacted?: Skyflow.EntityType[]; + /** Entity types to mask. */ + masked?: Skyflow.EntityType[]; + /** Entity types to return in plaintext. */ + plaintext?: Skyflow.EntityType[]; +} diff --git a/src/ _generated_/rest/api/resources/strings/types/index.ts b/src/ _generated_/rest/api/resources/strings/types/index.ts new file mode 100644 index 00000000..58b77ca6 --- /dev/null +++ b/src/ _generated_/rest/api/resources/strings/types/index.ts @@ -0,0 +1 @@ +export * from "./ReidentifyStringRequestFormat"; diff --git a/src/ _generated_/rest/api/resources/tokens/client/Client.ts b/src/ _generated_/rest/api/resources/tokens/client/Client.ts index 5f5b90fc..8ce2956c 100644 --- a/src/ _generated_/rest/api/resources/tokens/client/Client.ts +++ b/src/ _generated_/rest/api/resources/tokens/client/Client.ts @@ -98,10 +98,7 @@ export class Tokens { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, @@ -187,10 +184,7 @@ export class Tokens { if (_response.error.reason === "status-code") { switch (_response.error.statusCode) { case 404: - throw new Skyflow.NotFoundError( - _response.error.body as Record, - _response.rawResponse, - ); + throw new Skyflow.NotFoundError(_response.error.body as unknown, _response.rawResponse); default: throw new errors.SkyflowError({ statusCode: _response.error.statusCode, diff --git a/src/ _generated_/rest/api/types/AdvancedOptionsColumnMapping.ts b/src/ _generated_/rest/api/types/AdvancedOptionsColumnMapping.ts new file mode 100644 index 00000000..77a428f1 --- /dev/null +++ b/src/ _generated_/rest/api/types/AdvancedOptionsColumnMapping.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains map of what has to be stored in which column. + */ +export interface AdvancedOptionsColumnMapping { + /** Table name of the vault. */ + session_id: string; + /** Name of column to store data in when no explicit mapping exists. */ + default: string; + /** Column mapping for different entities. */ + entity_column_map?: Skyflow.AdvancedOptionsEntityColumnMap[]; +} diff --git a/src/ _generated_/rest/api/types/AdvancedOptionsEntityColumnMap.ts b/src/ _generated_/rest/api/types/AdvancedOptionsEntityColumnMap.ts new file mode 100644 index 00000000..20d3664f --- /dev/null +++ b/src/ _generated_/rest/api/types/AdvancedOptionsEntityColumnMap.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains map of what entity has to be stored in which column. + */ +export interface AdvancedOptionsEntityColumnMap { + entity_type?: Skyflow.DetectDataEntities; + /** Column name where the entity has to be stored. */ + column_name?: string; +} diff --git a/src/ _generated_/rest/api/types/AdvancedOptionsVaultSchema.ts b/src/ _generated_/rest/api/types/AdvancedOptionsVaultSchema.ts new file mode 100644 index 00000000..02dffb1c --- /dev/null +++ b/src/ _generated_/rest/api/types/AdvancedOptionsVaultSchema.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains table name and column mapping. + */ +export interface AdvancedOptionsVaultSchema { + /** Table name of the vault. */ + table_name: string; + mapping: Skyflow.AdvancedOptionsColumnMapping; +} diff --git a/src/ _generated_/rest/api/types/AllowRegex.ts b/src/ _generated_/rest/api/types/AllowRegex.ts new file mode 100644 index 00000000..e069febd --- /dev/null +++ b/src/ _generated_/rest/api/types/AllowRegex.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Regular expressions to display in plaintext. Expressions must match the entirety of a detected entity, not just a substring, for the entity to display in plaintext. Expressions don't match across entity boundaries. If a string or entity matches both `allow_regex` and `restrict_regex`, the entity is displayed in plaintext. + */ +export type AllowRegex = string[]; diff --git a/src/ _generated_/rest/api/types/AudioConfigTranscriptionType.ts b/src/ _generated_/rest/api/types/AudioConfigTranscriptionType.ts new file mode 100644 index 00000000..fc860d8b --- /dev/null +++ b/src/ _generated_/rest/api/types/AudioConfigTranscriptionType.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of transcription. + * + * - none: Indicates transcriptionType is not set. + * - skyflow_transcription: Sends Skyflow transcribed text. + * - aws_transcription: Sends AWS transcribed text. + * - aws_transcription_diarize: Sends AWS diarized text. + * - aws_medical_transcription: Sends AWS medical transcribed text. + * - aws_medical_transcription_diarize: Sends AWS medical diarized text. + * - aws_transcription_diarize_json: Sends AWS transcribed redacted json. + * - deepgram_transcription_diarize: deepgram transcribed diarized text. + * - deepgram_transcription_json: deepgram transcribed redacted json. + * - deepgram_wrapper: deepgram diarized text. + */ +export type AudioConfigTranscriptionType = + | "none" + | "skyflow_transcription" + | "aws_transcription" + | "aws_transcription_diarize" + | "aws_medical_transcription" + | "aws_medical_transcription_diarize" + | "aws_transcription_diarize_json" + | "deepgram_transcription_diarize" + | "deepgram_transcription_json" + | "deepgram_wrapper"; +export const AudioConfigTranscriptionType = { + None: "none", + SkyflowTranscription: "skyflow_transcription", + AwsTranscription: "aws_transcription", + AwsTranscriptionDiarize: "aws_transcription_diarize", + AwsMedicalTranscription: "aws_medical_transcription", + AwsMedicalTranscriptionDiarize: "aws_medical_transcription_diarize", + AwsTranscriptionDiarizeJson: "aws_transcription_diarize_json", + DeepgramTranscriptionDiarize: "deepgram_transcription_diarize", + DeepgramTranscriptionJson: "deepgram_transcription_json", + DeepgramWrapper: "deepgram_wrapper", +} as const; diff --git a/src/ _generated_/rest/api/types/DeidentifyFileOutput.ts b/src/ _generated_/rest/api/types/DeidentifyFileOutput.ts new file mode 100644 index 00000000..f90709f8 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyFileOutput.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Details and contents of the processed file. + */ +export interface DeidentifyFileOutput { + /** URL or base64-encoded data of the output. */ + processed_file?: string; + /** Type of the processed file. */ + processed_file_type?: Skyflow.DeidentifyFileOutputProcessedFileType; + /** Extension of the processed file. */ + processed_file_extension?: string; +} diff --git a/src/ _generated_/rest/api/types/DeidentifyFileOutputProcessedFileType.ts b/src/ _generated_/rest/api/types/DeidentifyFileOutputProcessedFileType.ts new file mode 100644 index 00000000..d47699a1 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyFileOutputProcessedFileType.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of the processed file. + */ +export type DeidentifyFileOutputProcessedFileType = + | "entities" + | "plaintext_transcription" + | "redacted_audio" + | "redacted_diarized_transcription" + | "redacted_file" + | "redacted_image" + | "redacted_medical_diarized_transcription" + | "redacted_medical_transcription" + | "redacted_text" + | "redacted_transcription"; +export const DeidentifyFileOutputProcessedFileType = { + Entities: "entities", + PlaintextTranscription: "plaintext_transcription", + RedactedAudio: "redacted_audio", + RedactedDiarizedTranscription: "redacted_diarized_transcription", + RedactedFile: "redacted_file", + RedactedImage: "redacted_image", + RedactedMedicalDiarizedTranscription: "redacted_medical_diarized_transcription", + RedactedMedicalTranscription: "redacted_medical_transcription", + RedactedText: "redacted_text", + RedactedTranscription: "redacted_transcription", +} as const; diff --git a/src/ _generated_/rest/api/types/DeidentifyFileResponse.ts b/src/ _generated_/rest/api/types/DeidentifyFileResponse.ts new file mode 100644 index 00000000..81cc67e5 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyFileResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Response to de-identify a file. + */ +export interface DeidentifyFileResponse { + /** Status URL for the detect run. */ + run_id: string; +} diff --git a/src/ _generated_/rest/api/types/DeidentifyStatusResponse.ts b/src/ _generated_/rest/api/types/DeidentifyStatusResponse.ts new file mode 100644 index 00000000..8a5fa2c7 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyStatusResponse.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to get the status of a detect run. + */ +export interface DeidentifyStatusResponse { + /** Status of the detect run. */ + status: Skyflow.DeidentifyStatusResponseStatus; + /** How the input file was specified. */ + output: Skyflow.DeidentifyFileOutput[]; + /** How the output file is specified. */ + output_type: Skyflow.DeidentifyStatusResponseOutputType; + /** Status details about the detect run. */ + message: string; + /** Number of words in the processed text. */ + word_count?: number; + /** Number of characters in the processed text. */ + character_count?: number; + /** Size of the processed text in kilobytes (KB). */ + size?: number; + /** Duration of the processed audio in seconds. */ + duration?: number; + /** Number of pages in the processed PDF. */ + pages?: number; + /** Number of slides in the processed presentation. */ + slides?: number; +} diff --git a/src/ _generated_/rest/api/types/DeidentifyStatusResponseOutputType.ts b/src/ _generated_/rest/api/types/DeidentifyStatusResponseOutputType.ts new file mode 100644 index 00000000..5e8dfc87 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyStatusResponseOutputType.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * How the output file is specified. + */ +export type DeidentifyStatusResponseOutputType = "base64" | "efs_path"; +export const DeidentifyStatusResponseOutputType = { + Base64: "base64", + EfsPath: "efs_path", +} as const; diff --git a/src/ _generated_/rest/api/types/DeidentifyStatusResponseStatus.ts b/src/ _generated_/rest/api/types/DeidentifyStatusResponseStatus.ts new file mode 100644 index 00000000..78e92829 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyStatusResponseStatus.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Status of the detect run. + */ +export type DeidentifyStatusResponseStatus = "failed" | "in_progress" | "success"; +export const DeidentifyStatusResponseStatus = { + Failed: "failed", + InProgress: "in_progress", + Success: "success", +} as const; diff --git a/src/ _generated_/rest/api/types/DeidentifyStringResponse.ts b/src/ _generated_/rest/api/types/DeidentifyStringResponse.ts new file mode 100644 index 00000000..3ae4af74 --- /dev/null +++ b/src/ _generated_/rest/api/types/DeidentifyStringResponse.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to deidentify a string. + */ +export interface DeidentifyStringResponse { + /** De-identified text. */ + processed_text: string; + /** Detected entities. */ + entities: Skyflow.DetectedEntity[]; + /** Number of words from the input text. */ + word_count: number; + /** Number of characters from the input text. */ + character_count: number; +} diff --git a/src/ _generated_/rest/api/types/DetectDataAccuracy.ts b/src/ _generated_/rest/api/types/DetectDataAccuracy.ts new file mode 100644 index 00000000..9043bb6a --- /dev/null +++ b/src/ _generated_/rest/api/types/DetectDataAccuracy.ts @@ -0,0 +1,35 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Accuracy of the detection. The higher the accuracy, the more time it takes to process the request. Use multilingual options if the input contains languages other than English. + * + * - unknown: Unknown accuracy. + * - standard: Base-level accuracy. + * - standard_plus: Improved accuracy. + * - standard_plus_multilingual: Improved accuracy with multilingual support. + * - standard_plus_automatic: Improved accuracy with automatic language detection. + * - high: High accuracy. + * - high_multilingual: High accuracy with multilingual support. + * - high_automatic: High accuracy with automatic language detection. + */ +export type DetectDataAccuracy = + | "unknown" + | "standard" + | "standard_plus" + | "standard_plus_multilingual" + | "standard_plus_automatic" + | "high" + | "high_multilingual" + | "high_automatic"; +export const DetectDataAccuracy = { + Unknown: "unknown", + Standard: "standard", + StandardPlus: "standard_plus", + StandardPlusMultilingual: "standard_plus_multilingual", + StandardPlusAutomatic: "standard_plus_automatic", + High: "high", + HighMultilingual: "high_multilingual", + HighAutomatic: "high_automatic", +} as const; diff --git a/src/ _generated_/rest/api/types/DetectDataEntities.ts b/src/ _generated_/rest/api/types/DetectDataEntities.ts new file mode 100644 index 00000000..758aefb6 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetectDataEntities.ts @@ -0,0 +1,200 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Entities to detect and deidentify. + * + * - age: Numbers associated with an individual’s age. + * - bank_account: Bank account numbers and international equivalents. + * - credit_card: Credit card numbers. + * - credit_card_expiration: Expiration date of a credit card. + * - cvv: 3 or 4 digit card verification codes and equivalents. + * - date: Specific calendar dates, which can include days of the week, dates, months, or years. + * - date_interval: Broader time periods, including date ranges, months, seasons, years, and decades. + * - dob: Dates of birth. + * - driver_license: Driver's permit numbers. + * - email_address: Email addresses. + * - healthcare_number: Healthcare numbers and health plan beneficiary numbers. + * - ip_address: Internet IP address, including IPv4 and IPv6 formats. + * - location: Metaclass for any named location reference; See subclasses below. + * - name: Names of individuals, not including personal titles such as ‘Mrs.’ or ‘Mr.’. + * - numerical_pii: Numerical PII (including alphanumeric strings) such as device serial numbers, POS codes etc. + * - phone_number: Telephone or fax numbers. + * - ssn: Social Security Numbers or international equivalent government identification numbers. + * - url: Internet addresses. + * - vehicle_id: Vehicle identification numbers (VINs), vehicle serial numbers, and license plate numbers. + * - medical_code: Codes belonging to medical classification systems. + * - name_family: Names indicating a person’s family or community. + * - name_given: Names given to an individual, usually at birth. + * - account_number: Customer account or membership identification number. + * - event: Names of events or holidays. + * - filename: Names of computer files, including the extension or filepath. + * - gender_sexuality: Terms indicating gender identity or sexual orientation, including slang terms. + * - language: Names of natural languages. + * - location_address: Full or partial physical mailing addresses. + * - location_city: Municipality names, including villages, towns, and cities. + * - location_coordinate: Geographic positions referred to using latitude, longitude, and/or elevation coordinates. + * - location_country: Country names. + * - location_state: State, province, territory, or prefecture names. + * - location_zip: Zip codes (including Zip+4), postcodes, or postal codes. + * - marital_status: Terms indicating marital status. + * - money: Names and/or amounts of currency. + * - name_medical_professional: Full names, including professional titles and certifications, of medical professional, such as doctors and nurses + * - occupation: Job titles or professions. + * - organization: Names of organizations or departments within an organization. + * - organization_medical_facility: Names of medical facilities, such as hospitals, clinics, pharmacies, etc. + * - origin: Terms indicating nationality, ethnicity, or provenance. + * - passport_number: Passport numbers, issued by any country. + * - password: Account passwords, PINs, access keys, or verification answers. + * - physical_attribute: Distinctive bodily attributes, including terms indicating race. + * - political_affiliation: Terms referring to a political party, movement, or ideology. + * - religion: Terms indicating religious affiliation. + * - time: Expressions indicating clock times. + * - username: Usernames, login names, or handles. + * - zodiac_sign: Names of Zodiac signs. + * - blood_type: Blood types. + * - condition: Names of medical conditions. + * - dose: Medically prescribed quantity of a medication. + * - drug: Medications, vitamins, and supplements. + * - injury: Bodily injuries. + * - medical_process: Medical processes, including treatments, procedures, and tests. + * - statistics: Medical statistics. + * - routing_number: Routing number associated with a bank or financial institution. + * - corporate_action: Any action a company takes that could affect its stock value or its shareholders. + * - financial_metric: Financial metrics or financial ratios are quantitative indicators of a company’s financial health. + * - product: Names or model numbers of items made by an organization. + * - trend: A description of the “quality” or the direction in which a financial measurement is going. + * - duration: Periods of time, specified as a number and a unit of time. + * - location_address_street: A subclass of location_address, covering: a building number and street name, plus information like a unit numbers, office numbers, floor numbers and building names, where applicable. + * - all: Indicates all entities. + */ +export type DetectDataEntities = + | "age" + | "bank_account" + | "credit_card" + | "credit_card_expiration" + | "cvv" + | "date" + | "date_interval" + | "dob" + | "driver_license" + | "email_address" + | "healthcare_number" + | "ip_address" + | "location" + | "name" + | "numerical_pii" + | "phone_number" + | "ssn" + | "url" + | "vehicle_id" + | "medical_code" + | "name_family" + | "name_given" + | "account_number" + | "event" + | "filename" + | "gender_sexuality" + | "language" + | "location_address" + | "location_city" + | "location_coordinate" + | "location_country" + | "location_state" + | "location_zip" + | "marital_status" + | "money" + | "name_medical_professional" + | "occupation" + | "organization" + | "organization_medical_facility" + | "origin" + | "passport_number" + | "password" + | "physical_attribute" + | "political_affiliation" + | "religion" + | "time" + | "username" + | "zodiac_sign" + | "blood_type" + | "condition" + | "dose" + | "drug" + | "injury" + | "medical_process" + | "statistics" + | "routing_number" + | "corporate_action" + | "financial_metric" + | "product" + | "trend" + | "duration" + | "location_address_street" + | "all"; +export const DetectDataEntities = { + Age: "age", + BankAccount: "bank_account", + CreditCard: "credit_card", + CreditCardExpiration: "credit_card_expiration", + Cvv: "cvv", + Date: "date", + DateInterval: "date_interval", + Dob: "dob", + DriverLicense: "driver_license", + EmailAddress: "email_address", + HealthcareNumber: "healthcare_number", + IpAddress: "ip_address", + Location: "location", + Name: "name", + NumericalPii: "numerical_pii", + PhoneNumber: "phone_number", + Ssn: "ssn", + Url: "url", + VehicleId: "vehicle_id", + MedicalCode: "medical_code", + NameFamily: "name_family", + NameGiven: "name_given", + AccountNumber: "account_number", + Event: "event", + Filename: "filename", + GenderSexuality: "gender_sexuality", + Language: "language", + LocationAddress: "location_address", + LocationCity: "location_city", + LocationCoordinate: "location_coordinate", + LocationCountry: "location_country", + LocationState: "location_state", + LocationZip: "location_zip", + MaritalStatus: "marital_status", + Money: "money", + NameMedicalProfessional: "name_medical_professional", + Occupation: "occupation", + Organization: "organization", + OrganizationMedicalFacility: "organization_medical_facility", + Origin: "origin", + PassportNumber: "passport_number", + Password: "password", + PhysicalAttribute: "physical_attribute", + PoliticalAffiliation: "political_affiliation", + Religion: "religion", + Time: "time", + Username: "username", + ZodiacSign: "zodiac_sign", + BloodType: "blood_type", + Condition: "condition", + Dose: "dose", + Drug: "drug", + Injury: "injury", + MedicalProcess: "medical_process", + Statistics: "statistics", + RoutingNumber: "routing_number", + CorporateAction: "corporate_action", + FinancialMetric: "financial_metric", + Product: "product", + Trend: "trend", + Duration: "duration", + LocationAddressStreet: "location_address_street", + All: "all", +} as const; diff --git a/src/ _generated_/rest/api/types/DetectFileRequestDataType.ts b/src/ _generated_/rest/api/types/DetectFileRequestDataType.ts new file mode 100644 index 00000000..9117b503 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetectFileRequestDataType.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * How the input file is specified. + * + * - UNKNOWN: Unknown data type. + * - BASE64: Base64 encoded data. + */ +export type DetectFileRequestDataType = "UNKNOWN" | "BASE64"; +export const DetectFileRequestDataType = { + Unknown: "UNKNOWN", + Base64: "BASE64", +} as const; diff --git a/src/ _generated_/rest/api/types/DetectRequestDeidentifyOption.ts b/src/ _generated_/rest/api/types/DetectRequestDeidentifyOption.ts new file mode 100644 index 00000000..b274cec9 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetectRequestDeidentifyOption.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Type of token to generate for detected entities. + * + * - UNKNOWN: unknown. + * - ENTITY_UNQ_COUNTER: Sensitive words are replaced with the entity type and a unique number. For example, "John and Jane" becomes "[NAME_1] and [NAME_2]". + * - ENTITY_ONLY: Sensitive words are replaced with the entity type. For example, "John and Jane" becomes "[NAME] and [NAME]". + */ +export type DetectRequestDeidentifyOption = "UNKNOWN" | "ENTITY_UNQ_COUNTER" | "ENTITY_ONLY"; +export const DetectRequestDeidentifyOption = { + Unknown: "UNKNOWN", + EntityUnqCounter: "ENTITY_UNQ_COUNTER", + EntityOnly: "ENTITY_ONLY", +} as const; diff --git a/src/ _generated_/rest/api/types/DetectedEntity.ts b/src/ _generated_/rest/api/types/DetectedEntity.ts new file mode 100644 index 00000000..420f8297 --- /dev/null +++ b/src/ _generated_/rest/api/types/DetectedEntity.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Detected entities. + */ +export interface DetectedEntity { + /** Processed text of the entity. */ + token?: string; + /** Original text of the entity. */ + value?: string; + location?: Skyflow.EntityLocation; + /** Highest-rated label. */ + entity_type?: string; + /** entity_scores and their scores. */ + entity_scores?: Record; +} diff --git a/src/ _generated_/rest/api/types/EntityLocation.ts b/src/ _generated_/rest/api/types/EntityLocation.ts new file mode 100644 index 00000000..885c1a41 --- /dev/null +++ b/src/ _generated_/rest/api/types/EntityLocation.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Locations of an entity in the text. + */ +export interface EntityLocation { + /** Index of the first character of the string in the original text. */ + start_index?: number; + /** Index of the last character of the string in the original text. */ + end_index?: number; + /** Index of the first character of the string in the processed text. */ + start_index_processed?: number; + /** Index of the last character of the string in the processed text. */ + end_index_processed?: number; +} diff --git a/src/ _generated_/rest/api/types/EntityType.ts b/src/ _generated_/rest/api/types/EntityType.ts new file mode 100644 index 00000000..7d679f30 --- /dev/null +++ b/src/ _generated_/rest/api/types/EntityType.ts @@ -0,0 +1,136 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Kinds of entities to de-identify. For details on specific entity types, how they're processed, and language support, see [Entity types and languages](/detect-entity-types). + */ +export type EntityType = + | "account_number" + | "age" + | "all" + | "bank_account" + | "blood_type" + | "condition" + | "corporate_action" + | "credit_card" + | "credit_card_expiration" + | "cvv" + | "date" + | "date_interval" + | "dob" + | "dose" + | "driver_license" + | "drug" + | "duration" + | "email_address" + | "event" + | "filename" + | "financial_metric" + | "gender_sexuality" + | "healthcare_number" + | "injury" + | "ip_address" + | "language" + | "location" + | "location_address" + | "location_address_street" + | "location_city" + | "location_coordinate" + | "location_country" + | "location_state" + | "location_zip" + | "marital_status" + | "medical_code" + | "medical_process" + | "money" + | "name" + | "name_family" + | "name_given" + | "name_medical_professional" + | "numerical_pii" + | "occupation" + | "organization" + | "organization_medical_facility" + | "origin" + | "passport_number" + | "password" + | "phone_number" + | "physical_attribute" + | "political_affiliation" + | "product" + | "religion" + | "routing_number" + | "ssn" + | "statistics" + | "time" + | "trend" + | "url" + | "username" + | "vehicle_id" + | "zodiac_sign"; +export const EntityType = { + AccountNumber: "account_number", + Age: "age", + All: "all", + BankAccount: "bank_account", + BloodType: "blood_type", + Condition: "condition", + CorporateAction: "corporate_action", + CreditCard: "credit_card", + CreditCardExpiration: "credit_card_expiration", + Cvv: "cvv", + Date: "date", + DateInterval: "date_interval", + Dob: "dob", + Dose: "dose", + DriverLicense: "driver_license", + Drug: "drug", + Duration: "duration", + EmailAddress: "email_address", + Event: "event", + Filename: "filename", + FinancialMetric: "financial_metric", + GenderSexuality: "gender_sexuality", + HealthcareNumber: "healthcare_number", + Injury: "injury", + IpAddress: "ip_address", + Language: "language", + Location: "location", + LocationAddress: "location_address", + LocationAddressStreet: "location_address_street", + LocationCity: "location_city", + LocationCoordinate: "location_coordinate", + LocationCountry: "location_country", + LocationState: "location_state", + LocationZip: "location_zip", + MaritalStatus: "marital_status", + MedicalCode: "medical_code", + MedicalProcess: "medical_process", + Money: "money", + Name: "name", + NameFamily: "name_family", + NameGiven: "name_given", + NameMedicalProfessional: "name_medical_professional", + NumericalPii: "numerical_pii", + Occupation: "occupation", + Organization: "organization", + OrganizationMedicalFacility: "organization_medical_facility", + Origin: "origin", + PassportNumber: "passport_number", + Password: "password", + PhoneNumber: "phone_number", + PhysicalAttribute: "physical_attribute", + PoliticalAffiliation: "political_affiliation", + Product: "product", + Religion: "religion", + RoutingNumber: "routing_number", + Ssn: "ssn", + Statistics: "statistics", + Time: "time", + Trend: "trend", + Url: "url", + Username: "username", + VehicleId: "vehicle_id", + ZodiacSign: "zodiac_sign", +} as const; diff --git a/src/ _generated_/rest/api/types/EntityTypes.ts b/src/ _generated_/rest/api/types/EntityTypes.ts new file mode 100644 index 00000000..44630141 --- /dev/null +++ b/src/ _generated_/rest/api/types/EntityTypes.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Entities to detect and de-identify. + */ +export type EntityTypes = Skyflow.EntityType[]; diff --git a/src/ _generated_/rest/api/types/ErrorResponse.ts b/src/ _generated_/rest/api/types/ErrorResponse.ts new file mode 100644 index 00000000..822dd151 --- /dev/null +++ b/src/ _generated_/rest/api/types/ErrorResponse.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +export interface ErrorResponse { + error: Skyflow.ErrorResponseError; +} diff --git a/src/ _generated_/rest/api/types/ErrorResponseError.ts b/src/ _generated_/rest/api/types/ErrorResponseError.ts new file mode 100644 index 00000000..6b4777f3 --- /dev/null +++ b/src/ _generated_/rest/api/types/ErrorResponseError.ts @@ -0,0 +1,14 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface ErrorResponseError { + /** gRPC status codes. See https://grpc.io/docs/guides/status-codes. */ + grpc_code: number; + /** HTTP status codes. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Status. */ + http_code: number; + /** HTTP status message. */ + http_status: string; + message: string; + details?: Record[]; +} diff --git a/src/ _generated_/rest/api/types/ErrorString.ts b/src/ _generated_/rest/api/types/ErrorString.ts new file mode 100644 index 00000000..78dd85f5 --- /dev/null +++ b/src/ _generated_/rest/api/types/ErrorString.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Error message. + */ +export type ErrorString = string; diff --git a/src/ _generated_/rest/api/types/ProcessedFileOutputProcessedFileType.ts b/src/ _generated_/rest/api/types/ProcessedFileOutputProcessedFileType.ts new file mode 100644 index 00000000..d70d15a5 --- /dev/null +++ b/src/ _generated_/rest/api/types/ProcessedFileOutputProcessedFileType.ts @@ -0,0 +1,41 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Indicates type of processed_file. + * + * - none: Nothing is set. + * - redacted_audio: Processed file is audio. + * - redacted_image: Processed file is image. + * - redacted_transcription: Processed file is transcribed data. + * - redacted_file: Processed file contains redacted file data. + * - redacted_text: Processed file contains redacted text. + * - entities: Processed file contains entities. + * - redacted_aws_transcription_diarize_json: Processed file contains aws transcribed redacted json. + * - redacted_deepgram_transcription_diarize_json: Processed file contains deepgram transcribed redacted json. + * - plaintext_transcribed: Processed file contains deepgram plain transcribed json. + */ +export type ProcessedFileOutputProcessedFileType = + | "none" + | "redacted_audio" + | "redacted_image" + | "redacted_transcription" + | "redacted_file" + | "redacted_text" + | "entities" + | "redacted_aws_transcription_diarize_json" + | "redacted_deepgram_transcription_diarize_json" + | "plaintext_transcribed"; +export const ProcessedFileOutputProcessedFileType = { + None: "none", + RedactedAudio: "redacted_audio", + RedactedImage: "redacted_image", + RedactedTranscription: "redacted_transcription", + RedactedFile: "redacted_file", + RedactedText: "redacted_text", + Entities: "entities", + RedactedAwsTranscriptionDiarizeJson: "redacted_aws_transcription_diarize_json", + RedactedDeepgramTranscriptionDiarizeJson: "redacted_deepgram_transcription_diarize_json", + PlaintextTranscribed: "plaintext_transcribed", +} as const; diff --git a/src/ _generated_/rest/api/types/ReidentifyStringResponse.ts b/src/ _generated_/rest/api/types/ReidentifyStringResponse.ts new file mode 100644 index 00000000..a1d61ad4 --- /dev/null +++ b/src/ _generated_/rest/api/types/ReidentifyStringResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Re-identify string response. + */ +export interface ReidentifyStringResponse { + /** Re-identified text. */ + processed_text?: string; +} diff --git a/src/ _generated_/rest/api/types/ResourceId.ts b/src/ _generated_/rest/api/types/ResourceId.ts new file mode 100644 index 00000000..b9d80732 --- /dev/null +++ b/src/ _generated_/rest/api/types/ResourceId.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * ID of a resource. + */ +export type ResourceId = string; diff --git a/src/ _generated_/rest/api/types/RestrictRegex.ts b/src/ _generated_/rest/api/types/RestrictRegex.ts new file mode 100644 index 00000000..1f6a47aa --- /dev/null +++ b/src/ _generated_/rest/api/types/RestrictRegex.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Regular expressions to replace with '[RESTRICTED]'. Expressions must match the entirety of a detected entity, not just a substring, for the entity to be restricted. Expressions don't match across entity boundaries. If a string or entity matches both `allow_regex` and `restrict_regex`, the entity is displayed in plaintext. + */ +export type RestrictRegex = string[]; diff --git a/src/ _generated_/rest/api/types/TokenType.ts b/src/ _generated_/rest/api/types/TokenType.ts new file mode 100644 index 00000000..823af7cd --- /dev/null +++ b/src/ _generated_/rest/api/types/TokenType.ts @@ -0,0 +1,18 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Mapping of tokens to generation for detected entities. Can't be specified together with `token_type`. + */ +export interface TokenType { + default?: Skyflow.TokenTypeDefault; + /** Entity types to replace with vault tokens. */ + vault_token?: Skyflow.EntityType[]; + /** Entity types to replace with entity tokens with unique counters. */ + entity_unq_counter?: Skyflow.EntityType[]; + /** Entity types to replace with entity tokens. */ + entity_only?: Skyflow.EntityType[]; +} diff --git a/src/ _generated_/rest/api/types/TokenTypeDefault.ts b/src/ _generated_/rest/api/types/TokenTypeDefault.ts new file mode 100644 index 00000000..6453d7c8 --- /dev/null +++ b/src/ _generated_/rest/api/types/TokenTypeDefault.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type TokenTypeDefault = "entity_only" | "entity_unq_counter" | "vault_token"; +export const TokenTypeDefault = { + EntityOnly: "entity_only", + EntityUnqCounter: "entity_unq_counter", + VaultToken: "vault_token", +} as const; diff --git a/src/ _generated_/rest/api/types/TokenTypeWithoutVault.ts b/src/ _generated_/rest/api/types/TokenTypeWithoutVault.ts new file mode 100644 index 00000000..07e0ff9b --- /dev/null +++ b/src/ _generated_/rest/api/types/TokenTypeWithoutVault.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Mapping of tokens to generation for detected entities. Can't be specified together with `token_type`. + */ +export interface TokenTypeWithoutVault { + default?: Skyflow.TokenTypeWithoutVaultDefault; + /** Entity types to replace with entity tokens with unique counters. */ + entity_unq_counter?: Skyflow.EntityType[]; + /** Entity types to replace with entity tokens. */ + entity_only?: Skyflow.EntityType[]; +} diff --git a/src/ _generated_/rest/api/types/TokenTypeWithoutVaultDefault.ts b/src/ _generated_/rest/api/types/TokenTypeWithoutVaultDefault.ts new file mode 100644 index 00000000..6e1a58df --- /dev/null +++ b/src/ _generated_/rest/api/types/TokenTypeWithoutVaultDefault.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type TokenTypeWithoutVaultDefault = "entity_only" | "entity_unq_counter"; +export const TokenTypeWithoutVaultDefault = { + EntityOnly: "entity_only", + EntityUnqCounter: "entity_unq_counter", +} as const; diff --git a/src/ _generated_/rest/api/types/Transformations.ts b/src/ _generated_/rest/api/types/Transformations.ts new file mode 100644 index 00000000..da11b88a --- /dev/null +++ b/src/ _generated_/rest/api/types/Transformations.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Transformations to apply to the detected entities. + */ +export interface Transformations { + /** Shift dates by a specified number of days. */ + shift_dates?: Skyflow.TransformationsShiftDates; +} diff --git a/src/ _generated_/rest/api/types/TransformationsShiftDates.ts b/src/ _generated_/rest/api/types/TransformationsShiftDates.ts new file mode 100644 index 00000000..ee24dfcb --- /dev/null +++ b/src/ _generated_/rest/api/types/TransformationsShiftDates.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Shift dates by a specified number of days. + */ +export interface TransformationsShiftDates { + /** Maximum number of days to shift the date by. */ + max_days?: number; + /** Minimum number of days to shift the date by. */ + min_days?: number; + /** Entity types to shift dates for. */ + entity_types?: Skyflow.TransformationsShiftDatesEntityTypesItem[]; +} diff --git a/src/ _generated_/rest/api/types/TransformationsShiftDatesEntityTypesItem.ts b/src/ _generated_/rest/api/types/TransformationsShiftDatesEntityTypesItem.ts new file mode 100644 index 00000000..60f41ebd --- /dev/null +++ b/src/ _generated_/rest/api/types/TransformationsShiftDatesEntityTypesItem.ts @@ -0,0 +1,10 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export type TransformationsShiftDatesEntityTypesItem = "date" | "date_interval" | "dob"; +export const TransformationsShiftDatesEntityTypesItem = { + Date: "date", + DateInterval: "date_interval", + Dob: "dob", +} as const; diff --git a/src/ _generated_/rest/api/types/Uuid.ts b/src/ _generated_/rest/api/types/Uuid.ts new file mode 100644 index 00000000..b5af5445 --- /dev/null +++ b/src/ _generated_/rest/api/types/Uuid.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * UUID. + */ +export type Uuid = string; diff --git a/src/ _generated_/rest/api/types/V1AdvancedOptions.ts b/src/ _generated_/rest/api/types/V1AdvancedOptions.ts new file mode 100644 index 00000000..33ca50f4 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AdvancedOptions.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Advanced options for post processing. + */ +export interface V1AdvancedOptions { + /** No. of days by which original date has to be shifted to. */ + date_shift?: number; + /** Custom client specific logic. */ + custom_client?: boolean; + schema?: Skyflow.AdvancedOptionsVaultSchema; +} diff --git a/src/ _generated_/rest/api/types/V1AudioConfig.ts b/src/ _generated_/rest/api/types/V1AudioConfig.ts new file mode 100644 index 00000000..33b4d814 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AudioConfig.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * How to handle audio files. + */ +export interface V1AudioConfig { + output_transcription?: Skyflow.AudioConfigTranscriptionType; + /** If `true`, includes processed audio file in the response. */ + output_processed_audio?: boolean; + options?: Skyflow.V1AudioOptions; +} diff --git a/src/ _generated_/rest/api/types/V1AudioOptions.ts b/src/ _generated_/rest/api/types/V1AudioOptions.ts new file mode 100644 index 00000000..c30377cd --- /dev/null +++ b/src/ _generated_/rest/api/types/V1AudioOptions.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Options for audio files. + */ +export interface V1AudioOptions { + /** Padding added to the beginning of a bleep, in seconds. */ + bleep_start_padding?: number; + /** Padding added to the end of a bleep, in seconds. */ + bleep_end_padding?: number; + /** Specifies how the distortion will be made. Providing a number more than 0 will result in a higher tone and a coefficient less than 0 will result in a lower tone. */ + distortion_steps?: number; + /** This parameter configures the frequency of the sine wave used for the bleep sound in an audio segment. */ + bleep_frequency?: number; + /** It controls the relative loudness of the bleep,positive values increase its loudness, and negative values decrease it. */ + bleep_gain?: number; +} diff --git a/src/ _generated_/rest/api/types/V1DetectFileResponse.ts b/src/ _generated_/rest/api/types/V1DetectFileResponse.ts new file mode 100644 index 00000000..51e69905 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetectFileResponse.ts @@ -0,0 +1,11 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Response to deidentify a file. + */ +export interface V1DetectFileResponse { + /** Status URL for the deidentification request. */ + status_url?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DetectStatusResponse.ts b/src/ _generated_/rest/api/types/V1DetectStatusResponse.ts new file mode 100644 index 00000000..c6fdd92e --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetectStatusResponse.ts @@ -0,0 +1,16 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to get the status of a file deidentification request. + */ +export interface V1DetectStatusResponse { + status?: Skyflow.V1DetectStatusResponseStatus; + /** How the input file was specified. */ + output?: Skyflow.V1ProcessedFileOutput[]; + /** Status details about the deidentification request. */ + message?: string; +} diff --git a/src/ _generated_/rest/api/types/V1DetectStatusResponseStatus.ts b/src/ _generated_/rest/api/types/V1DetectStatusResponseStatus.ts new file mode 100644 index 00000000..ef62b56c --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetectStatusResponseStatus.ts @@ -0,0 +1,19 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Status of the deidentification request. + * + * - UNKNOWN: Unknown status. + * - FAILED: Deidentification failed. + * - SUCCESS: Deidentification succeeded. + * - IN_PROGRESS: Deidentification ongoing. + */ +export type V1DetectStatusResponseStatus = "UNKNOWN" | "FAILED" | "SUCCESS" | "IN_PROGRESS"; +export const V1DetectStatusResponseStatus = { + Unknown: "UNKNOWN", + Failed: "FAILED", + Success: "SUCCESS", + InProgress: "IN_PROGRESS", +} as const; diff --git a/src/ _generated_/rest/api/types/V1DetectTextRequest.ts b/src/ _generated_/rest/api/types/V1DetectTextRequest.ts new file mode 100644 index 00000000..582e856f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetectTextRequest.ts @@ -0,0 +1,30 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Request to deidentify a string. + */ +export interface V1DetectTextRequest { + /** Data to deidentify. */ + text: string; + /** ID of the vault. */ + vault_id: string; + /** Will give a handle to delete the tokens generated during a specific interaction. */ + session_id?: string; + /** Entities to detect and deidentify. */ + restrict_entity_types?: Skyflow.DetectDataEntities[]; + deidentify_token_format?: Skyflow.DetectRequestDeidentifyOption; + /** Regular expressions to ignore when detecting entities. */ + allow_regex?: string[]; + /** Regular expressions to always restrict. Strings matching these regular expressions are replaced with 'RESTRICTED'. */ + restrict_regex?: string[]; + /** If `true`, returns the details for the detected entities. */ + return_entities?: boolean; + accuracy?: Skyflow.DetectDataAccuracy; + advanced_options?: Skyflow.V1AdvancedOptions; + /** Indicates whether entities should be stored in the vault. */ + store_entities?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1DetectTextResponse.ts b/src/ _generated_/rest/api/types/V1DetectTextResponse.ts new file mode 100644 index 00000000..be3c7788 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1DetectTextResponse.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Response to deidentify a string. + */ +export interface V1DetectTextResponse { + /** Deidentified text. If the input was a file, text that was extracted or transcribed from the file and deidentified. */ + processed_text?: string; + /** Detected entities. */ + entities?: Skyflow.V1ResponseEntities[]; +} diff --git a/src/ _generated_/rest/api/types/V1FileDataFormat.ts b/src/ _generated_/rest/api/types/V1FileDataFormat.ts new file mode 100644 index 00000000..56c2ee64 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1FileDataFormat.ts @@ -0,0 +1,68 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Supported input file data formats. + * + * - unknown: If data format is not provided. + * - mp3: Audio mp3 file. + * - wav: Audio wav file. + * - pdf: Text pdf file. + * - txt: Plain text file. + * - csv: CSV file. + * - json: JSON file. + * - jpg: JPG image file. + * - jpeg: JPEG image file. + * - tif: TIF image file. + * - tiff: TIFF image file. + * - png: PNG image file. + * - bmp: Bitmap image file. + * - xls: XLS Excel file. + * - xlsx: XLSX Excel file. + * - doc: DOC Word file. + * - docx: DOCS Word file. + * - ppt: PPT PowerPoint file. + * - pptx: PPTX PowerPoint file. + */ +export type V1FileDataFormat = + | "bmp" + | "csv" + | "doc" + | "docx" + | "jpeg" + | "jpg" + | "json" + | "mp3" + | "pdf" + | "png" + | "ppt" + | "pptx" + | "tif" + | "tiff" + | "txt" + | "unknown" + | "wav" + | "xls" + | "xlsx"; +export const V1FileDataFormat = { + Bmp: "bmp", + Csv: "csv", + Doc: "doc", + Docx: "docx", + Jpeg: "jpeg", + Jpg: "jpg", + Json: "json", + Mp3: "mp3", + Pdf: "pdf", + Png: "png", + Ppt: "ppt", + Pptx: "pptx", + Tif: "tif", + Tiff: "tiff", + Txt: "txt", + Unknown: "unknown", + Wav: "wav", + Xls: "xls", + Xlsx: "xlsx", +} as const; diff --git a/src/ _generated_/rest/api/types/V1ImageOptions.ts b/src/ _generated_/rest/api/types/V1ImageOptions.ts new file mode 100644 index 00000000..fb33b7fc --- /dev/null +++ b/src/ _generated_/rest/api/types/V1ImageOptions.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * How to handle image files. + */ +export interface V1ImageOptions { + /** If `true`, includes processed image in the output. */ + output_processed_image?: boolean; + /** If `true`, includes OCR text output in the response. */ + output_ocr_text?: boolean; +} diff --git a/src/ _generated_/rest/api/types/V1Locations.ts b/src/ _generated_/rest/api/types/V1Locations.ts new file mode 100644 index 00000000..82fc7d10 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1Locations.ts @@ -0,0 +1,17 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * Locations of an entity in the text. + */ +export interface V1Locations { + /** Index of the first character of the string in the original text. */ + start_index?: number; + /** Index of the last character of the string in the original text. */ + end_index?: number; + /** Index of the first character of the string in the processed text. */ + start_index_processed?: number; + /** Index of the last character of the string in the processed text. */ + end_index_processed?: number; +} diff --git a/src/ _generated_/rest/api/types/V1PdfConfig.ts b/src/ _generated_/rest/api/types/V1PdfConfig.ts new file mode 100644 index 00000000..74d58161 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1PdfConfig.ts @@ -0,0 +1,12 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * How to handle PDF files. + */ +export interface V1PdfConfig { + options?: Skyflow.V1PdfOptions; +} diff --git a/src/ _generated_/rest/api/types/V1PdfOptions.ts b/src/ _generated_/rest/api/types/V1PdfOptions.ts new file mode 100644 index 00000000..efb2a664 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1PdfOptions.ts @@ -0,0 +1,13 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * How to handle PDF files. + */ +export interface V1PdfOptions { + /** Pixel density at which to process the PDF file. */ + density?: number; + /** Max resolution at which to process the PDF file. */ + max_resolution?: number; +} diff --git a/src/ _generated_/rest/api/types/V1ProcessedFileOutput.ts b/src/ _generated_/rest/api/types/V1ProcessedFileOutput.ts new file mode 100644 index 00000000..7d40c433 --- /dev/null +++ b/src/ _generated_/rest/api/types/V1ProcessedFileOutput.ts @@ -0,0 +1,15 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Contains details and contents of the processed file. + */ +export interface V1ProcessedFileOutput { + output_type?: Skyflow.DetectFileRequestDataType; + /** URL or base64-encoded data of the output. */ + processed_file?: string; + processed_file_type?: Skyflow.ProcessedFileOutputProcessedFileType; +} diff --git a/src/ _generated_/rest/api/types/V1ResponseEntities.ts b/src/ _generated_/rest/api/types/V1ResponseEntities.ts new file mode 100644 index 00000000..9554698f --- /dev/null +++ b/src/ _generated_/rest/api/types/V1ResponseEntities.ts @@ -0,0 +1,20 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import * as Skyflow from "../index"; + +/** + * Detected entities. + */ +export interface V1ResponseEntities { + /** Processed text of the entity. */ + processed_text?: string; + /** Original text of the entity. */ + original_text?: string; + location?: Skyflow.V1Locations; + /** Highest rated label. */ + best_label?: string; + /** Labels and their scores. */ + labels?: Record; +} diff --git a/src/ _generated_/rest/api/types/VaultId.ts b/src/ _generated_/rest/api/types/VaultId.ts new file mode 100644 index 00000000..6d06d4de --- /dev/null +++ b/src/ _generated_/rest/api/types/VaultId.ts @@ -0,0 +1,8 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +/** + * ID of a vault you have Detect Invoker or Vault Owner permissions for. + */ +export type VaultId = string; diff --git a/src/ _generated_/rest/api/types/index.ts b/src/ _generated_/rest/api/types/index.ts index b3448324..6db978dd 100644 --- a/src/ _generated_/rest/api/types/index.ts +++ b/src/ _generated_/rest/api/types/index.ts @@ -9,6 +9,15 @@ export * from "./DetokenizeRecordResponseValueType"; export * from "./V1GetAuthTokenResponse"; export * from "./RedactionEnumRedaction"; export * from "./RequestActionType"; +export * from "./AdvancedOptionsColumnMapping"; +export * from "./AdvancedOptionsEntityColumnMap"; +export * from "./AdvancedOptionsVaultSchema"; +export * from "./AudioConfigTranscriptionType"; +export * from "./DetectDataAccuracy"; +export * from "./DetectDataEntities"; +export * from "./DetectFileRequestDataType"; +export * from "./DetectRequestDeidentifyOption"; +export * from "./ProcessedFileOutputProcessedFileType"; export * from "./GooglerpcStatus"; export * from "./ProtobufAny"; export * from "./V1AuditAfterOptions"; @@ -41,3 +50,45 @@ export * from "./V1TokenizeResponse"; export * from "./V1UpdateRecordResponse"; export * from "./V1VaultFieldMapping"; export * from "./V1VaultSchemaConfig"; +export * from "./V1AdvancedOptions"; +export * from "./V1AudioConfig"; +export * from "./V1AudioOptions"; +export * from "./V1DetectFileResponse"; +export * from "./V1DetectStatusResponse"; +export * from "./V1DetectStatusResponseStatus"; +export * from "./V1DetectTextRequest"; +export * from "./V1DetectTextResponse"; +export * from "./V1FileDataFormat"; +export * from "./V1ImageOptions"; +export * from "./V1Locations"; +export * from "./V1PdfConfig"; +export * from "./V1PdfOptions"; +export * from "./V1ProcessedFileOutput"; +export * from "./V1ResponseEntities"; +export * from "./EntityType"; +export * from "./ErrorString"; +export * from "./ErrorResponseError"; +export * from "./ErrorResponse"; +export * from "./DeidentifyStatusResponseStatus"; +export * from "./DeidentifyStatusResponseOutputType"; +export * from "./DeidentifyStatusResponse"; +export * from "./EntityLocation"; +export * from "./DeidentifyFileOutputProcessedFileType"; +export * from "./DeidentifyFileOutput"; +export * from "./DetectedEntity"; +export * from "./TokenTypeDefault"; +export * from "./TokenType"; +export * from "./TokenTypeWithoutVaultDefault"; +export * from "./TokenTypeWithoutVault"; +export * from "./DeidentifyStringResponse"; +export * from "./TransformationsShiftDatesEntityTypesItem"; +export * from "./TransformationsShiftDates"; +export * from "./Transformations"; +export * from "./VaultId"; +export * from "./AllowRegex"; +export * from "./RestrictRegex"; +export * from "./EntityTypes"; +export * from "./DeidentifyFileResponse"; +export * from "./ReidentifyStringResponse"; +export * from "./Uuid"; +export * from "./ResourceId"; diff --git a/src/utils/index.ts b/src/utils/index.ts index b75dce9f..dbda4a5b 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -99,6 +99,72 @@ export const TYPES = { INVOKE_CONNECTION: 'INVOKE_CONNECTION', }; +export enum DETECT_ENTITIES { + ACCOUNT_NUMBER = 'ACCOUNT_NUMBER', + AGE = 'AGE', + ALL = 'ALL', + BANK_ACCOUNT = 'BANK_ACCOUNT', + BLOOD_TYPE = 'BLOOD_TYPE', + CONDITION = 'CONDITION', + CORPORATE_ACTION = 'CORPORATE_ACTION', + CREDIT_CARD = 'CREDIT_CARD', + CREDIT_CARD_EXPIRATION = 'CREDIT_CARD_EXPIRATION', + CVV = 'CVV', + DATE = 'DATE', + DATE_INTERVAL = 'DATE_INTERVAL', + DOB = 'DOB', + DOSE = 'DOSE', + DRIVER_LICENSE = 'DRIVER_LICENSE', + DRUG = 'DRUG', + DURATION = 'DURATION', + EMAIL_ADDRESS = 'EMAIL_ADDRESS', + EVENT = 'EVENT', + FILENAME = 'FILENAME', + FINANCIAL_METRIC = 'FINANCIAL_METRIC', + GENDER_SEXUALITY = 'GENDER_SEXUALITY', + HEALTHCARE_NUMBER = 'HEALTHCARE_NUMBER', + INJURY = 'INJURY', + IP_ADDRESS = 'IP_ADDRESS', + LANGUAGE = 'LANGUAGE', + LOCATION = 'LOCATION', + LOCATION_ADDRESS = 'LOCATION_ADDRESS', + LOCATION_ADDRESS_STREET = 'LOCATION_ADDRESS_STREET', + LOCATION_CITY = 'LOCATION_CITY', + LOCATION_COORDINATE = 'LOCATION_COORDINATE', + LOCATION_COUNTRY = 'LOCATION_COUNTRY', + LOCATION_STATE = 'LOCATION_STATE', + LOCATION_ZIP = 'LOCATION_ZIP', + MARITAL_STATUS = 'MARITAL_STATUS', + MEDICAL_CODE = 'MEDICAL_CODE', + MEDICAL_PROCESS = 'MEDICAL_PROCESS', + MONEY = 'MONEY', + NAME = 'NAME', + NAME_FAMILY = 'NAME_FAMILY', + NAME_GIVEN = 'NAME_GIVEN', + NAME_MEDICAL_PROFESSIONAL = 'NAME_MEDICAL_PROFESSIONAL', + NUMERICAL_PII = 'NUMERICAL_PII', + OCCUPATION = 'OCCUPATION', + ORGANIZATION = 'ORGANIZATION', + ORGANIZATION_MEDICAL_FACILITY = 'ORGANIZATION_MEDICAL_FACILITY', + ORIGIN = 'ORIGIN', + PASSPORT_NUMBER = 'PASSPORT_NUMBER', + PASSWORD = 'PASSWORD', + PHONE_NUMBER = 'PHONE_NUMBER', + PHYSICAL_ATTRIBUTE = 'PHYSICAL_ATTRIBUTE', + POLITICAL_AFFILIATION = 'POLITICAL_AFFILIATION', + PRODUCT = 'PRODUCT', + RELIGION = 'RELIGION', + ROUTING_NUMBER = 'ROUTING_NUMBER', + SSN = 'SSN', + STATISTICS = 'STATISTICS', + TIME = 'TIME', + TREND = 'TREND', + URL = 'URL', + USERNAME = 'USERNAME', + VEHICLE_ID = 'VEHICLE_ID', + ZODIAC_SIGN = 'ZODIAC_SIGN', +} + export interface ISkyflowError { http_status?: string | number | null, grpc_code?: string | number | null, diff --git a/src/vault/controller/detect/index.ts b/src/vault/controller/detect/index.ts index e467a486..960ff6b8 100644 --- a/src/vault/controller/detect/index.ts +++ b/src/vault/controller/detect/index.ts @@ -1,9 +1,16 @@ //imports +import { MessageType, printLog } from "../../../utils"; +import logs from "../../../utils/logs"; +import VaultClient from "../../client"; + class DetectController { - constructor() { + private client: VaultClient; + constructor(client: VaultClient) { + this.client = client; + printLog(logs.infoLogs.CONTROLLER_INITIALIZED, MessageType.LOG, this.client.getLogLevel()); } static initialize() { diff --git a/src/vault/model/options/deidentify-text/index.ts b/src/vault/model/options/deidentify-text/index.ts new file mode 100644 index 00000000..8b05e421 --- /dev/null +++ b/src/vault/model/options/deidentify-text/index.ts @@ -0,0 +1,65 @@ +import { DETECT_ENTITIES } from "../../../../utils"; + +class DeidentifyTextOptions { + private _entities: DETECT_ENTITIES[]; + private _allowRegexList: string[]; + private _restrictRegexList: string[]; + private _tokenFormat: TokenFormat; + private _transformations: Transformations; + + constructor( + entities: DETECT_ENTITIES[], + allowRegexList: string[], + restrictRegexList: string[], + tokenFormat: TokenFormat, + transformations: Transformations + ) { + this._entities = entities; + this._allowRegexList = allowRegexList; + this._restrictRegexList = restrictRegexList; + this._tokenFormat = tokenFormat; + this._transformations = transformations; + } + + public get entities(): string[] { + return this._entities; + } + + public set entities(value: DETECT_ENTITIES[]) { + this._entities = value; + } + + public get allowRegexList(): string[] { + return this._allowRegexList; + } + + public set allowRegexList(value: string[]) { + this._allowRegexList = value; + } + + public get restrictRegexList(): string[] { + return this._restrictRegexList; + } + + public set restrictRegexList(value: string[]) { + this._restrictRegexList = value; + } + + public get tokenFormat(): TokenFormat { + return this._tokenFormat; + } + + public set tokenFormat(value: TokenFormat) { + this._tokenFormat = value; + } + + public get transformations(): Transformations { + return this._transformations; + } + + public set transformations(value: Transformations) { + this._transformations = value; + } +} + +export default DeidentifyTextOptions; \ No newline at end of file diff --git a/src/vault/model/options/deidentify-text/token-format/index.ts b/src/vault/model/options/deidentify-text/token-format/index.ts new file mode 100644 index 00000000..e5bb030b --- /dev/null +++ b/src/vault/model/options/deidentify-text/token-format/index.ts @@ -0,0 +1,50 @@ +class TokenFormat { + private _default: string; + private _vaultToken: string[]; + private _entityUniqueCounter: string[]; + private _entityOnly: string[]; + + constructor( + defaultToken: string, + vaultToken: string[], + entityUniqueCounter: string[], + entityOnly: string[] + ) { + this._default = defaultToken; + this._vaultToken = vaultToken; + this._entityUniqueCounter = entityUniqueCounter; + this._entityOnly = entityOnly; + } + + public get default(): string { + return this._default; + } + + public set default(value: string) { + this._default = value; + } + + public get vaultToken(): string[] { + return this._vaultToken; + } + + public set vaultToken(value: string[]) { + this._vaultToken = value; + } + + public get entityUniqueCounter(): string[] { + return this._entityUniqueCounter; + } + + public set entityUniqueCounter(value: string[]) { + this._entityUniqueCounter = value; + } + + public get entityOnly(): string[] { + return this._entityOnly; + } + + public set entityOnly(value: string[]) { + this._entityOnly = value; + } +} \ No newline at end of file diff --git a/src/vault/model/options/deidentify-text/transformations/index.ts b/src/vault/model/options/deidentify-text/transformations/index.ts new file mode 100644 index 00000000..158435c0 --- /dev/null +++ b/src/vault/model/options/deidentify-text/transformations/index.ts @@ -0,0 +1,19 @@ +class Transformations { + private _shiftDays: { + max: number; + min: number; + entities: string[]; + }; + + constructor(shiftDays: { max: number; min: number; entities: string[] }) { + this._shiftDays = shiftDays; + } + + public get shiftDays(): { max: number; min: number; entities: string[] } { + return this._shiftDays; + } + + public set shiftDays(value: { max: number; min: number; entities: string[] }) { + this._shiftDays = value; + } +} \ No newline at end of file diff --git a/src/vault/model/request/deidentify-text/index.ts b/src/vault/model/request/deidentify-text/index.ts new file mode 100644 index 00000000..668a814c --- /dev/null +++ b/src/vault/model/request/deidentify-text/index.ts @@ -0,0 +1,21 @@ +class DeidentifyTextRequest { + // Field + private _text: string; + + // Constructor + constructor(text: string) { + this._text = text; + } + + // Getter for text + public get text(): string { + return this._text; + } + + // Setter for text + public set text(value: string) { + this._text = value; + } +} + +export default DeidentifyTextRequest; \ No newline at end of file diff --git a/src/vault/skyflow/index.ts b/src/vault/skyflow/index.ts index 7e56b075..3922cc7a 100644 --- a/src/vault/skyflow/index.ts +++ b/src/vault/skyflow/index.ts @@ -10,6 +10,7 @@ import SkyflowError from "../../error"; import logs from "../../utils/logs"; import { isLogLevel, validateConnectionConfig, validateSkyflowConfig, validateSkyflowCredentials, validateUpdateConnectionConfig, validateUpdateVaultConfig, validateVaultConfig } from "../../utils/validations"; import SKYFLOW_ERROR_CODE from "../../error/codes"; +import DetectController from "../controller/detect"; class Skyflow { @@ -49,16 +50,18 @@ class Skyflow { const env = config.env || Env.PROD; const vaultUrl = getVaultURL(config.clusterId, env); const client = new VaultClient(vaultUrl, config.vaultId, config?.credentials, this.commonCredentials, this.logLevel); - const controller = new VaultController(client); + const vaultController = new VaultController(client); + const detectController = new DetectController(client); printLog(parameterizedString(logs.infoLogs.VAULT_CONTROLLER_INITIALIZED, [config.vaultId]), MessageType.LOG, this.logLevel); - clients[config.vaultId] = { config, client, controller }; + // printLog for detect controller + clients[config.vaultId] = { config, client, vaultController, detectController }; } private addConnectionClient(config: ConnectionConfig, clients: ClientObj) { const client = new VaultClient(config.connectionUrl, '', config?.credentials, this.commonCredentials, this.logLevel); - const controller = new ConnectionController(client); + const connectionController = new ConnectionController(client); printLog(parameterizedString(logs.infoLogs.CONNECTION_CONTROLLER_INITIALIZED, [config.connectionId]), MessageType.LOG, this.logLevel); - clients[config.connectionId] = { config, client, controller }; + clients[config.connectionId] = { config, client, connectionController }; } addVaultConfig(config: VaultConfig) { @@ -201,20 +204,45 @@ class Skyflow { } vault(vaultId?: string) { - return this.getClient(vaultId, this.vaultClients, VAULT_ID) as VaultController; + return this.getClient(vaultId, this.vaultClients, VAULT_ID, 'vault') as VaultController; + } + + detect(vaultId?: string) { + return this.getClient(vaultId, this.vaultClients, VAULT_ID, 'detect') as DetectController; } connection(connectionId?: string) { - return this.getClient(connectionId, this.connectionClients, CONNECTION_ID) as ConnectionController; + return this.getClient(connectionId, this.connectionClients, CONNECTION_ID, 'connection') as ConnectionController; } - private getClient(id: string | undefined, clients: ClientObj, idKey: string) { - if(Object.keys(clients).length === 0) this.throwErrorForEmptyClients(idKey) + private getClient( + id: string | undefined, + clients: ClientObj, + idKey: string, + controllerType: 'vault' | 'detect' | 'connection' + ) { + if (Object.keys(clients).length === 0) { + this.throwErrorForEmptyClients(idKey); + } + const clientId = id || Object.keys(clients)[0]; - if (clientId && clients[clientId]?.controller) { - return clients[clientId].controller; + if (clientId) { + const clientData = clients[clientId]; + + if (controllerType === 'vault' && clientData?.vaultController) { + return clientData.vaultController; + } + + if (controllerType === 'detect' && clientData?.detectController) { + return clientData.detectController; + } + + if (controllerType === 'connection' && clientData?.connectionController) { + return clientData.connectionController; + } + + this.throwErrorForUnknownId(clientId, idKey); } - if (clientId) this.throwErrorForUnknownId(clientId, idKey) } private updateClients(updateType: string) { diff --git a/src/vault/types/index.ts b/src/vault/types/index.ts index 55a68709..d98617be 100644 --- a/src/vault/types/index.ts +++ b/src/vault/types/index.ts @@ -5,6 +5,7 @@ import Credentials from "../config/credentials"; import VaultController from "../controller/vault"; import ConnectionController from "../controller/connections"; import VaultClient from "../client"; +import DetectController from "../controller/detect"; export interface SkyflowConfig { vaultConfigs: VaultConfig[]; @@ -15,7 +16,9 @@ export interface SkyflowConfig { export interface ClientConfig { config: VaultConfig | ConnectionConfig; - controller: VaultController | ConnectionController; + vaultController?: VaultController; + connectionController?: ConnectionController; + detectController?: DetectController; client: VaultClient; } From b843d92ea42b85a80c78b3c42bec3d74b1034432 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Tue, 29 Apr 2025 16:29:16 +0530 Subject: [PATCH 13/22] SK-1996: Added detect api in client --- .../api/resources/records/client/Client.ts | 18 +++++--- .../requests/FileServiceUploadFileRequest.ts | 5 ++- src/utils/index.ts | 4 +- src/vault/client/index.ts | 5 +++ .../model/options/deidentify-text/index.ts | 8 ++-- .../model/response/deidentify-text/index.ts | 44 +++++++++++++++++++ 6 files changed, 71 insertions(+), 13 deletions(-) create mode 100644 src/vault/model/response/deidentify-text/index.ts diff --git a/src/ _generated_/rest/api/resources/records/client/Client.ts b/src/ _generated_/rest/api/resources/records/client/Client.ts index 54d9d3c4..c0682f3f 100644 --- a/src/ _generated_/rest/api/resources/records/client/Client.ts +++ b/src/ _generated_/rest/api/resources/records/client/Client.ts @@ -816,39 +816,43 @@ export class Records { /** * Uploads a file to the specified record. * - * @param {File | fs.ReadStream | Blob | undefined} fileColumnName + * @param {File | fs.ReadStream | Blob | undefined} file * @param {string} vaultId * @param {string} objectName * @param {string} id + * @param {Skyflow.FileServiceUploadFileRequest} request * @param {Records.RequestOptions} requestOptions - Request-specific configuration. * * @throws {@link Skyflow.NotFoundError} * * @example - * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID") + * await client.records.fileServiceUploadFile(fs.createReadStream("/path/to/your/file"), "vaultID", "objectName", "ID", {}) */ public fileServiceUploadFile( - fileColumnName: File | fs.ReadStream | Blob | undefined, + file: File | fs.ReadStream | Blob | undefined, vaultId: string, objectName: string, id: string, + request: Skyflow.FileServiceUploadFileRequest, requestOptions?: Records.RequestOptions, ): core.HttpResponsePromise { return core.HttpResponsePromise.fromPromise( - this.__fileServiceUploadFile(fileColumnName, vaultId, objectName, id, requestOptions), + this.__fileServiceUploadFile(file, vaultId, objectName, id, request, requestOptions), ); } private async __fileServiceUploadFile( - fileColumnName: File | fs.ReadStream | Blob | undefined, + file: File | fs.ReadStream | Blob | undefined, vaultId: string, objectName: string, id: string, + request: Skyflow.FileServiceUploadFileRequest, requestOptions?: Records.RequestOptions, ): Promise> { const _request = await core.newFormData(); - if (fileColumnName != null) { - await _request.appendFile("fileColumnName", fileColumnName); + if (file != null && request.columnName != null) { + await _request.appendFile(request.columnName, file); + } const _maybeEncodedRequest = await _request.getRequest(); diff --git a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts index fbbd7e13..9a4af29f 100644 --- a/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts +++ b/src/ _generated_/rest/api/resources/records/client/requests/FileServiceUploadFileRequest.ts @@ -6,4 +6,7 @@ * @example * {} */ -export interface FileServiceUploadFileRequest {} +export interface FileServiceUploadFileRequest { + /** Name of the column to store the file in. The column must have a file data type. */ + columnName?: string; +} diff --git a/src/utils/index.ts b/src/utils/index.ts index dbda4a5b..323d837f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -96,10 +96,12 @@ export const TYPES = { GET: 'GET', FILE_UPLOAD: 'FILE_UPLOAD', QUERY: 'QUERY', + DETECT: 'DETECT', INVOKE_CONNECTION: 'INVOKE_CONNECTION', + DEIDENTIFY_TEXT: 'DEIDENTIFY_TEXT', }; -export enum DETECT_ENTITIES { +export enum DetectEntities { ACCOUNT_NUMBER = 'ACCOUNT_NUMBER', AGE = 'AGE', ALL = 'ALL', diff --git a/src/vault/client/index.ts b/src/vault/client/index.ts index 2bd1095d..c3266c7e 100644 --- a/src/vault/client/index.ts +++ b/src/vault/client/index.ts @@ -1,6 +1,7 @@ // imports import { Query } from "../../ _generated_/rest/api/resources/query/client/Client"; import { Records } from "../../ _generated_/rest/api/resources/records/client/Client"; +import { Strings } from "../../ _generated_/rest/api/resources/strings/client/Client"; import { Tokens } from "../../ _generated_/rest/api/resources/tokens/client/Client"; import SkyflowError from "../../error"; import errorMessages from "../../error/messages"; @@ -23,6 +24,8 @@ class VaultClient { queryAPI!: Query; + stringsAPI!: Strings; + individualCredentials?: Credentials; skyflowCredentials?: Credentials; @@ -77,6 +80,8 @@ class VaultClient { case TYPES.QUERY: this.queryAPI = new Query(this.configuration); break; + case TYPES.DETECT: + this.stringsAPI = new Strings(this.configuration); default: break; } diff --git a/src/vault/model/options/deidentify-text/index.ts b/src/vault/model/options/deidentify-text/index.ts index 8b05e421..b141438d 100644 --- a/src/vault/model/options/deidentify-text/index.ts +++ b/src/vault/model/options/deidentify-text/index.ts @@ -1,14 +1,14 @@ -import { DETECT_ENTITIES } from "../../../../utils"; +import { DetectEntities } from "../../../../utils"; class DeidentifyTextOptions { - private _entities: DETECT_ENTITIES[]; + private _entities: DetectEntities[]; private _allowRegexList: string[]; private _restrictRegexList: string[]; private _tokenFormat: TokenFormat; private _transformations: Transformations; constructor( - entities: DETECT_ENTITIES[], + entities: DetectEntities[], allowRegexList: string[], restrictRegexList: string[], tokenFormat: TokenFormat, @@ -25,7 +25,7 @@ class DeidentifyTextOptions { return this._entities; } - public set entities(value: DETECT_ENTITIES[]) { + public set entities(value: DetectEntities[]) { this._entities = value; } diff --git a/src/vault/model/response/deidentify-text/index.ts b/src/vault/model/response/deidentify-text/index.ts new file mode 100644 index 00000000..1032a601 --- /dev/null +++ b/src/vault/model/response/deidentify-text/index.ts @@ -0,0 +1,44 @@ +//imports + +class DeidentifiedTextResponse { + //fields + processedText: string; + entities: Array<{ + token: string; + value: string; + textIndex: object; + processedIndex: object; + entity: string; + scores: object; + }>; + wordCount: number; + charCount: number; + + constructor({ + processedText, + entities, + wordCount, + charCount, + }: { + processedText: string; + entities: Array<{ + token: string; + value: string; + textIndex: object; + processedIndex: object; + entity: string; + scores: object; + }>; + wordCount: number; + charCount: number; + }) { + this.processedText = processedText; + this.entities = entities; + this.wordCount = wordCount; + this.charCount = charCount; + } + + //getters and setters +} + +export default DeidentifiedTextResponse; \ No newline at end of file From c21184a400d0cb1bef6e04b8d52aefe54f403a6d Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Fri, 2 May 2025 16:59:21 +0530 Subject: [PATCH 14/22] SK-2018: added deidentify text public interface implementation --- src/error/codes/index.ts | 7 + src/error/messages/index.ts | 10 +- src/index.ts | 15 ++- src/utils/index.ts | 126 +++++++++--------- src/utils/validations/index.ts | 32 +++++ src/vault/controller/detect/index.ts | 94 +++++++++++-- .../model/options/deidentify-text/index.ts | 67 ++++------ .../deidentify-text/token-format/index.ts | 55 ++++---- .../deidentify-text/transformations/index.ts | 17 +-- .../model/options/reidentify-text/index.ts | 36 +++++ .../model/request/reidentify-text/index.ts | 21 +++ .../model/response/deidentify-text/index.ts | 4 +- 12 files changed, 331 insertions(+), 153 deletions(-) create mode 100644 src/vault/model/options/reidentify-text/index.ts create mode 100644 src/vault/model/request/reidentify-text/index.ts diff --git a/src/error/codes/index.ts b/src/error/codes/index.ts index fc312b84..b0b51856 100644 --- a/src/error/codes/index.ts +++ b/src/error/codes/index.ts @@ -189,6 +189,13 @@ const SKYFLOW_ERROR_CODE = { EMPTY_VAULT_CLIENTS: { http_code: 400, message: errorMessages.EMPTY_VAULT_CLIENTS }, EMPTY_CONNECTION_CLIENTS: { http_code: 400, message: errorMessages.EMPTY_CONNECTION_CLIENTS }, + + INVALID_TEXT_IN_DEIDENTIFY: { http_code: 400, message: errorMessages.INVALID_TEXT_IN_DEIDENTIFY }, + INVALID_ENTITIES_IN_DEIDENTIFY: { http_code: 400, message: errorMessages.INVALID_ENTITIES_IN_DEIDENTIFY }, + INVALID_ALLOW_REGEX_LIST: { http_code: 400, message: errorMessages.INVALID_ALLOW_REGEX_LIST }, + INVALID_RESTRICT_REGEX_LIST: { http_code: 400, message: errorMessages.INVALID_RESTRICT_REGEX_LIST }, + INVALID_TOKEN_FORMAT: { http_code: 400, message: errorMessages.INVALID_TOKEN_FORMAT }, + INVALID_TRANSFORMATIONS: { http_code: 400, message: errorMessages.INVALID_TRANSFORMATIONS }, }; export default SKYFLOW_ERROR_CODE; \ No newline at end of file diff --git a/src/error/messages/index.ts b/src/error/messages/index.ts index ccb56fb8..aac754d4 100644 --- a/src/error/messages/index.ts +++ b/src/error/messages/index.ts @@ -193,7 +193,15 @@ const errorMessages = { INVAILD_JSON_RESPONSE: `${errorPrefix} Validation error. The invalid json response. Please reach out to skyflow using requestId - %s1.`, EMPTY_VAULT_CLIENTS: `${errorPrefix} Validation error. No vault config found. Please add a vault config`, - EMPTY_CONNECTION_CLIENTS: `${errorPrefix} Validation error. No connection config found. Please add a connection config` + EMPTY_CONNECTION_CLIENTS: `${errorPrefix} Validation error. No connection config found. Please add a connection config`, + + INVALID_TEXT_IN_DEIDENTIFY: `${errorPrefix} Validation error. The text field is required and must be a non-empty string. Specify a valid text.`, + INVALID_ENTITIES_IN_DEIDENTIFY: `${errorPrefix} Validation error. The entities field must be an array of DetectEntities enums. Specify a valid entities.`, + INVALID_ALLOW_REGEX_LIST: `${errorPrefix} Validation error. The allowRegexList field must be an array of strings. Specify a valid allowRegexList.`, + INVALID_RESTRICT_REGEX_LIST: `${errorPrefix} Validation error. The restrictRegexList field must be an array of strings. Specify a valid restrictRegexList.`, + INVALID_TOKEN_FORMAT: `${errorPrefix} Validation error. The tokenFormat key must be an instance of TokenFormat. Specify a valid token format.`, + INVALID_TRANSFORMATIONS: `${errorPrefix} Validation error. The transformations key must be an instance of Transformations. Specify a valid transformations.`, + }; export default errorMessages; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 145621f4..8b3e8431 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import Skyflow from './vault/skyflow'; -import { LogLevel, Env, RedactionType, RequestMethod, OrderByEnum, TokenMode } from './utils'; +import { LogLevel, Env, RedactionType, RequestMethod, OrderByEnum, TokenMode, DetectEntities } from './utils'; import InsertRequest from './vault/model/request/insert'; import InsertOptions from './vault/model/options/insert'; import GetRequest from './vault/model/request/get'; @@ -31,6 +31,11 @@ import { SkyflowConfig, TokenizeRequestType, DetokenizeData } from './vault/type import VaultConfig from './vault/config/vault'; import SkyflowError from './error'; import ConnectionConfig from './vault/config/connection'; +import DeidentifyTextRequest from './vault/model/request/deidentify-text'; +import DeidentifyTextOptions from './vault/model/options/deidentify-text'; +import DeidentifyTextResponse from './vault/model/response/deidentify-text'; +import ReidentifyTextRequest from './vault/model/request/reidentify-text'; +import ReidentifyTextOptions from './vault/model/options/reidentify-text'; export { Env, @@ -78,5 +83,11 @@ export { TokenizeRequest, TokenizeResponse, InvokeConnectionRequest, - InvokeConnectionResponse + InvokeConnectionResponse, + DeidentifyTextRequest, + DeidentifyTextOptions, + DetectEntities, + DeidentifyTextResponse, + ReidentifyTextRequest, + ReidentifyTextOptions }; \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts index 323d837f..54dfea25 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -102,69 +102,69 @@ export const TYPES = { }; export enum DetectEntities { - ACCOUNT_NUMBER = 'ACCOUNT_NUMBER', - AGE = 'AGE', - ALL = 'ALL', - BANK_ACCOUNT = 'BANK_ACCOUNT', - BLOOD_TYPE = 'BLOOD_TYPE', - CONDITION = 'CONDITION', - CORPORATE_ACTION = 'CORPORATE_ACTION', - CREDIT_CARD = 'CREDIT_CARD', - CREDIT_CARD_EXPIRATION = 'CREDIT_CARD_EXPIRATION', - CVV = 'CVV', - DATE = 'DATE', - DATE_INTERVAL = 'DATE_INTERVAL', - DOB = 'DOB', - DOSE = 'DOSE', - DRIVER_LICENSE = 'DRIVER_LICENSE', - DRUG = 'DRUG', - DURATION = 'DURATION', - EMAIL_ADDRESS = 'EMAIL_ADDRESS', - EVENT = 'EVENT', - FILENAME = 'FILENAME', - FINANCIAL_METRIC = 'FINANCIAL_METRIC', - GENDER_SEXUALITY = 'GENDER_SEXUALITY', - HEALTHCARE_NUMBER = 'HEALTHCARE_NUMBER', - INJURY = 'INJURY', - IP_ADDRESS = 'IP_ADDRESS', - LANGUAGE = 'LANGUAGE', - LOCATION = 'LOCATION', - LOCATION_ADDRESS = 'LOCATION_ADDRESS', - LOCATION_ADDRESS_STREET = 'LOCATION_ADDRESS_STREET', - LOCATION_CITY = 'LOCATION_CITY', - LOCATION_COORDINATE = 'LOCATION_COORDINATE', - LOCATION_COUNTRY = 'LOCATION_COUNTRY', - LOCATION_STATE = 'LOCATION_STATE', - LOCATION_ZIP = 'LOCATION_ZIP', - MARITAL_STATUS = 'MARITAL_STATUS', - MEDICAL_CODE = 'MEDICAL_CODE', - MEDICAL_PROCESS = 'MEDICAL_PROCESS', - MONEY = 'MONEY', - NAME = 'NAME', - NAME_FAMILY = 'NAME_FAMILY', - NAME_GIVEN = 'NAME_GIVEN', - NAME_MEDICAL_PROFESSIONAL = 'NAME_MEDICAL_PROFESSIONAL', - NUMERICAL_PII = 'NUMERICAL_PII', - OCCUPATION = 'OCCUPATION', - ORGANIZATION = 'ORGANIZATION', - ORGANIZATION_MEDICAL_FACILITY = 'ORGANIZATION_MEDICAL_FACILITY', - ORIGIN = 'ORIGIN', - PASSPORT_NUMBER = 'PASSPORT_NUMBER', - PASSWORD = 'PASSWORD', - PHONE_NUMBER = 'PHONE_NUMBER', - PHYSICAL_ATTRIBUTE = 'PHYSICAL_ATTRIBUTE', - POLITICAL_AFFILIATION = 'POLITICAL_AFFILIATION', - PRODUCT = 'PRODUCT', - RELIGION = 'RELIGION', - ROUTING_NUMBER = 'ROUTING_NUMBER', - SSN = 'SSN', - STATISTICS = 'STATISTICS', - TIME = 'TIME', - TREND = 'TREND', - URL = 'URL', - USERNAME = 'USERNAME', - VEHICLE_ID = 'VEHICLE_ID', - ZODIAC_SIGN = 'ZODIAC_SIGN', + ACCOUNT_NUMBER = "account_number", + AGE = 'age', + ALL = 'all', + BANK_ACCOUNT = 'bank_account', + BLOOD_TYPE = 'blood_type', + CONDITION = 'condition', + CORPORATE_ACTION = 'corporate_action', + CREDIT_CARD = 'credit_card', + CREDIT_CARD_EXPIRATION = 'credit_card_expiration', + CVV = 'cvv', + DATE = 'date', + DATE_INTERVAL = 'date_interval', + DOB = 'dob', + DOSE = 'dose', + DRIVER_LICENSE = 'driver_license', + DRUG = 'drug', + DURATION = 'duration', + EMAIL_ADDRESS = 'email_address', + EVENT = 'event', + FILENAME = 'filename', + FINANCIAL_METRIC = 'financial_metric', + GENDER_SEXUALITY = 'gender_sexuality', + HEALTHCARE_NUMBER = 'healthcare_number', + INJURY = 'injury', + IP_ADDRESS = 'ip_address', + LANGUAGE = 'language', + LOCATION = 'location', + LOCATION_ADDRESS = 'location_address', + LOCATION_ADDRESS_STREET = 'location_address_street', + LOCATION_CITY = 'location_city', + LOCATION_COORDINATE = 'location_coordinate', + LOCATION_COUNTRY = 'location_country', + LOCATION_STATE = 'location_state', + LOCATION_ZIP = 'location_zip', + MARITAL_STATUS = 'marital_status', + MEDICAL_CODE = 'medical_code', + MEDICAL_PROCESS = 'medical_process', + MONEY = 'money', + NAME = 'name', + NAME_FAMILY = 'name_family', + NAME_GIVEN = 'name_given', + NAME_MEDICAL_PROFESSIONAL = 'name_medical_professional', + NUMERICAL_PII = 'numerical_pii', + OCCUPATION = 'occupation', + ORGANIZATION = 'organization', + ORGANIZATION_MEDICAL_FACILITY = 'organization_medical_facility', + ORIGIN = 'origin', + PASSPORT_NUMBER = 'passport_number', + PASSWORD = 'password', + PHONE_NUMBER = 'phone_number', + PHYSICAL_ATTRIBUTE = 'physical_attribute', + POLITICAL_AFFILIATION = 'political_affiliation', + PRODUCT = 'product', + RELIGION = 'religion', + ROUTING_NUMBER = 'routing_number', + SSN = 'ssn', + STATISTICS = 'statistics', + TIME = 'time', + TREND = 'trend', + URL = 'url', + USERNAME = 'username', + VEHICLE_ID = 'vehicle_id', + ZODIAC_SIGN = 'zodiac_sign', } export interface ISkyflowError { diff --git a/src/utils/validations/index.ts b/src/utils/validations/index.ts index 5409dd4d..e7ae772e 100644 --- a/src/utils/validations/index.ts +++ b/src/utils/validations/index.ts @@ -24,6 +24,10 @@ import * as fs from 'fs'; import { isExpired } from "../jwt-utils"; import logs from "../logs"; import FileUploadOptions from "../../vault/model/options/fileUpload"; +import DeidentifyTextRequest from "../../vault/model/request/deidentify-text"; +import DeidentifyTextOptions from "../../vault/model/options/deidentify-text"; +import TokenFormat from "../../vault/model/options/deidentify-text/token-format"; +import Transformations from "../../vault/model/options/deidentify-text/transformations"; export function isEnv(value?: string): boolean { return value !== undefined && Object.values(Env).includes(value as Env); @@ -941,6 +945,34 @@ export const validateQueryRequest = (queryRequest: QueryRequest, logLevel: LogLe } } +export const validateDeIdentifyText = (deIdentifyTextRequest: DeidentifyTextRequest, options?: DeidentifyTextOptions, logLevel: LogLevel = LogLevel.ERROR) => { + if (!deIdentifyTextRequest.text || typeof deIdentifyTextRequest.text !== 'string' || deIdentifyTextRequest.text.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TEXT_IN_DEIDENTIFY); + } + + if (options) { + if (options.getEntities() && !Array.isArray(options.getEntities())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_ENTITIES_IN_DEIDENTIFY); + } + + if (options.getAllowRegexList() && !Array.isArray(options.getAllowRegexList())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_ALLOW_REGEX_LIST); + } + + if (options.getRestrictRegexList() && !Array.isArray(options.getRestrictRegexList())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_RESTRICT_REGEX_LIST); + } + + if (options.getTokenFormat() && !(options.getTokenFormat() instanceof TokenFormat)) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TOKEN_FORMAT); + } + + if (options.getTransformations() && !(options.getTransformations() instanceof Transformations)) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TRANSFORMATIONS); + } + } +}; + function isStringKeyValueMap(obj: any): obj is StringKeyValueMapType { if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) { return false; diff --git a/src/vault/controller/detect/index.ts b/src/vault/controller/detect/index.ts index 960ff6b8..66423514 100644 --- a/src/vault/controller/detect/index.ts +++ b/src/vault/controller/detect/index.ts @@ -1,8 +1,16 @@ //imports -import { MessageType, printLog } from "../../../utils"; +import { DetectedEntity, EntityType, Transformations } from "../../../ _generated_/rest/api"; +import { generateSDKMetrics, getBearerToken, MessageType, parameterizedString, printLog, removeSDKVersion, SDK_METRICS_HEADER_KEY, TYPES } from "../../../utils"; import logs from "../../../utils/logs"; +import { validateDeIdentifyText } from "../../../utils/validations"; import VaultClient from "../../client"; +import DeidentifyTextOptions from "../../model/options/deidentify-text"; +import ReidentifyTextOptions from "../../model/options/reidentify-text"; +import DeidentifyTextRequest from "../../model/request/deidentify-text"; +import ReidentifyTextRequest from "../../model/request/reidentify-text"; +import DeidentifiedTextResponse from "../../model/response/deidentify-text"; +import DeidentifyTextResponse from "../../model/response/deidentify-text"; class DetectController { @@ -13,20 +21,90 @@ class DetectController { printLog(logs.infoLogs.CONTROLLER_INITIALIZED, MessageType.LOG, this.client.getLogLevel()); } - static initialize() { - //return detect object + private createSdkHeaders() { + return { [SDK_METRICS_HEADER_KEY]: JSON.stringify(generateSDKMetrics()) }; } - deIdentify() { - return this; - } + private handleRequest(apiCall: Function, requestType: string): Promise { + return new Promise((resolve, reject) => { + printLog(parameterizedString(logs.infoLogs.EMIT_REQUEST, TYPES[requestType]), MessageType.LOG, this.client.getLogLevel()); + const sdkHeaders = this.createSdkHeaders(); - text() { + getBearerToken(this.client.getCredentials(), this.client.getLogLevel()).then(authInfo => { + this.client.initAPI(authInfo, requestType); + apiCall({ headers: { ...sdkHeaders } }) + .then((response: any) => { + const { data, rawResponse } = response; + const requestId = rawResponse?.headers?.get('x-request-id'); + printLog(logs.infoLogs[`${requestType}_REQUEST_RESOLVED`], MessageType.LOG, this.client.getLogLevel()); + switch (requestType) { + case TYPES.DETECT: + resolve({records: data, requestId}) + break; + } + }).catch((error: any) => { + printLog(logs.errorLogs[`${requestType}_REQUEST_REJECTED`], MessageType.ERROR, this.client.getLogLevel()); + this.client.failureResponse(error).catch((err) => reject(err)) + }); + }).catch(reject); + }); + } + private buildDeidentifyTextRequest(request: DeidentifyTextRequest, options?: DeidentifyTextOptions) { + return { + vault_id: this.client.vaultId, + text: request.text, + entity_types: options?.getEntities() as EntityType[], + allow_regex: options?.getAllowRegexList(), + restrict_regex: options?.getRestrictRegexList(), + transformations: options?.getTransformations() as Transformations, + }; } - file() { + deidentifyText(request: DeidentifyTextRequest, options?: DeidentifyTextOptions): Promise { + return new Promise((resolve, reject) => { + try { + validateDeIdentifyText(request, options, this.client.getLogLevel()); + + const requestBody = this.buildDeidentifyTextRequest(request, options); + this.handleRequest( + () => this.client.stringsAPI.deidentifyString( + requestBody + ).withRawResponse(), + TYPES.DETECT + ).then(data => { + resolve(new DeidentifyTextResponse({ + processedText: data.records.processed_text, + entities: data.records.entities.map((entity: DetectedEntity) => ({ + token: entity.token, + value: entity.value, + textIndex: { + start: entity.location?.start_index, + end: entity.location?.end_index, + }, + processedIndex: { + start: entity.location?.start_index_processed, + end: entity.location?.end_index_processed, + }, + entity: entity.entity_type, + scores: entity.entity_scores, + })), + wordCount: data.records.word_count, + charCount: data.records.character_count, + })); + }).catch(error => { + reject(error) + }); + } catch (error) { + if (error instanceof Error) + printLog(removeSDKVersion(error.message), MessageType.ERROR, this.client.getLogLevel()); + reject(error); + } + }); + } + reidentifyText(request: ReidentifyTextRequest, options?: ReidentifyTextOptions) { + } } diff --git a/src/vault/model/options/deidentify-text/index.ts b/src/vault/model/options/deidentify-text/index.ts index b141438d..0fcbb078 100644 --- a/src/vault/model/options/deidentify-text/index.ts +++ b/src/vault/model/options/deidentify-text/index.ts @@ -1,65 +1,56 @@ import { DetectEntities } from "../../../../utils"; +import TokenFormat from "./token-format"; +import Transformations from "./transformations"; class DeidentifyTextOptions { - private _entities: DetectEntities[]; - private _allowRegexList: string[]; - private _restrictRegexList: string[]; - private _tokenFormat: TokenFormat; - private _transformations: Transformations; - - constructor( - entities: DetectEntities[], - allowRegexList: string[], - restrictRegexList: string[], - tokenFormat: TokenFormat, - transformations: Transformations - ) { + // Fields + private _entities?: DetectEntities[]; + private _allowRegexList?: string[]; + private _restrictRegexList?: string[]; + private _tokenFormat?: TokenFormat; + private _transformations?: Transformations; + + // Setters + setEntities(entities: DetectEntities[]) { this._entities = entities; - this._allowRegexList = allowRegexList; - this._restrictRegexList = restrictRegexList; - this._tokenFormat = tokenFormat; - this._transformations = transformations; } - public get entities(): string[] { - return this._entities; + setAllowRegexList(allowRegexList: string[]) { + this._allowRegexList = allowRegexList; } - public set entities(value: DetectEntities[]) { - this._entities = value; + setRestrictRegexList(restrictRegexList: string[]) { + this._restrictRegexList = restrictRegexList; } - public get allowRegexList(): string[] { - return this._allowRegexList; + setTokenFormat(tokenFormat: TokenFormat) { + this._tokenFormat = tokenFormat; } - public set allowRegexList(value: string[]) { - this._allowRegexList = value; + setTransformations(transformations: Transformations) { + this._transformations = transformations; } - public get restrictRegexList(): string[] { - return this._restrictRegexList; + // Getters + getEntities(): DetectEntities[] | undefined { + return this._entities; } - public set restrictRegexList(value: string[]) { - this._restrictRegexList = value; + getAllowRegexList(): string[] | undefined { + return this._allowRegexList; } - public get tokenFormat(): TokenFormat { - return this._tokenFormat; + getRestrictRegexList(): string[] | undefined { + return this._restrictRegexList; } - public set tokenFormat(value: TokenFormat) { - this._tokenFormat = value; + getTokenFormat(): TokenFormat | undefined { + return this._tokenFormat; } - public get transformations(): Transformations { + getTransformations(): Transformations | undefined { return this._transformations; } - - public set transformations(value: Transformations) { - this._transformations = value; - } } export default DeidentifyTextOptions; \ No newline at end of file diff --git a/src/vault/model/options/deidentify-text/token-format/index.ts b/src/vault/model/options/deidentify-text/token-format/index.ts index e5bb030b..2466eff0 100644 --- a/src/vault/model/options/deidentify-text/token-format/index.ts +++ b/src/vault/model/options/deidentify-text/token-format/index.ts @@ -1,50 +1,43 @@ class TokenFormat { - private _default: string; - private _vaultToken: string[]; - private _entityUniqueCounter: string[]; - private _entityOnly: string[]; - - constructor( - defaultToken: string, - vaultToken: string[], - entityUniqueCounter: string[], - entityOnly: string[] - ) { + // Fields + private _default?: string; + private _vaultToken?: string[]; + private _entityUniqueCounter?: string[]; + private _entityOnly?: string[]; + + // Setters + setDefault(defaultToken: string) { this._default = defaultToken; - this._vaultToken = vaultToken; - this._entityUniqueCounter = entityUniqueCounter; - this._entityOnly = entityOnly; } - public get default(): string { - return this._default; + setVaultToken(vaultToken: string[]) { + this._vaultToken = vaultToken; } - public set default(value: string) { - this._default = value; + setEntityUniqueCounter(entityUniqueCounter: string[]) { + this._entityUniqueCounter = entityUniqueCounter; } - public get vaultToken(): string[] { - return this._vaultToken; + setEntityOnly(entityOnly: string[]) { + this._entityOnly = entityOnly; } - public set vaultToken(value: string[]) { - this._vaultToken = value; + // Getters + getDefault(): string | undefined { + return this._default; } - public get entityUniqueCounter(): string[] { - return this._entityUniqueCounter; + getVaultToken(): string[] | undefined { + return this._vaultToken; } - public set entityUniqueCounter(value: string[]) { - this._entityUniqueCounter = value; + getEntityUniqueCounter(): string[] | undefined { + return this._entityUniqueCounter; } - public get entityOnly(): string[] { + getEntityOnly(): string[] | undefined { return this._entityOnly; } +} - public set entityOnly(value: string[]) { - this._entityOnly = value; - } -} \ No newline at end of file +export default TokenFormat; \ No newline at end of file diff --git a/src/vault/model/options/deidentify-text/transformations/index.ts b/src/vault/model/options/deidentify-text/transformations/index.ts index 158435c0..941a9f28 100644 --- a/src/vault/model/options/deidentify-text/transformations/index.ts +++ b/src/vault/model/options/deidentify-text/transformations/index.ts @@ -1,19 +1,20 @@ class Transformations { - private _shiftDays: { - max: number; + // Fields + private _shiftDays?: { + max: number; min: number; entities: string[]; }; - constructor(shiftDays: { max: number; min: number; entities: string[] }) { + // Setters + setShiftDays(shiftDays: { max: number; min: number; entities: string[] }) { this._shiftDays = shiftDays; } - public get shiftDays(): { max: number; min: number; entities: string[] } { + // Getters + getShiftDays(): { max: number; min: number; entities: string[] } | undefined { return this._shiftDays; } +} - public set shiftDays(value: { max: number; min: number; entities: string[] }) { - this._shiftDays = value; - } -} \ No newline at end of file +export default Transformations; \ No newline at end of file diff --git a/src/vault/model/options/reidentify-text/index.ts b/src/vault/model/options/reidentify-text/index.ts new file mode 100644 index 00000000..3cbd69e9 --- /dev/null +++ b/src/vault/model/options/reidentify-text/index.ts @@ -0,0 +1,36 @@ +import { DetectEntities } from "../../../../utils"; + +class ReidentifyTextOptions { + // Fields + private _redactedEntities?: DetectEntities[]; + private _maskedEntities?: DetectEntities[]; + private _plainTextEntities?: DetectEntities[]; + + // Setters + setRedactedEntities(redactedEntities: DetectEntities[]) { + this._redactedEntities = redactedEntities; + } + + setMaskedEntities(maskedEntities: DetectEntities[]) { + this._maskedEntities = maskedEntities; + } + + setPlainTextEntities(plainTextEntities: DetectEntities[]) { + this._plainTextEntities = plainTextEntities; + } + + // Getters + getRedactedEntities(): DetectEntities[] | undefined { + return this._redactedEntities; + } + + getMaskedEntities(): DetectEntities[] | undefined { + return this._maskedEntities; + } + + getPlainTextEntities(): DetectEntities[] | undefined { + return this._plainTextEntities; + } +} + +export default ReidentifyTextOptions; \ No newline at end of file diff --git a/src/vault/model/request/reidentify-text/index.ts b/src/vault/model/request/reidentify-text/index.ts new file mode 100644 index 00000000..d83d3809 --- /dev/null +++ b/src/vault/model/request/reidentify-text/index.ts @@ -0,0 +1,21 @@ +class ReidentifyTextRequest { + // Field + private _text: string; + + // Constructor + constructor(text: string) { + this._text = text; + } + + // Getter for text + public get text(): string { + return this._text; + } + + // Setter for text + public set text(value: string) { + this._text = value; + } +} + +export default ReidentifyTextRequest; \ No newline at end of file diff --git a/src/vault/model/response/deidentify-text/index.ts b/src/vault/model/response/deidentify-text/index.ts index 1032a601..6d370720 100644 --- a/src/vault/model/response/deidentify-text/index.ts +++ b/src/vault/model/response/deidentify-text/index.ts @@ -1,6 +1,6 @@ //imports -class DeidentifiedTextResponse { +class DeidentifyTextResponse { //fields processedText: string; entities: Array<{ @@ -41,4 +41,4 @@ class DeidentifiedTextResponse { //getters and setters } -export default DeidentifiedTextResponse; \ No newline at end of file +export default DeidentifyTextResponse; \ No newline at end of file From 3715c731db58289dc7caf8abc26d0e6f3acc212e Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 5 May 2025 01:00:07 +0530 Subject: [PATCH 15/22] SK-1966: added unit tests for deidentify and reidentify text public interfaces --- src/error/codes/index.ts | 5 + src/error/messages/index.ts | 4 + src/index.ts | 8 +- src/utils/index.ts | 6 + src/utils/logs/index.ts | 6 +- src/utils/validations/index.ts | 23 +- src/vault/controller/detect/index.ts | 54 +++- .../deidentify-text/token-format/index.ts | 18 +- .../deidentify-text/transformations/index.ts | 8 +- .../model/response/reidentify-text/index.ts | 16 + src/vault/skyflow/index.ts | 16 +- test/vault/client/client.test.js | 7 + test/vault/controller/detect.test.js | 299 ++++++++++++++++++ test/vault/skyflow/skyflow.test.js | 75 +++++ 14 files changed, 518 insertions(+), 27 deletions(-) create mode 100644 src/vault/model/response/reidentify-text/index.ts create mode 100644 test/vault/controller/detect.test.js diff --git a/src/error/codes/index.ts b/src/error/codes/index.ts index b0b51856..0a30afe8 100644 --- a/src/error/codes/index.ts +++ b/src/error/codes/index.ts @@ -196,6 +196,11 @@ const SKYFLOW_ERROR_CODE = { INVALID_RESTRICT_REGEX_LIST: { http_code: 400, message: errorMessages.INVALID_RESTRICT_REGEX_LIST }, INVALID_TOKEN_FORMAT: { http_code: 400, message: errorMessages.INVALID_TOKEN_FORMAT }, INVALID_TRANSFORMATIONS: { http_code: 400, message: errorMessages.INVALID_TRANSFORMATIONS }, + + INVALID_TEXT_IN_REIDENTIFY: { http_code: 400, message: errorMessages.INVALID_TEXT_IN_REIDENTIFY }, + INVALID_REDACTED_ENTITIES_IN_REIDENTIFY: { http_code: 400, message: errorMessages.INVALID_REDACTED_ENTITIES_IN_REIDENTIFY }, + INVALID_MASKED_ENTITIES_IN_REIDENTIFY: { http_code: 400, message: errorMessages.INVALID_MASKED_ENTITIES_IN_REIDENTIFY }, + INVALID_PLAIN_TEXT_ENTITIES_IN_REIDENTIFY: { http_code: 400, message: errorMessages.INVALID_PLAIN_TEXT_ENTITIES_IN_REIDENTIFY }, }; export default SKYFLOW_ERROR_CODE; \ No newline at end of file diff --git a/src/error/messages/index.ts b/src/error/messages/index.ts index aac754d4..f9344a77 100644 --- a/src/error/messages/index.ts +++ b/src/error/messages/index.ts @@ -202,6 +202,10 @@ const errorMessages = { INVALID_TOKEN_FORMAT: `${errorPrefix} Validation error. The tokenFormat key must be an instance of TokenFormat. Specify a valid token format.`, INVALID_TRANSFORMATIONS: `${errorPrefix} Validation error. The transformations key must be an instance of Transformations. Specify a valid transformations.`, + INVALID_TEXT_IN_REIDENTIFY: `${errorPrefix} Validation error. The text field is required and must be a non-empty string. Specify a valid text.`, + INVALID_REDACTED_ENTITIES_IN_REIDENTIFY: `${errorPrefix} Validation error. The redactedEntities field must be an array of DetectEntities enums. Specify a valid redactedEntities.`, + INVALID_MASKED_ENTITIES_IN_REIDENTIFY: `${errorPrefix} Validation error. The maskedEntities field must be an array of DetectEntities enums. Specify a valid maskedEntities.`, + INVALID_PLAIN_TEXT_ENTITIES_IN_REIDENTIFY: `${errorPrefix} Validation error. The plainTextEntities field must be an array of DetectEntities enums. Specify a valid plainTextEntities.`, }; export default errorMessages; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 8b3e8431..27f55d2d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -36,6 +36,9 @@ import DeidentifyTextOptions from './vault/model/options/deidentify-text'; import DeidentifyTextResponse from './vault/model/response/deidentify-text'; import ReidentifyTextRequest from './vault/model/request/reidentify-text'; import ReidentifyTextOptions from './vault/model/options/reidentify-text'; +import ReidentifyTextResponse from './vault/model/response/reidentify-text'; +import TokenFormat from './vault/model/options/deidentify-text/token-format'; +import Transformations from './vault/model/options/deidentify-text/transformations'; export { Env, @@ -89,5 +92,8 @@ export { DetectEntities, DeidentifyTextResponse, ReidentifyTextRequest, - ReidentifyTextOptions + ReidentifyTextOptions, + ReidentifyTextResponse, + TokenFormat, + Transformations }; \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts index 54dfea25..c74cdaf6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -101,6 +101,12 @@ export const TYPES = { DEIDENTIFY_TEXT: 'DEIDENTIFY_TEXT', }; +export const CONTROLLER_TYPES = { + DETECT: 'DETECT', + VAULT: 'VAULT', + CONNECTION: 'CONNECTION', +} + export enum DetectEntities { ACCOUNT_NUMBER = "account_number", AGE = 'age', diff --git a/src/utils/logs/index.ts b/src/utils/logs/index.ts index 3b4211a4..5a4645fb 100644 --- a/src/utils/logs/index.ts +++ b/src/utils/logs/index.ts @@ -65,7 +65,11 @@ const logs = { USING_API_KEY: 'Using api key from credentials', USING_CREDENTIALS_STRING: 'Using credentials string from credentials', USING_PATH: 'Using path from credentials', - USING_SKYFLOW_CREDENTIALS_ENV: 'Using SKYFLOW_CREDENTIALS from env' + USING_SKYFLOW_CREDENTIALS_ENV: 'Using SKYFLOW_CREDENTIALS from env', + DEIDENTIFY_TEXT_TRIGGERED: 'Deidentify text method triggered', + VALIDATE_DEIDENTIFY_TEXT_INPUT: 'Validating deidentify text input', + REIDENTIFY_TEXT_TRIGGERED: 'Reidentify text method triggered', + VALIDATE_REIDENTIFY_TEXT_INPUT: 'Validating reidentify text input', }, errorLogs: { VAULT_CONFIG_KEY_MISSING: "Invalid skyflow config. Vaults configs key missing in skyflow config.", diff --git a/src/utils/validations/index.ts b/src/utils/validations/index.ts index e7ae772e..67dda007 100644 --- a/src/utils/validations/index.ts +++ b/src/utils/validations/index.ts @@ -28,6 +28,8 @@ import DeidentifyTextRequest from "../../vault/model/request/deidentify-text"; import DeidentifyTextOptions from "../../vault/model/options/deidentify-text"; import TokenFormat from "../../vault/model/options/deidentify-text/token-format"; import Transformations from "../../vault/model/options/deidentify-text/transformations"; +import ReidentifyTextRequest from "../../vault/model/request/reidentify-text"; +import ReidentifyTextOptions from "../../vault/model/options/reidentify-text"; export function isEnv(value?: string): boolean { return value !== undefined && Object.values(Env).includes(value as Env); @@ -945,7 +947,7 @@ export const validateQueryRequest = (queryRequest: QueryRequest, logLevel: LogLe } } -export const validateDeIdentifyText = (deIdentifyTextRequest: DeidentifyTextRequest, options?: DeidentifyTextOptions, logLevel: LogLevel = LogLevel.ERROR) => { +export const validateDeIdentifyTextRequest = (deIdentifyTextRequest: DeidentifyTextRequest, options?: DeidentifyTextOptions, logLevel: LogLevel = LogLevel.ERROR) => { if (!deIdentifyTextRequest.text || typeof deIdentifyTextRequest.text !== 'string' || deIdentifyTextRequest.text.trim().length === 0) { throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TEXT_IN_DEIDENTIFY); } @@ -973,6 +975,25 @@ export const validateDeIdentifyText = (deIdentifyTextRequest: DeidentifyTextRequ } }; +export const validateReidentifyTextRequest = (request: ReidentifyTextRequest, options?: ReidentifyTextOptions, logLevel: LogLevel = LogLevel.ERROR) => { + if (!request.text || typeof request.text !== 'string' || request.text.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_TEXT_IN_REIDENTIFY); + } + + if (options) { + if (options.getRedactedEntities() && !Array.isArray(options.getRedactedEntities())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_REDACTED_ENTITIES_IN_REIDENTIFY); + } + + if (options.getMaskedEntities() && !Array.isArray(options.getMaskedEntities())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_MASKED_ENTITIES_IN_REIDENTIFY); + } + if (options.getPlainTextEntities() && !Array.isArray(options.getPlainTextEntities())) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_PLAIN_TEXT_ENTITIES_IN_REIDENTIFY); + } + } +}; + function isStringKeyValueMap(obj: any): obj is StringKeyValueMapType { if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) { return false; diff --git a/src/vault/controller/detect/index.ts b/src/vault/controller/detect/index.ts index 66423514..0ce94f5c 100644 --- a/src/vault/controller/detect/index.ts +++ b/src/vault/controller/detect/index.ts @@ -3,7 +3,7 @@ import { DetectedEntity, EntityType, Transformations } from "../../../ _generated_/rest/api"; import { generateSDKMetrics, getBearerToken, MessageType, parameterizedString, printLog, removeSDKVersion, SDK_METRICS_HEADER_KEY, TYPES } from "../../../utils"; import logs from "../../../utils/logs"; -import { validateDeIdentifyText } from "../../../utils/validations"; +import { validateDeIdentifyTextRequest, validateReidentifyTextRequest } from "../../../utils/validations"; import VaultClient from "../../client"; import DeidentifyTextOptions from "../../model/options/deidentify-text"; import ReidentifyTextOptions from "../../model/options/reidentify-text"; @@ -11,6 +11,7 @@ import DeidentifyTextRequest from "../../model/request/deidentify-text"; import ReidentifyTextRequest from "../../model/request/reidentify-text"; import DeidentifiedTextResponse from "../../model/response/deidentify-text"; import DeidentifyTextResponse from "../../model/response/deidentify-text"; +import ReidentifyTextResponse from "../../model/response/reidentify-text"; class DetectController { @@ -51,20 +52,30 @@ class DetectController { } private buildDeidentifyTextRequest(request: DeidentifyTextRequest, options?: DeidentifyTextOptions) { + return { vault_id: this.client.vaultId, text: request.text, entity_types: options?.getEntities() as EntityType[], allow_regex: options?.getAllowRegexList(), restrict_regex: options?.getRestrictRegexList(), - transformations: options?.getTransformations() as Transformations, + transformations: { + shift_dates: { + max_days: options?.getTransformations()?.getShiftDays()?.max, + min_days: options?.getTransformations()?.getShiftDays()?.min, + entity_types: options?.getTransformations()?.getShiftDays()?.entities, + } + } as Transformations, }; } deidentifyText(request: DeidentifyTextRequest, options?: DeidentifyTextOptions): Promise { return new Promise((resolve, reject) => { try { - validateDeIdentifyText(request, options, this.client.getLogLevel()); + printLog(logs.infoLogs.DEIDENTIFY_TEXT_TRIGGERED, MessageType.LOG, this.client.getLogLevel()); + printLog(logs.infoLogs.VALIDATE_DEIDENTIFY_TEXT_INPUT, MessageType.LOG, this.client.getLogLevel()); + + validateDeIdentifyTextRequest(request, options, this.client.getLogLevel()); const requestBody = this.buildDeidentifyTextRequest(request, options); this.handleRequest( @@ -103,8 +114,41 @@ class DetectController { }); } - reidentifyText(request: ReidentifyTextRequest, options?: ReidentifyTextOptions) { - + reidentifyText(request: ReidentifyTextRequest, options?: ReidentifyTextOptions): Promise { + return new Promise((resolve, reject) => { + try { + printLog(logs.infoLogs.REIDENTIFY_TEXT_TRIGGERED, MessageType.LOG, this.client.getLogLevel()); + printLog(logs.infoLogs.VALIDATE_REIDENTIFY_TEXT_INPUT, MessageType.LOG, this.client.getLogLevel()); + validateReidentifyTextRequest(request, options, this.client.getLogLevel()); + + const requestBody = { + text: request.text, + vault_id: this.client.vaultId, + format: { + redacted: options?.getRedactedEntities(), + masked: options?.getMaskedEntities(), + plaintext: options?.getPlainTextEntities(), + } + }; + this.handleRequest( + () => this.client.stringsAPI.reidentifyString( + requestBody + ).withRawResponse(), + TYPES.DETECT + ).then(data => { + resolve(new ReidentifyTextResponse({ + processedText: data.records.text + })); + }).catch(error => { + reject(error) + }); + + } catch (error) { + if (error instanceof Error) + printLog(removeSDKVersion(error.message), MessageType.ERROR, this.client.getLogLevel()); + reject(error); + } + }); } } diff --git a/src/vault/model/options/deidentify-text/token-format/index.ts b/src/vault/model/options/deidentify-text/token-format/index.ts index 2466eff0..4ce1f47b 100644 --- a/src/vault/model/options/deidentify-text/token-format/index.ts +++ b/src/vault/model/options/deidentify-text/token-format/index.ts @@ -1,24 +1,26 @@ +import { DetectEntities } from "../../../../../utils"; + class TokenFormat { // Fields - private _default?: string; - private _vaultToken?: string[]; - private _entityUniqueCounter?: string[]; - private _entityOnly?: string[]; + private _default?: DetectEntities; + private _vaultToken?: DetectEntities[]; + private _entityUniqueCounter?: DetectEntities[]; + private _entityOnly?: DetectEntities[]; // Setters - setDefault(defaultToken: string) { + setDefault(defaultToken: DetectEntities) { this._default = defaultToken; } - setVaultToken(vaultToken: string[]) { + setVaultToken(vaultToken: DetectEntities[]) { this._vaultToken = vaultToken; } - setEntityUniqueCounter(entityUniqueCounter: string[]) { + setEntityUniqueCounter(entityUniqueCounter: DetectEntities[]) { this._entityUniqueCounter = entityUniqueCounter; } - setEntityOnly(entityOnly: string[]) { + setEntityOnly(entityOnly: DetectEntities[]) { this._entityOnly = entityOnly; } diff --git a/src/vault/model/options/deidentify-text/transformations/index.ts b/src/vault/model/options/deidentify-text/transformations/index.ts index 941a9f28..85fa2612 100644 --- a/src/vault/model/options/deidentify-text/transformations/index.ts +++ b/src/vault/model/options/deidentify-text/transformations/index.ts @@ -1,18 +1,20 @@ +import { DetectEntities } from "../../../../../utils"; + class Transformations { // Fields private _shiftDays?: { max: number; min: number; - entities: string[]; + entities: DetectEntities[]; }; // Setters - setShiftDays(shiftDays: { max: number; min: number; entities: string[] }) { + setShiftDays(shiftDays: { max: number; min: number; entities: DetectEntities[] }) { this._shiftDays = shiftDays; } // Getters - getShiftDays(): { max: number; min: number; entities: string[] } | undefined { + getShiftDays(): { max: number; min: number; entities: DetectEntities[] } | undefined { return this._shiftDays; } } diff --git a/src/vault/model/response/reidentify-text/index.ts b/src/vault/model/response/reidentify-text/index.ts new file mode 100644 index 00000000..0aea2b99 --- /dev/null +++ b/src/vault/model/response/reidentify-text/index.ts @@ -0,0 +1,16 @@ +// imports + +class ReidentifyTextResponse { + //fields + processedText: string; + + constructor({ + processedText, + }: { + processedText: string; + }) { + this.processedText = processedText; + } +} + +export default ReidentifyTextResponse; \ No newline at end of file diff --git a/src/vault/skyflow/index.ts b/src/vault/skyflow/index.ts index 3922cc7a..2eacd5bc 100644 --- a/src/vault/skyflow/index.ts +++ b/src/vault/skyflow/index.ts @@ -1,4 +1,4 @@ -import { CONNECTION_ID, CREDENTIALS, Env, getVaultURL, ISkyflowError, LOGLEVEL, LogLevel, MessageType, parameterizedString, printLog, VAULT_ID } from "../../utils"; +import { CONNECTION_ID, CONTROLLER_TYPES, CREDENTIALS, Env, getVaultURL, ISkyflowError, LOGLEVEL, LogLevel, MessageType, parameterizedString, printLog, VAULT_ID } from "../../utils"; import ConnectionConfig from "../config/connection"; import VaultConfig from "../config/vault"; import { SkyflowConfig, ClientObj } from "../types"; @@ -204,22 +204,22 @@ class Skyflow { } vault(vaultId?: string) { - return this.getClient(vaultId, this.vaultClients, VAULT_ID, 'vault') as VaultController; + return this.getClient(vaultId, this.vaultClients, VAULT_ID, CONTROLLER_TYPES.VAULT) as VaultController; } detect(vaultId?: string) { - return this.getClient(vaultId, this.vaultClients, VAULT_ID, 'detect') as DetectController; + return this.getClient(vaultId, this.vaultClients, VAULT_ID, CONTROLLER_TYPES.DETECT) as DetectController; } connection(connectionId?: string) { - return this.getClient(connectionId, this.connectionClients, CONNECTION_ID, 'connection') as ConnectionController; + return this.getClient(connectionId, this.connectionClients, CONNECTION_ID, CONTROLLER_TYPES.CONNECTION) as ConnectionController; } private getClient( id: string | undefined, clients: ClientObj, idKey: string, - controllerType: 'vault' | 'detect' | 'connection' + controllerType: string ) { if (Object.keys(clients).length === 0) { this.throwErrorForEmptyClients(idKey); @@ -229,15 +229,15 @@ class Skyflow { if (clientId) { const clientData = clients[clientId]; - if (controllerType === 'vault' && clientData?.vaultController) { + if (controllerType === CONTROLLER_TYPES.VAULT && clientData?.vaultController) { return clientData.vaultController; } - if (controllerType === 'detect' && clientData?.detectController) { + if (controllerType === CONTROLLER_TYPES.DETECT && clientData?.detectController) { return clientData.detectController; } - if (controllerType === 'connection' && clientData?.connectionController) { + if (controllerType === CONTROLLER_TYPES.CONNECTION && clientData?.connectionController) { return clientData.connectionController; } diff --git a/test/vault/client/client.test.js b/test/vault/client/client.test.js index 7ac03949..da9c622b 100644 --- a/test/vault/client/client.test.js +++ b/test/vault/client/client.test.js @@ -5,11 +5,13 @@ import { Tokens } from '../../../src/ _generated_/rest/api/resources/tokens/clie import { AuthType, LogLevel, TYPES } from '../../../src/utils'; import { isExpired } from '../../../src/utils/jwt-utils'; import SkyflowError from '../../../src/error'; +import { Strings } from '../../../src/ _generated_/rest/api/resources/strings/client/Client'; jest.mock('../../../src/ _generated_/rest'); jest.mock('../../../src/ _generated_/rest/api/resources/records/client/Client'); jest.mock('../../../src/ _generated_/rest/api/resources/query/client/Client'); jest.mock('../../../src/ _generated_/rest/api/resources/tokens/client/Client'); +jest.mock('../../../src/ _generated_/rest/api/resources/strings/client/Client'); jest.mock('../../../src/utils/jwt-utils'); jest.mock('../../../src/error'); @@ -91,6 +93,11 @@ describe('VaultClient', () => { expect(Query).toHaveBeenCalled(); }); + test('should initialize Strings for DETECT', () => { + vaultClient.initAPI(authInfo, TYPES.DETECT); + expect(Strings).toHaveBeenCalled(); + }); + test('should not initialize API for unsupported type', () => { vaultClient.initAPI(authInfo, 'UNSUPPORTED_TYPE'); expect(Records).not.toHaveBeenCalled(); diff --git a/test/vault/controller/detect.test.js b/test/vault/controller/detect.test.js new file mode 100644 index 00000000..58b11d55 --- /dev/null +++ b/test/vault/controller/detect.test.js @@ -0,0 +1,299 @@ +import DetectController from '../../../src/vault/controller/detect'; +import { validateDeIdentifyTextRequest, validateReidentifyTextRequest } from '../../../src/utils/validations'; +import DeidentifyTextResponse from '../../../src/vault/model/response/deidentify-text'; +import ReidentifyTextResponse from '../../../src/vault/model/response/reidentify-text'; + +jest.mock('../../../src/utils', () => ({ + printLog: jest.fn(), + parameterizedString: jest.fn(), + removeSDKVersion: jest.fn(), + MessageType: { + LOG: 'LOG', + ERROR: 'ERROR', + }, + TYPES: { + DETECT: 'DETECT', + }, + generateSDKMetrics: jest.fn().mockReturnValue({ sdk: 'metrics' }), + getBearerToken: jest.fn().mockResolvedValue(Promise.resolve('your-bearer-token')), +})); + +jest.mock('../../../src/utils/validations', () => ({ + validateDeIdentifyTextRequest: jest.fn(), + validateReidentifyTextRequest: jest.fn(), +})); + +describe('DetectController', () => { + let mockVaultClient; + let detectController; + + beforeEach(() => { + mockVaultClient = { + getLogLevel: jest.fn().mockReturnValue('DEBUG'), + getCredentials: jest.fn().mockReturnValue({}), + initAPI: jest.fn(), + stringsAPI: { + deidentifyString: jest.fn(), + reidentifyString: jest.fn(), + }, + failureResponse: jest.fn().mockRejectedValue(new Error('API error')), + vaultId: 'vault123', + }; + jest.clearAllMocks(); + }); + + test('should initialize DetectController and call printLog with correct parameters', () => { + detectController = new DetectController(mockVaultClient); + expect(detectController).toBeInstanceOf(DetectController); + }); +}); + +describe('deidentifyText', () => { + + let mockVaultClient; + let detectController; + + beforeEach(() => { + mockVaultClient = { + getLogLevel: jest.fn().mockReturnValue('DEBUG'), + getCredentials: jest.fn().mockReturnValue({}), + initAPI: jest.fn(), + stringsAPI: { + deidentifyString: jest.fn(), + reidentifyString: jest.fn(), + }, + failureResponse: jest.fn().mockRejectedValue(new Error('API error')), + vaultId: 'vault123', + }; + detectController = new DetectController(mockVaultClient); + jest.clearAllMocks(); + }); + + test('should successfully deidentify text', async () => { + const mockRequest = { + text: 'Sensitive data to deidentify', + }; + const mockOptions = { + getEntities: jest.fn().mockReturnValue(['NAME', 'EMAIL']), + getAllowRegexList: jest.fn().mockReturnValue(['regex1']), + getRestrictRegexList: jest.fn().mockReturnValue(['regex2']), + getTransformations: jest.fn().mockReturnValue({ + getShiftDays: jest.fn().mockReturnValue({ + max: 10, + min: 5, + entities: ['DATE'], + }), + }), + }; + + const mockResponseData = { + processed_text: 'Processed text', + entities: [ + { + token: 'token1', + value: 'value1', + location: { + start_index: 0, + end_index: 5, + start_index_processed: 0, + end_index_processed: 5, + }, + entity_type: 'NAME', + entity_scores: [0.9], + }, + ], + word_count: 5, + character_count: 30, + }; + + mockVaultClient.stringsAPI.deidentifyString.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValue({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + + const response = await detectController.deidentifyText(mockRequest, mockOptions); + + expect(validateDeIdentifyTextRequest).toHaveBeenCalledWith(mockRequest, mockOptions, 'DEBUG'); + expect(mockVaultClient.stringsAPI.deidentifyString).toHaveBeenCalledWith( + expect.objectContaining({ + text: mockRequest.text, + vault_id: 'vault123', + entity_types: ['NAME', 'EMAIL'], + allow_regex: ['regex1'], + restrict_regex: ['regex2'], + transformations: { + shift_dates: { + max_days: 10, + min_days: 5, + entity_types: ['DATE'], + }, + }, + }) + ); + expect(response).toBeInstanceOf(DeidentifyTextResponse); + expect(response.processedText).toBe('Processed text'); + expect(response.entities).toHaveLength(1); + expect(response.wordCount).toBe(5); + expect(response.charCount).toBe(30); + }); + + test('should handle validation errors', async () => { + const mockRequest = { + text: 'Sensitive data to deidentify', + }; + const mockOptions = {}; + + validateDeIdentifyTextRequest.mockImplementation(() => { + throw new Error('Validation error'); + }); + + await expect(detectController.deidentifyText(mockRequest, mockOptions)).rejects.toThrow( + 'Validation error' + ); + expect(validateDeIdentifyTextRequest).toHaveBeenCalledWith(mockRequest, mockOptions, 'DEBUG'); + expect(mockVaultClient.stringsAPI.deidentifyString).not.toHaveBeenCalled(); + }); + + test('should handle API errors during deidentifyText', async () => { + jest.mock('../../../src/utils/validations', () => ({ + validateDeIdentifyTextRequest: jest.fn(), + validateReidentifyTextRequest: jest.fn(), + })); + validateDeIdentifyTextRequest.mockImplementation(() => { + // No validation error + }); + const mockRequest = { + text: 'Sensitive data to deidentify', + }; + const mockOptions = { + getEntities: jest.fn().mockReturnValue([]), // Return an empty array for entities + getAllowRegexList: jest.fn().mockReturnValue([]), // Return an empty array for allow regex + getRestrictRegexList: jest.fn().mockReturnValue([]), // Return an empty array for restrict regex + getTransformations: jest.fn().mockReturnValue({ + getShiftDays: jest.fn().mockReturnValue({ + max: 10, + min: 5, + entities: ['DATE'], + }), + }), + }; + + mockVaultClient.stringsAPI.deidentifyString.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + })); + + await expect(detectController.deidentifyText(mockRequest, mockOptions)).rejects.toThrow( + 'API error' + ); + expect(mockVaultClient.stringsAPI.deidentifyString).toHaveBeenCalled(); + }); +}); + +describe('reidentifyText', () => { + let mockVaultClient; + let detectController; + + beforeEach(() => { + mockVaultClient = { + getLogLevel: jest.fn().mockReturnValue('DEBUG'), + getCredentials: jest.fn().mockReturnValue({}), + initAPI: jest.fn(), + stringsAPI: { + deidentifyString: jest.fn(), + reidentifyString: jest.fn(), + }, + failureResponse: jest.fn().mockRejectedValue(new Error('API error')), + vaultId: 'vault123', + }; + detectController = new DetectController(mockVaultClient); + jest.clearAllMocks(); + }); + test('should successfully reidentify text', async () => { + const mockRequest = { + text: 'Redacted text to reidentify', + }; + const mockOptions = { + getRedactedEntities: jest.fn().mockReturnValue(['NAME']), + getMaskedEntities: jest.fn().mockReturnValue(['EMAIL']), + getPlainTextEntities: jest.fn().mockReturnValue(['PHONE']), + }; + + const mockResponseData = { + text: 'Reidentified text', + }; + + mockVaultClient.stringsAPI.reidentifyString.mockImplementation(() => ({ + withRawResponse: jest.fn().mockResolvedValue({ + data: mockResponseData, + rawResponse: { headers: { get: jest.fn().mockReturnValue('request-id-123') } }, + }), + })); + + const response = await detectController.reidentifyText(mockRequest, mockOptions); + + expect(validateReidentifyTextRequest).toHaveBeenCalledWith(mockRequest, mockOptions, 'DEBUG'); + expect(mockVaultClient.stringsAPI.reidentifyString).toHaveBeenCalledWith( + expect.objectContaining({ + text: mockRequest.text, + vault_id: 'vault123', + format: { + redacted: ['NAME'], + masked: ['EMAIL'], + plaintext: ['PHONE'], + }, + }) + ); + expect(response).toBeInstanceOf(ReidentifyTextResponse); + expect(response.processedText).toBe('Reidentified text'); + }); + + test('should handle validation errors', async () => { + const mockRequest = { + text: 'Redacted text to reidentify', + }; + const mockOptions = { + getRedactedEntities: jest.fn().mockReturnValue(['NAME']), + getMaskedEntities: jest.fn().mockReturnValue(['EMAIL']), + getPlainTextEntities: jest.fn().mockReturnValue(['PHONE']), + }; + + validateReidentifyTextRequest.mockImplementation(() => { + throw new Error('Validation error'); + }); + + await expect(detectController.reidentifyText(mockRequest, mockOptions)).rejects.toThrow( + 'Validation error' + ); + expect(validateReidentifyTextRequest).toHaveBeenCalledWith(mockRequest, mockOptions, 'DEBUG'); + expect(mockVaultClient.stringsAPI.reidentifyString).not.toHaveBeenCalled(); + }); + + test('should handle API errors during reidentifyText', async () => { + jest.mock('../../../src/utils/validations', () => ({ + validateDeIdentifyTextRequest: jest.fn(), + validateReidentifyTextRequest: jest.fn(), + })); + validateReidentifyTextRequest.mockImplementation(() => { + // No validation error + }); + const mockRequest = { + text: 'Redacted text to reidentify', + }; + const mockOptions = { + getRedactedEntities: jest.fn().mockReturnValue(['NAME']), + getMaskedEntities: jest.fn().mockReturnValue(['EMAIL']), + getPlainTextEntities: jest.fn().mockReturnValue(['PHONE']), + }; + + mockVaultClient.stringsAPI.reidentifyString.mockImplementation(() => ({ + withRawResponse: jest.fn().mockRejectedValue(new Error('API error')), + })); + + await expect(detectController.reidentifyText(mockRequest, mockOptions)).rejects.toThrow( + 'API error' + ); + expect(mockVaultClient.stringsAPI.reidentifyString).toHaveBeenCalled(); + }); +}); \ No newline at end of file diff --git a/test/vault/skyflow/skyflow.test.js b/test/vault/skyflow/skyflow.test.js index 76ac9a90..8addafee 100644 --- a/test/vault/skyflow/skyflow.test.js +++ b/test/vault/skyflow/skyflow.test.js @@ -86,6 +86,81 @@ describe('Skyflow initialization', () => { })).toThrowError(invalidConnectionConfigError); }); + + describe('Detect Controller Tests', () => { + const validVaultConfig = { + vaultId: "VAULT_ID", + clusterId: "CLUSTER_ID" + }; + + const noConfigFoundError = "No vault config found."; + const missingVaultConfigError = "VAULT_ID is missing from the config."; + + test('should return detect controller', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig] + }); + expect(skyflow.detect("VAULT_ID")).toBeTruthy(); + }); + + test('should return detect controller when called without vault id', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig] + }); + expect(skyflow.detect()).toBeTruthy(); + }); + + test('should throw error for invalid vault id in detect method', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig], + }); + skyflow.removeVaultConfig("VAULT_ID"); + expect(() => skyflow.detect("ID")).toThrowError(noConfigFoundError); + }); + + test('should throw error when no vault configs exist for detect method', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig], + }); + skyflow.removeVaultConfig("VAULT_ID"); + expect(() => skyflow.detect("ID")).toThrowError(noConfigFoundError); + }); + }); + + describe('Update Clients Tests', () => { + const validVaultConfig = { + vaultId: "VAULT_ID", + clusterId: "CLUSTER_ID" + }; + + const validConnectionConfig = { + connectionId: "CONN_ID", + connectionUrl: "https://connection-url.com" + }; + + test('should update log level for all clients', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig], + connectionConfigs: [validConnectionConfig] + }); + skyflow.setLogLevel(LogLevel.OFF); + expect(skyflow.getLogLevel()).toBe(LogLevel.OFF); + }); + + test('should update credentials for all clients', () => { + const skyflow = new Skyflow({ + vaultConfigs: [validVaultConfig], + connectionConfigs: [validConnectionConfig], + skyflowCredentials: { + apiKey: "sky-KEY" + } + }); + const newCredentials = { apiKey: "sky-VALID_KEY" }; + skyflow.updateSkyflowCredentials(newCredentials); + expect(skyflow.getSkyflowCredentials()).toBe(newCredentials); + }); + }); + describe('Log Level Tests', () => { const validVaultConfig = [{ vaultId: "VAULT_ID", From d180b35cb0c4f81a8fbaced8961952bdef6eeb7a Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Tue, 6 May 2025 18:41:24 +0530 Subject: [PATCH 16/22] SK-1966: updated token type --- src/utils/index.ts | 6 +++ src/vault/controller/detect/index.ts | 51 +++++++++++-------- .../deidentify-text/token-format/index.ts | 6 +-- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/utils/index.ts b/src/utils/index.ts index c74cdaf6..20b87ca4 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -173,6 +173,12 @@ export enum DetectEntities { ZODIAC_SIGN = 'zodiac_sign', } +export enum TokenType { + ENTITY_UNIQUE_COUNTER = 'entity_unq_counter', + ENTITY_ONLY = 'entity_only', + VAULT_TOKEN = 'vault_token' +} + export interface ISkyflowError { http_status?: string | number | null, grpc_code?: string | number | null, diff --git a/src/vault/controller/detect/index.ts b/src/vault/controller/detect/index.ts index 0ce94f5c..1989c29c 100644 --- a/src/vault/controller/detect/index.ts +++ b/src/vault/controller/detect/index.ts @@ -1,6 +1,6 @@ //imports -import { DetectedEntity, EntityType, Transformations } from "../../../ _generated_/rest/api"; +import { DetectedEntity, EntityType, TokenType, Transformations } from "../../../ _generated_/rest/api"; import { generateSDKMetrics, getBearerToken, MessageType, parameterizedString, printLog, removeSDKVersion, SDK_METRICS_HEADER_KEY, TYPES } from "../../../utils"; import logs from "../../../utils/logs"; import { validateDeIdentifyTextRequest, validateReidentifyTextRequest } from "../../../utils/validations"; @@ -59,6 +59,12 @@ class DetectController { entity_types: options?.getEntities() as EntityType[], allow_regex: options?.getAllowRegexList(), restrict_regex: options?.getRestrictRegexList(), + token_type: { + default: options?.getTokenFormat()?.getDefault(), + vault_token: options?.getTokenFormat()?.getVaultToken(), + entity_unq_counter: options?.getTokenFormat()?.getEntityUniqueCounter(), + entity_only: options?.getTokenFormat()?.getEntityOnly(), + } as TokenType, transformations: { shift_dates: { max_days: options?.getTransformations()?.getShiftDays()?.max, @@ -69,6 +75,28 @@ class DetectController { }; } + private parseDeidentifyTextResponse(data: any) { + return { + processedText: data.records.processed_text, + entities: data.records.entities.map((entity: DetectedEntity) => ({ + token: entity.token, + value: entity.value, + textIndex: { + start: entity.location?.start_index, + end: entity.location?.end_index, + }, + processedIndex: { + start: entity.location?.start_index_processed, + end: entity.location?.end_index_processed, + }, + entity: entity.entity_type, + scores: entity.entity_scores, + })), + wordCount: data.records.word_count, + charCount: data.records.character_count, + }; + } + deidentifyText(request: DeidentifyTextRequest, options?: DeidentifyTextOptions): Promise { return new Promise((resolve, reject) => { try { @@ -84,25 +112,8 @@ class DetectController { ).withRawResponse(), TYPES.DETECT ).then(data => { - resolve(new DeidentifyTextResponse({ - processedText: data.records.processed_text, - entities: data.records.entities.map((entity: DetectedEntity) => ({ - token: entity.token, - value: entity.value, - textIndex: { - start: entity.location?.start_index, - end: entity.location?.end_index, - }, - processedIndex: { - start: entity.location?.start_index_processed, - end: entity.location?.end_index_processed, - }, - entity: entity.entity_type, - scores: entity.entity_scores, - })), - wordCount: data.records.word_count, - charCount: data.records.character_count, - })); + const parsedResponse = new DeidentifyTextResponse(this.parseDeidentifyTextResponse(data)) + resolve(parsedResponse); }).catch(error => { reject(error) }); diff --git a/src/vault/model/options/deidentify-text/token-format/index.ts b/src/vault/model/options/deidentify-text/token-format/index.ts index 4ce1f47b..a2c6fb07 100644 --- a/src/vault/model/options/deidentify-text/token-format/index.ts +++ b/src/vault/model/options/deidentify-text/token-format/index.ts @@ -1,14 +1,14 @@ -import { DetectEntities } from "../../../../../utils"; +import { DetectEntities, TokenType } from "../../../../../utils"; class TokenFormat { // Fields - private _default?: DetectEntities; + private _default?: TokenType = TokenType.ENTITY_UNIQUE_COUNTER; private _vaultToken?: DetectEntities[]; private _entityUniqueCounter?: DetectEntities[]; private _entityOnly?: DetectEntities[]; // Setters - setDefault(defaultToken: DetectEntities) { + setDefault(defaultToken: TokenType) { this._default = defaultToken; } From 907f7d2f024ed3cfeb1437f04c05a9c70e47f562 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Fri, 9 May 2025 12:20:16 +0530 Subject: [PATCH 17/22] SK-2020: update package lock file --- package-lock.json | 79 ++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 80f07f65..f0ea3623 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.197a956", + "version": "2.0.0-beta.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "skyflow-node", - "version": "2.0.0-beta.3-dev.197a956", + "version": "2.0.0-beta.4", "license": "MIT", "dependencies": { "dotenv": "^16.4.5", @@ -73,9 +73,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.1.tgz", - "integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, "license": "MIT", "engines": { @@ -144,13 +144,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz", - "integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.1", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -396,9 +396,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.1.tgz", - "integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "license": "MIT", "dependencies": { @@ -1335,14 +1335,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.1.tgz", - "integrity": "sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", + "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", "@babel/plugin-transform-parameters": "^7.27.1" }, "engines": { @@ -1708,14 +1709,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.1.tgz", - "integrity": "sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", @@ -1757,7 +1758,7 @@ "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", @@ -1827,14 +1828,14 @@ } }, "node_modules/@babel/template": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.1.tgz", - "integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.1", + "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" }, "engines": { @@ -2461,9 +2462,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.96", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.96.tgz", - "integrity": "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ==", + "version": "18.19.100", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.100.tgz", + "integrity": "sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==", "dev": true, "license": "MIT", "dependencies": { @@ -3665,9 +3666,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.150", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz", - "integrity": "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==", + "version": "1.5.151", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", "dev": true, "license": "ISC" }, @@ -5409,12 +5410,12 @@ } }, "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } @@ -7158,9 +7159,9 @@ } }, "node_modules/webpack": { - "version": "5.99.7", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz", - "integrity": "sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==", + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", "dependencies": { From b96aa9957ddc10cbe2f873ee178a14539d098d54 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Fri, 9 May 2025 12:25:50 +0530 Subject: [PATCH 18/22] SK-2020: update package json file --- package-lock.json | 10 ++++++++++ package.json | 29 +++++++++++++++-------------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index f0ea3623..933ac9f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "2.0.0-beta.4", "license": "MIT", "dependencies": { + "@babel/runtime": "^7.27.1", "dotenv": "^16.4.5", "form-data": "^4.0.0", "form-data-encoder": "^4.0.2", @@ -1827,6 +1828,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", diff --git a/package.json b/package.json index aff04994..84ccf4df 100644 --- a/package.json +++ b/package.json @@ -32,17 +32,18 @@ "tokenization" ], "dependencies": { + "@babel/runtime": "^7.27.1", "dotenv": "^16.4.5", - "jsonwebtoken": "^9.0.2", - "jwt-decode": "^2.2.0", - "url-join": "4.0.1", "form-data": "^4.0.0", + "form-data-encoder": "^4.0.2", "formdata-node": "^6.0.3", + "js-base64": "3.7.7", + "jsonwebtoken": "^9.0.2", + "jwt-decode": "^2.2.0", "node-fetch": "^2.7.0", "qs": "^6.13.1", "readable-stream": "^4.5.2", - "js-base64": "3.7.7", - "form-data-encoder": "^4.0.2" + "url-join": "4.0.1" }, "devDependencies": { "@babel/plugin-proposal-decorators": "^7.25.7", @@ -50,19 +51,19 @@ "@babel/plugin-transform-runtime": "^7.25.7", "@babel/preset-env": "^7.25.8", "@babel/preset-typescript": "^7.25.7", + "@types/jest": "^29.5.14", "@types/jsonwebtoken": "^9.0.6", "@types/node": "^18.19.70", - "jest": "^29.7.0", - "ts-jest": "^29.1.1", - "typescript": "~5.7.2", - "@types/url-join": "4.0.1", - "@types/qs": "^6.9.17", "@types/node-fetch": "^2.6.12", + "@types/qs": "^6.9.17", "@types/readable-stream": "^4.0.18", - "webpack": "^5.97.1", - "ts-loader": "^9.5.1", - "@types/jest": "^29.5.14", + "@types/url-join": "4.0.1", + "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "prettier": "^3.4.2" + "prettier": "^3.4.2", + "ts-jest": "^29.1.1", + "ts-loader": "^9.5.1", + "typescript": "~5.7.2", + "webpack": "^5.97.1" } } From 997768f397455fe637f176e499f9e5a4495ee274 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Fri, 9 May 2025 12:28:18 +0530 Subject: [PATCH 19/22] SK-2020: remove commented code --- src/utils/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/utils/index.ts b/src/utils/index.ts index ec9a8d68..020fc092 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -120,12 +120,6 @@ export const CONTROLLER_TYPES = { CONNECTION: 'CONNECTION', } -// export enum DetectTokenTypeWithoutVault { -// ENTITY_ONLY= "entity_only", -// ENTITY_UNQ_COUNTER= "entity_unq_counter", -// } - - export enum DetectOutputTranscription { DIARIZED_TRANSCRIPTION = "diarized_transcription", MEDICAL_DIARIZED_TRANSCRIPTION = "medical_diarized_transcription", From ba178f49c14602fd2a82f730bdcda8735e2f02e4 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 12 May 2025 10:21:16 +0530 Subject: [PATCH 20/22] SK-2040: resolve pr comments --- src/utils/logs/index.ts | 1 + src/utils/validations/index.ts | 12 +++++++++--- src/vault/skyflow/index.ts | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/utils/logs/index.ts b/src/utils/logs/index.ts index 5fdf19be..822c0966 100644 --- a/src/utils/logs/index.ts +++ b/src/utils/logs/index.ts @@ -9,6 +9,7 @@ const logs = { VALIDATING_VAULT_CONFIG: 'Validating vault config.', VALIDATING_CONNECTION_CONFIG: 'Validating connection config.', VAULT_CONTROLLER_INITIALIZED: 'Initialized vault controller with vault ID %s1.', + DETECT_CONTROLLER_INITIALIZED: 'Initialized detect controller with vault ID %s1.', CONNECTION_CONTROLLER_INITIALIZED: 'Intitialized connection controller with connection ID %s1.', vaultId_CONFIG_EXISTS: 'Vault config with vault ID %s1 already exists.', vaultId_CONFIG_DOES_NOT_EXIST: `Vault config with vault ID %s1 doesn't exist.`, diff --git a/src/utils/validations/index.ts b/src/utils/validations/index.ts index 6fa9b2d0..427a5554 100644 --- a/src/utils/validations/index.ts +++ b/src/utils/validations/index.ts @@ -21,6 +21,7 @@ import TokenizeRequest from "../../vault/model/request/tokenize"; import UpdateRequest from "../../vault/model/request/update"; import { SkyflowConfig, StringKeyValueMapType } from "../../vault/types"; import * as fs from 'fs'; +import * as path from 'path'; import { isExpired } from "../jwt-utils"; import logs from "../logs"; import FileUploadOptions from "../../vault/model/options/fileUpload"; @@ -1000,12 +1001,17 @@ export const validateDeidentifyFileRequest = (deidentifyFileRequest: DeidentifyF throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_TYPE); } - // Additional validation for File (browser) + // Additional validation for File if (file instanceof File) { - if (!file.name || !file.size) { + if (!file.name || typeof file.name !== 'string' || file.name.trim().length === 0) { throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_TYPE); } - } + // Validate fileBaseName + const fileBaseName = path.parse(file.name).name; + if (!fileBaseName || typeof fileBaseName !== 'string' || fileBaseName.trim().length === 0) { + throw new SkyflowError(SKYFLOW_ERROR_CODE.INVALID_FILE_TYPE); + } + } // Validate options if provided if (deidentifyFileOptions) { diff --git a/src/vault/skyflow/index.ts b/src/vault/skyflow/index.ts index 5a9fa845..23f8339d 100644 --- a/src/vault/skyflow/index.ts +++ b/src/vault/skyflow/index.ts @@ -53,7 +53,7 @@ class Skyflow { const vaultController = new VaultController(client); const detectController = new DetectController(client); printLog(parameterizedString(logs.infoLogs.VAULT_CONTROLLER_INITIALIZED, [config.vaultId]), MessageType.LOG, this.logLevel); - // printLog for detect controller + printLog(parameterizedString(logs.infoLogs.DETECT_CONTROLLER_INITIALIZED, [config.vaultId]), MessageType.LOG, this.logLevel); clients[config.vaultId] = { config, client, vaultController, detectController }; } From d189875c851e56c8cc11782a06970d1191c61fe6 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 12 May 2025 12:03:00 +0530 Subject: [PATCH 21/22] SK-2040: update info logs --- src/vault/controller/detect/index.ts | 1 - src/vault/controller/vault/index.ts | 1 - src/vault/skyflow/index.ts | 3 +-- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/vault/controller/detect/index.ts b/src/vault/controller/detect/index.ts index c8a0b02c..9a5a11fc 100644 --- a/src/vault/controller/detect/index.ts +++ b/src/vault/controller/detect/index.ts @@ -31,7 +31,6 @@ class DetectController { constructor(client: VaultClient) { this.client = client; - printLog(logs.infoLogs.CONTROLLER_INITIALIZED, MessageType.LOG, this.client.getLogLevel()); } private createSdkHeaders() { diff --git a/src/vault/controller/vault/index.ts b/src/vault/controller/vault/index.ts index b504bb74..82d6db59 100644 --- a/src/vault/controller/vault/index.ts +++ b/src/vault/controller/vault/index.ts @@ -37,7 +37,6 @@ class VaultController { constructor(client: VaultClient) { this.client = client; - printLog(logs.infoLogs.CONTROLLER_INITIALIZED, MessageType.LOG, this.client.getLogLevel()); } private createSdkHeaders() { diff --git a/src/vault/skyflow/index.ts b/src/vault/skyflow/index.ts index 23f8339d..85b33427 100644 --- a/src/vault/skyflow/index.ts +++ b/src/vault/skyflow/index.ts @@ -52,8 +52,7 @@ class Skyflow { const client = new VaultClient(vaultUrl, config.vaultId, config?.credentials, this.commonCredentials, this.logLevel); const vaultController = new VaultController(client); const detectController = new DetectController(client); - printLog(parameterizedString(logs.infoLogs.VAULT_CONTROLLER_INITIALIZED, [config.vaultId]), MessageType.LOG, this.logLevel); - printLog(parameterizedString(logs.infoLogs.DETECT_CONTROLLER_INITIALIZED, [config.vaultId]), MessageType.LOG, this.logLevel); + printLog(logs.infoLogs.CONTROLLER_INITIALIZED, MessageType.LOG, this.logLevel); clients[config.vaultId] = { config, client, vaultController, detectController }; } From fa54b6dce12e25ea4afe7f5f4c60d173c0f84c28 Mon Sep 17 00:00:00 2001 From: saileshwar-skyflow Date: Mon, 12 May 2025 13:18:28 +0530 Subject: [PATCH 22/22] SK-2040: fix vault controller test --- test/vault/controller/vault.test.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/vault/controller/vault.test.js b/test/vault/controller/vault.test.js index 5adbbab1..5fb54172 100644 --- a/test/vault/controller/vault.test.js +++ b/test/vault/controller/vault.test.js @@ -96,14 +96,6 @@ describe('VaultController', () => { // Ensure the constructor sets the client and logs the initialization expect(vaultController).toBeInstanceOf(VaultController); expect(vaultController.client).toBe(mockVaultClient); - - // Verify printLog is called with expected parameters - expect(printLog).toHaveBeenCalledTimes(1); - expect(printLog).toHaveBeenCalledWith( - logs.infoLogs.CONTROLLER_INITIALIZED, - MessageType.LOG, - 'DEBUG' // getLogLevel() should return 'DEBUG' - ); }); test('should have the connection method defined', () => {