Skip to content
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: 3 additions & 3 deletions .fern/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
"base-exception-class-name": "CloudPDFException",
"base-api-exception-class-name": "CloudPDFApiException"
},
"originGitCommit": "81e6a2097d2997ef713a3013668e5eae0e748575",
"originGitCommit": "32635f40577b214f6a6b3189a2271425c3a574fd",
"originGitCommitIsDirty": false,
"invokedBy": "ci",
"requestedVersion": "3.0.0-next.5",
"requestedVersion": "3.0.0-next.6",
"ciProvider": "github",
"sdkVersion": "3.0.0-next.5"
"sdkVersion": "3.0.0-next.6"
}
8 changes: 4 additions & 4 deletions cloudpdf-generation.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"language": "csharp",
"canonicalVersion": "3.0.0-next.5",
"sdkVersion": "3.0.0-next.5",
"canonicalVersion": "3.0.0-next.6",
"sdkVersion": "3.0.0-next.6",
"source": {
"repository": "embedpdf/embed-pdf-viewer",
"openapi": "cloudpdf/contract/openapi.json",
"openapiSha256": "e86b3f1766a77c28cb782a6513b5a86998668cd4e688e5b5ac27342e58637cd7",
"gitCommit": "81e6a2097d2997ef713a3013668e5eae0e748575",
"openapiSha256": "b3e236a932673e27e05825352e1bc3675369d7505040bf7d7760e542aae8d38d",
"gitCommit": "32635f40577b214f6a6b3189a2271425c3a574fd",
"gitCommitIsDirty": false
},
"fern": {
Expand Down
64 changes: 64 additions & 0 deletions reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -1161,6 +1161,70 @@ await client.Documents.UploadProxyAsync(
</dl>


</dd>
</dl>
</details>

<details><summary><code>client.Documents.<a href="/src/CloudPDF/Documents/DocumentsClient.cs">ImportFromAsync</a>(DocumentsImportFromRequest { ... }) -> WithRawResponseTask&lt;DocumentsImportFrom200Response&gt;</code></summary>
<dl>
<dd>

#### 📝 Description

<dl>
<dd>

<dl>
<dd>

Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes — the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration); `revision` is provider-interpreted (S3 VersionId, GCS generation, Azure version id).
</dd>
</dl>
</dd>
</dl>

#### 🔌 Usage

<dl>
<dd>

<dl>
<dd>

```csharp
await client.Documents.ImportFromAsync(
new DocumentsImportFromRequest
{
TenantId = "tenantId",
Source = new DocumentsImportFromRequestSource(
new DocumentsImportFromRequestSource.Url(
new DocumentsImportFromRequestSourceUrl { Url = "url" }
)
),
}
);
```
</dd>
</dl>
</dd>
</dl>

#### ⚙️ Parameters

<dl>
<dd>

<dl>
<dd>

**request:** `DocumentsImportFromRequest`

</dd>
</dl>
</dd>
</dl>


</dd>
</dl>
</details>
Expand Down
149 changes: 149 additions & 0 deletions src/CloudPDF.Test/Unit/MockServer/Documents/ImportFromTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
using CloudPDF;
using CloudPDF.Test.Unit.MockServer;
using CloudPDF.Test.Utils;
using NUnit.Framework;

namespace CloudPDF.Test.Unit.MockServer.Documents;

[TestFixture]
[Parallelizable(ParallelScope.Self)]
public class ImportFromTest : BaseMockServerTest
{
[NUnit.Framework.Test]
public async Task MockServerTest_1()
{
const string requestJson = """
{
"source": {
"kind": "url",
"url": "url"
}
}
""";

const string mockResponse = """
{
"tag": "imported",
"document": {
"id": "id",
"tenantId": "tenantId",
"state": "pending",
"baseSha": "baseSha",
"storageSizeBytes": 1.1,
"metadata": {
"metadata": {
"key": "value"
}
},
"idempotencyKey": "idempotencyKey",
"failureReason": "failureReason",
"thumbnailState": "pending",
"thumbnailUrl": "thumbnailUrl",
"createdAt": 1.1,
"updatedAt": 1.1,
"createdBy": "createdBy"
}
}
""";

Server
.Given(
WireMock
.RequestBuilders.Request.Create()
.WithPath("/v1/tenants/tenantId/documents/import")
.WithHeader("Content-Type", "application/json")
.UsingPost()
.WithBodyAsJson(requestJson)
)
.RespondWith(
WireMock
.ResponseBuilders.Response.Create()
.WithStatusCode(200)
.WithBody(mockResponse)
);

var response = await Client.Documents.ImportFromAsync(
new DocumentsImportFromRequest
{
TenantId = "tenantId",
Source = new DocumentsImportFromRequestSource(
new DocumentsImportFromRequestSource.Url(
new DocumentsImportFromRequestSourceUrl { Url = "url" }
)
),
Expected = null,
Metadata = null,
IdempotencyKey = null,
DedupMode = null,
DocId = null,
Mode = null,
}
);
JsonAssert.AreEqual(response, mockResponse);
}

[NUnit.Framework.Test]
public async Task MockServerTest_2()
{
const string requestJson = """
{
"source": {
"kind": "url",
"url": "url"
}
}
""";

const string mockResponse = """
{
"tag": "imported",
"document": {
"id": "id",
"tenantId": "tenantId",
"state": "pending",
"baseSha": "baseSha",
"storageSizeBytes": 1.1,
"metadata": {
"key": "value"
},
"idempotencyKey": "idempotencyKey",
"failureReason": "failureReason",
"thumbnailState": "pending",
"thumbnailUrl": "thumbnailUrl",
"createdAt": 1.1,
"updatedAt": 1.1,
"createdBy": "createdBy"
}
}
""";

Server
.Given(
WireMock
.RequestBuilders.Request.Create()
.WithPath("/v1/tenants/tenantId/documents/import")
.WithHeader("Content-Type", "application/json")
.UsingPost()
.WithBodyAsJson(requestJson)
)
.RespondWith(
WireMock
.ResponseBuilders.Response.Create()
.WithStatusCode(200)
.WithBody(mockResponse)
);

var response = await Client.Documents.ImportFromAsync(
new DocumentsImportFromRequest
{
TenantId = "tenantId",
Source = new DocumentsImportFromRequestSource(
new DocumentsImportFromRequestSource.Url(
new DocumentsImportFromRequestSourceUrl { Url = "url" }
)
),
}
);
JsonAssert.AreEqual(response, mockResponse);
}
}
2 changes: 1 addition & 1 deletion src/CloudPDF/CloudPDF.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>12</LangVersion>
<Nullable>enable</Nullable>
<Version>3.0.0-next.5</Version>
<Version>3.0.0-next.6</Version>
<AssemblyVersion>3.0.0.0</AssemblyVersion>
<FileVersion>3.0.0.0</FileVersion>
<PackageReadmeFile Condition="Exists('..\..\README.md')">README.md</PackageReadmeFile>
Expand Down
2 changes: 1 addition & 1 deletion src/CloudPDF/Core/Public/Version.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ namespace CloudPDF;
[Serializable]
internal class Version
{
public const string Current = "3.0.0-next.5";
public const string Current = "3.0.0-next.6";
}
Loading
Loading