Skip to content

feat(file): generate SDKs #2008

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/clients/src/api/file/index.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/**
* This file is automatically generated from /scripts/generate.js
* PLEASE DO NOT EDIT HERE
*/

export * as v1alpha1 from './v1alpha1/index.gen'
194 changes: 194 additions & 0 deletions packages/clients/src/api/file/v1alpha1/api.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
// This file was automatically generated. DO NOT EDIT.
// If you have any remark or suggestion do not hesitate to open an issue.
import {
API as ParentAPI,
enrichForPagination,
urlParams,
validatePathParam,
waitForResource,
} from '@scaleway/sdk-client'
import type { Region as ScwRegion, WaitForOptions } from '@scaleway/sdk-client'
import { FILE_SYSTEM_TRANSIENT_STATUSES as FILE_SYSTEM_TRANSIENT_STATUSES_FILE } from './content.gen'
import {
marshalCreateFileSystemRequest,
marshalUpdateFileSystemRequest,
unmarshalFileSystem,
unmarshalListAttachmentsResponse,
unmarshalListFileSystemsResponse,
} from './marshalling.gen'
import type {
CreateFileSystemRequest,
DeleteFileSystemRequest,
FileSystem,
GetFileSystemRequest,
ListAttachmentsRequest,
ListAttachmentsResponse,
ListFileSystemsRequest,
ListFileSystemsResponse,
UpdateFileSystemRequest,
} from './types.gen'

const jsonContentHeaders = {
'Content-Type': 'application/json; charset=utf-8',
}

