-
-
Notifications
You must be signed in to change notification settings - Fork 1
fix: resolve plugin registration and cross-tenant auth issues (#59) #60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 4 commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
0638698
feat(plugins): enhance registration config and extraction
joshsmithxrm 55c8196
fix(auth): honor profile's auth method on silent auth failure (#59)
joshsmithxrm 3737143
fix(auth): implement tenant-aware MSAL account selection (#59)
joshsmithxrm f210133
docs: update changelogs for issue #59 fixes
joshsmithxrm 4e5e33e
chore: prepare releases Auth-v1.0.0-beta.2 and Cli-v1.0.0-beta.3
joshsmithxrm 1141dcd
refactor: address PR review feedback
joshsmithxrm File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,200 @@ | ||
| { | ||
| "$schema": "http://json-schema.org/draft-07/schema#", | ||
| "$id": "https://raw.githubusercontent.com/joshsmithxrm/ppds-sdk/main/schemas/plugin-registration.schema.json", | ||
| "title": "PPDS Plugin Registration Configuration", | ||
| "description": "Schema for plugin registration configuration files used by the PPDS CLI.", | ||
| "type": "object", | ||
| "properties": { | ||
| "$schema": { | ||
| "type": "string", | ||
| "description": "JSON schema reference for validation." | ||
| }, | ||
| "version": { | ||
| "type": "string", | ||
| "description": "Schema version for forward compatibility.", | ||
| "default": "1.0" | ||
| }, | ||
| "generatedAt": { | ||
| "type": "string", | ||
| "format": "date-time", | ||
| "description": "Timestamp when the configuration was generated (Zulu time format)." | ||
| }, | ||
| "assemblies": { | ||
| "type": "array", | ||
| "description": "List of plugin assemblies in this configuration.", | ||
| "items": { | ||
| "$ref": "#/$defs/assembly" | ||
| } | ||
| } | ||
| }, | ||
| "required": ["assemblies"], | ||
| "additionalProperties": true, | ||
| "$defs": { | ||
| "assembly": { | ||
| "type": "object", | ||
| "description": "Configuration for a single plugin assembly.", | ||
| "properties": { | ||
| "name": { | ||
| "type": "string", | ||
| "description": "Assembly name (without extension)." | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "enum": ["Assembly", "Nuget"], | ||
| "description": "Assembly type: 'Assembly' for classic DLL, 'Nuget' for NuGet package.", | ||
| "default": "Assembly" | ||
| }, | ||
| "path": { | ||
| "type": "string", | ||
| "description": "Relative path to the assembly DLL (from the config file location). Use forward slashes for cross-platform compatibility." | ||
| }, | ||
| "packagePath": { | ||
| "type": "string", | ||
| "description": "Relative path to the NuGet package (for Nuget type only)." | ||
| }, | ||
| "solution": { | ||
| "type": "string", | ||
| "description": "Solution unique name to add components to." | ||
| }, | ||
| "allTypeNames": { | ||
| "type": "array", | ||
| "items": { | ||
| "type": "string" | ||
| }, | ||
| "description": "All plugin type names in this assembly (for orphan detection)." | ||
| }, | ||
| "types": { | ||
| "type": "array", | ||
| "description": "Plugin types with their step registrations.", | ||
| "items": { | ||
| "$ref": "#/$defs/pluginType" | ||
| } | ||
| } | ||
| }, | ||
| "required": ["name", "types"], | ||
| "additionalProperties": true | ||
| }, | ||
| "pluginType": { | ||
| "type": "object", | ||
| "description": "Configuration for a single plugin type (class).", | ||
| "properties": { | ||
| "typeName": { | ||
| "type": "string", | ||
| "description": "Fully qualified type name (namespace.classname)." | ||
| }, | ||
| "steps": { | ||
| "type": "array", | ||
| "description": "Step registrations for this plugin type.", | ||
| "items": { | ||
| "$ref": "#/$defs/step" | ||
| } | ||
| } | ||
| }, | ||
| "required": ["typeName", "steps"], | ||
| "additionalProperties": true | ||
| }, | ||
| "step": { | ||
| "type": "object", | ||
| "description": "Configuration for a single plugin step registration.", | ||
| "properties": { | ||
| "name": { | ||
| "type": "string", | ||
| "description": "Display name for the step. Auto-generated if not specified: '{TypeName}: {Message} of {Entity}'." | ||
| }, | ||
| "message": { | ||
| "type": "string", | ||
| "description": "SDK message name (Create, Update, Delete, Retrieve, etc.)." | ||
| }, | ||
| "entity": { | ||
| "type": "string", | ||
| "description": "Primary entity logical name. Use 'none' for global messages." | ||
| }, | ||
| "secondaryEntity": { | ||
| "type": "string", | ||
| "description": "Secondary entity logical name for relationship messages (Associate, etc.)." | ||
| }, | ||
| "stage": { | ||
| "type": "string", | ||
| "enum": ["PreValidation", "PreOperation", "MainOperation", "PostOperation"], | ||
| "description": "Pipeline stage. MainOperation is for Custom API plugins." | ||
| }, | ||
| "mode": { | ||
| "type": "string", | ||
| "enum": ["Synchronous", "Asynchronous"], | ||
| "description": "Execution mode.", | ||
| "default": "Synchronous" | ||
| }, | ||
| "executionOrder": { | ||
| "type": "integer", | ||
| "description": "Execution order when multiple plugins handle the same event.", | ||
| "default": 1 | ||
| }, | ||
| "filteringAttributes": { | ||
| "type": "string", | ||
| "description": "Comma-separated list of attributes that trigger this step (Update message only)." | ||
| }, | ||
| "unsecureConfiguration": { | ||
| "type": "string", | ||
| "description": "Unsecure configuration string passed to plugin constructor. Safe for source control." | ||
| }, | ||
| "deployment": { | ||
| "type": "string", | ||
| "enum": ["ServerOnly", "Offline", "Both"], | ||
| "description": "Deployment target.", | ||
| "default": "ServerOnly" | ||
| }, | ||
| "runAsUser": { | ||
| "type": "string", | ||
| "description": "User context to run the plugin as. Use 'CallingUser' (default), 'System', or a systemuser GUID." | ||
| }, | ||
| "description": { | ||
| "type": "string", | ||
| "description": "Description of what this step does." | ||
| }, | ||
| "asyncAutoDelete": { | ||
| "type": "boolean", | ||
| "description": "For async steps, whether to delete the async job on successful completion.", | ||
| "default": false | ||
| }, | ||
| "stepId": { | ||
| "type": "string", | ||
| "description": "Step identifier for associating images with specific steps on multi-step plugins." | ||
| }, | ||
| "images": { | ||
| "type": "array", | ||
| "description": "Entity images registered for this step.", | ||
| "items": { | ||
| "$ref": "#/$defs/image" | ||
| } | ||
| } | ||
| }, | ||
| "required": ["message", "entity", "stage"], | ||
| "additionalProperties": true | ||
| }, | ||
| "image": { | ||
| "type": "object", | ||
| "description": "Configuration for a plugin step image (pre-image or post-image).", | ||
| "properties": { | ||
| "name": { | ||
| "type": "string", | ||
| "description": "Name used to access the image in plugin context." | ||
| }, | ||
| "entityAlias": { | ||
| "type": "string", | ||
| "description": "Entity alias for the image. Defaults to 'name' if not specified." | ||
| }, | ||
| "imageType": { | ||
| "type": "string", | ||
| "enum": ["PreImage", "PostImage", "Both"], | ||
| "description": "Image type." | ||
| }, | ||
| "attributes": { | ||
| "type": "string", | ||
| "description": "Comma-separated list of attributes to include. Null means all attributes (not recommended for performance)." | ||
| } | ||
| }, | ||
| "required": ["name", "entityAlias", "imageType"], | ||
| "additionalProperties": true | ||
| } | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.