@milaboratories/pl-drivers 1.14.16 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/clients/ls_api.cjs +1 -0
  2. package/dist/clients/ls_api.cjs.map +1 -1
  3. package/dist/clients/ls_api.js +1 -0
  4. package/dist/clients/ls_api.js.map +1 -1
  5. package/dist/drivers/helpers/ls_remote_import_handle.cjs +5 -3
  6. package/dist/drivers/helpers/ls_remote_import_handle.cjs.map +1 -1
  7. package/dist/drivers/helpers/ls_remote_import_handle.js +5 -3
  8. package/dist/drivers/helpers/ls_remote_import_handle.js.map +1 -1
  9. package/dist/drivers/ls.cjs +3 -3
  10. package/dist/drivers/ls.cjs.map +1 -1
  11. package/dist/drivers/ls.d.ts +6 -6
  12. package/dist/drivers/ls.d.ts.map +1 -1
  13. package/dist/drivers/ls.js +3 -3
  14. package/dist/drivers/ls.js.map +1 -1
  15. package/dist/drivers/types.cjs +2 -1
  16. package/dist/drivers/types.cjs.map +1 -1
  17. package/dist/drivers/types.d.ts +14 -0
  18. package/dist/drivers/types.d.ts.map +1 -1
  19. package/dist/drivers/types.js +2 -1
  20. package/dist/drivers/types.js.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs +31 -0
  23. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs.map +1 -1
  24. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts +11 -0
  25. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts.map +1 -1
  26. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js +31 -0
  27. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js.map +1 -1
  28. package/package.json +5 -5
  29. package/src/clients/ls_api.ts +1 -0
  30. package/src/drivers/helpers/ls_remote_import_handle.test.ts +46 -0
  31. package/src/drivers/helpers/ls_remote_import_handle.ts +6 -0
  32. package/src/drivers/ls.test.ts +138 -2
  33. package/src/drivers/ls.ts +9 -9
  34. package/src/drivers/types.ts +5 -0
  35. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts +34 -0
  36. package/src/proto-rest/lsapi.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.cjs","names":["MessageType","UnknownFieldHandler","Timestamp","WireType","ServiceType"],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.proto\" (package \"MiLaboratories.Controller.Shared\", syntax proto3)\n// tslint:disable\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Timestamp } from \"../../../../../../../google/protobuf/timestamp\";\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport interface LsAPI {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport interface LsAPI_ListItem {\n /**\n * Name of the item in storage, without any prefixes.\n *\n * @generated from protobuf field: string name = 1\n */\n name: string;\n /**\n * Size of the item in bytes.\n * Is always zero for directories (is_dir = true).\n *\n * @generated from protobuf field: uint64 size = 2\n */\n size: bigint;\n /**\n * is_dir is true for an item that can have subitems.\n *\n * @generated from protobuf field: bool is_dir = 3\n */\n isDir: boolean;\n /**\n * full_name is the full name of the item, relative to the storage root.\n * It is <directory> + <name>.\n * The <delimiter>, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: string full_name = 10\n */\n fullName: string;\n /**\n * The directory the item is located in. The value here is always a prefix of name:\n * name.HasPrefix(directory) is always true.\n *\n * @generated from protobuf field: string directory = 11\n */\n directory: string;\n /**\n * last_modified keeps the item's last modification timestamp.\n *\n * @generated from protobuf field: google.protobuf.Timestamp last_modified = 12\n */\n lastModified?: Timestamp;\n /**\n * Version of item in storage.\n * When the storage supports versioning or provides checksums for the data stored,\n * the <version> field keeps that data.\n * If not, it keeps any simple combination of item attributes that helps to\n * detect if the contents of the item have changed, e.g. <size>+<mtime>.\n * Anyway, the client should not try to interpret this field, but should provide it to the Platform\n * in operations with a given item (like BlobImportInternal) to help the Platform with deduplication.\n *\n * @generated from protobuf field: string version = 13\n */\n version: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport interface LsAPI_List {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport interface LsAPI_List_Request {\n /**\n * resource_id of 'LS/<Storage>' resource\n *\n * @generated from protobuf field: uint64 resource_id = 1\n */\n resourceId: bigint;\n /**\n * Signature proving the caller is authorized to access this resource.\n *\n * @generated from protobuf field: bytes resource_signature = 3\n */\n resourceSignature: Uint8Array;\n /**\n * Location to list, relative to the storage root. Only items that have <full_name> starting\n * with <location> are included in the list response.\n *\n * @generated from protobuf field: string location = 2\n */\n location: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport interface LsAPI_List_Response {\n /**\n * List of the full (relative to storage root) names of items from storage.\n * E.g., for 'fs' storage each name will consist of names of all directories, where the\n * item is located, and the item name itself.\n * The delimiter, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1\n */\n items: LsAPI_ListItem[];\n /**\n * The delimiter is the path separator used in this storage. The client can use it to parse item names into parts,\n * to extract directory names.\n *\n * @generated from protobuf field: string delimiter = 2\n */\n delimiter: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI$Type extends MessageType<LsAPI> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI\", []);\n }\n create(value?: PartialMessage<LsAPI>): LsAPI {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI): LsAPI {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport const LsAPI = new LsAPI$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_ListItem$Type extends MessageType<LsAPI_ListItem> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.ListItem\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"size\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"is_dir\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 10, name: \"full_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 11, name: \"directory\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 12, name: \"last_modified\", kind: \"message\", T: () => Timestamp },\n { no: 13, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_ListItem>): LsAPI_ListItem {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.size = 0n;\n message.isDir = false;\n message.fullName = \"\";\n message.directory = \"\";\n message.version = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_ListItem>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_ListItem): LsAPI_ListItem {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* uint64 size */ 2:\n message.size = reader.uint64().toBigInt();\n break;\n case /* bool is_dir */ 3:\n message.isDir = reader.bool();\n break;\n case /* string full_name */ 10:\n message.fullName = reader.string();\n break;\n case /* string directory */ 11:\n message.directory = reader.string();\n break;\n case /* google.protobuf.Timestamp last_modified */ 12:\n message.lastModified = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastModified);\n break;\n case /* string version */ 13:\n message.version = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_ListItem, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* uint64 size = 2; */\n if (message.size !== 0n)\n writer.tag(2, WireType.Varint).uint64(message.size);\n /* bool is_dir = 3; */\n if (message.isDir !== false)\n writer.tag(3, WireType.Varint).bool(message.isDir);\n /* string full_name = 10; */\n if (message.fullName !== \"\")\n writer.tag(10, WireType.LengthDelimited).string(message.fullName);\n /* string directory = 11; */\n if (message.directory !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.directory);\n /* google.protobuf.Timestamp last_modified = 12; */\n if (message.lastModified)\n Timestamp.internalBinaryWrite(message.lastModified, writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n /* string version = 13; */\n if (message.version !== \"\")\n writer.tag(13, WireType.LengthDelimited).string(message.version);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport const LsAPI_ListItem = new LsAPI_ListItem$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List$Type extends MessageType<LsAPI_List> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List\", []);\n }\n create(value?: PartialMessage<LsAPI_List>): LsAPI_List {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List): LsAPI_List {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport const LsAPI_List = new LsAPI_List$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Request$Type extends MessageType<LsAPI_List_Request> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Request\", [\n { no: 1, name: \"resource_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"resource_signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"location\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Request>): LsAPI_List_Request {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.resourceId = 0n;\n message.resourceSignature = new Uint8Array(0);\n message.location = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Request>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Request): LsAPI_List_Request {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* uint64 resource_id */ 1:\n message.resourceId = reader.uint64().toBigInt();\n break;\n case /* bytes resource_signature */ 3:\n message.resourceSignature = reader.bytes();\n break;\n case /* string location */ 2:\n message.location = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* uint64 resource_id = 1; */\n if (message.resourceId !== 0n)\n writer.tag(1, WireType.Varint).uint64(message.resourceId);\n /* string location = 2; */\n if (message.location !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.location);\n /* bytes resource_signature = 3; */\n if (message.resourceSignature.length)\n writer.tag(3, WireType.LengthDelimited).bytes(message.resourceSignature);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport const LsAPI_List_Request = new LsAPI_List_Request$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Response$Type extends MessageType<LsAPI_List_Response> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Response\", [\n { no: 1, name: \"items\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => LsAPI_ListItem },\n { no: 2, name: \"delimiter\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Response>): LsAPI_List_Response {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.items = [];\n message.delimiter = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Response>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Response): LsAPI_List_Response {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items */ 1:\n message.items.push(LsAPI_ListItem.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* string delimiter */ 2:\n message.delimiter = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1; */\n for (let i = 0; i < message.items.length; i++)\n LsAPI_ListItem.internalBinaryWrite(message.items[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string delimiter = 2; */\n if (message.delimiter !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.delimiter);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport const LsAPI_List_Response = new LsAPI_List_Response$Type();\n/**\n * @generated ServiceType for protobuf service MiLaboratories.Controller.Shared.LS\n */\nexport const LS = new ServiceType(\"MiLaboratories.Controller.Shared.LS\", [\n { name: \"List\", options: { \"google.api.http\": { post: \"/v1/list\", body: \"*\" } }, I: LsAPI_List_Request, O: LsAPI_List_Response }\n]);\n"],"mappings":"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"}