/**
* File Storage API.

This API allows you to manage your File Storage resources.
*/
export class API extends ParentAPI {
/** Lists the available regions of the API. */
public static readonly LOCALITIES: ScwRegion[] = ['fr-par']

/**
* Get filesystem details. Retrieve all properties and current status of a specific filesystem identified by its ID.
*
* @param request - The request {@link GetFileSystemRequest}
* @returns A Promise of FileSystem
*/
getFileSystem = (request: Readonly<GetFileSystemRequest>) =>
this.client.fetch<FileSystem>(
{
method: 'GET',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
},
unmarshalFileSystem,
)

/**
* Waits for {@link FileSystem} to be in a final state.
*
* @param request - The request {@link GetFileSystemRequest}
* @param options - The waiting options
* @returns A Promise of FileSystem
*/
waitForFileSystem = (
request: Readonly<GetFileSystemRequest>,
options?: Readonly<WaitForOptions<FileSystem>>,
) =>
waitForResource(
options?.stop ??
(res =>
Promise.resolve(
!FILE_SYSTEM_TRANSIENT_STATUSES_FILE.includes(res.status),
)),
this.getFileSystem,
request,
options,
)

protected pageOfListFileSystems = (
request: Readonly<ListFileSystemsRequest> = {},
) =>
this.client.fetch<ListFileSystemsResponse>(
{
method: 'GET',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems`,
urlParams: urlParams(
['name', request.name],
['order_by', request.orderBy],
['page', request.page],
[
'page_size',
request.pageSize ?? this.client.settings.defaultPageSize,
],
['project_id', request.projectId],
['tags', request.tags],
),
},
unmarshalListFileSystemsResponse,
)

/**
* List all filesystems. Retrieve all filesystems in the specified region. Results are ordered by creation date in ascending order by default.
Use the order_by parameter to modify the sorting behavior.
*
* @param request - The request {@link ListFileSystemsRequest}
* @returns A Promise of ListFileSystemsResponse
*/
listFileSystems = (request: Readonly<ListFileSystemsRequest> = {}) =>
enrichForPagination('filesystems', this.pageOfListFileSystems, request)

protected pageOfListAttachments = (
request: Readonly<ListAttachmentsRequest> = {},
) =>
this.client.fetch<ListAttachmentsResponse>(
{
method: 'GET',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/attachments`,
urlParams: urlParams(
['filesystem_id', request.filesystemId],
['page', request.page],
[
'page_size',
request.pageSize ?? this.client.settings.defaultPageSize,
],
['resource_id', request.resourceId],
['resource_type', request.resourceType],
),
},
unmarshalListAttachmentsResponse,
)

/**
* List filesystems attachments. List all existing attachments in a specified region.
By default, the attachments listed are ordered by creation date in ascending order.
This can be modified using the `order_by` field.
*
* @param request - The request {@link ListAttachmentsRequest}
* @returns A Promise of ListAttachmentsResponse
*/
listAttachments = (request: Readonly<ListAttachmentsRequest> = {}) =>
enrichForPagination('attachments', this.pageOfListAttachments, request)

/**
* Create a new filesystem. To create a new filesystem, you need to provide a name, a size, and a project ID.
*
* @param request - The request {@link CreateFileSystemRequest}
* @returns A Promise of FileSystem
*/
createFileSystem = (request: Readonly<CreateFileSystemRequest>) =>
this.client.fetch<FileSystem>(
{
body: JSON.stringify(
marshalCreateFileSystemRequest(request, this.client.settings),
),
headers: jsonContentHeaders,
method: 'POST',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems`,
},
unmarshalFileSystem,
)

/**
* Delete a detached filesystem. You must specify the `filesystem_id` of the filesystem you want to delete.
*
* @param request - The request {@link DeleteFileSystemRequest}
*/
deleteFileSystem = (request: Readonly<DeleteFileSystemRequest>) =>
this.client.fetch<void>({
method: 'DELETE',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
})

/**
* Update filesystem properties. Update the technical details of a filesystem, such as its name, tags or its new size.
You can only resize a filesystem to a larger size.
*
* @param request - The request {@link UpdateFileSystemRequest}
* @returns A Promise of FileSystem
*/
updateFileSystem = (request: Readonly<UpdateFileSystemRequest>) =>
this.client.fetch<FileSystem>(
{
body: JSON.stringify(
marshalUpdateFileSystemRequest(request, this.client.settings),
),
headers: jsonContentHeaders,
method: 'PATCH',
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
},
unmarshalFileSystem,
)
}
9 changes: 9 additions & 0 deletions packages/clients/src/api/file/v1alpha1/content.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// This file was automatically generated. DO NOT EDIT.
// If you have any remark or suggestion do not hesitate to open an issue.
import type { FileSystemStatus } from './types.gen'

/** Lists transient statutes of the enum {@link FileSystemStatus}. */
export const FILE_SYSTEM_TRANSIENT_STATUSES: FileSystemStatus[] = [
'creating',
'updating',
]
20 changes: 20 additions & 0 deletions packages/clients/src/api/file/v1alpha1/index.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// This file was automatically generated. DO NOT EDIT.
// If you have any remark or suggestion do not hesitate to open an issue.
export { API } from './api.gen'
export * from './content.gen'
export type {
Attachment,
AttachmentResourceType,
CreateFileSystemRequest,
DeleteFileSystemRequest,
FileSystem,
FileSystemStatus,
GetFileSystemRequest,
ListAttachmentsRequest,
ListAttachmentsResponse,
ListFileSystemsRequest,
ListFileSystemsRequestOrderBy,
ListFileSystemsResponse,
UpdateFileSystemRequest,
} from './types.gen'
export * as ValidationRules from './validation-rules.gen'
102 changes: 102 additions & 0 deletions packages/clients/src/api/file/v1alpha1/marshalling.gen.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// This file was automatically generated. DO NOT EDIT.
// If you have any remark or suggestion do not hesitate to open an issue.
import {
isJSONObject,
unmarshalArrayOfObject,
unmarshalDate,
} from '@scaleway/sdk-client'
import type { DefaultValues } from '@scaleway/sdk-client'
import type {
Attachment,
CreateFileSystemRequest,
FileSystem,
ListAttachmentsResponse,
ListFileSystemsResponse,
UpdateFileSystemRequest,
} from './types.gen'

export const unmarshalFileSystem = (data: unknown): FileSystem => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'FileSystem' failed as data isn't a dictionary.`,
)
}

return {
createdAt: unmarshalDate(data.created_at),
id: data.id,
name: data.name,
numberOfAttachments: data.number_of_attachments,
organizationId: data.organization_id,
projectId: data.project_id,
region: data.region,
size: data.size,
status: data.status,
tags: data.tags,
updatedAt: unmarshalDate(data.updated_at),
} as FileSystem
}

const unmarshalAttachment = (data: unknown): Attachment => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'Attachment' failed as data isn't a dictionary.`,
)
}

return {
filesystemId: data.filesystem_id,
id: data.id,
resourceId: data.resource_id,
resourceType: data.resource_type,
} as Attachment
}

export const unmarshalListAttachmentsResponse = (
data: unknown,
): ListAttachmentsResponse => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'ListAttachmentsResponse' failed as data isn't a dictionary.`,
)
}

return {
attachments: unmarshalArrayOfObject(data.attachments, unmarshalAttachment),
totalCount: data.total_count,
} as ListAttachmentsResponse
}

export const unmarshalListFileSystemsResponse = (
data: unknown,
): ListFileSystemsResponse => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'ListFileSystemsResponse' failed as data isn't a dictionary.`,
)
}

return {
filesystems: unmarshalArrayOfObject(data.filesystems, unmarshalFileSystem),
totalCount: data.total_count,
} as ListFileSystemsResponse
}

export const marshalCreateFileSystemRequest = (
request: CreateFileSystemRequest,
defaults: DefaultValues,
): Record<string, unknown> => ({
name: request.name,
project_id: request.projectId ?? defaults.defaultProjectId,
size: request.size,
tags: request.tags,
})

export const marshalUpdateFileSystemRequest = (
request: UpdateFileSystemRequest,
defaults: DefaultValues,
): Record<string, unknown> => ({
name: request.name,
size: request.size,
tags: request.tags,
})
Loading
Loading