@webiny/api-scheduler-aws 0.0.0-unstable.0d717d18dd → 0.0.0-unstable.5387e5f7c8

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/context.d.ts CHANGED
@@ -4,8 +4,13 @@ export interface IRegisterSchedulerAwsExtensionParams {
4
4
  getClient(config?: SchedulerClientConfig): Pick<SchedulerClient, "send">;
5
5
  }
6
6
  /**
7
- * Registers the AWS (EventBridge Scheduler) transport for the scheduler. Binds `SchedulerService`
8
- * per-request via a RequestContextInitializer (post-tenant): resolves the deployed scheduler
9
- * manifest and picks the EventBridge service, or a no-op Void service when the manifest is missing.
7
+ * Registers the AWS (EventBridge Scheduler) transport for the scheduler.
8
+ *
9
+ * `SchedulerService` is bound at register time to a lazy implementation that reads the deployed
10
+ * scheduler manifest on first use and delegates to either the EventBridge service or the no-op Void
11
+ * service. Previously this was a per-request `RequestContextInitializer`, because the manifest read
12
+ * is async and DI resolution is not — along with a `getTenant()` guard, since a fixed-time hook can
13
+ * fire before the tenant is established. Neither is needed once the async work moves into the
14
+ * methods, which were already async.
10
15
  */
11
16
  export declare const registerSchedulerAwsExtension: (container: Container, params: IRegisterSchedulerAwsExtensionParams) => void;
package/context.js CHANGED
@@ -1,22 +1,7 @@
1
- import { RequestContextInitializer } from "@webiny/event-handler-core";
2
- import { getManifest } from "./manifest.js";
3
1
  import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js";
4
- import { EventBridgeSchedulerService } from "./features/SchedulerService/EventBridgeSchedulerService.js";
5
- import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js";
6
- import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
2
+ import { createLazySchedulerService } from "./features/SchedulerService/LazySchedulerService.js";
7
3
  const registerSchedulerAwsExtension = (container, params)=>{
8
- container.registerInstance(RequestContextInitializer, {
9
- async init (ctx) {
10
- const requestContainer = ctx.container;
11
- if (!requestContainer.resolve(TenantContext).getTenant()) return;
12
- const manifest = await getManifest();
13
- if (manifest.error) requestContainer.registerInstance(SchedulerService, new VoidSchedulerService());
14
- else requestContainer.registerInstance(SchedulerService, new EventBridgeSchedulerService(params.getClient, {
15
- lambdaArn: manifest.data.lambdaArn,
16
- roleArn: manifest.data.roleArn
17
- }));
18
- }
19
- });
4
+ container.registerInstance(SchedulerService, createLazySchedulerService(params.getClient));
20
5
  };
21
6
  export { registerSchedulerAwsExtension };
