alchemy 0.69.0 → 0.70.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/bin/alchemy.js +3810 -3889
- package/bin/commands/init.ts +41 -55
- package/bin/trpc.ts +4 -9
- package/lib/alchemy.d.ts +3 -3
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js +2 -15
- package/lib/alchemy.js.map +1 -1
- package/lib/apply.js +24 -9
- package/lib/apply.js.map +1 -1
- package/lib/aws/utils.d.ts +2 -1
- package/lib/aws/utils.d.ts.map +1 -1
- package/lib/aws/utils.js.map +1 -1
- package/lib/clickhouse/api/client.gen.d.ts +13 -0
- package/lib/clickhouse/api/client.gen.d.ts.map +1 -0
- package/lib/clickhouse/api/client.gen.js +7 -0
- package/lib/clickhouse/api/client.gen.js.map +1 -0
- package/lib/clickhouse/api/sdk.gen.d.ts +322 -0
- package/lib/clickhouse/api/sdk.gen.d.ts.map +1 -0
- package/lib/clickhouse/api/sdk.gen.js +683 -0
- package/lib/clickhouse/api/sdk.gen.js.map +1 -0
- package/lib/clickhouse/api/types.gen.d.ts +5030 -0
- package/lib/clickhouse/api/types.gen.d.ts.map +1 -0
- package/lib/clickhouse/api/types.gen.js +2 -0
- package/lib/clickhouse/api/types.gen.js.map +1 -0
- package/lib/clickhouse/api-key.d.ts +29 -0
- package/lib/clickhouse/api-key.d.ts.map +1 -0
- package/lib/clickhouse/api-key.js +83 -0
- package/lib/clickhouse/api-key.js.map +1 -0
- package/lib/clickhouse/api.d.ts +36 -0
- package/lib/clickhouse/api.d.ts.map +1 -0
- package/lib/clickhouse/api.js +48 -0
- package/lib/clickhouse/api.js.map +1 -0
- package/lib/clickhouse/index.d.ts +4 -0
- package/lib/clickhouse/index.d.ts.map +1 -0
- package/lib/clickhouse/index.js +4 -0
- package/lib/clickhouse/index.js.map +1 -0
- package/lib/clickhouse/organization.d.ts +16 -0
- package/lib/clickhouse/organization.d.ts.map +1 -0
- package/lib/clickhouse/organization.js +21 -0
- package/lib/clickhouse/organization.js.map +1 -0
- package/lib/clickhouse/service.d.ts +275 -0
- package/lib/clickhouse/service.d.ts.map +1 -0
- package/lib/clickhouse/service.js +274 -0
- package/lib/clickhouse/service.js.map +1 -0
- package/lib/cloudflare/account-api-token.d.ts.map +1 -1
- package/lib/cloudflare/account-api-token.js +1 -1
- package/lib/cloudflare/account-api-token.js.map +1 -1
- package/lib/cloudflare/bucket-object.d.ts +5 -0
- package/lib/cloudflare/bucket-object.d.ts.map +1 -1
- package/lib/cloudflare/bucket-object.js +1 -1
- package/lib/cloudflare/bucket-object.js.map +1 -1
- package/lib/cloudflare/bucket.d.ts +6 -3
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +60 -8
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/bun-spa/bun-spa.d.ts +15 -0
- package/lib/cloudflare/bun-spa/bun-spa.d.ts.map +1 -0
- package/lib/cloudflare/bun-spa/bun-spa.js +95 -0
- package/lib/cloudflare/bun-spa/bun-spa.js.map +1 -0
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/container.d.ts +11 -1
- package/lib/cloudflare/container.d.ts.map +1 -1
- package/lib/cloudflare/container.js +1 -1
- package/lib/cloudflare/container.js.map +1 -1
- package/lib/cloudflare/index.d.ts +1 -0
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +1 -0
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/build-worker-options.js +3 -3
- package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-controller.js +2 -0
- package/lib/cloudflare/miniflare/miniflare-controller.js.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.d.ts.map +1 -1
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +33 -14
- package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
- package/lib/cloudflare/permission-groups.d.ts +2 -3
- package/lib/cloudflare/permission-groups.d.ts.map +1 -1
- package/lib/cloudflare/permission-groups.js +10 -15
- package/lib/cloudflare/permission-groups.js.map +1 -1
- package/lib/cloudflare/redwood/redwood.d.ts +1 -1
- package/lib/cloudflare/redwood/redwood.js +1 -1
- package/lib/cloudflare/tanstack-start/plugin.d.ts +2 -15
- package/lib/cloudflare/tanstack-start/plugin.d.ts.map +1 -1
- package/lib/cloudflare/tanstack-start/plugin.js +5 -25
- package/lib/cloudflare/tanstack-start/plugin.js.map +1 -1
- package/lib/cloudflare/tanstack-start/tanstack-start.d.ts.map +1 -1
- package/lib/cloudflare/tanstack-start/tanstack-start.js +15 -4
- package/lib/cloudflare/tanstack-start/tanstack-start.js.map +1 -1
- package/lib/cloudflare/util/filter-env-bindings.d.ts +62 -0
- package/lib/cloudflare/util/filter-env-bindings.d.ts.map +1 -0
- package/lib/cloudflare/util/filter-env-bindings.js +81 -0
- package/lib/cloudflare/util/filter-env-bindings.js.map +1 -0
- package/lib/cloudflare/website.d.ts +2 -2
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +7 -18
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-metadata.d.ts +5 -1
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
- package/lib/cloudflare/worker-metadata.js +3 -0
- package/lib/cloudflare/worker-metadata.js.map +1 -1
- package/lib/cloudflare/worker.d.ts +17 -1
- package/lib/cloudflare/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker.js +1 -0
- package/lib/cloudflare/worker.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +15 -1
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +12 -4
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/coinbase/client.d.ts +54 -0
- package/lib/coinbase/client.d.ts.map +1 -0
- package/lib/coinbase/client.js +89 -0
- package/lib/coinbase/client.js.map +1 -0
- package/lib/coinbase/evm-account.d.ts +118 -0
- package/lib/coinbase/evm-account.d.ts.map +1 -0
- package/lib/coinbase/evm-account.js +198 -0
- package/lib/coinbase/evm-account.js.map +1 -0
- package/lib/coinbase/evm-smart-account.d.ts +122 -0
- package/lib/coinbase/evm-smart-account.d.ts.map +1 -0
- package/lib/coinbase/evm-smart-account.js +213 -0
- package/lib/coinbase/evm-smart-account.js.map +1 -0
- package/lib/coinbase/faucet.d.ts +11 -0
- package/lib/coinbase/faucet.d.ts.map +1 -0
- package/lib/coinbase/faucet.js +146 -0
- package/lib/coinbase/faucet.js.map +1 -0
- package/lib/coinbase/index.d.ts +4 -0
- package/lib/coinbase/index.d.ts.map +1 -0
- package/lib/coinbase/index.js +4 -0
- package/lib/coinbase/index.js.map +1 -0
- package/lib/coinbase/types.d.ts +28 -0
- package/lib/coinbase/types.d.ts.map +1 -0
- package/lib/coinbase/types.js +4 -0
- package/lib/{util/telemetry → coinbase}/types.js.map +1 -1
- package/lib/coinbase/utils.d.ts +13 -0
- package/lib/coinbase/utils.d.ts.map +1 -0
- package/lib/coinbase/utils.js +17 -0
- package/lib/coinbase/utils.js.map +1 -0
- package/lib/docker/api.d.ts +22 -1
- package/lib/docker/api.d.ts.map +1 -1
- package/lib/docker/api.js +64 -2
- package/lib/docker/api.js.map +1 -1
- package/lib/docker/container.d.ts +88 -0
- package/lib/docker/container.d.ts.map +1 -1
- package/lib/docker/container.js +36 -0
- package/lib/docker/container.js.map +1 -1
- package/lib/neon/api/types.gen.d.ts +7 -2
- package/lib/neon/api/types.gen.d.ts.map +1 -1
- package/lib/planetscale/api/types.gen.d.ts +20 -4
- package/lib/planetscale/api/types.gen.d.ts.map +1 -1
- package/lib/planetscale/api.d.ts.map +1 -1
- package/lib/planetscale/api.js +1 -0
- package/lib/planetscale/api.js.map +1 -1
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +1 -13
- package/lib/planetscale/password.js.map +1 -1
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +7 -3
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +4 -9
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +16 -37
- package/lib/scope.js.map +1 -1
- package/lib/state/instrumented-state-store.d.ts +1 -3
- package/lib/state/instrumented-state-store.d.ts.map +1 -1
- package/lib/state/instrumented-state-store.js +19 -21
- package/lib/state/instrumented-state-store.js.map +1 -1
- package/lib/test/bun.d.ts.map +1 -1
- package/lib/test/bun.js +1 -2
- package/lib/test/bun.js.map +1 -1
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +1 -2
- package/lib/test/vitest.js.map +1 -1
- package/lib/util/diff.d.ts +5 -0
- package/lib/util/diff.d.ts.map +1 -0
- package/lib/util/diff.js +14 -0
- package/lib/util/diff.js.map +1 -0
- package/lib/util/telemetry.d.ts +52 -0
- package/lib/util/telemetry.d.ts.map +1 -0
- package/lib/util/telemetry.js +191 -0
- package/lib/util/telemetry.js.map +1 -0
- package/package.json +19 -1
- package/src/alchemy.ts +5 -20
- package/src/apply.ts +29 -12
- package/src/aws/utils.ts +2 -1
- package/src/clickhouse/api/client.gen.ts +28 -0
- package/src/clickhouse/api/sdk.gen.ts +1286 -0
- package/src/clickhouse/api/types.gen.ts +5898 -0
- package/src/clickhouse/api-key.ts +136 -0
- package/src/clickhouse/api.ts +84 -0
- package/src/clickhouse/index.ts +3 -0
- package/src/clickhouse/organization.ts +31 -0
- package/src/clickhouse/service.ts +668 -0
- package/src/cloudflare/account-api-token.ts +1 -4
- package/src/cloudflare/bucket-object.ts +11 -1
- package/src/cloudflare/bucket.ts +72 -6
- package/src/cloudflare/bun-spa/bun-spa.ts +139 -0
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/container.ts +22 -3
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/miniflare/build-worker-options.ts +6 -4
- package/src/cloudflare/miniflare/miniflare-controller.ts +2 -0
- package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +42 -15
- package/src/cloudflare/permission-groups.ts +21 -49
- package/src/cloudflare/redwood/redwood.ts +1 -1
- package/src/cloudflare/tanstack-start/plugin.ts +7 -28
- package/src/cloudflare/tanstack-start/tanstack-start.ts +15 -4
- package/src/cloudflare/util/filter-env-bindings.ts +96 -0
- package/src/cloudflare/website.ts +12 -24
- package/src/cloudflare/worker-metadata.ts +8 -1
- package/src/cloudflare/worker.ts +19 -1
- package/src/cloudflare/wrangler.json.ts +27 -9
- package/src/coinbase/client.ts +146 -0
- package/src/coinbase/evm-account.ts +317 -0
- package/src/coinbase/evm-smart-account.ts +339 -0
- package/src/coinbase/faucet.ts +173 -0
- package/src/coinbase/index.ts +3 -0
- package/src/coinbase/types.ts +33 -0
- package/src/coinbase/utils.ts +19 -0
- package/src/docker/api.ts +86 -2
- package/src/docker/container.ts +97 -0
- package/src/neon/api/types.gen.ts +13 -1
- package/src/planetscale/api/types.gen.ts +22 -2
- package/src/planetscale/api.ts +1 -0
- package/src/planetscale/password.ts +1 -14
- package/src/resource.ts +11 -4
- package/src/scope.ts +22 -45
- package/src/state/instrumented-state-store.ts +27 -26
- package/src/test/bun.ts +1 -2
- package/src/test/vitest.ts +1 -2
- package/src/util/diff.ts +14 -0
- package/src/util/telemetry.ts +297 -0
- package/templates/tanstack-start/.cta.json +13 -0
- package/templates/tanstack-start/README.md +267 -49
- package/templates/tanstack-start/_gitignore +9 -18
- package/templates/tanstack-start/alchemy.run.ts +2 -2
- package/templates/tanstack-start/package.json +24 -19
- package/templates/tanstack-start/public/favicon.ico +0 -0
- package/templates/tanstack-start/public/logo192.png +0 -0
- package/templates/tanstack-start/public/logo512.png +0 -0
- package/templates/tanstack-start/public/manifest.json +25 -0
- package/templates/tanstack-start/public/robots.txt +3 -0
- package/templates/tanstack-start/src/components/Header.tsx +21 -0
- package/templates/tanstack-start/src/logo.svg +12 -0
- package/templates/tanstack-start/src/router.tsx +7 -16
- package/templates/tanstack-start/src/routes/__root.tsx +13 -114
- package/templates/tanstack-start/src/routes/api.demo-names.ts +15 -0
- package/templates/tanstack-start/src/routes/demo.start.api-request.tsx +44 -0
- package/templates/tanstack-start/src/routes/demo.start.server-funcs.tsx +97 -0
- package/templates/tanstack-start/src/routes/index.tsx +31 -4
- package/templates/tanstack-start/src/styles.css +15 -0
- package/templates/tanstack-start/tsconfig.json +19 -22
- package/templates/tanstack-start/types/env.d.ts +2 -2
- package/templates/tanstack-start/vite.config.ts +16 -25
- package/workers/tunnel-proxy.js +1 -1
- package/lib/util/telemetry/client.d.ts +0 -31
- package/lib/util/telemetry/client.d.ts.map +0 -1
- package/lib/util/telemetry/client.js +0 -121
- package/lib/util/telemetry/client.js.map +0 -1
- package/lib/util/telemetry/constants.d.ts +0 -5
- package/lib/util/telemetry/constants.d.ts.map +0 -1
- package/lib/util/telemetry/constants.js +0 -8
- package/lib/util/telemetry/constants.js.map +0 -1
- package/lib/util/telemetry/context.d.ts +0 -15
- package/lib/util/telemetry/context.d.ts.map +0 -1
- package/lib/util/telemetry/context.js +0 -128
- package/lib/util/telemetry/context.js.map +0 -1
- package/lib/util/telemetry/index.d.ts +0 -3
- package/lib/util/telemetry/index.d.ts.map +0 -1
- package/lib/util/telemetry/index.js +0 -3
- package/lib/util/telemetry/index.js.map +0 -1
- package/lib/util/telemetry/types.d.ts +0 -68
- package/lib/util/telemetry/types.d.ts.map +0 -1
- package/lib/util/telemetry/types.js +0 -1
- package/src/util/telemetry/client.ts +0 -156
- package/src/util/telemetry/constants.ts +0 -13
- package/src/util/telemetry/context.ts +0 -154
- package/src/util/telemetry/index.ts +0 -2
- package/src/util/telemetry/types.ts +0 -105
- package/templates/tanstack-start/_prettierignore +0 -4
- package/templates/tanstack-start/public/android-chrome-192x192.png +0 -0
- package/templates/tanstack-start/public/android-chrome-512x512.png +0 -0
- package/templates/tanstack-start/public/apple-touch-icon.png +0 -0
- package/templates/tanstack-start/public/favicon-16x16.png +0 -0
- package/templates/tanstack-start/public/favicon-32x32.png +0 -0
- package/templates/tanstack-start/public/favicon.png +0 -0
- package/templates/tanstack-start/public/site.webmanifest +0 -19
- package/templates/tanstack-start/src/components/DefaultCatchBoundary.tsx +0 -53
- package/templates/tanstack-start/src/components/NotFound.tsx +0 -25
- package/templates/tanstack-start/src/components/PostError.tsx +0 -5
- package/templates/tanstack-start/src/components/UserError.tsx +0 -5
- package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout/route-a.tsx +0 -10
- package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout/route-b.tsx +0 -10
- package/templates/tanstack-start/src/routes/_pathlessLayout/_nested-layout.tsx +0 -34
- package/templates/tanstack-start/src/routes/_pathlessLayout.tsx +0 -16
- package/templates/tanstack-start/src/routes/api/users.$userId.ts +0 -28
- package/templates/tanstack-start/src/routes/api/users.ts +0 -59
- package/templates/tanstack-start/src/routes/customScript[.]js.ts +0 -10
- package/templates/tanstack-start/src/routes/deferred.tsx +0 -62
- package/templates/tanstack-start/src/routes/posts.$postId.tsx +0 -34
- package/templates/tanstack-start/src/routes/posts.index.tsx +0 -8
- package/templates/tanstack-start/src/routes/posts.tsx +0 -38
- package/templates/tanstack-start/src/routes/posts_.$postId.deep.tsx +0 -29
- package/templates/tanstack-start/src/routes/redirect.tsx +0 -9
- package/templates/tanstack-start/src/routes/users.$userId.tsx +0 -44
- package/templates/tanstack-start/src/routes/users.index.tsx +0 -18
- package/templates/tanstack-start/src/routes/users.tsx +0 -49
- package/templates/tanstack-start/src/styles/app.css +0 -12
- package/templates/tanstack-start/src/utils/loggingMiddleware.tsx +0 -41
- package/templates/tanstack-start/src/utils/posts.tsx +0 -40
- package/templates/tanstack-start/src/utils/seo.ts +0 -33
- package/templates/tanstack-start/src/utils/users.tsx +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/util/diff.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,gBAQ1C,CAAC"}
|
package/lib/util/diff.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
|
+
/**
|
|
3
|
+
* Returns an array of keys in `b` that are different from `a`.
|
|
4
|
+
*/
|
|
5
|
+
export const diff = (a, b) => {
|
|
6
|
+
const keys = [];
|
|
7
|
+
for (const key in a) {
|
|
8
|
+
if (!isDeepStrictEqual(a[key], b[key])) {
|
|
9
|
+
keys.push(key);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return keys;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/util/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,CAAI,EAAE,CAAa,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Phase } from "../alchemy.ts";
|
|
2
|
+
export declare const CONFIG_PATH: string;
|
|
3
|
+
export declare const CONFIG_PATH_LEGACY: string;
|
|
4
|
+
export declare const TELEMETRY_DISABLED: boolean;
|
|
5
|
+
export declare const TELEMETRY_API_URL: string;
|
|
6
|
+
export declare const SUPPRESS_TELEMETRY_ERRORS: boolean;
|
|
7
|
+
export declare const collectData: () => Promise<GenericTelemetryData>;
|
|
8
|
+
export type GenericTelemetryData = {
|
|
9
|
+
userId: string;
|
|
10
|
+
sessionId: string;
|
|
11
|
+
platform: string;
|
|
12
|
+
osVersion: string;
|
|
13
|
+
arch: string;
|
|
14
|
+
cpus: number;
|
|
15
|
+
memory: number;
|
|
16
|
+
rootCommitHash: string;
|
|
17
|
+
gitOriginUrl: string;
|
|
18
|
+
gitBranchHash: string;
|
|
19
|
+
runtime: string;
|
|
20
|
+
runtimeVersion: string;
|
|
21
|
+
ciProvider: string;
|
|
22
|
+
isCI: boolean;
|
|
23
|
+
alchemyVersion: string;
|
|
24
|
+
};
|
|
25
|
+
export type ErrorData = {
|
|
26
|
+
errorTag: string;
|
|
27
|
+
errorMessage: string;
|
|
28
|
+
errorStack: string;
|
|
29
|
+
};
|
|
30
|
+
export type CliTelemetryData = {
|
|
31
|
+
command: string;
|
|
32
|
+
event: "cli.start" | "cli.success" | "cli.error";
|
|
33
|
+
};
|
|
34
|
+
export type ResourceTelemetryData = {
|
|
35
|
+
phase: Phase;
|
|
36
|
+
event: "resource.start" | "resource.success" | "resource.error" | "resource.skip" | "resource.read";
|
|
37
|
+
resource: string;
|
|
38
|
+
status: "creating" | "created" | "updating" | "updated" | "deleting" | "deleted" | "unknown";
|
|
39
|
+
duration: number;
|
|
40
|
+
replaced: boolean;
|
|
41
|
+
};
|
|
42
|
+
export type StateStoreTelemetryData = {
|
|
43
|
+
event: "statestore.init" | "statestore.deinit" | "statestore.list" | "statestore.count" | "statestore.get" | "statestore.getBatch" | "statestore.all" | "statestore.set" | "statestore.delete";
|
|
44
|
+
stateStore: string;
|
|
45
|
+
duration: number;
|
|
46
|
+
};
|
|
47
|
+
export type AlchemyTelemetryData = {
|
|
48
|
+
event: "alchemy.start" | "alchemy.success" | "alchemy.error";
|
|
49
|
+
duration: number;
|
|
50
|
+
};
|
|
51
|
+
export declare function createAndSendEvent(data: CliTelemetryData | ResourceTelemetryData | StateStoreTelemetryData | AlchemyTelemetryData, error?: Error): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/util/telemetry.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAK3C,eAAO,MAAM,WAAW,QAA4C,CAAC;AACrE,eAAO,MAAM,kBAAkB,QAG9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,SACyC,CAAC;AAEzE,eAAO,MAAM,iBAAiB,QAC4C,CAAC;AAC3E,eAAO,MAAM,yBAAyB,SACW,CAAC;AA8GlD,eAAO,MAAM,WAAW,qCAiCtB,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EACD,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,eAAe,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EACF,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EACD,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,eAAe,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EACA,gBAAgB,GAChB,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,EACxB,KAAK,CAAC,EAAE,KAAK,iBA0Bd"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import envPaths from "env-paths";
|
|
2
|
+
import { exec } from "node:child_process";
|
|
3
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "pathe";
|
|
6
|
+
import pkg from "../../package.json" with { type: "json" };
|
|
7
|
+
import { Scope } from "../scope.js";
|
|
8
|
+
import { logger } from "./logger.js";
|
|
9
|
+
import { memoize } from "./memoize.js";
|
|
10
|
+
export const CONFIG_PATH = path.join(os.homedir(), ".alchemy", "id");
|
|
11
|
+
export const CONFIG_PATH_LEGACY = path.join(envPaths("alchemy", { suffix: "" }).config, "id");
|
|
12
|
+
export const TELEMETRY_DISABLED = !!process.env.ALCHEMY_TELEMETRY_DISABLED || !!process.env.DO_NOT_TRACK;
|
|
13
|
+
export const TELEMETRY_API_URL = process.env.ALCHEMY_TELEMETRY_API_URL ?? "https://telemetry.alchemy.run";
|
|
14
|
+
export const SUPPRESS_TELEMETRY_ERRORS = !!process.env.ALCHEMY_TELEMETRY_SUPPRESS_ERRORS;
|
|
15
|
+
async function getOrCreateUserId() {
|
|
16
|
+
async function readUserId(path) {
|
|
17
|
+
try {
|
|
18
|
+
return (await readFile(path, "utf-8")).trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const id = await readUserId(CONFIG_PATH);
|
|
25
|
+
if (id) {
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
const legacyId = await readUserId(CONFIG_PATH_LEGACY);
|
|
29
|
+
try {
|
|
30
|
+
const id = legacyId ?? crypto.randomUUID();
|
|
31
|
+
await mkdir(path.dirname(CONFIG_PATH), { recursive: true });
|
|
32
|
+
await writeFile(CONFIG_PATH, id);
|
|
33
|
+
if (!legacyId) {
|
|
34
|
+
console.warn([
|
|
35
|
+
"Attention: To help improve Alchemy, we collect anonymous usage, performance, and error data.",
|
|
36
|
+
"You can opt out by setting the ALCHEMY_TELEMETRY_DISABLED or DO_NOT_TRACK environment variable to a truthy value.",
|
|
37
|
+
].join("\n"));
|
|
38
|
+
}
|
|
39
|
+
return id;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function getRootCommitHash() {
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
exec("git rev-list --max-parents=0 HEAD", (err, stdout) => {
|
|
48
|
+
if (err) {
|
|
49
|
+
resolve(null);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
resolve(stdout.trim());
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function getGitOriginUrlHash() {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
exec("git config --get remote.origin.url", (err, stdout) => {
|
|
59
|
+
if (err) {
|
|
60
|
+
resolve(null);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
resolve(hashString(stdout.trim()));
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function getBranchName() {
|
|
68
|
+
return new Promise((resolve) => {
|
|
69
|
+
exec("git rev-parse --abbrev-ref HEAD", (err, stdout) => {
|
|
70
|
+
if (err) {
|
|
71
|
+
resolve(null);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
resolve(stdout.trim());
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function getRuntime() {
|
|
79
|
+
if (globalThis.Bun)
|
|
80
|
+
return { name: "bun", version: Bun.version };
|
|
81
|
+
// @ts-expect-error
|
|
82
|
+
if (globalThis.Deno)
|
|
83
|
+
// @ts-expect-error
|
|
84
|
+
return { name: "deno", version: Deno.version?.deno ?? null };
|
|
85
|
+
// @ts-expect-error
|
|
86
|
+
if (globalThis.EdgeRuntime)
|
|
87
|
+
return { name: "workerd", version: null };
|
|
88
|
+
if (globalThis.process?.versions?.node)
|
|
89
|
+
return { name: "node", version: process.versions.node };
|
|
90
|
+
return { name: null, version: null };
|
|
91
|
+
}
|
|
92
|
+
const PROVIDERS = [
|
|
93
|
+
{ env: "GITHUB_ACTIONS", provider: "GitHub Actions", isCI: true },
|
|
94
|
+
{ env: "GITLAB_CI", provider: "GitLab CI", isCI: true },
|
|
95
|
+
{ env: "CIRCLECI", provider: "CircleCI", isCI: true },
|
|
96
|
+
{ env: "JENKINS_URL", provider: "Jenkins", isCI: true },
|
|
97
|
+
{ env: "TRAVIS", provider: "Travis CI", isCI: true },
|
|
98
|
+
{ env: "NOW_BUILDER", provider: "Vercel", isCI: true },
|
|
99
|
+
{ env: "VERCEL", provider: "Vercel", isCI: false },
|
|
100
|
+
];
|
|
101
|
+
function getEnvironment() {
|
|
102
|
+
for (const provider of PROVIDERS) {
|
|
103
|
+
if (process.env[provider.env]) {
|
|
104
|
+
return {
|
|
105
|
+
provider: provider.provider,
|
|
106
|
+
isCI: provider.isCI,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
provider: null,
|
|
112
|
+
isCI: !!process.env.CI,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export const collectData = memoize(async () => {
|
|
116
|
+
const [userId, rootCommitHash, gitOriginUrlHash, branchHash, runtime, environment,] = await Promise.all([
|
|
117
|
+
getOrCreateUserId(),
|
|
118
|
+
getRootCommitHash(),
|
|
119
|
+
getGitOriginUrlHash(),
|
|
120
|
+
getBranchName().then(hashString),
|
|
121
|
+
getRuntime(),
|
|
122
|
+
getEnvironment(),
|
|
123
|
+
]);
|
|
124
|
+
return {
|
|
125
|
+
userId: userId ?? "",
|
|
126
|
+
sessionId: crypto.randomUUID(),
|
|
127
|
+
platform: os.platform(),
|
|
128
|
+
osVersion: os.release(),
|
|
129
|
+
arch: os.arch(),
|
|
130
|
+
cpus: os.cpus().length,
|
|
131
|
+
memory: Math.round(os.totalmem() / 1024 / 1024),
|
|
132
|
+
rootCommitHash: rootCommitHash ?? "",
|
|
133
|
+
gitOriginUrl: gitOriginUrlHash ?? "",
|
|
134
|
+
gitBranchHash: branchHash ?? "",
|
|
135
|
+
runtime: runtime.name ?? "",
|
|
136
|
+
runtimeVersion: runtime.version ?? "",
|
|
137
|
+
ciProvider: environment.provider ?? "",
|
|
138
|
+
isCI: environment.isCI,
|
|
139
|
+
alchemyVersion: pkg.version,
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
export async function createAndSendEvent(data, error) {
|
|
143
|
+
if (Scope.getScope()?.noTrack || TELEMETRY_DISABLED) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const eventData = {
|
|
148
|
+
...data,
|
|
149
|
+
...("duration" in data
|
|
150
|
+
? { duration: Math.round(data.duration * 1000) }
|
|
151
|
+
: {}),
|
|
152
|
+
...(await collectData()),
|
|
153
|
+
...serializeError(error),
|
|
154
|
+
};
|
|
155
|
+
await fetch(TELEMETRY_API_URL, {
|
|
156
|
+
method: "POST",
|
|
157
|
+
headers: {
|
|
158
|
+
"Content-Type": "application/json",
|
|
159
|
+
},
|
|
160
|
+
body: JSON.stringify(eventData),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (!SUPPRESS_TELEMETRY_ERRORS) {
|
|
165
|
+
logger.warn("Failed to send telemetry event:", error);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function hashString(input) {
|
|
170
|
+
if (input == null) {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
const data = new TextEncoder().encode(input);
|
|
174
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
175
|
+
return Array.from(new Uint8Array(hashBuffer), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
176
|
+
}
|
|
177
|
+
function serializeError(error) {
|
|
178
|
+
if (error instanceof Error) {
|
|
179
|
+
return {
|
|
180
|
+
errorTag: error.name ?? "",
|
|
181
|
+
errorMessage: error.message?.replaceAll(os.homedir(), "~") ?? "", // redact home directory
|
|
182
|
+
errorStack: error.stack?.replaceAll(os.homedir(), "~") ?? "",
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
errorTag: "",
|
|
187
|
+
errorMessage: "",
|
|
188
|
+
errorStack: "",
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/util/telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alchemy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Sam Goodwin <sam@alchemy.run>",
|
|
6
6
|
"homepage": "https://alchemy.run",
|
|
@@ -40,6 +40,14 @@
|
|
|
40
40
|
"bun": "./src/llms.ts",
|
|
41
41
|
"import": "./lib/llms.js"
|
|
42
42
|
},
|
|
43
|
+
"./coinbase": {
|
|
44
|
+
"bun": "./src/coinbase/index.ts",
|
|
45
|
+
"import": "./lib/coinbase/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./coinbase/faucet": {
|
|
48
|
+
"bun": "./src/coinbase/faucet.ts",
|
|
49
|
+
"import": "./lib/coinbase/faucet.js"
|
|
50
|
+
},
|
|
43
51
|
"./aws": {
|
|
44
52
|
"bun": "./src/aws/index.ts",
|
|
45
53
|
"import": "./lib/aws/index.js"
|
|
@@ -52,6 +60,10 @@
|
|
|
52
60
|
"bun": "./src/aws/oidc/index.ts",
|
|
53
61
|
"import": "./lib/aws/oidc/index.js"
|
|
54
62
|
},
|
|
63
|
+
"./clickhouse": {
|
|
64
|
+
"bun": "./src/clickhouse/index.ts",
|
|
65
|
+
"import": "./lib/clickhouse/index.js"
|
|
66
|
+
},
|
|
55
67
|
"./cloudflare": {
|
|
56
68
|
"bun": "./src/cloudflare/index.ts",
|
|
57
69
|
"import": "./lib/cloudflare/index.js"
|
|
@@ -150,6 +162,7 @@
|
|
|
150
162
|
"@cloudflare/unenv-preset": "^2.6.3",
|
|
151
163
|
"@iarna/toml": "^2.2.5",
|
|
152
164
|
"@smithy/node-config-provider": "^4.0.0",
|
|
165
|
+
"@smithy/types": "^4.6.0",
|
|
153
166
|
"aws4fetch": "^1.0.20",
|
|
154
167
|
"env-paths": "^3.0.0",
|
|
155
168
|
"esbuild": "^0.25.1",
|
|
@@ -175,6 +188,7 @@
|
|
|
175
188
|
"peerDependencies": {
|
|
176
189
|
"@astrojs/cloudflare": "^12.6.4",
|
|
177
190
|
"@aws-sdk/client-dynamodb": "^3.0.0",
|
|
191
|
+
"@coinbase/cdp-sdk": "^0.10.0",
|
|
178
192
|
"@aws-sdk/client-iam": "^3.0.0",
|
|
179
193
|
"@aws-sdk/client-lambda": "^3.0.0",
|
|
180
194
|
"@aws-sdk/client-s3": "^3.0.0",
|
|
@@ -196,6 +210,9 @@
|
|
|
196
210
|
"@astrojs/cloudflare": {
|
|
197
211
|
"optional": true
|
|
198
212
|
},
|
|
213
|
+
"@coinbase/cdp-sdk": {
|
|
214
|
+
"optional": true
|
|
215
|
+
},
|
|
199
216
|
"@aws-sdk/client-dynamodb": {
|
|
200
217
|
"optional": true
|
|
201
218
|
},
|
|
@@ -264,6 +281,7 @@
|
|
|
264
281
|
"@cloudflare/puppeteer": "^1.0.2",
|
|
265
282
|
"@cloudflare/vite-plugin": "^1.11.6",
|
|
266
283
|
"@cloudflare/workers-types": "^4.20250805.0",
|
|
284
|
+
"@coinbase/cdp-sdk": "^1.38.2",
|
|
267
285
|
"@libsql/client": "^0.15.12",
|
|
268
286
|
"@octokit/rest": "^21.1.1",
|
|
269
287
|
"@sentry/cloudflare": "^9.43.0",
|
package/src/alchemy.ts
CHANGED
|
@@ -17,7 +17,6 @@ import { secret } from "./secret.ts";
|
|
|
17
17
|
import type { StateStoreType } from "./state.ts";
|
|
18
18
|
import type { LoggerApi } from "./util/cli.ts";
|
|
19
19
|
import { ALCHEMY_ROOT } from "./util/root-dir.ts";
|
|
20
|
-
import { TelemetryClient } from "./util/telemetry/client.ts";
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
22
|
* Type alias for semantic highlighting of `alchemy` as a type keyword
|
|
@@ -162,20 +161,13 @@ If this is a mistake, you can disable this check by setting the ALCHEMY_CI_STATE
|
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
const phase = mergedOptions?.phase ?? "up";
|
|
165
|
-
const telemetryClient =
|
|
166
|
-
mergedOptions?.parent?.telemetryClient ??
|
|
167
|
-
TelemetryClient.create({
|
|
168
|
-
phase,
|
|
169
|
-
enabled: mergedOptions?.telemetry ?? true,
|
|
170
|
-
quiet: mergedOptions?.quiet ?? false,
|
|
171
|
-
});
|
|
172
164
|
const root = new Scope({
|
|
173
165
|
...mergedOptions,
|
|
174
166
|
parent: undefined,
|
|
175
167
|
scopeName: appName,
|
|
176
168
|
phase,
|
|
177
169
|
password: mergedOptions?.password ?? process.env.ALCHEMY_PASSWORD,
|
|
178
|
-
|
|
170
|
+
noTrack: mergedOptions?.noTrack ?? false,
|
|
179
171
|
isSelected: app === undefined ? undefined : app === appName,
|
|
180
172
|
});
|
|
181
173
|
onExit((code) => {
|
|
@@ -280,12 +272,12 @@ export interface AlchemyOptions {
|
|
|
280
272
|
*/
|
|
281
273
|
password?: string;
|
|
282
274
|
/**
|
|
283
|
-
* Whether to
|
|
275
|
+
* Whether to stop sending anonymous telemetry data to the Alchemy team.
|
|
284
276
|
* You can also opt out by setting the `DO_NOT_TRACK` or `ALCHEMY_TELEMETRY_DISABLED` environment variables to a truthy value.
|
|
285
277
|
*
|
|
286
|
-
* @default
|
|
278
|
+
* @default false
|
|
287
279
|
*/
|
|
288
|
-
|
|
280
|
+
noTrack?: boolean;
|
|
289
281
|
/**
|
|
290
282
|
* A custom logger instance to use for this scope.
|
|
291
283
|
* If not provided, the default fallback logger will be used.
|
|
@@ -353,18 +345,11 @@ async function run<T>(
|
|
|
353
345
|
RunOptions,
|
|
354
346
|
(this: Scope, scope: Scope) => Promise<T>,
|
|
355
347
|
]);
|
|
356
|
-
const telemetryClient =
|
|
357
|
-
options?.parent?.telemetryClient ??
|
|
358
|
-
TelemetryClient.create({
|
|
359
|
-
phase: options?.phase ?? "up",
|
|
360
|
-
enabled: options?.telemetry ?? true,
|
|
361
|
-
quiet: options?.quiet ?? false,
|
|
362
|
-
});
|
|
363
348
|
const _scope = new Scope({
|
|
364
349
|
...options,
|
|
365
350
|
parent: options?.parent,
|
|
366
351
|
scopeName: id,
|
|
367
|
-
|
|
352
|
+
noTrack: options?.noTrack ?? false,
|
|
368
353
|
});
|
|
369
354
|
let noop = options?.noop ?? false;
|
|
370
355
|
try {
|
package/src/apply.ts
CHANGED
|
@@ -19,7 +19,7 @@ import { serialize } from "./serde.ts";
|
|
|
19
19
|
import type { State } from "./state.ts";
|
|
20
20
|
import { formatFQN } from "./util/cli.ts";
|
|
21
21
|
import { logger } from "./util/logger.ts";
|
|
22
|
-
import
|
|
22
|
+
import { createAndSendEvent } from "./util/telemetry.ts";
|
|
23
23
|
|
|
24
24
|
export interface ApplyOptions {
|
|
25
25
|
quiet?: boolean;
|
|
@@ -83,9 +83,13 @@ async function _apply<Out extends ResourceAttributes>(
|
|
|
83
83
|
// we are running in a monorepo and are not the selected app, so we need to wait for the process to be consistent
|
|
84
84
|
state = await waitForConsistentState();
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
createAndSendEvent({
|
|
87
87
|
event: "resource.read",
|
|
88
|
+
phase: scope.phase,
|
|
89
|
+
duration: performance.now() - start,
|
|
90
|
+
status: state.status,
|
|
88
91
|
resource: resource[ResourceKind],
|
|
92
|
+
replaced: false,
|
|
89
93
|
});
|
|
90
94
|
return state.output as Awaited<Out> & Resource;
|
|
91
95
|
|
|
@@ -179,10 +183,13 @@ async function _apply<Out extends ResourceAttributes>(
|
|
|
179
183
|
status: "success",
|
|
180
184
|
});
|
|
181
185
|
}
|
|
182
|
-
|
|
186
|
+
createAndSendEvent({
|
|
183
187
|
event: "resource.skip",
|
|
184
188
|
resource: resource[ResourceKind],
|
|
185
189
|
status: state.status,
|
|
190
|
+
phase: scope.phase,
|
|
191
|
+
duration: performance.now() - start,
|
|
192
|
+
replaced: false,
|
|
186
193
|
});
|
|
187
194
|
return state.output as Awaited<Out> & Resource;
|
|
188
195
|
}
|
|
@@ -202,10 +209,13 @@ async function _apply<Out extends ResourceAttributes>(
|
|
|
202
209
|
});
|
|
203
210
|
}
|
|
204
211
|
|
|
205
|
-
|
|
212
|
+
createAndSendEvent({
|
|
206
213
|
event: "resource.start",
|
|
207
214
|
resource: resource[ResourceKind],
|
|
208
215
|
status: state.status,
|
|
216
|
+
phase: scope.phase,
|
|
217
|
+
duration: performance.now() - start,
|
|
218
|
+
replaced: false,
|
|
209
219
|
});
|
|
210
220
|
|
|
211
221
|
await scope.state.set(resource[ResourceID], state);
|
|
@@ -326,11 +336,12 @@ async function _apply<Out extends ResourceAttributes>(
|
|
|
326
336
|
}
|
|
327
337
|
|
|
328
338
|
const status = phase === "create" ? "created" : "updated";
|
|
329
|
-
|
|
339
|
+
createAndSendEvent({
|
|
330
340
|
event: "resource.success",
|
|
331
341
|
resource: resource[ResourceKind],
|
|
332
342
|
status,
|
|
333
|
-
|
|
343
|
+
phase: scope.phase,
|
|
344
|
+
duration: performance.now() - start,
|
|
334
345
|
replaced: isReplaced,
|
|
335
346
|
});
|
|
336
347
|
|
|
@@ -347,12 +358,18 @@ async function _apply<Out extends ResourceAttributes>(
|
|
|
347
358
|
});
|
|
348
359
|
return output as Awaited<Out> & Resource;
|
|
349
360
|
} catch (error) {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
361
|
+
let errorToSend = error instanceof Error ? error : new Error(String(error));
|
|
362
|
+
createAndSendEvent(
|
|
363
|
+
{
|
|
364
|
+
event: "resource.error",
|
|
365
|
+
resource: resource[ResourceKind],
|
|
366
|
+
duration: performance.now() - start,
|
|
367
|
+
phase: scope.phase,
|
|
368
|
+
status: "unknown",
|
|
369
|
+
replaced: false,
|
|
370
|
+
},
|
|
371
|
+
errorToSend,
|
|
372
|
+
);
|
|
356
373
|
scope.fail();
|
|
357
374
|
throw error;
|
|
358
375
|
}
|
package/src/aws/utils.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
|
|
2
2
|
import { loadConfig } from "@smithy/node-config-provider";
|
|
3
|
+
import type { Provider } from "@smithy/types";
|
|
3
4
|
import { AwsClient } from "aws4fetch";
|
|
4
5
|
import { flattenParams } from "../util/params.ts";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Get AWS region from configuration
|
|
8
9
|
*/
|
|
9
|
-
export const getRegion = loadConfig({
|
|
10
|
+
export const getRegion: Provider<string> = loadConfig({
|
|
10
11
|
environmentVariableSelector: (env: any) =>
|
|
11
12
|
env.AWS_REGION || env.AWS_DEFAULT_REGION,
|
|
12
13
|
configFileSelector: (profile: any) => profile.region,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// This file is auto-generated by @hey-api/openapi-ts
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type ClientOptions,
|
|
5
|
+
type Config,
|
|
6
|
+
createClient,
|
|
7
|
+
createConfig,
|
|
8
|
+
} from "../../util/api/client/index.ts";
|
|
9
|
+
import type { ClientOptions as ClientOptions2 } from "./types.gen.ts";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The `createClientConfig()` function will be called on client initialization
|
|
13
|
+
* and the returned object will become the client's initial configuration.
|
|
14
|
+
*
|
|
15
|
+
* You may want to initialize your client this way instead of calling
|
|
16
|
+
* `setConfig()`. This is useful for example if you're using Next.js
|
|
17
|
+
* to ensure your client always has the correct values.
|
|
18
|
+
*/
|
|
19
|
+
export type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (
|
|
20
|
+
override?: Config<ClientOptions & T>,
|
|
21
|
+
) => Config<Required<ClientOptions> & T>;
|
|
22
|
+
|
|
23
|
+
export const client = createClient(
|
|
24
|
+
createConfig<ClientOptions2>({
|
|
25
|
+
baseUrl: "https://api.clickhouse.cloud",
|
|
26
|
+
throwOnError: true,
|
|
27
|
+
}),
|
|
28
|
+
);
|