@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.
@@ -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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,GAAG,EACH,eAAe,EACf,KAAK,WAAW,EAEhB,YAAY,EACZ,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,YAAY,EACV,SAAS,EACT,UAAU,EACV,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,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,EAEJ,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,OAAO,GACb,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,YAAY,EACV,cAAc,EACd,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,YAAY,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AACjG,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGhF,OAAO,EAEL,OAAO,EAEP,UAAU,EACV,mBAAmB,EACnB,2BAA2B,EAE3B,gBAAgB,EAChB,yBAAyB,EAEzB,QAAQ,EACR,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAEV,wBAAwB,EACxB,cAAc,EAEd,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EAEzB,oBAAoB,EACpB,6BAA6B,EAC7B,aAAa,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,aAAa,CAAC"}
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,8 @@
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
+ export {};
8
+ //# sourceMappingURL=client.test.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/sdk-api",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Superblocks SDK for TypeScript-based API definitions",
5
5
  "license": "Superblocks Community Software License",
6
6
  "files": [
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
+ });