@downcity/city 0.2.205 → 0.2.211

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 (118) hide show
  1. package/README.md +63 -5
  2. package/bin/client/bureau.d.ts +41 -0
  3. package/bin/client/bureau.d.ts.map +1 -0
  4. package/bin/client/bureau.js +240 -0
  5. package/bin/client/bureau.js.map +1 -0
  6. package/bin/client/city.d.ts +15 -79
  7. package/bin/client/city.d.ts.map +1 -1
  8. package/bin/client/city.js +15 -99
  9. package/bin/client/city.js.map +1 -1
  10. package/bin/client/federation-admin.d.ts +32 -0
  11. package/bin/client/federation-admin.d.ts.map +1 -0
  12. package/bin/client/federation-admin.js +54 -0
  13. package/bin/client/federation-admin.js.map +1 -0
  14. package/bin/client/types.d.ts +10 -70
  15. package/bin/client/types.d.ts.map +1 -1
  16. package/bin/client/types.js +3 -3
  17. package/bin/federation/auth/authenticator.d.ts +17 -13
  18. package/bin/federation/auth/authenticator.d.ts.map +1 -1
  19. package/bin/federation/auth/authenticator.js +38 -27
  20. package/bin/federation/auth/authenticator.js.map +1 -1
  21. package/bin/federation/auth/bureau-token-schema.d.ts +274 -0
  22. package/bin/federation/auth/bureau-token-schema.d.ts.map +1 -0
  23. package/bin/federation/auth/bureau-token-schema.js +43 -0
  24. package/bin/federation/auth/bureau-token-schema.js.map +1 -0
  25. package/bin/federation/auth/bureau-token-store.d.ts +22 -0
  26. package/bin/federation/auth/bureau-token-store.d.ts.map +1 -0
  27. package/bin/federation/auth/bureau-token-store.js +122 -0
  28. package/bin/federation/auth/bureau-token-store.js.map +1 -0
  29. package/bin/federation/auth/federation-key-store.d.ts +26 -0
  30. package/bin/federation/auth/federation-key-store.d.ts.map +1 -0
  31. package/bin/federation/auth/federation-key-store.js +96 -0
  32. package/bin/federation/auth/federation-key-store.js.map +1 -0
  33. package/bin/federation/auth/key-schema.d.ts +275 -0
  34. package/bin/federation/auth/key-schema.d.ts.map +1 -0
  35. package/bin/federation/auth/key-schema.js +44 -0
  36. package/bin/federation/auth/key-schema.js.map +1 -0
  37. package/bin/federation/auth/types.d.ts +62 -4
  38. package/bin/federation/auth/types.d.ts.map +1 -1
  39. package/bin/federation/auth/user-token-authority.d.ts +26 -0
  40. package/bin/federation/auth/user-token-authority.d.ts.map +1 -0
  41. package/bin/federation/auth/user-token-authority.js +179 -0
  42. package/bin/federation/auth/user-token-authority.js.map +1 -0
  43. package/bin/federation/federation-init.d.ts.map +1 -1
  44. package/bin/federation/federation-init.js +23 -4
  45. package/bin/federation/federation-init.js.map +1 -1
  46. package/bin/federation/federation-router.d.ts +3 -1
  47. package/bin/federation/federation-router.d.ts.map +1 -1
  48. package/bin/federation/federation-router.js +17 -0
  49. package/bin/federation/federation-router.js.map +1 -1
  50. package/bin/federation/federation-runtime.d.ts.map +1 -1
  51. package/bin/federation/federation-runtime.js +14 -2
  52. package/bin/federation/federation-runtime.js.map +1 -1
  53. package/bin/federation/federation.d.ts.map +1 -1
  54. package/bin/federation/federation.js +2 -0
  55. package/bin/federation/federation.js.map +1 -1
  56. package/bin/federation/runtime.d.ts +4 -0
  57. package/bin/federation/runtime.d.ts.map +1 -1
  58. package/bin/index.d.ts +8 -3
  59. package/bin/index.d.ts.map +1 -1
  60. package/bin/index.js +3 -1
  61. package/bin/index.js.map +1 -1
  62. package/bin/pact/admin/index.d.ts +7 -19
  63. package/bin/pact/admin/index.d.ts.map +1 -1
  64. package/bin/pact/admin/index.js +10 -18
  65. package/bin/pact/admin/index.js.map +1 -1
  66. package/bin/pact/admin/types.d.ts +4 -10
  67. package/bin/pact/admin/types.d.ts.map +1 -1
  68. package/bin/pact/invoker/bureaus/index.d.ts +25 -0
  69. package/bin/pact/invoker/bureaus/index.d.ts.map +1 -0
  70. package/bin/pact/invoker/bureaus/index.js +36 -0
  71. package/bin/pact/invoker/bureaus/index.js.map +1 -0
  72. package/bin/pact/invoker/cities/types.d.ts +2 -2
  73. package/bin/pact/invoker/cities/types.d.ts.map +1 -1
  74. package/bin/pact/invoker/user/index.d.ts +19 -0
  75. package/bin/pact/invoker/user/index.d.ts.map +1 -0
  76. package/bin/pact/invoker/user/index.js +24 -0
  77. package/bin/pact/invoker/user/index.js.map +1 -0
  78. package/bin/pact/user/index.d.ts +2 -1
  79. package/bin/pact/user/index.d.ts.map +1 -1
  80. package/bin/pact/user/index.js +7 -3
  81. package/bin/pact/user/index.js.map +1 -1
  82. package/bin/pact/user/types.d.ts +0 -2
  83. package/bin/pact/user/types.d.ts.map +1 -1
  84. package/bin/service/ai/ai-service.d.ts +1 -1
  85. package/bin/service/ai/ai-service.d.ts.map +1 -1
  86. package/bin/service/ai/model-registry.d.ts +1 -1
  87. package/bin/service/ai/model-registry.d.ts.map +1 -1
  88. package/bin/service/bureaus/bureaus-service.d.ts +15 -0
  89. package/bin/service/bureaus/bureaus-service.d.ts.map +1 -0
  90. package/bin/service/bureaus/bureaus-service.js +55 -0
  91. package/bin/service/bureaus/bureaus-service.js.map +1 -0
  92. package/bin/service/installable-service.d.ts +5 -2
  93. package/bin/service/installable-service.d.ts.map +1 -1
  94. package/bin/service/installable-service.js +1 -0
  95. package/bin/service/installable-service.js.map +1 -1
  96. package/bin/service/instruction.js +1 -1
  97. package/bin/service/instruction.js.map +1 -1
  98. package/bin/service/service.d.ts +7 -1
  99. package/bin/service/service.d.ts.map +1 -1
  100. package/bin/service/service.js +2 -0
  101. package/bin/service/service.js.map +1 -1
  102. package/bin/types/Bureau.d.ts +96 -0
  103. package/bin/types/Bureau.d.ts.map +1 -0
  104. package/bin/types/Bureau.js +8 -0
  105. package/bin/types/Bureau.js.map +1 -0
  106. package/bin/types/FederationAdmin.d.ts +16 -0
  107. package/bin/types/FederationAdmin.d.ts.map +1 -0
  108. package/bin/types/FederationAdmin.js +7 -0
  109. package/bin/types/FederationAdmin.js.map +1 -0
  110. package/bin/types/User.d.ts +24 -0
  111. package/bin/types/User.d.ts.map +1 -0
  112. package/bin/types/User.js +8 -0
  113. package/bin/types/User.js.map +1 -0
  114. package/package.json +4 -3
  115. package/bin/federation/auth/token-signer.d.ts +0 -27
  116. package/bin/federation/auth/token-signer.d.ts.map +0 -1
  117. package/bin/federation/auth/token-signer.js +0 -116
  118. package/bin/federation/auth/token-signer.js.map +0 -1
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Federation 用户 token 签名密钥表。
3
+ *
4
+ * Federation 使用该系统表持久化 Ed25519 Key Ring。私钥只在服务端签发路径读取,
5
+ * 对外 JWKS 仅返回 public_jwk,避免产品后端获得签发能力。
6
+ */
7
+ /** Federation SQLite 签名密钥表。 */
8
+ export declare const sqlite_federation_auth_keys: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
9
+ name: "federation_auth_keys";
10
+ schema: undefined;
11
+ columns: {
12
+ key_id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
13
+ name: "key_id";
14
+ tableName: "federation_auth_keys";
15
+ dataType: "string";
16
+ columnType: "SQLiteText";
17
+ data: string;
18
+ driverParam: string;
19
+ notNull: true;
20
+ hasDefault: false;
21
+ isPrimaryKey: true;
22
+ isAutoincrement: false;
23
+ hasRuntimeDefault: false;
24
+ enumValues: [string, ...string[]];
25
+ baseColumn: never;
26
+ identity: undefined;
27
+ generated: undefined;
28
+ }, {}, {
29
+ length: number | undefined;
30
+ }>;
31
+ algorithm: import("drizzle-orm/sqlite-core").SQLiteColumn<{
32
+ name: "algorithm";
33
+ tableName: "federation_auth_keys";
34
+ dataType: "string";
35
+ columnType: "SQLiteText";
36
+ data: string;
37
+ driverParam: string;
38
+ notNull: true;
39
+ hasDefault: false;
40
+ isPrimaryKey: false;
41
+ isAutoincrement: false;
42
+ hasRuntimeDefault: false;
43
+ enumValues: [string, ...string[]];
44
+ baseColumn: never;
45
+ identity: undefined;
46
+ generated: undefined;
47
+ }, {}, {
48
+ length: number | undefined;
49
+ }>;
50
+ public_jwk: import("drizzle-orm/sqlite-core").SQLiteColumn<{
51
+ name: "public_jwk";
52
+ tableName: "federation_auth_keys";
53
+ dataType: "string";
54
+ columnType: "SQLiteText";
55
+ data: string;
56
+ driverParam: string;
57
+ notNull: true;
58
+ hasDefault: false;
59
+ isPrimaryKey: false;
60
+ isAutoincrement: false;
61
+ hasRuntimeDefault: false;
62
+ enumValues: [string, ...string[]];
63
+ baseColumn: never;
64
+ identity: undefined;
65
+ generated: undefined;
66
+ }, {}, {
67
+ length: number | undefined;
68
+ }>;
69
+ private_jwk: import("drizzle-orm/sqlite-core").SQLiteColumn<{
70
+ name: "private_jwk";
71
+ tableName: "federation_auth_keys";
72
+ dataType: "string";
73
+ columnType: "SQLiteText";
74
+ data: string;
75
+ driverParam: string;
76
+ notNull: true;
77
+ hasDefault: false;
78
+ isPrimaryKey: false;
79
+ isAutoincrement: false;
80
+ hasRuntimeDefault: false;
81
+ enumValues: [string, ...string[]];
82
+ baseColumn: never;
83
+ identity: undefined;
84
+ generated: undefined;
85
+ }, {}, {
86
+ length: number | undefined;
87
+ }>;
88
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
89
+ name: "status";
90
+ tableName: "federation_auth_keys";
91
+ dataType: "string";
92
+ columnType: "SQLiteText";
93
+ data: string;
94
+ driverParam: string;
95
+ notNull: true;
96
+ hasDefault: false;
97
+ isPrimaryKey: false;
98
+ isAutoincrement: false;
99
+ hasRuntimeDefault: false;
100
+ enumValues: [string, ...string[]];
101
+ baseColumn: never;
102
+ identity: undefined;
103
+ generated: undefined;
104
+ }, {}, {
105
+ length: number | undefined;
106
+ }>;
107
+ created_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
108
+ name: "created_at";
109
+ tableName: "federation_auth_keys";
110
+ dataType: "string";
111
+ columnType: "SQLiteText";
112
+ data: string;
113
+ driverParam: string;
114
+ notNull: true;
115
+ hasDefault: false;
116
+ isPrimaryKey: false;
117
+ isAutoincrement: false;
118
+ hasRuntimeDefault: false;
119
+ enumValues: [string, ...string[]];
120
+ baseColumn: never;
121
+ identity: undefined;
122
+ generated: undefined;
123
+ }, {}, {
124
+ length: number | undefined;
125
+ }>;
126
+ retired_at: import("drizzle-orm/sqlite-core").SQLiteColumn<{
127
+ name: "retired_at";
128
+ tableName: "federation_auth_keys";
129
+ dataType: "string";
130
+ columnType: "SQLiteText";
131
+ data: string;
132
+ driverParam: string;
133
+ notNull: true;
134
+ hasDefault: false;
135
+ isPrimaryKey: false;
136
+ isAutoincrement: false;
137
+ hasRuntimeDefault: false;
138
+ enumValues: [string, ...string[]];
139
+ baseColumn: never;
140
+ identity: undefined;
141
+ generated: undefined;
142
+ }, {}, {
143
+ length: number | undefined;
144
+ }>;
145
+ };
146
+ dialect: "sqlite";
147
+ }>;
148
+ /** Federation Postgres 签名密钥表。 */
149
+ export declare const pg_federation_auth_keys: import("drizzle-orm/pg-core").PgTableWithColumns<{
150
+ name: "federation_auth_keys";
151
+ schema: undefined;
152
+ columns: {
153
+ key_id: import("drizzle-orm/pg-core").PgColumn<{
154
+ name: "key_id";
155
+ tableName: "federation_auth_keys";
156
+ dataType: "string";
157
+ columnType: "PgText";
158
+ data: string;
159
+ driverParam: string;
160
+ notNull: true;
161
+ hasDefault: false;
162
+ isPrimaryKey: true;
163
+ isAutoincrement: false;
164
+ hasRuntimeDefault: false;
165
+ enumValues: [string, ...string[]];
166
+ baseColumn: never;
167
+ identity: undefined;
168
+ generated: undefined;
169
+ }, {}, {}>;
170
+ algorithm: import("drizzle-orm/pg-core").PgColumn<{
171
+ name: "algorithm";
172
+ tableName: "federation_auth_keys";
173
+ dataType: "string";
174
+ columnType: "PgText";
175
+ data: string;
176
+ driverParam: string;
177
+ notNull: true;
178
+ hasDefault: false;
179
+ isPrimaryKey: false;
180
+ isAutoincrement: false;
181
+ hasRuntimeDefault: false;
182
+ enumValues: [string, ...string[]];
183
+ baseColumn: never;
184
+ identity: undefined;
185
+ generated: undefined;
186
+ }, {}, {}>;
187
+ public_jwk: import("drizzle-orm/pg-core").PgColumn<{
188
+ name: "public_jwk";
189
+ tableName: "federation_auth_keys";
190
+ dataType: "string";
191
+ columnType: "PgText";
192
+ data: string;
193
+ driverParam: string;
194
+ notNull: true;
195
+ hasDefault: false;
196
+ isPrimaryKey: false;
197
+ isAutoincrement: false;
198
+ hasRuntimeDefault: false;
199
+ enumValues: [string, ...string[]];
200
+ baseColumn: never;
201
+ identity: undefined;
202
+ generated: undefined;
203
+ }, {}, {}>;
204
+ private_jwk: import("drizzle-orm/pg-core").PgColumn<{
205
+ name: "private_jwk";
206
+ tableName: "federation_auth_keys";
207
+ dataType: "string";
208
+ columnType: "PgText";
209
+ data: string;
210
+ driverParam: string;
211
+ notNull: true;
212
+ hasDefault: false;
213
+ isPrimaryKey: false;
214
+ isAutoincrement: false;
215
+ hasRuntimeDefault: false;
216
+ enumValues: [string, ...string[]];
217
+ baseColumn: never;
218
+ identity: undefined;
219
+ generated: undefined;
220
+ }, {}, {}>;
221
+ status: import("drizzle-orm/pg-core").PgColumn<{
222
+ name: "status";
223
+ tableName: "federation_auth_keys";
224
+ dataType: "string";
225
+ columnType: "PgText";
226
+ data: string;
227
+ driverParam: string;
228
+ notNull: true;
229
+ hasDefault: false;
230
+ isPrimaryKey: false;
231
+ isAutoincrement: false;
232
+ hasRuntimeDefault: false;
233
+ enumValues: [string, ...string[]];
234
+ baseColumn: never;
235
+ identity: undefined;
236
+ generated: undefined;
237
+ }, {}, {}>;
238
+ created_at: import("drizzle-orm/pg-core").PgColumn<{
239
+ name: "created_at";
240
+ tableName: "federation_auth_keys";
241
+ dataType: "string";
242
+ columnType: "PgText";
243
+ data: string;
244
+ driverParam: string;
245
+ notNull: true;
246
+ hasDefault: false;
247
+ isPrimaryKey: false;
248
+ isAutoincrement: false;
249
+ hasRuntimeDefault: false;
250
+ enumValues: [string, ...string[]];
251
+ baseColumn: never;
252
+ identity: undefined;
253
+ generated: undefined;
254
+ }, {}, {}>;
255
+ retired_at: import("drizzle-orm/pg-core").PgColumn<{
256
+ name: "retired_at";
257
+ tableName: "federation_auth_keys";
258
+ dataType: "string";
259
+ columnType: "PgText";
260
+ data: string;
261
+ driverParam: string;
262
+ notNull: true;
263
+ hasDefault: false;
264
+ isPrimaryKey: false;
265
+ isAutoincrement: false;
266
+ hasRuntimeDefault: false;
267
+ enumValues: [string, ...string[]];
268
+ baseColumn: never;
269
+ identity: undefined;
270
+ generated: undefined;
271
+ }, {}, {}>;
272
+ };
273
+ dialect: "pg";
274
+ }>;
275
+ //# sourceMappingURL=key-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-schema.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/key-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,+BAA+B;AAC/B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAetC,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAelC,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Federation 用户 token 签名密钥表。
3
+ *
4
+ * Federation 使用该系统表持久化 Ed25519 Key Ring。私钥只在服务端签发路径读取,
5
+ * 对外 JWKS 仅返回 public_jwk,避免产品后端获得签发能力。
6
+ */
7
+ import { pgTable, text as pgText } from "drizzle-orm/pg-core";
8
+ import { sqliteTable, text as sqliteText } from "drizzle-orm/sqlite-core";
9
+ const FEDERATION_AUTH_KEY_TABLE = "federation_auth_keys";
10
+ /** Federation SQLite 签名密钥表。 */
11
+ export const sqlite_federation_auth_keys = sqliteTable(FEDERATION_AUTH_KEY_TABLE, {
12
+ /** JWT protected header 使用的密钥 ID。 */
13
+ key_id: sqliteText("key_id").primaryKey(),
14
+ /** JOSE 签名算法,当前固定为 EdDSA。 */
15
+ algorithm: sqliteText("algorithm").notNull(),
16
+ /** 可公开发布的 Ed25519 Public JWK JSON。 */
17
+ public_jwk: sqliteText("public_jwk").notNull(),
18
+ /** 仅 Federation 签发路径可读的 Ed25519 Private JWK JSON。 */
19
+ private_jwk: sqliteText("private_jwk").notNull(),
20
+ /** 密钥生命周期状态。 */
21
+ status: sqliteText("status").notNull(),
22
+ /** 密钥创建时间。 */
23
+ created_at: sqliteText("created_at").notNull(),
24
+ /** 密钥停止签发时间;active 状态使用空字符串。 */
25
+ retired_at: sqliteText("retired_at").notNull(),
26
+ });
27
+ /** Federation Postgres 签名密钥表。 */
28
+ export const pg_federation_auth_keys = pgTable(FEDERATION_AUTH_KEY_TABLE, {
29
+ /** JWT protected header 使用的密钥 ID。 */
30
+ key_id: pgText("key_id").primaryKey(),
31
+ /** JOSE 签名算法,当前固定为 EdDSA。 */
32
+ algorithm: pgText("algorithm").notNull(),
33
+ /** 可公开发布的 Ed25519 Public JWK JSON。 */
34
+ public_jwk: pgText("public_jwk").notNull(),
35
+ /** 仅 Federation 签发路径可读的 Ed25519 Private JWK JSON。 */
36
+ private_jwk: pgText("private_jwk").notNull(),
37
+ /** 密钥生命周期状态。 */
38
+ status: pgText("status").notNull(),
39
+ /** 密钥创建时间。 */
40
+ created_at: pgText("created_at").notNull(),
41
+ /** 密钥停止签发时间;active 状态使用空字符串。 */
42
+ retired_at: pgText("retired_at").notNull(),
43
+ });
44
+ //# sourceMappingURL=key-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-schema.js","sourceRoot":"","sources":["../../../src/federation/auth/key-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEzD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,CAAC,yBAAyB,EAAE;IAChF,qCAAqC;IACrC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE;IACzC,6BAA6B;IAC7B,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IAC5C,sCAAsC;IACtC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAC9C,qDAAqD;IACrD,WAAW,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;IAChD,gBAAgB;IAChB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IACtC,cAAc;IACd,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAC9C,gCAAgC;IAChC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC/C,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,EAAE;IACxE,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE;IACrC,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE;IACxC,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAC1C,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;IAC5C,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAClC,cAAc;IACd,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IAC1C,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;CAC3C,CAAC,CAAC"}
@@ -47,6 +47,10 @@ export interface UserTokenPayload {
47
47
  * token 受众。
48
48
  */
49
49
  aud: "downcity:user";
50
+ /**
51
+ * 签发该 token 的 Federation 稳定 issuer。
52
+ */
53
+ iss: string;
50
54
  /**
51
55
  * token 所属 City ID。
52
56
  */
@@ -55,6 +59,10 @@ export interface UserTokenPayload {
55
59
  * token 所属用户 ID。
56
60
  */
57
61
  user_id: string;
62
+ /**
63
+ * JWT 标准主体字段,与 user_id 保持一致。
64
+ */
65
+ sub: string;
58
66
  /**
59
67
  * 业务元数据。
60
68
  */
@@ -66,7 +74,59 @@ export interface UserTokenPayload {
66
74
  /**
67
75
  * 过期时间。
68
76
  */
69
- exp?: number;
77
+ exp: number;
78
+ /**
79
+ * token 唯一 ID,用于审计与后续撤销扩展。
80
+ */
81
+ jti: string;
82
+ }
83
+ /** Federation 签名密钥生命周期状态。 */
84
+ export type FederationAuthKeyStatus = "active" | "retired" | "revoked";
85
+ /** Federation 数据库中的 Ed25519 签名密钥记录。 */
86
+ export interface FederationAuthKeyRecord extends Record<string, unknown> {
87
+ /** JWT protected header 使用的密钥 ID。 */
88
+ key_id: string;
89
+ /** JOSE 签名算法,当前固定为 EdDSA。 */
90
+ algorithm: "EdDSA";
91
+ /** 可公开发布的 Ed25519 Public JWK JSON。 */
92
+ public_jwk: string;
93
+ /** 仅 Federation 签发路径可读的 Ed25519 Private JWK JSON。 */
94
+ private_jwk: string;
95
+ /** 当前密钥生命周期状态。 */
96
+ status: FederationAuthKeyStatus;
97
+ /** 密钥创建时间。 */
98
+ created_at: string;
99
+ /** 密钥停止签发时间;active 状态为空字符串。 */
100
+ retired_at: string;
101
+ }
102
+ /** Federation 对外发布的 JSON Web Key。 */
103
+ export interface FederationPublicJwk extends Record<string, unknown> {
104
+ /** 密钥类型,Ed25519 固定为 OKP。 */
105
+ kty: "OKP";
106
+ /** 椭圆曲线,固定为 Ed25519。 */
107
+ crv: "Ed25519";
108
+ /** JOSE 签名算法。 */
109
+ alg: "EdDSA";
110
+ /** 公钥用途,固定用于签名验证。 */
111
+ use: "sig";
112
+ /** JWT protected header 对应的密钥 ID。 */
113
+ kid: string;
114
+ /** Ed25519 公钥的 Base64URL 编码。 */
115
+ x: string;
116
+ }
117
+ /** Federation JWKS 响应。 */
118
+ export interface FederationJwks {
119
+ /** 当前可用于验签的 active 与 retired 公钥。 */
120
+ keys: FederationPublicJwk[];
121
+ }
122
+ /** Federation 公共发现信息。 */
123
+ export interface FederationDiscovery {
124
+ /** Federation 首次启动后保持稳定的 issuer。 */
125
+ issuer: string;
126
+ /** 当前 Federation 的公开 JWKS 地址。 */
127
+ jwks_uri: string;
128
+ /** user_token 必须包含的 audience。 */
129
+ user_token_audience: "downcity:user";
70
130
  }
71
131
  /**
72
132
  * City 返回给管理端的发 token 结果。
@@ -86,9 +146,7 @@ export interface UserTokenIssueResult {
86
146
  user_id: string;
87
147
  /**
88
148
  * token 过期时间。
89
- *
90
- * 未设置 ttl 时省略。
91
149
  */
92
- expires_at?: string;
150
+ expires_at: string;
93
151
  }
94
152
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,eAAe,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,eAAe,CAAC;IAErB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6BAA6B;AAC7B,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,uCAAuC;AACvC,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,SAAS,EAAE,OAAO,CAAC;IAEnB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IAEpB,kBAAkB;IAClB,MAAM,EAAE,uBAAuB,CAAC;IAEhC,cAAc;IACd,UAAU,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qCAAqC;AACrC,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,4BAA4B;IAC5B,GAAG,EAAE,KAAK,CAAC;IAEX,wBAAwB;IACxB,GAAG,EAAE,SAAS,CAAC;IAEf,iBAAiB;IACjB,GAAG,EAAE,OAAO,CAAC;IAEb,qBAAqB;IACrB,GAAG,EAAE,KAAK,CAAC;IAEX,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IAEZ,gCAAgC;IAChC,CAAC,EAAE,MAAM,CAAC;CACX;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC7B;AAED,yBAAyB;AACzB,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IAEf,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IAEjB,iCAAiC;IACjC,mBAAmB,EAAE,eAAe,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Federation user_token 签发与本地验签模块。
3
+ *
4
+ * 使用 Ed25519 Compact JWT:Federation Key Ring 私钥只负责签发,公开 JWK 只负责验签。
5
+ * token 保留 `ub_` 前缀用于快速识别 Downcity 用户凭证。
6
+ */
7
+ import { type JWTPayload } from "jose";
8
+ import { FederationKeyStore } from "./federation-key-store.js";
9
+ import type { CreateUserTokenInput, UserTokenPayload } from "./types.js";
10
+ /** Federation 内部 user_token 权威。 */
11
+ export declare class UserTokenAuthority {
12
+ private readonly key_store;
13
+ private readonly issuer;
14
+ constructor(key_store: FederationKeyStore, issuer: string);
15
+ /** 使用当前 active 私钥签发 user_token。 */
16
+ sign(input: CreateUserTokenInput): Promise<string>;
17
+ /** 使用 Federation Key Ring 在服务端本地验证 user_token。 */
18
+ verify(token: string): Promise<UserTokenPayload>;
19
+ }
20
+ /** 将 token TTL 统一解析为秒并限制最大有效期。 */
21
+ export declare function parse_user_token_ttl(ttl?: string | number): number;
22
+ /** 去掉 Downcity token 前缀并拒绝空 token。 */
23
+ export declare function normalize_user_token(token: string): string;
24
+ /** 从已通过 JOSE 校验的 payload 构造公共 user token 载荷。 */
25
+ export declare function read_user_token_payload(payload: JWTPayload): UserTokenPayload;
26
+ //# sourceMappingURL=user-token-authority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-token-authority.d.ts","sourceRoot":"","sources":["../../../src/federation/auth/user-token-authority.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,kBAAkB,EAAwB,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMzE,mCAAmC;AACnC,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,SAAS,EAAE,kBAAkB,EAC7B,MAAM,EAAE,MAAM;IAGjC,mCAAmC;IAC7B,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BxD,kDAAkD;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0BvD;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA4BlE;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,gDAAgD;AAChD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,CAyB7E"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Federation user_token 签发与本地验签模块。
3
+ *
4
+ * 使用 Ed25519 Compact JWT:Federation Key Ring 私钥只负责签发,公开 JWK 只负责验签。
5
+ * token 保留 `ub_` 前缀用于快速识别 Downcity 用户凭证。
6
+ */
7
+ import { SignJWT, decodeProtectedHeader, importJWK, jwtVerify, } from "jose";
8
+ import { httpError, randomSecret } from "../../utils/helpers.js";
9
+ import { USER_TOKEN_ALGORITHM } from "./federation-key-store.js";
10
+ const USER_TOKEN_AUDIENCE = "downcity:user";
11
+ const DEFAULT_USER_TOKEN_TTL_SECONDS = 7 * 24 * 60 * 60;
12
+ const MAX_USER_TOKEN_TTL_SECONDS = 30 * 24 * 60 * 60;
13
+ /** Federation 内部 user_token 权威。 */
14
+ export class UserTokenAuthority {
15
+ key_store;
16
+ issuer;
17
+ constructor(key_store, issuer) {
18
+ this.key_store = key_store;
19
+ this.issuer = issuer;
20
+ }
21
+ /** 使用当前 active 私钥签发 user_token。 */
22
+ async sign(input) {
23
+ validate_sign_input(input);
24
+ const ttl_seconds = parse_user_token_ttl(input.ttl);
25
+ const now = Math.floor(Date.now() / 1000);
26
+ const signing_key = await this.key_store.ensure_active_key();
27
+ const private_jwk = JSON.parse(signing_key.private_jwk);
28
+ const private_key = await importJWK(private_jwk, USER_TOKEN_ALGORITHM);
29
+ const jwt = await new SignJWT({
30
+ user_id: input.user_id,
31
+ city_id: input.city_id,
32
+ metadata: input.metadata ?? {},
33
+ })
34
+ .setProtectedHeader({
35
+ alg: USER_TOKEN_ALGORITHM,
36
+ typ: "JWT",
37
+ kid: signing_key.key_id,
38
+ })
39
+ .setIssuer(this.issuer)
40
+ .setAudience(USER_TOKEN_AUDIENCE)
41
+ .setSubject(input.user_id)
42
+ .setIssuedAt(now)
43
+ .setExpirationTime(now + ttl_seconds)
44
+ .setJti(`token_${randomSecret(16)}`)
45
+ .sign(private_key);
46
+ return `ub_${jwt}`;
47
+ }
48
+ /** 使用 Federation Key Ring 在服务端本地验证 user_token。 */
49
+ async verify(token) {
50
+ const jwt = normalize_user_token(token);
51
+ let key_id = "";
52
+ try {
53
+ const header = decodeProtectedHeader(jwt);
54
+ if (header.alg !== USER_TOKEN_ALGORITHM) {
55
+ throw httpError(401, "Invalid user token algorithm");
56
+ }
57
+ key_id = typeof header.kid === "string" ? header.kid : "";
58
+ if (!key_id)
59
+ throw httpError(401, "Unknown token signing key");
60
+ const key_record = await this.key_store.get_verification_key(key_id);
61
+ if (!key_record)
62
+ throw httpError(401, "Unknown token signing key");
63
+ const public_jwk = JSON.parse(key_record.public_jwk);
64
+ const public_key = await importJWK(public_jwk, USER_TOKEN_ALGORITHM);
65
+ const result = await jwtVerify(jwt, public_key, {
66
+ algorithms: [USER_TOKEN_ALGORITHM],
67
+ audience: USER_TOKEN_AUDIENCE,
68
+ issuer: this.issuer,
69
+ });
70
+ return read_user_token_payload(result.payload);
71
+ }
72
+ catch (error) {
73
+ if (is_http_error(error))
74
+ throw error;
75
+ throw map_jose_error(error, key_id);
76
+ }
77
+ }
78
+ }
79
+ /** 将 token TTL 统一解析为秒并限制最大有效期。 */
80
+ export function parse_user_token_ttl(ttl) {
81
+ if (ttl === undefined)
82
+ return DEFAULT_USER_TOKEN_TTL_SECONDS;
83
+ let seconds;
84
+ if (typeof ttl === "number" && Number.isFinite(ttl) && ttl > 0) {
85
+ seconds = ttl;
86
+ }
87
+ else if (typeof ttl === "string") {
88
+ const match = ttl.match(/^(\d+)(s|m|h|d)$/);
89
+ if (!match)
90
+ throw new TypeError(`Invalid ttl: ${ttl}`);
91
+ const value = Number(match[1]);
92
+ const multiplier = {
93
+ s: 1,
94
+ m: 60,
95
+ h: 60 * 60,
96
+ d: 24 * 60 * 60,
97
+ }[match[2]];
98
+ seconds = value * multiplier;
99
+ }
100
+ else {
101
+ throw new TypeError("ttl must be a positive number of seconds or a string like 1h");
102
+ }
103
+ if (!Number.isSafeInteger(seconds) || seconds <= 0) {
104
+ throw new TypeError("ttl must resolve to a positive integer number of seconds");
105
+ }
106
+ if (seconds > MAX_USER_TOKEN_TTL_SECONDS) {
107
+ throw new TypeError("ttl cannot exceed 30d");
108
+ }
109
+ return seconds;
110
+ }
111
+ /** 去掉 Downcity token 前缀并拒绝空 token。 */
112
+ export function normalize_user_token(token) {
113
+ const value = String(token ?? "").trim();
114
+ const jwt = value.startsWith("ub_") ? value.slice(3) : value;
115
+ if (!jwt)
116
+ throw httpError(401, "Invalid user token");
117
+ return jwt;
118
+ }
119
+ /** 从已通过 JOSE 校验的 payload 构造公共 user token 载荷。 */
120
+ export function read_user_token_payload(payload) {
121
+ const user_id = read_required_claim(payload.user_id ?? payload.sub, "user_id");
122
+ const subject = read_required_claim(payload.sub, "sub");
123
+ const city_id = read_required_claim(payload.city_id, "city_id");
124
+ const issuer = read_required_claim(payload.iss, "iss");
125
+ const token_id = read_required_claim(payload.jti, "jti");
126
+ if (user_id !== subject)
127
+ throw httpError(401, "Invalid user token subject");
128
+ if (typeof payload.iat !== "number" || typeof payload.exp !== "number") {
129
+ throw httpError(401, "Invalid user token timestamps");
130
+ }
131
+ const metadata = payload.metadata;
132
+ if (metadata !== undefined && (!metadata || typeof metadata !== "object" || Array.isArray(metadata))) {
133
+ throw httpError(401, "Invalid user token metadata");
134
+ }
135
+ return {
136
+ aud: USER_TOKEN_AUDIENCE,
137
+ iss: issuer,
138
+ city_id,
139
+ user_id,
140
+ sub: subject,
141
+ metadata: metadata ?? {},
142
+ iat: payload.iat,
143
+ exp: payload.exp,
144
+ jti: token_id,
145
+ };
146
+ }
147
+ function validate_sign_input(input) {
148
+ if (!input || typeof input.city_id !== "string" || !input.city_id.trim()) {
149
+ throw new TypeError("city_id is required");
150
+ }
151
+ if (typeof input.user_id !== "string" || !input.user_id.trim()) {
152
+ throw new TypeError("user_id is required");
153
+ }
154
+ }
155
+ function read_required_claim(value, claim) {
156
+ if (typeof value !== "string" || !value.trim()) {
157
+ throw httpError(401, `Invalid user token ${claim}`);
158
+ }
159
+ return value;
160
+ }
161
+ function is_http_error(error) {
162
+ return error instanceof Error
163
+ && typeof error.statusCode === "number";
164
+ }
165
+ function map_jose_error(error, key_id) {
166
+ const code = error && typeof error === "object"
167
+ ? String(error.code ?? "")
168
+ : "";
169
+ if (code === "ERR_JWT_EXPIRED")
170
+ return httpError(401, "User token expired");
171
+ if (code === "ERR_JWT_CLAIM_VALIDATION_FAILED") {
172
+ return httpError(401, "Invalid user token claims");
173
+ }
174
+ if (code === "ERR_JWS_SIGNATURE_VERIFICATION_FAILED") {
175
+ return httpError(401, "Invalid user token signature");
176
+ }
177
+ return httpError(401, key_id ? "Invalid user token" : "Unknown token signing key");
178
+ }
179
+ //# sourceMappingURL=user-token-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-token-authority.js","sourceRoot":"","sources":["../../../src/federation/auth/user-token-authority.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"federation-init.d.ts","sourceRoot":"","sources":["../../src/federation/federation-init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC;IAC9B,iBAAiB;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,iBAAiB;IACjB,UAAU,EAAE,SAAS,CAAC;IACtB,UAAU;IACV,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,iBAAiB;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,oBAAoB;IACpB,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IACtH,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyD/B"}
1
+ {"version":3,"file":"federation-init.d.ts","sourceRoot":"","sources":["../../src/federation/federation-init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qBAAqB;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC;IAC9B,iBAAiB;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,iBAAiB;IACjB,UAAU,EAAE,SAAS,CAAC;IACtB,UAAU;IACV,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,iBAAiB;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,oBAAoB;IACpB,aAAa,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE;YAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IACtH,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsF/B"}