@peabody-soft/mbs-model-ts 1.7.0 → 1.8.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.
Files changed (64) hide show
  1. package/dist/Attachment.js +2 -2
  2. package/dist/AttachmentBaseUrl.js +4 -4
  3. package/dist/AuthTokens.js +7 -7
  4. package/dist/Business.js +11 -10
  5. package/dist/BusinessIdentifier.js +3 -2
  6. package/dist/BusinessLink.js +3 -2
  7. package/dist/CartEditor.js +89 -81
  8. package/dist/Catalog.d.ts +19 -7
  9. package/dist/Catalog.js +121 -41
  10. package/dist/Constants.d.ts +1 -0
  11. package/dist/Constants.js +7 -5
  12. package/dist/ContainerNames.js +6 -6
  13. package/dist/Entity.js +4 -3
  14. package/dist/Enums.d.ts +1 -0
  15. package/dist/Enums.js +3 -2
  16. package/dist/Exceptions.js +2 -2
  17. package/dist/GeneralSettings.d.ts +5 -4
  18. package/dist/GeneralSettings.js +17 -15
  19. package/dist/HttpStatusCodes.js +7 -7
  20. package/dist/Ids.js +4 -5
  21. package/dist/Item.js +8 -5
  22. package/dist/LiveData.js +2 -2
  23. package/dist/Measures.js +3 -2
  24. package/dist/Message.js +1 -1
  25. package/dist/MockDatabase.js +6 -5
  26. package/dist/Model.js +166 -162
  27. package/dist/Order.js +10 -12
  28. package/dist/Package.d.ts +6 -2
  29. package/dist/Package.js +10 -5
  30. package/dist/PackageIdentifier.js +2 -2
  31. package/dist/Price.js +6 -5
  32. package/dist/PriceList.d.ts +13 -0
  33. package/dist/PriceList.js +34 -2
  34. package/dist/Product.d.ts +6 -2
  35. package/dist/Product.js +15 -10
  36. package/dist/Profile.js +15 -14
  37. package/dist/ProtoMap.js +189 -206
  38. package/dist/ServiceExceptions.js +6 -6
  39. package/dist/ServiceProxy.js +15 -14
  40. package/dist/ShoppingList.js +102 -100
  41. package/dist/SyncCache.js +76 -68
  42. package/dist/SyncKeys.js +5 -5
  43. package/dist/SyncState.js +14 -6
  44. package/dist/Tax.js +11 -10
  45. package/dist/TaxHelper.js +9 -8
  46. package/dist/TaxType.js +7 -6
  47. package/dist/UserProfile.js +7 -7
  48. package/dist/WorkingDays.js +21 -18
  49. package/dist/generated/BusinessSyncOutResponse.d.ts +4 -1
  50. package/dist/generated/Constants.d.ts +0 -4
  51. package/dist/generated/Constants.js +0 -4
  52. package/dist/generated/GeneralSettings.d.ts +5 -4
  53. package/dist/generated/GeneralSettings.js +8 -6
  54. package/dist/generated/Item.d.ts +4 -3
  55. package/dist/generated/Message.d.ts +5 -0
  56. package/dist/generated/OnlineStoreTheme.d.ts +33 -0
  57. package/dist/generated/OnlineStoreTheme.js +38 -0
  58. package/dist/generated/PriceList.d.ts +3 -2
  59. package/dist/generated/ProfileSyncOutRequest.d.ts +16 -15
  60. package/dist/generated/ProfileSyncOutResponse.d.ts +4 -6
  61. package/dist/generated/SalesOrderPayload.d.ts +6 -3
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.js +11 -8
  64. package/package.json +2 -2
@@ -4,6 +4,7 @@ import type { BinaryReadOptions } from "@protobuf-ts/runtime";
4
4
  import type { IBinaryReader } from "@protobuf-ts/runtime";
5
5
  import type { PartialMessage } from "@protobuf-ts/runtime";
6
6
  import { MessageType } from "@protobuf-ts/runtime";
7
+ import { OnlineStoreTheme } from "./OnlineStoreTheme";
7
8
  import { LatLong } from "./LatLong";
