@webiny/api-core 6.5.0-beta.1 → 6.5.0-beta.11

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 (90) hide show
  1. package/ApiCoreFeature.js +4 -0
  2. package/ApiCoreFeature.js.map +1 -1
  3. package/createApiCore.d.ts +1 -1
  4. package/createApiCore.js +3 -1
  5. package/createApiCore.js.map +1 -1
  6. package/features/ai/Ai.js +16 -6
  7. package/features/ai/Ai.js.map +1 -1
  8. package/features/ai/AiModelRegistry.d.ts +3 -1
  9. package/features/ai/AiModelRegistry.js +16 -7
  10. package/features/ai/AiModelRegistry.js.map +1 -1
  11. package/features/ai/DEVELOPERS.md +69 -12
  12. package/features/ai/OpenRouterSdkFactory.d.ts +10 -0
  13. package/features/ai/OpenRouterSdkFactory.js +112 -0
  14. package/features/ai/OpenRouterSdkFactory.js.map +1 -0
  15. package/features/ai/RemoteAiModelCatalog.d.ts +13 -0
  16. package/features/ai/RemoteAiModelCatalog.js +74 -0
  17. package/features/ai/RemoteAiModelCatalog.js.map +1 -0
  18. package/features/ai/abstractions.d.ts +25 -0
  19. package/features/ai/abstractions.js +2 -1
  20. package/features/ai/abstractions.js.map +1 -1
  21. package/features/ai/feature.js +4 -0
  22. package/features/ai/feature.js.map +1 -1
  23. package/features/ai/index.d.ts +2 -2
  24. package/features/ai/index.js +1 -1
  25. package/features/debugger/Debugger.d.ts +23 -0
  26. package/features/debugger/Debugger.js +134 -0
  27. package/features/debugger/Debugger.js.map +1 -0
  28. package/features/debugger/GraphQLDebuggerTransport.d.ts +26 -0
  29. package/features/debugger/GraphQLDebuggerTransport.js +45 -0
  30. package/features/debugger/GraphQLDebuggerTransport.js.map +1 -0
  31. package/features/debugger/__tests__/matchNamespace.test.d.ts +1 -0
  32. package/features/debugger/__tests__/matchNamespace.test.js +67 -0
  33. package/features/debugger/__tests__/matchNamespace.test.js.map +1 -0
  34. package/features/debugger/__tests__/serialize.test.d.ts +1 -0
  35. package/features/debugger/__tests__/serialize.test.js +220 -0
  36. package/features/debugger/__tests__/serialize.test.js.map +1 -0
  37. package/features/debugger/abstractions.d.ts +100 -0
  38. package/features/debugger/abstractions.js +6 -0
  39. package/features/debugger/abstractions.js.map +1 -0
  40. package/features/debugger/feature.d.ts +5 -0
  41. package/features/debugger/feature.js +15 -0
  42. package/features/debugger/feature.js.map +1 -0
  43. package/features/debugger/index.d.ts +7 -0
  44. package/features/debugger/index.js +7 -0
  45. package/features/debugger/limits.d.ts +18 -0
  46. package/features/debugger/limits.js +11 -0
  47. package/features/debugger/limits.js.map +1 -0
  48. package/features/debugger/matchNamespace.d.ts +21 -0
  49. package/features/debugger/matchNamespace.js +48 -0
  50. package/features/debugger/matchNamespace.js.map +1 -0
  51. package/features/debugger/permissions.d.ts +33 -0
  52. package/features/debugger/permissions.js +12 -0
  53. package/features/debugger/permissions.js.map +1 -0
  54. package/features/debugger/permissionsSchema.d.ts +17 -0
  55. package/features/debugger/permissionsSchema.js +18 -0
  56. package/features/debugger/permissionsSchema.js.map +1 -0
  57. package/features/debugger/plugins.d.ts +4 -0
  58. package/features/debugger/plugins.js +82 -0
  59. package/features/debugger/plugins.js.map +1 -0
  60. package/features/debugger/serialize.d.ts +11 -0
  61. package/features/debugger/serialize.js +121 -0
  62. package/features/debugger/serialize.js.map +1 -0
  63. package/features/httpClient/HttpClient.d.ts +7 -0
  64. package/features/httpClient/HttpClient.js +72 -0
  65. package/features/httpClient/HttpClient.js.map +1 -0
  66. package/features/httpClient/HttpRequestError.d.ts +10 -0
  67. package/features/httpClient/HttpRequestError.js +13 -0
  68. package/features/httpClient/HttpRequestError.js.map +1 -0
  69. package/features/httpClient/HttpStatusError.d.ts +12 -0
  70. package/features/httpClient/HttpStatusError.js +12 -0
  71. package/features/httpClient/HttpStatusError.js.map +1 -0
  72. package/features/httpClient/abstractions.d.ts +32 -0
  73. package/features/httpClient/abstractions.js +5 -0
  74. package/features/httpClient/abstractions.js.map +1 -0
  75. package/features/httpClient/feature.d.ts +4 -0
  76. package/features/httpClient/feature.js +11 -0
  77. package/features/httpClient/feature.js.map +1 -0
  78. package/features/httpClient/index.d.ts +3 -0
  79. package/features/httpClient/index.js +3 -0
  80. package/features/users/shared/loaders.js.map +1 -1
  81. package/graphql/wcp/graphql.js +2 -0
  82. package/graphql/wcp/graphql.js.map +1 -1
  83. package/idp/JwksCache.d.ts +7 -2
  84. package/idp/JwksCache.js +43 -16
  85. package/idp/JwksCache.js.map +1 -1
  86. package/idp/feature.js +1 -2
  87. package/idp/feature.js.map +1 -1
  88. package/legacy/security/plugins/secureHeaders.js +1 -0
  89. package/legacy/security/plugins/secureHeaders.js.map +1 -1
  90. package/package.json +25 -24
