aether-wv 0.0.0-stage → 1.0.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 (106) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +313 -2
  3. package/bin/aetherc.js +4 -0
  4. package/dist/index.d.ts +5 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +5 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/packages/client/src/client.d.ts +26 -0
  9. package/dist/packages/client/src/client.d.ts.map +1 -0
  10. package/dist/packages/client/src/client.js +58 -0
  11. package/dist/packages/client/src/client.js.map +1 -0
  12. package/dist/packages/client/src/index.d.ts +8 -0
  13. package/dist/packages/client/src/index.d.ts.map +1 -0
  14. package/dist/packages/client/src/index.js +8 -0
  15. package/dist/packages/client/src/index.js.map +1 -0
  16. package/dist/packages/client/src/transports/android.d.ts +10 -0
  17. package/dist/packages/client/src/transports/android.d.ts.map +1 -0
  18. package/dist/packages/client/src/transports/android.js +38 -0
  19. package/dist/packages/client/src/transports/android.js.map +1 -0
  20. package/dist/packages/client/src/transports/electron.d.ts +39 -0
  21. package/dist/packages/client/src/transports/electron.d.ts.map +1 -0
  22. package/dist/packages/client/src/transports/electron.js +51 -0
  23. package/dist/packages/client/src/transports/electron.js.map +1 -0
  24. package/dist/packages/client/src/transports/ios.d.ts +9 -0
  25. package/dist/packages/client/src/transports/ios.d.ts.map +1 -0
  26. package/dist/packages/client/src/transports/ios.js +37 -0
  27. package/dist/packages/client/src/transports/ios.js.map +1 -0
  28. package/dist/packages/client/src/transports/memory.d.ts +10 -0
  29. package/dist/packages/client/src/transports/memory.d.ts.map +1 -0
  30. package/dist/packages/client/src/transports/memory.js +29 -0
  31. package/dist/packages/client/src/transports/memory.js.map +1 -0
  32. package/dist/packages/client/src/transports/transport.d.ts +3 -0
  33. package/dist/packages/client/src/transports/transport.d.ts.map +1 -0
  34. package/dist/packages/client/src/transports/transport.js +2 -0
  35. package/dist/packages/client/src/transports/transport.js.map +1 -0
  36. package/dist/packages/client/src/transports/webview2.d.ts +25 -0
  37. package/dist/packages/client/src/transports/webview2.d.ts.map +1 -0
  38. package/dist/packages/client/src/transports/webview2.js +45 -0
  39. package/dist/packages/client/src/transports/webview2.js.map +1 -0
  40. package/dist/packages/compiler/src/ast.d.ts +27 -0
  41. package/dist/packages/compiler/src/ast.d.ts.map +1 -0
  42. package/dist/packages/compiler/src/ast.js +2 -0
  43. package/dist/packages/compiler/src/ast.js.map +1 -0
  44. package/dist/packages/compiler/src/cli.d.ts +2 -0
  45. package/dist/packages/compiler/src/cli.d.ts.map +1 -0
  46. package/dist/packages/compiler/src/cli.js +68 -0
  47. package/dist/packages/compiler/src/cli.js.map +1 -0
  48. package/dist/packages/compiler/src/codegen-kotlin.d.ts +3 -0
  49. package/dist/packages/compiler/src/codegen-kotlin.d.ts.map +1 -0
  50. package/dist/packages/compiler/src/codegen-kotlin.js +119 -0
  51. package/dist/packages/compiler/src/codegen-kotlin.js.map +1 -0
  52. package/dist/packages/compiler/src/codegen-swift.d.ts +3 -0
  53. package/dist/packages/compiler/src/codegen-swift.d.ts.map +1 -0
  54. package/dist/packages/compiler/src/codegen-swift.js +129 -0
  55. package/dist/packages/compiler/src/codegen-swift.js.map +1 -0
  56. package/dist/packages/compiler/src/codegen-ts.d.ts +3 -0
  57. package/dist/packages/compiler/src/codegen-ts.d.ts.map +1 -0
  58. package/dist/packages/compiler/src/codegen-ts.js +121 -0
  59. package/dist/packages/compiler/src/codegen-ts.js.map +1 -0
  60. package/dist/packages/compiler/src/index.d.ts +7 -0
  61. package/dist/packages/compiler/src/index.d.ts.map +1 -0
  62. package/dist/packages/compiler/src/index.js +7 -0
  63. package/dist/packages/compiler/src/index.js.map +1 -0
  64. package/dist/packages/compiler/src/parser.d.ts +3 -0
  65. package/dist/packages/compiler/src/parser.d.ts.map +1 -0
  66. package/dist/packages/compiler/src/parser.js +80 -0
  67. package/dist/packages/compiler/src/parser.js.map +1 -0
  68. package/dist/packages/core/src/index.d.ts +7 -0
  69. package/dist/packages/core/src/index.d.ts.map +1 -0
  70. package/dist/packages/core/src/index.js +7 -0
  71. package/dist/packages/core/src/index.js.map +1 -0
  72. package/dist/packages/core/src/multiplexer/backpressure.d.ts +41 -0
  73. package/dist/packages/core/src/multiplexer/backpressure.d.ts.map +1 -0
  74. package/dist/packages/core/src/multiplexer/backpressure.js +80 -0
  75. package/dist/packages/core/src/multiplexer/backpressure.js.map +1 -0
  76. package/dist/packages/core/src/multiplexer/multiplexer.d.ts +36 -0
  77. package/dist/packages/core/src/multiplexer/multiplexer.d.ts.map +1 -0
  78. package/dist/packages/core/src/multiplexer/multiplexer.js +238 -0
  79. package/dist/packages/core/src/multiplexer/multiplexer.js.map +1 -0
  80. package/dist/packages/core/src/protocol/frames.d.ts +46 -0
  81. package/dist/packages/core/src/protocol/frames.d.ts.map +1 -0
  82. package/dist/packages/core/src/protocol/frames.js +89 -0
  83. package/dist/packages/core/src/protocol/frames.js.map +1 -0
  84. package/dist/packages/core/src/protocol/serializer.d.ts +38 -0
  85. package/dist/packages/core/src/protocol/serializer.d.ts.map +1 -0
  86. package/dist/packages/core/src/protocol/serializer.js +145 -0
  87. package/dist/packages/core/src/protocol/serializer.js.map +1 -0
  88. package/dist/packages/core/src/security/capability.d.ts +18 -0
  89. package/dist/packages/core/src/security/capability.d.ts.map +1 -0
  90. package/dist/packages/core/src/security/capability.js +56 -0
  91. package/dist/packages/core/src/security/capability.js.map +1 -0
  92. package/dist/packages/core/src/session/session.d.ts +29 -0
  93. package/dist/packages/core/src/session/session.d.ts.map +1 -0
  94. package/dist/packages/core/src/session/session.js +52 -0
  95. package/dist/packages/core/src/session/session.js.map +1 -0
  96. package/dist/packages/native-host/src/host.d.ts +30 -0
  97. package/dist/packages/native-host/src/host.d.ts.map +1 -0
  98. package/dist/packages/native-host/src/host.js +232 -0
  99. package/dist/packages/native-host/src/host.js.map +1 -0
  100. package/dist/packages/native-host/src/index.d.ts +2 -0
  101. package/dist/packages/native-host/src/index.d.ts.map +1 -0
  102. package/dist/packages/native-host/src/index.js +2 -0
  103. package/dist/packages/native-host/src/index.js.map +1 -0
  104. package/package.json +37 -4
  105. package/packages/platform-templates/android/AetherNativeDriver.kt +57 -0
  106. package/packages/platform-templates/ios/AetherNativeDriver.swift +78 -0
