@forge/kvs 0.1.0-next.5 → 0.1.0-next.6

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.
@@ -30,14 +30,17 @@ describe('KVS', () => {
30
30
  body: JSON.stringify({ key: 'foo' })
31
31
  }));
32
32
  });
33
- it('should handle not found error', async () => {
33
+ it('should return undefined when get receives 404', async () => {
34
34
  const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
35
35
  status: 404,
36
- statusText: 'Not Found',
37
36
  headers: { 'x-trace-id': traceId }
38
37
  });
39
- const { sut } = prepare(response);
40
- await expect(sut.get('foo')).rejects.toMatchError(new errors_1.ForgeKvsAPIError({ status: 404, statusText: 'Not Found', traceId }, { code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }));
38
+ const { sut, apiClient } = prepare(response);
39
+ const rs = await sut.get('foo');
40
+ expect(rs).toBeUndefined();
41
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/get', expect.objectContaining({
42
+ body: JSON.stringify({ key: 'foo' })
43
+ }));
41
44
  });
42
45
  it('should handle unexpected response', async () => {
43
46
  const response = new Response(JSON.stringify({ code: 'INTERNAL_SERVER_ERROR', message: 'An internal server error has occurred' }), {
@@ -68,6 +71,18 @@ describe('KVS', () => {
68
71
  body: JSON.stringify({ key: 'foo' })
69
72
  }));
70
73
  });
74
+ it('should return undefined when getSecret receives 404', async () => {
75
+ const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
76
+ status: 404,
77
+ headers: { 'x-trace-id': traceId }
78
+ });
79
+ const { sut, apiClient } = prepare(response);
80
+ const rs = await sut.getSecret('foo');
81
+ expect(rs).toBeUndefined();
82
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/secret/get', expect.objectContaining({
83
+ body: JSON.stringify({ key: 'foo' })
84
+ }));
85
+ });
71
86
  it('should getEntity correctly', async () => {
72
87
  const response = new Response(JSON.stringify({ key: 'foo', value: { name: 'Jane Doe' } }), {
73
88
  status: 200,
@@ -80,6 +95,18 @@ describe('KVS', () => {
80
95
  body: JSON.stringify({ entityName: 'employees', key: 'foo' })
81
96
  }));
82
97
  });
98
+ it('should return undefined when getEntity receives 404', async () => {
99
+ const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
100
+ status: 404,
101
+ headers: { 'x-trace-id': traceId }
102
+ });
103
+ const { sut, apiClient } = prepare(response);
104
+ const rs = await sut.entity('employees').get('foo');
105
+ expect(rs).toBeUndefined();
106
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/entity/get', expect.objectContaining({
107
+ body: JSON.stringify({ entityName: 'employees', key: 'foo' })
108
+ }));
109
+ });
83
110
  it('should set correctly', async () => {
84
111
  const response = new Response(undefined, {
85
112
  status: 204,
@@ -128,6 +155,18 @@ describe('KVS', () => {
128
155
  body: JSON.stringify({ key: 'foo' })
129
156
  }));
130
157
  });
158
+ it('should return undefined when delete receives 404', async () => {
159
+ const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
160
+ status: 404,
161
+ headers: { 'x-trace-id': traceId }
162
+ });
163
+ const { sut, apiClient } = prepare(response);
164
+ const rs = await sut.delete('foo');
165
+ expect(rs).toBeUndefined();
166
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/delete', expect.objectContaining({
167
+ body: JSON.stringify({ key: 'foo' })
168
+ }));
169
+ });
131
170
  it('should deleteSecret correctly', async () => {
132
171
  const response = new Response(undefined, {
133
172
  status: 204,
@@ -140,6 +179,18 @@ describe('KVS', () => {
140
179
  body: JSON.stringify({ key: 'foo' })
141
180
  }));
142
181
  });
182
+ it('should return undefined when deleteSecret receives 404', async () => {
183
+ const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
184
+ status: 404,
185
+ headers: { 'x-trace-id': traceId }
186
+ });
187
+ const { sut, apiClient } = prepare(response);
188
+ const rs = await sut.deleteSecret('foo');
189
+ expect(rs).toBeUndefined();
190
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/secret/delete', expect.objectContaining({
191
+ body: JSON.stringify({ key: 'foo' })
192
+ }));
193
+ });
143
194
  it('should deleteEntity correctly', async () => {
144
195
  const response = new Response(undefined, {
145
196
  status: 204,
@@ -152,6 +203,18 @@ describe('KVS', () => {
152
203
  body: JSON.stringify({ entityName: 'employees', key: 'foo' })
153
204
  }));
154
205
  });
206
+ it('should return undefined when deleteEntity receives 404', async () => {
207
+ const response = new Response(JSON.stringify({ code: 'KEY_NOT_FOUND', message: 'Provided key does not exist' }), {
208
+ status: 404,
209
+ headers: { 'x-trace-id': traceId }
210
+ });
211
+ const { sut, apiClient } = prepare(response);
212
+ const rs = await sut.entity('employees').delete('foo');
213
+ expect(rs).toBeUndefined();
214
+ expect(apiClient).toHaveBeenCalledWith('/api/v1/entity/delete', expect.objectContaining({
215
+ body: JSON.stringify({ entityName: 'employees', key: 'foo' })
216
+ }));
217
+ });
155
218
  it('should query correctly', async () => {
156
219
  const response = new Response(JSON.stringify({ cursor: 'third-page', data: [{ key: 'foo', value: 'bar' }] }), {
157
220
  status: 200,
package/out/entity.d.ts CHANGED
@@ -5,7 +5,7 @@ export declare class EntityImpl<T> implements KvsEntity<T> {
5
5
  private readonly entityName;
6
6
  private readonly storageApi;
7
7
  constructor(entityName: string, storageApi: StorageApi);
8
- get(key: string): Promise<T>;
8
+ get(key: string): Promise<T | undefined>;
9
9
  set(key: string, value: T): Promise<void>;
10
10
  delete(key: string): Promise<void>;
11
11
  query(): IndexQueryBuilder<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU;IAGzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAO5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;CAG9B"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU;IAGzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAOxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;CAG9B"}
@@ -2,18 +2,18 @@ import { IndexQueryBuilder } from './entity-query';
2
2
  import { QueryBuilder } from './query';
3
3
  import { TransactionBuilder } from './transaction';
4
4
  export interface Kvs {
5
- get<T>(key: string): Promise<T>;
5
+ get<T>(key: string): Promise<T | undefined>;
6
6
  set<T>(key: string, value: T): Promise<void>;
7
7
  delete(key: string): Promise<void>;
8
8
  query(): QueryBuilder;
9
- getSecret<T>(key: string): Promise<T>;
9
+ getSecret<T>(key: string): Promise<T | undefined>;
10
10
  setSecret<T>(key: string, value: T): Promise<void>;
11
11
  deleteSecret(key: string): Promise<void>;
12
12
  entity<T>(entityName: string): KvsEntity<T>;
13
13
  transact(): TransactionBuilder;
14
14
  }
15
15
  export interface KvsEntity<T> {
16
- get(key: string): Promise<T>;
16
+ get(key: string): Promise<T | undefined>;
17
17
  set(key: string, value: T): Promise<void>;
18
18
  delete(key: string): Promise<void>;
19
19
  query(): IndexQueryBuilder<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"kvs.d.ts","sourceRoot":"","sources":["../../src/interfaces/kvs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,YAAY,CAAC;IAEtB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAE5C,QAAQ,IAAI,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC/B"}
1
+ {"version":3,"file":"kvs.d.ts","sourceRoot":"","sources":["../../src/interfaces/kvs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,GAAG;IAClB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,YAAY,CAAC;IAEtB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAClD,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAE5C,QAAQ,IAAI,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAC/B"}
package/out/kvs.d.ts CHANGED
@@ -5,11 +5,11 @@ import { StorageApi } from './storage-api';
5
5
  export declare class KvsImpl implements Kvs {
6
6
  private readonly storageApi;
7
7
  constructor(storageApi: StorageApi);
8
- get<T>(key: string): Promise<T>;
8
+ get<T>(key: string): Promise<T | undefined>;
9
9
  set<T>(key: string, value: T): Promise<void>;
10
10
  delete(key: string): Promise<void>;
11
11
  query(): QueryBuilder;
12
- getSecret<T>(key: string): Promise<T>;
12
+ getSecret<T>(key: string): Promise<T | undefined>;
13
13
  setSecret<T>(key: string, value: T): Promise<void>;
14
14
  deleteSecret(key: string): Promise<void>;
15
15
  entity<T>(entityName: string): KvsEntity<T>;
package/out/kvs.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kvs.d.ts","sourceRoot":"","sources":["../src/kvs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,qBAAa,OAAQ,YAAW,GAAG;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,YAAY;IAIrB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAI3C,QAAQ,IAAI,kBAAkB;CAG/B"}
1
+ {"version":3,"file":"kvs.d.ts","sourceRoot":"","sources":["../src/kvs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,qBAAa,OAAQ,YAAW,GAAG;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEnD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAI3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,YAAY;IAIrB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIjD,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAI3C,QAAQ,IAAI,kBAAkB;CAG/B"}
@@ -4,9 +4,9 @@ import { DeleteRequest, EntityDeleteRequest, EntityGetRequest, EntityQueryReques
4
4
  export declare class StorageApi {
5
5
  private apiClient;
6
6
  constructor(apiClient: FetchMethod);
7
- get<T>(body: GetRequest): Promise<T>;
8
- getSecret<T>(body: SecretGetRequest): Promise<T>;
9
- getEntity<T>(body: EntityGetRequest): Promise<T>;
7
+ get<T>(body: GetRequest): Promise<T | undefined>;
8
+ getSecret<T>(body: SecretGetRequest): Promise<T | undefined>;
9
+ getEntity<T>(body: EntityGetRequest): Promise<T | undefined>;
10
10
  set<T>(body: SetRequest<T>): Promise<void>;
11
11
  setSecret<T>(body: SecretSetRequest<T>): Promise<void>;
12
12
  setEntity<T>(body: EntitySetRequest<T>): Promise<void>;
@@ -16,6 +16,7 @@ export declare class StorageApi {
16
16
  query<T>(body: QueryRequest): Promise<ListResult<T>>;
17
17
  queryEntity<T>(body: EntityQueryRequest): Promise<ListResult<T>>;
18
18
  transact<T>(transactionRequest: TransactionRequest<T>): Promise<void>;
19
+ private handleKeyNotFound;
19
20
  private request;
20
21
  }
21
22
  //# sourceMappingURL=storage-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-api.d.ts","sourceRoot":"","sources":["../src/storage-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EACL,aAAa,EAEb,mBAAmB,EAEnB,gBAAgB,EAEhB,kBAAkB,EAElB,gBAAgB,EAEhB,UAAU,EAEV,YAAY,EAEZ,mBAAmB,EAEnB,gBAAgB,EAEhB,gBAAgB,EAEhB,UAAU,EAEV,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,UAAU;IACT,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,WAAW;IAEpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAKpC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKhD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKhD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAQpD,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAQhE,QAAQ,CAAC,CAAC,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7D,OAAO;CAyBtB"}
1
+ {"version":3,"file":"storage-api.d.ts","sourceRoot":"","sources":["../src/storage-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EACL,aAAa,EAEb,mBAAmB,EAEnB,gBAAgB,EAEhB,kBAAkB,EAElB,gBAAgB,EAEhB,UAAU,EAEV,YAAY,EAEZ,mBAAmB,EAEnB,gBAAgB,EAEhB,gBAAgB,EAEhB,UAAU,EAEV,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,UAAU;IACT,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,WAAW;IAEpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAOhD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAO5D,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAO5D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAQpD,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAQhE,QAAQ,CAAC,CAAC,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7D,iBAAiB;YAWjB,OAAO;CAyBtB"}
@@ -9,16 +9,22 @@ class StorageApi {
9
9
  this.apiClient = apiClient;
10
10
  }
11
11
  async get(body) {
12
- const rs = await this.request('/api/v1/get', body, true);
13
- return rs.value;
12
+ const rs = await this.handleKeyNotFound(async () => {
13
+ return this.request('/api/v1/get', body, true);
14
+ });
15
+ return rs?.value;
14
16
  }
15
17
  async getSecret(body) {
16
- const rs = await this.request('/api/v1/secret/get', body, true);
17
- return rs.value;
18
+ const rs = await this.handleKeyNotFound(async () => {
19
+ return this.request('/api/v1/secret/get', body, true);
20
+ });
21
+ return rs?.value;
18
22
  }
19
23
  async getEntity(body) {
20
- const rs = await this.request('/api/v1/entity/get', body, true);
21
- return rs.value;
24
+ const rs = await this.handleKeyNotFound(async () => {
25
+ return this.request('/api/v1/entity/get', body, true);
26
+ });
27
+ return rs?.value;
22
28
  }
23
29
  async set(body) {
24
30
  await this.request('/api/v1/set', body, false);
@@ -30,13 +36,19 @@ class StorageApi {
30
36
  await this.request('/api/v1/entity/set', body, false);
31
37
  }
32
38
  async delete(body) {
33
- await this.request('/api/v1/delete', body, false);
39
+ await this.handleKeyNotFound(async () => {
40
+ return this.request('/api/v1/delete', body, false);
41
+ });
34
42
  }
35
43
  async deleteSecret(body) {
36
- await this.request('/api/v1/secret/delete', body, false);
44
+ await this.handleKeyNotFound(async () => {
45
+ return this.request('/api/v1/secret/delete', body, false);
46
+ });
37
47
  }
38
48
  async deleteEntity(body) {
39
- await this.request('/api/v1/entity/delete', body, false);
49
+ await this.handleKeyNotFound(async () => {
50
+ return this.request('/api/v1/entity/delete', body, false);
51
+ });
40
52
  }
41
53
  async query(body) {
42
54
  const rs = await this.request('/api/v1/query', body, true);
@@ -55,6 +67,17 @@ class StorageApi {
55
67
  async transact(transactionRequest) {
56
68
  await this.request('/api/v1/transaction', transactionRequest, false);
57
69
  }
70
+ async handleKeyNotFound(fn) {
71
+ try {
72
+ return await fn();
73
+ }
74
+ catch (e) {
75
+ if (e instanceof errors_1.ForgeKvsAPIError && e.code === 'KEY_NOT_FOUND') {
76
+ return undefined;
77
+ }
78
+ throw e;
79
+ }
80
+ }
58
81
  async request(path, body, isResponseExpected) {
59
82
  const requestBody = {
60
83
  method: 'POST',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/kvs",
3
- "version": "0.1.0-next.5",
3
+ "version": "0.1.0-next.6",
4
4
  "description": "Forge Key Value Store SDK",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -20,5 +20,8 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@forge/api": "^5.1.0-next.7"
23
+ },
24
+ "publishConfig": {
25
+ "registry": "https://packages.atlassian.com/api/npm/npm-public/"
23
26
  }
24
27
  }