@bearei/contracts 2.0.0 → 2.2.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 CHANGED
@@ -4,14 +4,50 @@ All notable changes to this project are documented in this file. The format is b
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
5
5
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 2.2.0 — 2026-10-27
8
+
9
+ ### Added
10
+
11
+ - `PERMISSION` and `Permission`, moved from `@bearei/nest` without changing any value. Clients can
12
+ now evaluate permissions against the same `<service>:<action>` values the services check.
13
+ - `SUBSCRIPTION_FEATURE` and `SubscriptionFeature`, moved from `@bearei/nest`. Features are scoped
14
+ like permissions and use `<service>:<key>`: `bookmark:cloud_sync`, `bookmark:carton_cloud_sync`
15
+ and `bookmark:tag_cloud_sync`. Cartons and tags belong to the `bearei-bookmark` service, so they
16
+ share its namespace. The previous `BEAREI_BOOKMARK_CLOUD_SYNC` value is replaced by
17
+ `BOOKMARK_CLOUD_SYNC`.
18
+
19
+ ## 2.1.0 — 2026-10-27
20
+
21
+ ### Added
22
+
23
+ - `HTTP_EXCEPTION_CODE.CONFLICT` (`409000`) for writes that lose a race with a concurrent request
24
+ and collide with existing data. It is returned with HTTP status `409`; `SERVICE_FIELDS_ALREADY_EXISTS`
25
+ (`400003`) keeps its existing meaning for pre-validation rejections.
26
+
27
+ ## 2.0.0-dev.3 — 2026-10-27
28
+
29
+ Development snapshot published under the `next` dist-tag to verify the unified release pipeline
30
+ across all Bearei repositories: the artifact is pulled back from the registry, re-verified and
31
+ attached to the GitHub release. It matches the 2.0.0 scope documented below and leaves the
32
+ `latest` dist-tag unchanged.
33
+
34
+ Install it with `yarn add @bearei/contracts@next` or pin `@bearei/contracts@2.0.0-dev.3`.
35
+
36
+ ## 2.0.0-dev.2 — 2026-10-27
37
+
38
+ Development snapshot published under the `next` dist-tag to verify the npm trusted publishing
39
+ pipeline. It matches the 2.0.0 scope documented below and leaves the `latest` dist-tag unchanged.
40
+
41
+ Install it with `yarn add @bearei/contracts@next` or pin `@bearei/contracts@2.0.0-dev.2`.
42
+
7
43
  ## 2.0.0 — 2026-10-26
8
44
 
9
45
  ### Added
10
46
 
11
- - `HTTP_EXCEPTION_CODE` and `HttpExceptionCode`, moved from `@bearei/nest` without changing any
12
- numeric value.
13
- - `ApiErrorBody` with the normalized `{code, message, statusCode}` shape.
14
- - `DEFAULT_PAGE_SIZE`, `MAX_PAGE_SIZE`, `PaginationQuery` and `PaginatedResult<T>`.
15
- - `RESERVED_REQUEST_HEADER` and `ReservedRequestHeaderName` for the six `x-bearei-*` headers.
16
- - `LANGUAGE`, `Language`, `ORDER` and `Order`, moved from `@bearei/nest`.
17
- - Dual ESM and CommonJS builds with matching declaration files.
47
+ - `HTTP_EXCEPTION_CODE` and `HttpExceptionCode`, moved from `@bearei/nest` without changing any
48
+ numeric value.
49
+ - `ApiErrorBody` with the normalized `{code, message, statusCode}` shape.
50
+ - `DEFAULT_PAGE_SIZE`, `MAX_PAGE_SIZE`, `PaginationQuery` and `PaginatedResult<T>`.
51
+ - `RESERVED_REQUEST_HEADER` and `ReservedRequestHeaderName` for the six `x-bearei-*` headers.
52
+ - `LANGUAGE`, `Language`, `ORDER` and `Order`, moved from `@bearei/nest`.
53
+ - Dual ESM and CommonJS builds with matching declaration files.
package/README.md CHANGED
@@ -5,15 +5,17 @@ runtime dependencies and ships both ESM and CommonJS builds.
5
5
 
6
6
  English | [中文](./README.zh-CN.md)
7
7
 
8
- | Export | Kind | Purpose |
9
- | ---------------------------------------------------------- | ----- | --------------------------------------------------- |
10
- | `HTTP_EXCEPTION_CODE`, `HttpExceptionCode` | value | Numeric error codes shared by services and clients |
11
- | `ApiErrorBody` | type | Normalized error body `{code, message, statusCode}` |
12
- | `DEFAULT_PAGE_SIZE`, `MAX_PAGE_SIZE` | value | Paging limits used by every list endpoint |
13
- | `PaginationQuery`, `PaginatedResult<T>` | type | Paging request fields and page envelope |
14
- | `RESERVED_REQUEST_HEADER`, `ReservedRequestHeaderName` | value | Headers set by the gateway or authentication layer |
15
- | `LANGUAGE`, `Language` | value | Locale values |
16
- | `ORDER`, `Order` | value | Sort order values |
8
+ | Export | Kind | Purpose |
9
+ | ------------------------------------------------------ | ----- | --------------------------------------------------- |
10
+ | `HTTP_EXCEPTION_CODE`, `HttpExceptionCode` | value | Numeric error codes shared by services and clients |
11
+ | `ApiErrorBody` | type | Normalized error body `{code, message, statusCode}` |
12
+ | `DEFAULT_PAGE_SIZE`, `MAX_PAGE_SIZE` | value | Paging limits used by every list endpoint |
13
+ | `PaginationQuery`, `PaginatedResult<T>` | type | Paging request fields and page envelope |
14
+ | `RESERVED_REQUEST_HEADER`, `ReservedRequestHeaderName` | value | Headers set by the gateway or authentication layer |
15
+ | `LANGUAGE`, `Language` | value | Locale values |
16
+ | `ORDER`, `Order` | value | Sort order values |
17
+ | `PERMISSION`, `Permission` | value | Permission values used by services and clients |
18
+ | `SUBSCRIPTION_FEATURE`, `SubscriptionFeature` | value | Subscription feature values scoped like permissions |
17
19
 