package/idp/JwksCache.js CHANGED
@@ -1,26 +1,53 @@
1
- class JwksCache {
1
+ import { createImplementation } from "@webiny/feature/api";
2
+ import { z } from "zod";
3
+ import { HttpClient } from "../features/httpClient/index.js";
4
+ import { JwkCache } from "./abstractions.js";
5
+ const oidcConfigurationSchema = z.object({
6
+ jwks_uri: z.string()
7
+ });
8
+ const jwksSchema = z.object({
9
+ keys: z.array(z.looseObject({
10
+ kid: z.string().optional()
11
+ }))
12
+ });
13
+ function getOpenidConfigurationUrl(issuer) {
14
+ const openidUrl = new URL(issuer);
15
+ const pathname = openidUrl.pathname + "/.well-known/openid-configuration";
16
+ openidUrl.pathname = pathname.replace(/\/+/g, "/");
17
+ return openidUrl.toString();
18
+ }
19
+ class JwksCacheImpl {
20
+ constructor(httpClient){
21
+ this.httpClient = httpClient;
22
+ this.cache = new Map();
23
+ }
2
24
  async getKeys(issuer) {
3
25
  const cached = this.cache.get(issuer);
4
- if (cached) return cached.jwks;
5
- const openidUrl = new URL(issuer);
6
- const pathname = openidUrl.pathname + "/.well-known/openid-configuration";
7
- openidUrl.pathname = pathname.replace(/\/+/g, "/");
8
- const oidcConfig = await fetch(openidUrl.toString()).then((res)=>res.json());
9
- const jwksResponse = await fetch(oidcConfig.jwks_uri).then((res)=>res.json());
26
+ if (cached) return cached;
27
+ const openidConfigurationUrl = getOpenidConfigurationUrl(issuer);
28
+ const oidcConfig = await this.fetchJson(openidConfigurationUrl, oidcConfigurationSchema);
29
+ const jwksResponse = await this.fetchJson(oidcConfig.jwks_uri, jwksSchema);
10
30
  const jwks = jwksResponse.keys;
11
- this.cache.set(issuer, {
12
- oidcConfig,
13
- jwks
14
- });
31
+ this.cache.set(issuer, jwks);
15
32
  return jwks;
16
33
  }
17
- clearCache() {
18
- this.cache.clear();
19
- }
20
- constructor(){
21
- this.cache = new Map();
34
+ async fetchJson(url, schema) {
35
+ const response = await this.httpClient.requestJson({
36
+ url
37
+ });
38
+ if (response.isFail()) throw response.error;
39
+ const result = schema.safeParse(response.value);
40
+ if (!result.success) throw new Error(`Invalid response from "${url}": ${result.error.message}`);
41
+ return result.data;
22
42
  }
23
43
  }
44
+ const JwksCache = createImplementation({
45
+ abstraction: JwkCache,
46
+ implementation: JwksCacheImpl,
47
+ dependencies: [
48
+ HttpClient
49
+ ]
50
+ });
24
51
  export { JwksCache };
25
52
 
26
53
  //# sourceMappingURL=JwksCache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"idp/JwksCache.js","sources":["../../src/idp/JwksCache.ts"],"sourcesContent":["import type { Jwk } from \"~/features/security/utils/verifyJwtUsingJwk.js\";\nimport { JwkCache } from \"./abstractions.js\";\n\ninterface OidcConfiguration {\n jwks_uri: string;\n [key: string]: any;\n}\n\ninterface CacheEntry {\n oidcConfig: OidcConfiguration;\n jwks: Jwk[];\n}\n\nexport class JwksCache implements JwkCache.Interface {\n private cache = new Map<string, CacheEntry>();\n\n async getKeys(issuer: string): Promise<Jwk[]> {\n // Check cache first\n const cached = this.cache.get(issuer);\n if (cached) {\n return cached.jwks;\n }\n\n // Fetch OIDC configuration\n const openidUrl = new URL(issuer);\n const pathname = openidUrl.pathname + \"/.well-known/openid-configuration\";\n openidUrl.pathname = pathname.replace(/\\/+/g, \"/\");\n\n const oidcConfig = await fetch(openidUrl.toString()).then(\n res => res.json() as Promise<OidcConfiguration>\n );\n\n // Fetch JWKs from jwks_uri\n const jwksResponse = await fetch(oidcConfig.jwks_uri).then(res => res.json());\n const jwks = jwksResponse.keys as Jwk[];\n\n // Cache both config and JWKs\n this.cache.set(issuer, {\n oidcConfig,\n jwks\n });\n\n return jwks;\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n}\n"],"names":["JwksCache","issuer","cached","openidUrl","URL","pathname","oidcConfig","fetch","res","jwksResponse","jwks","Map"],"mappings":"AAaO,MAAMA;IAGT,MAAM,QAAQC,MAAc,EAAkB;QAE1C,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAACD;QAC9B,IAAIC,QACA,OAAOA,OAAO,IAAI;QAItB,MAAMC,YAAY,IAAIC,IAAIH;QAC1B,MAAMI,WAAWF,UAAU,QAAQ,GAAG;QACtCA,UAAU,QAAQ,GAAGE,SAAS,OAAO,CAAC,QAAQ;QAE9C,MAAMC,aAAa,MAAMC,MAAMJ,UAAU,QAAQ,IAAI,IAAI,CACrDK,CAAAA,MAAOA,IAAI,IAAI;QAInB,MAAMC,eAAe,MAAMF,MAAMD,WAAW,QAAQ,EAAE,IAAI,CAACE,CAAAA,MAAOA,IAAI,IAAI;QAC1E,MAAME,OAAOD,aAAa,IAAI;QAG9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAACR,QAAQ;YACnBK;YACAI;QACJ;QAEA,OAAOA;IACX;IAEA,aAAmB;QACf,IAAI,CAAC,KAAK,CAAC,KAAK;IACpB;;aAjCQ,KAAK,GAAG,IAAIC;;AAkCxB"}
1
+ {"version":3,"file":"idp/JwksCache.js","sources":["../../src/idp/JwksCache.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { z } from \"zod\";\nimport type { Jwk } from \"~/features/security/utils/verifyJwtUsingJwk.js\";\nimport { HttpClient } from \"~/features/httpClient/index.js\";\nimport { JwkCache } from \"./abstractions.js\";\n\nconst oidcConfigurationSchema = z.object({\n jwks_uri: z.string()\n});\n\nconst jwksSchema = z.object({\n keys: z.array(z.looseObject({ kid: z.string().optional() }))\n});\n\nfunction getOpenidConfigurationUrl(issuer: string): string {\n const openidUrl = new URL(issuer);\n const pathname = openidUrl.pathname + \"/.well-known/openid-configuration\";\n openidUrl.pathname = pathname.replace(/\\/+/g, \"/\");\n return openidUrl.toString();\n}\n\nclass JwksCacheImpl implements JwkCache.Interface {\n private cache = new Map<string, Jwk[]>();\n\n constructor(private readonly httpClient: HttpClient.Interface) {}\n\n async getKeys(issuer: string): Promise<Jwk[]> {\n const cached = this.cache.get(issuer);\n if (cached) {\n return cached;\n }\n\n const openidConfigurationUrl = getOpenidConfigurationUrl(issuer);\n const oidcConfig = await this.fetchJson(openidConfigurationUrl, oidcConfigurationSchema);\n const jwksResponse = await this.fetchJson(oidcConfig.jwks_uri, jwksSchema);\n const jwks: Jwk[] = jwksResponse.keys;\n\n this.cache.set(issuer, jwks);\n\n return jwks;\n }\n\n // Throws, so a failed fetch fails the token verification instead of caching a bad answer.\n private async fetchJson<T>(url: string, schema: z.ZodType<T>): Promise<T> {\n const response = await this.httpClient.requestJson({ url });\n if (response.isFail()) {\n throw response.error;\n }\n\n const result = schema.safeParse(response.value);\n if (!result.success) {\n throw new Error(`Invalid response from \"${url}\": ${result.error.message}`);\n }\n\n return result.data;\n }\n}\n\nexport const JwksCache = createImplementation({\n abstraction: JwkCache,\n implementation: JwksCacheImpl,\n dependencies: [HttpClient]\n});\n"],"names":["oidcConfigurationSchema","z","jwksSchema","getOpenidConfigurationUrl","issuer","openidUrl","URL","pathname","JwksCacheImpl","httpClient","Map","cached","openidConfigurationUrl","oidcConfig","jwksResponse","jwks","url","schema","response","result","Error","JwksCache","createImplementation","JwkCache","HttpClient"],"mappings":";;;;AAMA,MAAMA,0BAA0BC,EAAE,MAAM,CAAC;IACrC,UAAUA,EAAE,MAAM;AACtB;AAEA,MAAMC,aAAaD,EAAE,MAAM,CAAC;IACxB,MAAMA,EAAE,KAAK,CAACA,EAAE,WAAW,CAAC;QAAE,KAAKA,EAAE,MAAM,GAAG,QAAQ;IAAG;AAC7D;AAEA,SAASE,0BAA0BC,MAAc;IAC7C,MAAMC,YAAY,IAAIC,IAAIF;IAC1B,MAAMG,WAAWF,UAAU,QAAQ,GAAG;IACtCA,UAAU,QAAQ,GAAGE,SAAS,OAAO,CAAC,QAAQ;IAC9C,OAAOF,UAAU,QAAQ;AAC7B;AAEA,MAAMG;IAGF,YAA6BC,UAAgC,CAAE;aAAlCA,UAAU,GAAVA;aAFrB,KAAK,GAAG,IAAIC;IAE4C;IAEhE,MAAM,QAAQN,MAAc,EAAkB;QAC1C,MAAMO,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAACP;QAC9B,IAAIO,QACA,OAAOA;QAGX,MAAMC,yBAAyBT,0BAA0BC;QACzD,MAAMS,aAAa,MAAM,IAAI,CAAC,SAAS,CAACD,wBAAwBZ;QAChE,MAAMc,eAAe,MAAM,IAAI,CAAC,SAAS,CAACD,WAAW,QAAQ,EAAEX;QAC/D,MAAMa,OAAcD,aAAa,IAAI;QAErC,IAAI,CAAC,KAAK,CAAC,GAAG,CAACV,QAAQW;QAEvB,OAAOA;IACX;IAGA,MAAc,UAAaC,GAAW,EAAEC,MAAoB,EAAc;QACtE,MAAMC,WAAW,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAEF;QAAI;QACzD,IAAIE,SAAS,MAAM,IACf,MAAMA,SAAS,KAAK;QAGxB,MAAMC,SAASF,OAAO,SAAS,CAACC,SAAS,KAAK;QAC9C,IAAI,CAACC,OAAO,OAAO,EACf,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEJ,IAAI,GAAG,EAAEG,OAAO,KAAK,CAAC,OAAO,EAAE;QAG7E,OAAOA,OAAO,IAAI;IACtB;AACJ;AAEO,MAAME,YAAYC,qBAAqB;IAC1C,aAAaC;IACb,gBAAgBf;IAChB,cAAc;QAACgB;KAAW;AAC9B"}
package/idp/feature.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { JwtAuthenticator } from "./JwtAuthenticator.js";
3
- import { JwkCache } from "./abstractions.js";
4
3
  import { JwksCache } from "./JwksCache.js";
5
4
  import { OidcJwtIdentityProvider } from "./OidcJwtIdentityProvider.js";
6
5
  const IdpAuthenticatorFeature = createFeature({
@@ -8,7 +7,7 @@ const IdpAuthenticatorFeature = createFeature({
8
7
  register (container) {
9
8
  container.register(JwtAuthenticator);
10
9
  container.register(OidcJwtIdentityProvider);
11
- container.registerInstance(JwkCache, new JwksCache());
10
+ container.register(JwksCache).inSingletonScope();
12
11
  }
13
12
  });
14
13
  export { IdpAuthenticatorFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"idp/feature.js","sources":["../../src/idp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { JwtAuthenticator } from \"./JwtAuthenticator.js\";\nimport { JwkCache } from \"./abstractions.js\";\nimport { JwksCache } from \"./JwksCache.js\";\nimport { OidcJwtIdentityProvider } from \"~/idp/OidcJwtIdentityProvider.js\";\n\nexport const IdpAuthenticatorFeature = createFeature({\n name: \"IdpAuthenticator\",\n register(container) {\n container.register(JwtAuthenticator);\n container.register(OidcJwtIdentityProvider);\n container.registerInstance(JwkCache, new JwksCache());\n }\n});\n"],"names":["IdpAuthenticatorFeature","createFeature","container","JwtAuthenticator","OidcJwtIdentityProvider","JwkCache","JwksCache"],"mappings":";;;;;AAMO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,gBAAgB,CAACG,UAAU,IAAIC;IAC7C;AACJ"}
1
+ {"version":3,"file":"idp/feature.js","sources":["../../src/idp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { JwtAuthenticator } from \"./JwtAuthenticator.js\";\nimport { JwksCache } from \"./JwksCache.js\";\nimport { OidcJwtIdentityProvider } from \"~/idp/OidcJwtIdentityProvider.js\";\n\nexport const IdpAuthenticatorFeature = createFeature({\n name: \"IdpAuthenticator\",\n register(container) {\n container.register(JwtAuthenticator);\n container.register(OidcJwtIdentityProvider);\n // Singleton, so the keys stay cached for the life of the process.\n container.register(JwksCache).inSingletonScope();\n }\n});\n"],"names":["IdpAuthenticatorFeature","createFeature","container","JwtAuthenticator","OidcJwtIdentityProvider","JwksCache"],"mappings":";;;;AAKO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QAEnBF,UAAU,QAAQ,CAACG,WAAW,gBAAgB;IAClD;AACJ"}
@@ -6,6 +6,7 @@ const whitelistedHeaders = [
6
6
  "content-type",
7
7
  "x-tenant",
8
8
  "x-apollo-tracing",
9
+ "x-webiny-debug",
9
10
  "apollo-query-plan-experimental"
10
11
  ];
11
12
  const setupSecureHeaders = ()=>createHandlerOnRequest(async (request, reply)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"legacy/security/plugins/secureHeaders.js","sources":["../../../../src/legacy/security/plugins/secureHeaders.ts"],"sourcesContent":["import { createHandlerOnRequest, ResponseHeaders } from \"@webiny/handler\";\n\nconst whitelistedHeaders = [\n \"accept\",\n \"authorization\",\n \"cache-control\",\n \"content-type\",\n \"x-tenant\",\n \"x-apollo-tracing\",\n \"apollo-query-plan-experimental\"\n];\n\nexport const setupSecureHeaders = () => {\n return createHandlerOnRequest(async (request, reply) => {\n const isOptions = request.method === \"OPTIONS\";\n\n const headers = ResponseHeaders.create();\n headers.set(\"access-control-allow-origin\", request.headers[\"origin\"]);\n headers.set(\"access-control-allow-credentials\", \"true\");\n\n if (isOptions) {\n headers.set(\"cache-control\", \"public, max-age=86400\");\n headers.set(\"content-type\", \"application/json; charset=utf-8\");\n headers.set(\"access-control-max-age\", \"86400\");\n headers.set(\"access-control-allow-methods\", \"OPTIONS,POST,GET,DELETE,PUT,PATCH\");\n headers.set(\"access-control-allow-headers\", whitelistedHeaders.join(\", \"));\n } else {\n headers.set(\"x-tenant\", request.headers[\"x-tenant\"] || \"root\");\n headers.set(\"vary\", \"origin\");\n }\n\n reply.headers(headers.getHeaders());\n });\n};\n"],"names":["whitelistedHeaders","setupSecureHeaders","createHandlerOnRequest","request","reply","isOptions","headers","ResponseHeaders"],"mappings":";AAEA,MAAMA,qBAAqB;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;CACH;AAEM,MAAMC,qBAAqB,IACvBC,uBAAuB,OAAOC,SAASC;QAC1C,MAAMC,YAAYF,AAAmB,cAAnBA,QAAQ,MAAM;QAEhC,MAAMG,UAAUC,gBAAgB,MAAM;QACtCD,QAAQ,GAAG,CAAC,+BAA+BH,QAAQ,OAAO,CAAC,SAAS;QACpEG,QAAQ,GAAG,CAAC,oCAAoC;QAEhD,IAAID,WAAW;YACXC,QAAQ,GAAG,CAAC,iBAAiB;YAC7BA,QAAQ,GAAG,CAAC,gBAAgB;YAC5BA,QAAQ,GAAG,CAAC,0BAA0B;YACtCA,QAAQ,GAAG,CAAC,gCAAgC;YAC5CA,QAAQ,GAAG,CAAC,gCAAgCN,mBAAmB,IAAI,CAAC;QACxE,OAAO;YACHM,QAAQ,GAAG,CAAC,YAAYH,QAAQ,OAAO,CAAC,WAAW,IAAI;YACvDG,QAAQ,GAAG,CAAC,QAAQ;QACxB;QAEAF,MAAM,OAAO,CAACE,QAAQ,UAAU;IACpC"}
1
+ {"version":3,"file":"legacy/security/plugins/secureHeaders.js","sources":["../../../../src/legacy/security/plugins/secureHeaders.ts"],"sourcesContent":["import { createHandlerOnRequest, ResponseHeaders } from \"@webiny/handler\";\n\nconst whitelistedHeaders = [\n \"accept\",\n \"authorization\",\n \"cache-control\",\n \"content-type\",\n \"x-tenant\",\n \"x-apollo-tracing\",\n \"x-webiny-debug\",\n \"apollo-query-plan-experimental\"\n];\n\nexport const setupSecureHeaders = () => {\n return createHandlerOnRequest(async (request, reply) => {\n const isOptions = request.method === \"OPTIONS\";\n\n const headers = ResponseHeaders.create();\n headers.set(\"access-control-allow-origin\", request.headers[\"origin\"]);\n headers.set(\"access-control-allow-credentials\", \"true\");\n\n if (isOptions) {\n headers.set(\"cache-control\", \"public, max-age=86400\");\n headers.set(\"content-type\", \"application/json; charset=utf-8\");\n headers.set(\"access-control-max-age\", \"86400\");\n headers.set(\"access-control-allow-methods\", \"OPTIONS,POST,GET,DELETE,PUT,PATCH\");\n headers.set(\"access-control-allow-headers\", whitelistedHeaders.join(\", \"));\n } else {\n headers.set(\"x-tenant\", request.headers[\"x-tenant\"] || \"root\");\n headers.set(\"vary\", \"origin\");\n }\n\n reply.headers(headers.getHeaders());\n });\n};\n"],"names":["whitelistedHeaders","setupSecureHeaders","createHandlerOnRequest","request","reply","isOptions","headers","ResponseHeaders"],"mappings":";AAEA,MAAMA,qBAAqB;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH;AAEM,MAAMC,qBAAqB,IACvBC,uBAAuB,OAAOC,SAASC;QAC1C,MAAMC,YAAYF,AAAmB,cAAnBA,QAAQ,MAAM;QAEhC,MAAMG,UAAUC,gBAAgB,MAAM;QACtCD,QAAQ,GAAG,CAAC,+BAA+BH,QAAQ,OAAO,CAAC,SAAS;QACpEG,QAAQ,GAAG,CAAC,oCAAoC;QAEhD,IAAID,WAAW;YACXC,QAAQ,GAAG,CAAC,iBAAiB;YAC7BA,QAAQ,GAAG,CAAC,gBAAgB;YAC5BA,QAAQ,GAAG,CAAC,0BAA0B;YACtCA,QAAQ,GAAG,CAAC,gCAAgC;YAC5CA,QAAQ,GAAG,CAAC,gCAAgCN,mBAAmB,IAAI,CAAC;QACxE,OAAO;YACHM,QAAQ,GAAG,CAAC,YAAYH,QAAQ,OAAO,CAAC,WAAW,IAAI;YACvDG,QAAQ,GAAG,CAAC,QAAQ;QACxB;QAEAF,MAAM,OAAO,CAACE,QAAQ,UAAU;IACpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-core",
3
- "version": "6.5.0-beta.1",
3
+ "version": "6.5.0-beta.11",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,38 +14,39 @@
14
14
  "./*": "./*"
15
15
  },
16
16
  "dependencies": {
17
- "@ai-sdk/anthropic": "4.0.49",
18
- "@ai-sdk/google": "4.0.64",
19
- "@ai-sdk/openai": "4.0.60",
20
- "@webiny/api": "6.5.0-beta.1",
21
- "@webiny/di": "1.0.2",
22
- "@webiny/error": "6.5.0-beta.1",
23
- "@webiny/feature": "6.5.0-beta.1",
24
- "@webiny/feature-flags": "6.5.0-beta.1",
25
- "@webiny/handler": "6.5.0-beta.1",
26
- "@webiny/handler-db": "6.5.0-beta.1",
27
- "@webiny/handler-graphql": "6.5.0-beta.1",
28
- "@webiny/plugins": "6.5.0-beta.1",
29
- "@webiny/utils": "6.5.0-beta.1",
30
- "@webiny/wcp": "6.5.0-beta.1",
31
- "ai": "7.0.34",
17
+ "@ai-sdk/anthropic": "4.0.71",
18
+ "@ai-sdk/google": "4.0.87",
19
+ "@ai-sdk/openai": "4.0.83",
20
+ "@openrouter/ai-sdk-provider": "3.1.0",
21
+ "@webiny/api": "6.5.0-beta.11",
22
+ "@webiny/di": "1.1.0",
23
+ "@webiny/error": "6.5.0-beta.11",
24
+ "@webiny/feature": "6.5.0-beta.11",
25
+ "@webiny/feature-flags": "6.5.0-beta.11",
26
+ "@webiny/handler": "6.5.0-beta.11",
27
+ "@webiny/handler-db": "6.5.0-beta.11",
28
+ "@webiny/handler-graphql": "6.5.0-beta.11",
29
+ "@webiny/plugins": "6.5.0-beta.11",
30
+ "@webiny/utils": "6.5.0-beta.11",
31
+ "@webiny/wcp": "6.5.0-beta.11",
32
+ "ai": "7.0.127",
32
33
  "dataloader": "2.2.3",
33
- "jose": "6.2.3",
34
+ "jose": "6.2.12",
34
35
  "jsonwebtoken": "9.0.3",
35
36
  "lodash": "4.18.1",
36
- "minimatch": "10.2.5",
37
- "pino": "10.3.1",
37
+ "minimatch": "10.2.6",
38
+ "pino": "10.4.0",
38
39
  "pino-lambda": "4.4.1",
39
- "zod": "4.4.3"
40
+ "zod": "4.6.5"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@types/jsonwebtoken": "9.0.10",
43
- "@webiny/build-tools": "6.5.0-beta.1",
44
- "@webiny/handler-aws": "6.5.0-beta.1",
45
- "@webiny/project-utils": "6.5.0-beta.1",
44
+ "@webiny/build-tools": "6.5.0-beta.11",
45
+ "@webiny/handler-aws": "6.5.0-beta.11",
46
+ "@webiny/project-utils": "6.5.0-beta.11",
46
47
  "rimraf": "6.1.3",
47
48
  "typescript": "7.0.2",
48
- "vitest": "4.1.10"
49
+ "vitest": "5.0.3"
49
50
  },
50
51
  "publishConfig": {
51
52
  "access": "public"