8
9
  import { WorkingDays } from "./WorkingDays";
9
10
  import { Tax } from "./Tax";
@@ -122,12 +123,12 @@ export interface GeneralSettings {
122
123
  */
123
124
  googleBusinessCategoryName?: string;
124
125
  /**
125
- * Id of the visual theme applied to the online store
126
- * (at most Constants.ONLINE_STORE_THEME_ID_MAX_LENGTH)
126
+ * Visual theme applied to the online store. UNSPECIFIED_ONLINE_STORE_THEME means no theme is set.
127
+ * A client must treat a number it has no entry for as no theme: a newer app may have added one.
127
128
  *
128
- * @generated from protobuf field: optional string onlineStoreThemeId = 17
129
+ * @generated from protobuf field: com.merabills.storefront.OnlineStoreTheme onlineStoreTheme = 17
129
130
  */
130
- onlineStoreThemeId?: string;
131
+ onlineStoreTheme: OnlineStoreTheme;
131
132
  /**
132
133
  * True if the business has turned online shopping on. The server does not refuse a business that has
133
134
  * not: it is for the client to, once it has read all it is sent (see BusinessSyncOutResponse). A
@@ -2,6 +2,7 @@ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
2
2
  import { WireType } from "@protobuf-ts/runtime";
3
3
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
4
4
  import { MessageType } from "@protobuf-ts/runtime";
5
+ import { OnlineStoreTheme } from "./OnlineStoreTheme";
5
6
  import { LatLong } from "./LatLong";
6
7
  import { WorkingDays } from "./WorkingDays";
7
8
  import { Tax } from "./Tax";
@@ -29,7 +30,7 @@ class GeneralSettings$Type extends MessageType {
29
30
  { no: 14, name: "primaryStoreLocation", kind: "message", T: () => LatLong },
30
31
  { no: 15, name: "googleBusinessCategoryId", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
31
32
  { no: 16, name: "googleBusinessCategoryName", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
32
- { no: 17, name: "onlineStoreThemeId", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
33
+ { no: 17, name: "onlineStoreTheme", kind: "enum", T: () => ["com.merabills.storefront.OnlineStoreTheme", OnlineStoreTheme] },
33
34
  { no: 18, name: "onlineShoppingEnabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
34
35
  ]);
35
36
  }
@@ -44,6 +45,7 @@ class GeneralSettings$Type extends MessageType {
44
45
  message.deliveryChargeTaxes = [];
45
46
  message.freeDeliveryTotal = 0n;
46
47
  message.deliveryRadiusKms = 0;
48
+ message.onlineStoreTheme = 0;
47
49
  message.onlineShoppingEnabled = false;
48
50
  if (value !== undefined)
49
51
  reflectionMergePartial(this, message, value);
@@ -106,8 +108,8 @@ class GeneralSettings$Type extends MessageType {
106
108
  case /* optional string googleBusinessCategoryName */ 16:
107
109
  message.googleBusinessCategoryName = reader.string();
108
110
  break;
109
- case /* optional string onlineStoreThemeId */ 17:
110
- message.onlineStoreThemeId = reader.string();
111
+ case /* com.merabills.storefront.OnlineStoreTheme onlineStoreTheme */ 17:
112
+ message.onlineStoreTheme = reader.int32();
111
113
  break;
112
114
  case /* bool onlineShoppingEnabled */ 18:
113
115
  message.onlineShoppingEnabled = reader.bool();
@@ -176,9 +178,9 @@ class GeneralSettings$Type extends MessageType {
176
178
  /* optional string googleBusinessCategoryName = 16; */
177
179
  if (message.googleBusinessCategoryName !== undefined)
178
180
  writer.tag(16, WireType.LengthDelimited).string(message.googleBusinessCategoryName);
179
- /* optional string onlineStoreThemeId = 17; */
180
- if (message.onlineStoreThemeId !== undefined)
181
- writer.tag(17, WireType.LengthDelimited).string(message.onlineStoreThemeId);
181
+ /* com.merabills.storefront.OnlineStoreTheme onlineStoreTheme = 17; */
182
+ if (message.onlineStoreTheme !== 0)
183
+ writer.tag(17, WireType.Varint).int32(message.onlineStoreTheme);
182
184
  /* bool onlineShoppingEnabled = 18; */
183
185
  if (message.onlineShoppingEnabled !== false)
184
186
  writer.tag(18, WireType.Varint).bool(message.onlineShoppingEnabled);
@@ -17,9 +17,10 @@ export interface Item {
17
17
  */
18
18
  entity?: Entity;
19
19
  /**
20
- * Id of the parent of this item - the category of a product, the product of a package, or the
21
- * price list of a price - or 0 when it has none. A client rebuilds the catalog hierarchy by
22
- * grouping items on this id, since nothing nests on the wire.
20
+ * Id of the parent of this item - the category of a product, the product of a package, the
21
+ * price list of a price, or the parent price list of a price list - or 0 when it has none. A
22
+ * client rebuilds the catalog hierarchy by grouping items on this id, since nothing nests on the
23
+ * wire.
23
24
  *
24
25
  * @generated from protobuf field: int64 parentItemId = 2
25
26
  */
@@ -13,6 +13,11 @@ import { Entity } from "./Entity";
13
13
  * A message sent to a business: an order (SalesOrderPayload) or a customer's shopping cart
14
14
  * (PartyPreferencesPayload), typed here rather than left as the serialized string Java stores.
15
15
  * MONEY_TRANSFER messages have no payload in this protocol.
16
+ * A message that has been deleted (see Entity.updateNumber) is converted as it is held, as every entity
17
+ * is, deleted or not, but for the items of the catalog. The merchant app completes an order, by fulfilling or cancelling it, by deleting
18
+ * its message, so, a deleted message that carries a sales order is an order that the business has
19
+ * completed, and is the whole of what a customer is shown of it afterwards. A deleted message is not
20
+ * a cart, whatever it carries.
16
21
  *
17
22
  * @generated from protobuf message com.merabills.storefront.Message
18
23
  */
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A visual theme of the online store. The palettes ship with the online store, so a business picks
3
+ * one of these and cannot mix colours. Values match the ids of the corresponding Java enum entries
4
+ * and must never be changed.
5
+ *
6
+ * @generated from protobuf enum com.merabills.storefront.OnlineStoreTheme
7
+ */
8
+ export declare enum OnlineStoreTheme {
9
+ /**
10
+ * Java has no zero value: it treats a theme of zero as not set
11
+ *
12
+ * @generated from protobuf enum value: UNSPECIFIED_ONLINE_STORE_THEME = 0;
13
+ */
14
+ UNSPECIFIED_ONLINE_STORE_THEME = 0,
15
+ /**
16
+ * Deep forest brand, terracotta accent, warm paper
17
+ *
18
+ * @generated from protobuf enum value: FOREST = 1;
19
+ */
20
+ FOREST = 1,
21
+ /**
22
+ * Indigo brand, rust accent, cooler paper
23
+ *
24
+ * @generated from protobuf enum value: INDIGO = 2;
25
+ */
26
+ INDIGO = 2,
27
+ /**
28
+ * Brick brand, amber accent, the warmest paper
29
+ *
30
+ * @generated from protobuf enum value: BRICK = 3;
31
+ */
32
+ BRICK = 3
33
+ }
@@ -0,0 +1,38 @@
1
+ // @ts-nocheck
2
+ // @generated by protobuf-ts 2.11.1 with parameter long_type_bigint
3
+ // @generated from protobuf file "OnlineStoreTheme.proto" (package "com.merabills.storefront", syntax proto3)
4
+ // tslint:disable
5
+ /**
6
+ * A visual theme of the online store. The palettes ship with the online store, so a business picks
7
+ * one of these and cannot mix colours. Values match the ids of the corresponding Java enum entries
8
+ * and must never be changed.
9
+ *
10
+ * @generated from protobuf enum com.merabills.storefront.OnlineStoreTheme
11
+ */
12
+ export var OnlineStoreTheme;
13
+ (function (OnlineStoreTheme) {
14
+ /**
15
+ * Java has no zero value: it treats a theme of zero as not set
16
+ *
17
+ * @generated from protobuf enum value: UNSPECIFIED_ONLINE_STORE_THEME = 0;
18
+ */
19
+ OnlineStoreTheme[OnlineStoreTheme["UNSPECIFIED_ONLINE_STORE_THEME"] = 0] = "UNSPECIFIED_ONLINE_STORE_THEME";
20
+ /**
21
+ * Deep forest brand, terracotta accent, warm paper
22
+ *
23
+ * @generated from protobuf enum value: FOREST = 1;
24
+ */
25
+ OnlineStoreTheme[OnlineStoreTheme["FOREST"] = 1] = "FOREST";
26
+ /**
27
+ * Indigo brand, rust accent, cooler paper
28
+ *
29
+ * @generated from protobuf enum value: INDIGO = 2;
30
+ */
31
+ OnlineStoreTheme[OnlineStoreTheme["INDIGO"] = 2] = "INDIGO";
32
+ /**
33
+ * Brick brand, amber accent, the warmest paper
34
+ *
35
+ * @generated from protobuf enum value: BRICK = 3;
36
+ */
37
+ OnlineStoreTheme[OnlineStoreTheme["BRICK"] = 3] = "BRICK";
38
+ })(OnlineStoreTheme || (OnlineStoreTheme = {}));
@@ -6,8 +6,9 @@ import type { PartialMessage } from "@protobuf-ts/runtime";
6
6
  import { MessageType } from "@protobuf-ts/runtime";
7
7
  import { Item } from "./Item";
8
8
  /**
9
- * A named list of prices; has no parent, so its own Item.parentItemId is 0. Contains nothing - its
10
- * prices are the Price entities whose Item.parentItemId is this price list's id.
9
+ * A named list of prices. Item.parentItemId is the id of its parent price list, or 0 when it has
10
+ * none. A package that has no price in a list is priced from the parent list. Contains
11
+ * nothing - its prices are the Price entities whose Item.parentItemId is this price list's id.
11
12
  * Excluded: isPurchasePriceList - a purchase price list is never sent, so the flag would always be
12
13
  * false.
13
14
  *
@@ -34,21 +34,22 @@ export interface ProfileSyncOutRequest {
34
34
  /**
35
35
  * The business to join as a customer, if the caller is not already linked to it. 0 means none, and
36
36
  * anything else has to be the id of a business: one that is not is refused, not ignored.
37
- * A call that carries a valid link token of this business is from a member of it already, and nothing is
38
- * joined: the response is what the cursors above return, as for a call that joins nothing, and it is not
39
- * refused for the business no longer allowing customers to join it. A link token that is not valid is
40
- * refused (401), and one of another business says nothing of this one.
41
- * Otherwise the response always carries the BusinessLink and the Business that a join returns, even
42
- * where the cursors above would not return them.
43
- * An invitation to this business for the caller (looked for by their phone number) takes precedence: it is
44
- * accepted in the role and party that the invitation names, which may be those of a manager or an owner as
45
- * well as of a customer, whether or not the business allows customers to join without an invitation, and
46
- * the invitation is deleted. Only when there is none does the business decide.
47
- * The call fails with 404 (NotFoundException) if there is no such business, or if the caller has no
48
- * invitation to it and it does not allow customers to join it, and the caller does not hold a valid link
49
- * token of it. It is the link token that is tested, and not membership: a member that does not hold one (on
50
- * a new device, say) of a business that has since stopped allowing customers to join is refused in the same
51
- * way, and then the whole call is a 404 - nothing of the profile is returned either, and not only no join.
37
+ * A member of the business is not joined again, and is not refused if the business no longer allows
38
+ * customers to join it. Nothing is changed for a member, so the response is what the cursors above
39
+ * return, as for a call that joins nothing.
40
+ * A call that does join makes a new BusinessLink. It is newer than the link cursor, so the response
41
+ * carries it, and the Business that it names whatever the business cursor is.
42
+ * An invitation to this business for the caller (looked for by their phone number) that names a party takes
43
+ * precedence: the newest one is accepted in the role and party that the invitation names, which may be those
44
+ * of a manager or an owner as well as of a customer, whether or not the business allows customers to join
45
+ * without an invitation, and the invitation is deleted. The call is refused if another member has that party.
46
+ * Only when there is no such invitation does the business decide.
47
+ * Without an invitation the caller joins as a customer: as the customer party of the business that has their
48
+ * phone number, if there is one, else as a new customer party. A caller that was a member before gets a new
49
+ * link and, unless a party has their phone number, a new party.
50
+ * The call fails with 404 (NotFoundException) if there is no such business, or if the caller is not a member,
51
+ * has no invitation to it, and it does not allow customers to join it. The whole call is then a 404:
52
+ * nothing of the profile is returned either.
52
53
  *
53
54
  * @generated from protobuf field: int64 joinBusinessId = 4
54
55
  */
@@ -11,9 +11,8 @@ import { AuthTokens } from "./AuthTokens";
11
11
  /**
12
12
  * The answer to a ProfileSyncOutRequest: who the caller is, the businesses they are linked to, and
13
13
  * those businesses. Nothing is nested - match BusinessLink.businessId against Business.entity.id.
14
- * Every field is absent/empty unless that type has changed, but for the caller's own user, which is
15
- * sent with every response; a tombstone (updateNumber's update-type bits =
16
- * Constants.UPDATE_TYPE_DELETED) means the entity, and what it owned, was deleted.
14
+ * Every field is absent/empty unless that type has changed. A tombstone (updateNumber's update-type
15
+ * bits = Constants.UPDATE_TYPE_DELETED) means the entity, and what it owned, was deleted.
17
16
  *
18
17
  * @generated from protobuf message com.merabills.storefront.ProfileSyncOutResponse
19
18
  */
@@ -26,9 +25,8 @@ export interface ProfileSyncOutResponse {
26
25
  */
27
26
  authTokens?: AuthTokens;
28
27
  /**
29
- * The caller. Sent with every response, whatever userUpdateNumber is: a client keeps the copy it holds
30
- * when it is as new as this one. The only user a response ever carries: nobody else's, such as the
31
- * owner of a business, is sent to a customer.
28
+ * The caller, if the user has changed since userUpdateNumber. The only user a response ever carries:
29
+ * nobody else's, such as the owner of a business, is sent to a customer.
32
30
  *
33
31
  * @generated from protobuf field: com.merabills.storefront.User user = 2
34
32
  */
@@ -27,19 +27,22 @@ export interface SalesOrderPayload {
27
27
  */
28
28
  fulfillmentMode: FulfillmentMode;
29
29
  /**
30
- * What was ordered
30
+ * What was ordered. Absent for an order that an older version of the merchant app completed: that
31
+ * version moved the list out of the order, into the record of the sale, which a storefront is never
32
+ * sent. A client shows such an order with its total and count alone.
31
33
  *
32
34
  * @generated from protobuf field: com.merabills.storefront.ShoppingList shoppingList = 3
33
35
  */
34
36
  shoppingList?: ShoppingList;
35
37
  /**
36
- * Total of the shopping list, multiplied by Constants.AMOUNT_FACTOR
38
+ * Total of the shopping list, multiplied by Constants.AMOUNT_FACTOR. Sent whether or not the list is
39
+ * (see above), so, it is all there is of what an order of that kind came to.
37
40
  *
38
41
  * @generated from protobuf field: int64 shoppingListTotal = 4
39
42
  */
40
43
  shoppingListTotal: bigint;
41
44
  /**
42
- * Number of items in the shopping list
45
+ * Number of items in the shopping list. Sent whether or not the list is, as the total is.
43
46
  *
44
47
  * @generated from protobuf field: int32 shoppingListCount = 5
45
48
  */
package/dist/index.d.ts CHANGED
@@ -14,13 +14,17 @@ export { default as Business } from "./Business";
14
14
  export type { UpdatableBusiness } from "./Business";
15
15
  export { default as CartEditor, CartLine } from "./CartEditor";
16
16
  export { default as Catalog } from "./Catalog";
17
+ export type { UpdatableCatalog } from "./Catalog";
17
18
  export { default as GeneralSettings } from "./GeneralSettings";
18
19
  export { default as Order } from "./Order";
19
20
  export { default as Package } from "./Package";
21
+ export type { UpdatablePackage } from "./Package";
20
22
  export { default as Photo } from "./Photo";
21
23
  export { default as Price } from "./Price";
22
24
  export { default as PriceList } from "./PriceList";
25
+ export type { UpdatablePriceList } from "./PriceList";
23
26
  export { default as Product } from "./Product";
27
+ export type { UpdatableProduct } from "./Product";
24
28
  export { default as ProductCategory } from "./ProductCategory";
25
29
  export type { UpdatableProductCategory } from "./ProductCategory";
26
30
  export { default as Profile } from "./Profile";
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
- // The public surface of this library. Excludes Attachment (UIs get Photo instead), the sync layer's internal cursors,
2
- // the auth tokens (except BusinessLink.linkToken, which the protocol hands to a client), ProtoMap (the wire boundary, except buildAuthTokensBytes),
3
- // the scaled-value conversions of Constants.ts (every getter is already unscaled),
4
- // and TaxHelper (tax arithmetic in scaled values; a UI reads a tax off a ShoppingListItem, ShoppingList or CartLine).
1
+ // The public surface of this library. Not exported:
2
+ // - Attachment (a UI gets Photo instead) and the sync layer's internal cursors.
3
+ // - The auth tokens, except BusinessLink.linkToken, which the server sends to a client.
4
+ // - ProtoMap, the wire boundary, except buildAuthTokensBytes.
5
+ // - The scaled-value conversions of Constants.ts (every getter is already unscaled).
6
+ // - TaxHelper, which does tax arithmetic in scaled values. A UI reads a tax off a ShoppingListItem,
7
+ // ShoppingList or CartLine.
5
8
  export { default as Model } from "./Model";
6
9
  export * as ContainerNames from "./ContainerNames";
7
10
  export { buildAuthTokensBytes } from "./ProtoMap";
@@ -45,14 +48,14 @@ export { default as ShoppingList, ItemChange, ShoppingListItem } from "./Shoppin
45
48
  export { default as Tax, TaxAmount } from "./Tax";
46
49
  export { default as WorkingDays, WorkingHours, WorkingHoursRange } from "./WorkingDays";
47
50
  // The enums of the protocol, the limits it obeys, and how an id is read. The price list a
48
- // storefront sells from is exported because a UI naming it on a cart it is building needs it,
49
- // while Catalog.priceList is null until the catalog has arrived.
51
+ // storefront sells from is exported because a UI that builds a cart must name it. Catalog.priceList
52
+ // is null until the catalog has arrived, and when the response did not carry that list.
50
53
  export * from "./Enums";
51
54
  export { Constants, MERABILLS_ONLINE_PRICE_LIST_ID, buildPriceListId } from "./Constants";
52
55
  export { default as Ids } from "./Ids";
53
56
  // Failures. The two in Exceptions.ts are programming errors. The rest are what a call fails with
54
- // and are meant to be caught: ServiceException for anything the server refused,
55
- // NetworkConnectionException for a call that never got an answer.
57
+ // and are meant to be caught: ServiceException for an error response from the server,
58
+ // NetworkConnectionException for a call that got no response.
56
59
  export { IllegalOperationException, InvalidArgumentException } from "./Exceptions";
57
60
  export { BadRequestException, ConflictException, InternalServerException, MethodNotAllowedException, NetworkConnectionException, NotFoundException, ServiceException, ServiceUnavailableException, UnauthorizedException, UpgradeRequiredException, } from "./ServiceExceptions";
58
61
  // The mock database: a Database over a Map, so a caller can pair it with any Service. MockService
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peabody-soft/mbs-model-ts",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "MeraBills storefront client-side model (TypeScript)",
5
5
  "author": "Peabody Soft",
6
6
  "license": "AGPL-3.0-or-later",
@@ -49,7 +49,7 @@
49
49
  "typescript": "^7.0.2"
50
50
  },
51
51
  "dependencies": {
52
- "@peabody-soft/mbs-protos": "^1.11.0",
52
+ "@peabody-soft/mbs-protos": "^1.12.1",
53
53
  "@protobuf-ts/runtime": "^2.11.1"
54
54
  }
55
55
  }