18
20
  ## Install
19
21
 
@@ -58,7 +60,7 @@ Only values and types that both ends of a wire boundary must agree on belong her
58
60
  - numeric error codes and error response bodies
59
61
  - query and response shapes shared by API clients and services
60
62
  - reserved request header names
61
- - cross-project enums such as language and sort order
63
+ - cross-project enums such as language, sort order, permissions and subscription features
62
64
 
63
65
  Framework-specific code does not belong here: NestJS decorators, guards and interceptors,
64
66
  TypeORM entities, HTTP clients, persistence, and service-only DTOs stay in their own libraries.
@@ -70,6 +72,6 @@ existing value; renaming a code is also a breaking change for consumers that imp
70
72
 
71
73
  ```bash
72
74
  yarn install
73
- yarn verify # lint + typecheck + coverage + build
74
- yarn pack:check # pack once and inspect the tarball
75
+ yarn verify # format + lint + typecheck + coverage + build
76
+ yarn run pack # pack once and inspect the tarball
75
77
  ```
package/README.zh-CN.md CHANGED
@@ -5,15 +5,17 @@ ESM 与 CommonJS 两种产物。
5
5
 
6
6
  [English](./README.md) | 中文
7
7
 
8
- | 导出 | 类型 | 用途 |
9
- | ---------------------------------------------------------- | ----- | -------------------------------------------- |
10
- | `HTTP_EXCEPTION_CODE`、`HttpExceptionCode` | 值 | 服务与客户端共享的数字错误码 |
11
- | `ApiErrorBody` | 类型 | 统一错误体 `{code, message, statusCode}` |
12
- | `DEFAULT_PAGE_SIZE`、`MAX_PAGE_SIZE` | 值 | 所有列表接口使用的分页上限 |
13
- | `PaginationQuery`、`PaginatedResult<T>` | 类型 | 分页请求字段与分页响应信封 |
14
- | `RESERVED_REQUEST_HEADER`、`ReservedRequestHeaderName` | 值 | 由网关或认证层写入的保留请求头 |
15
- | `LANGUAGE`、`Language` | 值 | 语言值 |
16
- | `ORDER`、`Order` | 值 | 排序值 |
8
+ | 导出 | 类型 | 用途 |
9
+ | ------------------------------------------------------ | ---- | ---------------------------------------- |
10
+ | `HTTP_EXCEPTION_CODE`、`HttpExceptionCode` | 值 | 服务与客户端共享的数字错误码 |
11
+ | `ApiErrorBody` | 类型 | 统一错误体 `{code, message, statusCode}` |
12
+ | `DEFAULT_PAGE_SIZE`、`MAX_PAGE_SIZE` | 值 | 所有列表接口使用的分页上限 |
13
+ | `PaginationQuery`、`PaginatedResult<T>` | 类型 | 分页请求字段与分页响应信封 |
14
+ | `RESERVED_REQUEST_HEADER`、`ReservedRequestHeaderName` | 值 | 由网关或认证层写入的保留请求头 |
15
+ | `LANGUAGE`、`Language` | 值 | 语言值 |
16
+ | `ORDER`、`Order` | 值 | 排序值 |
17
+ | `PERMISSION`、`Permission` | 值 | 服务与客户端共用的权限值 |
18
+ | `SUBSCRIPTION_FEATURE`、`SubscriptionFeature` | 值 | 订阅特性值,与权限使用相同的区域写法 |
17
19
 
18
20
  ## 安装
19
21
 
