@encodeagent/platform-helper-data 1.2510.1041539 → 1.2510.1282253

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cosmosdb/index.d.ts +25 -0
  2. package/dist/cosmosdb/index.d.ts.map +1 -0
  3. package/dist/cosmosdb/index.js +210 -0
  4. package/dist/cosmosdb/index.js.map +1 -0
  5. package/dist/cosmosdb/query-builder.d.ts +10 -0
  6. package/dist/cosmosdb/query-builder.d.ts.map +1 -0
  7. package/dist/cosmosdb/query-builder.js +123 -0
  8. package/dist/cosmosdb/query-builder.js.map +1 -0
  9. package/dist/dynamodb/index.d.ts +24 -0
  10. package/dist/dynamodb/index.d.ts.map +1 -0
  11. package/dist/dynamodb/index.js +189 -0
  12. package/dist/dynamodb/index.js.map +1 -0
  13. package/dist/firestore/index.d.ts +9 -0
  14. package/dist/firestore/index.d.ts.map +1 -0
  15. package/dist/firestore/index.js +79 -0
  16. package/dist/firestore/index.js.map +1 -0
  17. package/dist/index.d.ts +3 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +9 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/mongodb/index.d.ts +18 -0
  22. package/dist/mongodb/index.d.ts.map +1 -0
  23. package/dist/mongodb/index.js +208 -0
  24. package/dist/mongodb/index.js.map +1 -0
  25. package/dist/util.d.ts +125 -0
  26. package/dist/util.d.ts.map +1 -0
  27. package/dist/util.js +40 -0
  28. package/dist/util.js.map +1 -0
  29. package/dist/wrapper/index.d.ts +31 -6
  30. package/dist/wrapper/index.d.ts.map +1 -1
  31. package/dist/wrapper/index.js +197 -46
  32. package/dist/wrapper/index.js.map +1 -1
  33. package/package.json +4 -5
  34. package/dist/aws-dynamodb/index.d.ts +0 -17
  35. package/dist/aws-dynamodb/index.d.ts.map +0 -1
  36. package/dist/aws-dynamodb/index.js +0 -96
  37. package/dist/aws-dynamodb/index.js.map +0 -1
  38. package/dist/azure-cosmosdb/index.d.ts +0 -17
  39. package/dist/azure-cosmosdb/index.d.ts.map +0 -1
  40. package/dist/azure-cosmosdb/index.js +0 -91
  41. package/dist/azure-cosmosdb/index.js.map +0 -1
  42. package/dist/gcp-firestore/index.d.ts +0 -7
  43. package/dist/gcp-firestore/index.d.ts.map +0 -1
  44. package/dist/gcp-firestore/index.js +0 -17
  45. package/dist/gcp-firestore/index.js.map +0 -1
  46. package/dist/mongo/index.d.ts +0 -7
  47. package/dist/mongo/index.d.ts.map +0 -1
  48. package/dist/mongo/index.js +0 -17
  49. package/dist/mongo/index.js.map +0 -1
  50. package/dist/types.d.ts +0 -46
  51. package/dist/types.d.ts.map +0 -1
  52. package/dist/types.js +0 -12
  53. package/dist/types.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @fileoverview Azure Cosmos DB implementation
