@shushed/helpers 0.0.258 → 0.0.260
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/cjs/contracts/product.schema.json +7 -0
- package/dist/cjs/dist-dereferenced/messages/product.js +1 -1
- package/dist/cjs/dist-dereferenced/product.js +1 -1
- package/dist/cjs/src-public/airtable.js +152 -5
- package/dist/types/dist-dereferenced/messages/product.d.ts +3 -0
- package/dist/types/dist-dereferenced/product.d.ts +3 -0
- package/dist/types/dist-types/messages/product.d.ts +1 -0
- package/dist/types/dist-types/product.d.ts +1 -0
- package/dist/types/src-public/airtable.d.ts +29 -4
- package/package.json +1 -1
|
@@ -292,6 +292,13 @@
|
|
|
292
292
|
],
|
|
293
293
|
"description": "Shoes, Alpha, Numeric, Dual-Alpha"
|
|
294
294
|
},
|
|
295
|
+
"markdown_price": {
|
|
296
|
+
"type": [
|
|
297
|
+
"number",
|
|
298
|
+
"null"
|
|
299
|
+
],
|
|
300
|
+
"description": "Price after discount. Example: 29.99"
|
|
301
|
+
},
|
|
295
302
|
"sizeguide_type": {
|
|
296
303
|
"type": [
|
|
297
304
|
"string",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const schema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "ProductChange", "additionalProperties": false, "allOf": [{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Product", "additionalProperties": false, "type": "object", "properties": { "product_id": { "type": "string" }, "slug": { "type": ["string"] }, "style_id": { "type": ["string"] }, "colour_id": { "type": "string" }, "style_name": { "type": "string" }, "display_name": { "type": ["string"] }, "buffer_quantity": { "type": "integer", "minimum": 0 }, "display_type": { "type": "string", "enum": ["Out-of-stock", "Permanently-unavailable"] }, "available_to_sell_from": { "type": ["string", "null"], "format": "date" }, "created_at": { "type": "string", "format": "date-time" }, "last_modified_at": { "type": "string", "format": "date-time" }, "colour_family_name": { "type": "string" }, "colour_name": { "type": "string" }, "display_tags": { "type": "array", "items": { "type": "string" } }, "sizerange_code": { "type": "string" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": ["string"] }, "ean": { "type": ["string", "null"] } }, "required": ["code", "name"] } }, "vat_rate_uk": { "type": ["number", "null"], "minimum": 0 }, "supply_chain": { "type": "object", "properties": { "hs_code": { "type": ["string", "null"] }, "commodity_code_ref": { "type": "string" }, "country_of_origin": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Country", "type": "string", "enum": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CD", "CG", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "UM", "US", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"] }, "port_of_origin": { "type": "string" }, "packing_method": { "type": ["string", "null"], "enum": ["Standard", "Hanging"] }, "is_bought_in_product": { "type": "boolean" } }, "required": [] }, "merch": { "type": "object", "properties": { "strategy_type": { "type": "string" }, "category": { "type": "string" }, "subcategory": { "type": "string" }, "seasons": { "type": ["array"], "items": { "type": "string" } }, "drops": { "type": ["array"], "items": { "type": "string" } } }, "required": [] }, "principal_category": { "type": ["string", "null"] }, "category_assignments": { "type": "array", "items": { "type": "object", "properties": { "display_path": { "type": "array", "items": { "type": "string" } }, "path": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "id": { "type": "string" } } } }, "attributes": { "type": "object", "properties": { "price": { "type": ["number", "null"] }, "rrp": { "type": ["number", "null"] }, "stock_quantity_score": { "type": "number" }, "stock_availability": { "type": "number" }, "measurement_chart": { "type": ["string", "null"] }, "sizeguide_type": { "type": ["string", "null"] }, "brand": { "type": ["string", "null"] }, "shoes_type": { "type": ["string", "null"] }, "seo_url_name": { "type": "string", "pattern": "^[a-z0-9-]+$" }, "seo_title": { "type": ["string", "null"] }, "seo_description": { "type": ["string", "null"] }, "fit_description": { "type": ["string", "null"] }, "fabric_care": { "type": ["string", "null"] }, "weight": { "type": ["number", "null"] }, "main_fibre": { "type": ["string", "null"] }, "main_metal": { "type": ["string", "null"] }, "designer": { "type": ["string", "null"] }, "certificate_code": { "type": ["string", "null"] }, "pattern_name": { "type": ["string", "null"] }, "fit_type": { "type": ["string", "null"] }, "trousers_fit": { "type": ["string", "null"], "nullable": true }, "trousers_length": { "type": ["string", "null"] }, "dresses_skirts_length": { "type": ["string", "null"] }, "coats_jackets_type": { "type": ["string", "null"] }, "dresses_skirts_type": { "type": ["string", "null"] }, "bag_type": { "type": ["string", "null"] }, "product_category": { "type": ["string", "null"] }, "product_type": { "type": ["string", "null"] }, "metal": { "type": ["string", "null"] }, "care_instructions": { "type": "array", "items": { "type": "string" } } }, "required": [] }, "markets": { "type": "array", "items": { "type": "string" } }, "markets_overrides": { "type": "object", "additionalProperties": false, "patternProperties": { ".*": { "type": "object", "additionalProperties": false, "properties": { "locale": { "type": "string", "pattern": "^[a-z]{2}-[A-Z]{2}$" }, "market": { "type": "string" }, "slug": { "$ref": "#/allOf/0/properties/slug" }, "style_name": { "$ref": "#/allOf/0/properties/style_name" }, "display_name": { "$ref": "#/allOf/0/properties/display_name" }, "display_type": { "$ref": "#/allOf/0/properties/display_type" }, "available_to_sell_from": { "$ref": "#/allOf/0/properties/available_to_sell_from" }, "colour_family_name": { "$ref": "#/allOf/0/properties/colour_family_name" }, "colour_name": { "$ref": "#/allOf/0/properties/colour_name" }, "display_tags": { "$ref": "#/allOf/0/properties/display_tags" }, "last_online_at": { "type": ["string", "null"], "format": "date-time" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "$ref": "#/allOf/0/properties/variants/items/properties/code" }, "name": { "$ref": "#/allOf/0/properties/variants/items/properties/name" } }, "required": ["code", "name"] } }, "attributes": { "$ref": "#/allOf/0/properties/attributes" } }, "required": ["locale", "market"] } } } }, "required": ["product_id", "style_id", "colour_id", "display_name"] }, { "type": "object", "additionalProperties": false, "required": ["product_id", "style_id", "product_name", "variants", "images", "attributes", "is_available_to_order", "created_at", "last_modified_at", "colour_family_name", "colour_label", "vat_amount"] }], "$id": "https://shushed.example.com/messages/product-change.schema.json" };
|
|
3
|
+
const schema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "ProductChange", "additionalProperties": false, "allOf": [{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Product", "additionalProperties": false, "type": "object", "properties": { "product_id": { "type": "string" }, "slug": { "type": ["string"] }, "style_id": { "type": ["string"] }, "colour_id": { "type": "string" }, "style_name": { "type": "string" }, "display_name": { "type": ["string"] }, "buffer_quantity": { "type": "integer", "minimum": 0 }, "display_type": { "type": "string", "enum": ["Out-of-stock", "Permanently-unavailable"] }, "available_to_sell_from": { "type": ["string", "null"], "format": "date" }, "created_at": { "type": "string", "format": "date-time" }, "last_modified_at": { "type": "string", "format": "date-time" }, "colour_family_name": { "type": "string" }, "colour_name": { "type": "string" }, "display_tags": { "type": "array", "items": { "type": "string" } }, "sizerange_code": { "type": "string" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": ["string"] }, "ean": { "type": ["string", "null"] } }, "required": ["code", "name"] } }, "vat_rate_uk": { "type": ["number", "null"], "minimum": 0 }, "supply_chain": { "type": "object", "properties": { "hs_code": { "type": ["string", "null"] }, "commodity_code_ref": { "type": "string" }, "country_of_origin": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Country", "type": "string", "enum": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CD", "CG", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "UM", "US", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"] }, "port_of_origin": { "type": "string" }, "packing_method": { "type": ["string", "null"], "enum": ["Standard", "Hanging"] }, "is_bought_in_product": { "type": "boolean" } }, "required": [] }, "merch": { "type": "object", "properties": { "strategy_type": { "type": "string" }, "category": { "type": "string" }, "subcategory": { "type": "string" }, "seasons": { "type": ["array"], "items": { "type": "string" } }, "drops": { "type": ["array"], "items": { "type": "string" } } }, "required": [] }, "principal_category": { "type": ["string", "null"] }, "category_assignments": { "type": "array", "items": { "type": "object", "properties": { "display_path": { "type": "array", "items": { "type": "string" } }, "path": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "id": { "type": "string" } } } }, "attributes": { "type": "object", "properties": { "price": { "type": ["number", "null"] }, "rrp": { "type": ["number", "null"] }, "stock_quantity_score": { "type": "number" }, "stock_availability": { "type": "number" }, "measurement_chart": { "type": ["string", "null"] }, "markdown_price": { "type": ["number", "null"] }, "sizeguide_type": { "type": ["string", "null"] }, "brand": { "type": ["string", "null"] }, "shoes_type": { "type": ["string", "null"] }, "seo_url_name": { "type": "string", "pattern": "^[a-z0-9-]+$" }, "seo_title": { "type": ["string", "null"] }, "seo_description": { "type": ["string", "null"] }, "fit_description": { "type": ["string", "null"] }, "fabric_care": { "type": ["string", "null"] }, "weight": { "type": ["number", "null"] }, "main_fibre": { "type": ["string", "null"] }, "main_metal": { "type": ["string", "null"] }, "designer": { "type": ["string", "null"] }, "certificate_code": { "type": ["string", "null"] }, "pattern_name": { "type": ["string", "null"] }, "fit_type": { "type": ["string", "null"] }, "trousers_fit": { "type": ["string", "null"], "nullable": true }, "trousers_length": { "type": ["string", "null"] }, "dresses_skirts_length": { "type": ["string", "null"] }, "coats_jackets_type": { "type": ["string", "null"] }, "dresses_skirts_type": { "type": ["string", "null"] }, "bag_type": { "type": ["string", "null"] }, "product_category": { "type": ["string", "null"] }, "product_type": { "type": ["string", "null"] }, "metal": { "type": ["string", "null"] }, "care_instructions": { "type": "array", "items": { "type": "string" } } }, "required": [] }, "markets": { "type": "array", "items": { "type": "string" } }, "markets_overrides": { "type": "object", "additionalProperties": false, "patternProperties": { ".*": { "type": "object", "additionalProperties": false, "properties": { "locale": { "type": "string", "pattern": "^[a-z]{2}-[A-Z]{2}$" }, "market": { "type": "string" }, "slug": { "$ref": "#/allOf/0/properties/slug" }, "style_name": { "$ref": "#/allOf/0/properties/style_name" }, "display_name": { "$ref": "#/allOf/0/properties/display_name" }, "display_type": { "$ref": "#/allOf/0/properties/display_type" }, "available_to_sell_from": { "$ref": "#/allOf/0/properties/available_to_sell_from" }, "colour_family_name": { "$ref": "#/allOf/0/properties/colour_family_name" }, "colour_name": { "$ref": "#/allOf/0/properties/colour_name" }, "display_tags": { "$ref": "#/allOf/0/properties/display_tags" }, "last_online_at": { "type": ["string", "null"], "format": "date-time" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "$ref": "#/allOf/0/properties/variants/items/properties/code" }, "name": { "$ref": "#/allOf/0/properties/variants/items/properties/name" } }, "required": ["code", "name"] } }, "attributes": { "$ref": "#/allOf/0/properties/attributes" } }, "required": ["locale", "market"] } } } }, "required": ["product_id", "style_id", "colour_id", "display_name"] }, { "type": "object", "additionalProperties": false, "required": ["product_id", "style_id", "product_name", "variants", "images", "attributes", "is_available_to_order", "created_at", "last_modified_at", "colour_family_name", "colour_label", "vat_amount"] }], "$id": "https://shushed.example.com/messages/product-change.schema.json" };
|
|
4
4
|
exports.default = schema;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const schema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Product", "additionalProperties": false, "type": "object", "properties": { "product_id": { "type": "string" }, "slug": { "type": ["string"] }, "style_id": { "type": ["string"] }, "colour_id": { "type": "string" }, "style_name": { "type": "string" }, "display_name": { "type": ["string"] }, "buffer_quantity": { "type": "integer", "minimum": 0 }, "display_type": { "type": "string", "enum": ["Out-of-stock", "Permanently-unavailable"] }, "available_to_sell_from": { "type": ["string", "null"], "format": "date" }, "created_at": { "type": "string", "format": "date-time" }, "last_modified_at": { "type": "string", "format": "date-time" }, "colour_family_name": { "type": "string" }, "colour_name": { "type": "string" }, "display_tags": { "type": "array", "items": { "type": "string" } }, "sizerange_code": { "type": "string" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": ["string"] }, "ean": { "type": ["string", "null"] } }, "required": ["code", "name"] } }, "vat_rate_uk": { "type": ["number", "null"], "minimum": 0 }, "supply_chain": { "type": "object", "properties": { "hs_code": { "type": ["string", "null"] }, "commodity_code_ref": { "type": "string" }, "country_of_origin": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Country", "type": "string", "enum": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CD", "CG", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "UM", "US", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"] }, "port_of_origin": { "type": "string" }, "packing_method": { "type": ["string", "null"], "enum": ["Standard", "Hanging"] }, "is_bought_in_product": { "type": "boolean" } }, "required": [] }, "merch": { "type": "object", "properties": { "strategy_type": { "type": "string" }, "category": { "type": "string" }, "subcategory": { "type": "string" }, "seasons": { "type": ["array"], "items": { "type": "string" } }, "drops": { "type": ["array"], "items": { "type": "string" } } }, "required": [] }, "principal_category": { "type": ["string", "null"] }, "category_assignments": { "type": "array", "items": { "type": "object", "properties": { "display_path": { "type": "array", "items": { "type": "string" } }, "path": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "id": { "type": "string" } } } }, "attributes": { "type": "object", "properties": { "price": { "type": ["number", "null"] }, "rrp": { "type": ["number", "null"] }, "stock_quantity_score": { "type": "number" }, "stock_availability": { "type": "number" }, "measurement_chart": { "type": ["string", "null"] }, "sizeguide_type": { "type": ["string", "null"] }, "brand": { "type": ["string", "null"] }, "shoes_type": { "type": ["string", "null"] }, "seo_url_name": { "type": "string", "pattern": "^[a-z0-9-]+$" }, "seo_title": { "type": ["string", "null"] }, "seo_description": { "type": ["string", "null"] }, "fit_description": { "type": ["string", "null"] }, "fabric_care": { "type": ["string", "null"] }, "weight": { "type": ["number", "null"] }, "main_fibre": { "type": ["string", "null"] }, "main_metal": { "type": ["string", "null"] }, "designer": { "type": ["string", "null"] }, "certificate_code": { "type": ["string", "null"] }, "pattern_name": { "type": ["string", "null"] }, "fit_type": { "type": ["string", "null"] }, "trousers_fit": { "type": ["string", "null"], "nullable": true }, "trousers_length": { "type": ["string", "null"] }, "dresses_skirts_length": { "type": ["string", "null"] }, "coats_jackets_type": { "type": ["string", "null"] }, "dresses_skirts_type": { "type": ["string", "null"] }, "bag_type": { "type": ["string", "null"] }, "product_category": { "type": ["string", "null"] }, "product_type": { "type": ["string", "null"] }, "metal": { "type": ["string", "null"] }, "care_instructions": { "type": "array", "items": { "type": "string" } } }, "required": [] }, "markets": { "type": "array", "items": { "type": "string" } }, "markets_overrides": { "type": "object", "additionalProperties": false, "patternProperties": { ".*": { "type": "object", "additionalProperties": false, "properties": { "locale": { "type": "string", "pattern": "^[a-z]{2}-[A-Z]{2}$" }, "market": { "type": "string" }, "slug": { "$ref": "#/properties/slug" }, "style_name": { "$ref": "#/properties/style_name" }, "display_name": { "$ref": "#/properties/display_name" }, "display_type": { "$ref": "#/properties/display_type" }, "available_to_sell_from": { "$ref": "#/properties/available_to_sell_from" }, "colour_family_name": { "$ref": "#/properties/colour_family_name" }, "colour_name": { "$ref": "#/properties/colour_name" }, "display_tags": { "$ref": "#/properties/display_tags" }, "last_online_at": { "type": ["string", "null"], "format": "date-time" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "$ref": "#/properties/variants/items/properties/code" }, "name": { "$ref": "#/properties/variants/items/properties/name" } }, "required": ["code", "name"] } }, "attributes": { "$ref": "#/properties/attributes" } }, "required": ["locale", "market"] } } } }, "required": ["product_id", "style_id", "colour_id", "display_name"], "$id": "https://shushed.example.com/product.schema.json" };
|
|
3
|
+
const schema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Product", "additionalProperties": false, "type": "object", "properties": { "product_id": { "type": "string" }, "slug": { "type": ["string"] }, "style_id": { "type": ["string"] }, "colour_id": { "type": "string" }, "style_name": { "type": "string" }, "display_name": { "type": ["string"] }, "buffer_quantity": { "type": "integer", "minimum": 0 }, "display_type": { "type": "string", "enum": ["Out-of-stock", "Permanently-unavailable"] }, "available_to_sell_from": { "type": ["string", "null"], "format": "date" }, "created_at": { "type": "string", "format": "date-time" }, "last_modified_at": { "type": "string", "format": "date-time" }, "colour_family_name": { "type": "string" }, "colour_name": { "type": "string" }, "display_tags": { "type": "array", "items": { "type": "string" } }, "sizerange_code": { "type": "string" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "name": { "type": ["string"] }, "ean": { "type": ["string", "null"] } }, "required": ["code", "name"] } }, "vat_rate_uk": { "type": ["number", "null"], "minimum": 0 }, "supply_chain": { "type": "object", "properties": { "hs_code": { "type": ["string", "null"] }, "commodity_code_ref": { "type": "string" }, "country_of_origin": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Country", "type": "string", "enum": ["AF", "AX", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD", "BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI", "CV", "KH", "CM", "CA", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CD", "CG", "CK", "CR", "CI", "HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK", "FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU", "GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM", "IL", "IT", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LV", "LB", "LS", "LR", "LY", "LI", "LT", "LU", "MO", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU", "YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "NC", "NZ", "NI", "NE", "NG", "NU", "NF", "MK", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL", "PT", "PR", "QA", "RE", "RO", "RU", "RW", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA", "SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV", "UG", "UA", "AE", "GB", "UM", "US", "UY", "UZ", "VU", "VE", "VN", "VG", "VI", "WF", "EH", "YE", "ZM", "ZW"] }, "port_of_origin": { "type": "string" }, "packing_method": { "type": ["string", "null"], "enum": ["Standard", "Hanging"] }, "is_bought_in_product": { "type": "boolean" } }, "required": [] }, "merch": { "type": "object", "properties": { "strategy_type": { "type": "string" }, "category": { "type": "string" }, "subcategory": { "type": "string" }, "seasons": { "type": ["array"], "items": { "type": "string" } }, "drops": { "type": ["array"], "items": { "type": "string" } } }, "required": [] }, "principal_category": { "type": ["string", "null"] }, "category_assignments": { "type": "array", "items": { "type": "object", "properties": { "display_path": { "type": "array", "items": { "type": "string" } }, "path": { "type": "array", "items": { "type": "string" } }, "name": { "type": "string" }, "id": { "type": "string" } } } }, "attributes": { "type": "object", "properties": { "price": { "type": ["number", "null"] }, "rrp": { "type": ["number", "null"] }, "stock_quantity_score": { "type": "number" }, "stock_availability": { "type": "number" }, "measurement_chart": { "type": ["string", "null"] }, "markdown_price": { "type": ["number", "null"] }, "sizeguide_type": { "type": ["string", "null"] }, "brand": { "type": ["string", "null"] }, "shoes_type": { "type": ["string", "null"] }, "seo_url_name": { "type": "string", "pattern": "^[a-z0-9-]+$" }, "seo_title": { "type": ["string", "null"] }, "seo_description": { "type": ["string", "null"] }, "fit_description": { "type": ["string", "null"] }, "fabric_care": { "type": ["string", "null"] }, "weight": { "type": ["number", "null"] }, "main_fibre": { "type": ["string", "null"] }, "main_metal": { "type": ["string", "null"] }, "designer": { "type": ["string", "null"] }, "certificate_code": { "type": ["string", "null"] }, "pattern_name": { "type": ["string", "null"] }, "fit_type": { "type": ["string", "null"] }, "trousers_fit": { "type": ["string", "null"], "nullable": true }, "trousers_length": { "type": ["string", "null"] }, "dresses_skirts_length": { "type": ["string", "null"] }, "coats_jackets_type": { "type": ["string", "null"] }, "dresses_skirts_type": { "type": ["string", "null"] }, "bag_type": { "type": ["string", "null"] }, "product_category": { "type": ["string", "null"] }, "product_type": { "type": ["string", "null"] }, "metal": { "type": ["string", "null"] }, "care_instructions": { "type": "array", "items": { "type": "string" } } }, "required": [] }, "markets": { "type": "array", "items": { "type": "string" } }, "markets_overrides": { "type": "object", "additionalProperties": false, "patternProperties": { ".*": { "type": "object", "additionalProperties": false, "properties": { "locale": { "type": "string", "pattern": "^[a-z]{2}-[A-Z]{2}$" }, "market": { "type": "string" }, "slug": { "$ref": "#/properties/slug" }, "style_name": { "$ref": "#/properties/style_name" }, "display_name": { "$ref": "#/properties/display_name" }, "display_type": { "$ref": "#/properties/display_type" }, "available_to_sell_from": { "$ref": "#/properties/available_to_sell_from" }, "colour_family_name": { "$ref": "#/properties/colour_family_name" }, "colour_name": { "$ref": "#/properties/colour_name" }, "display_tags": { "$ref": "#/properties/display_tags" }, "last_online_at": { "type": ["string", "null"], "format": "date-time" }, "variants": { "type": "array", "items": { "type": "object", "properties": { "code": { "$ref": "#/properties/variants/items/properties/code" }, "name": { "$ref": "#/properties/variants/items/properties/name" } }, "required": ["code", "name"] } }, "attributes": { "$ref": "#/properties/attributes" } }, "required": ["locale", "market"] } } } }, "required": ["product_id", "style_id", "colour_id", "display_name"], "$id": "https://shushed.example.com/product.schema.json" };
|
|
4
4
|
exports.default = schema;
|
|
@@ -39,6 +39,23 @@ class AirtableHelper extends runtime_1.default {
|
|
|
39
39
|
});
|
|
40
40
|
return nextObj;
|
|
41
41
|
}
|
|
42
|
+
static translateFieldsAll(dictionary, y) {
|
|
43
|
+
const mappedFieldIds = new Set(Object.values(dictionary));
|
|
44
|
+
const nextFields = {};
|
|
45
|
+
for (const k in dictionary) {
|
|
46
|
+
const v = dictionary[k];
|
|
47
|
+
nextFields[k] = y.fields[v];
|
|
48
|
+
}
|
|
49
|
+
for (const fieldId in y.fields) {
|
|
50
|
+
if (!mappedFieldIds.has(fieldId)) {
|
|
51
|
+
nextFields[fieldId] = y.fields[fieldId];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const nextObj = Object.assign({}, y, {
|
|
55
|
+
fields: nextFields
|
|
56
|
+
});
|
|
57
|
+
return nextObj;
|
|
58
|
+
}
|
|
42
59
|
async createIfNotExist(payload) {
|
|
43
60
|
const existingRecord = await this.getExistingRecord(payload);
|
|
44
61
|
if (!existingRecord) {
|
|
@@ -257,18 +274,21 @@ class AirtableHelper extends runtime_1.default {
|
|
|
257
274
|
throw new Error(`Failed to obtain records with the id: ${id} from the ${this.tableId} table and the baseId ${this.baseId}. Status Code: ${responseRecords?.status || 'unknown'}. Error: ${err.message}`);
|
|
258
275
|
}
|
|
259
276
|
}
|
|
260
|
-
async getExistingRecords(formula
|
|
277
|
+
async getExistingRecords(formula, options) {
|
|
261
278
|
const allRecords = [];
|
|
262
279
|
let offset = undefined;
|
|
263
280
|
const tableUrl = `https://api.airtable.com/v0/${this.baseId}/${this.tableId}/listRecords`;
|
|
281
|
+
const fetchAllFields = options?.fetchAllFields === true;
|
|
264
282
|
do {
|
|
265
283
|
let responseRecords = null;
|
|
266
284
|
const params = {
|
|
267
|
-
filterByFormula: formula,
|
|
285
|
+
filterByFormula: formula || '',
|
|
268
286
|
pageSize: 100,
|
|
269
287
|
returnFieldsByFieldId: true,
|
|
270
|
-
fields: Object.values(this.dictionary).filter((x, idx, arr) => arr.indexOf(x) === idx),
|
|
271
288
|
};
|
|
289
|
+
if (!fetchAllFields) {
|
|
290
|
+
params.fields = Object.values(this.dictionary).filter((x, idx, arr) => arr.indexOf(x) === idx);
|
|
291
|
+
}
|
|
272
292
|
if (offset) {
|
|
273
293
|
params.offset = `${offset}`;
|
|
274
294
|
}
|
|
@@ -295,9 +315,12 @@ class AirtableHelper extends runtime_1.default {
|
|
|
295
315
|
throw new Error(`Failed to obtain records ${formulaMsg} from the ${this.tableId} table and the baseId ${this.baseId}. Status Code: ${responseRecords?.status || 'unknown'}. Error: ${err.message}`);
|
|
296
316
|
}
|
|
297
317
|
} while (offset);
|
|
318
|
+
if (fetchAllFields) {
|
|
319
|
+
return allRecords.map(x => AirtableHelper.translateFieldsAll(this.dictionary, x));
|
|
320
|
+
}
|
|
298
321
|
return allRecords.map(x => AirtableHelper.translateFields(this.dictionary, x));
|
|
299
322
|
}
|
|
300
|
-
async getExistingRecordsByKeys(keys) {
|
|
323
|
+
async getExistingRecordsByKeys(keys, options) {
|
|
301
324
|
const result = new Map();
|
|
302
325
|
if (keys.length === 0) {
|
|
303
326
|
return result;
|
|
@@ -311,7 +334,7 @@ class AirtableHelper extends runtime_1.default {
|
|
|
311
334
|
const batch = dedupedKeys.slice(i, i + batchSize);
|
|
312
335
|
const orConditions = batch.map(key => `${this.dictionary[this.primaryKeyFieldName]} = "${escapeFormulaValue(key)}"`).join(', ');
|
|
313
336
|
const formula = `OR(${orConditions})`;
|
|
314
|
-
const records = await this.getExistingRecords(formula);
|
|
337
|
+
const records = await this.getExistingRecords(formula, options);
|
|
315
338
|
for (const record of records) {
|
|
316
339
|
const key = record.fields[this.primaryKeyFieldName];
|
|
317
340
|
result.set(key, record);
|
|
@@ -685,5 +708,129 @@ class AirtableHelper extends runtime_1.default {
|
|
|
685
708
|
const notSameImage = ([key, value]) => !(value && Array.isArray(value) && value.every(x => x && typeof x === 'object' && Object.keys(x).length === 1 && x.url && y.fields[key]?.some((y) => y.url === x.url)));
|
|
686
709
|
return Object.fromEntries(Object.entries(x).filter(([key, value]) => notUndefinedAndNotClearsUndefined([key, value]) && notEqual([key, value]) && notSameImage([key, value])));
|
|
687
710
|
}
|
|
711
|
+
async getTableFields(tableId) {
|
|
712
|
+
const targetTableId = tableId || this.tableId;
|
|
713
|
+
const fields = await this.getTableFieldsFull(targetTableId);
|
|
714
|
+
const result = {};
|
|
715
|
+
for (const field of fields) {
|
|
716
|
+
result[field.id] = field.name;
|
|
717
|
+
}
|
|
718
|
+
return result;
|
|
719
|
+
}
|
|
720
|
+
async getTableFieldsFull(tableId) {
|
|
721
|
+
let response = null;
|
|
722
|
+
const url = `https://api.airtable.com/v0/meta/bases/${this.baseId}/tables`;
|
|
723
|
+
try {
|
|
724
|
+
response = await fetch(url, {
|
|
725
|
+
method: 'GET',
|
|
726
|
+
headers: {
|
|
727
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
728
|
+
},
|
|
729
|
+
});
|
|
730
|
+
if (!response.ok) {
|
|
731
|
+
const text = await response.text().catch(() => `${response?.status || 'unknown'}`);
|
|
732
|
+
throw new Error(text);
|
|
733
|
+
}
|
|
734
|
+
const data = await response.json();
|
|
735
|
+
const table = data.tables.find(t => t.id === tableId);
|
|
736
|
+
if (!table) {
|
|
737
|
+
throw new Error(`Table ${tableId} not found in base ${this.baseId}`);
|
|
738
|
+
}
|
|
739
|
+
return table.fields;
|
|
740
|
+
}
|
|
741
|
+
catch (err) {
|
|
742
|
+
throw new Error(`Failed to get table fields for ${tableId} in base ${this.baseId}. Status Code: ${response?.status || 'unknown'}. Error: ${err.message}`);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
async upsertFields(fields, options) {
|
|
746
|
+
const defaultLimitter = { run: (x) => x() };
|
|
747
|
+
const limitter = options?.limitter || defaultLimitter;
|
|
748
|
+
const targetTableId = this.tableId;
|
|
749
|
+
const existingFields = await limitter.run(() => this.getTableFieldsFull(targetTableId));
|
|
750
|
+
const existingByName = new Map();
|
|
751
|
+
for (const field of existingFields) {
|
|
752
|
+
existingByName.set(field.name, field);
|
|
753
|
+
}
|
|
754
|
+
const result = {};
|
|
755
|
+
for (const field of fields) {
|
|
756
|
+
const existing = existingByName.get(field.name);
|
|
757
|
+
if (existing) {
|
|
758
|
+
let hasChanged = false;
|
|
759
|
+
for (const key of Object.keys(field)) {
|
|
760
|
+
if (field[key] !== undefined && !(0, lodash_isequal_1.default)(field[key], existing[key])) {
|
|
761
|
+
hasChanged = true;
|
|
762
|
+
break;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
if (hasChanged) {
|
|
766
|
+
const updated = await limitter.run(() => this.updateField(targetTableId, existing.id, field));
|
|
767
|
+
result[updated.name] = updated.id;
|
|
768
|
+
}
|
|
769
|
+
else {
|
|
770
|
+
result[existing.name] = existing.id;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
else {
|
|
774
|
+
if (!field.type) {
|
|
775
|
+
throw new Error(`Cannot create field "${field.name}": type is required for new fields`);
|
|
776
|
+
}
|
|
777
|
+
const created = await limitter.run(() => this.createField(targetTableId, field));
|
|
778
|
+
result[created.name] = created.id;
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
return result;
|
|
782
|
+
}
|
|
783
|
+
async createField(tableId, field) {
|
|
784
|
+
let response = null;
|
|
785
|
+
const url = `https://api.airtable.com/v0/meta/bases/${this.baseId}/tables/${tableId}/fields`;
|
|
786
|
+
try {
|
|
787
|
+
response = await fetch(url, {
|
|
788
|
+
method: 'POST',
|
|
789
|
+
headers: {
|
|
790
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
791
|
+
'Content-Type': 'application/json',
|
|
792
|
+
},
|
|
793
|
+
body: JSON.stringify(field),
|
|
794
|
+
});
|
|
795
|
+
if (!response.ok) {
|
|
796
|
+
const text = await response.text().catch(() => `${response?.status || 'unknown'}`);
|
|
797
|
+
throw new Error(text);
|
|
798
|
+
}
|
|
799
|
+
return await response.json();
|
|
800
|
+
}
|
|
801
|
+
catch (err) {
|
|
802
|
+
throw new Error(`Failed to create field "${field.name}" in table ${tableId}, base ${this.baseId}. Status Code: ${response?.status || 'unknown'}. Error: ${err.message}`);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
async updateField(tableId, fieldId, field) {
|
|
806
|
+
let response = null;
|
|
807
|
+
const url = `https://api.airtable.com/v0/meta/bases/${this.baseId}/tables/${tableId}/fields/${fieldId}`;
|
|
808
|
+
const payload = {};
|
|
809
|
+
if (field.name !== undefined)
|
|
810
|
+
payload.name = field.name;
|
|
811
|
+
if (field.description !== undefined)
|
|
812
|
+
payload.description = field.description;
|
|
813
|
+
if (Object.keys(payload).length === 0) {
|
|
814
|
+
return { id: fieldId, name: field.name || '', type: '' };
|
|
815
|
+
}
|
|
816
|
+
try {
|
|
817
|
+
response = await fetch(url, {
|
|
818
|
+
method: 'PATCH',
|
|
819
|
+
headers: {
|
|
820
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
821
|
+
'Content-Type': 'application/json',
|
|
822
|
+
},
|
|
823
|
+
body: JSON.stringify(payload),
|
|
824
|
+
});
|
|
825
|
+
if (!response.ok) {
|
|
826
|
+
const text = await response.text().catch(() => `${response?.status || 'unknown'}`);
|
|
827
|
+
throw new Error(text);
|
|
828
|
+
}
|
|
829
|
+
return await response.json();
|
|
830
|
+
}
|
|
831
|
+
catch (err) {
|
|
832
|
+
throw new Error(`Failed to update field "${fieldId}" in table ${tableId}, base ${this.baseId}. Status Code: ${response?.status || 'unknown'}. Error: ${err.message}`);
|
|
833
|
+
}
|
|
834
|
+
}
|
|
688
835
|
}
|
|
689
836
|
exports.default = AirtableHelper;
|
|
@@ -185,6 +185,9 @@ declare const schema: {
|
|
|
185
185
|
readonly measurement_chart: {
|
|
186
186
|
readonly type: readonly ["string", "null"];
|
|
187
187
|
};
|
|
188
|
+
readonly markdown_price: {
|
|
189
|
+
readonly type: readonly ["number", "null"];
|
|
190
|
+
};
|
|
188
191
|
readonly sizeguide_type: {
|
|
189
192
|
readonly type: readonly ["string", "null"];
|
|
190
193
|
};
|
|
@@ -181,6 +181,9 @@ declare const schema: {
|
|
|
181
181
|
readonly measurement_chart: {
|
|
182
182
|
readonly type: readonly ["string", "null"];
|
|
183
183
|
};
|
|
184
|
+
readonly markdown_price: {
|
|
185
|
+
readonly type: readonly ["number", "null"];
|
|
186
|
+
};
|
|
184
187
|
readonly sizeguide_type: {
|
|
185
188
|
readonly type: readonly ["string", "null"];
|
|
186
189
|
};
|
|
@@ -79,6 +79,7 @@ export interface Attributes {
|
|
|
79
79
|
stock_quantity_score?: number;
|
|
80
80
|
stock_availability?: number;
|
|
81
81
|
measurement_chart?: (string | null);
|
|
82
|
+
markdown_price?: (number | null);
|
|
82
83
|
sizeguide_type?: (string | null);
|
|
83
84
|
brand?: (string | null);
|
|
84
85
|
shoes_type?: (string | null);
|
|
@@ -78,6 +78,7 @@ export interface Attributes {
|
|
|
78
78
|
stock_quantity_score?: number;
|
|
79
79
|
stock_availability?: number;
|
|
80
80
|
measurement_chart?: (string | null);
|
|
81
|
+
markdown_price?: (number | null);
|
|
81
82
|
sizeguide_type?: (string | null);
|
|
82
83
|
brand?: (string | null);
|
|
83
84
|
shoes_type?: (string | null);
|
|
@@ -29,6 +29,13 @@ declare class AirtableHelper<T extends Record<string, string>, K extends keyof T
|
|
|
29
29
|
[key in keyof T]: any;
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
|
+
static translateFieldsAll<T extends Record<string, string>, S extends {
|
|
33
|
+
fields: Record<string, any>;
|
|
34
|
+
}>(dictionary: T, y: S): S & {
|
|
35
|
+
fields: {
|
|
36
|
+
[key in keyof T]: any;
|
|
37
|
+
} & Record<string, any>;
|
|
38
|
+
};
|
|
32
39
|
createIfNotExist(payload: Partial<{
|
|
33
40
|
[key in keyof T]: any;
|
|
34
41
|
}> & {
|
|
@@ -101,17 +108,21 @@ declare class AirtableHelper<T extends Record<string, string>, K extends keyof T
|
|
|
101
108
|
[key in keyof T]: any;
|
|
102
109
|
};
|
|
103
110
|
}>;
|
|
104
|
-
getExistingRecords(formula?: string
|
|
111
|
+
getExistingRecords(formula?: string, options?: {
|
|
112
|
+
fetchAllFields?: boolean;
|
|
113
|
+
}): Promise<Array<{
|
|
105
114
|
id: string;
|
|
106
115
|
fields: {
|
|
107
116
|
[key in keyof T]: any;
|
|
108
|
-
};
|
|
117
|
+
} & (Record<string, any>);
|
|
109
118
|
}>>;
|
|
110
|
-
getExistingRecordsByKeys(keys: Array<string
|
|
119
|
+
getExistingRecordsByKeys(keys: Array<string>, options?: {
|
|
120
|
+
fetchAllFields?: boolean;
|
|
121
|
+
}): Promise<Map<string, {
|
|
111
122
|
id: string;
|
|
112
123
|
fields: {
|
|
113
124
|
[key in keyof T]: any;
|
|
114
|
-
};
|
|
125
|
+
} & (Record<string, any>);
|
|
115
126
|
}>>;
|
|
116
127
|
pingWebhook(webhook: {
|
|
117
128
|
webhook: {
|
|
@@ -180,6 +191,20 @@ declare class AirtableHelper<T extends Record<string, string>, K extends keyof T
|
|
|
180
191
|
}>(x: T1, y: T2 | null | undefined): {
|
|
181
192
|
[k: string]: any;
|
|
182
193
|
};
|
|
194
|
+
getTableFields(tableId?: string): Promise<Record<string, string>>;
|
|
195
|
+
private getTableFieldsFull;
|
|
196
|
+
upsertFields(fields: Array<{
|
|
197
|
+
name: string;
|
|
198
|
+
type?: string;
|
|
199
|
+
description?: string;
|
|
200
|
+
options?: Record<string, any>;
|
|
201
|
+
}>, options?: {
|
|
202
|
+
limitter?: {
|
|
203
|
+
run: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
204
|
+
};
|
|
205
|
+
}): Promise<Record<string, string>>;
|
|
206
|
+
private createField;
|
|
207
|
+
private updateField;
|
|
183
208
|
}
|
|
184
209
|
export default AirtableHelper;
|
|
185
210
|
type AirtableWebhook = {
|