1
+ {"version":3,"file":"protocol.cjs","names":["MessageType","UnknownFieldHandler","Timestamp","WireType","ServiceType"],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.proto\" (package \"MiLaboratories.Controller.Shared\", syntax proto3)\n// tslint:disable\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Timestamp } from \"../../../../../../../google/protobuf/timestamp\";\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport interface LsAPI {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport interface LsAPI_ListItem {\n /**\n * Name of the item in storage, without any prefixes.\n *\n * @generated from protobuf field: string name = 1\n */\n name: string;\n /**\n * Size of the item in bytes.\n * Is always zero for directories (is_dir = true).\n *\n * @generated from protobuf field: uint64 size = 2\n */\n size: bigint;\n /**\n * is_dir is true for an item that can have subitems.\n *\n * @generated from protobuf field: bool is_dir = 3\n */\n isDir: boolean;\n /**\n * additional_info carries the signed identity envelope for federative storages.\n * KV schema: v=1, path, uid, sid, role, exp, kid, signed, sig.\n * Empty for non-federative storages. Verifiers MUST ignore unknown keys.\n *\n * @generated from protobuf field: map<string, string> additional_info = 8\n */\n additionalInfo: {\n [key: string]: string;\n };\n /**\n * full_name is the full name of the item, relative to the storage root.\n * It is <directory> + <name>.\n * The <delimiter>, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: string full_name = 10\n */\n fullName: string;\n /**\n * The directory the item is located in. The value here is always a prefix of name:\n * name.HasPrefix(directory) is always true.\n *\n * @generated from protobuf field: string directory = 11\n */\n directory: string;\n /**\n * last_modified keeps the item's last modification timestamp.\n *\n * @generated from protobuf field: google.protobuf.Timestamp last_modified = 12\n */\n lastModified?: Timestamp;\n /**\n * Version of item in storage.\n * When the storage supports versioning or provides checksums for the data stored,\n * the <version> field keeps that data.\n * If not, it keeps any simple combination of item attributes that helps to\n * detect if the contents of the item have changed, e.g. <size>+<mtime>.\n * Anyway, the client should not try to interpret this field, but should provide it to the Platform\n * in operations with a given item (like BlobImportInternal) to help the Platform with deduplication.\n *\n * @generated from protobuf field: string version = 13\n */\n version: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport interface LsAPI_List {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport interface LsAPI_List_Request {\n /**\n * resource_id of 'LS/<Storage>' resource\n *\n * @generated from protobuf field: uint64 resource_id = 1\n */\n resourceId: bigint;\n /**\n * Signature proving the caller is authorized to access this resource.\n *\n * @generated from protobuf field: bytes resource_signature = 3\n */\n resourceSignature: Uint8Array;\n /**\n * Location to list, relative to the storage root. Only items that have <full_name> starting\n * with <location> are included in the list response.\n *\n * @generated from protobuf field: string location = 2\n */\n location: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport interface LsAPI_List_Response {\n /**\n * List of the full (relative to storage root) names of items from storage.\n * E.g., for 'fs' storage each name will consist of names of all directories, where the\n * item is located, and the item name itself.\n * The delimiter, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1\n */\n items: LsAPI_ListItem[];\n /**\n * The delimiter is the path separator used in this storage. The client can use it to parse item names into parts,\n * to extract directory names.\n *\n * @generated from protobuf field: string delimiter = 2\n */\n delimiter: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI$Type extends MessageType<LsAPI> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI\", []);\n }\n create(value?: PartialMessage<LsAPI>): LsAPI {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI): LsAPI {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport const LsAPI = new LsAPI$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_ListItem$Type extends MessageType<LsAPI_ListItem> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.ListItem\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"size\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"is_dir\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 8, name: \"additional_info\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ } },\n { no: 10, name: \"full_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 11, name: \"directory\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 12, name: \"last_modified\", kind: \"message\", T: () => Timestamp },\n { no: 13, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_ListItem>): LsAPI_ListItem {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.size = 0n;\n message.isDir = false;\n message.additionalInfo = {};\n message.fullName = \"\";\n message.directory = \"\";\n message.version = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_ListItem>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_ListItem): LsAPI_ListItem {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* uint64 size */ 2:\n message.size = reader.uint64().toBigInt();\n break;\n case /* bool is_dir */ 3:\n message.isDir = reader.bool();\n break;\n case /* map<string, string> additional_info */ 8:\n this.binaryReadMap8(message.additionalInfo, reader, options);\n break;\n case /* string full_name */ 10:\n message.fullName = reader.string();\n break;\n case /* string directory */ 11:\n message.directory = reader.string();\n break;\n case /* google.protobuf.Timestamp last_modified */ 12:\n message.lastModified = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastModified);\n break;\n case /* string version */ 13:\n message.version = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap8(map: LsAPI_ListItem[\"additionalInfo\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof LsAPI_ListItem[\"additionalInfo\"] | undefined, val: LsAPI_ListItem[\"additionalInfo\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = reader.string();\n break;\n default: throw new globalThis.Error(\"unknown map entry field for MiLaboratories.Controller.Shared.LsAPI.ListItem.additional_info\");\n }\n }\n map[key ?? \"\"] = val ?? \"\";\n }\n internalBinaryWrite(message: LsAPI_ListItem, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* uint64 size = 2; */\n if (message.size !== 0n)\n writer.tag(2, WireType.Varint).uint64(message.size);\n /* bool is_dir = 3; */\n if (message.isDir !== false)\n writer.tag(3, WireType.Varint).bool(message.isDir);\n /* map<string, string> additional_info = 8; */\n for (let k of globalThis.Object.keys(message.additionalInfo))\n writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalInfo[k]).join();\n /* string full_name = 10; */\n if (message.fullName !== \"\")\n writer.tag(10, WireType.LengthDelimited).string(message.fullName);\n /* string directory = 11; */\n if (message.directory !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.directory);\n /* google.protobuf.Timestamp last_modified = 12; */\n if (message.lastModified)\n Timestamp.internalBinaryWrite(message.lastModified, writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n /* string version = 13; */\n if (message.version !== \"\")\n writer.tag(13, WireType.LengthDelimited).string(message.version);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport const LsAPI_ListItem = new LsAPI_ListItem$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List$Type extends MessageType<LsAPI_List> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List\", []);\n }\n create(value?: PartialMessage<LsAPI_List>): LsAPI_List {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List): LsAPI_List {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport const LsAPI_List = new LsAPI_List$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Request$Type extends MessageType<LsAPI_List_Request> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Request\", [\n { no: 1, name: \"resource_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"resource_signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"location\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Request>): LsAPI_List_Request {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.resourceId = 0n;\n message.resourceSignature = new Uint8Array(0);\n message.location = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Request>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Request): LsAPI_List_Request {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* uint64 resource_id */ 1:\n message.resourceId = reader.uint64().toBigInt();\n break;\n case /* bytes resource_signature */ 3:\n message.resourceSignature = reader.bytes();\n break;\n case /* string location */ 2:\n message.location = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* uint64 resource_id = 1; */\n if (message.resourceId !== 0n)\n writer.tag(1, WireType.Varint).uint64(message.resourceId);\n /* string location = 2; */\n if (message.location !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.location);\n /* bytes resource_signature = 3; */\n if (message.resourceSignature.length)\n writer.tag(3, WireType.LengthDelimited).bytes(message.resourceSignature);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport const LsAPI_List_Request = new LsAPI_List_Request$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Response$Type extends MessageType<LsAPI_List_Response> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Response\", [\n { no: 1, name: \"items\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => LsAPI_ListItem },\n { no: 2, name: \"delimiter\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Response>): LsAPI_List_Response {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.items = [];\n message.delimiter = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Response>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Response): LsAPI_List_Response {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items */ 1:\n message.items.push(LsAPI_ListItem.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* string delimiter */ 2:\n message.delimiter = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1; */\n for (let i = 0; i < message.items.length; i++)\n LsAPI_ListItem.internalBinaryWrite(message.items[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string delimiter = 2; */\n if (message.delimiter !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.delimiter);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport const LsAPI_List_Response = new LsAPI_List_Response$Type();\n/**\n * @generated ServiceType for protobuf service MiLaboratories.Controller.Shared.LS\n */\nexport const LS = new ServiceType(\"MiLaboratories.Controller.Shared.LS\", [\n { name: \"List\", options: { \"google.api.http\": { post: \"/v1/list\", body: \"*\" } }, I: LsAPI_List_Request, O: LsAPI_List_Response }\n]);\n"],"mappings":"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"}
@@ -26,6 +26,16 @@ interface LsAPI_ListItem {
26
26
  * @generated from protobuf field: bool is_dir = 3
27
27
  */
28
28
  isDir: boolean;
29
+ /**
30
+ * additional_info carries the signed identity envelope for federative storages.
31
+ * KV schema: v=1, path, uid, sid, role, exp, kid, signed, sig.
32
+ * Empty for non-federative storages. Verifiers MUST ignore unknown keys.
33
+ *
34
+ * @generated from protobuf field: map<string, string> additional_info = 8
35
+ */
36
+ additionalInfo: {
37
+ [key: string]: string;
38
+ };
29
39
  /**
30
40
  * full_name is the full name of the item, relative to the storage root.
31
41
  * It is <directory> + <name>.
@@ -85,6 +95,7 @@ declare class LsAPI_ListItem$Type extends MessageType<LsAPI_ListItem> {
85
95
  constructor();
86
96
  create(value?: PartialMessage<LsAPI_ListItem>): LsAPI_ListItem;
87
97
  internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_ListItem): LsAPI_ListItem;
98
+ private binaryReadMap8;
88
99
  internalBinaryWrite(message: LsAPI_ListItem, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
89
100
  }
90
101
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","names":[],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"mappings":";;;;;;;;UAsBiB,cAAA;EAoDN;;AAkCX;;;EAhFI,IAAA;EAyFA;;;;;AA8CkC;EAhIlC,IAAA;;;;;;EAMA,KAAA;EAoJmE;;;;;;;EA5InE,QAAA;EAoHyC;;;;;;EA7GzC,SAAA;EAyH8B;;;;;EAnH9B,YAAA,GAAe,SAAA;EA+H2B;;;;;;;;;;;EAnH1C,OAAA;AAAA;;;;UAkCa,mBAAA;EAmQwC;;;;;;;;EA1PrD,KAAA,EAAO,cAAA;EAkQ8G;;;;;;EA3PrH,SAAA;AAAA;AAAA,cAyCE,mBAAA,SAA4B,WAAA,CAAY,cAAA;;EAY1C,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,cAAA,IAAkB,cAAA;EAYhD,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,cAAA,GAAiB,cAAA;EAqChH,mBAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cA+BzF,cAAA,EAAc,mBAAA;AAAA,cAuGrB,wBAAA,SAAiC,WAAA,CAAY,mBAAA;;EAO/C,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,mBAAA,IAAuB,mBAAA;EAQrD,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,mBAAA,GAAsB,mBAAA;EAsBrH,mBAAA,CAAoB,OAAA,EAAS,mBAAA,EAAqB,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cAgB9F,mBAAA,EAAmB,wBAAA"}
1
+ {"version":3,"file":"protocol.d.ts","names":[],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"mappings":";;;;;;;;UAsBiB,cAAA;EAkDE;;;;AA8CnB;EA1FI,IAAA;;;;;;;EAOA,IAAA;EA4IE;;;;;EAtIF,KAAA;EAmJgD;;;;;;;EA3IhD,cAAA;IAAA,CACK,GAAA;EAAA;EA6HoC;;;;;;;EApHzC,QAAA;EAiIO;;;;;;EA1HP,SAAA;EAuI0D;;;;;EAjI1D,YAAA,GAAe,SAAA;EAyLc;;;;;;;;;AAkCjC;;EA/MI,OAAA;AAAA;;;;UAkCa,mBAAA;EAmSkF;;;;;;;;EA1R/F,KAAA,EAAO,cAAA;EAgTkE;;;;AAgB7E;;EAzTI,SAAA;AAAA;AAAA,cAyCE,mBAAA,SAA4B,WAAA,CAAY,cAAA;;EAa1C,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,cAAA,IAAkB,cAAA;EAahD,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,cAAA,GAAiB,cAAA;EAAA,QAwCxG,cAAA;EAgBR,mBAAA,CAAoB,OAAA,EAAS,cAAA,EAAgB,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cAkCzF,cAAA,EAAc,mBAAA;AAAA,cAuGrB,wBAAA,SAAiC,WAAA,CAAY,mBAAA;;EAO/C,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,mBAAA,IAAuB,mBAAA;EAQrD,kBAAA,CAAmB,MAAA,EAAQ,aAAA,EAAe,MAAA,UAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,GAAS,mBAAA,GAAsB,mBAAA;EAsBrH,mBAAA,CAAoB,OAAA,EAAS,mBAAA,EAAqB,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,kBAAA,GAAqB,aAAA;AAAA;;;;cAgB9F,mBAAA,EAAmB,wBAAA"}
@@ -54,6 +54,16 @@ var LsAPI_ListItem$Type = class extends MessageType {
54
54
  kind: "scalar",
55
55
  T: 8
56
56
  },
57
+ {
58
+ no: 8,
59
+ name: "additional_info",
60
+ kind: "map",
61
+ K: 9,
62
+ V: {
63
+ kind: "scalar",
64
+ T: 9
65
+ }
66
+ },
57
67
  {
58
68
  no: 10,
59
69
  name: "full_name",
@@ -85,6 +95,7 @@ var LsAPI_ListItem$Type = class extends MessageType {
85
95
  message.name = "";
86
96
  message.size = 0n;
87
97
  message.isDir = false;
98
+ message.additionalInfo = {};
88
99
  message.fullName = "";
89
100
  message.directory = "";
90
101
  message.version = "";
@@ -105,6 +116,9 @@ var LsAPI_ListItem$Type = class extends MessageType {
105
116
  case 3:
106
117
  message.isDir = reader.bool();
107
118
  break;
119
+ case 8:
120
+ this.binaryReadMap8(message.additionalInfo, reader, options);
121
+ break;
108
122
  case 10:
109
123
  message.fullName = reader.string();
110
124
  break;
@@ -126,10 +140,27 @@ var LsAPI_ListItem$Type = class extends MessageType {
126
140
  }
127
141
  return message;
128
142
  }
143
+ binaryReadMap8(map, reader, options) {
144
+ let len = reader.uint32(), end = reader.pos + len, key, val;
145
+ while (reader.pos < end) {
146
+ let [fieldNo, wireType] = reader.tag();
147
+ switch (fieldNo) {
148
+ case 1:
149
+ key = reader.string();
150
+ break;
151
+ case 2:
152
+ val = reader.string();
153
+ break;
154
+ default: throw new globalThis.Error("unknown map entry field for MiLaboratories.Controller.Shared.LsAPI.ListItem.additional_info");
155
+ }
156
+ }
157
+ map[key ?? ""] = val ?? "";
158
+ }
129
159
  internalBinaryWrite(message, writer, options) {
130
160
  if (message.name !== "") writer.tag(1, WireType.LengthDelimited).string(message.name);
131
161
  if (message.size !== 0n) writer.tag(2, WireType.Varint).uint64(message.size);
132
162
  if (message.isDir !== false) writer.tag(3, WireType.Varint).bool(message.isDir);
163
+ for (let k of globalThis.Object.keys(message.additionalInfo)) writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalInfo[k]).join();
133
164
  if (message.fullName !== "") writer.tag(10, WireType.LengthDelimited).string(message.fullName);
134
165
  if (message.directory !== "") writer.tag(11, WireType.LengthDelimited).string(message.directory);
135
166
  if (message.lastModified) Timestamp.internalBinaryWrite(message.lastModified, writer.tag(12, WireType.LengthDelimited).fork(), options).join();
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","names":[],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.proto\" (package \"MiLaboratories.Controller.Shared\", syntax proto3)\n// tslint:disable\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Timestamp } from \"../../../../../../../google/protobuf/timestamp\";\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport interface LsAPI {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport interface LsAPI_ListItem {\n /**\n * Name of the item in storage, without any prefixes.\n *\n * @generated from protobuf field: string name = 1\n */\n name: string;\n /**\n * Size of the item in bytes.\n * Is always zero for directories (is_dir = true).\n *\n * @generated from protobuf field: uint64 size = 2\n */\n size: bigint;\n /**\n * is_dir is true for an item that can have subitems.\n *\n * @generated from protobuf field: bool is_dir = 3\n */\n isDir: boolean;\n /**\n * full_name is the full name of the item, relative to the storage root.\n * It is <directory> + <name>.\n * The <delimiter>, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: string full_name = 10\n */\n fullName: string;\n /**\n * The directory the item is located in. The value here is always a prefix of name:\n * name.HasPrefix(directory) is always true.\n *\n * @generated from protobuf field: string directory = 11\n */\n directory: string;\n /**\n * last_modified keeps the item's last modification timestamp.\n *\n * @generated from protobuf field: google.protobuf.Timestamp last_modified = 12\n */\n lastModified?: Timestamp;\n /**\n * Version of item in storage.\n * When the storage supports versioning or provides checksums for the data stored,\n * the <version> field keeps that data.\n * If not, it keeps any simple combination of item attributes that helps to\n * detect if the contents of the item have changed, e.g. <size>+<mtime>.\n * Anyway, the client should not try to interpret this field, but should provide it to the Platform\n * in operations with a given item (like BlobImportInternal) to help the Platform with deduplication.\n *\n * @generated from protobuf field: string version = 13\n */\n version: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport interface LsAPI_List {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport interface LsAPI_List_Request {\n /**\n * resource_id of 'LS/<Storage>' resource\n *\n * @generated from protobuf field: uint64 resource_id = 1\n */\n resourceId: bigint;\n /**\n * Signature proving the caller is authorized to access this resource.\n *\n * @generated from protobuf field: bytes resource_signature = 3\n */\n resourceSignature: Uint8Array;\n /**\n * Location to list, relative to the storage root. Only items that have <full_name> starting\n * with <location> are included in the list response.\n *\n * @generated from protobuf field: string location = 2\n */\n location: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport interface LsAPI_List_Response {\n /**\n * List of the full (relative to storage root) names of items from storage.\n * E.g., for 'fs' storage each name will consist of names of all directories, where the\n * item is located, and the item name itself.\n * The delimiter, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1\n */\n items: LsAPI_ListItem[];\n /**\n * The delimiter is the path separator used in this storage. The client can use it to parse item names into parts,\n * to extract directory names.\n *\n * @generated from protobuf field: string delimiter = 2\n */\n delimiter: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI$Type extends MessageType<LsAPI> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI\", []);\n }\n create(value?: PartialMessage<LsAPI>): LsAPI {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI): LsAPI {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport const LsAPI = new LsAPI$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_ListItem$Type extends MessageType<LsAPI_ListItem> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.ListItem\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"size\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"is_dir\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 10, name: \"full_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 11, name: \"directory\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 12, name: \"last_modified\", kind: \"message\", T: () => Timestamp },\n { no: 13, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_ListItem>): LsAPI_ListItem {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.size = 0n;\n message.isDir = false;\n message.fullName = \"\";\n message.directory = \"\";\n message.version = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_ListItem>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_ListItem): LsAPI_ListItem {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* uint64 size */ 2:\n message.size = reader.uint64().toBigInt();\n break;\n case /* bool is_dir */ 3:\n message.isDir = reader.bool();\n break;\n case /* string full_name */ 10:\n message.fullName = reader.string();\n break;\n case /* string directory */ 11:\n message.directory = reader.string();\n break;\n case /* google.protobuf.Timestamp last_modified */ 12:\n message.lastModified = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastModified);\n break;\n case /* string version */ 13:\n message.version = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_ListItem, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* uint64 size = 2; */\n if (message.size !== 0n)\n writer.tag(2, WireType.Varint).uint64(message.size);\n /* bool is_dir = 3; */\n if (message.isDir !== false)\n writer.tag(3, WireType.Varint).bool(message.isDir);\n /* string full_name = 10; */\n if (message.fullName !== \"\")\n writer.tag(10, WireType.LengthDelimited).string(message.fullName);\n /* string directory = 11; */\n if (message.directory !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.directory);\n /* google.protobuf.Timestamp last_modified = 12; */\n if (message.lastModified)\n Timestamp.internalBinaryWrite(message.lastModified, writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n /* string version = 13; */\n if (message.version !== \"\")\n writer.tag(13, WireType.LengthDelimited).string(message.version);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport const LsAPI_ListItem = new LsAPI_ListItem$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List$Type extends MessageType<LsAPI_List> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List\", []);\n }\n create(value?: PartialMessage<LsAPI_List>): LsAPI_List {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List): LsAPI_List {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport const LsAPI_List = new LsAPI_List$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Request$Type extends MessageType<LsAPI_List_Request> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Request\", [\n { no: 1, name: \"resource_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"resource_signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"location\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Request>): LsAPI_List_Request {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.resourceId = 0n;\n message.resourceSignature = new Uint8Array(0);\n message.location = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Request>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Request): LsAPI_List_Request {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* uint64 resource_id */ 1:\n message.resourceId = reader.uint64().toBigInt();\n break;\n case /* bytes resource_signature */ 3:\n message.resourceSignature = reader.bytes();\n break;\n case /* string location */ 2:\n message.location = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* uint64 resource_id = 1; */\n if (message.resourceId !== 0n)\n writer.tag(1, WireType.Varint).uint64(message.resourceId);\n /* string location = 2; */\n if (message.location !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.location);\n /* bytes resource_signature = 3; */\n if (message.resourceSignature.length)\n writer.tag(3, WireType.LengthDelimited).bytes(message.resourceSignature);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport const LsAPI_List_Request = new LsAPI_List_Request$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Response$Type extends MessageType<LsAPI_List_Response> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Response\", [\n { no: 1, name: \"items\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => LsAPI_ListItem },\n { no: 2, name: \"delimiter\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Response>): LsAPI_List_Response {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.items = [];\n message.delimiter = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Response>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Response): LsAPI_List_Response {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items */ 1:\n message.items.push(LsAPI_ListItem.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* string delimiter */ 2:\n message.delimiter = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1; */\n for (let i = 0; i < message.items.length; i++)\n LsAPI_ListItem.internalBinaryWrite(message.items[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string delimiter = 2; */\n if (message.delimiter !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.delimiter);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport const LsAPI_List_Response = new LsAPI_List_Response$Type();\n/**\n * @generated ServiceType for protobuf service MiLaboratories.Controller.Shared.LS\n */\nexport const LS = new ServiceType(\"MiLaboratories.Controller.Shared.LS\", [\n { name: \"List\", options: { \"google.api.http\": { post: \"/v1/list\", body: \"*\" } }, I: LsAPI_List_Request, O: LsAPI_List_Response }\n]);\n"],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","names":[],"sources":["../../../../../../../../../src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts"],"sourcesContent":["// @generated by protobuf-ts 2.11.1 with parameter client_generic,optimize_speed,generate_dependencies,force_server_none\n// @generated from protobuf file \"github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.proto\" (package \"MiLaboratories.Controller.Shared\", syntax proto3)\n// tslint:disable\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Timestamp } from \"../../../../../../../google/protobuf/timestamp\";\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport interface LsAPI {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport interface LsAPI_ListItem {\n /**\n * Name of the item in storage, without any prefixes.\n *\n * @generated from protobuf field: string name = 1\n */\n name: string;\n /**\n * Size of the item in bytes.\n * Is always zero for directories (is_dir = true).\n *\n * @generated from protobuf field: uint64 size = 2\n */\n size: bigint;\n /**\n * is_dir is true for an item that can have subitems.\n *\n * @generated from protobuf field: bool is_dir = 3\n */\n isDir: boolean;\n /**\n * additional_info carries the signed identity envelope for federative storages.\n * KV schema: v=1, path, uid, sid, role, exp, kid, signed, sig.\n * Empty for non-federative storages. Verifiers MUST ignore unknown keys.\n *\n * @generated from protobuf field: map<string, string> additional_info = 8\n */\n additionalInfo: {\n [key: string]: string;\n };\n /**\n * full_name is the full name of the item, relative to the storage root.\n * It is <directory> + <name>.\n * The <delimiter>, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: string full_name = 10\n */\n fullName: string;\n /**\n * The directory the item is located in. The value here is always a prefix of name:\n * name.HasPrefix(directory) is always true.\n *\n * @generated from protobuf field: string directory = 11\n */\n directory: string;\n /**\n * last_modified keeps the item's last modification timestamp.\n *\n * @generated from protobuf field: google.protobuf.Timestamp last_modified = 12\n */\n lastModified?: Timestamp;\n /**\n * Version of item in storage.\n * When the storage supports versioning or provides checksums for the data stored,\n * the <version> field keeps that data.\n * If not, it keeps any simple combination of item attributes that helps to\n * detect if the contents of the item have changed, e.g. <size>+<mtime>.\n * Anyway, the client should not try to interpret this field, but should provide it to the Platform\n * in operations with a given item (like BlobImportInternal) to help the Platform with deduplication.\n *\n * @generated from protobuf field: string version = 13\n */\n version: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport interface LsAPI_List {\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport interface LsAPI_List_Request {\n /**\n * resource_id of 'LS/<Storage>' resource\n *\n * @generated from protobuf field: uint64 resource_id = 1\n */\n resourceId: bigint;\n /**\n * Signature proving the caller is authorized to access this resource.\n *\n * @generated from protobuf field: bytes resource_signature = 3\n */\n resourceSignature: Uint8Array;\n /**\n * Location to list, relative to the storage root. Only items that have <full_name> starting\n * with <location> are included in the list response.\n *\n * @generated from protobuf field: string location = 2\n */\n location: string;\n}\n/**\n * @generated from protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport interface LsAPI_List_Response {\n /**\n * List of the full (relative to storage root) names of items from storage.\n * E.g., for 'fs' storage each name will consist of names of all directories, where the\n * item is located, and the item name itself.\n * The delimiter, used in names, is storage-specific and is NOT guaranteed to be '/'.\n *\n * @generated from protobuf field: repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1\n */\n items: LsAPI_ListItem[];\n /**\n * The delimiter is the path separator used in this storage. The client can use it to parse item names into parts,\n * to extract directory names.\n *\n * @generated from protobuf field: string delimiter = 2\n */\n delimiter: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI$Type extends MessageType<LsAPI> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI\", []);\n }\n create(value?: PartialMessage<LsAPI>): LsAPI {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI): LsAPI {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI\n */\nexport const LsAPI = new LsAPI$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_ListItem$Type extends MessageType<LsAPI_ListItem> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.ListItem\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 2, name: \"size\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"is_dir\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 8, name: \"additional_info\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ } },\n { no: 10, name: \"full_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 11, name: \"directory\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n { no: 12, name: \"last_modified\", kind: \"message\", T: () => Timestamp },\n { no: 13, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_ListItem>): LsAPI_ListItem {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.size = 0n;\n message.isDir = false;\n message.additionalInfo = {};\n message.fullName = \"\";\n message.directory = \"\";\n message.version = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_ListItem>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_ListItem): LsAPI_ListItem {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* uint64 size */ 2:\n message.size = reader.uint64().toBigInt();\n break;\n case /* bool is_dir */ 3:\n message.isDir = reader.bool();\n break;\n case /* map<string, string> additional_info */ 8:\n this.binaryReadMap8(message.additionalInfo, reader, options);\n break;\n case /* string full_name */ 10:\n message.fullName = reader.string();\n break;\n case /* string directory */ 11:\n message.directory = reader.string();\n break;\n case /* google.protobuf.Timestamp last_modified */ 12:\n message.lastModified = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastModified);\n break;\n case /* string version */ 13:\n message.version = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap8(map: LsAPI_ListItem[\"additionalInfo\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof LsAPI_ListItem[\"additionalInfo\"] | undefined, val: LsAPI_ListItem[\"additionalInfo\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = reader.string();\n break;\n default: throw new globalThis.Error(\"unknown map entry field for MiLaboratories.Controller.Shared.LsAPI.ListItem.additional_info\");\n }\n }\n map[key ?? \"\"] = val ?? \"\";\n }\n internalBinaryWrite(message: LsAPI_ListItem, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* uint64 size = 2; */\n if (message.size !== 0n)\n writer.tag(2, WireType.Varint).uint64(message.size);\n /* bool is_dir = 3; */\n if (message.isDir !== false)\n writer.tag(3, WireType.Varint).bool(message.isDir);\n /* map<string, string> additional_info = 8; */\n for (let k of globalThis.Object.keys(message.additionalInfo))\n writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalInfo[k]).join();\n /* string full_name = 10; */\n if (message.fullName !== \"\")\n writer.tag(10, WireType.LengthDelimited).string(message.fullName);\n /* string directory = 11; */\n if (message.directory !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.directory);\n /* google.protobuf.Timestamp last_modified = 12; */\n if (message.lastModified)\n Timestamp.internalBinaryWrite(message.lastModified, writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n /* string version = 13; */\n if (message.version !== \"\")\n writer.tag(13, WireType.LengthDelimited).string(message.version);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.ListItem\n */\nexport const LsAPI_ListItem = new LsAPI_ListItem$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List$Type extends MessageType<LsAPI_List> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List\", []);\n }\n create(value?: PartialMessage<LsAPI_List>): LsAPI_List {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List): LsAPI_List {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List\n */\nexport const LsAPI_List = new LsAPI_List$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Request$Type extends MessageType<LsAPI_List_Request> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Request\", [\n { no: 1, name: \"resource_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n { no: 3, name: \"resource_signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n { no: 2, name: \"location\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Request>): LsAPI_List_Request {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.resourceId = 0n;\n message.resourceSignature = new Uint8Array(0);\n message.location = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Request>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Request): LsAPI_List_Request {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* uint64 resource_id */ 1:\n message.resourceId = reader.uint64().toBigInt();\n break;\n case /* bytes resource_signature */ 3:\n message.resourceSignature = reader.bytes();\n break;\n case /* string location */ 2:\n message.location = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* uint64 resource_id = 1; */\n if (message.resourceId !== 0n)\n writer.tag(1, WireType.Varint).uint64(message.resourceId);\n /* string location = 2; */\n if (message.location !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.location);\n /* bytes resource_signature = 3; */\n if (message.resourceSignature.length)\n writer.tag(3, WireType.LengthDelimited).bytes(message.resourceSignature);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Request\n */\nexport const LsAPI_List_Request = new LsAPI_List_Request$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass LsAPI_List_Response$Type extends MessageType<LsAPI_List_Response> {\n constructor() {\n super(\"MiLaboratories.Controller.Shared.LsAPI.List.Response\", [\n { no: 1, name: \"items\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => LsAPI_ListItem },\n { no: 2, name: \"delimiter\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n ]);\n }\n create(value?: PartialMessage<LsAPI_List_Response>): LsAPI_List_Response {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.items = [];\n message.delimiter = \"\";\n if (value !== undefined)\n reflectionMergePartial<LsAPI_List_Response>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LsAPI_List_Response): LsAPI_List_Response {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items */ 1:\n message.items.push(LsAPI_ListItem.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* string delimiter */ 2:\n message.delimiter = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: LsAPI_List_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated MiLaboratories.Controller.Shared.LsAPI.ListItem items = 1; */\n for (let i = 0; i < message.items.length; i++)\n LsAPI_ListItem.internalBinaryWrite(message.items[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string delimiter = 2; */\n if (message.delimiter !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.delimiter);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message MiLaboratories.Controller.Shared.LsAPI.List.Response\n */\nexport const LsAPI_List_Response = new LsAPI_List_Response$Type();\n/**\n * @generated ServiceType for protobuf service MiLaboratories.Controller.Shared.LS\n */\nexport const LS = new ServiceType(\"MiLaboratories.Controller.Shared.LS\", [\n { name: \"List\", options: { \"google.api.http\": { post: \"/v1/list\", body: \"*\" } }, I: LsAPI_List_Request, O: LsAPI_List_Response }\n]);\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-drivers",
3
- "version": "1.14.16",
3
+ "version": "1.15.1",
4
4
  "description": "Drivers and a low-level clients for log streaming, downloading and uploading files from and to pl",
5
5
  "files": [
6
6
  "dist/**/*",
@@ -28,12 +28,12 @@
28
28
  "tar-fs": "^3.0.9",
29
29
  "undici": "~7.16.0",
30
30
  "zod": "~3.25.76",
31
+ "@milaboratories/pl-model-common": "1.44.0",
31
32
  "@milaboratories/computable": "2.9.4",
33
+ "@milaboratories/pl-client": "3.10.2",
34
+ "@milaboratories/pl-tree": "1.12.7",
32
35
  "@milaboratories/helpers": "1.14.2",
33
- "@milaboratories/pl-model-common": "1.43.0",
34
- "@milaboratories/pl-client": "3.10.1",
35
- "@milaboratories/ts-helpers": "1.8.2",
36
- "@milaboratories/pl-tree": "1.12.6"
36
+ "@milaboratories/ts-helpers": "1.8.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/decompress": "^4.2.7",
@@ -68,6 +68,7 @@ export class ClientLs {
68
68
  name: item.name,
69
69
  size: BigInt(item.size),
70
70
  isDir: item.isDir,
71
+ additionalInfo: item.additionalInfo ?? {},
71
72
  fullName: item.fullName,
72
73
  directory: item.directory,
73
74
  lastModified: parseTimestamp(item.lastModified),
@@ -0,0 +1,46 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { createIndexImportHandle, parseIndexHandle } from "./ls_remote_import_handle";
3
+
4
+ // Golden URL for the no-envelope case — guards against accidental key injection or ordering drift.
5
+ // Value: index://index/<url-encoded JSON of {storageId:"s3",path:"x/y"}>
6
+ const GOLDEN_NO_ENVELOPE = `index://index/${encodeURIComponent(JSON.stringify({ storageId: "s3", path: "x/y" }))}`;
7
+
8
+ describe("createIndexImportHandle", () => {
9
+ test("round-trips additionalInfo envelope", () => {
10
+ const envelope = { uid: "u", sid: "s", sig: "abc123", exp: "9999999999", kid: "k", v: "1" };
11
+ const handle = createIndexImportHandle("s3", "x/y", envelope);
12
+ const parsed = parseIndexHandle(handle);
13
+ expect(parsed.storageId).toBe("s3");
14
+ expect(parsed.path).toBe("x/y");
15
+ expect(parsed.additionalInfo).toEqual(envelope);
16
+ });
17
+
18
+ test("no-arg case is byte-identical to golden (regression guard)", () => {
19
+ const handle = createIndexImportHandle("s3", "x/y");
20
+ expect(handle).toBe(GOLDEN_NO_ENVELOPE);
21
+ });
22
+
23
+ test("empty map is pruned — byte-identical to no-arg golden", () => {
24
+ const handle = createIndexImportHandle("s3", "x/y", {});
25
+ expect(handle).toBe(GOLDEN_NO_ENVELOPE);
26
+ });
27
+
28
+ test("absent envelope: decoded handle has no additionalInfo key", () => {
29
+ const handle = createIndexImportHandle("s3", "x/y");
30
+ const parsed = parseIndexHandle(handle);
31
+ expect(parsed.additionalInfo).toBeUndefined();
32
+ // Confirm the key is truly absent from decoded JSON (not just undefined)
33
+ expect(Object.prototype.hasOwnProperty.call(parsed, "additionalInfo")).toBe(false);
34
+ });
35
+
36
+ test("parseIndexHandle accepts old handle without additionalInfo", () => {
37
+ // Simulate a handle that was created before this change (no additionalInfo key in JSON)
38
+ const oldJson = JSON.stringify({ storageId: "legacy", path: "a/b" });
39
+ const oldHandle =
40
+ `index://index/${encodeURIComponent(oldJson)}` as import("@milaboratories/pl-model-common").ImportFileHandleIndex;
41
+ const parsed = parseIndexHandle(oldHandle);
42
+ expect(parsed.storageId).toBe("legacy");
43
+ expect(parsed.path).toBe("a/b");
44
+ expect(parsed.additionalInfo).toBeUndefined();
45
+ });
46
+ });
@@ -5,12 +5,18 @@ import { ImportFileHandleIndexData, ImportFileHandleUploadData } from "../types"
5
5
  export function createIndexImportHandle(
6
6
  storageId: string,
7
7
  path: string,
8
+ additionalInfo?: Record<string, string>,
8
9
  ): sdk.ImportFileHandleIndex {
9
10
  const data: ImportFileHandleIndexData = {
10
11
  storageId: storageId,
11
12
  path: path,
12
13
  };
13
14
 
15
+ // Only embed the envelope when non-empty; preserves byte-identical URL for non-federative storages.
16
+ if (additionalInfo && Object.keys(additionalInfo).length > 0) {
17
+ data.additionalInfo = additionalInfo;
18
+ }
19
+
14
20
  return `index://index/${encodeURIComponent(JSON.stringify(data))}`;
15
21
  }
16
22
 
@@ -1,10 +1,13 @@
1
1
  import { ConsoleLoggerAdapter, HmacSha256Signer } from "@milaboratories/ts-helpers";
2
- import { LsDriver } from "./ls";
2
+ import { LsDriver, type LsEntryWithFileStats } from "./ls";
3
3
  import { TestHelpers } from "@milaboratories/pl-client";
4
4
  import * as path from "node:path";
5
- import { test, expect } from "vitest";
5
+ import { test, expect, describe } from "vitest";
6
6
  import { isImportFileHandleIndex, isImportFileHandleUpload } from "@milaboratories/pl-model-common";
7
+ import type { StorageHandle } from "@milaboratories/pl-model-common";
7
8
  import * as env from "../test_env";
9
+ import { parseIndexHandle } from "./helpers/ls_remote_import_handle";
10
+ import { createRemoteStorageHandle } from "./helpers/ls_storage_entry";
8
11
 
9
12
  const assetsPath = path.resolve("../../../assets");
10
13
 
@@ -141,3 +144,136 @@ test("should ok when get file using local dialog, and read its content", async (
141
144
  expect(multiResult.files![0]).toStrictEqual(result.file);
142
145
  });
143
146
  });
147
+
148
+ // Unit tests: verify that LsDriver.listFiles and listRemoteFilesWithFileStats correctly
149
+ // thread additionalInfo from gRPC list items into the index:// handle.
150
+ describe("LsDriver additionalInfo threading", () => {
151
+ const envelope = { uid: "u1", sid: "s1", sig: "sigval", exp: "9999999999", kid: "k1", v: "1" };
152
+
153
+ const storageInfo = {
154
+ storageId: "test-storage",
155
+ storageName: "Test Storage",
156
+ // Signed resource id format "<globalId>|<signatureHex>" — required by asSignedResourceId.
157
+ resourceId: "res-id|deadbeef" as any,
158
+ resourceType: { name: "LS/test-storage", version: "1" },
159
+ };
160
+
161
+ // Builds a minimal LsDriver instance with an injected mock lsClient via private-constructor bypass.
162
+ function makeMockDriver(listResponse: { items: any[]; delimiter: string }): LsDriver {
163
+ const mockLsClient = {
164
+ list: async () => listResponse,
165
+ close: () => {},
166
+ };
167
+ const mockUserResources = {
168
+ getDataLibraries: async () => new Map([[storageInfo.storageId, storageInfo]]),
169
+ };
170
+ const signer = new HmacSha256Signer("test");
171
+ // Bypass private constructor for unit testing only.
172
+ return new (LsDriver as any)(
173
+ new ConsoleLoggerAdapter(),
174
+ mockLsClient,
175
+ mockUserResources,
176
+ signer,
177
+ new Map(),
178
+ new Map(),
179
+ () => Promise.resolve(undefined),
180
+ ) as LsDriver;
181
+ }
182
+
183
+ function makeRemoteHandle(): StorageHandle {
184
+ return createRemoteStorageHandle(storageInfo) as StorageHandle;
185
+ }
186
+
187
+ test("listFiles: handle carries additionalInfo envelope from gRPC item", async () => {
188
+ const driver = makeMockDriver({
189
+ delimiter: "/",
190
+ items: [
191
+ {
192
+ name: "file.txt",
193
+ size: 100n,
194
+ isDir: false,
195
+ additionalInfo: envelope,
196
+ fullName: "dir/file.txt",
197
+ directory: "dir/",
198
+ version: "v1",
199
+ },
200
+ ],
201
+ });
202
+
203
+ const result = await driver.listFiles(makeRemoteHandle(), "dir/");
204
+ expect(result.entries).toHaveLength(1);
205
+
206
+ const parsed = parseIndexHandle(result.entries[0].handle as any);
207
+ expect(parsed.additionalInfo).toEqual(envelope);
208
+ });
209
+
210
+ test("listFiles: handle has no additionalInfo when item has empty envelope", async () => {
211
+ const driver = makeMockDriver({
212
+ delimiter: "/",
213
+ items: [
214
+ {
215
+ name: "plain.txt",
216
+ size: 50n,
217
+ isDir: false,
218
+ additionalInfo: {},
219
+ fullName: "plain.txt",
220
+ directory: "",
221
+ version: "v1",
222
+ },
223
+ ],
224
+ });
225
+
226
+ const result = await driver.listFiles(makeRemoteHandle(), "");
227
+ expect(result.entries).toHaveLength(1);
228
+
229
+ const parsed = parseIndexHandle(result.entries[0].handle as any);
230
+ expect(parsed.additionalInfo).toBeUndefined();
231
+ });
232
+
233
+ test("listRemoteFilesWithFileStats: handle carries additionalInfo envelope", async () => {
234
+ const driver = makeMockDriver({
235
+ delimiter: "/",
236
+ items: [
237
+ {
238
+ name: "data.csv",
239
+ size: 200n,
240
+ isDir: false,
241
+ additionalInfo: envelope,
242
+ fullName: "data.csv",
243
+ directory: "",
244
+ version: "v2",
245
+ },
246
+ ],
247
+ });
248
+
249
+ const result = await driver.listRemoteFilesWithFileStats(makeRemoteHandle(), "");
250
+ expect(result.entries).toHaveLength(1);
251
+ expect((result.entries[0] as LsEntryWithFileStats).size).toBe(200);
252
+
253
+ const parsed = parseIndexHandle(result.entries[0].handle as any);
254
+ expect(parsed.additionalInfo).toEqual(envelope);
255
+ });
256
+
257
+ test("listRemoteFilesWithFileStats: no additionalInfo when absent in item", async () => {
258
+ const driver = makeMockDriver({
259
+ delimiter: "/",
260
+ items: [
261
+ {
262
+ name: "plain.csv",
263
+ size: 10n,
264
+ isDir: false,
265
+ additionalInfo: {},
266
+ fullName: "plain.csv",
267
+ directory: "",
268
+ version: "v1",
269
+ },
270
+ ],
271
+ });
272
+
273
+ const result = await driver.listRemoteFilesWithFileStats(makeRemoteHandle(), "");
274
+ expect(result.entries).toHaveLength(1);
275
+
276
+ const parsed = parseIndexHandle(result.entries[0].handle as any);
277
+ expect(parsed.additionalInfo).toBeUndefined();
278
+ });
279
+ });