@ingeno/pipedream-services 1.0.61 → 1.0.62
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/README.md +39 -0
- package/dist/aws/aws-cost.d.ts +1 -1
- package/dist/aws/aws-cost.d.ts.map +1 -1
- package/dist/aws/aws-cost.js +26 -16
- package/dist/aws/aws-cost.js.map +1 -1
- package/dist/aws/commands.d.ts.map +1 -1
- package/dist/aws/commands.js +2 -3
- package/dist/aws/commands.js.map +1 -1
- package/dist/aws/execute-as.d.ts.map +1 -1
- package/dist/aws/execute-as.js +8 -12
- package/dist/aws/execute-as.js.map +1 -1
- package/dist/collections/collections-summary.d.ts +2 -2
- package/dist/collections/collections-summary.d.ts.map +1 -1
- package/dist/collections/collections-summary.js +1 -1
- package/dist/collections/collections-summary.js.map +1 -1
- package/dist/collections/collections-to-table.d.ts +2 -1
- package/dist/collections/collections-to-table.d.ts.map +1 -1
- package/dist/collections/collections-to-table.js +33 -98
- package/dist/collections/collections-to-table.js.map +1 -1
- package/dist/collections/converter.d.ts +3 -0
- package/dist/collections/converter.d.ts.map +1 -0
- package/dist/collections/converter.js +119 -0
- package/dist/collections/converter.js.map +1 -0
- package/dist/collections/index.d.ts +1 -0
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +1 -0
- package/dist/collections/index.js.map +1 -1
- package/dist/collections/types.d.ts +5 -5
- package/dist/collections/types.d.ts.map +1 -1
- package/dist/date/date-range.js +1 -1
- package/dist/date/date-range.js.map +1 -1
- package/dist/postgres/postgres.d.ts +1 -1
- package/dist/postgres/postgres.d.ts.map +1 -1
- package/dist/postgres/postgres.js +8 -6
- package/dist/postgres/postgres.js.map +1 -1
- package/dist/postgres/test-config.d.ts +16 -0
- package/dist/postgres/test-config.d.ts.map +1 -0
- package/dist/postgres/test-config.js +15 -0
- package/dist/postgres/test-config.js.map +1 -0
- package/dist/streams/list-stream.d.ts +1 -1
- package/dist/streams/list-stream.d.ts.map +1 -1
- package/dist/streams/list-stream.js +1 -3
- package/dist/streams/list-stream.js.map +1 -1
- package/dist/zoho-crm/module-processor.d.ts +2 -2
- package/dist/zoho-crm/module-processor.d.ts.map +1 -1
- package/dist/zoho-crm/module-processor.js +28 -24
- package/dist/zoho-crm/module-processor.js.map +1 -1
- package/dist/zoho-crm/zoho-auth.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-auth.js +8 -8
- package/dist/zoho-crm/zoho-auth.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-client.d.ts +4 -4
- package/dist/zoho-crm/zoho-crm-client.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-client.js +37 -37
- package/dist/zoho-crm/zoho-crm-client.js.map +1 -1
- package/dist/zoho-crm/zoho-crm-fetcher.d.ts +1 -1
- package/dist/zoho-crm/zoho-crm-fetcher.d.ts.map +1 -1
- package/dist/zoho-crm/zoho-crm-fetcher.js +5 -5
- package/dist/zoho-crm/zoho-crm-fetcher.js.map +1 -1
- package/package.json +11 -1
package/README.md
CHANGED
|
@@ -72,6 +72,21 @@ pnpm build
|
|
|
72
72
|
# Run tests
|
|
73
73
|
pnpm test
|
|
74
74
|
|
|
75
|
+
# Run tests with coverage
|
|
76
|
+
pnpm test:coverage
|
|
77
|
+
|
|
78
|
+
# Run tests in watch mode
|
|
79
|
+
pnpm test:watch
|
|
80
|
+
|
|
81
|
+
# Run tests with UI
|
|
82
|
+
pnpm test:ui
|
|
83
|
+
|
|
84
|
+
# Run tests with coverage and UI
|
|
85
|
+
pnpm test:coverage:ui
|
|
86
|
+
|
|
87
|
+
# Run tests with coverage and open report
|
|
88
|
+
pnpm test:coverage:open
|
|
89
|
+
|
|
75
90
|
# Lint code
|
|
76
91
|
pnpm lint
|
|
77
92
|
|
|
@@ -79,6 +94,30 @@ pnpm lint
|
|
|
79
94
|
pnpm pub
|
|
80
95
|
```
|
|
81
96
|
|
|
97
|
+
## Code Coverage
|
|
98
|
+
|
|
99
|
+
The project includes comprehensive code coverage reporting with:
|
|
100
|
+
|
|
101
|
+
- **HTML Reports**: Navigate to `./coverage/index.html` after running `pnpm test:coverage`
|
|
102
|
+
- **Multiple Formats**: Text, HTML, JSON, and JSON-summary reports
|
|
103
|
+
- **Coverage Thresholds**: 70% minimum for branches, functions, lines, and statements
|
|
104
|
+
- **Detailed Analysis**: Line-by-line coverage information
|
|
105
|
+
- **Visual Interface**: Use `pnpm test:coverage:ui` for interactive coverage exploration
|
|
106
|
+
|
|
107
|
+
### Current Coverage Highlights
|
|
108
|
+
|
|
109
|
+
- **Collections Module**: 90.32% statement coverage with excellent test coverage
|
|
110
|
+
- **Converter Module**: 93.18% statement coverage with comprehensive type conversion tests
|
|
111
|
+
- **Collections-to-Table**: 100% statement coverage with complete edge case testing
|
|
112
|
+
|
|
113
|
+
### Coverage Configuration
|
|
114
|
+
|
|
115
|
+
Coverage is configured to:
|
|
116
|
+
- Use V8 coverage provider for accurate reporting
|
|
117
|
+
- Exclude test files, type definitions, and index files
|
|
118
|
+
- Generate reports in the `./coverage` directory
|
|
119
|
+
- Enforce quality thresholds to maintain code quality
|
|
120
|
+
|
|
82
121
|
## Architecture
|
|
83
122
|
|
|
84
123
|
This package contains only production code and is designed to be:
|
package/dist/aws/aws-cost.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-cost.d.ts","sourceRoot":"","sources":["../../src/aws/aws-cost.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aws-cost.d.ts","sourceRoot":"","sources":["../../src/aws/aws-cost.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,WAAW,EAAE,CAAA;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAA;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAQ3B;IAEM,YAAY,IAAI,SAAS;IAInB,cAAc,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC;YA0CjE,eAAe;YAmBf,WAAW;CAqC1B"}
|
package/dist/aws/aws-cost.js
CHANGED
|
@@ -2,23 +2,32 @@ import { CostExplorerClient, GetCostAndUsageCommand } from '@aws-sdk/client-cost
|
|
|
2
2
|
import { OrganizationsClient, ListAccountsCommand } from '@aws-sdk/client-organizations';
|
|
3
3
|
import { monthsAgo } from '../date/date-range.js';
|
|
4
4
|
export class AwsCostService {
|
|
5
|
-
costMetrics = [
|
|
5
|
+
costMetrics = [
|
|
6
|
+
'BlendedCost',
|
|
7
|
+
'UnblendedCost',
|
|
8
|
+
'UsageQuantity',
|
|
9
|
+
'NormalizedUsageAmount',
|
|
10
|
+
'AmortizedCost',
|
|
11
|
+
'NetUnblendedCost',
|
|
12
|
+
'NetAmortizedCost',
|
|
13
|
+
];
|
|
6
14
|
getDateRange() {
|
|
7
15
|
return monthsAgo(1);
|
|
8
16
|
}
|
|
9
17
|
async getCollections(credentials) {
|
|
10
18
|
const costExplorer = new CostExplorerClient({
|
|
11
19
|
credentials,
|
|
12
|
-
region: 'us-east-1'
|
|
20
|
+
region: 'us-east-1',
|
|
13
21
|
});
|
|
14
22
|
const organizations = new OrganizationsClient({
|
|
15
23
|
credentials,
|
|
16
|
-
region: 'us-east-1'
|
|
24
|
+
region: 'us-east-1',
|
|
17
25
|
});
|
|
18
26
|
const dateRange = this.getDateRange();
|
|
19
27
|
const accounts = await this.listAWSAccounts(organizations);
|
|
20
28
|
const costs = await this.getAwsCosts(costExplorer, dateRange);
|
|
21
|
-
const costsAndUsages = costs
|
|
29
|
+
const costsAndUsages = costs
|
|
30
|
+
.map((month) => month.Groups?.map((group) => {
|
|
22
31
|
const date = month.TimePeriod?.Start || '';
|
|
23
32
|
const account_id = group.Keys?.[0] || '';
|
|
24
33
|
const service = group.Keys?.[1] || '';
|
|
@@ -28,10 +37,11 @@ export class AwsCostService {
|
|
|
28
37
|
service,
|
|
29
38
|
...this.costMetrics.reduce((acc, metric) => ({
|
|
30
39
|
...acc,
|
|
31
|
-
[metric]: group.Metrics?.[metric]?.Amount || '0'
|
|
32
|
-
}), {})
|
|
40
|
+
[metric]: group.Metrics?.[metric]?.Amount || '0',
|
|
41
|
+
}), {}),
|
|
33
42
|
};
|
|
34
|
-
}) || [])
|
|
43
|
+
}) || [])
|
|
44
|
+
.flat();
|
|
35
45
|
return { costsAndUsages, accounts };
|
|
36
46
|
}
|
|
37
47
|
async listAWSAccounts(organizations) {
|
|
@@ -41,7 +51,7 @@ export class AwsCostService {
|
|
|
41
51
|
do {
|
|
42
52
|
const command = new ListAccountsCommand({ NextToken: nextToken });
|
|
43
53
|
const data = await organizations.send(command);
|
|
44
|
-
accounts = accounts.concat(data.Accounts || []);
|
|
54
|
+
accounts = accounts.concat(data.Accounts != null || []);
|
|
45
55
|
nextToken = data.NextToken;
|
|
46
56
|
} while (nextToken);
|
|
47
57
|
return accounts;
|
|
@@ -52,34 +62,34 @@ export class AwsCostService {
|
|
|
52
62
|
}
|
|
53
63
|
}
|
|
54
64
|
async getAwsCosts(costExplorer, dateRange) {
|
|
55
|
-
const paramMetrics = this.costMetrics.map(metric => metric.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase());
|
|
65
|
+
const paramMetrics = this.costMetrics.map((metric) => metric.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase());
|
|
56
66
|
const input = {
|
|
57
67
|
TimePeriod: {
|
|
58
68
|
Start: dateRange.startDate,
|
|
59
|
-
End: dateRange.endDate
|
|
69
|
+
End: dateRange.endDate,
|
|
60
70
|
},
|
|
61
71
|
Granularity: 'DAILY',
|
|
62
72
|
Metrics: paramMetrics,
|
|
63
73
|
GroupBy: [
|
|
64
74
|
{
|
|
65
75
|
Type: 'DIMENSION',
|
|
66
|
-
Key: 'LINKED_ACCOUNT'
|
|
76
|
+
Key: 'LINKED_ACCOUNT',
|
|
67
77
|
},
|
|
68
78
|
{
|
|
69
79
|
Type: 'DIMENSION',
|
|
70
|
-
Key: 'SERVICE'
|
|
71
|
-
}
|
|
72
|
-
]
|
|
80
|
+
Key: 'SERVICE',
|
|
81
|
+
},
|
|
82
|
+
],
|
|
73
83
|
};
|
|
74
84
|
let allResults = [];
|
|
75
85
|
let nextPageToken;
|
|
76
86
|
do {
|
|
77
87
|
const command = new GetCostAndUsageCommand({
|
|
78
88
|
...input,
|
|
79
|
-
NextPageToken: nextPageToken
|
|
89
|
+
NextPageToken: nextPageToken,
|
|
80
90
|
});
|
|
81
91
|
const data = await costExplorer.send(command);
|
|
82
|
-
allResults = allResults.concat(data.ResultsByTime || []);
|
|
92
|
+
allResults = allResults.concat(data.ResultsByTime != null || []);
|
|
83
93
|
nextPageToken = data.NextPageToken;
|
|
84
94
|
} while (nextPageToken);
|
|
85
95
|
return allResults;
|
package/dist/aws/aws-cost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-cost.js","sourceRoot":"","sources":["../../src/aws/aws-cost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC1F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"aws-cost.js","sourceRoot":"","sources":["../../src/aws/aws-cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/aws/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/aws/commands.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,GAAG,CAAA;IACX,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAGD,eAAO,MAAM,iBAAiB,GAAI,OAAO,GAAG,KAAG,OAS9C,CAAA;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAK;gBAER,OAAO,EAAE,sBAAsB;IAO9B,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAqChF"}
|
package/dist/aws/commands.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import pRetry from 'p-retry';
|
|
2
1
|
import pLimiter from 'p-limit';
|
|
3
|
-
import { AbortError } from 'p-retry';
|
|
2
|
+
import pRetry, { AbortError } from 'p-retry';
|
|
4
3
|
// Helper function to detect throttling errors
|
|
5
4
|
export const isThrottlingError = (error) => {
|
|
6
5
|
return (error.name === 'ThrottlingException' ||
|
|
@@ -20,7 +19,7 @@ export class CommandExecutor {
|
|
|
20
19
|
}
|
|
21
20
|
async executeCommand(command, operationName) {
|
|
22
21
|
return this.limiter(async () => {
|
|
23
|
-
return pRetry(async (attemptNumber) => {
|
|
22
|
+
return await pRetry(async (attemptNumber) => {
|
|
24
23
|
try {
|
|
25
24
|
if (attemptNumber > 1) {
|
|
26
25
|
console.log(`🔄 Retrying ${operationName} (attempt ${attemptNumber})`);
|
package/dist/aws/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/aws/commands.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/aws/commands.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,SAAS,CAAA;AAC9B,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAO5C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAU,EAAW,EAAE;IACvD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,qBAAqB;QACpC,KAAK,CAAC,IAAI,KAAK,0BAA0B;QACzC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC;QAClC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;QACrC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC;QAC5C,KAAK,CAAC,SAAS,EAAE,cAAc,KAAK,GAAG,CACxC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,eAAe;IAClB,MAAM,CAAK;IACX,OAAO,CAAK;IAEpB,YAAY,OAA+B;QACzC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;QAE/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAI,OAAY,EAAE,aAAqB;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC7B,OAAO,MAAM,MAAM,CACjB,KAAK,EAAE,aAAa,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,eAAe,aAAa,aAAa,aAAa,GAAG,CAAC,CAAA;oBACxE,CAAC;oBACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBAChD,OAAO,QAAQ,CAAA;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,OAAO,CAAC,GAAG,CACT,8BAA8B,aAAa,aAAa,aAAa,4BAA4B,CAClG,CAAA;wBACD,MAAM,KAAK,CAAA,CAAC,iCAAiC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,UAAU,CAAC,KAAc,CAAC,CAAA;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC,EACD;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,OAAO,CAAC,GAAG,CACT,WAAW,KAAK,CAAC,aAAa,IAC5B,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,aAC5B,QAAQ,aAAa,wBAAyB,KAAa,CAAC,OAAO,IAAI,CACxE,CAAA;gBACH,CAAC;aACF,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-as.d.ts","sourceRoot":"","sources":["../../src/aws/execute-as.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-as.d.ts","sourceRoot":"","sources":["../../src/aws/execute-as.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAA;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3C,WAAW,EAAE,qBAAqB,GAAG,CAAC,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,qBAAqB,CAAA;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,6BAA6B,GAAI,SAAS,iBAAiB,KAAG,6BAc1E,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,SAAS,iBAAiB,KAAG,gBAUvE,CAAA;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,qBAAqB,CAAA;IACtC,kCAAkC,CAAC,EAAE,OAAO,CAAA;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B,KAAG,gBAAgB,EAiC3F,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,OAAO,EAAE,gBAAgB,EACzB,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,GACxE,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED,eAAO,MAAM,YAAY,GAAU,CAAC,EAClC,SAAS,gBAAgB,EAAE,EAC3B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,KACxE,OAAO,CAAC,CAAC,EAAE,CAA4E,CAAA"}
|
package/dist/aws/execute-as.js
CHANGED
|
@@ -17,17 +17,17 @@ export const assumeRoleExecutionContext = (options) => {
|
|
|
17
17
|
const { accountId } = options;
|
|
18
18
|
const tempCredentialsProvider = assumeRoleCredentialsProvider(options);
|
|
19
19
|
return {
|
|
20
|
-
accountId
|
|
20
|
+
accountId,
|
|
21
21
|
credentials: async () => {
|
|
22
22
|
return await tempCredentialsProvider();
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
26
|
export const allExecutionContexts = (options) => {
|
|
27
|
-
const { mainAccountId, mainCredentials, includeMainAccountExecutionContext = true, accountIds, roleNameToAssume } = options;
|
|
27
|
+
const { mainAccountId, mainCredentials, includeMainAccountExecutionContext = true, accountIds, roleNameToAssume, } = options;
|
|
28
28
|
const mainExecutionContext = {
|
|
29
29
|
accountId: mainAccountId,
|
|
30
|
-
credentials: mainCredentials
|
|
30
|
+
credentials: mainCredentials,
|
|
31
31
|
};
|
|
32
32
|
const assumedExecutionContexts = accountIds.map((accountId) => ({
|
|
33
33
|
accountId: mainAccountId,
|
|
@@ -40,7 +40,7 @@ export const allExecutionContexts = (options) => {
|
|
|
40
40
|
clientConfig: { credentials: mainCredentials },
|
|
41
41
|
});
|
|
42
42
|
return await tempCredentialsProvider();
|
|
43
|
-
}
|
|
43
|
+
},
|
|
44
44
|
}));
|
|
45
45
|
const result = [
|
|
46
46
|
...(includeMainAccountExecutionContext ? [mainExecutionContext] : []),
|
|
@@ -68,12 +68,8 @@ export const allExecutionContexts = (options) => {
|
|
|
68
68
|
*/
|
|
69
69
|
export async function executeAs(options, fn) {
|
|
70
70
|
try {
|
|
71
|
-
const accountId = typeof options.accountId === 'function'
|
|
72
|
-
|
|
73
|
-
: options.accountId;
|
|
74
|
-
const credentials = typeof options.credentials === 'function'
|
|
75
|
-
? await options.credentials()
|
|
76
|
-
: options.credentials;
|
|
71
|
+
const accountId = typeof options.accountId === 'function' ? await options.accountId() : options.accountId;
|
|
72
|
+
const credentials = typeof options.credentials === 'function' ? await options.credentials() : options.credentials;
|
|
77
73
|
return await fn(accountId, credentials);
|
|
78
74
|
}
|
|
79
75
|
catch (error) {
|
|
@@ -81,5 +77,5 @@ export async function executeAs(options, fn) {
|
|
|
81
77
|
throw error;
|
|
82
78
|
}
|
|
83
79
|
}
|
|
84
|
-
export const executeAllAs = async (options, fn) => Promise.all(options.map((opt) => executeAs(opt, fn)));
|
|
80
|
+
export const executeAllAs = async (options, fn) => await Promise.all(options.map(async (opt) => await executeAs(opt, fn)));
|
|
85
81
|
//# sourceMappingURL=execute-as.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-as.js","sourceRoot":"","sources":["../../src/aws/execute-as.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"execute-as.js","sourceRoot":"","sources":["../../src/aws/execute-as.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Collection } from
|
|
2
|
-
export declare const collectionSummary: (collections:
|
|
1
|
+
import type { Collection } from './types.js';
|
|
2
|
+
export declare const collectionSummary: (collections: Collection[]) => void;
|
|
3
3
|
//# sourceMappingURL=collections-summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections-summary.d.ts","sourceRoot":"","sources":["../../src/collections/collections-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"collections-summary.d.ts","sourceRoot":"","sources":["../../src/collections/collections-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,eAAO,MAAM,iBAAiB,GAAI,aAAa,UAAU,EAAE,SAK1D,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const collectionSummary = (collections) => {
|
|
2
|
-
collections.forEach(collection => {
|
|
2
|
+
collections.forEach((collection) => {
|
|
3
3
|
console.log(`${collection.schema.name} - ${collection.objects.length} objects`);
|
|
4
4
|
console.log(`${collection.schema.name} - sample object: ${JSON.stringify(collection.objects[0], null, 2)}`);
|
|
5
5
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections-summary.js","sourceRoot":"","sources":["../../src/collections/collections-summary.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"collections-summary.js","sourceRoot":"","sources":["../../src/collections/collections-summary.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAyB,EAAE,EAAE;IAC7D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,CAAA;QAC/E,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7G,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Collection } from
|
|
1
|
+
import type { Collection } from './types.js';
|
|
2
|
+
export declare const deepFind: (obj: any, path: string) => any;
|
|
2
3
|
export declare const collectionsToTables: (collections: Collection[]) => {
|
|
3
4
|
schema: import("./types.js").CollectionSchema;
|
|
4
5
|
rows: any[][];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections-to-table.d.ts","sourceRoot":"","sources":["../../src/collections/collections-to-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collections-to-table.d.ts","sourceRoot":"","sources":["../../src/collections/collections-to-table.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,YAAY,CAAA;AAGpD,eAAO,MAAM,QAAQ,GAAI,KAAK,GAAG,EAAE,MAAM,MAAM,KAAG,GAMjD,CAAA;AA6BD,eAAO,MAAM,mBAAmB,GAAI,aAAa,UAAU,EAAE;;;GAE5D,CAAA"}
|
|
@@ -1,101 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
// If it's an object/array, serialize to JSON string for PostgreSQL
|
|
25
|
-
try {
|
|
26
|
-
result = JSON.stringify(value);
|
|
27
|
-
}
|
|
28
|
-
catch (jsonError) {
|
|
29
|
-
console.error(`Failed to serialize value to JSON for column "${column.name}": ${value}`);
|
|
30
|
-
result = null;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else if (isString(value) && type !== 'string') {
|
|
35
|
-
result = value.trim();
|
|
36
|
-
result = result === '' ? undefined : result;
|
|
37
|
-
if (['datetime', 'date'].includes(type)) {
|
|
38
|
-
try {
|
|
39
|
-
const dateObj = new Date(result);
|
|
40
|
-
if (isNaN(dateObj.getTime())) {
|
|
41
|
-
console.warn(`Invalid date "${result}" for column "${column.name}", setting to null`);
|
|
42
|
-
result = null;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// Convert to ISO string for PostgreSQL compatibility
|
|
46
|
-
result = dateObj.toISOString();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (dateError) {
|
|
50
|
-
console.error(`Date parsing error for "${result}" in column "${column.name}": ${dateError}`);
|
|
51
|
-
result = null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else if (['number', 'currency'].includes(type)) {
|
|
55
|
-
result = parseFloat(result);
|
|
56
|
-
}
|
|
57
|
-
else if ('bool' === type) {
|
|
58
|
-
result = ['true', 'yes'].includes(result);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
console.error(`Error while converting "${value}" to typed value for column "${column.name}" with type ${type}: ${error}`);
|
|
64
|
-
result = undefined;
|
|
65
|
-
}
|
|
66
|
-
return result;
|
|
67
|
-
};
|
|
68
|
-
const deepFind = (obj, path) => {
|
|
69
|
-
var paths = path.split('.'), current = obj, i;
|
|
70
|
-
for (i = 0; i < paths.length; ++i) {
|
|
71
|
-
if (current[paths[i]] == undefined) {
|
|
72
|
-
return undefined;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
current = current[paths[i]];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return current;
|
|
79
|
-
};
|
|
80
|
-
const objectsToTable = (objects, columns) => {
|
|
81
|
-
const rows = objects.map((element, index) => columns.map(column => {
|
|
82
|
-
let value;
|
|
83
|
-
// Handle transform function if present
|
|
84
|
-
if (column.transform) {
|
|
85
|
-
value = column.transform(element);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
value = deepFind(element, column.path || column.name);
|
|
89
|
-
}
|
|
90
|
-
return convert(column, value);
|
|
91
|
-
}));
|
|
92
|
-
return rows;
|
|
93
|
-
};
|
|
94
|
-
const result = collections.map(collection => {
|
|
95
|
-
const { objects, schema } = collection;
|
|
96
|
-
const rows = objectsToTable(objects, schema.columns);
|
|
97
|
-
return { schema, rows };
|
|
1
|
+
import { convert } from './converter.js';
|
|
2
|
+
// Path Navigation Functions
|
|
3
|
+
export const deepFind = (obj, path) => {
|
|
4
|
+
if (!path || !obj)
|
|
5
|
+
return undefined;
|
|
6
|
+
return path.split('.').reduce((current, key) => {
|
|
7
|
+
return current && key in current ? current[key] : undefined;
|
|
8
|
+
}, obj);
|
|
9
|
+
};
|
|
10
|
+
// Value Extraction Functions
|
|
11
|
+
const extractValue = (element, column) => {
|
|
12
|
+
if (column.transform != null) {
|
|
13
|
+
return column.transform(element);
|
|
14
|
+
}
|
|
15
|
+
return deepFind(element, column.path || column.name);
|
|
16
|
+
};
|
|
17
|
+
const convertRowValues = (element, columns) => {
|
|
18
|
+
return columns.map((column) => {
|
|
19
|
+
const rawValue = extractValue(element, column);
|
|
20
|
+
return convert(column, rawValue);
|
|
98
21
|
});
|
|
99
|
-
|
|
22
|
+
};
|
|
23
|
+
// Table Conversion Functions
|
|
24
|
+
const objectsToTable = (objects, columns) => {
|
|
25
|
+
return objects.map((element) => convertRowValues(element, columns));
|
|
26
|
+
};
|
|
27
|
+
const convertCollectionToTable = (collection) => {
|
|
28
|
+
const { objects, schema } = collection;
|
|
29
|
+
const rows = objectsToTable(objects, schema.columns);
|
|
30
|
+
return { schema, rows };
|
|
31
|
+
};
|
|
32
|
+
// Main Export Function
|
|
33
|
+
export const collectionsToTables = (collections) => {
|
|
34
|
+
return collections.map(convertCollectionToTable);
|
|
100
35
|
};
|
|
101
36
|
//# sourceMappingURL=collections-to-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections-to-table.js","sourceRoot":"","sources":["../../src/collections/collections-to-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collections-to-table.js","sourceRoot":"","sources":["../../src/collections/collections-to-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAIxC,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,IAAY,EAAO,EAAE;IACtD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QAC7C,OAAO,OAAO,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7D,CAAC,EAAE,GAAG,CAAC,CAAA;AACT,CAAC,CAAA;AAED,6BAA6B;AAC7B,MAAM,YAAY,GAAG,CAAC,OAAY,EAAE,MAAc,EAAO,EAAE;IACzD,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,OAAY,EAAE,OAAiB,EAAS,EAAE;IAClE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9C,OAAO,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,6BAA6B;AAC7B,MAAM,cAAc,GAAG,CAAC,OAAc,EAAE,OAAiB,EAAW,EAAE;IACpE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,wBAAwB,GAAG,CAAC,UAAsB,EAAE,EAAE;IAC1D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;IACtC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACzB,CAAC,CAAA;AAED,uBAAuB;AACvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAyB,EAAE,EAAE;IAC/D,OAAO,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,YAAY,CAAA;AA2FpD,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,EAAE,OAAO,GAAG,KAAG,GAiDpD,CAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Type Guards
|
|
2
|
+
const isString = (value) => typeof value === 'string' || value instanceof String;
|
|
3
|
+
const isNullOrUndefined = (value) => value === null || value === undefined;
|
|
4
|
+
const isDateType = (type) => ['datetime', 'date'].includes(type);
|
|
5
|
+
const isNumericType = (type) => ['number', 'currency'].includes(type);
|
|
6
|
+
// JSON Conversion Functions
|
|
7
|
+
const validateAndReturnJsonString = (value, columnName) => {
|
|
8
|
+
try {
|
|
9
|
+
JSON.parse(value);
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error(`Invalid JSON string for column "${columnName}": ${value}`);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const serializeToJson = (value, columnName) => {
|
|
18
|
+
try {
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(`Failed to serialize value to JSON for column "${columnName}": ${value}`);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const convertJsonValue = (value, columnName) => {
|
|
27
|
+
if (isString(value)) {
|
|
28
|
+
return validateAndReturnJsonString(value, columnName);
|
|
29
|
+
}
|
|
30
|
+
return serializeToJson(value, columnName);
|
|
31
|
+
};
|
|
32
|
+
// Date Conversion Functions
|
|
33
|
+
const parseDate = (value, columnName) => {
|
|
34
|
+
try {
|
|
35
|
+
const dateObj = new Date(value);
|
|
36
|
+
if (isNaN(dateObj.getTime())) {
|
|
37
|
+
console.warn(`Invalid date "${value}" for column "${columnName}", setting to null`);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return dateObj;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error(`Date parsing error for "${value}" in column "${columnName}": ${error}`);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const convertDateValue = (value, columnName) => {
|
|
48
|
+
// Handle Date objects - return as-is
|
|
49
|
+
if (value instanceof Date) {
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
// Handle non-string values
|
|
53
|
+
if (typeof value === 'number') {
|
|
54
|
+
// For numeric values, return null to avoid timestamp errors
|
|
55
|
+
console.warn(`Numeric value "${value}" found for date column "${columnName}", setting to null`);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
if (!isString(value)) {
|
|
59
|
+
console.warn(`Non-string value "${value}" found for date column "${columnName}", setting to null`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return parseDate(value, columnName);
|
|
63
|
+
};
|
|
64
|
+
// Numeric Conversion Functions
|
|
65
|
+
const convertNumericValue = (value) => {
|
|
66
|
+
return parseFloat(value);
|
|
67
|
+
};
|
|
68
|
+
// Boolean Conversion Functions
|
|
69
|
+
const convertBooleanValue = (value) => {
|
|
70
|
+
return ['true', 'yes'].includes(value.toLowerCase());
|
|
71
|
+
};
|
|
72
|
+
// String Preprocessing
|
|
73
|
+
const preprocessStringValue = (value) => {
|
|
74
|
+
const trimmed = value.trim();
|
|
75
|
+
return trimmed === '' ? undefined : trimmed;
|
|
76
|
+
};
|
|
77
|
+
// Main Conversion Function
|
|
78
|
+
export const convert = (column, value) => {
|
|
79
|
+
const type = column.type || 'string';
|
|
80
|
+
// Early return for null/undefined
|
|
81
|
+
if (isNullOrUndefined(value)) {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
// Handle JSON type
|
|
86
|
+
if (type === 'json') {
|
|
87
|
+
return convertJsonValue(value, column.name);
|
|
88
|
+
}
|
|
89
|
+
// Handle string types that need conversion
|
|
90
|
+
if (isString(value) && type !== 'string') {
|
|
91
|
+
const processedValue = preprocessStringValue(value);
|
|
92
|
+
// If preprocessing results in undefined, return it (empty string case)
|
|
93
|
+
if (processedValue === undefined) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (isDateType(type)) {
|
|
97
|
+
return convertDateValue(processedValue, column.name);
|
|
98
|
+
}
|
|
99
|
+
if (isNumericType(type)) {
|
|
100
|
+
return convertNumericValue(processedValue);
|
|
101
|
+
}
|
|
102
|
+
if (type === 'bool') {
|
|
103
|
+
return convertBooleanValue(processedValue);
|
|
104
|
+
}
|
|
105
|
+
return processedValue;
|
|
106
|
+
}
|
|
107
|
+
// Handle date types for non-string values (Date objects, numbers, etc.)
|
|
108
|
+
if (isDateType(type)) {
|
|
109
|
+
return convertDateValue(value, column.name);
|
|
110
|
+
}
|
|
111
|
+
// Return value as-is for other cases
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(`Error converting "${value}" to ${type} for column "${column.name}": ${error}`);
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/collections/converter.ts"],"names":[],"mappings":"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"}
|