@superblocksteam/sdk-api 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/files.d.ts +68 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +42 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/cosmosdb/client.test.d.ts +8 -0
- package/dist/integrations/cosmosdb/client.test.d.ts.map +1 -0
- package/dist/integrations/cosmosdb/client.test.js +141 -0
- package/dist/integrations/cosmosdb/client.test.js.map +1 -0
- package/package.json +1 -1
- package/src/files.ts +54 -0
- package/src/index.ts +4 -0
- package/src/integrations/cosmosdb/client.test.ts +209 -0
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical file schemas and types for SDK API inputs.
|
|
3
|
+
*
|
|
4
|
+
* These helpers model the file objects that Superblocks injects for FilePicker
|
|
5
|
+
* inputs. Use the minimal file-ref contract when you want to pass files by
|
|
6
|
+
* reference to storage integrations, and the readable file contract when your
|
|
7
|
+
* API needs to call `readContentsAsync()` or `readContents()`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
/**
|
|
11
|
+
* Minimal file reference contract.
|
|
12
|
+
*
|
|
13
|
+
* Good for by-reference uploads where the storage plugin resolves the file
|
|
14
|
+
* bytes using `$superblocksId`, such as S3 or GCS `uploadMultipleObjects()`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const fileRefSchema: z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
type: z.ZodOptional<z.ZodString>;
|
|
19
|
+
$superblocksId: z.ZodString;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
name: string;
|
|
22
|
+
$superblocksId: string;
|
|
23
|
+
type?: string | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
name: string;
|
|
26
|
+
$superblocksId: string;
|
|
27
|
+
type?: string | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Runtime-readable file contract.
|
|
31
|
+
*
|
|
32
|
+
* Good for APIs that need to inspect file contents in code via
|
|
33
|
+
* `readContentsAsync()` or `readContents()`.
|
|
34
|
+
*/
|
|
35
|
+
export declare const readableFileSchema: z.ZodObject<{
|
|
36
|
+
name: z.ZodString;
|
|
37
|
+
type: z.ZodOptional<z.ZodString>;
|
|
38
|
+
$superblocksId: z.ZodString;
|
|
39
|
+
} & {
|
|
40
|
+
size: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
extension: z.ZodOptional<z.ZodString>;
|
|
42
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
43
|
+
readContentsAsync: z.ZodType<(mode?: string) => Promise<string | Buffer>, z.ZodTypeDef, (mode?: string) => Promise<string | Buffer>>;
|
|
44
|
+
readContents: z.ZodType<(mode?: string) => string | Buffer, z.ZodTypeDef, (mode?: string) => string | Buffer>;
|
|
45
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
46
|
+
name: z.ZodString;
|
|
47
|
+
type: z.ZodOptional<z.ZodString>;
|
|
48
|
+
$superblocksId: z.ZodString;
|
|
49
|
+
} & {
|
|
50
|
+
size: z.ZodOptional<z.ZodNumber>;
|
|
51
|
+
extension: z.ZodOptional<z.ZodString>;
|
|
52
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
53
|
+
readContentsAsync: z.ZodType<(mode?: string) => Promise<string | Buffer>, z.ZodTypeDef, (mode?: string) => Promise<string | Buffer>>;
|
|
54
|
+
readContents: z.ZodType<(mode?: string) => string | Buffer, z.ZodTypeDef, (mode?: string) => string | Buffer>;
|
|
55
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
56
|
+
name: z.ZodString;
|
|
57
|
+
type: z.ZodOptional<z.ZodString>;
|
|
58
|
+
$superblocksId: z.ZodString;
|
|
59
|
+
} & {
|
|
60
|
+
size: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
extension: z.ZodOptional<z.ZodString>;
|
|
62
|
+
previewUrl: z.ZodOptional<z.ZodString>;
|
|
63
|
+
readContentsAsync: z.ZodType<(mode?: string) => Promise<string | Buffer>, z.ZodTypeDef, (mode?: string) => Promise<string | Buffer>>;
|
|
64
|
+
readContents: z.ZodType<(mode?: string) => string | Buffer, z.ZodTypeDef, (mode?: string) => string | Buffer>;
|
|
65
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
66
|
+
export type FileRef = z.infer<typeof fileRefSchema>;
|
|
67
|
+
export type ReadableFile = z.infer<typeof readableFileSchema>;
|
|
68
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;EAIxB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;yCA9BrB,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,wBAAnC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;oCAKK,MAAM,KAAK,MAAM,GAAG,MAAM,wBAA1B,MAAM,KAAK,MAAM,GAAG,MAAM;;;;;;;;;yCALlE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,wBAAnC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;oCAKK,MAAM,KAAK,MAAM,GAAG,MAAM,wBAA1B,MAAM,KAAK,MAAM,GAAG,MAAM;;;;;;;;;yCALlE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,wBAAnC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;oCAKK,MAAM,KAAK,MAAM,GAAG,MAAM,wBAA1B,MAAM,KAAK,MAAM,GAAG,MAAM;gCAiC5D,CAAC;AAEjB,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical file schemas and types for SDK API inputs.
|
|
3
|
+
*
|
|
4
|
+
* These helpers model the file objects that Superblocks injects for FilePicker
|
|
5
|
+
* inputs. Use the minimal file-ref contract when you want to pass files by
|
|
6
|
+
* reference to storage integrations, and the readable file contract when your
|
|
7
|
+
* API needs to call `readContentsAsync()` or `readContents()`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
const readableAsyncMethodSchema = z.custom((value) => typeof value === "function", {
|
|
11
|
+
message: "Expected readContentsAsync to be a function",
|
|
12
|
+
});
|
|
13
|
+
const readableSyncMethodSchema = z.custom((value) => typeof value === "function", {
|
|
14
|
+
message: "Expected readContents to be a function",
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Minimal file reference contract.
|
|
18
|
+
*
|
|
19
|
+
* Good for by-reference uploads where the storage plugin resolves the file
|
|
20
|
+
* bytes using `$superblocksId`, such as S3 or GCS `uploadMultipleObjects()`.
|
|
21
|
+
*/
|
|
22
|
+
export const fileRefSchema = z.object({
|
|
23
|
+
name: z.string(),
|
|
24
|
+
type: z.string().optional(),
|
|
25
|
+
$superblocksId: z.string(),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Runtime-readable file contract.
|
|
29
|
+
*
|
|
30
|
+
* Good for APIs that need to inspect file contents in code via
|
|
31
|
+
* `readContentsAsync()` or `readContents()`.
|
|
32
|
+
*/
|
|
33
|
+
export const readableFileSchema = fileRefSchema
|
|
34
|
+
.extend({
|
|
35
|
+
size: z.number().optional(),
|
|
36
|
+
extension: z.string().optional(),
|
|
37
|
+
previewUrl: z.string().optional(),
|
|
38
|
+
readContentsAsync: readableAsyncMethodSchema,
|
|
39
|
+
readContents: readableSyncMethodSchema,
|
|
40
|
+
})
|
|
41
|
+
.passthrough();
|
|
42
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAExC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,EAAE;IACxC,OAAO,EAAE,6CAA6C;CACvD,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,EACtC;IACE,OAAO,EAAE,wCAAwC;CAClD,CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;CAC3B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa;KAC5C,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,iBAAiB,EAAE,yBAAyB;IAC5C,YAAY,EAAE,wBAAwB;CACvC,CAAC;KACD,WAAW,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,6 +51,8 @@
|
|
|
51
51
|
* @packageDocumentation
|
|
52
52
|
*/
|
|
53
53
|
export { z } from "zod";
|
|
54
|
+
export { fileRefSchema, readableFileSchema } from "./files.js";
|
|
55
|
+
export type { FileRef, ReadableFile } from "./files.js";
|
|
54
56
|
export { api, __setEntryPoint, type CompiledApi, streamingApi, isStreamingApi, type StreamingApiConfig, type CompiledStreamingApi, } from "./api/index.js";
|
|
55
57
|
export type { ExtractApiInput, ExtractApiOutput } from "./api/definition.js";
|
|
56
58
|
export type { ApiConfig, ApiContext, ApiUser, Logger, BaseIntegrationClient, IntegrationRef, AnyIntegrationRef, IntegrationsMap, } from "./types.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -52,6 +52,8 @@
|
|
|
52
52
|
*/
|
|
53
53
|
// Re-export Zod for convenience
|
|
54
54
|
export { z } from "zod";
|
|
55
|
+
// Canonical file contracts
|
|
56
|
+
export { fileRefSchema, readableFileSchema } from "./files.js";
|
|
55
57
|
// API definition and registry
|
|
56
58
|
export { api, __setEntryPoint,
|
|
57
59
|
// Streaming API support
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,gCAAgC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8BAA8B;AAC9B,OAAO,EACL,GAAG,EACH,eAAe;AAEf,wBAAwB;AACxB,YAAY,EACZ,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAiBxB,oCAAoC;AACpC,OAAO,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,SAAS,EACT,MAAM,EACN,MAAM,EACN,MAAM,EACN,SAAS,EACT,eAAe,EACf,QAAQ,EACR,KAAK,EACL,SAAS,EACT,GAAG,EACH,QAAQ,EACR,MAAM,EACN,UAAU,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,SAAS,EACT,KAAK,EACL,MAAM,EACN,eAAe,EACf,WAAW,EACX,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,EAAE,EACF,GAAG,EACH,YAAY,EACZ,KAAK,EACL,OAAO,EACP,UAAU,EACV,KAAK,EACL,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,0BAA0B,EAC1B,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,IAAI,GAsEL,MAAM,yBAAyB,CAAC;AAwEjC,iCAAiC;AACjC,OAAO;AACL,sEAAsE;AACtE,OAAO;AACP,4DAA4D;AAC5D,UAAU,EACV,mBAAmB,EACnB,2BAA2B;AAC3B,oBAAoB;AACpB,gBAAgB,EAChB,yBAAyB;AACzB,cAAc;AACd,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,MAAM,oBAAoB,CAAC;AAqB5B,8CAA8C;AAC9C,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAYjC,wBAAwB;AACxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,gCAAgC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG/D,8BAA8B;AAC9B,OAAO,EACL,GAAG,EACH,eAAe;AAEf,wBAAwB;AACxB,YAAY,EACZ,cAAc,GAGf,MAAM,gBAAgB,CAAC;AAiBxB,oCAAoC;AACpC,OAAO,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,SAAS,EACT,MAAM,EACN,MAAM,EACN,MAAM,EACN,SAAS,EACT,eAAe,EACf,QAAQ,EACR,KAAK,EACL,SAAS,EACT,GAAG,EACH,QAAQ,EACR,MAAM,EACN,UAAU,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,SAAS,EACT,KAAK,EACL,MAAM,EACN,eAAe,EACf,WAAW,EACX,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,EAAE,EACF,GAAG,EACH,YAAY,EACZ,KAAK,EACL,OAAO,EACP,UAAU,EACV,KAAK,EACL,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,0BAA0B,EAC1B,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,IAAI,GAsEL,MAAM,yBAAyB,CAAC;AAwEjC,iCAAiC;AACjC,OAAO;AACL,sEAAsE;AACtE,OAAO;AACP,4DAA4D;AAC5D,UAAU,EACV,mBAAmB,EACnB,2BAA2B;AAC3B,oBAAoB;AACpB,gBAAgB,EAChB,yBAAyB;AACzB,cAAc;AACd,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,MAAM,oBAAoB,CAAC;AAqB5B,8CAA8C;AAC9C,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAYjC,wBAAwB;AACxB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../src/integrations/cosmosdb/client.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CosmosDB client.
|
|
3
|
+
*
|
|
4
|
+
* Validates the exact proto JSON structure passed to executeQuery for each
|
|
5
|
+
* CosmosDB operation: query, read, create, replace, upsert, deleteItem.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, vi } from "vitest";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { CosmosDBClientImpl } from "./client.js";
|
|
10
|
+
/** Minimal integration config for testing. */
|
|
11
|
+
const TEST_CONFIG = {
|
|
12
|
+
id: "cosmosdb-test-id",
|
|
13
|
+
name: "Test CosmosDB",
|
|
14
|
+
pluginId: "cosmosdb",
|
|
15
|
+
configuration: {},
|
|
16
|
+
};
|
|
17
|
+
function createClient(mockResult = []) {
|
|
18
|
+
const executeQuery = vi.fn().mockResolvedValue(mockResult);
|
|
19
|
+
const client = new CosmosDBClientImpl(TEST_CONFIG, executeQuery);
|
|
20
|
+
return { client, executeQuery };
|
|
21
|
+
}
|
|
22
|
+
describe("CosmosDBClientImpl", () => {
|
|
23
|
+
describe("query", () => {
|
|
24
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
25
|
+
const { client, executeQuery } = createClient([{ id: "doc-1" }]);
|
|
26
|
+
await client.query("my-container", "SELECT * FROM c", z.array(z.object({ id: z.string() }).passthrough()), { crossPartition: true, partitionKey: "pk-1" });
|
|
27
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
28
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
29
|
+
sql: {
|
|
30
|
+
singleton: {
|
|
31
|
+
containerId: "my-container",
|
|
32
|
+
query: "SELECT * FROM c",
|
|
33
|
+
crossPartition: true,
|
|
34
|
+
partitionKey: "pk-1",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}, undefined, undefined);
|
|
38
|
+
});
|
|
39
|
+
it("defaults crossPartition to false when not specified", async () => {
|
|
40
|
+
const { client, executeQuery } = createClient([]);
|
|
41
|
+
await client.query("container-1", "SELECT TOP 1 * FROM c", z.array(z.unknown()));
|
|
42
|
+
const request = executeQuery.mock.calls[0][0];
|
|
43
|
+
expect(request.sql.singleton.crossPartition).toBe(false);
|
|
44
|
+
expect(request.sql.singleton.partitionKey).toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe("read", () => {
|
|
48
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
49
|
+
const { client, executeQuery } = createClient({
|
|
50
|
+
id: "doc-1",
|
|
51
|
+
name: "test",
|
|
52
|
+
});
|
|
53
|
+
await client.read("my-container", "doc-1", z.object({ id: z.string(), name: z.string() }), "pk-value");
|
|
54
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
55
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
56
|
+
pointOperation: {
|
|
57
|
+
containerId: "my-container",
|
|
58
|
+
read: { id: "doc-1", partitionKey: "pk-value" },
|
|
59
|
+
},
|
|
60
|
+
}, undefined, undefined);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe("create", () => {
|
|
64
|
+
it("passes the correct proto JSON structure with object body", async () => {
|
|
65
|
+
const body = { id: "new-doc", value: 42 };
|
|
66
|
+
const { client, executeQuery } = createClient(body);
|
|
67
|
+
await client.create("my-container", body, "pk-value");
|
|
68
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
69
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
70
|
+
pointOperation: {
|
|
71
|
+
containerId: "my-container",
|
|
72
|
+
create: {
|
|
73
|
+
body: JSON.stringify(body),
|
|
74
|
+
partitionKey: "pk-value",
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
}, undefined, undefined);
|
|
78
|
+
});
|
|
79
|
+
it("passes string body as-is", async () => {
|
|
80
|
+
const bodyStr = '{"id":"doc-str"}';
|
|
81
|
+
const { client, executeQuery } = createClient({});
|
|
82
|
+
await client.create("my-container", bodyStr);
|
|
83
|
+
const request = executeQuery.mock.calls[0][0];
|
|
84
|
+
expect(request.pointOperation.create.body).toBe(bodyStr);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe("replace", () => {
|
|
88
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
89
|
+
const body = { id: "doc-1", value: "updated" };
|
|
90
|
+
const { client, executeQuery } = createClient(body);
|
|
91
|
+
await client.replace("my-container", body, "pk-value");
|
|
92
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
93
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
94
|
+
pointOperation: {
|
|
95
|
+
containerId: "my-container",
|
|
96
|
+
replace: {
|
|
97
|
+
body: JSON.stringify(body),
|
|
98
|
+
partitionKey: "pk-value",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
}, undefined, undefined);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe("upsert", () => {
|
|
105
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
106
|
+
const body = { id: "doc-1", value: "upserted" };
|
|
107
|
+
const { client, executeQuery } = createClient(body);
|
|
108
|
+
await client.upsert("my-container", body, "pk-value");
|
|
109
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
110
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
111
|
+
pointOperation: {
|
|
112
|
+
containerId: "my-container",
|
|
113
|
+
upsert: {
|
|
114
|
+
body: JSON.stringify(body),
|
|
115
|
+
partitionKey: "pk-value",
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
}, undefined, undefined);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("deleteItem", () => {
|
|
122
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
123
|
+
const { client, executeQuery } = createClient({});
|
|
124
|
+
await client.deleteItem("my-container", "doc-to-delete", "pk-value");
|
|
125
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
126
|
+
expect(executeQuery).toHaveBeenCalledWith({
|
|
127
|
+
pointOperation: {
|
|
128
|
+
containerId: "my-container",
|
|
129
|
+
delete: { id: "doc-to-delete", partitionKey: "pk-value" },
|
|
130
|
+
},
|
|
131
|
+
}, undefined, undefined);
|
|
132
|
+
});
|
|
133
|
+
it("passes undefined partitionKey when not specified", async () => {
|
|
134
|
+
const { client, executeQuery } = createClient({});
|
|
135
|
+
await client.deleteItem("my-container", "doc-1");
|
|
136
|
+
const request = executeQuery.mock.calls[0][0];
|
|
137
|
+
expect(request.pointOperation.delete.partitionKey).toBeUndefined();
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/integrations/cosmosdb/client.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/files.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical file schemas and types for SDK API inputs.
|
|
3
|
+
*
|
|
4
|
+
* These helpers model the file objects that Superblocks injects for FilePicker
|
|
5
|
+
* inputs. Use the minimal file-ref contract when you want to pass files by
|
|
6
|
+
* reference to storage integrations, and the readable file contract when your
|
|
7
|
+
* API needs to call `readContentsAsync()` or `readContents()`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
|
|
12
|
+
const readableAsyncMethodSchema = z.custom<
|
|
13
|
+
(mode?: string) => Promise<string | Buffer>
|
|
14
|
+
>((value) => typeof value === "function", {
|
|
15
|
+
message: "Expected readContentsAsync to be a function",
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const readableSyncMethodSchema = z.custom<(mode?: string) => string | Buffer>(
|
|
19
|
+
(value) => typeof value === "function",
|
|
20
|
+
{
|
|
21
|
+
message: "Expected readContents to be a function",
|
|
22
|
+
},
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Minimal file reference contract.
|
|
27
|
+
*
|
|
28
|
+
* Good for by-reference uploads where the storage plugin resolves the file
|
|
29
|
+
* bytes using `$superblocksId`, such as S3 or GCS `uploadMultipleObjects()`.
|
|
30
|
+
*/
|
|
31
|
+
export const fileRefSchema = z.object({
|
|
32
|
+
name: z.string(),
|
|
33
|
+
type: z.string().optional(),
|
|
34
|
+
$superblocksId: z.string(),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Runtime-readable file contract.
|
|
39
|
+
*
|
|
40
|
+
* Good for APIs that need to inspect file contents in code via
|
|
41
|
+
* `readContentsAsync()` or `readContents()`.
|
|
42
|
+
*/
|
|
43
|
+
export const readableFileSchema = fileRefSchema
|
|
44
|
+
.extend({
|
|
45
|
+
size: z.number().optional(),
|
|
46
|
+
extension: z.string().optional(),
|
|
47
|
+
previewUrl: z.string().optional(),
|
|
48
|
+
readContentsAsync: readableAsyncMethodSchema,
|
|
49
|
+
readContents: readableSyncMethodSchema,
|
|
50
|
+
})
|
|
51
|
+
.passthrough();
|
|
52
|
+
|
|
53
|
+
export type FileRef = z.infer<typeof fileRefSchema>;
|
|
54
|
+
export type ReadableFile = z.infer<typeof readableFileSchema>;
|
package/src/index.ts
CHANGED
|
@@ -54,6 +54,10 @@
|
|
|
54
54
|
// Re-export Zod for convenience
|
|
55
55
|
export { z } from "zod";
|
|
56
56
|
|
|
57
|
+
// Canonical file contracts
|
|
58
|
+
export { fileRefSchema, readableFileSchema } from "./files.js";
|
|
59
|
+
export type { FileRef, ReadableFile } from "./files.js";
|
|
60
|
+
|
|
57
61
|
// API definition and registry
|
|
58
62
|
export {
|
|
59
63
|
api,
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CosmosDB client.
|
|
3
|
+
*
|
|
4
|
+
* Validates the exact proto JSON structure passed to executeQuery for each
|
|
5
|
+
* CosmosDB operation: query, read, create, replace, upsert, deleteItem.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, it, expect, vi } from "vitest";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { CosmosDBClientImpl } from "./client.js";
|
|
11
|
+
import type { IntegrationConfig } from "../types.js";
|
|
12
|
+
|
|
13
|
+
/** Minimal integration config for testing. */
|
|
14
|
+
const TEST_CONFIG: IntegrationConfig = {
|
|
15
|
+
id: "cosmosdb-test-id",
|
|
16
|
+
name: "Test CosmosDB",
|
|
17
|
+
pluginId: "cosmosdb",
|
|
18
|
+
configuration: {},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function createClient(mockResult: unknown = []) {
|
|
22
|
+
const executeQuery = vi.fn().mockResolvedValue(mockResult);
|
|
23
|
+
const client = new CosmosDBClientImpl(TEST_CONFIG, executeQuery);
|
|
24
|
+
return { client, executeQuery };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
describe("CosmosDBClientImpl", () => {
|
|
28
|
+
describe("query", () => {
|
|
29
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
30
|
+
const { client, executeQuery } = createClient([{ id: "doc-1" }]);
|
|
31
|
+
|
|
32
|
+
await client.query(
|
|
33
|
+
"my-container",
|
|
34
|
+
"SELECT * FROM c",
|
|
35
|
+
z.array(z.object({ id: z.string() }).passthrough()),
|
|
36
|
+
{ crossPartition: true, partitionKey: "pk-1" },
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
40
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
41
|
+
{
|
|
42
|
+
sql: {
|
|
43
|
+
singleton: {
|
|
44
|
+
containerId: "my-container",
|
|
45
|
+
query: "SELECT * FROM c",
|
|
46
|
+
crossPartition: true,
|
|
47
|
+
partitionKey: "pk-1",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
undefined,
|
|
52
|
+
undefined,
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("defaults crossPartition to false when not specified", async () => {
|
|
57
|
+
const { client, executeQuery } = createClient([]);
|
|
58
|
+
|
|
59
|
+
await client.query(
|
|
60
|
+
"container-1",
|
|
61
|
+
"SELECT TOP 1 * FROM c",
|
|
62
|
+
z.array(z.unknown()),
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const request = executeQuery.mock.calls[0][0];
|
|
66
|
+
expect(request.sql.singleton.crossPartition).toBe(false);
|
|
67
|
+
expect(request.sql.singleton.partitionKey).toBeUndefined();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
describe("read", () => {
|
|
72
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
73
|
+
const { client, executeQuery } = createClient({
|
|
74
|
+
id: "doc-1",
|
|
75
|
+
name: "test",
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
await client.read(
|
|
79
|
+
"my-container",
|
|
80
|
+
"doc-1",
|
|
81
|
+
z.object({ id: z.string(), name: z.string() }),
|
|
82
|
+
"pk-value",
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
86
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
87
|
+
{
|
|
88
|
+
pointOperation: {
|
|
89
|
+
containerId: "my-container",
|
|
90
|
+
read: { id: "doc-1", partitionKey: "pk-value" },
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
undefined,
|
|
94
|
+
undefined,
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe("create", () => {
|
|
100
|
+
it("passes the correct proto JSON structure with object body", async () => {
|
|
101
|
+
const body = { id: "new-doc", value: 42 };
|
|
102
|
+
const { client, executeQuery } = createClient(body);
|
|
103
|
+
|
|
104
|
+
await client.create("my-container", body, "pk-value");
|
|
105
|
+
|
|
106
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
107
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
108
|
+
{
|
|
109
|
+
pointOperation: {
|
|
110
|
+
containerId: "my-container",
|
|
111
|
+
create: {
|
|
112
|
+
body: JSON.stringify(body),
|
|
113
|
+
partitionKey: "pk-value",
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
undefined,
|
|
118
|
+
undefined,
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("passes string body as-is", async () => {
|
|
123
|
+
const bodyStr = '{"id":"doc-str"}';
|
|
124
|
+
const { client, executeQuery } = createClient({});
|
|
125
|
+
|
|
126
|
+
await client.create("my-container", bodyStr);
|
|
127
|
+
|
|
128
|
+
const request = executeQuery.mock.calls[0][0];
|
|
129
|
+
expect(request.pointOperation.create.body).toBe(bodyStr);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe("replace", () => {
|
|
134
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
135
|
+
const body = { id: "doc-1", value: "updated" };
|
|
136
|
+
const { client, executeQuery } = createClient(body);
|
|
137
|
+
|
|
138
|
+
await client.replace("my-container", body, "pk-value");
|
|
139
|
+
|
|
140
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
141
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
142
|
+
{
|
|
143
|
+
pointOperation: {
|
|
144
|
+
containerId: "my-container",
|
|
145
|
+
replace: {
|
|
146
|
+
body: JSON.stringify(body),
|
|
147
|
+
partitionKey: "pk-value",
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
undefined,
|
|
152
|
+
undefined,
|
|
153
|
+
);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
describe("upsert", () => {
|
|
158
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
159
|
+
const body = { id: "doc-1", value: "upserted" };
|
|
160
|
+
const { client, executeQuery } = createClient(body);
|
|
161
|
+
|
|
162
|
+
await client.upsert("my-container", body, "pk-value");
|
|
163
|
+
|
|
164
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
165
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
166
|
+
{
|
|
167
|
+
pointOperation: {
|
|
168
|
+
containerId: "my-container",
|
|
169
|
+
upsert: {
|
|
170
|
+
body: JSON.stringify(body),
|
|
171
|
+
partitionKey: "pk-value",
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
undefined,
|
|
176
|
+
undefined,
|
|
177
|
+
);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
describe("deleteItem", () => {
|
|
182
|
+
it("passes the correct proto JSON structure to executeQuery", async () => {
|
|
183
|
+
const { client, executeQuery } = createClient({});
|
|
184
|
+
|
|
185
|
+
await client.deleteItem("my-container", "doc-to-delete", "pk-value");
|
|
186
|
+
|
|
187
|
+
expect(executeQuery).toHaveBeenCalledOnce();
|
|
188
|
+
expect(executeQuery).toHaveBeenCalledWith(
|
|
189
|
+
{
|
|
190
|
+
pointOperation: {
|
|
191
|
+
containerId: "my-container",
|
|
192
|
+
delete: { id: "doc-to-delete", partitionKey: "pk-value" },
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
undefined,
|
|
196
|
+
undefined,
|
|
197
|
+
);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("passes undefined partitionKey when not specified", async () => {
|
|
201
|
+
const { client, executeQuery } = createClient({});
|
|
202
|
+
|
|
203
|
+
await client.deleteItem("my-container", "doc-1");
|
|
204
|
+
|
|
205
|
+
const request = executeQuery.mock.calls[0][0];
|
|
206
|
+
expect(request.pointOperation.delete.partitionKey).toBeUndefined();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|