@@ -58,7 +60,7 @@ const page: PaginatedResult<{id: string}> = {
58
60
  - 数字错误码与错误响应体
59
61
  - API 客户端与服务共享的查询、响应结构
60
62
  - 保留请求头名称
61
- - 语言、排序等跨项目枚举
63
+ - 语言、排序、权限、订阅特性等跨项目枚举
62
64
 
63
65
  框架相关代码不放进这里:NestJS 装饰器、守卫、拦截器,TypeORM 实体,HTTP 客户端,持久化,
64
66
  以及仅服务端使用的 DTO 都留在各自的库中。
@@ -71,5 +73,5 @@ const page: PaginatedResult<{id: string}> = {
71
73
  ```bash
72
74
  yarn install
73
75
  yarn verify # lint + typecheck + 覆盖率 + 构建
74
- yarn pack:check # 打包一次并检查 tarball
76
+ yarn run pack # 打包一次并检查 tarball
75
77
  ```
package/dist/index.d.mts CHANGED
@@ -9,6 +9,7 @@ declare const HTTP_EXCEPTION_CODE: {
9
9
  readonly APPLE_IAP_TRANSACTION_VERIFICATION_FAILED: 403005;
10
10
  readonly BAD_GATEWAY: 502000;
11
11
  readonly BAD_REQUEST: 400000;
12
+ readonly CONFLICT: 409000;
12
13
  readonly CONTAINS_INVALID_REQUEST_HEADERS: 400001;
13
14
  readonly EMAIL_CODE_INVALID: 401004;
14
15
  readonly EMAIL_SENDING_FAILED: 400005;
@@ -84,5 +85,84 @@ interface PaginatedResult<T> {
84
85
  total?: number;
85
86
  }
86
87
 
87
- export { DEFAULT_PAGE_SIZE, HTTP_EXCEPTION_CODE, LANGUAGE, MAX_PAGE_SIZE, ORDER, RESERVED_REQUEST_HEADER };
88
- export type { ApiErrorBody, HttpExceptionCode, Language, Order, PaginatedResult, PaginationQuery, ReservedRequestHeaderName };
88
+ declare const PERMISSION: {
89
+ readonly ACTION_LOG_CREATE: "action-log:create";
90
+ readonly ACTION_LOG_DELETE: "action-log:delete";
91
+ readonly ACTION_LOG_READ: "action-log:read";
92
+ readonly ACTION_LOG_UPDATE: "action-log:update";
93
+ readonly BOOKMARK_CARTON_CREATE: "bookmark-carton:create";
94
+ readonly BOOKMARK_CARTON_DELETE: "bookmark-carton:delete";
95
+ readonly BOOKMARK_CARTON_READ: "bookmark-carton:read";
96
+ readonly BOOKMARK_CARTON_UPDATE: "bookmark-carton:update";
97
+ readonly BOOKMARK_CREATE: "bookmark:create";
98
+ readonly BOOKMARK_DELETE: "bookmark:delete";
99
+ readonly BOOKMARK_READ: "bookmark:read";
100
+ readonly BOOKMARK_TAG_CREATE: "bookmark-tag:create";
101
+ readonly BOOKMARK_TAG_DELETE: "bookmark-tag:delete";
102
+ readonly BOOKMARK_TAG_READ: "bookmark-tag:read";
103
+ readonly BOOKMARK_TAG_UPDATE: "bookmark-tag:update";
104
+ readonly BOOKMARK_UPDATE: "bookmark:update";
105
+ readonly EMAIL_CAPTCHA_CREATE: "email-captcha:create";
106
+ readonly EMAIL_CAPTCHA_DELETE: "email-captcha:delete";
107
+ readonly EMAIL_CAPTCHA_READ: "email-captcha:read";
108
+ readonly EMAIL_CAPTCHA_UPDATE: "email-captcha:update";
109
+ readonly EMAIL_CREATE: "email:create";
110
+ readonly EMAIL_DELETE: "email:delete";
111
+ readonly EMAIL_READ: "email:read";
112
+ readonly EMAIL_UPDATE: "email:update";
113
+ readonly PERMISSION_CREATE: "permission:create";
114
+ readonly PERMISSION_DELETE: "permission:delete";
115
+ readonly PERMISSION_PROJECT_CREATE: "permission-project:create";
116
+ readonly PERMISSION_PROJECT_DELETE: "permission-project:delete";
117
+ readonly PERMISSION_PROJECT_READ: "permission-project:read";
118
+ readonly PERMISSION_PROJECT_UPDATE: "permission-project:update";
119
+ readonly PERMISSION_READ: "permission:read";
120
+ readonly PERMISSION_RESOURCE_CREATE: "permission-resource:create";
121
+ readonly PERMISSION_RESOURCE_DELETE: "permission-resource:delete";
122
+ readonly PERMISSION_RESOURCE_READ: "permission-resource:read";
123
+ readonly PERMISSION_RESOURCE_UPDATE: "permission-resource:update";
124
+ readonly PERMISSION_ROLE_CREATE: "permission-role:create";
125
+ readonly PERMISSION_ROLE_DELETE: "permission-role:delete";
126
+ readonly PERMISSION_ROLE_GROUP_CREATE: "permission-role-group:create";
127
+ readonly PERMISSION_ROLE_GROUP_DELETE: "permission-role-group:delete";
128
+ readonly PERMISSION_ROLE_GROUP_READ: "permission-role-group:read";
129
+ readonly PERMISSION_ROLE_GROUP_UPDATE: "permission-role-group:update";
130
+ readonly PERMISSION_ROLE_READ: "permission-role:read";
131
+ readonly PERMISSION_ROLE_UPDATE: "permission-role:update";
132
+ readonly PERMISSION_UPDATE: "permission:update";
133
+ readonly SUBSCRIPTION_CREATE: "subscription:create";
134
+ readonly SUBSCRIPTION_DELETE: "subscription:delete";
135
+ readonly SUBSCRIPTION_FEATURE_CREATE: "subscription-feature:create";
136
+ readonly SUBSCRIPTION_FEATURE_DELETE: "subscription-feature:delete";
137
+ readonly SUBSCRIPTION_FEATURE_READ: "subscription-feature:read";
138
+ readonly SUBSCRIPTION_FEATURE_UPDATE: "subscription-feature:update";
139
+ readonly SUBSCRIPTION_ORDER_CREATE: "subscription-order:create";
140
+ readonly SUBSCRIPTION_ORDER_DELETE: "subscription-order:delete";
141
+ readonly SUBSCRIPTION_ORDER_READ: "subscription-order:read";
142
+ readonly SUBSCRIPTION_ORDER_UPDATE: "subscription-order:update";
143
+ readonly SUBSCRIPTION_PRODUCT_CREATE: "subscription-product:create";
144
+ readonly SUBSCRIPTION_PRODUCT_DELETE: "subscription-product:delete";
145
+ readonly SUBSCRIPTION_PRODUCT_READ: "subscription-product:read";
146
+ readonly SUBSCRIPTION_PRODUCT_UPDATE: "subscription-product:update";
147
+ readonly SUBSCRIPTION_READ: "subscription:read";
148
+ readonly SUBSCRIPTION_UPDATE: "subscription:update";
149
+ readonly USER_CREATE: "user:create";
150
+ readonly USER_DELETE: "user:delete";
151
+ readonly USER_READ: "user:read";
152
+ readonly USER_UPDATE: "user:update";
153
+ readonly VERSION_LOG_CREATE: "version-log:create";
154
+ readonly VERSION_LOG_DELETE: "version-log:delete";
155
+ readonly VERSION_LOG_READ: "version-log:read";
156
+ readonly VERSION_LOG_UPDATE: "version-log:update";
157
+ };
158
+ type Permission = (typeof PERMISSION)[keyof typeof PERMISSION];
159
+
160
+ declare const SUBSCRIPTION_FEATURE: {
161
+ readonly BOOKMARK_CLOUD_SYNC: "bookmark:cloud_sync";
162
+ readonly CARTON_CLOUD_SYNC: "bookmark:carton_cloud_sync";
163
+ readonly TAG_CLOUD_SYNC: "bookmark:tag_cloud_sync";
164
+ };
165
+ type SubscriptionFeature = (typeof SUBSCRIPTION_FEATURE)[keyof typeof SUBSCRIPTION_FEATURE];
166
+
167
+ export { DEFAULT_PAGE_SIZE, HTTP_EXCEPTION_CODE, LANGUAGE, MAX_PAGE_SIZE, ORDER, PERMISSION, RESERVED_REQUEST_HEADER, SUBSCRIPTION_FEATURE };
168
+ export type { ApiErrorBody, HttpExceptionCode, Language, Order, PaginatedResult, PaginationQuery, Permission, ReservedRequestHeaderName, SubscriptionFeature };
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ declare const HTTP_EXCEPTION_CODE: {
9
9
  readonly APPLE_IAP_TRANSACTION_VERIFICATION_FAILED: 403005;
10
10
  readonly BAD_GATEWAY: 502000;
11
11
  readonly BAD_REQUEST: 400000;
12
+ readonly CONFLICT: 409000;
12
13
  readonly CONTAINS_INVALID_REQUEST_HEADERS: 400001;
13
14
  readonly EMAIL_CODE_INVALID: 401004;
14
15
  readonly EMAIL_SENDING_FAILED: 400005;
@@ -84,5 +85,84 @@ interface PaginatedResult<T> {
84
85
  total?: number;
85
86
  }
86
87
 
87
- export { DEFAULT_PAGE_SIZE, HTTP_EXCEPTION_CODE, LANGUAGE, MAX_PAGE_SIZE, ORDER, RESERVED_REQUEST_HEADER };
88
- export type { ApiErrorBody, HttpExceptionCode, Language, Order, PaginatedResult, PaginationQuery, ReservedRequestHeaderName };
88
+ declare const PERMISSION: {
89
+ readonly ACTION_LOG_CREATE: "action-log:create";
90
+ readonly ACTION_LOG_DELETE: "action-log:delete";
91
+ readonly ACTION_LOG_READ: "action-log:read";
92
+ readonly ACTION_LOG_UPDATE: "action-log:update";
93
+ readonly BOOKMARK_CARTON_CREATE: "bookmark-carton:create";
94
+ readonly BOOKMARK_CARTON_DELETE: "bookmark-carton:delete";
95
+ readonly BOOKMARK_CARTON_READ: "bookmark-carton:read";
96
+ readonly BOOKMARK_CARTON_UPDATE: "bookmark-carton:update";
97
+ readonly BOOKMARK_CREATE: "bookmark:create";
98
+ readonly BOOKMARK_DELETE: "bookmark:delete";
99
+ readonly BOOKMARK_READ: "bookmark:read";
100
+ readonly BOOKMARK_TAG_CREATE: "bookmark-tag:create";
101
+ readonly BOOKMARK_TAG_DELETE: "bookmark-tag:delete";
102
+ readonly BOOKMARK_TAG_READ: "bookmark-tag:read";
103
+ readonly BOOKMARK_TAG_UPDATE: "bookmark-tag:update";
104
+ readonly BOOKMARK_UPDATE: "bookmark:update";
105
+ readonly EMAIL_CAPTCHA_CREATE: "email-captcha:create";
106
+ readonly EMAIL_CAPTCHA_DELETE: "email-captcha:delete";
107
+ readonly EMAIL_CAPTCHA_READ: "email-captcha:read";
108
+ readonly EMAIL_CAPTCHA_UPDATE: "email-captcha:update";
109
+ readonly EMAIL_CREATE: "email:create";
110
+ readonly EMAIL_DELETE: "email:delete";
111
+ readonly EMAIL_READ: "email:read";
112
+ readonly EMAIL_UPDATE: "email:update";
113
+ readonly PERMISSION_CREATE: "permission:create";
114
+ readonly PERMISSION_DELETE: "permission:delete";
115
+ readonly PERMISSION_PROJECT_CREATE: "permission-project:create";
116
+ readonly PERMISSION_PROJECT_DELETE: "permission-project:delete";
117
+ readonly PERMISSION_PROJECT_READ: "permission-project:read";
118
+ readonly PERMISSION_PROJECT_UPDATE: "permission-project:update";
119
+ readonly PERMISSION_READ: "permission:read";
120
+ readonly PERMISSION_RESOURCE_CREATE: "permission-resource:create";
121
+ readonly PERMISSION_RESOURCE_DELETE: "permission-resource:delete";
122
+ readonly PERMISSION_RESOURCE_READ: "permission-resource:read";
123
+ readonly PERMISSION_RESOURCE_UPDATE: "permission-resource:update";
124
+ readonly PERMISSION_ROLE_CREATE: "permission-role:create";
125
+ readonly PERMISSION_ROLE_DELETE: "permission-role:delete";
126
+ readonly PERMISSION_ROLE_GROUP_CREATE: "permission-role-group:create";
127
+ readonly PERMISSION_ROLE_GROUP_DELETE: "permission-role-group:delete";
128
+ readonly PERMISSION_ROLE_GROUP_READ: "permission-role-group:read";
129
+ readonly PERMISSION_ROLE_GROUP_UPDATE: "permission-role-group:update";
130
+ readonly PERMISSION_ROLE_READ: "permission-role:read";
131
+ readonly PERMISSION_ROLE_UPDATE: "permission-role:update";
132
+ readonly PERMISSION_UPDATE: "permission:update";
133
+ readonly SUBSCRIPTION_CREATE: "subscription:create";
134
+ readonly SUBSCRIPTION_DELETE: "subscription:delete";
135
+ readonly SUBSCRIPTION_FEATURE_CREATE: "subscription-feature:create";
136
+ readonly SUBSCRIPTION_FEATURE_DELETE: "subscription-feature:delete";
137
+ readonly SUBSCRIPTION_FEATURE_READ: "subscription-feature:read";
138
+ readonly SUBSCRIPTION_FEATURE_UPDATE: "subscription-feature:update";
139
+ readonly SUBSCRIPTION_ORDER_CREATE: "subscription-order:create";
140
+ readonly SUBSCRIPTION_ORDER_DELETE: "subscription-order:delete";
141
+ readonly SUBSCRIPTION_ORDER_READ: "subscription-order:read";
142
+ readonly SUBSCRIPTION_ORDER_UPDATE: "subscription-order:update";
143
+ readonly SUBSCRIPTION_PRODUCT_CREATE: "subscription-product:create";
144
+ readonly SUBSCRIPTION_PRODUCT_DELETE: "subscription-product:delete";
145
+ readonly SUBSCRIPTION_PRODUCT_READ: "subscription-product:read";
146
+ readonly SUBSCRIPTION_PRODUCT_UPDATE: "subscription-product:update";
147
+ readonly SUBSCRIPTION_READ: "subscription:read";
148
+ readonly SUBSCRIPTION_UPDATE: "subscription:update";
149
+ readonly USER_CREATE: "user:create";
150
+ readonly USER_DELETE: "user:delete";
151
+ readonly USER_READ: "user:read";
152
+ readonly USER_UPDATE: "user:update";
153
+ readonly VERSION_LOG_CREATE: "version-log:create";
154
+ readonly VERSION_LOG_DELETE: "version-log:delete";
155
+ readonly VERSION_LOG_READ: "version-log:read";
156
+ readonly VERSION_LOG_UPDATE: "version-log:update";
157
+ };
158
+ type Permission = (typeof PERMISSION)[keyof typeof PERMISSION];
159
+
160
+ declare const SUBSCRIPTION_FEATURE: {
161
+ readonly BOOKMARK_CLOUD_SYNC: "bookmark:cloud_sync";
162
+ readonly CARTON_CLOUD_SYNC: "bookmark:carton_cloud_sync";
163
+ readonly TAG_CLOUD_SYNC: "bookmark:tag_cloud_sync";
164
+ };
165
+ type SubscriptionFeature = (typeof SUBSCRIPTION_FEATURE)[keyof typeof SUBSCRIPTION_FEATURE];
166
+
167
+ export { DEFAULT_PAGE_SIZE, HTTP_EXCEPTION_CODE, LANGUAGE, MAX_PAGE_SIZE, ORDER, PERMISSION, RESERVED_REQUEST_HEADER, SUBSCRIPTION_FEATURE };
168
+ export type { ApiErrorBody, HttpExceptionCode, Language, Order, PaginatedResult, PaginationQuery, Permission, ReservedRequestHeaderName, SubscriptionFeature };
package/dist/index.js CHANGED
@@ -25,7 +25,9 @@ __export(index_exports, {
25
25
  LANGUAGE: () => LANGUAGE,
26
26
  MAX_PAGE_SIZE: () => MAX_PAGE_SIZE,
27
27
  ORDER: () => ORDER,
28
- RESERVED_REQUEST_HEADER: () => RESERVED_REQUEST_HEADER
28
+ PERMISSION: () => PERMISSION,
29
+ RESERVED_REQUEST_HEADER: () => RESERVED_REQUEST_HEADER,
30
+ SUBSCRIPTION_FEATURE: () => SUBSCRIPTION_FEATURE
29
31
  });
30
32
  module.exports = __toCommonJS(index_exports);
31
33
 
@@ -37,6 +39,7 @@ var HTTP_EXCEPTION_CODE = {
37
39
  APPLE_IAP_TRANSACTION_VERIFICATION_FAILED: 403005,
38
40
  BAD_GATEWAY: 502e3,
39
41
  BAD_REQUEST: 4e5,
42
+ CONFLICT: 409e3,
40
43
  CONTAINS_INVALID_REQUEST_HEADERS: 400001,
41
44
  EMAIL_CODE_INVALID: 401004,
42
45
  EMAIL_SENDING_FAILED: 400005,
@@ -90,6 +93,85 @@ var ORDER = {
90
93
  // src/pagination.ts
91
94
  var DEFAULT_PAGE_SIZE = 10;
92
95
  var MAX_PAGE_SIZE = 1024;
96
+
97
+ // src/permission.ts
98
+ var PERMISSION = {
99
+ ACTION_LOG_CREATE: "action-log:create",
100
+ ACTION_LOG_DELETE: "action-log:delete",
101
+ ACTION_LOG_READ: "action-log:read",
102
+ ACTION_LOG_UPDATE: "action-log:update",
103
+ BOOKMARK_CARTON_CREATE: "bookmark-carton:create",
104
+ BOOKMARK_CARTON_DELETE: "bookmark-carton:delete",
105
+ BOOKMARK_CARTON_READ: "bookmark-carton:read",
106
+ BOOKMARK_CARTON_UPDATE: "bookmark-carton:update",
107
+ BOOKMARK_CREATE: "bookmark:create",
108
+ BOOKMARK_DELETE: "bookmark:delete",
109
+ BOOKMARK_READ: "bookmark:read",
110
+ BOOKMARK_TAG_CREATE: "bookmark-tag:create",
111
+ BOOKMARK_TAG_DELETE: "bookmark-tag:delete",
112
+ BOOKMARK_TAG_READ: "bookmark-tag:read",
113
+ BOOKMARK_TAG_UPDATE: "bookmark-tag:update",
114
+ BOOKMARK_UPDATE: "bookmark:update",
115
+ EMAIL_CAPTCHA_CREATE: "email-captcha:create",
116
+ EMAIL_CAPTCHA_DELETE: "email-captcha:delete",
117
+ EMAIL_CAPTCHA_READ: "email-captcha:read",
118
+ EMAIL_CAPTCHA_UPDATE: "email-captcha:update",
119
+ EMAIL_CREATE: "email:create",
120
+ EMAIL_DELETE: "email:delete",
121
+ EMAIL_READ: "email:read",
122
+ EMAIL_UPDATE: "email:update",
123
+ PERMISSION_CREATE: "permission:create",
124
+ PERMISSION_DELETE: "permission:delete",
125
+ PERMISSION_PROJECT_CREATE: "permission-project:create",
126
+ PERMISSION_PROJECT_DELETE: "permission-project:delete",
127
+ PERMISSION_PROJECT_READ: "permission-project:read",
128
+ PERMISSION_PROJECT_UPDATE: "permission-project:update",
129
+ PERMISSION_READ: "permission:read",
130
+ PERMISSION_RESOURCE_CREATE: "permission-resource:create",
131
+ PERMISSION_RESOURCE_DELETE: "permission-resource:delete",
132
+ PERMISSION_RESOURCE_READ: "permission-resource:read",
133
+ PERMISSION_RESOURCE_UPDATE: "permission-resource:update",
134
+ PERMISSION_ROLE_CREATE: "permission-role:create",
135
+ PERMISSION_ROLE_DELETE: "permission-role:delete",
136
+ PERMISSION_ROLE_GROUP_CREATE: "permission-role-group:create",
137
+ PERMISSION_ROLE_GROUP_DELETE: "permission-role-group:delete",
138
+ PERMISSION_ROLE_GROUP_READ: "permission-role-group:read",
139
+ PERMISSION_ROLE_GROUP_UPDATE: "permission-role-group:update",
140
+ PERMISSION_ROLE_READ: "permission-role:read",
141
+ PERMISSION_ROLE_UPDATE: "permission-role:update",
142
+ PERMISSION_UPDATE: "permission:update",
143
+ SUBSCRIPTION_CREATE: "subscription:create",
144
+ SUBSCRIPTION_DELETE: "subscription:delete",
145
+ SUBSCRIPTION_FEATURE_CREATE: "subscription-feature:create",
146
+ SUBSCRIPTION_FEATURE_DELETE: "subscription-feature:delete",
147
+ SUBSCRIPTION_FEATURE_READ: "subscription-feature:read",
148
+ SUBSCRIPTION_FEATURE_UPDATE: "subscription-feature:update",
149
+ SUBSCRIPTION_ORDER_CREATE: "subscription-order:create",
150
+ SUBSCRIPTION_ORDER_DELETE: "subscription-order:delete",
151
+ SUBSCRIPTION_ORDER_READ: "subscription-order:read",
152
+ SUBSCRIPTION_ORDER_UPDATE: "subscription-order:update",
153
+ SUBSCRIPTION_PRODUCT_CREATE: "subscription-product:create",
154
+ SUBSCRIPTION_PRODUCT_DELETE: "subscription-product:delete",
155
+ SUBSCRIPTION_PRODUCT_READ: "subscription-product:read",
156
+ SUBSCRIPTION_PRODUCT_UPDATE: "subscription-product:update",
157
+ SUBSCRIPTION_READ: "subscription:read",
158
+ SUBSCRIPTION_UPDATE: "subscription:update",
159
+ USER_CREATE: "user:create",
160
+ USER_DELETE: "user:delete",
161
+ USER_READ: "user:read",
162
+ USER_UPDATE: "user:update",
163
+ VERSION_LOG_CREATE: "version-log:create",
164
+ VERSION_LOG_DELETE: "version-log:delete",
165
+ VERSION_LOG_READ: "version-log:read",
166
+ VERSION_LOG_UPDATE: "version-log:update"
167
+ };
168
+
169
+ // src/subscription-feature.ts
170
+ var SUBSCRIPTION_FEATURE = {
171
+ BOOKMARK_CLOUD_SYNC: "bookmark:cloud_sync",
172
+ CARTON_CLOUD_SYNC: "bookmark:carton_cloud_sync",
173
+ TAG_CLOUD_SYNC: "bookmark:tag_cloud_sync"
174
+ };
93
175
  // Annotate the CommonJS export names for ESM import in node:
94
176
  0 && (module.exports = {
95
177
  DEFAULT_PAGE_SIZE,
@@ -97,5 +179,7 @@ var MAX_PAGE_SIZE = 1024;
97
179
  LANGUAGE,
98
180
  MAX_PAGE_SIZE,
99
181
  ORDER,
100
- RESERVED_REQUEST_HEADER
182
+ PERMISSION,
183
+ RESERVED_REQUEST_HEADER,
184
+ SUBSCRIPTION_FEATURE
101
185
  });
package/dist/index.mjs CHANGED
@@ -6,6 +6,7 @@ var HTTP_EXCEPTION_CODE = {
6
6
  APPLE_IAP_TRANSACTION_VERIFICATION_FAILED: 403005,
7
7
  BAD_GATEWAY: 502e3,
8
8
  BAD_REQUEST: 4e5,
9
+ CONFLICT: 409e3,
9
10
  CONTAINS_INVALID_REQUEST_HEADERS: 400001,
10
11
  EMAIL_CODE_INVALID: 401004,
11
12
  EMAIL_SENDING_FAILED: 400005,
@@ -59,11 +60,92 @@ var ORDER = {
59
60
  // src/pagination.ts
60
61
  var DEFAULT_PAGE_SIZE = 10;
61
62
  var MAX_PAGE_SIZE = 1024;
63
+
64
+ // src/permission.ts
65
+ var PERMISSION = {
66
+ ACTION_LOG_CREATE: "action-log:create",
67
+ ACTION_LOG_DELETE: "action-log:delete",
68
+ ACTION_LOG_READ: "action-log:read",
69
+ ACTION_LOG_UPDATE: "action-log:update",
70
+ BOOKMARK_CARTON_CREATE: "bookmark-carton:create",
71
+ BOOKMARK_CARTON_DELETE: "bookmark-carton:delete",
72
+ BOOKMARK_CARTON_READ: "bookmark-carton:read",
73
+ BOOKMARK_CARTON_UPDATE: "bookmark-carton:update",
74
+ BOOKMARK_CREATE: "bookmark:create",
75
+ BOOKMARK_DELETE: "bookmark:delete",
76
+ BOOKMARK_READ: "bookmark:read",
77
+ BOOKMARK_TAG_CREATE: "bookmark-tag:create",
78
+ BOOKMARK_TAG_DELETE: "bookmark-tag:delete",
79
+ BOOKMARK_TAG_READ: "bookmark-tag:read",
80
+ BOOKMARK_TAG_UPDATE: "bookmark-tag:update",
81
+ BOOKMARK_UPDATE: "bookmark:update",
82
+ EMAIL_CAPTCHA_CREATE: "email-captcha:create",
83
+ EMAIL_CAPTCHA_DELETE: "email-captcha:delete",
84
+ EMAIL_CAPTCHA_READ: "email-captcha:read",
85
+ EMAIL_CAPTCHA_UPDATE: "email-captcha:update",
86
+ EMAIL_CREATE: "email:create",
87
+ EMAIL_DELETE: "email:delete",
88
+ EMAIL_READ: "email:read",
89
+ EMAIL_UPDATE: "email:update",
90
+ PERMISSION_CREATE: "permission:create",
91
+ PERMISSION_DELETE: "permission:delete",
92
+ PERMISSION_PROJECT_CREATE: "permission-project:create",
93
+ PERMISSION_PROJECT_DELETE: "permission-project:delete",
94
+ PERMISSION_PROJECT_READ: "permission-project:read",
95
+ PERMISSION_PROJECT_UPDATE: "permission-project:update",
96
+ PERMISSION_READ: "permission:read",
97
+ PERMISSION_RESOURCE_CREATE: "permission-resource:create",
98
+ PERMISSION_RESOURCE_DELETE: "permission-resource:delete",
99
+ PERMISSION_RESOURCE_READ: "permission-resource:read",
100
+ PERMISSION_RESOURCE_UPDATE: "permission-resource:update",
101
+ PERMISSION_ROLE_CREATE: "permission-role:create",
102
+ PERMISSION_ROLE_DELETE: "permission-role:delete",
103
+ PERMISSION_ROLE_GROUP_CREATE: "permission-role-group:create",
104
+ PERMISSION_ROLE_GROUP_DELETE: "permission-role-group:delete",
105
+ PERMISSION_ROLE_GROUP_READ: "permission-role-group:read",
106
+ PERMISSION_ROLE_GROUP_UPDATE: "permission-role-group:update",
107
+ PERMISSION_ROLE_READ: "permission-role:read",
108
+ PERMISSION_ROLE_UPDATE: "permission-role:update",
109
+ PERMISSION_UPDATE: "permission:update",
110
+ SUBSCRIPTION_CREATE: "subscription:create",
111
+ SUBSCRIPTION_DELETE: "subscription:delete",
112
+ SUBSCRIPTION_FEATURE_CREATE: "subscription-feature:create",
113
+ SUBSCRIPTION_FEATURE_DELETE: "subscription-feature:delete",
114
+ SUBSCRIPTION_FEATURE_READ: "subscription-feature:read",
115
+ SUBSCRIPTION_FEATURE_UPDATE: "subscription-feature:update",
116
+ SUBSCRIPTION_ORDER_CREATE: "subscription-order:create",
117
+ SUBSCRIPTION_ORDER_DELETE: "subscription-order:delete",
118
+ SUBSCRIPTION_ORDER_READ: "subscription-order:read",
119
+ SUBSCRIPTION_ORDER_UPDATE: "subscription-order:update",
120
+ SUBSCRIPTION_PRODUCT_CREATE: "subscription-product:create",
121
+ SUBSCRIPTION_PRODUCT_DELETE: "subscription-product:delete",
122
+ SUBSCRIPTION_PRODUCT_READ: "subscription-product:read",
123
+ SUBSCRIPTION_PRODUCT_UPDATE: "subscription-product:update",
124
+ SUBSCRIPTION_READ: "subscription:read",
125
+ SUBSCRIPTION_UPDATE: "subscription:update",
126
+ USER_CREATE: "user:create",
127
+ USER_DELETE: "user:delete",
128
+ USER_READ: "user:read",
129
+ USER_UPDATE: "user:update",
130
+ VERSION_LOG_CREATE: "version-log:create",
131
+ VERSION_LOG_DELETE: "version-log:delete",
132
+ VERSION_LOG_READ: "version-log:read",
133
+ VERSION_LOG_UPDATE: "version-log:update"
134
+ };
135
+
136
+ // src/subscription-feature.ts
137
+ var SUBSCRIPTION_FEATURE = {
138
+ BOOKMARK_CLOUD_SYNC: "bookmark:cloud_sync",
139
+ CARTON_CLOUD_SYNC: "bookmark:carton_cloud_sync",
140
+ TAG_CLOUD_SYNC: "bookmark:tag_cloud_sync"
141
+ };
62
142
  export {
63
143
  DEFAULT_PAGE_SIZE,
64
144
  HTTP_EXCEPTION_CODE,
65
145
  LANGUAGE,
66
146
  MAX_PAGE_SIZE,
67
147
  ORDER,
68
- RESERVED_REQUEST_HEADER
148
+ PERMISSION,
149
+ RESERVED_REQUEST_HEADER,
150
+ SUBSCRIPTION_FEATURE
69
151
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bearei/contracts",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Framework-agnostic wire contracts shared by Bearei services, clients and apps",
5
5
  "keywords": [
6
6
  "bearei",
@@ -35,8 +35,7 @@
35
35
  "./package.json": "./package.json"
36
36
  },
37
37
  "files": [
38
- "dist",
39
- "CHANGELOG.md"
38
+ "dist"
40
39
  ],
41
40
  "sideEffects": false,
42
41
  "engines": {
@@ -46,9 +45,9 @@
46
45
  "access": "public"
47
46
  },
48
47
  "devDependencies": {
49
- "@bearei/eslint-config": "^2.0.0",
50
- "@bearei/jest-preset": "^2.0.0",
51
- "@bearei/tsconfig": "^2.0.0",
48
+ "@bearei/eslint-config": "^2.1.0-dev.2",
49
+ "@bearei/jest-preset": "^2.1.0-dev.2",
50
+ "@bearei/tsconfig": "^2.1.0-dev.2",
52
51
  "@types/jest": "^29.5.13",
53
52
  "eslint": "^9.37.0",
54
53
  "jest": "^29.7.0",
@@ -77,13 +76,14 @@
77
76
  },
78
77
  "scripts": {
79
78
  "build": "tsup",
79
+ "format": "prettier --write .",
80
80
  "lint": "eslint \"src/**/*.ts\"",
81
- "pack:check": "yarn pack -o /tmp/bearei-contracts.tgz && bash .github/scripts/verify-tarball.sh /tmp/bearei-contracts.tgz",
81
+ "pack": "yarn pack -o /tmp/bearei-contracts.tgz && bash .github/scripts/verify-tarball.sh /tmp/bearei-contracts.tgz",
82
82
  "prepack": "yarn build",
83
83
  "test": "jest",
84
84
  "test:coverage": "jest --coverage",
85
85
  "typecheck": "tsc --noEmit -p tsconfig.json",
86
- "verify": "yarn lint && yarn typecheck && yarn test:coverage && yarn build"
86
+ "verify": "yarn prettier --check . && yarn lint && yarn typecheck && yarn test:coverage && yarn build"
87
87
  },
88
- "packageManager": "yarn@4.18.0"
88
+ "packageManager": "yarn@4.18.0+sha512.fcb8716fe7cd0eece141ffc18b92193a9df9204c1ba83189c288835223fc0bbe64af473bab0d5e9927a7daeb5caf2bb07eb2787cc9338ca040ea125f2a1f2f7e"
89
89
  }