@learncard/lca-api-service 1.5.2 → 1.6.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 (56) hide show
  1. package/.env.example +10 -0
  2. package/CHANGELOG.md +44 -0
  3. package/bundle.mjs +1 -1
  4. package/dist/app.d.ts +23 -1
  5. package/dist/config/cacheEnvironment.d.ts +4 -4
  6. package/dist/config/environment.d.ts +145 -114
  7. package/dist/config/oidcEnvironment.d.ts +22 -22
  8. package/dist/didkit_wasm_bg.wasm +0 -0
  9. package/dist/helpers/bedrockGeneration.d.ts +17 -0
  10. package/dist/helpers/bedrockGeneration.test.d.ts +1 -0
  11. package/dist/helpers/bedrockSchema.d.ts +10 -0
  12. package/dist/helpers/imageGeneration.d.ts +42 -0
  13. package/dist/helpers/imageGeneration.test.d.ts +1 -0
  14. package/dist/index.js +2 -2
  15. package/dist/models/Notification.d.ts +3 -1
  16. package/dist/publish-metafile.json +1 -1
  17. package/dist/routes/ai.skill-icons.test.d.ts +1 -0
  18. package/dist/routes/ai.test.d.ts +1 -0
  19. package/dist/routes/escrow.d.ts +19 -0
  20. package/dist/routes/keys.d.ts +1 -0
  21. package/dist/routes/notifications.d.ts +3 -1
  22. package/dist/services/escrow-enclave/logFailure.d.ts +1 -0
  23. package/dist/services/escrow-enclave/logFailure.test.d.ts +1 -0
  24. package/dist/services/escrow-enclave/types.d.ts +17 -1
  25. package/dist/types/notifications.d.ts +3 -1
  26. package/docs/bedrock-generation.md +119 -0
  27. package/docs/image-generation.md +120 -0
  28. package/esbuildPlugins.cjs +9 -6
  29. package/package.json +21 -16
  30. package/scripts/node24-runtime.cjs +9 -0
  31. package/scripts/verify-node24-layer.cjs +49 -0
  32. package/serverless-local.yml +3 -1
  33. package/serverless.function-env.cjs +2 -4
  34. package/serverless.yml +76 -3
  35. package/src/config/environment.ts +14 -0
  36. package/src/helpers/bedrockGeneration.test.ts +222 -0
  37. package/src/helpers/bedrockGeneration.ts +110 -0
  38. package/src/helpers/bedrockSchema.ts +352 -0
  39. package/src/helpers/imageGeneration.test.ts +456 -0
  40. package/src/helpers/imageGeneration.ts +432 -0
  41. package/src/routes/ai.skill-icons.test.ts +92 -0
  42. package/src/routes/ai.test.ts +80 -0
  43. package/src/routes/ai.ts +33 -144
  44. package/src/routes/escrow.ts +15 -2
  45. package/src/routes/keys.ts +18 -0
  46. package/src/services/escrow-enclave/enclaveTrustAnchors.ts +19 -0
  47. package/src/services/escrow-enclave/logFailure.test.ts +72 -0
  48. package/src/services/escrow-enclave/logFailure.ts +46 -0
  49. package/src/services/escrow-enclave/remoteEnclave.test.ts +101 -3
  50. package/src/services/escrow-enclave/remoteEnclave.tls.test.ts +192 -2
  51. package/src/services/escrow-enclave/remoteEnclave.ts +101 -36
  52. package/src/services/escrow-enclave/types.ts +26 -2
  53. package/test/keys-auth-share-escrow.spec.ts +103 -0
  54. package/test/keys-escrow.spec.ts +65 -0
  55. package/test/oidc.spec.ts +41 -2
  56. package/tsconfig.bedrock.json +10 -0
@@ -6,27 +6,27 @@ export declare const oidcEnvironmentShape: {
6
6
  test: "test";
7
7
  production: "production";
8
8
  }>>;