@@ -0,0 +1,3 @@
1
+ import { SchemaAST } from './ast.js';
2
+ export declare function generateSwift(ast: SchemaAST): string;
3
+ //# sourceMappingURL=codegen-swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-swift.d.ts","sourceRoot":"","sources":["../../../../packages/compiler/src/codegen-swift.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AA4CtD,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CA6FpD"}
@@ -0,0 +1,129 @@
1
+ function mapSwiftType(type) {
2
+ switch (type) {
3
+ case 'string': return 'String';
4
+ case 'int32': return 'Int32';
5
+ case 'uint32': return 'UInt32';
6
+ case 'int64': return 'Int64';
7
+ case 'float': return 'Float';
8
+ case 'double': return 'Double';
9
+ case 'bool': return 'Bool';
10
+ case 'bytes': return 'Data';
11
+ default: return type;
12
+ }
13
+ }
14
+ function swiftWriterCall(f, accessor) {
15
+ switch (f.type) {
16
+ case 'string': return `w.writeString(${accessor})`;
17
+ case 'int32': return `w.writeInt32(${accessor})`;
18
+ case 'uint32': return `w.writeUInt32(${accessor})`;
19
+ case 'int64': return `w.writeInt64(${accessor})`;
20
+ case 'float': return `w.writeFloat(${accessor})`;
21
+ case 'double': return `w.writeDouble(${accessor})`;
22
+ case 'bool': return `w.writeBool(${accessor})`;
23
+ case 'bytes': return `w.writeBytes(${accessor})`;
24
+ default: return `w.writeBytes(encode${f.type}(${accessor}))`;
25
+ }
26
+ }
27
+ function swiftReaderCall(f) {
28
+ switch (f.type) {
29
+ case 'string': return `try r.readString()`;
30
+ case 'int32': return `try r.readInt32()`;
31
+ case 'uint32': return `try r.readUInt32()`;
32
+ case 'int64': return `try r.readInt64()`;
33
+ case 'float': return `try r.readFloat()`;
34
+ case 'double': return `try r.readDouble()`;
35
+ case 'bool': return `try r.readBool()`;
36
+ case 'bytes': return `try r.readBytes()`;
37
+ default: return `try decode${f.type}(r.readBytes())`;
38
+ }
39
+ }
40
+ export function generateSwift(ast) {
41
+ const out = [];
42
+ out.push(`// Generated by Aether-WV Compiler (aetherc). DO NOT EDIT.`);
43
+ out.push(`import Foundation`);
44
+ out.push(`import AetherWV\n`);
45
+ // ── Messages ────────────────────────────────────────────────────────────
46
+ for (const msg of ast.messages) {
47
+ // Struct
48
+ out.push(`public struct ${msg.name}: Sendable, Equatable {`);
49
+ for (const f of msg.fields) {
50
+ out.push(` public var ${f.name}: ${mapSwiftType(f.type)}`);
51
+ }
52
+ out.push(`\n public init(${msg.fields.map(f => `${f.name}: ${mapSwiftType(f.type)}`).join(', ')}) {`);
53
+ for (const f of msg.fields) {
54
+ out.push(` self.${f.name} = ${f.name}`);
55
+ }
56
+ out.push(` }`);
57
+ out.push(`}\n`);
58
+ // Encoder
59
+ out.push(`public func encode${msg.name}(_ msg: ${msg.name}) -> Data {`);
60
+ out.push(` let w = AetherWriter()`);
61
+ for (const f of msg.fields) {
62
+ out.push(` ${swiftWriterCall(f, `msg.${f.name}`)}`);
63
+ }
64
+ out.push(` return w.finish()`);
65
+ out.push(`}\n`);
66
+ // Decoder
67
+ out.push(`public func decode${msg.name}(_ data: Data) throws -> ${msg.name} {`);
68
+ out.push(` let r = AetherReader(data)`);
69
+ out.push(` return ${msg.name}(`);
70
+ const decoderLines = msg.fields.map((f, i) => {
71
+ const comma = i < msg.fields.length - 1 ? ',' : '';
72
+ return ` ${f.name}: ${swiftReaderCall(f)}${comma}`;
73
+ });
74
+ out.push(...decoderLines);
75
+ out.push(` )`);
76
+ out.push(`}\n`);
77
+ }
78
+ // ── Service Protocols ────────────────────────────────────────────────────
79
+ for (const s of ast.services) {
80
+ const protocolName = s.name.endsWith('Service') ? `${s.name}Protocol` : `${s.name}ServiceProtocol`;
81
+ out.push(`public protocol ${protocolName}: Actor {`);
82
+ for (const m of s.methods) {
83
+ const mn = m.name.charAt(0).toLowerCase() + m.name.slice(1);
84
+ if (!m.isOutputStream) {
85
+ out.push(` func ${mn}(request: ${m.inputType}) async throws -> ${m.outputType}`);
86
+ }
87
+ else {
88
+ out.push(` func ${mn}(request: ${m.inputType}) -> AsyncThrowingStream<${m.outputType}, Error>`);
89
+ }
90
+ }
91
+ out.push(`}\n`);
92
+ // ── Typed Client Stub ──────────────────────────────────────────────────
93
+ const clientName = s.name.endsWith('Service') ? `${s.name}Client` : `${s.name}ServiceClient`;
94
+ out.push(`public final class ${clientName} {`);
95
+ out.push(` private let client: AetherClient`);
96
+ out.push(` private let token: String`);
97
+ out.push(` public init(client: AetherClient, token: String = "") {`);
98
+ out.push(` self.client = client`);
99
+ out.push(` self.token = token`);
100
+ out.push(` }`);
101
+ out.push(``);
102
+ for (const m of s.methods) {
103
+ const mn = m.name.charAt(0).toLowerCase() + m.name.slice(1);
104
+ if (!m.isOutputStream) {
105
+ out.push(` public func ${mn}(request: ${m.inputType}) async throws -> ${m.outputType} {`);
106
+ out.push(` let reqData = encode${m.inputType}(request)`);
107
+ out.push(` let resData = try await client.invoke(service: "${s.name}", method: "${m.name}", payload: reqData, token: token)`);
108
+ out.push(` return try decode${m.outputType}(resData)`);
109
+ out.push(` }`);
110
+ }
111
+ else {
112
+ out.push(` public func ${mn}(request: ${m.inputType}) -> AsyncThrowingStream<${m.outputType}, Error> {`);
113
+ out.push(` AsyncThrowingStream { continuation in`);
114
+ out.push(` let reqData = encode${m.inputType}(request)`);
115
+ out.push(` client.stream(service: "${s.name}", method: "${m.name}", payload: reqData, token: token) { chunk, done, error in`);
116
+ out.push(` if let error { continuation.finish(throwing: error); return }`);
117
+ out.push(` if let chunk, let val = try? decode${m.outputType}(chunk) { continuation.yield(val) }`);
118
+ out.push(` if done { continuation.finish() }`);
119
+ out.push(` }`);
120
+ out.push(` }`);
121
+ out.push(` }`);
122
+ }
123
+ out.push(``);
124
+ }
125
+ out.push(`}\n`);
126
+ }
127
+ return out.join('\n');
128
+ }
129
+ //# sourceMappingURL=codegen-swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-swift.js","sourceRoot":"","sources":["../../../../packages/compiler/src/codegen-swift.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SchemaAST } from './ast.js';
2
+ export declare function generateTypeScript(ast: SchemaAST): string;
3
+ //# sourceMappingURL=codegen-ts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-ts.d.ts","sourceRoot":"","sources":["../../../../packages/compiler/src/codegen-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAC;AAoEtD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CA8DzD"}
@@ -0,0 +1,121 @@
1
+ function mapTsType(type) {
2
+ switch (type) {
3
+ case 'string':
4
+ return 'string';
5
+ case 'int32':
6
+ case 'uint32':
7
+ case 'float':
8
+ case 'double':
9
+ return 'number';
10
+ case 'int64':
11
+ return 'bigint';
12
+ case 'bool':
13
+ return 'boolean';
14
+ case 'bytes':
15
+ return 'Uint8Array';
16
+ default:
17
+ return type; // nested message
18
+ }
19
+ }
20
+ function generateWriterCall(field, accessor) {
21
+ switch (field.type) {
22
+ case 'string':
23
+ return `w.writeString(${accessor});`;
24
+ case 'int32':
25
+ return `w.writeInt32(${accessor});`;
26
+ case 'uint32':
27
+ return `w.writeUint32(${accessor});`;
28
+ case 'float':
29
+ return `w.writeFloat32(${accessor});`;
30
+ case 'double':
31
+ return `w.writeFloat64(${accessor});`;
32
+ case 'int64':
33
+ return `w.writeBigInt64(${accessor});`;
34
+ case 'bool':
35
+ return `w.writeBoolean(${accessor});`;
36
+ case 'bytes':
37
+ return `w.writeBytes(${accessor});`;
38
+ default:
39
+ return `w.writeBytes(encode${field.type}(${accessor}));`;
40
+ }
41
+ }
42
+ function generateReaderCall(field) {
43
+ switch (field.type) {
44
+ case 'string':
45
+ return `r.readString()`;
46
+ case 'int32':
47
+ return `r.readInt32()`;
48
+ case 'uint32':
49
+ return `r.readUint32()`;
50
+ case 'float':
51
+ return `r.readFloat32()`;
52
+ case 'double':
53
+ return `r.readFloat64()`;
54
+ case 'int64':
55
+ return `r.readBigInt64()`;
56
+ case 'bool':
57
+ return `r.readBoolean()`;
58
+ case 'bytes':
59
+ return `r.readBytes()`;
60
+ default:
61
+ return `decode${field.type}(r.readBytes())`;
62
+ }
63
+ }
64
+ export function generateTypeScript(ast) {
65
+ const out = [];
66
+ out.push(`// Generated by Aether-WV Compiler (aetherc). DO NOT EDIT.`);
67
+ out.push(`import { BinaryWriter, BinaryReader, AetherClient } from 'aether-wv';\n`);
68
+ // Messages
69
+ for (const msg of ast.messages) {
70
+ out.push(`export interface ${msg.name} {`);
71
+ for (const f of msg.fields) {
72
+ out.push(` ${f.name}: ${mapTsType(f.type)};`);
73
+ }
74
+ out.push(`}\n`);
75
+ // Encoder
76
+ out.push(`export function encode${msg.name}(msg: ${msg.name}): Uint8Array {`);
77
+ out.push(` const w = new BinaryWriter();`);
78
+ for (const f of msg.fields) {
79
+ out.push(` ${generateWriterCall(f, `msg.${f.name}`)}`);
80
+ }
81
+ out.push(` return w.finish();`);
82
+ out.push(`}\n`);
83
+ // Decoder
84
+ out.push(`export function decode${msg.name}(bytes: Uint8Array): ${msg.name} {`);
85
+ out.push(` const r = new BinaryReader(bytes);`);
86
+ out.push(` return {`);
87
+ for (const f of msg.fields) {
88
+ out.push(` ${f.name}: ${generateReaderCall(f)},`);
89
+ }
90
+ out.push(` };`);
91
+ out.push(`}\n`);
92
+ }
93
+ // Services
94
+ for (const s of ast.services) {
95
+ out.push(`export class ${s.name}Client {`);
96
+ out.push(` constructor(private client: AetherClient, private token: string = '') {}\n`);
97
+ for (const m of s.methods) {
98
+ if (!m.isOutputStream) {
99
+ // Unary RPC
100
+ out.push(` async ${m.name.charAt(0).toLowerCase() + m.name.slice(1)}(request: ${m.inputType}): Promise<${m.outputType}> {`);
101
+ out.push(` const reqBytes = encode${m.inputType}(request);`);
102
+ out.push(` const resBytes = await this.client.invoke('${s.name}', '${m.name}', reqBytes, this.token);`);
103
+ out.push(` return decode${m.outputType}(resBytes);`);
104
+ out.push(` }\n`);
105
+ }
106
+ else {
107
+ // Reactive Stream
108
+ out.push(` async *${m.name.charAt(0).toLowerCase() + m.name.slice(1)}(request: ${m.inputType}, options?: { signal?: AbortSignal }): AsyncIterableIterator<${m.outputType}> {`);
109
+ out.push(` const reqBytes = encode${m.inputType}(request);`);
110
+ out.push(` const rawStream = this.client.stream('${s.name}', '${m.name}', reqBytes, this.token, options?.signal);`);
111
+ out.push(` for await (const chunk of rawStream) {`);
112
+ out.push(` yield decode${m.outputType}(chunk);`);
113
+ out.push(` }`);
114
+ out.push(` }\n`);
115
+ }
116
+ }
117
+ out.push(`}\n`);
118
+ }
119
+ return out.join('\n');
120
+ }
121
+ //# sourceMappingURL=codegen-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen-ts.js","sourceRoot":"","sources":["../../../../packages/compiler/src/codegen-ts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './ast.js';
2
+ export * from './parser.js';
3
+ export * from './codegen-ts.js';
4
+ export * from './codegen-swift.js';
5
+ export * from './codegen-kotlin.js';
6
+ export * from './cli.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/compiler/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './ast.js';
2
+ export * from './parser.js';
3
+ export * from './codegen-ts.js';
4
+ export * from './codegen-swift.js';
5
+ export * from './codegen-kotlin.js';
6
+ export * from './cli.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/compiler/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { SchemaAST } from './ast.js';
2
+ export declare function parseAetherSchema(content: string): SchemaAST;
3
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../packages/compiler/src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA2E,MAAM,UAAU,CAAC;AAE9G,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAyF5D"}
@@ -0,0 +1,80 @@
1
+ export function parseAetherSchema(content) {
2
+ const lines = content
3
+ .split('\n')
4
+ .map((l) => l.trim())
5
+ .filter((l) => l.length > 0 && !l.startsWith('//'));
6
+ let packageName = 'app';
7
+ const services = [];
8
+ const messages = [];
9
+ let currentService = null;
10
+ let currentMessage = null;
11
+ for (const line of lines) {
12
+ if (line.startsWith('syntax')) {
13
+ continue;
14
+ }
15
+ if (line.startsWith('package ')) {
16
+ const match = line.match(/^package\s+([\w\.]+);$/);
17
+ if (match)
18
+ packageName = match[1];
19
+ continue;
20
+ }
21
+ // Service start: service Name {
22
+ if (line.startsWith('service ')) {
23
+ const match = line.match(/^service\s+(\w+)\s*\{?$/);
24
+ if (match) {
25
+ currentService = { name: match[1], methods: [] };
26
+ services.push(currentService);
27
+ }
28
+ continue;
29
+ }
30
+ // Message start: message Name {
31
+ if (line.startsWith('message ')) {
32
+ const match = line.match(/^message\s+(\w+)\s*\{?$/);
33
+ if (match) {
34
+ currentMessage = { name: match[1], fields: [] };
35
+ messages.push(currentMessage);
36
+ }
37
+ continue;
38
+ }
39
+ // Block close: }
40
+ if (line === '}') {
41
+ currentService = null;
42
+ currentMessage = null;
43
+ continue;
44
+ }
45
+ // Inside service: rpc MethodName(Input) returns (stream Output);
46
+ if (currentService) {
47
+ const rpcMatch = line.match(/^rpc\s+(\w+)\s*\(\s*(stream\s+)?(\w+)\s*\)\s*returns\s*\(\s*(stream\s+)?(\w+)\s*\);?$/);
48
+ if (rpcMatch) {
49
+ const method = {
50
+ name: rpcMatch[1],
51
+ isInputStream: !!rpcMatch[2],
52
+ inputType: rpcMatch[3],
53
+ isOutputStream: !!rpcMatch[4],
54
+ outputType: rpcMatch[5],
55
+ };
56
+ currentService.methods.push(method);
57
+ }
58
+ continue;
59
+ }
60
+ // Inside message: type field_name = 1;
61
+ if (currentMessage) {
62
+ const fieldMatch = line.match(/^([\w\.]+)\s+(\w+)\s*=\s*(\d+);?$/);
63
+ if (fieldMatch) {
64
+ const field = {
65
+ type: fieldMatch[1],
66
+ name: fieldMatch[2],
67
+ tag: parseInt(fieldMatch[3], 10),
68
+ };
69
+ currentMessage.fields.push(field);
70
+ }
71
+ continue;
72
+ }
73
+ }
74
+ return {
75
+ packageName,
76
+ services,
77
+ messages,
78
+ };
79
+ }
80
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../packages/compiler/src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './protocol/frames.js';
2
+ export * from './protocol/serializer.js';
3
+ export * from './multiplexer/backpressure.js';
4
+ export * from './multiplexer/multiplexer.js';
5
+ export * from './session/session.js';
6
+ export * from './security/capability.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './protocol/frames.js';
2
+ export * from './protocol/serializer.js';
3
+ export * from './multiplexer/backpressure.js';
4
+ export * from './multiplexer/multiplexer.js';
5
+ export * from './session/session.js';
6
+ export * from './security/capability.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Aether-WV Credit-Based Flow Control Manager
3
+ * Implements sliding window credit management to prevent consumer overload and GC jank.
4
+ */
5
+ export interface FlowControlConfig {
6
+ initialCredits?: number;
7
+ ackBatchSize?: number;
8
+ }
9
+ export declare class StreamCreditController {
10
+ private config;
11
+ private credits;
12
+ private pendingAcks;
13
+ private readonly ackThreshold;
14
+ private waitResolvers;
15
+ constructor(config?: FlowControlConfig);
16
+ /** Current available credits for sending */
17
+ get availableCredits(): number;
18
+ /**
19
+ * Called by Producer before sending a frame.
20
+ * If credits <= 0, returns a Promise that resolves when a FLOW_ACK is received.
21
+ */
22
+ acquireCredit(): Promise<void>;
23
+ /**
24
+ * Called by Producer when FLOW_ACK is received from Consumer.
25
+ */
26
+ grantCredits(count: number): void;
27
+ /**
28
+ * Called by Consumer when a frame is processed.
29
+ * Returns positive number of credits to ACK if threshold reached, or 0 if buffered.
30
+ */
31
+ onFrameProcessed(): number;
32
+ /**
33
+ * Force flush any pending acks (e.g. before closing)
34
+ */
35
+ flushPendingAcks(): number;
36
+ /**
37
+ * Cancel and unblock all waiting producers (e.g. on stream termination/error)
38
+ */
39
+ cancel(): void;
40
+ }
41
+ //# sourceMappingURL=backpressure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backpressure.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/multiplexer/backpressure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAsB;IAMrB,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,aAAa,CAAyB;gBAE1B,MAAM,GAAE,iBAAsB;IAKlD,4CAA4C;IAC5C,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAcpC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQjC;;;OAGG;IACH,gBAAgB,IAAI,MAAM;IAU1B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAM1B;;OAEG;IACH,MAAM,IAAI,IAAI;CAQf"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Aether-WV Credit-Based Flow Control Manager
3
+ * Implements sliding window credit management to prevent consumer overload and GC jank.
4
+ */
5
+ export class StreamCreditController {
6
+ config;
7
+ credits;
8
+ pendingAcks = 0;
9
+ ackThreshold;
10
+ waitResolvers = [];
11
+ constructor(config = {}) {
12
+ this.config = config;
13
+ this.credits = config.initialCredits ?? 8;
14
+ this.ackThreshold = config.ackBatchSize ?? Math.max(1, Math.floor(this.credits / 2));
15
+ }
16
+ /** Current available credits for sending */
17
+ get availableCredits() {
18
+ return this.credits;
19
+ }
20
+ /**
21
+ * Called by Producer before sending a frame.
22
+ * If credits <= 0, returns a Promise that resolves when a FLOW_ACK is received.
23
+ */
24
+ async acquireCredit() {
25
+ if (this.credits > 0) {
26
+ this.credits -= 1;
27
+ return;
28
+ }
29
+ return new Promise((resolve) => {
30
+ this.waitResolvers.push(() => {
31
+ this.credits -= 1;
32
+ resolve();
33
+ });
34
+ });
35
+ }
36
+ /**
37
+ * Called by Producer when FLOW_ACK is received from Consumer.
38
+ */
39
+ grantCredits(count) {
40
+ this.credits += count;
41
+ while (this.credits > 0 && this.waitResolvers.length > 0) {
42
+ const resume = this.waitResolvers.shift();
43
+ if (resume)
44
+ resume();
45
+ }
46
+ }
47
+ /**
48
+ * Called by Consumer when a frame is processed.
49
+ * Returns positive number of credits to ACK if threshold reached, or 0 if buffered.
50
+ */
51
+ onFrameProcessed() {
52
+ this.pendingAcks += 1;
53
+ if (this.pendingAcks >= this.ackThreshold) {
54
+ const toAck = this.pendingAcks;
55
+ this.pendingAcks = 0;
56
+ return toAck;
57
+ }
58
+ return 0;
59
+ }
60
+ /**
61
+ * Force flush any pending acks (e.g. before closing)
62
+ */
63
+ flushPendingAcks() {
64
+ const toAck = this.pendingAcks;
65
+ this.pendingAcks = 0;
66
+ return toAck;
67
+ }
68
+ /**
69
+ * Cancel and unblock all waiting producers (e.g. on stream termination/error)
70
+ */
71
+ cancel() {
72
+ this.credits = 0;
73
+ const resolvers = this.waitResolvers;
74
+ this.waitResolvers = [];
75
+ for (const res of resolvers) {
76
+ res();
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=backpressure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backpressure.js","sourceRoot":"","sources":["../../../../../packages/core/src/multiplexer/backpressure.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,OAAO,sBAAsB;IAMb;IALZ,OAAO,CAAS;IAChB,WAAW,GAAW,CAAC,CAAC;IACf,YAAY,CAAS;IAC9B,aAAa,GAAsB,EAAE,CAAC;IAE9C,YAAoB,SAA4B,EAAE;QAA9B,WAAM,GAAN,MAAM,CAAwB;QAChD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,4CAA4C;IAC5C,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,MAAM;gBAAE,MAAM,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ import { AetherFrame } from '../protocol/frames.js';
2
+ import { StreamCreditController } from './backpressure.js';
3
+ export interface Transport {
4
+ send(data: Uint8Array): Promise<void> | void;
5
+ onReceive(handler: (data: Uint8Array) => void): void;
6
+ }
7
+ export interface StreamConsumer<T = Uint8Array> {
8
+ onData: (data: T) => void;
9
+ onError: (err: Error) => void;
10
+ onClose: () => void;
11
+ }
12
+ export declare class AetherMultiplexer {
13
+ private transport;
14
+ private nextStreamId;
15
+ private nextSequenceId;
16
+ private pendingRpc;
17
+ private activeStreams;
18
+ private outgoingStreams;
19
+ constructor(transport: Transport);
20
+ private handleRawBytes;
21
+ handleFrame(frame: AetherFrame): void;
22
+ private sendAck;
23
+ send(frame: AetherFrame): void;
24
+ /**
25
+ * Execute Unary RPC Call
26
+ */
27
+ invokeRpc(payload: Uint8Array, timeoutMs?: number): Promise<Uint8Array>;
28
+ /**
29
+ * Open reactive stream and return an AsyncIterableIterator with backpressure
30
+ */
31
+ openStream(payload: Uint8Array, signal?: AbortSignal): AsyncIterableIterator<Uint8Array>;
32
+ cancelStream(streamId: number): void;
33
+ registerProducerController(streamId: number, controller: StreamCreditController): void;
34
+ unregisterProducerController(streamId: number): void;
35
+ }
36
+ //# sourceMappingURL=multiplexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiplexer.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/multiplexer/multiplexer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAKZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,UAAU;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,iBAAiB;IA6BhB,OAAO,CAAC,SAAS;IA5B7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,UAAU,CAOd;IAGJ,OAAO,CAAC,aAAa,CASjB;IAGJ,OAAO,CAAC,eAAe,CAA6C;gBAEhD,SAAS,EAAE,SAAS;IAIxC,OAAO,CAAC,cAAc;IAKtB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAkGrC,OAAO,CAAC,OAAO;IAcf,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAK9B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,SAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAuB5E;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAAC,UAAU,CAAC;IAmExF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBpC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAItF,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAGrD"}