22
7
 
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport { RequestContextInitializer } from \"@webiny/event-handler-core\";\nimport type {\n SchedulerClient,\n SchedulerClientConfig\n} from \"@webiny/aws-sdk/client-scheduler/index.js\";\nimport { getManifest } from \"~/manifest.js\";\nimport { SchedulerService } from \"@webiny/api-scheduler/shared/abstractions.js\";\nimport { EventBridgeSchedulerService } from \"~/features/SchedulerService/EventBridgeSchedulerService.js\";\nimport { VoidSchedulerService } from \"@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\n\nexport interface IRegisterSchedulerAwsExtensionParams {\n getClient(config?: SchedulerClientConfig): Pick<SchedulerClient, \"send\">;\n}\n\n/**\n * Registers the AWS (EventBridge Scheduler) transport for the scheduler. Binds `SchedulerService`\n * per-request via a RequestContextInitializer (post-tenant): resolves the deployed scheduler\n * manifest and picks the EventBridge service, or a no-op Void service when the manifest is missing.\n */\nexport const registerSchedulerAwsExtension = (\n container: Container,\n params: IRegisterSchedulerAwsExtensionParams\n) => {\n container.registerInstance(RequestContextInitializer, {\n async init(ctx: Record<string, any>) {\n const requestContainer = ctx.container as Container;\n\n if (!requestContainer.resolve(TenantContext).getTenant()) {\n return;\n }\n\n const manifest = await getManifest();\n\n if (manifest.error) {\n requestContainer.registerInstance(SchedulerService, new VoidSchedulerService());\n } else {\n requestContainer.registerInstance(\n SchedulerService,\n new EventBridgeSchedulerService(params.getClient, {\n lambdaArn: manifest.data.lambdaArn,\n roleArn: manifest.data.roleArn\n })\n );\n }\n }\n });\n};\n"],"names":["registerSchedulerAwsExtension","container","params","RequestContextInitializer","ctx","requestContainer","TenantContext","manifest","getManifest","SchedulerService","VoidSchedulerService","EventBridgeSchedulerService"],"mappings":";;;;;;AAqBO,MAAMA,gCAAgC,CACzCC,WACAC;IAEAD,UAAU,gBAAgB,CAACE,2BAA2B;QAClD,MAAM,MAAKC,GAAwB;YAC/B,MAAMC,mBAAmBD,IAAI,SAAS;YAEtC,IAAI,CAACC,iBAAiB,OAAO,CAACC,eAAe,SAAS,IAClD;YAGJ,MAAMC,WAAW,MAAMC;YAEvB,IAAID,SAAS,KAAK,EACdF,iBAAiB,gBAAgB,CAACI,kBAAkB,IAAIC;iBAExDL,iBAAiB,gBAAgB,CAC7BI,kBACA,IAAIE,4BAA4BT,OAAO,SAAS,EAAE;gBAC9C,WAAWK,SAAS,IAAI,CAAC,SAAS;gBAClC,SAASA,SAAS,IAAI,CAAC,OAAO;YAClC;QAGZ;IACJ;AACJ"}
1
+ {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport type {\n SchedulerClient,\n SchedulerClientConfig\n} from \"@webiny/aws-sdk/client-scheduler/index.js\";\nimport { SchedulerService } from \"@webiny/api-scheduler/shared/abstractions.js\";\nimport { createLazySchedulerService } from \"~/features/SchedulerService/LazySchedulerService.js\";\n\nexport interface IRegisterSchedulerAwsExtensionParams {\n getClient(config?: SchedulerClientConfig): Pick<SchedulerClient, \"send\">;\n}\n\n/**\n * Registers the AWS (EventBridge Scheduler) transport for the scheduler.\n *\n * `SchedulerService` is bound at register time to a lazy implementation that reads the deployed\n * scheduler manifest on first use and delegates to either the EventBridge service or the no-op Void\n * service. Previously this was a per-request `RequestContextInitializer`, because the manifest read\n * is async and DI resolution is not — along with a `getTenant()` guard, since a fixed-time hook can\n * fire before the tenant is established. Neither is needed once the async work moves into the\n * methods, which were already async.\n */\nexport const registerSchedulerAwsExtension = (\n container: Container,\n params: IRegisterSchedulerAwsExtensionParams\n) => {\n container.registerInstance(SchedulerService, createLazySchedulerService(params.getClient));\n};\n"],"names":["registerSchedulerAwsExtension","container","params","SchedulerService","createLazySchedulerService"],"mappings":";;AAsBO,MAAMA,gCAAgC,CACzCC,WACAC;IAEAD,UAAU,gBAAgB,CAACE,kBAAkBC,2BAA2BF,OAAO,SAAS;AAC5F"}
@@ -0,0 +1,4 @@
1
+ import type { SchedulerClient, SchedulerClientConfig } from "@webiny/aws-sdk/client-scheduler/index.js";
2
+ import { SchedulerService } from "@webiny/api-scheduler/shared/abstractions.js";
3
+ export type GetSchedulerClient = (config?: SchedulerClientConfig) => Pick<SchedulerClient, "send">;
4
+ export declare const createLazySchedulerService: (getClient: GetSchedulerClient) => SchedulerService.Interface;
@@ -0,0 +1,32 @@
1
+ import { VoidSchedulerService } from "@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js";
2
+ import { getManifest } from "../../manifest.js";
3
+ import { EventBridgeSchedulerService } from "./EventBridgeSchedulerService.js";
4
+ class LazySchedulerServiceImpl {
5
+ constructor(getClient){
6
+ this.getClient = getClient;
7
+ }
8
+ async service() {
9
+ const manifest = await getManifest();
10
+ if (manifest.error) return new VoidSchedulerService();
11
+ return new EventBridgeSchedulerService(this.getClient, {
12
+ lambdaArn: manifest.data.lambdaArn,
13
+ roleArn: manifest.data.roleArn
14
+ });
15
+ }
16
+ async create(params) {
17
+ return (await this.service()).create(params);
18
+ }
19
+ async update(params) {
20
+ return (await this.service()).update(params);
21
+ }
22
+ async delete(params) {
23
+ return (await this.service()).delete(params);
24
+ }
25
+ async exists(params) {
26
+ return (await this.service()).exists(params);
27
+ }
28
+ }
29
+ const createLazySchedulerService = (getClient)=>new LazySchedulerServiceImpl(getClient);
30
+ export { createLazySchedulerService };
31
+
32
+ //# sourceMappingURL=LazySchedulerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/SchedulerService/LazySchedulerService.js","sources":["../../../src/features/SchedulerService/LazySchedulerService.ts"],"sourcesContent":["import type {\n SchedulerClient,\n SchedulerClientConfig\n} from \"@webiny/aws-sdk/client-scheduler/index.js\";\nimport { SchedulerService } from \"@webiny/api-scheduler/shared/abstractions.js\";\nimport { VoidSchedulerService } from \"@webiny/api-scheduler/features/SchedulerService/VoidSchedulerService.js\";\nimport { getManifest } from \"~/manifest.js\";\nimport { EventBridgeSchedulerService } from \"./EventBridgeSchedulerService.js\";\n\nexport type GetSchedulerClient = (config?: SchedulerClientConfig) => Pick<SchedulerClient, \"send\">;\n\n/**\n * Picks the real EventBridge service or the no-op Void service, deciding on first use rather than\n * up front.\n *\n * The choice depends on the deployed scheduler manifest, and reading it is async — which is why\n * this used to be a per-request `RequestContextInitializer` that resolved the manifest and then\n * registered whichever service it implied. Every method here is already async, so the decision can\n * simply be awaited at the point of use instead.\n *\n * No memoization: `ServiceDiscovery.load()` caches the manifest in a process-wide static, so\n * `getManifest()` is cheap after the first call.\n */\nclass LazySchedulerServiceImpl implements SchedulerService.Interface {\n constructor(private getClient: GetSchedulerClient) {}\n\n private async service(): Promise<SchedulerService.Interface> {\n const manifest = await getManifest();\n\n if (manifest.error) {\n return new VoidSchedulerService();\n }\n\n return new EventBridgeSchedulerService(this.getClient, {\n lambdaArn: manifest.data.lambdaArn,\n roleArn: manifest.data.roleArn\n });\n }\n\n async create(params: SchedulerService.CreateParams): Promise<void> {\n return (await this.service()).create(params);\n }\n\n async update(params: SchedulerService.UpdateParams): Promise<void> {\n return (await this.service()).update(params);\n }\n\n async delete(params: SchedulerService.DeleteParams): Promise<void> {\n return (await this.service()).delete(params);\n }\n\n async exists(params: SchedulerService.ExistsParams): Promise<boolean> {\n return (await this.service()).exists(params);\n }\n}\n\nexport const createLazySchedulerService = (\n getClient: GetSchedulerClient\n): SchedulerService.Interface => new LazySchedulerServiceImpl(getClient);\n"],"names":["LazySchedulerServiceImpl","getClient","manifest","getManifest","VoidSchedulerService","EventBridgeSchedulerService","params","createLazySchedulerService"],"mappings":";;;AAuBA,MAAMA;IACF,YAAoBC,SAA6B,CAAE;aAA/BA,SAAS,GAATA;IAAgC;IAEpD,MAAc,UAA+C;QACzD,MAAMC,WAAW,MAAMC;QAEvB,IAAID,SAAS,KAAK,EACd,OAAO,IAAIE;QAGf,OAAO,IAAIC,4BAA4B,IAAI,CAAC,SAAS,EAAE;YACnD,WAAWH,SAAS,IAAI,CAAC,SAAS;YAClC,SAASA,SAAS,IAAI,CAAC,OAAO;QAClC;IACJ;IAEA,MAAM,OAAOI,MAAqC,EAAiB;QAC/D,OAAQ,OAAM,IAAI,CAAC,OAAO,EAAC,EAAG,MAAM,CAACA;IACzC;IAEA,MAAM,OAAOA,MAAqC,EAAiB;QAC/D,OAAQ,OAAM,IAAI,CAAC,OAAO,EAAC,EAAG,MAAM,CAACA;IACzC;IAEA,MAAM,OAAOA,MAAqC,EAAiB;QAC/D,OAAQ,OAAM,IAAI,CAAC,OAAO,EAAC,EAAG,MAAM,CAACA;IACzC;IAEA,MAAM,OAAOA,MAAqC,EAAoB;QAClE,OAAQ,OAAM,IAAI,CAAC,OAAO,EAAC,EAAG,MAAM,CAACA;IACzC;AACJ;AAEO,MAAMC,6BAA6B,CACtCN,YAC6B,IAAID,yBAAyBC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-scheduler-aws",
3
- "version": "0.0.0-unstable.0d717d18dd",
3
+ "version": "0.0.0-unstable.5387e5f7c8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -18,33 +18,32 @@
18
18
  "description": "AWS EventBridge implementation for the Webiny action scheduler.",
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@webiny/api": "0.0.0-unstable.0d717d18dd",
22
- "@webiny/api-core": "0.0.0-unstable.0d717d18dd",
23
- "@webiny/api-headless-cms": "0.0.0-unstable.0d717d18dd",
24
- "@webiny/api-scheduler": "0.0.0-unstable.0d717d18dd",
25
- "@webiny/aws-sdk": "0.0.0-unstable.0d717d18dd",
26
- "@webiny/error": "0.0.0-unstable.0d717d18dd",
27
- "@webiny/utils": "0.0.0-unstable.0d717d18dd",
21
+ "@webiny/api": "0.0.0-unstable.5387e5f7c8",
22
+ "@webiny/api-core": "0.0.0-unstable.5387e5f7c8",
23
+ "@webiny/api-headless-cms": "0.0.0-unstable.5387e5f7c8",
24
+ "@webiny/api-scheduler": "0.0.0-unstable.5387e5f7c8",
25
+ "@webiny/aws-sdk": "0.0.0-unstable.5387e5f7c8",
26
+ "@webiny/error": "0.0.0-unstable.5387e5f7c8",
27
+ "@webiny/utils": "0.0.0-unstable.5387e5f7c8",
28
28
  "zod": "4.4.3"