9
- LAMBDA_STAGE: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
9
+ LAMBDA_STAGE: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
10
10
  IS_OFFLINE: z.ZodDefault<z.ZodPreprocess<z.ZodOptional<z.ZodPipe<z.ZodEnum<{
11
11
  0: "0";
12
12
  1: "1";
13
13
  true: "true";
14
14
  false: "false";
15
- }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>>>;
15
+ }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>, unknown>>;
16
16
  IS_E2E_TEST: z.ZodDefault<z.ZodPreprocess<z.ZodOptional<z.ZodPipe<z.ZodEnum<{
17
17
  0: "0";
18
18
  1: "1";
19
19
  true: "true";
20
20
  false: "false";
21
- }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>>>;
22
- KEYCLOAK_ISSUERS: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
23
- KEYCLOAK_AUDIENCES: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
24
- OIDC_ISSUER: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
25
- OIDC_SIGNING_KEY_JWK: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
26
- OIDC_SIGNING_KEY_SECRET_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
27
- OIDC_CLIENT_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
28
- OIDC_CLIENT_SECRET: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
29
- OIDC_REDIRECT_URIS: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
21
+ }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>, unknown>>;
22
+ KEYCLOAK_ISSUERS: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
23
+ KEYCLOAK_AUDIENCES: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
24
+ OIDC_ISSUER: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
25
+ OIDC_SIGNING_KEY_JWK: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
26
+ OIDC_SIGNING_KEY_SECRET_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
27
+ OIDC_CLIENT_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
28
+ OIDC_CLIENT_SECRET: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
29
+ OIDC_REDIRECT_URIS: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
30
30
  };
31
31
  export declare const oidcEnvironmentSchema: z.ZodObject<{
32
32
  NODE_ENV: z.ZodDefault<z.ZodEnum<{
@@ -34,27 +34,27 @@ export declare const oidcEnvironmentSchema: z.ZodObject<{
34
34
  test: "test";
35
35
  production: "production";
36
36
  }>>;
37
- LAMBDA_STAGE: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
37
+ LAMBDA_STAGE: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
38
38
  IS_OFFLINE: z.ZodDefault<z.ZodPreprocess<z.ZodOptional<z.ZodPipe<z.ZodEnum<{
39
39
  0: "0";
40
40
  1: "1";
41
41
  true: "true";
42
42
  false: "false";
43
- }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>>>;
43
+ }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>, unknown>>;
44
44
  IS_E2E_TEST: z.ZodDefault<z.ZodPreprocess<z.ZodOptional<z.ZodPipe<z.ZodEnum<{
45
45
  0: "0";
46
46
  1: "1";
47
47
  true: "true";
48
48
  false: "false";
49
- }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>>>;
50
- KEYCLOAK_ISSUERS: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
51
- KEYCLOAK_AUDIENCES: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
52
- OIDC_ISSUER: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
53
- OIDC_SIGNING_KEY_JWK: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
54
- OIDC_SIGNING_KEY_SECRET_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
55
- OIDC_CLIENT_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
56
- OIDC_CLIENT_SECRET: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
57
- OIDC_REDIRECT_URIS: z.ZodPreprocess<z.ZodOptional<z.ZodString>>;
49
+ }>, z.ZodTransform<boolean, "0" | "1" | "true" | "false">>>, unknown>>;
50
+ KEYCLOAK_ISSUERS: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
51
+ KEYCLOAK_AUDIENCES: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
52
+ OIDC_ISSUER: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
53
+ OIDC_SIGNING_KEY_JWK: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
54
+ OIDC_SIGNING_KEY_SECRET_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
55
+ OIDC_CLIENT_ID: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
56
+ OIDC_CLIENT_SECRET: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
57
+ OIDC_REDIRECT_URIS: z.ZodPreprocess<z.ZodOptional<z.ZodString>, unknown>;
58
58
  }, z.core.$strip>;
59
59
  export type OidcEnvironment = z.output<typeof oidcEnvironmentSchema>;
60
60
  export declare const parseOidcEnvironment: (raw: Record<string, unknown>, source?: string) => OidcEnvironment;
