@actor-system/receptionist 0.0.1

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.
@@ -0,0 +1,8 @@
1
+ import { Behavior } from '@actor-system/core';
2
+ import { Command } from './command.js';
3
+
4
+ declare const behavior: {
5
+ <T>(): Behavior<Command<T>>;
6
+ };
7
+
8
+ export { behavior };
@@ -0,0 +1,13 @@
1
+ import { Behavior } from '@actor-system/core/internal';
2
+ import { Command } from './command.internal.js';
3
+ import { State } from './state.internal.js';
4
+
5
+ declare const behavior: {
6
+ /** @internal */
7
+ <T>(state: State): Behavior<Command.Internal<T>>;
8
+ /** @internal */
9
+ <T>(): Behavior<Command.Internal<T>>;
10
+ <T>(): Behavior<Command<T>>;
11
+ };
12
+
13
+ export { behavior };
@@ -0,0 +1,85 @@
1
+ import * as behaviors from '@actor-system/behaviors';
2
+ import { signal } from '@actor-system/core';
3
+ import { isCommand, $flushNotifications, $subscribe, $lookup, $unregister, $register, flushNotifications } from './command.js';
4
+ import { listing, unregistered, registered } from './reply.js';
5
+ import { create } from './state.js';
6
+
7
+ const behavior = (state = create()) => behaviors.setup(({ self, watch }) => {
8
+ const pendingNotifications = new Map();
9
+ const scheduleNotify = (key, subscriber) => {
10
+ if (state.subscribers(key).size === 0)
11
+ return;
12
+ let existing = pendingNotifications.get(key);
13
+ if (existing === "all")
14
+ return;
15
+ existing = existing ?? new Set();
16
+ existing.add(subscriber);
17
+ pendingNotifications.set(key, existing);
18
+ if (pendingNotifications.size === 1) {
19
+ self.tell(flushNotifications);
20
+ }
21
+ };
22
+ const scheduleNotifyAll = (key) => {
23
+ if (state.subscribers(key).size === 0)
24
+ return;
25
+ pendingNotifications.set(key, "all");
26
+ if (pendingNotifications.size === 1) {
27
+ self.tell(flushNotifications);
28
+ }
29
+ };
30
+ return behaviors
31
+ .receiveMessage((post) => {
32
+ if (!isCommand(post))
33
+ return behaviors.same;
34
+ switch (post.label) {
35
+ case $register: {
36
+ state.addActor(post.key, post.ref);
37
+ post.replyTo?.tell(registered(post.key, post.ref));
38
+ scheduleNotifyAll(post.key);
39
+ return behaviors.same;
40
+ }
41
+ case $unregister: {
42
+ if (state.removeActor(post.key, post.ref)) {
43
+ post.replyTo?.tell(unregistered(post.key, post.ref));
44
+ scheduleNotifyAll(post.key);
45
+ }
46
+ return behaviors.same;
47
+ }
48
+ case $lookup: {
49
+ post.replyTo.tell(listing(post.key, state.actors(post.key)));
50
+ return behaviors.same;
51
+ }
52
+ case $subscribe: {
53
+ watch(post.subscriber);
54
+ state.addSubscriber(post.key, post.subscriber);
55
+ scheduleNotify(post.key, post.subscriber);
56
+ return behaviors.same;
57
+ }
58
+ case $flushNotifications: {
59
+ for (const [serviceKey, subscribers] of pendingNotifications) {
60
+ const actors = state.actors(serviceKey);
61
+ const notifiedSubscribers = subscribers === "all"
62
+ ? state.subscribers(serviceKey)
63
+ : subscribers;
64
+ for (const subscriber of notifiedSubscribers) {
65
+ subscriber.tell(listing(serviceKey, actors));
66
+ }
67
+ }
68
+ pendingNotifications.clear();
69
+ return behaviors.same;
70
+ }
71
+ }
72
+ })
73
+ .receiveSignal((post) => {
74
+ switch (post.label) {
75
+ case signal.$terminated:
76
+ state.removeSubscriber(post.ref);
77
+ break;
78
+ case signal.$postStop:
79
+ state.clear();
80
+ break;
81
+ }
82
+ });
83
+ });
84
+
85
+ export { behavior };
@@ -0,0 +1,42 @@
1
+ import { ActorRef } from '@actor-system/core';
2
+ import { ServiceKey } from './service-key.js';
3
+ import { Letter } from '@actor-system/mail';
4
+ import { Registered, Unregistered, Listing } from './reply.js';
5
+
6
+ declare const $register = "@@receptionist.cmd.register";
7
+ interface Register<T = unknown> extends Letter<typeof $register> {
8
+ readonly ref: ActorRef<T>;
9
+ readonly key: ServiceKey<T>;
10
+ readonly replyTo?: ActorRef<Registered<T>>;
11
+ }
12
+ declare const register: <T = unknown>(key: ServiceKey<T>, ref: NoInfer<ActorRef<T>>) => Register<T>;
13
+ declare const isRegister: <T>(message: unknown) => message is Register<T>;
14
+ declare const $unregister = "@@receptionist.cmd.unregister";
15
+ interface Unregister<T = unknown> extends Letter<typeof $unregister> {
16
+ readonly ref: ActorRef<T>;
17
+ readonly key: ServiceKey<T>;
18
+ readonly replyTo?: ActorRef<Unregistered<T>>;
19
+ }
20
+ declare const unregister: <T = unknown>(key: ServiceKey<T>, ref: NoInfer<ActorRef<T>>) => Unregister<T>;
21
+ declare const isUnregister: <T>(message: unknown) => message is Unregister<T>;
22
+ declare const $lookup = "@@receptionist.cmd.lookup";
23
+ interface Lookup<T = unknown> extends Letter<typeof $lookup> {
24
+ readonly replyTo: ActorRef<Listing<T>>;
25
+ readonly key: ServiceKey<T>;
26
+ }
27
+ declare const lookup: <T = unknown>(key: ServiceKey<T>, replyTo: NoInfer<ActorRef<Listing<T>>>) => Lookup<T>;
28
+ declare const isLookup: <T>(message: unknown) => message is Lookup<T>;
29
+ declare const $subscribe = "@@receptionist.cmd.subscribe";
30
+ interface Subscribe<T = unknown> extends Letter<typeof $subscribe> {
31
+ readonly subscriber: ActorRef<Listing<T>>;
32
+ readonly key: ServiceKey<T>;
33
+ }
34
+ declare const subscribe: <T = unknown>(key: ServiceKey<T>, subscriber: NoInfer<ActorRef<Listing<T>>>) => Subscribe<T>;
35
+ declare const isSubscribe: <T>(message: unknown) => message is Subscribe<T>;
36
+ type Command<T = unknown> = Register<T> | Unregister<T> | Lookup<T> | Subscribe<T>;
37
+ declare const isCommand: {
38
+ <T>(input: unknown): input is Command<T>;
39
+ };
40
+
41
+ export { $lookup, $register, $subscribe, $unregister, isCommand, isLookup, isRegister, isSubscribe, isUnregister, lookup, register, subscribe, unregister };
42
+ export type { Command, Lookup, Register, Subscribe, Unregister };
@@ -0,0 +1,58 @@
1
+ import { ActorRef } from '@actor-system/core/internal';
2
+ import { ServiceKey } from './service-key.internal.js';
3
+ import { Letter } from '@actor-system/mail/internal';
4
+ import { Registered, Unregistered, Listing } from './reply.internal.js';
5
+
6
+ declare const $register = "@@receptionist.cmd.register";
7
+ interface Register<T = unknown> extends Letter<typeof $register> {
8
+ readonly ref: ActorRef<T>;
9
+ readonly key: ServiceKey<T>;
10
+ readonly replyTo?: ActorRef<Registered<T>>;
11
+ }
12
+ declare const register: <T = unknown>(key: ServiceKey<T>, ref: NoInfer<ActorRef<T>>) => Register<T>;
13
+ declare const isRegister: <T>(message: unknown) => message is Register<T>;
14
+ declare const $unregister = "@@receptionist.cmd.unregister";
15
+ interface Unregister<T = unknown> extends Letter<typeof $unregister> {
16
+ readonly ref: ActorRef<T>;
17
+ readonly key: ServiceKey<T>;
18
+ readonly replyTo?: ActorRef<Unregistered<T>>;
19
+ }
20
+ declare const unregister: <T = unknown>(key: ServiceKey<T>, ref: NoInfer<ActorRef<T>>) => Unregister<T>;
21
+ declare const isUnregister: <T>(message: unknown) => message is Unregister<T>;
22
+ declare const $lookup = "@@receptionist.cmd.lookup";
23
+ interface Lookup<T = unknown> extends Letter<typeof $lookup> {
24
+ readonly replyTo: ActorRef<Listing<T>>;
25
+ readonly key: ServiceKey<T>;
26
+ }
27
+ declare const lookup: <T = unknown>(key: ServiceKey<T>, replyTo: NoInfer<ActorRef<Listing<T>>>) => Lookup<T>;
28
+ declare const isLookup: <T>(message: unknown) => message is Lookup<T>;
29
+ declare const $subscribe = "@@receptionist.cmd.subscribe";
30
+ interface Subscribe<T = unknown> extends Letter<typeof $subscribe> {
31
+ readonly subscriber: ActorRef<Listing<T>>;
32
+ readonly key: ServiceKey<T>;
33
+ }
34
+ declare const subscribe: <T = unknown>(key: ServiceKey<T>, subscriber: NoInfer<ActorRef<Listing<T>>>) => Subscribe<T>;
35
+ declare const isSubscribe: <T>(message: unknown) => message is Subscribe<T>;
36
+ /** @internal */
37
+ declare const $flushNotifications = "@@receptionist.cmd.flush-notifications";
38
+ /** @internal */
39
+ interface FlushNotifications extends Letter<typeof $flushNotifications> {
40
+ }
41
+ /** @internal */
42
+ declare const flushNotifications: FlushNotifications;
43
+ /** @internal */
44
+ declare const isFlushNotifications: (message: unknown) => message is FlushNotifications;
45
+ type Command<T = unknown> = Register<T> | Unregister<T> | Lookup<T> | Subscribe<T>;
46
+ /** @internal */
47
+ declare namespace Command {
48
+ /** @internal */
49
+ type Internal<T = unknown> = Register<T> | Unregister<T> | Lookup<T> | Subscribe<T> | FlushNotifications;
50
+ }
51
+ declare const isCommand: {
52
+ /** @internal */
53
+ <T>(input: unknown): input is Command.Internal<T>;
54
+ <T>(input: unknown): input is Command<T>;
55
+ };
56
+
57
+ export { $flushNotifications, $lookup, $register, $subscribe, $unregister, Command, flushNotifications, isCommand, isFlushNotifications, isLookup, isRegister, isSubscribe, isUnregister, lookup, register, subscribe, unregister };
58
+ export type { FlushNotifications, Lookup, Register, Subscribe, Unregister };
@@ -0,0 +1,25 @@
1
+ import { letterGuard, isLetter } from '@actor-system/mail';
2
+
3
+ const $register = "@@receptionist.cmd.register";
4
+ const register = (key, ref) => ({ label: $register, key, ref });
5
+ const isRegister = letterGuard($register);
6
+ const $unregister = "@@receptionist.cmd.unregister";
7
+ const unregister = (key, ref) => ({ label: $unregister, key, ref });
8
+ const isUnregister = letterGuard($unregister);
9
+ const $lookup = "@@receptionist.cmd.lookup";
10
+ const lookup = (key, replyTo) => ({ label: $lookup, key, replyTo });
11
+ const isLookup = letterGuard($lookup);
12
+ const $subscribe = "@@receptionist.cmd.subscribe";
13
+ const subscribe = (key, subscriber) => ({ label: $subscribe, key, subscriber });
14
+ const isSubscribe = letterGuard($subscribe);
15
+ /** @internal */
16
+ const $flushNotifications = "@@receptionist.cmd.flush-notifications";
17
+ /** @internal */
18
+ const flushNotifications = {
19
+ label: $flushNotifications,
20
+ };
21
+ /** @internal */
22
+ const isFlushNotifications = letterGuard($flushNotifications);
23
+ const isCommand = (input) => isLetter(input, $lookup, $register, $subscribe, $unregister, $flushNotifications);
24
+
25
+ export { $flushNotifications, $lookup, $register, $subscribe, $unregister, flushNotifications, isCommand, isFlushNotifications, isLookup, isRegister, isSubscribe, isUnregister, lookup, register, subscribe, unregister };
@@ -0,0 +1,8 @@
1
+ export { behavior } from './behavior.js';
2
+ import * as command_d from './command.js';
3
+ export { command_d as cmd };
4
+ export { Command } from './command.js';
5
+ import * as reply_d from './reply.js';
6
+ export { reply_d as reply };
7
+ export { Listing, Registered, Unregistered } from './reply.js';
8
+ export { ServiceKey } from './service-key.js';
@@ -0,0 +1,11 @@
1
+ export { behavior } from './behavior.internal.js';
2
+ import * as command_d from './command.internal.js';
3
+ export { command_d as cmd };
4
+ export { Command } from './command.internal.js';
5
+ import * as reply_d from './reply.internal.js';
6
+ export { reply_d as reply };
7
+ export { Listing, Registered, Unregistered } from './reply.internal.js';
8
+ export { ServiceKey } from './service-key.internal.js';
9
+ import * as state_d from './state.internal.js';
10
+ export { state_d as state };
11
+ export { State } from './state.internal.js';
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { behavior } from './behavior.js';
2
+ import * as command from './command.js';
3
+ export { command as cmd };
4
+ import * as reply from './reply.js';
5
+ export { reply };
6
+ export { ServiceKey } from './service-key.js';
7
+ import * as state from './state.js';
8
+ export { state };
@@ -0,0 +1,28 @@
1
+ import { ActorRef } from '@actor-system/core';
2
+ import { Letter } from '@actor-system/mail';
3
+ import { ServiceKey } from './service-key.js';
4
+
5
+ declare const $listing = "@@receptionist.reply.listing";
6
+ declare const $registered = "@@receptionist.reply.registered";
7
+ declare const $unregistered = "@@receptionist.reply.unregistered";
8
+ interface Listing<T = unknown> extends Letter<typeof $listing> {
9
+ readonly refs: ReadonlySet<ActorRef<T>>;
10
+ readonly key: ServiceKey<T>;
11
+ }
12
+ interface Registered<T = unknown> extends Letter<typeof $registered> {
13
+ readonly ref: ActorRef<T>;
14
+ readonly key: ServiceKey<T>;
15
+ }
16
+ interface Unregistered<T = unknown> extends Letter<typeof $unregistered> {
17
+ readonly ref: ActorRef<T>;
18
+ readonly key: ServiceKey<T>;
19
+ }
20
+ declare const listing: <T = unknown>(key: ServiceKey<T>, refs: ReadonlySet<ActorRef<T>>) => Listing<T>;
21
+ declare const registered: <T = unknown>(key: ServiceKey<T>, ref: ActorRef<T>) => Registered<T>;
22
+ declare const unregistered: <T = unknown>(key: ServiceKey<T>, ref: ActorRef<T>) => Unregistered<T>;
23
+ declare const isListing: <T = unknown>(msg: unknown) => msg is Listing<T>;
24
+ declare const isRegistered: <T = unknown>(msg: unknown) => msg is Registered<T>;
25
+ declare const isUnregistered: <T = unknown>(msg: unknown) => msg is Unregistered<T>;
26
+
27
+ export { $listing, $registered, $unregistered, isListing, isRegistered, isUnregistered, listing, registered, unregistered };
28
+ export type { Listing, Registered, Unregistered };
@@ -0,0 +1,28 @@
1
+ import { ActorRef } from '@actor-system/core/internal';
2
+ import { Letter } from '@actor-system/mail/internal';
3
+ import { ServiceKey } from './service-key.internal.js';
4
+
5
+ declare const $listing = "@@receptionist.reply.listing";
6
+ declare const $registered = "@@receptionist.reply.registered";
7
+ declare const $unregistered = "@@receptionist.reply.unregistered";
8
+ interface Listing<T = unknown> extends Letter<typeof $listing> {
9
+ readonly refs: ReadonlySet<ActorRef<T>>;
10
+ readonly key: ServiceKey<T>;
11
+ }
12
+ interface Registered<T = unknown> extends Letter<typeof $registered> {
13
+ readonly ref: ActorRef<T>;
14
+ readonly key: ServiceKey<T>;
15
+ }
16
+ interface Unregistered<T = unknown> extends Letter<typeof $unregistered> {
17
+ readonly ref: ActorRef<T>;
18
+ readonly key: ServiceKey<T>;
19
+ }
20
+ declare const listing: <T = unknown>(key: ServiceKey<T>, refs: ReadonlySet<ActorRef<T>>) => Listing<T>;
21
+ declare const registered: <T = unknown>(key: ServiceKey<T>, ref: ActorRef<T>) => Registered<T>;
22
+ declare const unregistered: <T = unknown>(key: ServiceKey<T>, ref: ActorRef<T>) => Unregistered<T>;
23
+ declare const isListing: <T = unknown>(msg: unknown) => msg is Listing<T>;
24
+ declare const isRegistered: <T = unknown>(msg: unknown) => msg is Registered<T>;
25
+ declare const isUnregistered: <T = unknown>(msg: unknown) => msg is Unregistered<T>;
26
+
27
+ export { $listing, $registered, $unregistered, isListing, isRegistered, isUnregistered, listing, registered, unregistered };
28
+ export type { Listing, Registered, Unregistered };
package/dist/reply.js ADDED
@@ -0,0 +1,13 @@
1
+ import { letterGuard } from '@actor-system/mail';
2
+
3
+ const $listing = "@@receptionist.reply.listing";
4
+ const $registered = "@@receptionist.reply.registered";
5
+ const $unregistered = "@@receptionist.reply.unregistered";
6
+ const listing = (key, refs) => ({ label: $listing, key, refs });
7
+ const registered = (key, ref) => ({ label: $registered, key, ref });
8
+ const unregistered = (key, ref) => ({ label: $unregistered, key, ref });
9
+ const isListing = letterGuard($listing);
10
+ const isRegistered = letterGuard($registered);
11
+ const isUnregistered = letterGuard($unregistered);
12
+
13
+ export { $listing, $registered, $unregistered, isListing, isRegistered, isUnregistered, listing, registered, unregistered };
@@ -0,0 +1,8 @@
1
+ import { $type } from '@actor-system/core';
2
+
3
+ type ServiceKey<T = unknown> = string & {
4
+ [$type]: T;
5
+ };
6
+ declare const ServiceKey: <T = unknown>(key: string) => ServiceKey<T>;
7
+
8
+ export { ServiceKey };
@@ -0,0 +1,8 @@
1
+ import { $type } from '@actor-system/core/internal';
2
+
3
+ type ServiceKey<T = unknown> = string & {
4
+ [$type]: T;
5
+ };
6
+ declare const ServiceKey: <T = unknown>(key: string) => ServiceKey<T>;
7
+
8
+ export { ServiceKey };
@@ -0,0 +1,5 @@
1
+ import '@actor-system/core';
2
+
3
+ const ServiceKey = (key) => key;
4
+
5
+ export { ServiceKey };
@@ -0,0 +1,21 @@
1
+ import { ActorRef } from '@actor-system/core/internal';
2
+ import { ServiceKey } from './service-key.internal.js';
3
+ import { Listing } from './reply.internal.js';
4
+
5
+ interface State {
6
+ keys(): MapIterator<ServiceKey>;
7
+ subscribers<T>(key: ServiceKey<T>): ReadonlySet<ActorRef<Listing<T>>>;
8
+ actors<T>(key: ServiceKey<T>): ReadonlySet<ActorRef<T>>;
9
+ addSubscriber<T>(key: ServiceKey<T>, ref: ActorRef<Listing<T>>): void;
10
+ removeSubscriber<T>(ref: ActorRef<Listing<T>>): boolean;
11
+ addActor<T>(key: ServiceKey<T>, ref: ActorRef<T>): void;
12
+ removeActor<T>(key: ServiceKey<T>, ref: ActorRef<T>): boolean;
13
+ apply(nextRegistry: ReadonlyRegistry): Set<ServiceKey>;
14
+ clear(): void;
15
+ }
16
+ type Registry = Map<ServiceKey, Set<ActorRef>>;
17
+ type ReadonlyRegistry = ReadonlyMap<ServiceKey, ReadonlySet<ActorRef>>;
18
+ declare const create: (registry?: Registry) => State;
19
+
20
+ export { create };
21
+ export type { ReadonlyRegistry, Registry, State };
package/dist/state.js ADDED
@@ -0,0 +1,102 @@
1
+ const create = (registry = new Map()) => {
2
+ const subscriberByService = new Map();
3
+ return {
4
+ clear() {
5
+ registry.clear();
6
+ subscriberByService.clear();
7
+ },
8
+ apply(nextRegistry) {
9
+ const changedKeys = new Set();
10
+ // remove actors that are not in the next registry
11
+ for (const [key, actors] of registry) {
12
+ const nextActors = nextRegistry.get(key);
13
+ if (!nextActors) {
14
+ // all actors removed
15
+ registry.delete(key);
16
+ changedKeys.add(key);
17
+ continue;
18
+ }
19
+ for (const actor of actors) {
20
+ if (!nextActors.has(actor)) {
21
+ actors.delete(actor);
22
+ changedKeys.add(key);
23
+ }
24
+ }
25
+ if (actors.size === 0) {
26
+ registry.delete(key);
27
+ }
28
+ }
29
+ // add new actors from the next registry
30
+ for (const [key, nextActors] of nextRegistry) {
31
+ let actors = registry.get(key);
32
+ if (!actors) {
33
+ actors = new Set();
34
+ registry.set(key, actors);
35
+ changedKeys.add(key);
36
+ }
37
+ for (const actor of nextActors) {
38
+ if (!actors.has(actor)) {
39
+ actors.add(actor);
40
+ changedKeys.add(key);
41
+ }
42
+ }
43
+ }
44
+ return changedKeys;
45
+ },
46
+ keys() {
47
+ return registry.keys();
48
+ },
49
+ subscribers(key) {
50
+ let subs = subscriberByService.get(key);
51
+ if (!subs) {
52
+ subs = new Set();
53
+ subscriberByService.set(key, subs);
54
+ }
55
+ return subs;
56
+ },
57
+ actors(key) {
58
+ return new Set(registry.get(key));
59
+ },
60
+ addSubscriber(key, ref) {
61
+ let set = subscriberByService.get(key);
62
+ if (!set) {
63
+ set = new Set();
64
+ subscriberByService.set(key, set);
65
+ }
66
+ set.add(ref);
67
+ },
68
+ removeSubscriber(ref) {
69
+ let existed = false;
70
+ for (const key of this.keys()) {
71
+ const set = subscriberByService.get(key);
72
+ if (!set)
73
+ continue;
74
+ existed ||= set.delete(ref);
75
+ if (set.size === 0) {
76
+ subscriberByService.delete(key);
77
+ }
78
+ }
79
+ return existed;
80
+ },
81
+ addActor(key, ref) {
82
+ let set = registry.get(key);
83
+ if (!set) {
84
+ set = new Set();
85
+ registry.set(key, set);
86
+ }
87
+ set.add(ref);
88
+ },
89
+ removeActor(key, ref) {
90
+ const set = registry.get(key);
91
+ if (!set)
92
+ return false;
93
+ const existed = set.delete(ref);
94
+ if (set.size === 0) {
95
+ registry.delete(key);
96
+ }
97
+ return existed;
98
+ },
99
+ };
100
+ };
101
+
102
+ export { create };
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@actor-system/receptionist",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "scripts": {
6
+ "type-check": "tsc -b src",
7
+ "lint": "eslint src",
8
+ "lint:fix": "eslint src --fix",
9
+ "publint": "publint",
10
+ "build:tsc:internal": "tsc -b src/tsconfig.lib.json",
11
+ "build:tsc:trimmed": "tsc -b src/tsconfig.lib.trimmed.json",
12
+ "build:rollup": "rollup -c node:config/rollup-config"
13
+ },
14
+ "types": "./dist/index.d.ts",
15
+ "module": "./dist/index.js",
16
+ "main": "./dist/index.js",
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ },
25
+ "./command": {
26
+ "types": "./dist/command.d.ts",
27
+ "import": "./dist/command.js"
28
+ },
29
+ "./reply": {
30
+ "types": "./dist/reply.d.ts",
31
+ "import": "./dist/reply.js"
32
+ },
33
+ "./internal": {
34
+ "types": "./dist/index.internal.d.ts",
35
+ "import": "./dist/index.js"
36
+ },
37
+ "./command/internal": {
38
+ "types": "./dist/command.internal.d.ts",
39
+ "import": "./dist/command.js"
40
+ },
41
+ "./reply/internal": {
42
+ "types": "./dist/reply.internal.d.ts",
43
+ "import": "./dist/reply.js"
44
+ },
45
+ "./state/internal": {
46
+ "types": "./dist/state.internal.d.ts",
47
+ "import": "./dist/state.js"
48
+ },
49
+ "./package.json": "./package.json"
50
+ },
51
+ "bundleDependencies": [
52
+ "@actor-system/shared"
53
+ ],
54
+ "dependencies": {
55
+ "@actor-system/behaviors": "0.0.1",
56
+ "@actor-system/core": "0.0.1",
57
+ "@actor-system/mail": "0.0.1"
58
+ },
59
+ "devDependencies": {
60
+ "@actor-system/testing": "0.0.1",
61
+ "@actor-system/shared": "0.0.1",
62
+ "config": "^1.0.0"
63
+ }
64
+ }