hanzio 1.0.10 → 1.2.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.
Files changed (71) hide show
  1. package/README.md +70 -4
  2. package/dist/api-wrapper/actions-impl.d.ts +4 -0
  3. package/dist/api-wrapper/builders.d.ts +23 -0
  4. package/dist/api-wrapper/create-client.d.ts +6 -0
  5. package/dist/api-wrapper/error-reporting.d.ts +7 -0
  6. package/dist/api-wrapper/errors.d.ts +64 -0
  7. package/dist/api-wrapper/headers.d.ts +10 -0
  8. package/dist/api-wrapper/index.d.ts +5 -84
  9. package/dist/api-wrapper/redaction.d.ts +2 -0
  10. package/dist/api-wrapper/shared.d.ts +16 -0
  11. package/dist/api-wrapper/size.d.ts +1 -0
  12. package/dist/api-wrapper/test-helpers.d.ts +6 -0
  13. package/dist/api-wrapper/transport.d.ts +55 -0
  14. package/dist/api-wrapper/types.d.ts +154 -0
  15. package/dist/api-wrapper/zod-issues.d.ts +17 -0
  16. package/dist/cache/index.d.ts +26 -0
  17. package/dist/secrets/core.d.ts +47 -0
  18. package/dist/secrets/deadline.d.ts +6 -0
  19. package/dist/secrets/environment.d.ts +9 -0
  20. package/dist/secrets/errors.d.ts +11 -0
  21. package/dist/secrets/index.d.ts +14 -23
  22. package/dist/secrets/infisical-cli.d.ts +6 -0
  23. package/dist/secrets/infisical-config.d.ts +17 -0
  24. package/dist/secrets/infisical-session.d.ts +4 -0
  25. package/dist/secrets/infisical.d.ts +14 -2
  26. package/dist/secrets/loaders.d.ts +9 -0
  27. package/dist/secrets/vite.d.ts +7 -3
  28. package/dist/secrets/worker-loader.d.ts +9 -0
  29. package/dist/secrets/worker.d.ts +3 -0
  30. package/dist/src/api-wrapper/index.js +1059 -177
  31. package/dist/src/index.js +2807 -1397
  32. package/dist/src/jwt/index.js +2 -2
  33. package/dist/src/p-queue/index.js +3 -3
  34. package/dist/src/secrets/index.js +1610 -407
  35. package/dist/src/secrets/infisical.js +1352 -214
  36. package/dist/src/secrets/loaders.js +1529 -0
  37. package/dist/src/secrets/vite.js +33 -11
  38. package/dist/src/secrets/worker.js +275 -0
  39. package/dist/src/sitemap/index.js +1 -1
  40. package/dist/src/zod/index.js +7 -7
  41. package/dist/typedswitch/index.d.ts +9 -5
  42. package/package.json +12 -3
  43. package/src/api-wrapper/actions-impl.ts +100 -0
  44. package/src/api-wrapper/builders.ts +200 -0
  45. package/src/api-wrapper/create-client.ts +393 -0
  46. package/src/api-wrapper/error-reporting.ts +31 -0
  47. package/src/api-wrapper/errors.ts +231 -0
  48. package/src/api-wrapper/headers.ts +79 -0
  49. package/src/api-wrapper/index.ts +5 -492
  50. package/src/api-wrapper/redaction.ts +62 -0
  51. package/src/api-wrapper/shared.ts +25 -0
  52. package/src/api-wrapper/size.ts +19 -0
  53. package/src/api-wrapper/test-helpers.ts +25 -0
  54. package/src/api-wrapper/transport.ts +350 -0
  55. package/src/api-wrapper/types.ts +259 -0
  56. package/src/api-wrapper/zod-issues.ts +157 -0
  57. package/src/cache/index.ts +228 -61
  58. package/src/secrets/core.ts +348 -0
  59. package/src/secrets/deadline.ts +69 -0
  60. package/src/secrets/environment.ts +69 -0
  61. package/src/secrets/errors.ts +29 -0
  62. package/src/secrets/index.ts +81 -140
  63. package/src/secrets/infisical-cli.ts +99 -0
  64. package/src/secrets/infisical-config.ts +70 -0
  65. package/src/secrets/infisical-session.ts +42 -0
  66. package/src/secrets/infisical.ts +219 -35
  67. package/src/secrets/loaders.ts +43 -0
  68. package/src/secrets/vite.ts +44 -15
  69. package/src/secrets/worker-loader.ts +56 -0
  70. package/src/secrets/worker.ts +4 -0
  71. package/src/typedswitch/index.ts +80 -69