Binary file
@@ -0,0 +1,17 @@
1
+ import OpenAI from 'openai';
2
+ import { getTokenProvider } from '@aws/bedrock-token-generator';
3
+ import { z } from 'zod';
4
+ export declare const BEDROCK_BASE_URL = "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1";
5
+ export declare const GENERATION_MODELS: {
6
+ readonly reasoning: "us.openai.gpt-6.1-sol";
7
+ readonly formatting: "us.openai.gpt-6-luna";
8
+ };
9
+ type GenerationTask = keyof typeof GENERATION_MODELS;
10
+ export declare const createBedrockClient: (baseURL?: string, tokenFactory?: typeof getTokenProvider, fetch?: typeof globalThis.fetch) => OpenAI;
11
+ export declare const generateStructuredOutput: <Schema extends z.ZodType>(client: OpenAI, params: {
12
+ task: GenerationTask;
13
+ instructions: string;
14
+ input: string;
15
+ schema: Schema;
16
+ }) => Promise<z.output<Schema>>;
17
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ export declare class BedrockSchemaError extends Error {
3
+ readonly path: string;
4
+ readonly reason: string;
5
+ readonly code = "unsupported_bedrock_schema";
6
+ constructor(path: string, reason: string);
7
+ }
8
+ export declare function validateBedrockJsonSchema(schema: unknown): void;
9
+ export declare function compileProjectedSchema(schema: z.ZodType): Record<string, unknown>;
10
+ export declare function parseBedrockOutput(value: unknown, schema: z.ZodType): Promise<unknown>;
@@ -0,0 +1,42 @@
1
+ import type OpenAI from 'openai';
2
+ export interface ImageGenerationConfig {
3
+ IMAGE_PROVIDER: 'openai' | 'bedrock';
4
+ BEDROCK_IMAGE_REGION: string;
5
+ BEDROCK_IMAGE_MODEL_ID: string;
6
+ IMAGE_TIMEOUT_MS: number;
7
+ }
8
+ interface ImageStorage {
9
+ storeURL: (url: string) => Promise<{
10
+ url?: string;
11
+ }>;
12
+ upload: (bytes: Buffer, options: {
13
+ timeout: number;
14
+ }, storeOptions: {
15
+ filename: string;
16
+ }) => Promise<{
17
+ url?: string;
18
+ }>;
19
+ }
20
+ export interface ImageDiagnostics {
21
+ stage?: 'invoke' | 'decode' | 'storage' | 'timeout' | 'config';
22
+ category?: ProviderErrorCategory;
23
+ decodeReason?: string;
24
+ finishReason?: string | null;
25
+ errorName?: string;
26
+ errorCode?: string;
27
+ httpStatus?: number;
28
+ awsRequestId?: string;
29
+ sdkRetryable?: boolean;
30
+ attempts?: number;
31
+ }
32
+ type ProviderErrorCategory = 'throttled' | 'unavailable' | 'timeout' | 'filtered' | 'rejected';
33
+ export declare const providerErrorInfo: (error: unknown) => Partial<ImageDiagnostics>;
34
+ export declare const classifyProviderError: (error: unknown) => {
35
+ category: ProviderErrorCategory;
36
+ retryable: boolean;
37
+ };
38
+ export declare const decodeBedrockImage: (body: Uint8Array, diagnostics?: ImageDiagnostics) => Buffer;
39
+ export declare const generateStoredImage: (prompt: string, did: string, config: ImageGenerationConfig, openai: OpenAI | undefined, storage: ImageStorage) => Promise<{
40
+ url: string;
41
+ }>;
42
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/dist/index.js
3
- size: 138248277 bytes
4
- sha256: 35649149351a54bc7898af2974a1ad44edaafc82a95d3e8e650a3e5e13ceb012
3
+ size: 166355147 bytes
4
+ sha256: 0b23e44f11e205fe9e6dd5502e0a80c343603806b4356fdeda1937f70cc49de7
@@ -56,6 +56,7 @@ export declare const MongoNotificationValidator: z.ZodObject<{
56
56
  email: z.ZodOptional<z.ZodOptional<z.ZodString>>;
57
57
  image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
58
58
  heroImage: z.ZodOptional<z.ZodOptional<z.ZodString>>;
59
+ linkedInOrganizationId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
59
60
  websiteLink: z.ZodOptional<z.ZodOptional<z.ZodString>>;
60
61
  isServiceProfile: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
61
62
  type: z.ZodOptional<z.ZodOptional<z.ZodString>>;
@@ -102,6 +103,7 @@ export declare const MongoNotificationValidator: z.ZodObject<{
102
103
  email: z.ZodOptional<z.ZodOptional<z.ZodString>>;
103
104
  image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
104
105
  heroImage: z.ZodOptional<z.ZodOptional<z.ZodString>>;
106
+ linkedInOrganizationId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
105
107
  websiteLink: z.ZodOptional<z.ZodOptional<z.ZodString>>;
106
108
  isServiceProfile: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodBoolean>>>;
107
109
  type: z.ZodOptional<z.ZodOptional<z.ZodString>>;
@@ -174,9 +176,9 @@ export declare const MongoNotificationValidator: z.ZodObject<{
174
176
  }, z.core.$strip>>;
175
177
  id: z.ZodString;
176
178
  action: z.ZodEnum<{
179
+ update: "update";
177
180
  write: "write";
178
181
  consent: "consent";
179
- update: "update";
180
182
  sync: "sync";
181
183
  withdraw: "withdraw";
182
184
  }>;