@exabugs/dynamodb-client 0.1.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 +41 -0
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/dist/client/Collection.d.ts +57 -0
- package/dist/client/Collection.d.ts.map +1 -0
- package/dist/client/Collection.js +174 -0
- package/dist/client/Collection.js.map +1 -0
- package/dist/client/Database.d.ts +35 -0
- package/dist/client/Database.d.ts.map +1 -0
- package/dist/client/Database.js +48 -0
- package/dist/client/Database.js.map +1 -0
- package/dist/client/DynamoClient.d.ts +43 -0
- package/dist/client/DynamoClient.d.ts.map +1 -0
- package/dist/client/DynamoClient.js +62 -0
- package/dist/client/DynamoClient.js.map +1 -0
- package/dist/client/FindCursor.d.ts +174 -0
- package/dist/client/FindCursor.d.ts.map +1 -0
- package/dist/client/FindCursor.js +256 -0
- package/dist/client/FindCursor.js.map +1 -0
- package/dist/client/aws-sigv4.d.ts +10 -0
- package/dist/client/aws-sigv4.d.ts.map +1 -0
- package/dist/client/aws-sigv4.js +54 -0
- package/dist/client/aws-sigv4.js.map +1 -0
- package/dist/client/index.cognito.d.ts +34 -0
- package/dist/client/index.cognito.d.ts.map +1 -0
- package/dist/client/index.cognito.js +30 -0
- package/dist/client/index.cognito.js.map +1 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.iam.d.ts +34 -0
- package/dist/client/index.iam.d.ts.map +1 -0
- package/dist/client/index.iam.js +28 -0
- package/dist/client/index.iam.js.map +1 -0
- package/dist/client/index.js +12 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/index.token.d.ts +33 -0
- package/dist/client/index.token.d.ts.map +1 -0
- package/dist/client/index.token.js +28 -0
- package/dist/client/index.token.js.map +1 -0
- package/dist/dynamodb.d.ts +20 -0
- package/dist/dynamodb.d.ts.map +1 -0
- package/dist/dynamodb.js +31 -0
- package/dist/dynamodb.js.map +1 -0
- package/dist/errors.d.ts +100 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +146 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/react-admin/dataProvider.d.ts +59 -0
- package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -0
- package/dist/integrations/react-admin/dataProvider.js +364 -0
- package/dist/integrations/react-admin/dataProvider.js.map +1 -0
- package/dist/integrations/react-admin/index.d.ts +24 -0
- package/dist/integrations/react-admin/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/index.js +23 -0
- package/dist/integrations/react-admin/index.js.map +1 -0
- package/dist/integrations/react-admin/types.d.ts +47 -0
- package/dist/integrations/react-admin/types.d.ts.map +1 -0
- package/dist/integrations/react-admin/types.js +5 -0
- package/dist/integrations/react-admin/types.js.map +1 -0
- package/dist/logger.d.ts +61 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +87 -0
- package/dist/logger.js.map +1 -0
- package/dist/scripts/repair-shadows.d.ts +3 -0
- package/dist/scripts/repair-shadows.d.ts.map +1 -0
- package/dist/scripts/repair-shadows.js +190 -0
- package/dist/scripts/repair-shadows.js.map +1 -0
- package/dist/server/handler.cjs +31378 -0
- package/dist/server/handler.cjs.map +7 -0
- package/dist/server/handler.d.ts +18 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +435 -0
- package/dist/server/handler.js.map +1 -0
- package/dist/server/handler.zip +0 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/operations/deleteMany.d.ts +18 -0
- package/dist/server/operations/deleteMany.d.ts.map +1 -0
- package/dist/server/operations/deleteMany.js +222 -0
- package/dist/server/operations/deleteMany.js.map +1 -0
- package/dist/server/operations/deleteOne.d.ts +17 -0
- package/dist/server/operations/deleteOne.d.ts.map +1 -0
- package/dist/server/operations/deleteOne.js +87 -0
- package/dist/server/operations/deleteOne.js.map +1 -0
- package/dist/server/operations/find.d.ts +18 -0
- package/dist/server/operations/find.d.ts.map +1 -0
- package/dist/server/operations/find.js +382 -0
- package/dist/server/operations/find.js.map +1 -0
- package/dist/server/operations/findMany.d.ts +13 -0
- package/dist/server/operations/findMany.d.ts.map +1 -0
- package/dist/server/operations/findMany.js +61 -0
- package/dist/server/operations/findMany.js.map +1 -0
- package/dist/server/operations/findManyReference.d.ts +18 -0
- package/dist/server/operations/findManyReference.d.ts.map +1 -0
- package/dist/server/operations/findManyReference.js +150 -0
- package/dist/server/operations/findManyReference.js.map +1 -0
- package/dist/server/operations/findOne.d.ts +14 -0
- package/dist/server/operations/findOne.d.ts.map +1 -0
- package/dist/server/operations/findOne.js +56 -0
- package/dist/server/operations/findOne.js.map +1 -0
- package/dist/server/operations/insertMany.d.ts +19 -0
- package/dist/server/operations/insertMany.d.ts.map +1 -0
- package/dist/server/operations/insertMany.js +243 -0
- package/dist/server/operations/insertMany.js.map +1 -0
- package/dist/server/operations/insertOne.d.ts +18 -0
- package/dist/server/operations/insertOne.d.ts.map +1 -0
- package/dist/server/operations/insertOne.js +85 -0
- package/dist/server/operations/insertOne.js.map +1 -0
- package/dist/server/operations/updateMany.d.ts +20 -0
- package/dist/server/operations/updateMany.d.ts.map +1 -0
- package/dist/server/operations/updateMany.js +316 -0
- package/dist/server/operations/updateMany.js.map +1 -0
- package/dist/server/operations/updateOne.d.ts +20 -0
- package/dist/server/operations/updateOne.d.ts.map +1 -0
- package/dist/server/operations/updateOne.js +159 -0
- package/dist/server/operations/updateOne.js.map +1 -0
- package/dist/server/query/converter.d.ts +85 -0
- package/dist/server/query/converter.d.ts.map +1 -0
- package/dist/server/query/converter.js +161 -0
- package/dist/server/query/converter.js.map +1 -0
- package/dist/server/query/index.d.ts +5 -0
- package/dist/server/query/index.d.ts.map +1 -0
- package/dist/server/query/index.js +5 -0
- package/dist/server/query/index.js.map +1 -0
- package/dist/server/shadow/config.d.ts +147 -0
- package/dist/server/shadow/config.d.ts.map +1 -0
- package/dist/server/shadow/config.js +162 -0
- package/dist/server/shadow/config.js.map +1 -0
- package/dist/server/shadow/differ.d.ts +42 -0
- package/dist/server/shadow/differ.d.ts.map +1 -0
- package/dist/server/shadow/differ.js +66 -0
- package/dist/server/shadow/differ.js.map +1 -0
- package/dist/server/shadow/generator.d.ts +104 -0
- package/dist/server/shadow/generator.d.ts.map +1 -0
- package/dist/server/shadow/generator.js +148 -0
- package/dist/server/shadow/generator.js.map +1 -0
- package/dist/server/shadow/index.d.ts +11 -0
- package/dist/server/shadow/index.d.ts.map +1 -0
- package/dist/server/shadow/index.js +11 -0
- package/dist/server/shadow/index.js.map +1 -0
- package/dist/server/shadow/types.d.ts +44 -0
- package/dist/server/shadow/types.d.ts.map +1 -0
- package/dist/server/shadow/types.js +2 -0
- package/dist/server/shadow/types.js.map +1 -0
- package/dist/server/types.d.ts +295 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +7 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/utils/auth.d.ts +43 -0
- package/dist/server/utils/auth.d.ts.map +1 -0
- package/dist/server/utils/auth.js +123 -0
- package/dist/server/utils/auth.js.map +1 -0
- package/dist/server/utils/bulkOperations.d.ts +81 -0
- package/dist/server/utils/bulkOperations.d.ts.map +1 -0
- package/dist/server/utils/bulkOperations.js +147 -0
- package/dist/server/utils/bulkOperations.js.map +1 -0
- package/dist/server/utils/chunking.d.ts +96 -0
- package/dist/server/utils/chunking.d.ts.map +1 -0
- package/dist/server/utils/chunking.js +225 -0
- package/dist/server/utils/chunking.js.map +1 -0
- package/dist/server/utils/dynamodb.d.ts +41 -0
- package/dist/server/utils/dynamodb.d.ts.map +1 -0
- package/dist/server/utils/dynamodb.js +83 -0
- package/dist/server/utils/dynamodb.js.map +1 -0
- package/dist/server/utils/filter.d.ts +152 -0
- package/dist/server/utils/filter.d.ts.map +1 -0
- package/dist/server/utils/filter.js +270 -0
- package/dist/server/utils/filter.js.map +1 -0
- package/dist/server/utils/pagination.d.ts +27 -0
- package/dist/server/utils/pagination.d.ts.map +1 -0
- package/dist/server/utils/pagination.js +56 -0
- package/dist/server/utils/pagination.js.map +1 -0
- package/dist/server/utils/timestamps.d.ts +31 -0
- package/dist/server/utils/timestamps.d.ts.map +1 -0
- package/dist/server/utils/timestamps.js +84 -0
- package/dist/server/utils/timestamps.js.map +1 -0
- package/dist/server/utils/ttl.d.ts +17 -0
- package/dist/server/utils/ttl.d.ts.map +1 -0
- package/dist/server/utils/ttl.js +62 -0
- package/dist/server/utils/ttl.js.map +1 -0
- package/dist/server/utils/validation.d.ts +40 -0
- package/dist/server/utils/validation.d.ts.map +1 -0
- package/dist/server/utils/validation.js +54 -0
- package/dist/server/utils/validation.js.map +1 -0
- package/dist/shadows/config.d.ts +54 -0
- package/dist/shadows/config.d.ts.map +1 -0
- package/dist/shadows/config.js +95 -0
- package/dist/shadows/config.js.map +1 -0
- package/dist/shadows/differ.d.ts +42 -0
- package/dist/shadows/differ.d.ts.map +1 -0
- package/dist/shadows/differ.js +66 -0
- package/dist/shadows/differ.js.map +1 -0
- package/dist/shadows/generator.d.ts +63 -0
- package/dist/shadows/generator.d.ts.map +1 -0
- package/dist/shadows/generator.js +107 -0
- package/dist/shadows/generator.js.map +1 -0
- package/dist/shadows/index.d.ts +15 -0
- package/dist/shadows/index.d.ts.map +1 -0
- package/dist/shadows/index.js +17 -0
- package/dist/shadows/index.js.map +1 -0
- package/dist/shadows/types.d.ts +44 -0
- package/dist/shadows/types.d.ts.map +1 -0
- package/dist/shadows/types.js +2 -0
- package/dist/shadows/types.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ulid.d.ts +46 -0
- package/dist/ulid.d.ts.map +1 -0
- package/dist/ulid.js +66 -0
- package/dist/ulid.js.map +1 -0
- package/package.json +136 -0
- package/terraform/README.md +222 -0
- package/terraform/examples/advanced/README.md +129 -0
- package/terraform/examples/advanced/main.tf +158 -0
- package/terraform/examples/advanced/shadow.config.json +35 -0
- package/terraform/examples/advanced/variables.tf +28 -0
- package/terraform/examples/basic/README.md +53 -0
- package/terraform/examples/basic/main.tf +99 -0
- package/terraform/examples/basic/variables.tf +17 -0
- package/terraform/main.tf +159 -0
- package/terraform/outputs.tf +56 -0
- package/terraform/variables.tf +59 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(Cognito認証用)
|
|
3
|
+
*
|
|
4
|
+
* Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
|
|
5
|
+
* Cognito認証(動的トークン取得)を使用します。
|
|
6
|
+
*/
|
|
7
|
+
import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
|
|
8
|
+
export { Database } from './Database.js';
|
|
9
|
+
export { Collection } from './Collection.js';
|
|
10
|
+
export { FindCursor } from './FindCursor.js';
|
|
11
|
+
/**
|
|
12
|
+
* DynamoDBクライアント(Cognito認証用)
|
|
13
|
+
*
|
|
14
|
+
* Cognito認証を使用してLambda Function URLにアクセスします。
|
|
15
|
+
* トークンは動的に取得されます。
|
|
16
|
+
*/
|
|
17
|
+
export class DynamoClient extends BaseDynamoClient {
|
|
18
|
+
constructor(endpoint, options) {
|
|
19
|
+
super(endpoint, options, async (_url, _body, auth) => {
|
|
20
|
+
if (!auth) {
|
|
21
|
+
throw new Error('Cognito auth options are required');
|
|
22
|
+
}
|
|
23
|
+
const token = await auth.getToken();
|
|
24
|
+
return {
|
|
25
|
+
Authorization: `Bearer ${token}`,
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.cognito.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cognito.js","sourceRoot":"","sources":["../../src/client/index.cognito.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAoC;IACpE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,IAAyB,EAAE,EAAE;YACxF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO;gBACL,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(共通エクスポート)
|
|
3
|
+
*
|
|
4
|
+
* 認証方式ごとの専用クライアントを使用してください:
|
|
5
|
+
* - IAM認証: '@exabugs/dynamodb-client/client/iam'
|
|
6
|
+
* - Cognito認証: '@exabugs/dynamodb-client/client/cognito'
|
|
7
|
+
* - Token認証: '@exabugs/dynamodb-client/client/token'
|
|
8
|
+
*/
|
|
9
|
+
export { Database } from './Database.js';
|
|
10
|
+
export { Collection } from './Collection.js';
|
|
11
|
+
export { FindCursor } from './FindCursor.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(IAM認証用)
|
|
3
|
+
*
|
|
4
|
+
* Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
|
|
5
|
+
* IAM認証(AWS SigV4)を使用します。Node.js環境専用です。
|
|
6
|
+
*/
|
|
7
|
+
import { type ClientOptions as BaseClientOptions, DynamoClient as BaseDynamoClient } from './DynamoClient.js';
|
|
8
|
+
export { Database } from './Database.js';
|
|
9
|
+
export { Collection } from './Collection.js';
|
|
10
|
+
export { FindCursor } from './FindCursor.js';
|
|
11
|
+
/**
|
|
12
|
+
* IAM認証オプション
|
|
13
|
+
*/
|
|
14
|
+
export interface IAMAuthOptions {
|
|
15
|
+
/** AWSリージョン(必須) */
|
|
16
|
+
region: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* クライアントオプション(IAM認証用)
|
|
20
|
+
*/
|
|
21
|
+
export interface ClientOptions extends Omit<BaseClientOptions<IAMAuthOptions>, 'auth'> {
|
|
22
|
+
/** IAM認証設定(必須) */
|
|
23
|
+
auth: IAMAuthOptions;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* DynamoDBクライアント(IAM認証用)
|
|
27
|
+
*
|
|
28
|
+
* IAM認証(AWS SigV4)を使用してLambda Function URLにアクセスします。
|
|
29
|
+
* Node.js環境専用です。
|
|
30
|
+
*/
|
|
31
|
+
export declare class DynamoClient extends BaseDynamoClient<IAMAuthOptions> {
|
|
32
|
+
constructor(endpoint: string, options: ClientOptions);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=index.iam.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.iam.d.ts","sourceRoot":"","sources":["../../src/client/index.iam.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,KAAK,aAAa,IAAI,iBAAiB,EACvC,YAAY,IAAI,gBAAgB,EACjC,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACpF,kBAAkB;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,cAAc,CAAC;gBACpD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAQrD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(IAM認証用)
|
|
3
|
+
*
|
|
4
|
+
* Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
|
|
5
|
+
* IAM認証(AWS SigV4)を使用します。Node.js環境専用です。
|
|
6
|
+
*/
|
|
7
|
+
import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
|
|
8
|
+
import { signRequest } from './aws-sigv4.js';
|
|
9
|
+
export { Database } from './Database.js';
|
|
10
|
+
export { Collection } from './Collection.js';
|
|
11
|
+
export { FindCursor } from './FindCursor.js';
|
|
12
|
+
/**
|
|
13
|
+
* DynamoDBクライアント(IAM認証用)
|
|
14
|
+
*
|
|
15
|
+
* IAM認証(AWS SigV4)を使用してLambda Function URLにアクセスします。
|
|
16
|
+
* Node.js環境専用です。
|
|
17
|
+
*/
|
|
18
|
+
export class DynamoClient extends BaseDynamoClient {
|
|
19
|
+
constructor(endpoint, options) {
|
|
20
|
+
super(endpoint, options, async (url, body, auth) => {
|
|
21
|
+
if (!auth) {
|
|
22
|
+
throw new Error('IAM auth options are required');
|
|
23
|
+
}
|
|
24
|
+
return await signRequest(url, body, auth.region);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.iam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.iam.js","sourceRoot":"","sources":["../../src/client/index.iam.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAgC;IAChE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;YAClF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(共通エクスポート)
|
|
3
|
+
*
|
|
4
|
+
* 認証方式ごとの専用クライアントを使用してください:
|
|
5
|
+
* - IAM認証: '@exabugs/dynamodb-client/client/iam'
|
|
6
|
+
* - Cognito認証: '@exabugs/dynamodb-client/client/cognito'
|
|
7
|
+
* - Token認証: '@exabugs/dynamodb-client/client/token'
|
|
8
|
+
*/
|
|
9
|
+
export { Database } from './Database.js';
|
|
10
|
+
export { Collection } from './Collection.js';
|
|
11
|
+
export { FindCursor } from './FindCursor.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(Token認証用)
|
|
3
|
+
*
|
|
4
|
+
* Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
|
|
5
|
+
* 固定トークン認証を使用します。
|
|
6
|
+
*/
|
|
7
|
+
import { type ClientOptions as BaseClientOptions, DynamoClient as BaseDynamoClient } from './DynamoClient.js';
|
|
8
|
+
export { Database } from './Database.js';
|
|
9
|
+
export { Collection } from './Collection.js';
|
|
10
|
+
export { FindCursor } from './FindCursor.js';
|
|
11
|
+
/**
|
|
12
|
+
* Token認証オプション
|
|
13
|
+
*/
|
|
14
|
+
export interface TokenAuthOptions {
|
|
15
|
+
/** 認証トークン(必須) */
|
|
16
|
+
token: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* クライアントオプション(Token認証用)
|
|
20
|
+
*/
|
|
21
|
+
export interface ClientOptions extends Omit<BaseClientOptions<TokenAuthOptions>, 'auth'> {
|
|
22
|
+
/** Token認証設定(必須) */
|
|
23
|
+
auth: TokenAuthOptions;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* DynamoDBクライアント(Token認証用)
|
|
27
|
+
*
|
|
28
|
+
* 固定トークン認証を使用してLambda Function URLにアクセスします。
|
|
29
|
+
*/
|
|
30
|
+
export declare class DynamoClient extends BaseDynamoClient<TokenAuthOptions> {
|
|
31
|
+
constructor(endpoint: string, options: ClientOptions);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.token.d.ts","sourceRoot":"","sources":["../../src/client/index.token.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,KAAK,aAAa,IAAI,iBAAiB,EACvC,YAAY,IAAI,gBAAgB,EACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACtF,oBAAoB;IACpB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,gBAAgB,CAAC;gBACtD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAUrD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDBクライアントSDK(Token認証用)
|
|
3
|
+
*
|
|
4
|
+
* Lambda Function URL経由でDynamoDBにアクセスするHTTPクライアント。
|
|
5
|
+
* 固定トークン認証を使用します。
|
|
6
|
+
*/
|
|
7
|
+
import { DynamoClient as BaseDynamoClient, } from './DynamoClient.js';
|
|
8
|
+
export { Database } from './Database.js';
|
|
9
|
+
export { Collection } from './Collection.js';
|
|
10
|
+
export { FindCursor } from './FindCursor.js';
|
|
11
|
+
/**
|
|
12
|
+
* DynamoDBクライアント(Token認証用)
|
|
13
|
+
*
|
|
14
|
+
* 固定トークン認証を使用してLambda Function URLにアクセスします。
|
|
15
|
+
*/
|
|
16
|
+
export class DynamoClient extends BaseDynamoClient {
|
|
17
|
+
constructor(endpoint, options) {
|
|
18
|
+
super(endpoint, options, async (_url, _body, auth) => {
|
|
19
|
+
if (!auth) {
|
|
20
|
+
throw new Error('Token auth options are required');
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
Authorization: `Bearer ${auth.token}`,
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.token.js","sourceRoot":"","sources":["../../src/client/index.token.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,YAAY,IAAI,gBAAgB,GACjC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,gBAAkC;IAClE,YAAY,QAAgB,EAAE,OAAsB;QAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,IAAuB,EAAE,EAAE;YACtF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO;gBACL,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;aACtC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
/**
|
|
3
|
+
* DynamoDBクライアントの設定オプション
|
|
4
|
+
*/
|
|
5
|
+
export interface DynamoDBClientConfig {
|
|
6
|
+
region?: string;
|
|
7
|
+
endpoint?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* ConsistentRead=trueをデフォルトとするDynamoDB Document Clientを作成する
|
|
11
|
+
*
|
|
12
|
+
* このクライアントは、要件4.3に従い、すべての読み取り操作に強整合性を強制するように設定されている:
|
|
13
|
+
* "THE Records Lambda SHALL ConsistentRead=trueを設定することで、
|
|
14
|
+
* すべての読み取り操作に強整合性を強制する"
|
|
15
|
+
*
|
|
16
|
+
* @param config - リージョンとエンドポイントのオプション設定
|
|
17
|
+
* @returns ConsistentRead=trueで設定されたDynamoDBDocumentClient
|
|
18
|
+
*/
|
|
19
|
+
export declare function createDynamoDBClient(config?: DynamoDBClientConfig): DynamoDBDocumentClient;
|
|
20
|
+
//# sourceMappingURL=dynamodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb.d.ts","sourceRoot":"","sources":["../src/dynamodb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,oBAAyB,GAAG,sBAAsB,CAoB9F"}
|
package/dist/dynamodb.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
3
|
+
/**
|
|
4
|
+
* ConsistentRead=trueをデフォルトとするDynamoDB Document Clientを作成する
|
|
5
|
+
*
|
|
6
|
+
* このクライアントは、要件4.3に従い、すべての読み取り操作に強整合性を強制するように設定されている:
|
|
7
|
+
* "THE Records Lambda SHALL ConsistentRead=trueを設定することで、
|
|
8
|
+
* すべての読み取り操作に強整合性を強制する"
|
|
9
|
+
*
|
|
10
|
+
* @param config - リージョンとエンドポイントのオプション設定
|
|
11
|
+
* @returns ConsistentRead=trueで設定されたDynamoDBDocumentClient
|
|
12
|
+
*/
|
|
13
|
+
export function createDynamoDBClient(config = {}) {
|
|
14
|
+
const { region = process.env.AWS_REGION || 'us-east-1', endpoint } = config;
|
|
15
|
+
const client = new DynamoDBClient({
|
|
16
|
+
region,
|
|
17
|
+
...(endpoint && { endpoint }),
|
|
18
|
+
});
|
|
19
|
+
// ConsistentRead=trueをデフォルトとしてDocument Clientを設定
|
|
20
|
+
const docClient = DynamoDBDocumentClient.from(client, {
|
|
21
|
+
marshallOptions: {
|
|
22
|
+
removeUndefinedValues: true,
|
|
23
|
+
convertEmptyValues: false,
|
|
24
|
+
},
|
|
25
|
+
unmarshallOptions: {
|
|
26
|
+
wrapNumbers: false,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
return docClient;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=dynamodb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamodb.js","sourceRoot":"","sources":["../src/dynamodb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAU/D;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAA+B,EAAE;IACpE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5E,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,MAAM;QACN,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC9B,CAAC,CAAC;IAEH,iDAAiD;IACjD,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE;QACpD,eAAe,EAAE;YACf,qBAAqB,EAAE,IAAI;YAC3B,kBAAkB,EAAE,KAAK;SAC1B;QACD,iBAAiB,EAAE;YACjB,WAAW,EAAE,KAAK;SACnB;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* エラーコード定義
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ErrorCode {
|
|
5
|
+
/** 認証エラー(JWT検証失敗、署名不正、期限切れなど) */
|
|
6
|
+
AUTH_ERROR = "AUTH_ERROR",
|
|
7
|
+
/** 設定エラー(環境変数未設定、shadow.config読み込み失敗など) */
|
|
8
|
+
CONFIG_ERROR = "CONFIG_ERROR",
|
|
9
|
+
/** 無効なフィルター(sort.fieldが無効なシャドー名) */
|
|
10
|
+
INVALID_FILTER = "INVALID_FILTER",
|
|
11
|
+
/** 無効なトークン(nextTokenデコード失敗) */
|
|
12
|
+
INVALID_TOKEN = "INVALID_TOKEN",
|
|
13
|
+
/** アイテムが見つからない(指定IDのレコードが存在しない) */
|
|
14
|
+
ITEM_NOT_FOUND = "ITEM_NOT_FOUND",
|
|
15
|
+
/** 部分失敗(TransactWriteItemsの一部が失敗) */
|
|
16
|
+
PARTIAL_FAILURE = "PARTIAL_FAILURE",
|
|
17
|
+
/** バージョン競合(楽観ロック競合) */
|
|
18
|
+
VERSION_CONFLICT = "VERSION_CONFLICT"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* アプリケーションエラーの基底クラス
|
|
22
|
+
*/
|
|
23
|
+
export declare class AppError extends Error {
|
|
24
|
+
readonly code: ErrorCode;
|
|
25
|
+
readonly statusCode: number;
|
|
26
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
27
|
+
constructor(code: ErrorCode, message: string, statusCode?: number, details?: Record<string, unknown> | undefined);
|
|
28
|
+
/**
|
|
29
|
+
* エラーをJSON形式に変換
|
|
30
|
+
*/
|
|
31
|
+
toJSON(): Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 認証エラー
|
|
35
|
+
* JWT検証失敗、署名不正、期限切れなどで発生
|
|
36
|
+
*/
|
|
37
|
+
export declare class AuthError extends AppError {
|
|
38
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 設定エラー
|
|
42
|
+
* 環境変数未設定、shadow.config読み込み失敗などで発生
|
|
43
|
+
*/
|
|
44
|
+
export declare class ConfigError extends AppError {
|
|
45
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 無効なフィルターエラー
|
|
49
|
+
* sort.fieldが無効なシャドー名の場合に発生
|
|
50
|
+
*/
|
|
51
|
+
export declare class InvalidFilterError extends AppError {
|
|
52
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 無効なトークンエラー
|
|
56
|
+
* nextTokenのデコードに失敗した場合に発生
|
|
57
|
+
*/
|
|
58
|
+
export declare class InvalidTokenError extends AppError {
|
|
59
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* アイテムが見つからないエラー
|
|
63
|
+
* 指定IDのレコードが存在しない場合に発生
|
|
64
|
+
*/
|
|
65
|
+
export declare class ItemNotFoundError extends AppError {
|
|
66
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 部分失敗エラー
|
|
70
|
+
* TransactWriteItemsの一部が失敗した場合に発生
|
|
71
|
+
*/
|
|
72
|
+
export declare class PartialFailureError extends AppError {
|
|
73
|
+
readonly failedIds: string[];
|
|
74
|
+
readonly errors: Array<{
|
|
75
|
+
id: string;
|
|
76
|
+
code: string;
|
|
77
|
+
message: string;
|
|
78
|
+
}>;
|
|
79
|
+
constructor(message: string, failedIds: string[], errors: Array<{
|
|
80
|
+
id: string;
|
|
81
|
+
code: string;
|
|
82
|
+
message: string;
|
|
83
|
+
}>, details?: Record<string, unknown>);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* バージョン競合エラー
|
|
87
|
+
* 楽観ロック競合が発生した場合に発生
|
|
88
|
+
*/
|
|
89
|
+
export declare class VersionConflictError extends AppError {
|
|
90
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* エラーがAppErrorのインスタンスかどうかを判定
|
|
94
|
+
*/
|
|
95
|
+
export declare function isAppError(error: unknown): error is AppError;
|
|
96
|
+
/**
|
|
97
|
+
* エラーコードからエラークラスを取得
|
|
98
|
+
*/
|
|
99
|
+
export declare function getErrorClass(code: ErrorCode): new (message: string, details?: Record<string, unknown>) => AppError;
|
|
100
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IACnB,iCAAiC;IACjC,UAAU,eAAe;IACzB,2CAA2C;IAC3C,YAAY,iBAAiB;IAC7B,oCAAoC;IACpC,cAAc,mBAAmB;IACjC,+BAA+B;IAC/B,aAAa,kBAAkB;IAC/B,mCAAmC;IACnC,cAAc,mBAAmB;IACjC,qCAAqC;IACrC,eAAe,oBAAoB;IACnC,uBAAuB;IACvB,gBAAgB,qBAAqB;CACtC;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,SAAS;aAEf,UAAU,EAAE,MAAM;aAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,SAAS,EAC/B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAOnD;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlC;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;aAG7B,SAAS,EAAE,MAAM,EAAE;aACnB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;gBAF5E,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAC5E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQpC;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,GACd,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,CAiBtE"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* エラーコード定義
|
|
3
|
+
*/
|
|
4
|
+
export var ErrorCode;
|
|
5
|
+
(function (ErrorCode) {
|
|
6
|
+
/** 認証エラー(JWT検証失敗、署名不正、期限切れなど) */
|
|
7
|
+
ErrorCode["AUTH_ERROR"] = "AUTH_ERROR";
|
|
8
|
+
/** 設定エラー(環境変数未設定、shadow.config読み込み失敗など) */
|
|
9
|
+
ErrorCode["CONFIG_ERROR"] = "CONFIG_ERROR";
|
|
10
|
+
/** 無効なフィルター(sort.fieldが無効なシャドー名) */
|
|
11
|
+
ErrorCode["INVALID_FILTER"] = "INVALID_FILTER";
|
|
12
|
+
/** 無効なトークン(nextTokenデコード失敗) */
|
|
13
|
+
ErrorCode["INVALID_TOKEN"] = "INVALID_TOKEN";
|
|
14
|
+
/** アイテムが見つからない(指定IDのレコードが存在しない) */
|
|
15
|
+
ErrorCode["ITEM_NOT_FOUND"] = "ITEM_NOT_FOUND";
|
|
16
|
+
/** 部分失敗(TransactWriteItemsの一部が失敗) */
|
|
17
|
+
ErrorCode["PARTIAL_FAILURE"] = "PARTIAL_FAILURE";
|
|
18
|
+
/** バージョン競合(楽観ロック競合) */
|
|
19
|
+
ErrorCode["VERSION_CONFLICT"] = "VERSION_CONFLICT";
|
|
20
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
21
|
+
/**
|
|
22
|
+
* アプリケーションエラーの基底クラス
|
|
23
|
+
*/
|
|
24
|
+
export class AppError extends Error {
|
|
25
|
+
code;
|
|
26
|
+
statusCode;
|
|
27
|
+
details;
|
|
28
|
+
constructor(code, message, statusCode = 500, details) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.code = code;
|
|
31
|
+
this.statusCode = statusCode;
|
|
32
|
+
this.details = details;
|
|
33
|
+
this.name = this.constructor.name;
|
|
34
|
+
Error.captureStackTrace(this, this.constructor);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* エラーをJSON形式に変換
|
|
38
|
+
*/
|
|
39
|
+
toJSON() {
|
|
40
|
+
return {
|
|
41
|
+
code: this.code,
|
|
42
|
+
message: this.message,
|
|
43
|
+
statusCode: this.statusCode,
|
|
44
|
+
...(this.details && { details: this.details }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 認証エラー
|
|
50
|
+
* JWT検証失敗、署名不正、期限切れなどで発生
|
|
51
|
+
*/
|
|
52
|
+
export class AuthError extends AppError {
|
|
53
|
+
constructor(message, details) {
|
|
54
|
+
super(ErrorCode.AUTH_ERROR, message, 401, details);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 設定エラー
|
|
59
|
+
* 環境変数未設定、shadow.config読み込み失敗などで発生
|
|
60
|
+
*/
|
|
61
|
+
export class ConfigError extends AppError {
|
|
62
|
+
constructor(message, details) {
|
|
63
|
+
super(ErrorCode.CONFIG_ERROR, message, 500, details);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 無効なフィルターエラー
|
|
68
|
+
* sort.fieldが無効なシャドー名の場合に発生
|
|
69
|
+
*/
|
|
70
|
+
export class InvalidFilterError extends AppError {
|
|
71
|
+
constructor(message, details) {
|
|
72
|
+
super(ErrorCode.INVALID_FILTER, message, 400, details);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 無効なトークンエラー
|
|
77
|
+
* nextTokenのデコードに失敗した場合に発生
|
|
78
|
+
*/
|
|
79
|
+
export class InvalidTokenError extends AppError {
|
|
80
|
+
constructor(message, details) {
|
|
81
|
+
super(ErrorCode.INVALID_TOKEN, message, 400, details);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* アイテムが見つからないエラー
|
|
86
|
+
* 指定IDのレコードが存在しない場合に発生
|
|
87
|
+
*/
|
|
88
|
+
export class ItemNotFoundError extends AppError {
|
|
89
|
+
constructor(message, details) {
|
|
90
|
+
super(ErrorCode.ITEM_NOT_FOUND, message, 404, details);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 部分失敗エラー
|
|
95
|
+
* TransactWriteItemsの一部が失敗した場合に発生
|
|
96
|
+
*/
|
|
97
|
+
export class PartialFailureError extends AppError {
|
|
98
|
+
failedIds;
|
|
99
|
+
errors;
|
|
100
|
+
constructor(message, failedIds, errors, details) {
|
|
101
|
+
super(ErrorCode.PARTIAL_FAILURE, message, 207, {
|
|
102
|
+
...details,
|
|
103
|
+
failedIds,
|
|
104
|
+
errors,
|
|
105
|
+
});
|
|
106
|
+
this.failedIds = failedIds;
|
|
107
|
+
this.errors = errors;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* バージョン競合エラー
|
|
112
|
+
* 楽観ロック競合が発生した場合に発生
|
|
113
|
+
*/
|
|
114
|
+
export class VersionConflictError extends AppError {
|
|
115
|
+
constructor(message, details) {
|
|
116
|
+
super(ErrorCode.VERSION_CONFLICT, message, 409, details);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* エラーがAppErrorのインスタンスかどうかを判定
|
|
121
|
+
*/
|
|
122
|
+
export function isAppError(error) {
|
|
123
|
+
return error instanceof AppError;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* エラーコードからエラークラスを取得
|
|
127
|
+
*/
|
|
128
|
+
export function getErrorClass(code) {
|
|
129
|
+
switch (code) {
|
|
130
|
+
case ErrorCode.AUTH_ERROR:
|
|
131
|
+
return AuthError;
|
|
132
|
+
case ErrorCode.CONFIG_ERROR:
|
|
133
|
+
return ConfigError;
|
|
134
|
+
case ErrorCode.INVALID_FILTER:
|
|
135
|
+
return InvalidFilterError;
|
|
136
|
+
case ErrorCode.INVALID_TOKEN:
|
|
137
|
+
return InvalidTokenError;
|
|
138
|
+
case ErrorCode.ITEM_NOT_FOUND:
|
|
139
|
+
return ItemNotFoundError;
|
|
140
|
+
case ErrorCode.VERSION_CONFLICT:
|
|
141
|
+
return VersionConflictError;
|
|
142
|
+
default:
|
|
143
|
+
return AppError;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { createDynamoDBClient } from './dynamodb.js';
|
|
2
|
+
export type { DynamoDBClientConfig } from './dynamodb.js';
|
|
3
|
+
export { ulid, ulidWithTime, decodeTime } from './ulid.js';
|
|
4
|
+
export { createLogger } from './logger.js';
|
|
5
|
+
export type { Logger, LoggerConfig, LogLevel, LogMetadata } from './logger.js';
|
|
6
|
+
export { ErrorCode, AppError, AuthError, ConfigError, InvalidFilterError, InvalidTokenError, ItemNotFoundError, PartialFailureError, VersionConflictError, isAppError, getErrorClass, } from './errors.js';
|
|
7
|
+
export type { FilterOperators, Filter, UpdateOperators, FindOptions, InsertOneResult, InsertManyResult, UpdateResult, DeleteResult, } from './types.js';
|
|
8
|
+
export { Database, Collection } from './client/index.js';
|
|
9
|
+
export { convertFilterToDynamo, type DynamoComparisonOperator, type DynamoCondition, type DynamoQuery, generateShadowRecords, type ShadowRecord, type ShadowSchema, getShadowConfig, getResourceSchema, clearShadowConfigCache, type ShadowConfig, } from './server/index.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createDynamoDBClient } from './dynamodb.js';
|
|
2
|
+
export { ulid, ulidWithTime, decodeTime } from './ulid.js';
|
|
3
|
+
export { createLogger } from './logger.js';
|
|
4
|
+
export { ErrorCode, AppError, AuthError, ConfigError, InvalidFilterError, InvalidTokenError, ItemNotFoundError, PartialFailureError, VersionConflictError, isAppError, getErrorClass, } from './errors.js';
|
|
5
|
+
export { Database, Collection } from './client/index.js';
|
|
6
|
+
export { convertFilterToDynamo, generateShadowRecords, getShadowConfig, getResourceSchema, clearShadowConfigCache, } from './server/index.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,qBAAqB,EAIrB,qBAAqB,EAGrB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* react-admin データプロバイダー
|
|
3
|
+
* DynamoDB Client SDK を使用して Records Lambda Function URL と通信
|
|
4
|
+
* react-admin 完全準拠の10操作を実装
|
|
5
|
+
*
|
|
6
|
+
* MongoDB風のシンプルなAPIでDynamoDBを操作:
|
|
7
|
+
* - collection.find().sort().limit().toArray() でレコード取得
|
|
8
|
+
* - collection.insertOne() / insertMany() でレコード作成
|
|
9
|
+
* - collection.updateOne() / updateMany() でレコード更新
|
|
10
|
+
* - collection.deleteOne() / deleteMany() でレコード削除
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createDataProvider } from '@exabugs/dynamodb-client/integrations/react-admin';
|
|
15
|
+
* import type { TokenProvider } from '@exabugs/dynamodb-client/integrations/react-admin';
|
|
16
|
+
*
|
|
17
|
+
* const tokenProvider: TokenProvider = {
|
|
18
|
+
* getToken: async () => {
|
|
19
|
+
* // 認証トークンを取得するロジック
|
|
20
|
+
* return 'your-auth-token';
|
|
21
|
+
* },
|
|
22
|
+
* };
|
|
23
|
+
*
|
|
24
|
+
* const dataProvider = createDataProvider({
|
|
25
|
+
* apiUrl: 'https://your-lambda-url.amazonaws.com',
|
|
26
|
+
* databaseName: 'your-database',
|
|
27
|
+
* tokenProvider,
|
|
28
|
+
* defaultPerPage: 25,
|
|
29
|
+
* defaultSortField: 'updatedAt',
|
|
30
|
+
* defaultSortOrder: 'DESC',
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* NOTE: react-admin の型定義による any の使用
|
|
36
|
+
*
|
|
37
|
+
* react-adminのDataProviderインターフェースは、ジェネリック型パラメータとして
|
|
38
|
+
* `any` を使用することを前提としています。これは、react-adminが様々な型のレコードを
|
|
39
|
+
* 扱うための設計上の制約です。
|
|
40
|
+
*
|
|
41
|
+
* 実行時の型安全性は、以下により確保されています:
|
|
42
|
+
* 1. DynamoDB Client SDK の型チェック
|
|
43
|
+
* 2. TypeScript の型推論(呼び出し側で具体的な型を指定)
|
|
44
|
+
* 3. 実際のレコード型はアプリケーション側で定義
|
|
45
|
+
*
|
|
46
|
+
* 根本的な解決策(TODO):
|
|
47
|
+
* 1. react-admin v5 の型定義を調査し、より厳密な型付けが可能か確認
|
|
48
|
+
* 2. カスタム型定義を作成して、プロジェクト固有のリソース型を使用
|
|
49
|
+
*/
|
|
50
|
+
import { DataProvider } from 'react-admin';
|
|
51
|
+
import type { DataProviderOptions } from './types.js';
|
|
52
|
+
/**
|
|
53
|
+
* DynamoDB Client ベースの DataProvider を作成
|
|
54
|
+
*
|
|
55
|
+
* @param options - DataProviderオプション
|
|
56
|
+
* @returns react-admin DataProvider
|
|
57
|
+
*/
|
|
58
|
+
export declare function createDataProvider(options: DataProviderOptions): DataProvider;
|
|
59
|
+
//# sourceMappingURL=dataProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataProvider.d.ts","sourceRoot":"","sources":["../../../src/integrations/react-admin/dataProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA6EtD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAiV7E"}
|