@@ -0,0 +1,47 @@
1
+ import { type SecretRequestOptions } from './deadline';
2
+ import { type EnvironmentVariables, type SecretEnvironmentOption } from './environment';
3
+ export type { SecretEnvironment, SecretEnvironmentOption } from './environment';
4
+ export { SecretLoadError } from './errors';
5
+ export type SecretLogAttributes = {
6
+ readonly environment: string;
7
+ readonly count: number;
8
+ readonly durationMs: number;
9
+ readonly source?: string;
10
+ readonly sources?: Readonly<Record<string, number>>;
11
+ readonly code?: string;
12
+ };
13
+ export type SecretLogger = {
14
+ info: (message: string, attributes: SecretLogAttributes) => void;
15
+ error: (message: string, attributes: SecretLogAttributes) => void;
16
+ };
17
+ export type SecretSchema<K extends string, Parsed> = {
18
+ parseAsync: (values: Record<K, string>) => Promise<Parsed>;
19
+ };
20
+ export type CommonSecretSetOptions<K extends string, Parsed = Record<K, string>> = SecretRequestOptions & {
21
+ readonly environment?: SecretEnvironmentOption;
22
+ readonly writeToProcessEnv?: boolean;
23
+ readonly logger?: SecretLogger | false;
24
+ readonly schema?: SecretSchema<K, Parsed>;
25
+ };
26
+ export type CustomLoaderDefineSecretSetOptions<K extends string, Parsed = Record<K, string>> = CommonSecretSetOptions<K, Parsed> & {
27
+ readonly loader: SecretSetLoader<K>;
28
+ };
29
+ export type SecretSetLoaderContext<K extends string> = {
30
+ readonly keys: readonly K[];
31
+ readonly environment: string;
32
+ readonly signal?: AbortSignal;
33
+ readonly timeoutMs?: number;
34
+ /** Report the source actually selected by a dynamic loader. */
35
+ readonly reportSource?: (source: string) => void;
36
+ };
37
+ export type SecretSetLoader<K extends string> = ((context: SecretSetLoaderContext<K>) => Promise<Partial<Record<K, string>>>) & {
38
+ readonly source?: string;
39
+ };
40
+ export type SecretSet<K extends string, Parsed = Record<K, string>> = {
41
+ secret: (key: K) => string;
42
+ secrets: () => Record<K, string>;
43
+ parsed: () => Parsed;
44
+ sources: () => Record<K, string>;
45
+ reload: (options?: SecretRequestOptions) => Promise<SecretSet<K, Parsed>>;
46
+ };
47
+ export declare function defineSecretSet<const Keys extends readonly string[], Parsed = Record<Keys[number], string>>(keys: Keys, options: CustomLoaderDefineSecretSetOptions<Keys[number], Parsed>, environmentVariables?: EnvironmentVariables): Promise<SecretSet<Keys[number], Parsed>>;
@@ -0,0 +1,6 @@
1
+ export type SecretRequestOptions = {
2
+ readonly timeoutMs?: number;
3
+ readonly signal?: AbortSignal;
4
+ };
5
+ /** One deadline includes authentication, retries, body reads, and validation. */
6
+ export declare function withSecretDeadline<T>(options: SecretRequestOptions, operation: (signal: AbortSignal) => Promise<T>): Promise<T>;
@@ -0,0 +1,9 @@
1
+ export type SecretEnvironment = 'dev' | 'staging' | 'prod';
2
+ export type SecretEnvironmentOption = SecretEnvironment | {
3
+ readonly slug: string;
4
+ } | (() => SecretEnvironment | {
5
+ readonly slug: string;
6
+ });
7
+ export type EnvironmentVariables = Record<string, string | undefined>;
8
+ export declare function getProcessEnvironment(): EnvironmentVariables | undefined;
9
+ export declare function resolveSecretEnvironment(option?: SecretEnvironmentOption, env?: EnvironmentVariables): string;
@@ -0,0 +1,11 @@
1
+ export type SecretErrorCode = 'CONFIGURATION' | 'AUTHENTICATION' | 'HTTP' | 'CLI' | 'VALIDATION' | 'MISSING_SECRETS' | 'TIMEOUT' | 'ABORTED' | 'LOADER';
2
+ /** Contains only safe diagnostic metadata; never attach underlying errors. */
3
+ export declare class SecretLoadError extends Error {
4
+ readonly code: SecretErrorCode;
5
+ readonly operation?: string;
6
+ readonly status?: number;
7
+ constructor(code: SecretErrorCode, message: string, details?: {
8
+ operation?: string;
9
+ status?: number;
10
+ });
11
+ }
@@ -1,27 +1,18 @@
1
- export type SecretEnvironment = 'dev' | 'staging' | 'prod';
2
- export type DefineSecretSetOptions<SecretKey extends string> = {
3
- readonly projectId: string;
4
- readonly siteUrl?: string;
5
- readonly environment?: SecretEnvironment | (() => SecretEnvironment);
1
+ import { type CommonSecretSetOptions, type CustomLoaderDefineSecretSetOptions, type SecretSet } from './core';
2
+ import { type SecretEnvironment } from './environment';
3
+ import { type InfisicalAuthMode } from './infisical';
4
+ import { type InfisicalProjectOptions } from './infisical-config';
5
+ export * from './core';
6
+ export * from './infisical';
7
+ export * from './loaders';
8
+ export * from './vite';
9
+ export type { SecretRequestOptions } from './deadline';
10
+ export type InfisicalDefineSecretSetOptions<K extends string = string, Parsed = Record<K, string>> = CommonSecretSetOptions<K, Parsed> & InfisicalProjectOptions & {
11
+ readonly auth?: InfisicalAuthMode;
6
12
  readonly clientIdEnvKey?: string;
7
13
  readonly clientSecretEnvKey?: string;
8
- readonly loader?: SecretSetLoader<SecretKey>;
9
- };
10
- export type SecretSetLoaderContext<SecretKey extends string> = {
11
- readonly keys: readonly SecretKey[];
12
- readonly projectId: string;
13
- readonly environment: SecretEnvironment;
14
- readonly siteUrl: string;
15
- readonly clientIdEnvKey: string;
16
- readonly clientSecretEnvKey: string;
14
+ readonly loader?: undefined;
17
15
  };
18
- export type SecretSetLoader<SecretKey extends string> = (context: SecretSetLoaderContext<SecretKey>) => Promise<Partial<Record<SecretKey, string>>>;
19
- export type SecretSet<SecretKey extends string> = {
20
- secret: (key: SecretKey) => string;
21
- secrets: () => Record<SecretKey, string>;
22
- reload: () => Promise<SecretSet<SecretKey>>;
23
- };
24
- export * from './infisical';
25
- export * from './vite';
16
+ export type DefineSecretSetOptions<K extends string, Parsed = Record<K, string>> = InfisicalDefineSecretSetOptions<K, Parsed> | CustomLoaderDefineSecretSetOptions<K, Parsed>;
26
17
  export declare function getSecretEnvironment(): SecretEnvironment;
27
- export declare function defineSecretSet<const SecretKeys extends readonly string[]>(keys: SecretKeys, options: DefineSecretSetOptions<SecretKeys[number]>): Promise<SecretSet<SecretKeys[number]>>;
18
+ export declare function defineSecretSet<const Keys extends readonly string[], Parsed = Record<Keys[number], string>>(keys: Keys, options: DefineSecretSetOptions<Keys[number], Parsed>): Promise<SecretSet<Keys[number], Parsed>>;
@@ -0,0 +1,6 @@
1
+ import type { SecretRequestOptions } from './deadline';
2
+ /** Read the active CLI session without a shell or credential-bearing errors. */
3
+ export declare function readInfisicalCliToken(options: SecretRequestOptions & {
4
+ siteUrl: string;
5
+ signal: AbortSignal;
6
+ }): Promise<string>;
@@ -0,0 +1,17 @@
1
+ import type { SecretRequestOptions } from './deadline';
2
+ /** Project scope shared by the public Infisical loaders. */
3
+ export type InfisicalProjectOptions = {
4
+ readonly projectId: string;
5
+ /** Scope CLI user authentication; machine identities already have an organization. */
6
+ readonly organizationId: string;
7
+ readonly siteUrl?: string;
8
+ readonly secretPath?: string;
9
+ };
10
+ export type InfisicalScope<K extends string> = InfisicalProjectOptions & SecretRequestOptions & {
11
+ readonly keys: readonly K[];
12
+ readonly environment: string;
13
+ readonly siteUrl: string;
14
+ };
15
+ export declare function validateInfisicalScope(options: InfisicalScope<string>): void;
16
+ /** Validate at configuration time, including for JavaScript callers and local-only loads. */
17
+ export declare function validateInfisicalOrganizationId(organizationId: unknown): void;
@@ -0,0 +1,4 @@
1
+ /** Read routing metadata only. JWT signature and permissions are verified by Infisical. */
2
+ export declare function parseInfisicalSessionToken(token: string): {
3
+ organizationId?: string;
4
+ };
@@ -1,2 +1,14 @@
1
- import type { SecretSetLoaderContext } from '.';
2
- export declare function loadInfisicalSecrets<SecretKey extends string>({ keys, projectId, environment, siteUrl, clientIdEnvKey, clientSecretEnvKey }: SecretSetLoaderContext<SecretKey>): Promise<Partial<Record<SecretKey, string>>>;
1
+ import { type InfisicalScope } from './infisical-config';
2
+ export declare const DEFAULT_INFISICAL_SITE_URL = "https://eu.infisical.com";
3
+ export type InfisicalAuthMode = 'auto' | 'http' | 'cli';
4
+ export declare function fetchInfisicalSecrets<K extends string>(options: InfisicalScope<K> & {
5
+ readonly clientId: string;
6
+ readonly clientSecret: string;
7
+ }): Promise<Partial<Record<K, string>>>;
8
+ export type LoadInfisicalSecretsFromEnvOptions<K extends string> = InfisicalScope<K> & {
9
+ readonly clientIdEnvKey: string;
10
+ readonly clientSecretEnvKey: string;
11
+ readonly auth?: InfisicalAuthMode;
12
+ readonly reportSource?: (source: string) => void;
13
+ };
14
+ export declare function loadInfisicalSecrets<K extends string>(options: LoadInfisicalSecretsFromEnvOptions<K>): Promise<Partial<Record<K, string>>>;
@@ -0,0 +1,9 @@
1
+ import { type InfisicalProjectOptions } from './infisical-config';
2
+ import type { SecretSetLoader, SecretSetLoaderContext } from './core';
3
+ export { cloudflareWorkerEnvLoader } from './worker-loader';
4
+ export declare function infisicalLoader<SecretKey extends string>(config: InfisicalProjectOptions & {
5
+ readonly clientId: string;
6
+ readonly clientSecret: string;
7
+ readonly timeoutMs?: number;
8
+ }): SecretSetLoader<SecretKey>;
9
+ export declare function processEnvLoader<SecretKey extends string>(_ctx: SecretSetLoaderContext<SecretKey>): Promise<Partial<Record<SecretKey, string>>>;
@@ -1,9 +1,13 @@
1
- import type { SecretSet } from '.';
1
+ import type { SecretSet } from './core';
2
2
  export type ViteSecretSetPlugin = {
3
3
  name: string;
4
4
  config: () => {
5
5
  define: Record<string, string>;
6
6
  };
7
7
  };
8
- export declare function getViteDefine<SecretKey extends string>(secretSet: SecretSet<SecretKey>): Record<string, string>;
9
- export declare function viteSecretSetPlugin<SecretKey extends string>(secretSet: SecretSet<SecretKey>): ViteSecretSetPlugin;
8
+ export type ViteSecretSetOptions<K extends string> = {
9
+ /** Explicit acknowledgement that these values may be shipped to browsers. */
10
+ readonly publicKeys?: readonly K[];
11
+ };
12
+ export declare function getViteDefine<K extends string>(secretSet: Pick<SecretSet<K, unknown>, 'secrets'>, options?: ViteSecretSetOptions<K>): Record<string, string>;
13
+ export declare function viteSecretSetPlugin<K extends string>(secretSet: Pick<SecretSet<K, unknown>, 'secrets'>, options?: ViteSecretSetOptions<K>): ViteSecretSetPlugin;
@@ -0,0 +1,9 @@
1
+ import type { SecretSetLoader } from './core';
2
+ /**
3
+ * Reads secrets from a Cloudflare Worker `env` bindings object (or any similar
4
+ * `Record`), for Workers where `process.env` is not populated. Pass the same
5
+ * object you get as `env` in your fetch handler, or values you’d read from
6
+ * `import { env } from "cloudflare:workers"` in your Worker bundle — this
7
+ * package does not import that module.
8
+ */
9
+ export declare function cloudflareWorkerEnvLoader<SecretKey extends string>(workerEnv: Record<string, unknown>): SecretSetLoader<SecretKey>;
@@ -0,0 +1,3 @@
1
+ export * from './core';
2
+ export { cloudflareWorkerEnvLoader } from './worker-loader';
3
+ export type { SecretRequestOptions } from './deadline';