@dereekb/dbx-firebase 13.6.17 → 13.8.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.
- package/fesm2022/dereekb-dbx-firebase-oidc.mjs +181 -158
- package/fesm2022/dereekb-dbx-firebase-oidc.mjs.map +1 -1
- package/fesm2022/dereekb-dbx-firebase.mjs +813 -670
- package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
- package/package.json +16 -15
- package/types/dereekb-dbx-firebase-oidc.d.ts +56 -57
- package/types/dereekb-dbx-firebase.d.ts +234 -41
package/package.json
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-firebase",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.8.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "21.2.
|
|
6
|
-
"@angular/core": "21.2.
|
|
7
|
-
"@angular/
|
|
8
|
-
"@
|
|
9
|
-
"@dereekb/
|
|
10
|
-
"@dereekb/dbx-
|
|
11
|
-
"@dereekb/dbx-
|
|
12
|
-
"@dereekb/dbx-
|
|
13
|
-
"@dereekb/
|
|
14
|
-
"@dereekb/
|
|
15
|
-
"@dereekb/
|
|
16
|
-
"@dereekb/
|
|
17
|
-
"@dereekb/
|
|
5
|
+
"@angular/common": "21.2.4",
|
|
6
|
+
"@angular/core": "21.2.4",
|
|
7
|
+
"@angular/material": "^21.2.3",
|
|
8
|
+
"@dereekb/date": "13.8.0",
|
|
9
|
+
"@dereekb/dbx-analytics": "13.8.0",
|
|
10
|
+
"@dereekb/dbx-core": "13.8.0",
|
|
11
|
+
"@dereekb/dbx-form": "13.8.0",
|
|
12
|
+
"@dereekb/dbx-web": "13.8.0",
|
|
13
|
+
"@dereekb/firebase": "13.8.0",
|
|
14
|
+
"@dereekb/model": "13.8.0",
|
|
15
|
+
"@dereekb/rxjs": "13.8.0",
|
|
16
|
+
"@dereekb/util": "13.8.0",
|
|
17
|
+
"@dereekb/vitest": "13.8.0",
|
|
18
|
+
"@ng-forge/dynamic-forms": "^0.7.0",
|
|
18
19
|
"@ngrx/component-store": "^21.0.0",
|
|
19
20
|
"@ngx-formly/core": "git+https://git@github.com/dereekb/ngx-formly#996d1041c8d2afbe429985a5ad394e59327bfa1d",
|
|
20
|
-
"firebase": "^12.
|
|
21
|
+
"firebase": "^12.12.0",
|
|
21
22
|
"make-error": "^1.3.0",
|
|
22
23
|
"ng-overlay-container": "^21.0.1",
|
|
23
24
|
"rxjs": "^7.8.0"
|
|
@@ -6,11 +6,13 @@ import * as _dereekb_dbx_core from '@dereekb/dbx-core';
|
|
|
6
6
|
import { DbxInjectionComponentConfig, SegueRefOrSegueRefRouterLink } from '@dereekb/dbx-core';
|
|
7
7
|
import * as _dereekb_firebase from '@dereekb/firebase';
|
|
8
8
|
import { OAuthInteractionLoginDetails, OidcScope, OidcInteractionUid, OidcTokenEndpointAuthMethod, OidcRedirectUri, OidcScopeDetails, CreateOidcClientParams, UpdateOidcClientFieldParams, OidcEntry, OidcEntryDocument, OidcModelFunctions, CreateOidcClientResult, RotateOidcClientSecretResult, OidcModelFirestoreCollections, OAuthInteractionLoginResponse, OAuthInteractionConsentResponse } from '@dereekb/firebase';
|
|
9
|
+
import * as _dereekb_dbx_form from '@dereekb/dbx-form';
|
|
10
|
+
import { AbstractConfigAsyncForgeFormDirective } from '@dereekb/dbx-form';
|
|
11
|
+
import * as _ng_forge_dynamic_forms from '@ng-forge/dynamic-forms';
|
|
12
|
+
import { FormConfig } from '@ng-forge/dynamic-forms';
|
|
13
|
+
import * as _ng_forge_dynamic_forms_material from '@ng-forge/dynamic-forms-material';
|
|
9
14
|
import * as rxjs from 'rxjs';
|
|
10
15
|
import { Observable } from 'rxjs';
|
|
11
|
-
import * as _ngx_formly_core from '@ngx-formly/core';
|
|
12
|
-
import { FormlyFieldConfig } from '@ngx-formly/core';
|
|
13
|
-
import { AbstractConfigAsyncFormlyFormDirective } from '@dereekb/dbx-form';
|
|
14
16
|
import { AbstractDbxSelectionListWrapperDirective, AbstractDbxSelectionListViewDirective, DbxSelectionValueListViewConfig, DbxValueAsListItem, AbstractDbxValueListViewItemComponent, DbxActionConfirmConfig } from '@dereekb/dbx-web';
|
|
15
17
|
import { WorkUsingContext } from '@dereekb/rxjs';
|
|
16
18
|
import * as _dereekb_dbx_firebase from '@dereekb/dbx-firebase';
|
|
@@ -237,114 +239,113 @@ interface OidcEntryClientFormFieldsConfig {
|
|
|
237
239
|
readonly tokenEndpointAuthMethods: OidcTokenEndpointAuthMethod[];
|
|
238
240
|
}
|
|
239
241
|
/**
|
|
240
|
-
* Creates fields for the OAuth client create form.
|
|
242
|
+
* Creates forge fields for the OAuth client create form.
|
|
241
243
|
*
|
|
242
244
|
* Includes `token_endpoint_auth_method` which is immutable after creation.
|
|
243
245
|
*
|
|
244
246
|
* @param config - Optional configuration for field generation, including mode and allowed auth methods.
|
|
245
|
-
* @returns
|
|
247
|
+
* @returns A FormConfig for the client creation form.
|
|
246
248
|
*/
|
|
247
|
-
declare function
|
|
249
|
+
declare function oidcEntryClientForgeFormFields(config?: OidcEntryClientFormFieldsConfig): FormConfig;
|
|
248
250
|
/**
|
|
249
|
-
* Creates a value selection field for choosing the token endpoint authentication method.
|
|
251
|
+
* Creates a forge value selection field for choosing the token endpoint authentication method.
|
|
250
252
|
*
|
|
251
253
|
* @param config - Optional configuration to filter the available auth method options.
|
|
252
|
-
* @returns A
|
|
254
|
+
* @returns A forge value selection field for the token endpoint auth method selector.
|
|
253
255
|
*/
|
|
254
|
-
declare function
|
|
256
|
+
declare function oidcClientTokenEndpointAuthMethodForgeField(config?: OidcEntryClientFormFieldsConfig): _ng_forge_dynamic_forms_material.MatSelectField<OidcTokenEndpointAuthMethod>;
|
|
255
257
|
/**
|
|
256
|
-
* Creates fields for updating an existing OAuth client.
|
|
258
|
+
* Creates forge fields for updating an existing OAuth client.
|
|
257
259
|
*
|
|
258
260
|
* Excludes `token_endpoint_auth_method` (immutable after creation).
|
|
259
261
|
*
|
|
260
|
-
* @returns Array of
|
|
262
|
+
* @returns Array of forge field definitions for the client update form.
|
|
261
263
|
*/
|
|
262
|
-
declare function
|
|
264
|
+
declare function oidcEntryClientUpdateForgeFormFields(): (_ng_forge_dynamic_forms_material.MatInputField | _ng_forge_dynamic_forms.GroupField<readonly _ng_forge_dynamic_forms.GroupAllowedChildren[]> | _dereekb_dbx_form.DbxForgeFormFieldWrapperFieldDef<_dereekb_dbx_form.DbxForgeSearchableChipFieldDef<string, unknown, _dereekb_util.PrimativeKey>>)[];
|
|
263
265
|
/**
|
|
264
|
-
* Creates a text field for the OAuth client display name.
|
|
266
|
+
* Creates a forge text field for the OAuth client display name.
|
|
265
267
|
*
|
|
266
|
-
* @returns A
|
|
268
|
+
* @returns A forge text field for the client name.
|
|
267
269
|
*/
|
|
268
|
-
declare function
|
|
270
|
+
declare function oidcClientNameForgeField(): _ng_forge_dynamic_forms_material.MatInputField;
|
|
269
271
|
/**
|
|
270
|
-
* Creates a searchable chip field for entering redirect URIs.
|
|
272
|
+
* Creates a forge searchable chip field for entering redirect URIs.
|
|
271
273
|
*
|
|
272
|
-
* @returns A
|
|
274
|
+
* @returns A forge searchable chip field for redirect URIs.
|
|
273
275
|
*/
|
|
274
|
-
declare function
|
|
276
|
+
declare function oidcClientRedirectUrisForgeField(): _dereekb_dbx_form.DbxForgeFormFieldWrapperFieldDef<_dereekb_dbx_form.DbxForgeSearchableChipFieldDef<string, unknown, _dereekb_util.PrimativeKey>>;
|
|
275
277
|
/**
|
|
276
|
-
* Creates a
|
|
278
|
+
* Creates a forge group containing the JWKS URI field, conditionally hidden
|
|
279
|
+
* when the token endpoint auth method is not `private_key_jwt`.
|
|
277
280
|
*
|
|
278
|
-
* @returns A
|
|
281
|
+
* @returns A forge group field with conditional visibility logic.
|
|
279
282
|
*/
|
|
280
|
-
declare function
|
|
283
|
+
declare function oidcClientJwksUriForgeField(): _ng_forge_dynamic_forms.GroupField<readonly _ng_forge_dynamic_forms.GroupAllowedChildren[]>;
|
|
281
284
|
/**
|
|
282
|
-
* Creates a text field for the optional client logo URL.
|
|
285
|
+
* Creates a forge text field for the optional client logo URL.
|
|
283
286
|
*
|
|
284
|
-
* @returns A
|
|
287
|
+
* @returns A forge text field for the logo URI.
|
|
285
288
|
*/
|
|
286
|
-
declare function
|
|
289
|
+
declare function oidcClientLogoUriForgeField(): _ng_forge_dynamic_forms_material.MatInputField;
|
|
287
290
|
/**
|
|
288
|
-
* Creates a text field for the optional client homepage URL.
|
|
291
|
+
* Creates a forge text field for the optional client homepage URL.
|
|
289
292
|
*
|
|
290
|
-
* @returns A
|
|
293
|
+
* @returns A forge text field for the homepage URL.
|
|
291
294
|
*/
|
|
292
|
-
declare function
|
|
295
|
+
declare function oidcClientHomepageUriForgeField(): _ng_forge_dynamic_forms_material.MatInputField;
|
|
293
296
|
interface OidcEntryClientTestFormFieldsConfig {
|
|
294
297
|
readonly redirectUris: OidcRedirectUri[];
|
|
295
298
|
readonly availableScopes: OidcScopeDetails[];
|
|
296
299
|
}
|
|
297
300
|
/**
|
|
298
|
-
* Assembles the form fields for the OAuth test client form.
|
|
301
|
+
* Assembles the forge form fields for the OAuth test client form.
|
|
299
302
|
*
|
|
300
303
|
* @param config - Configuration providing available redirect URIs and scopes for the test form.
|
|
301
|
-
* @returns
|
|
304
|
+
* @returns A FormConfig for the test client form.
|
|
302
305
|
*/
|
|
303
|
-
declare function
|
|
306
|
+
declare function oidcEntryClientTestForgeFormFields(config: OidcEntryClientTestFormFieldsConfig): FormConfig;
|
|
304
307
|
/**
|
|
305
|
-
* Creates a read-only text field displaying the OAuth client ID.
|
|
308
|
+
* Creates a read-only forge text field displaying the OAuth client ID.
|
|
306
309
|
*
|
|
307
|
-
* @returns A
|
|
310
|
+
* @returns A read-only forge text field for the client ID.
|
|
308
311
|
*/
|
|
309
|
-
declare function
|
|
312
|
+
declare function oidcClientTestClientIdForgeField(): _ng_forge_dynamic_forms_material.MatInputField;
|
|
310
313
|
/**
|
|
311
|
-
* Creates a selection field for choosing one of the client's registered redirect URIs for testing.
|
|
314
|
+
* Creates a forge selection field for choosing one of the client's registered redirect URIs for testing.
|
|
312
315
|
*
|
|
313
316
|
* @param redirectUris - The registered redirect URIs to display as options.
|
|
314
|
-
* @returns A
|
|
317
|
+
* @returns A forge selection field for the redirect URI.
|
|
315
318
|
*/
|
|
316
|
-
declare function
|
|
319
|
+
declare function oidcClientTestRedirectUriForgeField(redirectUris: OidcRedirectUri[]): _ng_forge_dynamic_forms_material.MatSelectField<string>;
|
|
317
320
|
/**
|
|
318
|
-
* Creates a pickable chip field for selecting scopes to request during the test flow.
|
|
321
|
+
* Creates a forge pickable chip field for selecting scopes to request during the test flow.
|
|
319
322
|
*
|
|
320
323
|
* @param availableScopes - The available scopes to display as selectable options.
|
|
321
|
-
* @returns A
|
|
324
|
+
* @returns A forge pickable chip field for scope selection.
|
|
322
325
|
*/
|
|
323
|
-
declare function
|
|
326
|
+
declare function oidcClientTestScopesForgeField(availableScopes: OidcScopeDetails[]): _dereekb_dbx_form.DbxForgeFormFieldWrapperFieldDef<_dereekb_dbx_form.DbxForgePickableChipFieldDef<unknown, OidcScopeDetails, _dereekb_util.PrimativeKey>>;
|
|
324
327
|
|
|
325
328
|
type DbxFirebaseOidcModelClientFormValue = CreateOidcClientParams;
|
|
326
329
|
type DbxFirebaseOidcModelClientUpdateFormValue = UpdateOidcClientFieldParams;
|
|
327
330
|
/**
|
|
328
|
-
* Config input for {@link
|
|
331
|
+
* Config input for {@link DbxFirebaseOidcEntryClientForgeFormComponent}.
|
|
329
332
|
*
|
|
330
333
|
* Omits `tokenEndpointAuthMethods` since the component pulls those from {@link DbxFirebaseOidcConfigService}.
|
|
331
334
|
*/
|
|
332
335
|
type DbxFirebaseOidcEntryClientFormComponentConfig = Omit<OidcEntryClientFormFieldsConfig, 'tokenEndpointAuthMethods'>;
|
|
333
336
|
/**
|
|
334
|
-
* Configurable form component for creating or updating an OAuth client.
|
|
337
|
+
* Configurable forge form component for creating or updating an OAuth client.
|
|
335
338
|
*
|
|
336
339
|
* Pass `{ mode: 'create' }` to show all fields including `token_endpoint_auth_method`.
|
|
337
340
|
* Pass `{ mode: 'update' }` to exclude `token_endpoint_auth_method` (immutable after creation).
|
|
338
341
|
*
|
|
339
342
|
* Token endpoint auth methods are pulled from the injected {@link DbxFirebaseOidcConfigService}.
|
|
340
343
|
*/
|
|
341
|
-
declare class
|
|
344
|
+
declare class DbxFirebaseOidcEntryClientForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcEntryClientFormComponentConfig> {
|
|
342
345
|
private readonly _oidcConfigService;
|
|
343
|
-
readonly
|
|
344
|
-
|
|
345
|
-
}
|
|
346
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientFormComponent, never>;
|
|
347
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientFormComponent, "dbx-firebase-oidc-client-form", never, {}, {}, never, never, true, never>;
|
|
346
|
+
readonly config$: Observable<Maybe<FormConfig>>;
|
|
347
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, never>;
|
|
348
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientForgeFormComponent, "dbx-firebase-oidc-client-forge-form", never, {}, {}, never, never, true, never>;
|
|
348
349
|
}
|
|
349
350
|
|
|
350
351
|
interface DbxFirebaseOidcModelClientTestFormValue {
|
|
@@ -354,16 +355,14 @@ interface DbxFirebaseOidcModelClientTestFormValue {
|
|
|
354
355
|
}
|
|
355
356
|
type DbxFirebaseOidcEntryClientTestFormComponentConfig = OidcEntryClientTestFormFieldsConfig;
|
|
356
357
|
/**
|
|
357
|
-
*
|
|
358
|
+
* Forge form component for configuring an OAuth test authorization request.
|
|
358
359
|
*
|
|
359
|
-
* Displays read-only client_id
|
|
360
|
+
* Displays read-only client_id, a redirect URI selector, and scope picker.
|
|
360
361
|
*/
|
|
361
|
-
declare class
|
|
362
|
-
readonly
|
|
363
|
-
|
|
364
|
-
}
|
|
365
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestFormComponent, never>;
|
|
366
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestFormComponent, "dbx-firebase-oidc-client-test-form", never, {}, {}, never, never, true, never>;
|
|
362
|
+
declare class DbxFirebaseOidcEntryClientTestForgeFormComponent extends AbstractConfigAsyncForgeFormDirective<DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcEntryClientTestFormComponentConfig> {
|
|
363
|
+
readonly config$: Observable<Maybe<FormConfig>>;
|
|
364
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, never>;
|
|
365
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientTestForgeFormComponent, "dbx-firebase-oidc-client-test-forge-form", never, {}, {}, never, never, true, never>;
|
|
367
366
|
}
|
|
368
367
|
|
|
369
368
|
type OidcEntryWithSelection = DbxValueAsListItem<OidcEntry>;
|
|
@@ -390,7 +389,7 @@ declare class DbxFirebaseOidcEntryClientListViewItemDefaultComponent {
|
|
|
390
389
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemDefaultComponent, "dbx-firebase-oidc-client-list-view-item-default", never, { "entry": { "alias": "entry"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
391
390
|
}
|
|
392
391
|
declare class DbxFirebaseOidcEntryClientListViewItemComponent extends AbstractDbxValueListViewItemComponent<OidcEntry> {
|
|
393
|
-
readonly clientType:
|
|
392
|
+
readonly clientType: string;
|
|
394
393
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, never>;
|
|
395
394
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DbxFirebaseOidcEntryClientListViewItemComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
396
395
|
}
|
|
@@ -699,5 +698,5 @@ declare class DbxFirebaseOidcInteractionService {
|
|
|
699
698
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DbxFirebaseOidcInteractionService>;
|
|
700
699
|
}
|
|
701
700
|
|
|
702
|
-
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent,
|
|
701
|
+
export { AbstractDbxFirebaseOAuthConsentScopeViewComponent, DEFAULT_OIDC_AUTHORIZATION_ENDPOINT_PATH, DEFAULT_OIDC_CLIENT_ID_PARAM_KEY, DEFAULT_OIDC_CLIENT_NAME_PARAM_KEY, DEFAULT_OIDC_CLIENT_URI_PARAM_KEY, DEFAULT_OIDC_INTERACTION_ENDPOINT_PATH, DEFAULT_OIDC_INTERACTION_UID_PARAM_KEY, DEFAULT_OIDC_LOGO_URI_PARAM_KEY, DEFAULT_OIDC_SCOPES_PARAM_KEY, DEFAULT_OIDC_TOKEN_ENDPOINT_AUTH_METHODS, DbxFirebaseOAuthConsentScopeDefaultViewComponent, DbxFirebaseOAuthConsentScopeListComponent, DbxFirebaseOAuthConsentViewComponent, DbxFirebaseOAuthLoginComponent, DbxFirebaseOAuthLoginViewComponent, DbxFirebaseOidcConfig, DbxFirebaseOidcConfigService, DbxFirebaseOidcEntryClientCreateComponent, DbxFirebaseOidcEntryClientForgeFormComponent, DbxFirebaseOidcEntryClientListComponent, DbxFirebaseOidcEntryClientListViewComponent, DbxFirebaseOidcEntryClientListViewItemClientComponent, DbxFirebaseOidcEntryClientListViewItemComponent, DbxFirebaseOidcEntryClientListViewItemDefaultComponent, DbxFirebaseOidcEntryClientTestComponent, DbxFirebaseOidcEntryClientTestForgeFormComponent, DbxFirebaseOidcEntryClientUpdateComponent, DbxFirebaseOidcEntryClientViewComponent, DbxFirebaseOidcInteractionService, DbxOAuthConsentComponent, OidcEntryCollectionStore, OidcEntryCollectionStoreDirective, OidcEntryDocumentStore, OidcEntryDocumentStoreDirective, generatePkceCodeChallenge, generatePkceCodeVerifier, oidcClientHomepageUriForgeField, oidcClientJwksUriForgeField, oidcClientLogoUriForgeField, oidcClientNameForgeField, oidcClientRedirectUrisForgeField, oidcClientTestClientIdForgeField, oidcClientTestRedirectUriForgeField, oidcClientTestScopesForgeField, oidcClientTokenEndpointAuthMethodForgeField, oidcEntryClientForgeFormFields, oidcEntryClientTestForgeFormFields, oidcEntryClientUpdateForgeFormFields, provideDbxFirebaseOidc, provideOidcModelFirestoreCollections };
|
|
703
702
|
export type { DbxFirebaseOAuthConsentScopesViewData, DbxFirebaseOidcEntryClientFormComponentConfig, DbxFirebaseOidcEntryClientTestFormComponentConfig, DbxFirebaseOidcModelClientFormValue, DbxFirebaseOidcModelClientTestFormValue, DbxFirebaseOidcModelClientUpdateFormValue, DbxOAuthConsentComponentConfig, OAuthConsentScope, OidcEntryClientFormFieldsConfig, OidcEntryClientTestFormFieldsConfig, OidcEntryWithSelection, OidcLoginStateCase, ProvideDbxFirebaseOidcConfig };
|