@zapier/zapier-sdk 0.34.1 → 0.36.0
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/CHANGELOG.md +12 -0
- package/README.md +341 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +10 -2
- package/dist/api/types.d.ts +2 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -0
- package/dist/formatters/index.d.ts +2 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +1 -0
- package/dist/formatters/tableRecord.d.ts +6 -0
- package/dist/formatters/tableRecord.d.ts.map +1 -0
- package/dist/formatters/tableRecord.js +23 -0
- package/dist/index.cjs +2054 -191
- package/dist/index.d.mts +639 -59
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.mjs +2030 -192
- package/dist/plugins/deleteClientCredentials/index.d.ts.map +1 -1
- package/dist/plugins/deleteClientCredentials/index.js +1 -1
- package/dist/plugins/listActions/index.d.ts.map +1 -1
- package/dist/plugins/listActions/index.js +2 -1
- package/dist/plugins/listApps/index.d.ts.map +1 -1
- package/dist/plugins/listApps/index.js +5 -2
- package/dist/plugins/listClientCredentials/index.d.ts.map +1 -1
- package/dist/plugins/listClientCredentials/index.js +6 -4
- package/dist/plugins/listConnections/index.d.ts.map +1 -1
- package/dist/plugins/listConnections/index.js +6 -4
- package/dist/plugins/listInputFieldChoices/index.d.ts.map +1 -1
- package/dist/plugins/listInputFieldChoices/index.js +2 -1
- package/dist/plugins/listInputFields/index.d.ts.map +1 -1
- package/dist/plugins/listInputFields/index.js +2 -1
- package/dist/plugins/registry/index.d.ts.map +1 -1
- package/dist/plugins/registry/index.js +4 -0
- package/dist/plugins/runAction/index.d.ts +2 -0
- package/dist/plugins/runAction/index.d.ts.map +1 -1
- package/dist/plugins/runAction/index.js +73 -14
- package/dist/plugins/tables/createTable/index.d.ts +18 -0
- package/dist/plugins/tables/createTable/index.d.ts.map +1 -0
- package/dist/plugins/tables/createTable/index.js +48 -0
- package/dist/plugins/tables/createTable/schemas.d.ts +37 -0
- package/dist/plugins/tables/createTable/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/createTable/schemas.js +16 -0
- package/dist/plugins/tables/createTableFields/index.d.ts +18 -0
- package/dist/plugins/tables/createTableFields/index.d.ts.map +1 -0
- package/dist/plugins/tables/createTableFields/index.js +49 -0
- package/dist/plugins/tables/createTableFields/schemas.d.ts +192 -0
- package/dist/plugins/tables/createTableFields/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/createTableFields/schemas.js +42 -0
- package/dist/plugins/tables/createTableRecords/index.d.ts +18 -0
- package/dist/plugins/tables/createTableRecords/index.d.ts.map +1 -0
- package/dist/plugins/tables/createTableRecords/index.js +67 -0
- package/dist/plugins/tables/createTableRecords/schemas.d.ts +57 -0
- package/dist/plugins/tables/createTableRecords/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/createTableRecords/schemas.js +35 -0
- package/dist/plugins/tables/deleteTable/index.d.ts +18 -0
- package/dist/plugins/tables/deleteTable/index.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTable/index.js +43 -0
- package/dist/plugins/tables/deleteTable/schemas.d.ts +15 -0
- package/dist/plugins/tables/deleteTable/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTable/schemas.js +9 -0
- package/dist/plugins/tables/deleteTableFields/index.d.ts +18 -0
- package/dist/plugins/tables/deleteTableFields/index.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTableFields/index.js +50 -0
- package/dist/plugins/tables/deleteTableFields/schemas.d.ts +16 -0
- package/dist/plugins/tables/deleteTableFields/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTableFields/schemas.js +13 -0
- package/dist/plugins/tables/deleteTableRecords/index.d.ts +18 -0
- package/dist/plugins/tables/deleteTableRecords/index.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTableRecords/index.js +44 -0
- package/dist/plugins/tables/deleteTableRecords/schemas.d.ts +16 -0
- package/dist/plugins/tables/deleteTableRecords/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/deleteTableRecords/schemas.js +14 -0
- package/dist/plugins/tables/getTable/index.d.ts +20 -0
- package/dist/plugins/tables/getTable/index.d.ts.map +1 -0
- package/dist/plugins/tables/getTable/index.js +48 -0
- package/dist/plugins/tables/getTable/schemas.d.ts +34 -0
- package/dist/plugins/tables/getTable/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/getTable/schemas.js +15 -0
- package/dist/plugins/tables/getTableRecord/index.d.ts +18 -0
- package/dist/plugins/tables/getTableRecord/index.d.ts.map +1 -0
- package/dist/plugins/tables/getTableRecord/index.js +60 -0
- package/dist/plugins/tables/getTableRecord/schemas.d.ts +51 -0
- package/dist/plugins/tables/getTableRecord/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/getTableRecord/schemas.js +44 -0
- package/dist/plugins/tables/listTableFields/index.d.ts +18 -0
- package/dist/plugins/tables/listTableFields/index.d.ts.map +1 -0
- package/dist/plugins/tables/listTableFields/index.js +58 -0
- package/dist/plugins/tables/listTableFields/schemas.d.ts +180 -0
- package/dist/plugins/tables/listTableFields/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/listTableFields/schemas.js +77 -0
- package/dist/plugins/tables/listTableRecords/index.d.ts +24 -0
- package/dist/plugins/tables/listTableRecords/index.d.ts.map +1 -0
- package/dist/plugins/tables/listTableRecords/index.js +97 -0
- package/dist/plugins/tables/listTableRecords/schemas.d.ts +120 -0
- package/dist/plugins/tables/listTableRecords/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/listTableRecords/schemas.js +74 -0
- package/dist/plugins/tables/listTables/index.d.ts +24 -0
- package/dist/plugins/tables/listTables/index.d.ts.map +1 -0
- package/dist/plugins/tables/listTables/index.js +85 -0
- package/dist/plugins/tables/listTables/schemas.d.ts +78 -0
- package/dist/plugins/tables/listTables/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/listTables/schemas.js +63 -0
- package/dist/plugins/tables/updateTableRecords/index.d.ts +18 -0
- package/dist/plugins/tables/updateTableRecords/index.d.ts.map +1 -0
- package/dist/plugins/tables/updateTableRecords/index.js +68 -0
- package/dist/plugins/tables/updateTableRecords/schemas.d.ts +59 -0
- package/dist/plugins/tables/updateTableRecords/schemas.d.ts.map +1 -0
- package/dist/plugins/tables/updateTableRecords/schemas.js +35 -0
- package/dist/plugins/tables/utils.d.ts +63 -0
- package/dist/plugins/tables/utils.d.ts.map +1 -0
- package/dist/plugins/tables/utils.js +262 -0
- package/dist/resolvers/index.d.ts +8 -0
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +8 -0
- package/dist/resolvers/tableFieldIds.d.ts +6 -0
- package/dist/resolvers/tableFieldIds.d.ts.map +1 -0
- package/dist/resolvers/tableFieldIds.js +19 -0
- package/dist/resolvers/tableFields.d.ts +3 -0
- package/dist/resolvers/tableFields.d.ts.map +1 -0
- package/dist/resolvers/tableFields.js +31 -0
- package/dist/resolvers/tableFilters.d.ts +5 -0
- package/dist/resolvers/tableFilters.d.ts.map +1 -0
- package/dist/resolvers/tableFilters.js +74 -0
- package/dist/resolvers/tableId.d.ts +4 -0
- package/dist/resolvers/tableId.d.ts.map +1 -0
- package/dist/resolvers/tableId.js +19 -0
- package/dist/resolvers/tableName.d.ts +3 -0
- package/dist/resolvers/tableName.d.ts.map +1 -0
- package/dist/resolvers/tableName.js +5 -0
- package/dist/resolvers/tableRecordId.d.ts +9 -0
- package/dist/resolvers/tableRecordId.d.ts.map +1 -0
- package/dist/resolvers/tableRecordId.js +48 -0
- package/dist/resolvers/tableRecords.d.ts +8 -0
- package/dist/resolvers/tableRecords.d.ts.map +1 -0
- package/dist/resolvers/tableRecords.js +77 -0
- package/dist/resolvers/tableSort.d.ts +5 -0
- package/dist/resolvers/tableSort.d.ts.map +1 -0
- package/dist/resolvers/tableSort.js +43 -0
- package/dist/sdk.d.ts +73 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +25 -0
- package/dist/types/sdk.d.ts +16 -1
- package/dist/types/sdk.d.ts.map +1 -1
- package/dist/utils/function-utils.d.ts +2 -2
- package/dist/utils/function-utils.d.ts.map +1 -1
- package/dist/utils/function-utils.js +2 -3
- package/dist/utils/pagination-utils.d.ts +24 -0
- package/dist/utils/pagination-utils.d.ts.map +1 -1
- package/dist/utils/pagination-utils.js +78 -0
- package/dist/utils/schema-utils.d.ts +33 -5
- package/dist/utils/schema-utils.d.ts.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createPaginatedFunction } from "../../../utils/function-utils";
|
|
2
|
+
import { ListTablesApiResponseSchema, ListTablesOptionsSchema, TableItemSchema, } from "./schemas";
|
|
3
|
+
import { createTelemetryCallback } from "../../../utils/telemetry-utils";
|
|
4
|
+
import { stripPageSuffix } from "../../../utils/string-utils";
|
|
5
|
+
import { ZapierAuthenticationError } from "../../../types/errors";
|
|
6
|
+
import { transformTableItem } from "../utils";
|
|
7
|
+
import { DEFAULT_PAGE_SIZE } from "../../../constants";
|
|
8
|
+
function extractNextCursor(links) {
|
|
9
|
+
if (!links?.next) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const url = new URL(links.next);
|
|
14
|
+
const offset = url.searchParams.get("offset");
|
|
15
|
+
return offset || undefined;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export const listTablesPlugin = ({ context }) => {
|
|
22
|
+
async function listTablesPage(options) {
|
|
23
|
+
const { api } = context;
|
|
24
|
+
const searchParams = {};
|
|
25
|
+
if (options.pageSize !== undefined) {
|
|
26
|
+
searchParams.limit = options.pageSize.toString();
|
|
27
|
+
}
|
|
28
|
+
if (options?.tableIds && options.tableIds.length > 0) {
|
|
29
|
+
searchParams.ids = options.tableIds.join(",");
|
|
30
|
+
}
|
|
31
|
+
if (options?.kind) {
|
|
32
|
+
searchParams.kind = options.kind;
|
|
33
|
+
}
|
|
34
|
+
if (options?.search) {
|
|
35
|
+
searchParams.q = options.search;
|
|
36
|
+
}
|
|
37
|
+
if (options?.owner) {
|
|
38
|
+
let ownerId = options.owner;
|
|
39
|
+
if (ownerId === "me") {
|
|
40
|
+
const profile = await api.get("/zapier/api/v4/profile/", {
|
|
41
|
+
authRequired: true,
|
|
42
|
+
});
|
|
43
|
+
ownerId = String(profile.id);
|
|
44
|
+
}
|
|
45
|
+
searchParams.owner_customuser_id = ownerId;
|
|
46
|
+
}
|
|
47
|
+
if (options.cursor) {
|
|
48
|
+
searchParams.offset = options.cursor;
|
|
49
|
+
}
|
|
50
|
+
const rawResponse = await api.get("/tables/api/v1/tables", {
|
|
51
|
+
searchParams,
|
|
52
|
+
customErrorHandler: ({ status }) => {
|
|
53
|
+
if (status === 401) {
|
|
54
|
+
return new ZapierAuthenticationError(`Authentication failed. Your token may not have permission to list tables or may be expired. (HTTP ${status})`, { statusCode: status });
|
|
55
|
+
}
|
|
56
|
+
if (status === 403) {
|
|
57
|
+
return new ZapierAuthenticationError(`Access forbidden. Your token may not have the required scopes to list tables. (HTTP ${status})`, { statusCode: status });
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
},
|
|
61
|
+
authRequired: true,
|
|
62
|
+
});
|
|
63
|
+
const response = ListTablesApiResponseSchema.parse(rawResponse);
|
|
64
|
+
return {
|
|
65
|
+
data: response.data.map(transformTableItem),
|
|
66
|
+
nextCursor: extractNextCursor(response.links),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const methodName = stripPageSuffix(listTablesPage.name);
|
|
70
|
+
const listTablesDefinition = createPaginatedFunction(listTablesPage, ListTablesOptionsSchema, createTelemetryCallback(context.eventEmission.emitMethodCalled, methodName), methodName, DEFAULT_PAGE_SIZE);
|
|
71
|
+
return {
|
|
72
|
+
listTables: listTablesDefinition,
|
|
73
|
+
context: {
|
|
74
|
+
meta: {
|
|
75
|
+
listTables: {
|
|
76
|
+
categories: ["table"],
|
|
77
|
+
type: "list",
|
|
78
|
+
itemType: "Table",
|
|
79
|
+
inputSchema: ListTablesOptionsSchema,
|
|
80
|
+
outputSchema: TableItemSchema,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { PaginatedSdkFunction } from "../../../types/functions";
|
|
3
|
+
import type { ZapierAuthenticationError, ZapierApiError, ZapierValidationError, ZapierUnknownError } from "../../../types/errors";
|
|
4
|
+
export declare const TableApiItemSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
8
|
+
created_at: z.ZodString;
|
|
9
|
+
edited_at: z.ZodString;
|
|
10
|
+
kind: z.ZodEnum<{
|
|
11
|
+
table: "table";
|
|
12
|
+
virtual_table: "virtual_table";
|
|
13
|
+
}>;
|
|
14
|
+
owner_account_id: z.ZodNumber;
|
|
15
|
+
owner_user_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
16
|
+
owner_zapier_customuser_id: z.ZodNumber;
|
|
17
|
+
parent_table_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type TableApiItem = z.infer<typeof TableApiItemSchema>;
|
|
20
|
+
export declare const ListTablesApiResponseSchema: z.ZodObject<{
|
|
21
|
+
data: z.ZodArray<z.ZodObject<{
|
|
22
|
+
id: z.ZodString;
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
25
|
+
created_at: z.ZodString;
|
|
26
|
+
edited_at: z.ZodString;
|
|
27
|
+
kind: z.ZodEnum<{
|
|
28
|
+
table: "table";
|
|
29
|
+
virtual_table: "virtual_table";
|
|
30
|
+
}>;
|
|
31
|
+
owner_account_id: z.ZodNumber;
|
|
32
|
+
owner_user_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
33
|
+
owner_zapier_customuser_id: z.ZodNumber;
|
|
34
|
+
parent_table_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
links: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
next: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type ListTablesApiResponse = z.infer<typeof ListTablesApiResponseSchema>;
|
|
41
|
+
export declare const TableItemSchema: z.ZodObject<{
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
name: z.ZodString;
|
|
44
|
+
description: z.ZodOptional<z.ZodString>;
|
|
45
|
+
created_at: z.ZodString;
|
|
46
|
+
edited_at: z.ZodString;
|
|
47
|
+
kind: z.ZodEnum<{
|
|
48
|
+
table: "table";
|
|
49
|
+
virtual_table: "virtual_table";
|
|
50
|
+
}>;
|
|
51
|
+
owner_account_id: z.ZodString;
|
|
52
|
+
profile_id: z.ZodString;
|
|
53
|
+
parent_table_id: z.ZodOptional<z.ZodString>;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
export type TableItem = z.infer<typeof TableItemSchema>;
|
|
56
|
+
export declare const ListTablesOptionsSchema: z.ZodObject<{
|
|
57
|
+
tableIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
58
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
59
|
+
table: "table";
|
|
60
|
+
virtual_table: "virtual_table";
|
|
61
|
+
both: "both";
|
|
62
|
+
}>>;
|
|
63
|
+
search: z.ZodOptional<z.ZodString>;
|
|
64
|
+
owner: z.ZodOptional<z.ZodString>;
|
|
65
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
maxItems: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
export type ListTablesOptions = z.infer<typeof ListTablesOptionsSchema>;
|
|
70
|
+
export interface ListTablesPage {
|
|
71
|
+
data: TableItem[];
|
|
72
|
+
nextCursor?: string;
|
|
73
|
+
}
|
|
74
|
+
export type ListTablesError = ZapierAuthenticationError | ZapierApiError | ZapierValidationError | ZapierUnknownError;
|
|
75
|
+
export interface ListTablesSdkFunction {
|
|
76
|
+
listTables: PaginatedSdkFunction<ListTablesOptions, TableItem>;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/plugins/tables/listTables/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;iBAW7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;iBAOtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAU1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;iBAgC0B,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,MAAM,eAAe,GACvB,yBAAyB,GACzB,cAAc,GACd,qBAAqB,GACrB,kBAAkB,CAAC;AAGvB,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const TableApiItemSchema = z.object({
|
|
3
|
+
id: z.string(),
|
|
4
|
+
name: z.string(),
|
|
5
|
+
description: z.string().nullable().optional(),
|
|
6
|
+
created_at: z.string(),
|
|
7
|
+
edited_at: z.string(),
|
|
8
|
+
kind: z.enum(["table", "virtual_table"]),
|
|
9
|
+
owner_account_id: z.number(),
|
|
10
|
+
owner_user_id: z.number().nullable().optional(),
|
|
11
|
+
owner_zapier_customuser_id: z.number(),
|
|
12
|
+
parent_table_id: z.string().nullable().optional(),
|
|
13
|
+
});
|
|
14
|
+
export const ListTablesApiResponseSchema = z.object({
|
|
15
|
+
data: z.array(TableApiItemSchema),
|
|
16
|
+
links: z
|
|
17
|
+
.object({
|
|
18
|
+
next: z.string().nullable().optional(),
|
|
19
|
+
})
|
|
20
|
+
.optional(),
|
|
21
|
+
});
|
|
22
|
+
export const TableItemSchema = z.object({
|
|
23
|
+
id: z.string(),
|
|
24
|
+
name: z.string(),
|
|
25
|
+
description: z.string().optional(),
|
|
26
|
+
created_at: z.string(),
|
|
27
|
+
edited_at: z.string(),
|
|
28
|
+
kind: z.enum(["table", "virtual_table"]),
|
|
29
|
+
owner_account_id: z.string(),
|
|
30
|
+
profile_id: z.string(),
|
|
31
|
+
parent_table_id: z.string().optional(),
|
|
32
|
+
});
|
|
33
|
+
export const ListTablesOptionsSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
tableIds: z
|
|
36
|
+
.array(z.string())
|
|
37
|
+
.optional()
|
|
38
|
+
.describe("Filter by specific table IDs"),
|
|
39
|
+
kind: z
|
|
40
|
+
.enum(["table", "virtual_table", "both"])
|
|
41
|
+
.optional()
|
|
42
|
+
.describe("Filter by table type"),
|
|
43
|
+
search: z
|
|
44
|
+
.string()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Search term to filter tables by name"),
|
|
47
|
+
owner: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe('Filter by table owner. Use "me" for the current user, or a numeric user ID.'),
|
|
51
|
+
pageSize: z
|
|
52
|
+
.number()
|
|
53
|
+
.min(1)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Number of tables per page"),
|
|
56
|
+
maxItems: z
|
|
57
|
+
.number()
|
|
58
|
+
.min(1)
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Maximum total items to return across all pages"),
|
|
61
|
+
cursor: z.string().optional().describe("Cursor to start from"),
|
|
62
|
+
})
|
|
63
|
+
.describe("List tables available to the authenticated user");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Plugin } from "../../../types/plugin";
|
|
2
|
+
import type { ApiClient } from "../../../api";
|
|
3
|
+
import { UpdateTableRecordsOptionsSchema, type UpdateTableRecordsOptions, type UpdateTableRecordsResult } from "./schemas";
|
|
4
|
+
import type { EventEmissionContext } from "../../eventEmission";
|
|
5
|
+
export interface UpdateTableRecordsPluginProvides {
|
|
6
|
+
updateTableRecords: (options: UpdateTableRecordsOptions) => Promise<UpdateTableRecordsResult>;
|
|
7
|
+
context: {
|
|
8
|
+
meta: {
|
|
9
|
+
updateTableRecords: {
|
|
10
|
+
inputSchema: typeof UpdateTableRecordsOptionsSchema;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare const updateTableRecordsPlugin: Plugin<{}, {
|
|
16
|
+
api: ApiClient;
|
|
17
|
+
} & EventEmissionContext, UpdateTableRecordsPluginProvides>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/tables/updateTableRecords/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,+BAA+B,EAG/B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC9B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAehE,MAAM,WAAW,gCAAgC;IAC/C,kBAAkB,EAAE,CAClB,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,kBAAkB,EAAE;gBAClB,WAAW,EAAE,OAAO,+BAA+B,CAAC;aACrD,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,EAAE,EACF;IAAE,GAAG,EAAE,SAAS,CAAA;CAAE,GAAG,oBAAoB,EACzC,gCAAgC,CAuFjC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { createFunction } from "../../../utils/function-utils";
|
|
2
|
+
import { UpdateTableRecordsOptionsSchema, UpdateTableRecordsApiResponseSchema, RecordItemSchema, } from "./schemas";
|
|
3
|
+
import { createTelemetryCallback } from "../../../utils/telemetry-utils";
|
|
4
|
+
import { ZapierAuthenticationError } from "../../../types/errors";
|
|
5
|
+
import { tableIdResolver, tableUpdateRecordsResolver, } from "../../../resolvers";
|
|
6
|
+
import { tableRecordFormatter } from "../../../formatters";
|
|
7
|
+
import { createFieldKeyTranslator, transformRecordItem, throwOnRecordErrors, throwOnResponseErrors, } from "../utils";
|
|
8
|
+
export const updateTableRecordsPlugin = ({ context }) => {
|
|
9
|
+
async function updateTableRecords(options) {
|
|
10
|
+
const { api } = context;
|
|
11
|
+
const translator = await createFieldKeyTranslator({
|
|
12
|
+
api,
|
|
13
|
+
tableId: options.tableId,
|
|
14
|
+
keyMode: options.keyMode,
|
|
15
|
+
});
|
|
16
|
+
const rawResponse = await api.patch(`/tables/api/v1/tables/${options.tableId}/records`, {
|
|
17
|
+
updated_records: options.records.map((record) => ({
|
|
18
|
+
id: record.id,
|
|
19
|
+
data: translator.translateInput(record.data),
|
|
20
|
+
})),
|
|
21
|
+
}, {
|
|
22
|
+
customErrorHandler: ({ status }) => {
|
|
23
|
+
if (status === 401) {
|
|
24
|
+
return new ZapierAuthenticationError(`Authentication failed. Your token may not have permission to update records or may be expired. (HTTP ${status})`, { statusCode: status });
|
|
25
|
+
}
|
|
26
|
+
if (status === 403) {
|
|
27
|
+
return new ZapierAuthenticationError(`Access forbidden. Your token may not have the required scopes to update records. (HTTP ${status})`, { statusCode: status });
|
|
28
|
+
}
|
|
29
|
+
if (status === 404) {
|
|
30
|
+
return new Error(`Table not found: ${options.tableId}`);
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
},
|
|
34
|
+
authRequired: true,
|
|
35
|
+
});
|
|
36
|
+
throwOnResponseErrors(rawResponse);
|
|
37
|
+
const response = UpdateTableRecordsApiResponseSchema.parse(rawResponse);
|
|
38
|
+
for (const changeset of response.data) {
|
|
39
|
+
throwOnRecordErrors(changeset.new);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
data: response.data.map((changeset) => ({
|
|
43
|
+
...transformRecordItem(changeset.new),
|
|
44
|
+
data: translator.translateOutput(changeset.new.data),
|
|
45
|
+
})),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const updateTableRecordsDefinition = createFunction(updateTableRecords, UpdateTableRecordsOptionsSchema, createTelemetryCallback(context.eventEmission.emitMethodCalled, updateTableRecords.name));
|
|
49
|
+
return {
|
|
50
|
+
updateTableRecords: updateTableRecordsDefinition,
|
|
51
|
+
context: {
|
|
52
|
+
meta: {
|
|
53
|
+
updateTableRecords: {
|
|
54
|
+
categories: ["table"],
|
|
55
|
+
type: "update",
|
|
56
|
+
itemType: "Record",
|
|
57
|
+
inputSchema: UpdateTableRecordsOptionsSchema,
|
|
58
|
+
outputSchema: RecordItemSchema,
|
|
59
|
+
resolvers: {
|
|
60
|
+
tableId: tableIdResolver,
|
|
61
|
+
records: tableUpdateRecordsResolver,
|
|
62
|
+
},
|
|
63
|
+
formatter: tableRecordFormatter,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { FunctionOptions } from "../../../types/functions";
|
|
3
|
+
import type { ZapierAuthenticationError, ZapierApiError, ZapierValidationError, ZapierUnknownError } from "../../../types/errors";
|
|
4
|
+
import { RecordItemSchema, type RecordItem } from "../getTableRecord/schemas";
|
|
5
|
+
export { RecordItemSchema };
|
|
6
|
+
export type { RecordItem };
|
|
7
|
+
export declare const UpdateTableRecordsApiResponseSchema: z.ZodObject<{
|
|
8
|
+
data: z.ZodArray<z.ZodObject<{
|
|
9
|
+
change_id: z.ZodString;
|
|
10
|
+
old: z.ZodNullable<z.ZodObject<{
|
|
11
|
+
id: z.ZodString;
|
|
12
|
+
data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
13
|
+
created_at: z.ZodString;
|
|
14
|
+
edited_at: z.ZodString;
|
|
15
|
+
schema_revision_id: z.ZodNumber;
|
|
16
|
+
errors: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
17
|
+
orig_data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
18
|
+
is_source_record: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
new: z.ZodObject<{
|
|
21
|
+
id: z.ZodString;
|
|
22
|
+
data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
23
|
+
created_at: z.ZodString;
|
|
24
|
+
edited_at: z.ZodString;
|
|
25
|
+
schema_revision_id: z.ZodNumber;
|
|
26
|
+
errors: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
27
|
+
orig_data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
28
|
+
is_source_record: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
changed_field_ids: z.ZodNullable<z.ZodArray<z.ZodNumber>>;
|
|
31
|
+
record_id: z.ZodString;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type UpdateTableRecordsApiResponse = z.infer<typeof UpdateTableRecordsApiResponseSchema>;
|
|
35
|
+
export declare const UpdateRecordSchema: z.ZodObject<{
|
|
36
|
+
id: z.ZodString;
|
|
37
|
+
data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type UpdateRecord = z.infer<typeof UpdateRecordSchema>;
|
|
40
|
+
export declare const UpdateTableRecordsOptionsSchema: z.ZodObject<{
|
|
41
|
+
tableId: z.ZodString;
|
|
42
|
+
records: z.ZodArray<z.ZodObject<{
|
|
43
|
+
id: z.ZodString;
|
|
44
|
+
data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
45
|
+
}, z.core.$strip>>;
|
|
46
|
+
keyMode: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
47
|
+
names: "names";
|
|
48
|
+
ids: "ids";
|
|
49
|
+
}>>>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export type UpdateTableRecordsOptions = z.infer<typeof UpdateTableRecordsOptionsSchema> & FunctionOptions;
|
|
52
|
+
export interface UpdateTableRecordsResult {
|
|
53
|
+
data: RecordItem[];
|
|
54
|
+
}
|
|
55
|
+
export type UpdateTableRecordsError = ZapierAuthenticationError | ZapierApiError | ZapierValidationError | ZapierUnknownError;
|
|
56
|
+
export interface UpdateTableRecordsSdkFunction {
|
|
57
|
+
updateTableRecords: (options: UpdateTableRecordsOptions) => Promise<UpdateTableRecordsResult>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/plugins/tables/updateTableRecords/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,gBAAgB,EAChB,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,YAAY,EAAE,UAAU,EAAE,CAAC;AAU3B,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;iBAE9C,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CACjD,OAAO,mCAAmC,CAC3C,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,+BAA+B;;;;;;;;;;iBAaQ,CAAC;AAErD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,+BAA+B,CACvC,GACC,eAAe,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAC/B,yBAAyB,GACzB,cAAc,GACd,qBAAqB,GACrB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,6BAA6B;IAC5C,kBAAkB,EAAE,CAClB,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RecordApiItemSchema, RecordItemSchema, } from "../getTableRecord/schemas";
|
|
3
|
+
import { KeyModeSchema } from "../utils";
|
|
4
|
+
// Re-export for consumers
|
|
5
|
+
export { RecordItemSchema };
|
|
6
|
+
const RecordChangesetSchema = z.object({
|
|
7
|
+
change_id: z.string(),
|
|
8
|
+
old: RecordApiItemSchema.nullable(),
|
|
9
|
+
new: RecordApiItemSchema,
|
|
10
|
+
changed_field_ids: z.array(z.number()).nullable(),
|
|
11
|
+
record_id: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const UpdateTableRecordsApiResponseSchema = z.object({
|
|
14
|
+
data: z.array(RecordChangesetSchema),
|
|
15
|
+
});
|
|
16
|
+
export const UpdateRecordSchema = z.object({
|
|
17
|
+
id: z.string().describe("The record ID to update"),
|
|
18
|
+
data: z
|
|
19
|
+
.record(z.string(), z.unknown())
|
|
20
|
+
.describe("The field values to update, keyed by field key"),
|
|
21
|
+
});
|
|
22
|
+
export const UpdateTableRecordsOptionsSchema = z
|
|
23
|
+
.object({
|
|
24
|
+
tableId: z
|
|
25
|
+
.string()
|
|
26
|
+
.regex(/^[A-Z0-9]{26}$/, "Table ID must be a valid ULID")
|
|
27
|
+
.describe("The unique identifier of the table"),
|
|
28
|
+
records: z
|
|
29
|
+
.array(UpdateRecordSchema)
|
|
30
|
+
.min(1)
|
|
31
|
+
.max(100)
|
|
32
|
+
.describe("Array of records to update (max 100)"),
|
|
33
|
+
keyMode: KeyModeSchema,
|
|
34
|
+
})
|
|
35
|
+
.describe("Update one or more records in a table");
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { ApiClient } from "../../api";
|
|
3
|
+
import type { TableApiItem, TableItem } from "./listTables/schemas";
|
|
4
|
+
import type { RecordApiItem, RecordItem } from "./getTableRecord/schemas";
|
|
5
|
+
import type { FieldApiItem, FieldItem } from "./listTableFields/schemas";
|
|
6
|
+
export declare function formatFieldValue(v: unknown): string;
|
|
7
|
+
/**
|
|
8
|
+
* Convert a field ID to its numeric form for the Tables API.
|
|
9
|
+
* Accepts "f6", "6", or 6 and returns 6.
|
|
10
|
+
*/
|
|
11
|
+
export declare function toNumericFieldId(id: string | number): number;
|
|
12
|
+
export declare function transformTableItem(apiItem: TableApiItem): TableItem;
|
|
13
|
+
export declare function transformFieldItem(apiItem: FieldApiItem): FieldItem;
|
|
14
|
+
export declare function transformRecordItem(apiItem: RecordApiItem): RecordItem;
|
|
15
|
+
/**
|
|
16
|
+
* Check a record API item for field-level validation errors and throw if any
|
|
17
|
+
* are present. The errors dict is keyed by field ID, and each value has
|
|
18
|
+
* `{s, v, e, h}` where `h` is the human-friendly message and `e` is the
|
|
19
|
+
* technical one.
|
|
20
|
+
*/
|
|
21
|
+
export declare function throwOnRecordErrors(record: RecordApiItem): void;
|
|
22
|
+
/**
|
|
23
|
+
* Check an API response for top-level validation errors (in `meta.errors`)
|
|
24
|
+
* and throw if any are present.
|
|
25
|
+
*/
|
|
26
|
+
export declare function throwOnResponseErrors(response: {
|
|
27
|
+
meta?: {
|
|
28
|
+
errors?: unknown[];
|
|
29
|
+
} | null;
|
|
30
|
+
}): void;
|
|
31
|
+
export declare const KeyModeSchema: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
32
|
+
names: "names";
|
|
33
|
+
ids: "ids";
|
|
34
|
+
}>>>;
|
|
35
|
+
export type KeyMode = z.infer<typeof KeyModeSchema>;
|
|
36
|
+
export declare function isFieldId(key: string): boolean;
|
|
37
|
+
export declare const NESTED_COMPONENTS: Record<string, Set<string>>;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve an array of field keys (names like "Email" or IDs like "f6", "6", 6)
|
|
40
|
+
* to numeric field IDs for the API. Only fetches field metadata if any
|
|
41
|
+
* non-ID keys are present.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveFieldKeys({ api, tableId, fieldKeys, }: {
|
|
44
|
+
api: ApiClient;
|
|
45
|
+
tableId: string;
|
|
46
|
+
fieldKeys: Array<string | number>;
|
|
47
|
+
}): Promise<number[]>;
|
|
48
|
+
export interface FieldKeyTranslator {
|
|
49
|
+
translateInput(data: Record<string, unknown>): Record<string, unknown>;
|
|
50
|
+
translateOutput(data: Record<string, unknown>): Record<string, unknown>;
|
|
51
|
+
translateFieldKey(key: string): string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the field mapping for a table and return a translator.
|
|
55
|
+
* Fetches field metadata from the API once (when keyMode is "names"),
|
|
56
|
+
* then all translate methods are synchronous.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createFieldKeyTranslator({ api, tableId, keyMode, }: {
|
|
59
|
+
api: ApiClient;
|
|
60
|
+
tableId: string;
|
|
61
|
+
keyMode: KeyMode;
|
|
62
|
+
}): Promise<FieldKeyTranslator>;
|
|
63
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/tables/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEzE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAUnD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAS5D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAYnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAUnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAOtE;AAkCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAgB/D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE;IAC9C,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CACtC,GAAG,IAAI,CASP;AAED,eAAO,MAAM,aAAa;;;IAMvB,CAAC;AAEJ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAKzD,CAAC;AA6CF;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,GAAG,EACH,OAAO,EACP,SAAS,GACV,EAAE;IACD,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBpB;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxE,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,GAAG,EACH,OAAO,EACP,OAAO,GACR,EAAE;IACD,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkF9B"}
|