29
29
  },
30
30
  "devDependencies": {
31
- "@webiny/api-core": "0.0.0-unstable.0d717d18dd",
32
- "@webiny/api-core-testing": "0.0.0-unstable.0d717d18dd",
33
- "@webiny/api-graphql": "0.0.0-unstable.0d717d18dd",
34
- "@webiny/api-headless-cms": "0.0.0-unstable.0d717d18dd",
35
- "@webiny/build-tools": "0.0.0-unstable.0d717d18dd",
36
- "@webiny/db-dynamodb": "0.0.0-unstable.0d717d18dd",
37
- "@webiny/di": "1.0.2",
38
- "@webiny/event-handler-aws": "0.0.0-unstable.0d717d18dd",
39
- "@webiny/event-handler-core": "0.0.0-unstable.0d717d18dd",
40
- "@webiny/feature": "0.0.0-unstable.0d717d18dd",
41
- "@webiny/handler": "0.0.0-unstable.0d717d18dd",
42
- "@webiny/project-utils": "0.0.0-unstable.0d717d18dd",
43
- "@webiny/wcp": "0.0.0-unstable.0d717d18dd",
31
+ "@webiny/api-core": "0.0.0-unstable.5387e5f7c8",
32
+ "@webiny/api-core-testing": "0.0.0-unstable.5387e5f7c8",
33
+ "@webiny/api-graphql": "0.0.0-unstable.5387e5f7c8",
34
+ "@webiny/api-headless-cms": "0.0.0-unstable.5387e5f7c8",
35
+ "@webiny/build-tools": "0.0.0-unstable.5387e5f7c8",
36
+ "@webiny/db-dynamodb": "0.0.0-unstable.5387e5f7c8",
37
+ "@webiny/di": "2.0.0",
38
+ "@webiny/event-handler-aws": "0.0.0-unstable.5387e5f7c8",
39
+ "@webiny/event-handler-core": "0.0.0-unstable.5387e5f7c8",
40
+ "@webiny/feature": "0.0.0-unstable.5387e5f7c8",
41
+ "@webiny/handler": "0.0.0-unstable.5387e5f7c8",
42
+ "@webiny/wcp": "0.0.0-unstable.5387e5f7c8",
44
43
  "aws-sdk-client-mock": "4.1.0",
45
44
  "graphql": "16.14.2",
46
45
  "typescript": "7.0.2",
47
- "vitest": "4.1.10"
46
+ "vitest": "4.1.11"
48
47
  },
49
48
  "publishConfig": {
50
49
  "access": "public"