3
+ */
4
+ import { IConnectionForServiceProps, IConnectionResult, IRetrieveResult, ICreateResult, ICreateProps, IRetrieveProps, IQueryProps, IQueryResult, IUpsertProps, IUpsertResult } from '../util';
5
+ /**
6
+ * Create Azure Cosmos DB connection
7
+ * @param props Connection properties with URI and key
8
+ * @returns Promise<IConnectionResult>
9
+ */
10
+ export declare function connect(props: IConnectionForServiceProps): Promise<IConnectionResult>;
11
+ /**
12
+ * Retrieve document by ID from Azure Cosmos DB
13
+ * @param props Retrieve properties with client, collection (container), and id
14
+ * @returns Promise<IRetrieveResult>
15
+ */
16
+ export declare function retrieve(props: IRetrieveProps): Promise<IRetrieveResult>;
17
+ export declare function query(props: IQueryProps): Promise<IQueryResult>;
18
+ export declare function create(props: ICreateProps): Promise<ICreateResult>;
19
+ /**
20
+ * Upsert (create or update) a document in Azure Cosmos DB
21
+ * @param props Upsert properties with client, databaseId, containerId, record, and optional partitionKey
22
+ * @returns Promise<IUpsertResult>
23
+ */
24
+ export declare function upsert(props: IUpsertProps): Promise<IUpsertResult>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cosmosdb/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAgB,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAA2B,MAAM,SAAS,CAAC;AAMrO;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgC3F;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgD9E;AAGD,wBAAsB,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA+CrE;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAkCxE;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA2CxE"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Azure Cosmos DB implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.connect = connect;
7
+ exports.retrieve = retrieve;
8
+ exports.query = query;
9
+ exports.create = create;
10
+ exports.upsert = upsert;
11
+ const platform_helper_util_1 = require("@encodeagent/platform-helper-util");
12
+ const util_1 = require("../util");
13
+ const cosmos_1 = require("@azure/cosmos");
14
+ const query_builder_1 = require("./query-builder");
15
+ const ENGINE = "cosmosdb";
16
+ /**
17
+ * Create Azure Cosmos DB connection
18
+ * @param props Connection properties with URI and key
19
+ * @returns Promise<IConnectionResult>
20
+ */
21
+ async function connect(props) {
22
+ try {
23
+ const { uri, key } = props;
24
+ if (!uri) {
25
+ return {
26
+ engine: ENGINE,
27
+ error: 'Azure Cosmos DB URI is required'
28
+ };
29
+ }
30
+ if (!key) {
31
+ return {
32
+ engine: ENGINE,
33
+ error: 'Azure Cosmos DB key is required'
34
+ };
35
+ }
36
+ // Create Azure Cosmos DB client
37
+ const client = new cosmos_1.CosmosClient({ endpoint: uri, key });
38
+ return {
39
+ engine: ENGINE,
40
+ client
41
+ };
42
+ }
43
+ catch (error) {
44
+ return {
45
+ engine: ENGINE,
46
+ error: error instanceof Error ? error.message : 'Failed to connect to Azure Cosmos DB'
47
+ };
48
+ }
49
+ }
50
+ /**
51
+ * Retrieve document by ID from Azure Cosmos DB
52
+ * @param props Retrieve properties with client, collection (container), and id
53
+ * @returns Promise<IRetrieveResult>
54
+ */
55
+ async function retrieve(props) {
56
+ try {
57
+ const { client, id, partitionKey, databaseId, containerId } = props;
58
+ const errorResult = (0, util_1.validateDatabaseSetting)({
59
+ databaseId,
60
+ containerId,
61
+ checkDatabaseId: true,
62
+ checkContainerId: true
63
+ });
64
+ if (errorResult) {
65
+ return errorResult;
66
+ }
67
+ // Get database and container references
68
+ const database = client.database(databaseId);
69
+ const container = database.container(containerId);
70
+ if ((0, platform_helper_util_1.isNonEmptyString)(partitionKey)) {
71
+ const { resource: item } = await container.item(id, partitionKey).read();
72
+ return {
73
+ engine: ENGINE,
74
+ data: item
75
+ };
76
+ }
77
+ else {
78
+ const iterator = container.items.query({
79
+ query: "SELECT * FROM c WHERE c.id = @id",
80
+ parameters: [{ name: "@id", value: id }],
81
+ }, {
82
+ enableCrossPartitionQuery: true,
83
+ maxItemCount: 1, // fetch small pages; still fan-out under the hood
84
+ });
85
+ const { resources: items /*, headers */ } = await iterator.fetchNext();
86
+ return {
87
+ engine: ENGINE,
88
+ data: items?.[0] ?? null
89
+ };
90
+ }
91
+ }
92
+ catch (error) {
93
+ return {
94
+ engine: ENGINE,
95
+ error: error instanceof Error ? error.message : 'Failed to retrieve document from Cosmos DB'
96
+ };
97
+ }
98
+ }
99
+ async function query(props) {
100
+ let dbQuery = undefined;
101
+ const { client, databaseId, containerId, query } = props;
102
+ try {
103
+ const errorResult = (0, util_1.validateDatabaseSetting)({
104
+ databaseId,
105
+ containerId,
106
+ checkDatabaseId: true,
107
+ checkContainerId: true
108
+ });
109
+ if (errorResult) {
110
+ return { ...errorResult, query };
111
+ }
112
+ const database = client.database(databaseId);
113
+ const container = database.container(containerId);
114
+ const dbQuery = (0, query_builder_1.processQuery)(query);
115
+ const { sql, parameters } = dbQuery;
116
+ console.log({ query, dbQuery });
117
+ const iterator = container.items.query({ query: sql, parameters }, {
118
+ enableCrossPartitionQuery: true
119
+ });
120
+ const { resources } = await iterator.fetchAll();
121
+ ;
122
+ return {
123
+ engine: ENGINE,
124
+ data: resources,
125
+ query,
126
+ dbQuery
127
+ };
128
+ }
129
+ catch (error) {
130
+ return {
131
+ engine: ENGINE,
132
+ query,
133
+ dbQuery,
134
+ error: error instanceof Error ? error.message : 'Failed to query documents from Cosmos DB'
135
+ };
136
+ }
137
+ }
138
+ async function create(props) {
139
+ try {
140
+ const { client, databaseId, containerId, record } = props;
141
+ const errorResult = (0, util_1.validateDatabaseSetting)({
142
+ databaseId,
143
+ containerId,
144
+ checkDatabaseId: true,
145
+ checkContainerId: true
146
+ });
147
+ if (errorResult) {
148
+ return errorResult;
149
+ }
150
+ const database = client.database(databaseId);
151
+ const container = database.container(containerId);
152
+ const response = await container.items.create({
153
+ ...record,
154
+ id: record.id ?? (0, platform_helper_util_1.newGuid)()
155
+ });
156
+ return {
157
+ engine: ENGINE,
158
+ data: response.resource
159
+ };
160
+ }
161
+ catch (error) {
162
+ return {
163
+ engine: ENGINE,
164
+ error: error instanceof Error ? error.message : 'Failed to create record in Cosmos DB'
165
+ };
166
+ }
167
+ }
168
+ /**
169
+ * Upsert (create or update) a document in Azure Cosmos DB
170
+ * @param props Upsert properties with client, databaseId, containerId, record, and optional partitionKey
171
+ * @returns Promise<IUpsertResult>
172
+ */
173
+ async function upsert(props) {
174
+ try {
175
+ const { client, databaseId, containerId, record } = props;
176
+ const errorResult = (0, util_1.validateDatabaseSetting)({
177
+ databaseId,
178
+ containerId,
179
+ checkDatabaseId: true,
180
+ checkContainerId: true
181
+ });
182
+ if (errorResult) {
183
+ return errorResult;
184
+ }
185
+ const database = client.database(databaseId);
186
+ const container = database.container(containerId);
187
+ // Ensure the record has an id
188
+ const recordWithId = {
189
+ ...record,
190
+ id: record.id ?? (0, platform_helper_util_1.newGuid)()
191
+ };
192
+ // Use upsert operation which creates if not exists or replaces if exists
193
+ const response = await container.items.upsert(recordWithId);
194
+ // Check if this was a new document or an update
195
+ // Cosmos DB doesn't directly tell us, but we can infer from the response
196
+ const isNew = response.statusCode === 201;
197
+ return {
198
+ engine: ENGINE,
199
+ data: response.resource,
200
+ isNew
201
+ };
202
+ }
203
+ catch (error) {
204
+ return {
205
+ engine: ENGINE,
206
+ error: error instanceof Error ? error.message : 'Failed to upsert record in Cosmos DB'
207
+ };
208
+ }
209
+ }
210
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cosmosdb/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { IQuery } from "../util";
2
+ export interface IBuiltQuery {
3
+ sql: string;
4
+ parameters: {
5
+ name: string;
6
+ value: any;
7
+ }[];
8
+ }
9
+ export declare function processQuery(q: IQuery): IBuiltQuery;
10
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/cosmosdb/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAE9D,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CA4InD"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processQuery = processQuery;
4
+ function processQuery(q) {
5
+ let paramCounter = 0;
6
+ const parameters = [];
7
+ const nextParam = (value) => {
8
+ const name = `@p${++paramCounter}`;
9
+ parameters.push({ name, value });
10
+ return name;
11
+ };
12
+ const idf = (field) => field.trim().startsWith("c.") ? field.trim() : `c.${field.trim()}`;
13
+ // Accept both { op: "AND", filters: [...] } and relaxed { op: "AND", [0]: {...}, [1]: {...} }
14
+ const normalizeFilter = (f) => {
15
+ if (!f)
16
+ return undefined;
17
+ if (typeof f.op === "string" &&
18
+ (f.op === "AND" || f.op === "OR" || f.op === "NOT")) {
19
+ const filtersArr = Array.isArray(f.filters)
20
+ ? f.filters
21
+ : Object.keys(f)
22
+ .filter((k) => /^\d+$/.test(k))
23
+ .map((k) => f[k]);
24
+ return {
25
+ op: f.op,
26
+ filters: (filtersArr || [])
27
+ .map(normalizeFilter)
28
+ .filter(Boolean),
29
+ };
30
+ }
31
+ // assume simple filter
32
+ return f;
33
+ };
34
+ const buildSimple = (f) => {
35
+ const field = idf(f.name);
36
+ const op = f.op.toUpperCase();
37
+ switch (op) {
38
+ case "IN": {
39
+ const vals = Array.isArray(f.value) ? f.value : [f.value];
40
+ if (vals.length === 0)
41
+ return "1 = 0"; // empty IN -> no matches
42
+ const paramNames = vals.map((v) => nextParam(v));
43
+ return `${field} IN (${paramNames.join(", ")})`;
44
+ }
45
+ case "BETWEEN": {
46
+ const [lo, hi] = Array.isArray(f.value)
47
+ ? f.value
48
+ : [undefined, undefined];
49
+ const pLo = nextParam(lo);
50
+ const pHi = nextParam(hi);
51
+ return `${field} BETWEEN ${pLo} AND ${pHi}`;
52
+ }
53
+ case "LIKE": {
54
+ const p = nextParam(f.value);
55
+ return `${field} LIKE ${p}`;
56
+ }
57
+ case "CONTAINS": {
58
+ const p = nextParam(f.value);
59
+ return `CONTAINS(${field}, ${p})`;
60
+ }
61
+ case "STARTSWITH": {
62
+ const p = nextParam(f.value);
63
+ return `STARTSWITH(${field}, ${p})`;
64
+ }
65
+ case "ENDSWITH": {
66
+ const p = nextParam(f.value);
67
+ return `ENDSWITH(${field}, ${p})`;
68
+ }
69
+ default: {
70
+ const p = nextParam(f.value);
71
+ return `${field} ${op} ${p}`;
72
+ }
73
+ }
74
+ };
75
+ const buildFilter = (node) => {
76
+ if (!node)
77
+ return undefined;
78
+ // Group
79
+ if ("filters" in node && "op" in node) {
80
+ const group = node;
81
+ if (group.op === "NOT") {
82
+ const inner = group.filters?.map(buildFilter).filter(Boolean);
83
+ if (!inner || inner.length === 0)
84
+ return undefined;
85
+ return `(NOT (${inner.join(" AND ")}))`;
86
+ }
87
+ const parts = (group.filters || [])
88
+ .map(buildFilter)
89
+ .filter(Boolean);
90
+ if (parts.length === 0)
91
+ return undefined;
92
+ if (parts.length === 1)
93
+ return parts[0];
94
+ return `(${parts.join(` ${group.op} `)})`;
95
+ }
96
+ // Simple
97
+ return buildSimple(node);
98
+ };
99
+ // SELECT
100
+ const cols = q.attributes && q.attributes.length > 0
101
+ ? q.attributes.map(idf).join(", ")
102
+ : "c";
103
+ const distinct = q.distinct ? "DISTINCT " : "";
104
+ const top = q.top && q.top > 0 ? `TOP ${q.top} ` : "";
105
+ let sql = `SELECT ${distinct}${top}${cols} FROM c`;
106
+ // WHERE
107
+ const where = buildFilter(normalizeFilter(q.filter));
108
+ if (where)
109
+ sql += ` WHERE ${where}`;
110
+ // ORDER BY
111
+ if (q.orderBy && q.orderBy.length > 0) {
112
+ const parts = q.orderBy.map((o) => `${idf(o.name)} ${o.direction?.toUpperCase() === "DESC" ? "DESC" : "ASC"}`);
113
+ sql += ` ORDER BY ${parts.join(", ")}`;
114
+ }
115
+ // Pagination (Cosmos requires ORDER BY for OFFSET/LIMIT)
116
+ if (q.orderBy && q.orderBy.length > 0 && typeof q.pageSize === "number" && q.pageSize > 0) {
117
+ const page = Math.max(0, q.page ?? 0);
118
+ const offset = page * q.pageSize;
119
+ sql += ` OFFSET ${offset} LIMIT ${q.pageSize}`;
120
+ }
121
+ return { sql, parameters };
122
+ }
123
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/cosmosdb/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview AWS DynamoDB implementation
3
+ */
4
+ import { IConnectionForServiceProps, IConnectionResult, IRetrieveResult, IRetrieveProps, ICreateProps, IUpsertProps, IUpsertResult } from '../util';
5
+ /**
6
+ * Create AWS DynamoDB connection
7
+ * @param props Connection properties with URI and key
8
+ * @returns Promise<IConnectionResult>
9
+ */
10
+ export declare function connect(props: IConnectionForServiceProps): Promise<IConnectionResult>;
11
+ /**
12
+ * Retrieve document by ID from AWS DynamoDB
13
+ * @param props Retrieve properties with client, collection (table), and id
14
+ * @returns Promise<IRetrieveResult<T>>
15
+ */
16
+ export declare function retrieve<T>(props: IRetrieveProps): Promise<IRetrieveResult<T>>;
17
+ export declare function create<T>(props: ICreateProps): Promise<IRetrieveResult<T>>;
18
+ /**
19
+ * Upsert (create or update) a document in AWS DynamoDB
20
+ * @param props Upsert properties with client, containerId (table name), and record
21
+ * @returns Promise<IUpsertResult<T>>
22
+ */
23
+ export declare function upsert<T>(props: IUpsertProps): Promise<IUpsertResult<T>>;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dynamodb/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAiB,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOnK;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmD3F;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAkCpF;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAyChF;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAwD9E"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview AWS DynamoDB implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.connect = connect;
7
+ exports.retrieve = retrieve;
8
+ exports.create = create;
9
+ exports.upsert = upsert;
10
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
11
+ const util_dynamodb_1 = require("@aws-sdk/util-dynamodb");
12
+ const platform_helper_util_1 = require("@encodeagent/platform-helper-util");
13
+ const ENGINE = "dynamodb";
14
+ /**
15
+ * Create AWS DynamoDB connection
16
+ * @param props Connection properties with URI and key
17
+ * @returns Promise<IConnectionResult>
18
+ */
19
+ async function connect(props) {
20
+ try {
21
+ const { uri, key } = props;
22
+ if (!uri) {
23
+ return {
24
+ engine: "dynamodb",
25
+ error: 'AWS DynamoDB URI is required'
26
+ };
27
+ }
28
+ if (!key) {
29
+ return {
30
+ engine: ENGINE,
31
+ error: 'AWS DynamoDB access key is required'
32
+ };
33
+ }
34
+ // Parse AWS credentials from key (format: accessKeyId:secretAccessKey)
35
+ const [accessKeyId, secretAccessKey] = key.split(':');
36
+ if (!accessKeyId || !secretAccessKey) {
37
+ return {
38
+ engine: ENGINE,
39
+ error: 'AWS key must be in format: accessKeyId:secretAccessKey'
40
+ };
41
+ }
42
+ // Create DynamoDB client configuration
43
+ const clientConfig = {
44
+ credentials: {
45
+ accessKeyId,
46
+ secretAccessKey
47
+ },
48
+ endpoint: uri.startsWith('http') ? uri : undefined
49
+ };
50
+ // Create AWS DynamoDB client
51
+ const client = new client_dynamodb_1.DynamoDBClient(clientConfig);
52
+ return {
53
+ engine: ENGINE,
54
+ client
55
+ };
56
+ }
57
+ catch (error) {
58
+ return {
59
+ engine: ENGINE,
60
+ error: error instanceof Error ? error.message : 'Failed to connect to AWS DynamoDB'
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Retrieve document by ID from AWS DynamoDB
66
+ * @param props Retrieve properties with client, collection (table), and id
67
+ * @returns Promise<IRetrieveResult<T>>
68
+ */
69
+ async function retrieve(props) {
70
+ try {
71
+ const { client, id, containerId } = props;
72
+ // Create GetItem command
73
+ const command = new client_dynamodb_1.GetItemCommand({
74
+ TableName: containerId,
75
+ Key: (0, util_dynamodb_1.marshall)({ id })
76
+ });
77
+ // Execute the command
78
+ const response = await client.send(command);
79
+ if (!response.Item) {
80
+ return {
81
+ engine: ENGINE,
82
+ error: `Document with ID '${id}' not found in table '${containerId}'`
83
+ };
84
+ }
85
+ // Unmarshall the DynamoDB item to regular object
86
+ const data = (0, util_dynamodb_1.unmarshall)(response.Item);
87
+ return {
88
+ engine: ENGINE,
89
+ data
90
+ };
91
+ }
92
+ catch (error) {
93
+ return {
94
+ engine: ENGINE,
95
+ error: error instanceof Error ? error.message : 'Failed to retrieve document from DynamoDB'
96
+ };
97
+ }
98
+ }
99
+ async function create(props) {
100
+ try {
101
+ const { client, containerId, record } = props;
102
+ if (!containerId) {
103
+ return {
104
+ engine: ENGINE,
105
+ error: 'The containerId (table name) is required'
106
+ };
107
+ }
108
+ if (!record) {
109
+ return {
110
+ engine: ENGINE,
111
+ error: 'The record is required'
112
+ };
113
+ }
114
+ const item = {
115
+ ...record,
116
+ id: record.id ?? (0, platform_helper_util_1.newGuid)()
117
+ };
118
+ const command = new client_dynamodb_1.PutItemCommand({
119
+ TableName: containerId,
120
+ Item: (0, util_dynamodb_1.marshall)(item)
121
+ });
122
+ await client.send(command);
123
+ return {
124
+ engine: ENGINE,
125
+ data: item
126
+ };
127
+ }
128
+ catch (error) {
129
+ return {
130
+ engine: ENGINE,
131
+ error: error instanceof Error ? error.message : 'Failed to create record in DynamoDB'
132
+ };
133
+ }
134
+ }
135
+ /**
136
+ * Upsert (create or update) a document in AWS DynamoDB
137
+ * @param props Upsert properties with client, containerId (table name), and record
138
+ * @returns Promise<IUpsertResult<T>>
139
+ */
140
+ async function upsert(props) {
141
+ try {
142
+ const { client, containerId, record } = props;
143
+ if (!containerId) {
144
+ return {
145
+ engine: ENGINE,
146
+ error: 'The containerId (table name) is required'
147
+ };
148
+ }
149
+ if (!record) {
150
+ return {
151
+ engine: ENGINE,
152
+ error: 'The record is required'
153
+ };
154
+ }
155
+ // Ensure the record has an id
156
+ const recordWithId = {
157
+ ...record,
158
+ id: record.id ?? (0, platform_helper_util_1.newGuid)()
159
+ };
160
+ // Check if the item exists to determine if this is a new record
161
+ let isNew = true;
162
+ if (record.id) {
163
+ const getCommand = new client_dynamodb_1.GetItemCommand({
164
+ TableName: containerId,
165
+ Key: (0, util_dynamodb_1.marshall)({ id: record.id })
166
+ });
167
+ const getResponse = await client.send(getCommand);
168
+ isNew = !getResponse.Item;
169
+ }
170
+ // Use PutItem which will create or replace the item
171
+ const putCommand = new client_dynamodb_1.PutItemCommand({
172
+ TableName: containerId,
173
+ Item: (0, util_dynamodb_1.marshall)(recordWithId)
174
+ });
175
+ await client.send(putCommand);
176
+ return {
177
+ engine: ENGINE,
178
+ data: recordWithId,
179
+ isNew
180
+ };
181
+ }
182
+ catch (error) {
183
+ return {
184
+ engine: ENGINE,
185
+ error: error instanceof Error ? error.message : 'Failed to upsert record in DynamoDB'
186
+ };
187
+ }
188
+ }
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dynamodb/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview GCP Firestore implementation
3
+ */
4
+ import { IConnectionForServiceProps, IConnectionResult, IRetrieveResult, IRetrieveProps, ICreateProps, ICreateResult, IUpsertProps, IUpsertResult } from '../util';
5
+ export declare function connect(props: IConnectionForServiceProps): Promise<IConnectionResult>;
6
+ export declare function retrieve<T>(props: IRetrieveProps): Promise<IRetrieveResult<T>>;
7
+ export declare function create<T>(props: ICreateProps): Promise<ICreateResult<T>>;
8
+ export declare function upsert<T>(props: IUpsertProps): Promise<IUpsertResult<T>>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/firestore/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAInK,wBAAsB,OAAO,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG3F;AAGD,wBAAsB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAGpF;AAGD,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAgC9E;AAGD,wBAAsB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAgC9E"}