@decohere/create 0.0.1-dev.36 → 0.0.1-dev.38
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/commonjs/src/models/compose.model.js +5 -1
- package/commonjs/src/webapi/features/database.feature.js +82 -19
- package/commonjs/src/webapi/features/postman.feature.js +30 -329
- package/commonjs/src/webapi/postman/hello-openapi.js +175 -0
- package/commonjs/src/webapi/postman/local-view.js +184 -0
- package/commonjs/src/webapi/postman/openapi-to-postman.js +202 -0
- package/es6/src/models/compose.model.js +5 -1
- package/es6/src/webapi/features/database.feature.js +82 -19
- package/es6/src/webapi/features/postman.feature.js +25 -329
- package/es6/src/webapi/postman/hello-openapi.js +168 -0
- package/es6/src/webapi/postman/local-view.js +169 -0
- package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
- package/package.json +4 -3
- package/types/src/models/compose.model.d.ts +2 -0
- package/types/src/webapi/features/postman.feature.d.ts +4 -0
- package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
- package/types/src/webapi/postman/local-view.d.ts +17 -0
- package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/** Minimal OpenAPI 3 document shape used for Postman conversion. */ /**
|
|
2
|
+
* Canonical Hello WebAPI OpenAPI document used to generate Postman requests.
|
|
3
|
+
* Keep paths aligned with scaffolded HelloController (`/hello`, `/hello/{id}`).
|
|
4
|
+
*/ export function buildHelloOpenApiDocument(projectName) {
|
|
5
|
+
return {
|
|
6
|
+
openapi: "3.0.3",
|
|
7
|
+
info: {
|
|
8
|
+
title: `${projectName} WebAPI`,
|
|
9
|
+
version: "1.0.0",
|
|
10
|
+
description: "Generated from OpenAPI for Postman. Auth/env overlays are applied separately."
|
|
11
|
+
},
|
|
12
|
+
servers: [
|
|
13
|
+
{
|
|
14
|
+
url: "{{baseUrl}}"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
paths: {
|
|
18
|
+
"/hello": {
|
|
19
|
+
get: {
|
|
20
|
+
operationId: "HelloController.getAll",
|
|
21
|
+
summary: "List (anonymous)",
|
|
22
|
+
tags: [
|
|
23
|
+
"Hello"
|
|
24
|
+
],
|
|
25
|
+
parameters: [
|
|
26
|
+
{
|
|
27
|
+
name: "filter",
|
|
28
|
+
in: "query",
|
|
29
|
+
required: false,
|
|
30
|
+
schema: {
|
|
31
|
+
type: "string"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
responses: {
|
|
36
|
+
"200": {
|
|
37
|
+
description: "Successful response"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
post: {
|
|
42
|
+
operationId: "HelloController.create",
|
|
43
|
+
summary: "Create",
|
|
44
|
+
tags: [
|
|
45
|
+
"Hello"
|
|
46
|
+
],
|
|
47
|
+
requestBody: {
|
|
48
|
+
required: true,
|
|
49
|
+
content: {
|
|
50
|
+
"application/json": {
|
|
51
|
+
schema: {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: {
|
|
54
|
+
message: {
|
|
55
|
+
type: "string"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
required: [
|
|
59
|
+
"message"
|
|
60
|
+
],
|
|
61
|
+
example: {
|
|
62
|
+
message: "hello"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
responses: {
|
|
69
|
+
"200": {
|
|
70
|
+
description: "Successful response"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"/hello/{id}": {
|
|
76
|
+
get: {
|
|
77
|
+
operationId: "HelloController.getOne",
|
|
78
|
+
summary: "Get by id",
|
|
79
|
+
tags: [
|
|
80
|
+
"Hello"
|
|
81
|
+
],
|
|
82
|
+
parameters: [
|
|
83
|
+
{
|
|
84
|
+
name: "id",
|
|
85
|
+
in: "path",
|
|
86
|
+
required: true,
|
|
87
|
+
schema: {
|
|
88
|
+
type: "string"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
responses: {
|
|
93
|
+
"200": {
|
|
94
|
+
description: "Successful response"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
put: {
|
|
99
|
+
operationId: "HelloController.update",
|
|
100
|
+
summary: "Update",
|
|
101
|
+
tags: [
|
|
102
|
+
"Hello"
|
|
103
|
+
],
|
|
104
|
+
parameters: [
|
|
105
|
+
{
|
|
106
|
+
name: "id",
|
|
107
|
+
in: "path",
|
|
108
|
+
required: true,
|
|
109
|
+
schema: {
|
|
110
|
+
type: "string"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
requestBody: {
|
|
115
|
+
required: true,
|
|
116
|
+
content: {
|
|
117
|
+
"application/json": {
|
|
118
|
+
schema: {
|
|
119
|
+
type: "object",
|
|
120
|
+
properties: {
|
|
121
|
+
message: {
|
|
122
|
+
type: "string"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
required: [
|
|
126
|
+
"message"
|
|
127
|
+
],
|
|
128
|
+
example: {
|
|
129
|
+
message: "updated"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
responses: {
|
|
136
|
+
"200": {
|
|
137
|
+
description: "Successful response"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
delete: {
|
|
142
|
+
operationId: "HelloController.remove",
|
|
143
|
+
summary: "Delete",
|
|
144
|
+
tags: [
|
|
145
|
+
"Hello"
|
|
146
|
+
],
|
|
147
|
+
parameters: [
|
|
148
|
+
{
|
|
149
|
+
name: "id",
|
|
150
|
+
in: "path",
|
|
151
|
+
required: true,
|
|
152
|
+
schema: {
|
|
153
|
+
type: "string"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
responses: {
|
|
158
|
+
"200": {
|
|
159
|
+
description: "Successful response"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vaGVsbG8tb3BlbmFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTWluaW1hbCBPcGVuQVBJIDMgZG9jdW1lbnQgc2hhcGUgdXNlZCBmb3IgUG9zdG1hbiBjb252ZXJzaW9uLiAqL1xuZXhwb3J0IHR5cGUgU2NhZmZvbGRPcGVuQXBpRG9jdW1lbnQgPSB7XG5cdG9wZW5hcGk6IFwiMy4wLjNcIjtcblx0aW5mbzogeyB0aXRsZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH07XG5cdHNlcnZlcnM/OiBBcnJheTx7IHVybDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9Pjtcblx0cGF0aHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn07XG5cbi8qKlxuICogQ2Fub25pY2FsIEhlbGxvIFdlYkFQSSBPcGVuQVBJIGRvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgUG9zdG1hbiByZXF1ZXN0cy5cbiAqIEtlZXAgcGF0aHMgYWxpZ25lZCB3aXRoIHNjYWZmb2xkZWQgSGVsbG9Db250cm9sbGVyIChgL2hlbGxvYCwgYC9oZWxsby97aWR9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEhlbGxvT3BlbkFwaURvY3VtZW50KHByb2plY3ROYW1lOiBzdHJpbmcpOiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCB7XG5cdHJldHVybiB7XG5cdFx0b3BlbmFwaTogXCIzLjAuM1wiLFxuXHRcdGluZm86IHtcblx0XHRcdHRpdGxlOiBgJHtwcm9qZWN0TmFtZX0gV2ViQVBJYCxcblx0XHRcdHZlcnNpb246IFwiMS4wLjBcIixcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIkdlbmVyYXRlZCBmcm9tIE9wZW5BUEkgZm9yIFBvc3RtYW4uIEF1dGgvZW52IG92ZXJsYXlzIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkuXCIsXG5cdFx0fSxcblx0XHRzZXJ2ZXJzOiBbeyB1cmw6IFwie3tiYXNlVXJsfX1cIiB9XSxcblx0XHRwYXRoczoge1xuXHRcdFx0XCIvaGVsbG9cIjoge1xuXHRcdFx0XHRnZXQ6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuZ2V0QWxsXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJMaXN0IChhbm9ueW1vdXMpXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImZpbHRlclwiLCBpbjogXCJxdWVyeVwiLCByZXF1aXJlZDogZmFsc2UsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBvc3Q6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuY3JlYXRlXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJDcmVhdGVcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRyZXF1ZXN0Qm9keToge1xuXHRcdFx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFwiYXBwbGljYXRpb24vanNvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0c2NoZW1hOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIm9iamVjdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogeyBtZXNzYWdlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWQ6IFtcIm1lc3NhZ2VcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRleGFtcGxlOiB7IG1lc3NhZ2U6IFwiaGVsbG9cIiB9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRcIi9oZWxsby97aWR9XCI6IHtcblx0XHRcdFx0Z2V0OiB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uSWQ6IFwiSGVsbG9Db250cm9sbGVyLmdldE9uZVwiLFxuXHRcdFx0XHRcdHN1bW1hcnk6IFwiR2V0IGJ5IGlkXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW3sgbmFtZTogXCJpZFwiLCBpbjogXCJwYXRoXCIsIHJlcXVpcmVkOiB0cnVlLCBzY2hlbWE6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1dLFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB1dDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci51cGRhdGVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIlVwZGF0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwiaWRcIiwgaW46IFwicGF0aFwiLCByZXF1aXJlZDogdHJ1ZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XSxcblx0XHRcdFx0XHRyZXF1ZXN0Qm9keToge1xuXHRcdFx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFwiYXBwbGljYXRpb24vanNvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0c2NoZW1hOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIm9iamVjdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogeyBtZXNzYWdlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWQ6IFtcIm1lc3NhZ2VcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRleGFtcGxlOiB7IG1lc3NhZ2U6IFwidXBkYXRlZFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZWxldGU6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIucmVtb3ZlXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJEZWxldGVcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcImlkXCIsIGluOiBcInBhdGhcIiwgcmVxdWlyZWQ6IHRydWUsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfV0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSxcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJidWlsZEhlbGxvT3BlbkFwaURvY3VtZW50IiwicHJvamVjdE5hbWUiLCJvcGVuYXBpIiwiaW5mbyIsInRpdGxlIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2VydmVycyIsInVybCIsInBhdGhzIiwiZ2V0Iiwib3BlcmF0aW9uSWQiLCJzdW1tYXJ5IiwidGFncyIsInBhcmFtZXRlcnMiLCJuYW1lIiwiaW4iLCJyZXF1aXJlZCIsInNjaGVtYSIsInR5cGUiLCJyZXNwb25zZXMiLCJwb3N0IiwicmVxdWVzdEJvZHkiLCJjb250ZW50IiwicHJvcGVydGllcyIsIm1lc3NhZ2UiLCJleGFtcGxlIiwicHV0IiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxrRUFBa0UsR0FRbEU7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQSwwQkFBMEJDLFdBQW1CO0lBQzVELE9BQU87UUFDTkMsU0FBUztRQUNUQyxNQUFNO1lBQ0xDLE9BQU8sR0FBR0gsWUFBWSxPQUFPLENBQUM7WUFDOUJJLFNBQVM7WUFDVEMsYUFDQztRQUNGO1FBQ0FDLFNBQVM7WUFBQztnQkFBRUMsS0FBSztZQUFjO1NBQUU7UUFDakNDLE9BQU87WUFDTixVQUFVO2dCQUNUQyxLQUFLO29CQUNKQyxhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUNYOzRCQUFFQyxNQUFNOzRCQUFVQyxJQUFJOzRCQUFTQyxVQUFVOzRCQUFPQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUMzRTtvQkFDREMsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7Z0JBQ0FlLE1BQU07b0JBQ0xWLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZTLGFBQWE7d0JBQ1pMLFVBQVU7d0JBQ1ZNLFNBQVM7NEJBQ1Isb0JBQW9CO2dDQUNuQkwsUUFBUTtvQ0FDUEMsTUFBTTtvQ0FDTkssWUFBWTt3Q0FBRUMsU0FBUzs0Q0FBRU4sTUFBTTt3Q0FBUztvQ0FBRTtvQ0FDMUNGLFVBQVU7d0NBQUM7cUNBQVU7b0NBQ3JCUyxTQUFTO3dDQUFFRCxTQUFTO29DQUFRO2dDQUM3Qjs0QkFDRDt3QkFDRDtvQkFDRDtvQkFDQUwsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7WUFDRDtZQUNBLGVBQWU7Z0JBQ2RJLEtBQUs7b0JBQ0pDLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQXFCLEtBQUs7b0JBQ0poQixhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUFDOzRCQUFFQyxNQUFNOzRCQUFNQyxJQUFJOzRCQUFRQyxVQUFVOzRCQUFNQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUFFO29CQUNwRkcsYUFBYTt3QkFDWkwsVUFBVTt3QkFDVk0sU0FBUzs0QkFDUixvQkFBb0I7Z0NBQ25CTCxRQUFRO29DQUNQQyxNQUFNO29DQUNOSyxZQUFZO3dDQUFFQyxTQUFTOzRDQUFFTixNQUFNO3dDQUFTO29DQUFFO29DQUMxQ0YsVUFBVTt3Q0FBQztxQ0FBVTtvQ0FDckJTLFNBQVM7d0NBQUVELFNBQVM7b0NBQVU7Z0NBQy9COzRCQUNEO3dCQUNEO29CQUNEO29CQUNBTCxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQXNCLFFBQVE7b0JBQ1BqQixhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUFDOzRCQUFFQyxNQUFNOzRCQUFNQyxJQUFJOzRCQUFRQyxVQUFVOzRCQUFNQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUFFO29CQUNwRkMsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7WUFDRDtRQUNEO0lBQ0Q7QUFDRCJ9
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { openApiPathParamsToColon } from "./openapi-to-postman.js";
|
|
3
|
+
function yamlQuote(value) {
|
|
4
|
+
if (/[:#{}[\],&*?|<>=!%@`]/.test(value) || value.includes("\n") || value === "") {
|
|
5
|
+
return JSON.stringify(value);
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
/** Local View / Native Git environment (YAML). */ export function buildEnvironmentYaml(name, auth, options) {
|
|
10
|
+
const values = [
|
|
11
|
+
{
|
|
12
|
+
key: "baseUrl",
|
|
13
|
+
value: "http://localhost:3000"
|
|
14
|
+
}
|
|
15
|
+
];
|
|
16
|
+
if (auth?.auth0Domain) {
|
|
17
|
+
values.push({
|
|
18
|
+
key: "auth0Domain",
|
|
19
|
+
value: auth.auth0Domain
|
|
20
|
+
}, {
|
|
21
|
+
key: "auth0Audience",
|
|
22
|
+
value: auth.auth0Audience ?? ""
|
|
23
|
+
}, {
|
|
24
|
+
key: "auth0ClientId",
|
|
25
|
+
value: auth.auth0ClientId ?? ""
|
|
26
|
+
}, {
|
|
27
|
+
key: "authUrl",
|
|
28
|
+
value: `https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`
|
|
29
|
+
}, {
|
|
30
|
+
key: "accessTokenUrl",
|
|
31
|
+
value: `https://${auth.auth0Domain}/oauth/token`
|
|
32
|
+
}, {
|
|
33
|
+
key: "callbackUrl",
|
|
34
|
+
value: options.callbacks[0]
|
|
35
|
+
}, {
|
|
36
|
+
key: "scope",
|
|
37
|
+
value: options.scopes
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const lines = [
|
|
41
|
+
`name: ${yamlQuote(name)}`,
|
|
42
|
+
"values:"
|
|
43
|
+
];
|
|
44
|
+
for (const v of values){
|
|
45
|
+
lines.push(` - key: ${v.key}`);
|
|
46
|
+
lines.push(` value: ${yamlQuote(v.value)}`);
|
|
47
|
+
lines.push(" enabled: true");
|
|
48
|
+
}
|
|
49
|
+
return `${lines.join("\n")}\n`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build Postman Local View multi-file YAML from a v2.1 collection (routes)
|
|
53
|
+
* plus hand-authored Auth0 overlay.
|
|
54
|
+
*/ export function buildLocalViewFilesFromCollection(collection, projectName, auth, options) {
|
|
55
|
+
const collectionDir = `postman/collections/${projectName} WebAPI`;
|
|
56
|
+
const files = [];
|
|
57
|
+
const authBlock = auth?.auth0Domain ? [
|
|
58
|
+
"auth:",
|
|
59
|
+
` - id: ${randomUUID()}`,
|
|
60
|
+
" type: oauth2",
|
|
61
|
+
" name: OAuth 2.0",
|
|
62
|
+
" credentials:",
|
|
63
|
+
" addTokenTo: header",
|
|
64
|
+
" grant_type: authorization_code_with_pkce",
|
|
65
|
+
` authUrl: https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`,
|
|
66
|
+
` accessTokenUrl: https://${auth.auth0Domain}/oauth/token`,
|
|
67
|
+
` clientId: ${yamlQuote(auth.auth0ClientId ?? "")}`,
|
|
68
|
+
` scope: ${yamlQuote(options.scopes)}`,
|
|
69
|
+
` redirect_uri: ${options.callbacks[0]}`,
|
|
70
|
+
" useBrowser: true",
|
|
71
|
+
" challengeAlgorithm: S256",
|
|
72
|
+
" client_authentication: body",
|
|
73
|
+
' clientSecret: ""',
|
|
74
|
+
` tokenName: ${yamlQuote(`${projectName} Access Token`)}`,
|
|
75
|
+
""
|
|
76
|
+
].join("\n") : "";
|
|
77
|
+
files.push({
|
|
78
|
+
filePath: `${collectionDir}/.resources/definition.yaml`,
|
|
79
|
+
content: [
|
|
80
|
+
"$kind: collection",
|
|
81
|
+
`name: ${yamlQuote(`${projectName} WebAPI`)}`,
|
|
82
|
+
"schemaVersion: '3.0'",
|
|
83
|
+
"description: >-",
|
|
84
|
+
" Open this project root in Postman Local View (Files → Open folder).",
|
|
85
|
+
" Select the Local environment, then Authorization → Get New Access Token (PKCE).",
|
|
86
|
+
" Route requests are generated from OpenAPI; Auth0 overlay is hand-authored.",
|
|
87
|
+
authBlock
|
|
88
|
+
].filter((l)=>l !== undefined).join("\n").replace(/\n+$/, "\n")
|
|
89
|
+
});
|
|
90
|
+
let folderOrder = 1000;
|
|
91
|
+
for (const folder of collection.item ?? []){
|
|
92
|
+
if (folder.item == null) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const folderName = folder.name ?? "Requests";
|
|
96
|
+
files.push({
|
|
97
|
+
filePath: `${collectionDir}/${folderName}/.resources/definition.yaml`,
|
|
98
|
+
content: [
|
|
99
|
+
"$kind: folder",
|
|
100
|
+
`name: ${yamlQuote(folderName)}`,
|
|
101
|
+
`order: ${folderOrder}`,
|
|
102
|
+
""
|
|
103
|
+
].join("\n")
|
|
104
|
+
});
|
|
105
|
+
folderOrder += 1000;
|
|
106
|
+
let requestOrder = 1000;
|
|
107
|
+
for (const child of folder.item){
|
|
108
|
+
const yaml = requestToLocalViewYaml(child, requestOrder);
|
|
109
|
+
if (yaml == null) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const fileName = `${sanitizeFileName(child.name ?? "Request")}.request.yaml`;
|
|
113
|
+
files.push({
|
|
114
|
+
filePath: `${collectionDir}/${folderName}/${fileName}`,
|
|
115
|
+
content: yaml
|
|
116
|
+
});
|
|
117
|
+
requestOrder += 1000;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return files;
|
|
121
|
+
}
|
|
122
|
+
function requestToLocalViewYaml(item, order) {
|
|
123
|
+
const request = item.request;
|
|
124
|
+
if (request == null) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const method = (request.method ?? "GET").toUpperCase();
|
|
128
|
+
const url = requestUrlForLocalView(request);
|
|
129
|
+
const lines = [
|
|
130
|
+
"$kind: http-request",
|
|
131
|
+
`name: ${yamlQuote(item.name ?? method)}`,
|
|
132
|
+
`method: ${method}`,
|
|
133
|
+
`url: ${yamlQuote(url)}`
|
|
134
|
+
];
|
|
135
|
+
if (request.auth?.type === "noauth") {
|
|
136
|
+
lines.push("auth:", " type: noauth");
|
|
137
|
+
}
|
|
138
|
+
const contentType = request.header?.find((h)=>h.key.toLowerCase() === "content-type")?.value;
|
|
139
|
+
const rawBody = request.body?.raw?.trim();
|
|
140
|
+
if (rawBody) {
|
|
141
|
+
lines.push("headers:");
|
|
142
|
+
lines.push(` Content-Type: ${contentType ?? "application/json"}`);
|
|
143
|
+
lines.push("body:");
|
|
144
|
+
lines.push(" type: json");
|
|
145
|
+
lines.push(" content: |-");
|
|
146
|
+
for (const bodyLine of rawBody.split("\n")){
|
|
147
|
+
lines.push(` ${bodyLine}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
lines.push(`order: ${order}`, "");
|
|
151
|
+
return lines.join("\n");
|
|
152
|
+
}
|
|
153
|
+
function requestUrlForLocalView(request) {
|
|
154
|
+
const url = request.url;
|
|
155
|
+
if (typeof url === "string") {
|
|
156
|
+
return openApiPathParamsToColon(url);
|
|
157
|
+
}
|
|
158
|
+
if (url?.raw) {
|
|
159
|
+
return openApiPathParamsToColon(url.raw);
|
|
160
|
+
}
|
|
161
|
+
const host = url?.host?.[0] ?? "{{baseUrl}}";
|
|
162
|
+
const path = (url?.path ?? []).map((segment)=>openApiPathParamsToColon(String(segment))).join("/");
|
|
163
|
+
return path ? `${host}/${path}` : host;
|
|
164
|
+
}
|
|
165
|
+
function sanitizeFileName(name) {
|
|
166
|
+
return name.replace(/[^\w\s()-]+/g, "").trim() || "Request";
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vbG9jYWwtdmlldy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuXHR0eXBlIEF1dGgwRW52LFxuXHRvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24sXG5cdHR5cGUgUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHR5cGUgUG9zdG1hbkl0ZW0sXG5cdHR5cGUgUG9zdG1hblJlcXVlc3QsXG59IGZyb20gXCIuL29wZW5hcGktdG8tcG9zdG1hbi5qc1wiO1xuXG5mdW5jdGlvbiB5YW1sUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICgvWzoje31bXFxdLCYqP3w8Pj0hJUBgXS8udGVzdCh2YWx1ZSkgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXG5cIikgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIExvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGVudmlyb25tZW50IChZQU1MKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVudmlyb25tZW50WWFtbChcblx0bmFtZTogc3RyaW5nLFxuXHRhdXRoOiBBdXRoMEVudiB8IHVuZGVmaW5lZCxcblx0b3B0aW9uczogeyBjYWxsYmFja3M6IHJlYWRvbmx5IHN0cmluZ1tdOyBzY29wZXM6IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcblx0Y29uc3QgdmFsdWVzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gW1xuXHRcdHsga2V5OiBcImJhc2VVcmxcIiwgdmFsdWU6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIgfSxcblx0XTtcblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0dmFsdWVzLnB1c2goXG5cdFx0XHR7IGtleTogXCJhdXRoMERvbWFpblwiLCB2YWx1ZTogYXV0aC5hdXRoMERvbWFpbiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCIgfSxcblx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiIH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdHZhbHVlOiBgaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0fSxcblx0XHRcdHsga2V5OiBcImNhbGxiYWNrVXJsXCIsIHZhbHVlOiBvcHRpb25zLmNhbGxiYWNrc1swXSB9LFxuXHRcdFx0eyBrZXk6IFwic2NvcGVcIiwgdmFsdWU6IG9wdGlvbnMuc2NvcGVzIH0sXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGxpbmVzID0gW2BuYW1lOiAke3lhbWxRdW90ZShuYW1lKX1gLCBcInZhbHVlczpcIl07XG5cdGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcblx0XHRsaW5lcy5wdXNoKGAgIC0ga2V5OiAke3Yua2V5fWApO1xuXHRcdGxpbmVzLnB1c2goYCAgICB2YWx1ZTogJHt5YW1sUXVvdGUodi52YWx1ZSl9YCk7XG5cdFx0bGluZXMucHVzaChcIiAgICBlbmFibGVkOiB0cnVlXCIpO1xuXHR9XG5cdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG59XG5cbi8qKlxuICogQnVpbGQgUG9zdG1hbiBMb2NhbCBWaWV3IG11bHRpLWZpbGUgWUFNTCBmcm9tIGEgdjIuMSBjb2xsZWN0aW9uIChyb3V0ZXMpXG4gKiBwbHVzIGhhbmQtYXV0aG9yZWQgQXV0aDAgb3ZlcmxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxWaWV3RmlsZXNGcm9tQ29sbGVjdGlvbihcblx0Y29sbGVjdGlvbjogUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7IGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107IHNjb3Blczogc3RyaW5nIH0sXG4pOiBBcnJheTx7IGZpbGVQYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiB7XG5cdGNvbnN0IGNvbGxlY3Rpb25EaXIgPSBgcG9zdG1hbi9jb2xsZWN0aW9ucy8ke3Byb2plY3ROYW1lfSBXZWJBUElgO1xuXHRjb25zdCBmaWxlczogQXJyYXk8eyBmaWxlUGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4gPSBbXTtcblxuXHRjb25zdCBhdXRoQmxvY2sgPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8gW1xuXHRcdFx0XHRcImF1dGg6XCIsXG5cdFx0XHRcdGAgIC0gaWQ6ICR7cmFuZG9tVVVJRCgpfWAsXG5cdFx0XHRcdFwiICAgIHR5cGU6IG9hdXRoMlwiLFxuXHRcdFx0XHRcIiAgICBuYW1lOiBPQXV0aCAyLjBcIixcblx0XHRcdFx0XCIgICAgY3JlZGVudGlhbHM6XCIsXG5cdFx0XHRcdFwiICAgICAgYWRkVG9rZW5UbzogaGVhZGVyXCIsXG5cdFx0XHRcdFwiICAgICAgZ3JhbnRfdHlwZTogYXV0aG9yaXphdGlvbl9jb2RlX3dpdGhfcGtjZVwiLFxuXHRcdFx0XHRgICAgICAgYXV0aFVybDogaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHRcdGAgICAgICBhY2Nlc3NUb2tlblVybDogaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L29hdXRoL3Rva2VuYCxcblx0XHRcdFx0YCAgICAgIGNsaWVudElkOiAke3lhbWxRdW90ZShhdXRoLmF1dGgwQ2xpZW50SWQgPz8gXCJcIil9YCxcblx0XHRcdFx0YCAgICAgIHNjb3BlOiAke3lhbWxRdW90ZShvcHRpb25zLnNjb3Blcyl9YCxcblx0XHRcdFx0YCAgICAgIHJlZGlyZWN0X3VyaTogJHtvcHRpb25zLmNhbGxiYWNrc1swXX1gLFxuXHRcdFx0XHRcIiAgICAgIHVzZUJyb3dzZXI6IHRydWVcIixcblx0XHRcdFx0XCIgICAgICBjaGFsbGVuZ2VBbGdvcml0aG06IFMyNTZcIixcblx0XHRcdFx0XCIgICAgICBjbGllbnRfYXV0aGVudGljYXRpb246IGJvZHlcIixcblx0XHRcdFx0JyAgICAgIGNsaWVudFNlY3JldDogXCJcIicsXG5cdFx0XHRcdGAgICAgICB0b2tlbk5hbWU6ICR7eWFtbFF1b3RlKGAke3Byb2plY3ROYW1lfSBBY2Nlc3MgVG9rZW5gKX1gLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpXG5cdFx0OiBcIlwiO1xuXG5cdGZpbGVzLnB1c2goe1xuXHRcdGZpbGVQYXRoOiBgJHtjb2xsZWN0aW9uRGlyfS8ucmVzb3VyY2VzL2RlZmluaXRpb24ueWFtbGAsXG5cdFx0Y29udGVudDogW1xuXHRcdFx0XCIka2luZDogY29sbGVjdGlvblwiLFxuXHRcdFx0YG5hbWU6ICR7eWFtbFF1b3RlKGAke3Byb2plY3ROYW1lfSBXZWJBUElgKX1gLFxuXHRcdFx0XCJzY2hlbWFWZXJzaW9uOiAnMy4wJ1wiLFxuXHRcdFx0XCJkZXNjcmlwdGlvbjogPi1cIixcblx0XHRcdFwiICBPcGVuIHRoaXMgcHJvamVjdCByb290IGluIFBvc3RtYW4gTG9jYWwgVmlldyAoRmlsZXMg4oaSIE9wZW4gZm9sZGVyKS5cIixcblx0XHRcdFwiICBTZWxlY3QgdGhlIExvY2FsIGVudmlyb25tZW50LCB0aGVuIEF1dGhvcml6YXRpb24g4oaSIEdldCBOZXcgQWNjZXNzIFRva2VuIChQS0NFKS5cIixcblx0XHRcdFwiICBSb3V0ZSByZXF1ZXN0cyBhcmUgZ2VuZXJhdGVkIGZyb20gT3BlbkFQSTsgQXV0aDAgb3ZlcmxheSBpcyBoYW5kLWF1dGhvcmVkLlwiLFxuXHRcdFx0YXV0aEJsb2NrLFxuXHRcdF1cblx0XHRcdC5maWx0ZXIoKGwpID0+IGwgIT09IHVuZGVmaW5lZClcblx0XHRcdC5qb2luKFwiXFxuXCIpXG5cdFx0XHQucmVwbGFjZSgvXFxuKyQvLCBcIlxcblwiKSxcblx0fSk7XG5cblx0bGV0IGZvbGRlck9yZGVyID0gMTAwMDtcblx0Zm9yIChjb25zdCBmb2xkZXIgb2YgY29sbGVjdGlvbi5pdGVtID8/IFtdKSB7XG5cdFx0aWYgKGZvbGRlci5pdGVtID09IG51bGwpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBmb2xkZXJOYW1lID0gZm9sZGVyLm5hbWUgPz8gXCJSZXF1ZXN0c1wiO1xuXHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9LyR7Zm9sZGVyTmFtZX0vLnJlc291cmNlcy9kZWZpbml0aW9uLnlhbWxgLFxuXHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcIiRraW5kOiBmb2xkZXJcIixcblx0XHRcdFx0YG5hbWU6ICR7eWFtbFF1b3RlKGZvbGRlck5hbWUpfWAsXG5cdFx0XHRcdGBvcmRlcjogJHtmb2xkZXJPcmRlcn1gLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdH0pO1xuXHRcdGZvbGRlck9yZGVyICs9IDEwMDA7XG5cblx0XHRsZXQgcmVxdWVzdE9yZGVyID0gMTAwMDtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGZvbGRlci5pdGVtKSB7XG5cdFx0XHRjb25zdCB5YW1sID0gcmVxdWVzdFRvTG9jYWxWaWV3WWFtbChjaGlsZCwgcmVxdWVzdE9yZGVyKTtcblx0XHRcdGlmICh5YW1sID09IG51bGwpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmaWxlTmFtZSA9IGAke3Nhbml0aXplRmlsZU5hbWUoY2hpbGQubmFtZSA/PyBcIlJlcXVlc3RcIil9LnJlcXVlc3QueWFtbGA7XG5cdFx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9LyR7Zm9sZGVyTmFtZX0vJHtmaWxlTmFtZX1gLFxuXHRcdFx0XHRjb250ZW50OiB5YW1sLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXF1ZXN0T3JkZXIgKz0gMTAwMDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsZXM7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RUb0xvY2FsVmlld1lhbWwoaXRlbTogUG9zdG1hbkl0ZW0sIG9yZGVyOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3QgcmVxdWVzdCA9IGl0ZW0ucmVxdWVzdDtcblx0aWYgKHJlcXVlc3QgPT0gbnVsbCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG1ldGhvZCA9IChyZXF1ZXN0Lm1ldGhvZCA/PyBcIkdFVFwiKS50b1VwcGVyQ2FzZSgpO1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0VXJsRm9yTG9jYWxWaWV3KHJlcXVlc3QpO1xuXHRjb25zdCBsaW5lcyA9IFtcblx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRgbmFtZTogJHt5YW1sUXVvdGUoaXRlbS5uYW1lID8/IG1ldGhvZCl9YCxcblx0XHRgbWV0aG9kOiAke21ldGhvZH1gLFxuXHRcdGB1cmw6ICR7eWFtbFF1b3RlKHVybCl9YCxcblx0XTtcblxuXHRpZiAocmVxdWVzdC5hdXRoPy50eXBlID09PSBcIm5vYXV0aFwiKSB7XG5cdFx0bGluZXMucHVzaChcImF1dGg6XCIsIFwiICB0eXBlOiBub2F1dGhcIik7XG5cdH1cblxuXHRjb25zdCBjb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVyPy5maW5kKFxuXHRcdChoKSA9PiBoLmtleS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiLFxuXHQpPy52YWx1ZTtcblx0Y29uc3QgcmF3Qm9keSA9IHJlcXVlc3QuYm9keT8ucmF3Py50cmltKCk7XG5cdGlmIChyYXdCb2R5KSB7XG5cdFx0bGluZXMucHVzaChcImhlYWRlcnM6XCIpO1xuXHRcdGxpbmVzLnB1c2goYCAgQ29udGVudC1UeXBlOiAke2NvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwifWApO1xuXHRcdGxpbmVzLnB1c2goXCJib2R5OlwiKTtcblx0XHRsaW5lcy5wdXNoKFwiICB0eXBlOiBqc29uXCIpO1xuXHRcdGxpbmVzLnB1c2goXCIgIGNvbnRlbnQ6IHwtXCIpO1xuXHRcdGZvciAoY29uc3QgYm9keUxpbmUgb2YgcmF3Qm9keS5zcGxpdChcIlxcblwiKSkge1xuXHRcdFx0bGluZXMucHVzaChgICAgICR7Ym9keUxpbmV9YCk7XG5cdFx0fVxuXHR9XG5cblx0bGluZXMucHVzaChgb3JkZXI6ICR7b3JkZXJ9YCwgXCJcIik7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0VXJsRm9yTG9jYWxWaWV3KHJlcXVlc3Q6IFBvc3RtYW5SZXF1ZXN0KTogc3RyaW5nIHtcblx0Y29uc3QgdXJsID0gcmVxdWVzdC51cmw7XG5cdGlmICh0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih1cmwpO1xuXHR9XG5cdGlmICh1cmw/LnJhdykge1xuXHRcdHJldHVybiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24odXJsLnJhdyk7XG5cdH1cblx0Y29uc3QgaG9zdCA9IHVybD8uaG9zdD8uWzBdID8/IFwie3tiYXNlVXJsfX1cIjtcblx0Y29uc3QgcGF0aCA9ICh1cmw/LnBhdGggPz8gW10pXG5cdFx0Lm1hcCgoc2VnbWVudCkgPT4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKFN0cmluZyhzZWdtZW50KSkpXG5cdFx0LmpvaW4oXCIvXCIpO1xuXHRyZXR1cm4gcGF0aCA/IGAke2hvc3R9LyR7cGF0aH1gIDogaG9zdDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKC9bXlxcd1xccygpLV0rL2csIFwiXCIpLnRyaW0oKSB8fCBcIlJlcXVlc3RcIjtcbn1cbiJdLCJuYW1lcyI6WyJyYW5kb21VVUlEIiwib3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uIiwieWFtbFF1b3RlIiwidmFsdWUiLCJ0ZXN0IiwiaW5jbHVkZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiYnVpbGRFbnZpcm9ubWVudFlhbWwiLCJuYW1lIiwiYXV0aCIsIm9wdGlvbnMiLCJ2YWx1ZXMiLCJrZXkiLCJhdXRoMERvbWFpbiIsInB1c2giLCJhdXRoMEF1ZGllbmNlIiwiYXV0aDBDbGllbnRJZCIsImNhbGxiYWNrcyIsInNjb3BlcyIsImxpbmVzIiwidiIsImpvaW4iLCJidWlsZExvY2FsVmlld0ZpbGVzRnJvbUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwicHJvamVjdE5hbWUiLCJjb2xsZWN0aW9uRGlyIiwiZmlsZXMiLCJhdXRoQmxvY2siLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJmaWx0ZXIiLCJsIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsImZvbGRlck9yZGVyIiwiZm9sZGVyIiwiaXRlbSIsImZvbGRlck5hbWUiLCJyZXF1ZXN0T3JkZXIiLCJjaGlsZCIsInlhbWwiLCJyZXF1ZXN0VG9Mb2NhbFZpZXdZYW1sIiwiZmlsZU5hbWUiLCJzYW5pdGl6ZUZpbGVOYW1lIiwib3JkZXIiLCJyZXF1ZXN0IiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJ1cmwiLCJyZXF1ZXN0VXJsRm9yTG9jYWxWaWV3IiwidHlwZSIsImNvbnRlbnRUeXBlIiwiaGVhZGVyIiwiZmluZCIsImgiLCJ0b0xvd2VyQ2FzZSIsInJhd0JvZHkiLCJib2R5IiwicmF3IiwidHJpbSIsImJvZHlMaW5lIiwic3BsaXQiLCJob3N0IiwicGF0aCIsIm1hcCIsInNlZ21lbnQiLCJTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxjQUFjO0FBQ3pDLFNBRUNDLHdCQUF3QixRQUlsQiwwQkFBMEI7QUFFakMsU0FBU0MsVUFBVUMsS0FBYTtJQUMvQixJQUFJLHdCQUF3QkMsSUFBSSxDQUFDRCxVQUFVQSxNQUFNRSxRQUFRLENBQUMsU0FBU0YsVUFBVSxJQUFJO1FBQ2hGLE9BQU9HLEtBQUtDLFNBQVMsQ0FBQ0o7SUFDdkI7SUFDQSxPQUFPQTtBQUNSO0FBRUEsZ0RBQWdELEdBQ2hELE9BQU8sU0FBU0sscUJBQ2ZDLElBQVksRUFDWkMsSUFBMEIsRUFDMUJDLE9BQXlEO0lBRXpELE1BQU1DLFNBQWdEO1FBQ3JEO1lBQUVDLEtBQUs7WUFBV1YsT0FBTztRQUF3QjtLQUNqRDtJQUNELElBQUlPLE1BQU1JLGFBQWE7UUFDdEJGLE9BQU9HLElBQUksQ0FDVjtZQUFFRixLQUFLO1lBQWVWLE9BQU9PLEtBQUtJLFdBQVc7UUFBQyxHQUM5QztZQUFFRCxLQUFLO1lBQWlCVixPQUFPTyxLQUFLTSxhQUFhLElBQUk7UUFBRyxHQUN4RDtZQUFFSCxLQUFLO1lBQWlCVixPQUFPTyxLQUFLTyxhQUFhLElBQUk7UUFBRyxHQUN4RDtZQUNDSixLQUFLO1lBQ0xWLE9BQU8sQ0FBQyxRQUFRLEVBQUVPLEtBQUtJLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRUosS0FBS00sYUFBYSxJQUFJLElBQUk7UUFDcEYsR0FDQTtZQUNDSCxLQUFLO1lBQ0xWLE9BQU8sQ0FBQyxRQUFRLEVBQUVPLEtBQUtJLFdBQVcsQ0FBQyxZQUFZLENBQUM7UUFDakQsR0FDQTtZQUFFRCxLQUFLO1lBQWVWLE9BQU9RLFFBQVFPLFNBQVMsQ0FBQyxFQUFFO1FBQUMsR0FDbEQ7WUFBRUwsS0FBSztZQUFTVixPQUFPUSxRQUFRUSxNQUFNO1FBQUM7SUFFeEM7SUFFQSxNQUFNQyxRQUFRO1FB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
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import converter from "openapi-to-postmanv2";
|
|
2
|
+
function convertAsync(data, options) {
|
|
3
|
+
return new Promise((resolve, reject)=>{
|
|
4
|
+
converter.convert({
|
|
5
|
+
type: "json",
|
|
6
|
+
data
|
|
7
|
+
}, options, (err, result)=>{
|
|
8
|
+
if (err) {
|
|
9
|
+
reject(err);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
resolve(result);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Convert an OpenAPI document to a Postman Collection v2.1 via openapi-to-postmanv2. */ export async function openApiToPostmanCollection(document) {
|
|
17
|
+
const result = await convertAsync(document, {
|
|
18
|
+
folderStrategy: "Tags",
|
|
19
|
+
requestNameSource: "Fallback",
|
|
20
|
+
includeAuthInfoInExample: false
|
|
21
|
+
});
|
|
22
|
+
if (!result.result || result.output?.[0]?.data == null) {
|
|
23
|
+
throw new Error(result.reason ?? "openapi-to-postmanv2 conversion failed");
|
|
24
|
+
}
|
|
25
|
+
return result.output[0].data;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Overlay Auth0 OAuth2 (PKCE) collection auth and fix Local View-friendly URLs.
|
|
29
|
+
* Route items come from OpenAPI; auth/env remain hand-authored.
|
|
30
|
+
*/ export function applyPostmanAuthOverlay(collection, projectName, auth, options) {
|
|
31
|
+
const next = {
|
|
32
|
+
...collection,
|
|
33
|
+
info: {
|
|
34
|
+
...collection.info,
|
|
35
|
+
name: `${projectName} WebAPI`,
|
|
36
|
+
description: options.description,
|
|
37
|
+
schema: collection.info.schema ?? "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
if (auth?.auth0Domain) {
|
|
41
|
+
next.auth = {
|
|
42
|
+
type: "oauth2",
|
|
43
|
+
oauth2: [
|
|
44
|
+
{
|
|
45
|
+
key: "grant_type",
|
|
46
|
+
value: "authorization_code_with_pkce",
|
|
47
|
+
type: "string"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: "authUrl",
|
|
51
|
+
value: "https://{{auth0Domain}}/authorize?audience={{auth0Audience}}",
|
|
52
|
+
type: "string"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: "accessTokenUrl",
|
|
56
|
+
value: "https://{{auth0Domain}}/oauth/token",
|
|
57
|
+
type: "string"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
key: "clientId",
|
|
61
|
+
value: "{{auth0ClientId}}",
|
|
62
|
+
type: "string"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: "scope",
|
|
66
|
+
value: options.scopes,
|
|
67
|
+
type: "string"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: "redirect_uri",
|
|
71
|
+
value: options.callbacks[0],
|
|
72
|
+
type: "string"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
key: "useBrowser",
|
|
76
|
+
value: "true",
|
|
77
|
+
type: "boolean"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: "addTokenTo",
|
|
81
|
+
value: "header",
|
|
82
|
+
type: "string"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
key: "challengeAlgorithm",
|
|
86
|
+
value: "S256",
|
|
87
|
+
type: "string"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
key: "client_authentication",
|
|
91
|
+
value: "body",
|
|
92
|
+
type: "string"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: "clientSecret",
|
|
96
|
+
value: "",
|
|
97
|
+
type: "string"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
key: "tokenName",
|
|
101
|
+
value: `${projectName} Access Token`,
|
|
102
|
+
type: "string"
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
next.item = rewriteCollectionItems(collection.item ?? [], {
|
|
108
|
+
markListAnonymous: true
|
|
109
|
+
});
|
|
110
|
+
return next;
|
|
111
|
+
}
|
|
112
|
+
function rewriteCollectionItems(items, opts) {
|
|
113
|
+
return items.map((item)=>{
|
|
114
|
+
if (item.item != null) {
|
|
115
|
+
return {
|
|
116
|
+
...item,
|
|
117
|
+
item: rewriteCollectionItems(item.item, opts)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const request = item.request;
|
|
121
|
+
if (request == null) {
|
|
122
|
+
return item;
|
|
123
|
+
}
|
|
124
|
+
const method = (request.method ?? "GET").toUpperCase();
|
|
125
|
+
const rawUrl = requestUrlRaw(request);
|
|
126
|
+
const nextRequest = {
|
|
127
|
+
...request,
|
|
128
|
+
url: toPostmanUrl(rawUrl)
|
|
129
|
+
};
|
|
130
|
+
// List Hello stays anonymous (matches scaffold AllowAnonymous on GET /hello).
|
|
131
|
+
if (opts.markListAnonymous && method === "GET" && normalizePath(rawUrl) === "/hello" && !rawUrl.includes("/:")) {
|
|
132
|
+
nextRequest.auth = {
|
|
133
|
+
type: "noauth"
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
...item,
|
|
138
|
+
request: nextRequest
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function requestUrlRaw(request) {
|
|
143
|
+
const url = request.url;
|
|
144
|
+
if (typeof url === "string") {
|
|
145
|
+
return url;
|
|
146
|
+
}
|
|
147
|
+
if (url?.raw) {
|
|
148
|
+
return url.raw;
|
|
149
|
+
}
|
|
150
|
+
const host = url?.host?.[0] ?? "{{baseUrl}}";
|
|
151
|
+
const path = (url?.path ?? []).join("/");
|
|
152
|
+
return path ? `${host}/${path}` : host;
|
|
153
|
+
}
|
|
154
|
+
/** OpenAPI `{id}` → Postman `:id`, without touching `{{variables}}`. */ export function openApiPathParamsToColon(url) {
|
|
155
|
+
return url.replace(/(?<!\{)\{([A-Za-z_][\w]*)\}(?!\})/g, ":$1");
|
|
156
|
+
}
|
|
157
|
+
function normalizePath(rawUrl) {
|
|
158
|
+
const withoutBase = rawUrl.replace(/\{\{baseUrl\}\}/g, "").split("?")[0] ?? "";
|
|
159
|
+
const withSlash = withoutBase.startsWith("/") ? withoutBase : `/${withoutBase}`;
|
|
160
|
+
return openApiPathParamsToColon(withSlash);
|
|
161
|
+
}
|
|
162
|
+
/** Prefer Postman template URL shape used by existing Local View / API uploads. */ function toPostmanUrl(rawUrl) {
|
|
163
|
+
let pathPart = rawUrl.replace(/\{\{baseUrl\}\}/g, "");
|
|
164
|
+
if (!pathPart.startsWith("/")) {
|
|
165
|
+
pathPart = `/${pathPart}`;
|
|
166
|
+
}
|
|
167
|
+
// openapi-to-postman uses {id}; Local View / prior collections use :id
|
|
168
|
+
pathPart = openApiPathParamsToColon(pathPart);
|
|
169
|
+
const segments = pathPart.split("/").filter(Boolean);
|
|
170
|
+
return {
|
|
171
|
+
raw: `{{baseUrl}}${pathPart}`,
|
|
172
|
+
host: [
|
|
173
|
+
"{{baseUrl}}"
|
|
174
|
+
],
|
|
175
|
+
path: segments
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vb3BlbmFwaS10by1wb3N0bWFuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb252ZXJ0ZXIgZnJvbSBcIm9wZW5hcGktdG8tcG9zdG1hbnYyXCI7XG5pbXBvcnQgdHlwZSB7IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50IH0gZnJvbSBcIi4vaGVsbG8tb3BlbmFwaS5qc1wiO1xuXG5leHBvcnQgdHlwZSBQb3N0bWFuQ29sbGVjdGlvbiA9IHtcblx0aW5mbzoge1xuXHRcdF9wb3N0bWFuX2lkPzogc3RyaW5nO1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHRzY2hlbWE6IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0fTtcblx0YXV0aD86IHVua25vd247XG5cdGl0ZW0/OiBQb3N0bWFuSXRlbVtdO1xuXHR2YXJpYWJsZT86IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBQb3N0bWFuSXRlbSA9IHtcblx0bmFtZT86IHN0cmluZztcblx0aXRlbT86IFBvc3RtYW5JdGVtW107XG5cdHJlcXVlc3Q/OiBQb3N0bWFuUmVxdWVzdDtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5SZXF1ZXN0ID0ge1xuXHRtZXRob2Q/OiBzdHJpbmc7XG5cdGhlYWRlcj86IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG5cdGJvZHk/OiB7IG1vZGU/OiBzdHJpbmc7IHJhdz86IHN0cmluZyB9O1xuXHR1cmw/OiBzdHJpbmcgfCB7IHJhdz86IHN0cmluZzsgaG9zdD86IHN0cmluZ1tdOyBwYXRoPzogc3RyaW5nW107IHZhcmlhYmxlPzogdW5rbm93bltdIH07XG5cdGF1dGg/OiB7IHR5cGU6IHN0cmluZzsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXV0aDBFbnYgPSB7XG5cdGF1dGgwRG9tYWluPzogc3RyaW5nO1xuXHRhdXRoMEF1ZGllbmNlPzogc3RyaW5nO1xuXHRhdXRoMENsaWVudElkPzogc3RyaW5nO1xufTtcblxudHlwZSBDb252ZXJ0UmVzdWx0ID0ge1xuXHRyZXN1bHQ6IGJvb2xlYW47XG5cdHJlYXNvbj86IHN0cmluZztcblx0b3V0cHV0PzogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IGRhdGE6IFBvc3RtYW5Db2xsZWN0aW9uIH0+O1xufTtcblxuZnVuY3Rpb24gY29udmVydEFzeW5jKFxuXHRkYXRhOiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCxcblx0b3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBQcm9taXNlPENvbnZlcnRSZXN1bHQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb252ZXJ0ZXIuY29udmVydChcblx0XHRcdHsgdHlwZTogXCJqc29uXCIsIGRhdGEgfSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHQoZXJyOiBFcnJvciB8IG51bGwsIHJlc3VsdDogQ29udmVydFJlc3VsdCkgPT4ge1xuXHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdH0sXG5cdFx0KTtcblx0fSk7XG59XG5cbi8qKiBDb252ZXJ0IGFuIE9wZW5BUEkgZG9jdW1lbnQgdG8gYSBQb3N0bWFuIENvbGxlY3Rpb24gdjIuMSB2aWEgb3BlbmFwaS10by1wb3N0bWFudjIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFwaVRvUG9zdG1hbkNvbGxlY3Rpb24oXG5cdGRvY3VtZW50OiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCxcbik6IFByb21pc2U8UG9zdG1hbkNvbGxlY3Rpb24+IHtcblx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydEFzeW5jKGRvY3VtZW50LCB7XG5cdFx0Zm9sZGVyU3RyYXRlZ3k6IFwiVGFnc1wiLFxuXHRcdHJlcXVlc3ROYW1lU291cmNlOiBcIkZhbGxiYWNrXCIsXG5cdFx0aW5jbHVkZUF1dGhJbmZvSW5FeGFtcGxlOiBmYWxzZSxcblx0fSk7XG5cdGlmICghcmVzdWx0LnJlc3VsdCB8fCByZXN1bHQub3V0cHV0Py5bMF0/LmRhdGEgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihyZXN1bHQucmVhc29uID8/IFwib3BlbmFwaS10by1wb3N0bWFudjIgY29udmVyc2lvbiBmYWlsZWRcIik7XG5cdH1cblx0cmV0dXJuIHJlc3VsdC5vdXRwdXRbMF0uZGF0YTtcbn1cblxuLyoqXG4gKiBPdmVybGF5IEF1dGgwIE9BdXRoMiAoUEtDRSkgY29sbGVjdGlvbiBhdXRoIGFuZCBmaXggTG9jYWwgVmlldy1mcmllbmRseSBVUkxzLlxuICogUm91dGUgaXRlbXMgY29tZSBmcm9tIE9wZW5BUEk7IGF1dGgvZW52IHJlbWFpbiBoYW5kLWF1dGhvcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb3N0bWFuQXV0aE92ZXJsYXkoXG5cdGNvbGxlY3Rpb246IFBvc3RtYW5Db2xsZWN0aW9uLFxuXHRwcm9qZWN0TmFtZTogc3RyaW5nLFxuXHRhdXRoOiBBdXRoMEVudiB8IHVuZGVmaW5lZCxcblx0b3B0aW9uczoge1xuXHRcdGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0c2NvcGVzOiBzdHJpbmc7XG5cdFx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0fSxcbik6IFBvc3RtYW5Db2xsZWN0aW9uIHtcblx0Y29uc3QgbmV4dDogUG9zdG1hbkNvbGxlY3Rpb24gPSB7XG5cdFx0Li4uY29sbGVjdGlvbixcblx0XHRpbmZvOiB7XG5cdFx0XHQuLi5jb2xsZWN0aW9uLmluZm8sXG5cdFx0XHRuYW1lOiBgJHtwcm9qZWN0TmFtZX0gV2ViQVBJYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuXHRcdFx0c2NoZW1hOlxuXHRcdFx0XHRjb2xsZWN0aW9uLmluZm8uc2NoZW1hID8/XG5cdFx0XHRcdFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHR9LFxuXHR9O1xuXG5cdGlmIChhdXRoPy5hdXRoMERvbWFpbikge1xuXHRcdG5leHQuYXV0aCA9IHtcblx0XHRcdHR5cGU6IFwib2F1dGgyXCIsXG5cdFx0XHRvYXV0aDI6IFtcblx0XHRcdFx0eyBrZXk6IFwiZ3JhbnRfdHlwZVwiLCB2YWx1ZTogXCJhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vYXV0aG9yaXplP2F1ZGllbmNlPXt7YXV0aDBBdWRpZW5jZX19XCIsXG5cdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogXCJhY2Nlc3NUb2tlblVybFwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImh0dHBzOi8ve3thdXRoMERvbWFpbn19L29hdXRoL3Rva2VuXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50SWRcIiwgdmFsdWU6IFwie3thdXRoMENsaWVudElkfX1cIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogb3B0aW9ucy5zY29wZXMsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwicmVkaXJlY3RfdXJpXCIsIHZhbHVlOiBvcHRpb25zLmNhbGxiYWNrc1swXSwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJ1c2VCcm93c2VyXCIsIHZhbHVlOiBcInRydWVcIiwgdHlwZTogXCJib29sZWFuXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiYWRkVG9rZW5Ub1wiLCB2YWx1ZTogXCJoZWFkZXJcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJjaGFsbGVuZ2VBbGdvcml0aG1cIiwgdmFsdWU6IFwiUzI1NlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcImNsaWVudF9hdXRoZW50aWNhdGlvblwiLCB2YWx1ZTogXCJib2R5XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50U2VjcmV0XCIsIHZhbHVlOiBcIlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInRva2VuTmFtZVwiLCB2YWx1ZTogYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmAsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdF0sXG5cdFx0fTtcblx0fVxuXG5cdG5leHQuaXRlbSA9IHJld3JpdGVDb2xsZWN0aW9uSXRlbXMoY29sbGVjdGlvbi5pdGVtID8/IFtdLCB7XG5cdFx0bWFya0xpc3RBbm9ueW1vdXM6IHRydWUsXG5cdH0pO1xuXHRyZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZUNvbGxlY3Rpb25JdGVtcyhcblx0aXRlbXM6IFBvc3RtYW5JdGVtW10sXG5cdG9wdHM6IHsgbWFya0xpc3RBbm9ueW1vdXM6IGJvb2xlYW4gfSxcbik6IFBvc3RtYW5JdGVtW10ge1xuXHRyZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG5cdFx0aWYgKGl0ZW0uaXRlbSAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4geyAuLi5pdGVtLCBpdGVtOiByZXdyaXRlQ29sbGVjdGlvbkl0ZW1zKGl0ZW0uaXRlbSwgb3B0cykgfTtcblx0XHR9XG5cdFx0Y29uc3QgcmVxdWVzdCA9IGl0ZW0ucmVxdWVzdDtcblx0XHRpZiAocmVxdWVzdCA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gaXRlbTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0aG9kID0gKHJlcXVlc3QubWV0aG9kID8/IFwiR0VUXCIpLnRvVXBwZXJDYXNlKCk7XG5cdFx0Y29uc3QgcmF3VXJsID0gcmVxdWVzdFVybFJhdyhyZXF1ZXN0KTtcblx0XHRjb25zdCBuZXh0UmVxdWVzdDogUG9zdG1hblJlcXVlc3QgPSB7XG5cdFx0XHQuLi5yZXF1ZXN0LFxuXHRcdFx0dXJsOiB0b1Bvc3RtYW5VcmwocmF3VXJsKSxcblx0XHR9O1xuXHRcdC8vIExpc3QgSGVsbG8gc3RheXMgYW5vbnltb3VzIChtYXRjaGVzIHNjYWZmb2xkIEFsbG93QW5vbnltb3VzIG9uIEdFVCAvaGVsbG8pLlxuXHRcdGlmIChcblx0XHRcdG9wdHMubWFya0xpc3RBbm9ueW1vdXMgJiZcblx0XHRcdG1ldGhvZCA9PT0gXCJHRVRcIiAmJlxuXHRcdFx0bm9ybWFsaXplUGF0aChyYXdVcmwpID09PSBcIi9oZWxsb1wiICYmXG5cdFx0XHQhcmF3VXJsLmluY2x1ZGVzKFwiLzpcIilcblx0XHQpIHtcblx0XHRcdG5leHRSZXF1ZXN0LmF1dGggPSB7IHR5cGU6IFwibm9hdXRoXCIgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHsgLi4uaXRlbSwgcmVxdWVzdDogbmV4dFJlcXVlc3QgfTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RVcmxSYXcocmVxdWVzdDogUG9zdG1hblJlcXVlc3QpOiBzdHJpbmcge1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0LnVybDtcblx0aWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gdXJsO1xuXHR9XG5cdGlmICh1cmw/LnJhdykge1xuXHRcdHJldHVybiB1cmwucmF3O1xuXHR9XG5cdGNvbnN0IGhvc3QgPSB1cmw/Lmhvc3Q/LlswXSA/PyBcInt7YmFzZVVybH19XCI7XG5cdGNvbnN0IHBhdGggPSAodXJsPy5wYXRoID8/IFtdKS5qb2luKFwiL1wiKTtcblx0cmV0dXJuIHBhdGggPyBgJHtob3N0fS8ke3BhdGh9YCA6IGhvc3Q7XG59XG5cbi8qKiBPcGVuQVBJIGB7aWR9YCDihpIgUG9zdG1hbiBgOmlkYCwgd2l0aG91dCB0b3VjaGluZyBge3t2YXJpYWJsZXN9fWAuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHVybDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKC8oPzwhXFx7KVxceyhbQS1aYS16X11bXFx3XSopXFx9KD8hXFx9KS9nLCBcIjokMVwiKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChyYXdVcmw6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHdpdGhvdXRCYXNlID0gcmF3VXJsLnJlcGxhY2UoL1xce1xce2Jhc2VVcmxcXH1cXH0vZywgXCJcIikuc3BsaXQoXCI/XCIpWzBdID8/IFwiXCI7XG5cdGNvbnN0IHdpdGhTbGFzaCA9IHdpdGhvdXRCYXNlLnN0YXJ0c1dpdGgoXCIvXCIpID8gd2l0aG91dEJhc2UgOiBgLyR7d2l0aG91dEJhc2V9YDtcblx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih3aXRoU2xhc2gpO1xufVxuXG4vKiogUHJlZmVyIFBvc3RtYW4gdGVtcGxhdGUgVVJMIHNoYXBlIHVzZWQgYnkgZXhpc3RpbmcgTG9jYWwgVmlldyAvIEFQSSB1cGxvYWRzLiAqL1xuZnVuY3Rpb24gdG9Qb3N0bWFuVXJsKHJhd1VybDogc3RyaW5nKTogUG9zdG1hblJlcXVlc3RbXCJ1cmxcIl0ge1xuXHRsZXQgcGF0aFBhcnQgPSByYXdVcmwucmVwbGFjZSgvXFx7XFx7YmFzZVVybFxcfVxcfS9nLCBcIlwiKTtcblx0aWYgKCFwYXRoUGFydC5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdHBhdGhQYXJ0ID0gYC8ke3BhdGhQYXJ0fWA7XG5cdH1cblx0Ly8gb3BlbmFwaS10by1wb3N0bWFuIHVzZXMge2lkfTsgTG9jYWwgVmlldyAvIHByaW9yIGNvbGxlY3Rpb25zIHVzZSA6aWRcblx0cGF0aFBhcnQgPSBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24ocGF0aFBhcnQpO1xuXHRjb25zdCBzZWdtZW50cyA9IHBhdGhQYXJ0LnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cdHJldHVybiB7XG5cdFx0cmF3OiBge3tiYXNlVXJsfX0ke3BhdGhQYXJ0fWAsXG5cdFx0aG9zdDogW1wie3tiYXNlVXJsfX1cIl0sXG5cdFx0cGF0aDogc2VnbWVudHMsXG5cdH07XG59XG4iXSwibmFtZXMiOlsiY29udmVydGVyIiwiY29udmVydEFzeW5jIiwiZGF0YSIsIm9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvbnZlcnQiLCJ0eXBlIiwiZXJyIiwicmVzdWx0Iiwib3BlbkFwaVRvUG9zdG1hbkNvbGxlY3Rpb24iLCJkb2N1bWVudCIsImZvbGRlclN0cmF0ZWd5IiwicmVxdWVzdE5hbWVTb3VyY2UiLCJpbmNsdWRlQXV0aEluZm9JbkV4YW1wbGUiLCJvdXRwdXQiLCJFcnJvciIsInJlYXNvbiIsImFwcGx5UG9zdG1hbkF1dGhPdmVybGF5IiwiY29sbGVjdGlvbiIsInByb2plY3ROYW1lIiwiYXV0aCIsIm5leHQiLCJpbmZvIiwibmFtZSIsImRlc2NyaXB0aW9uIiwic2NoZW1hIiwiYXV0aDBEb21haW4iLCJvYXV0aDIiLCJrZXkiLCJ2YWx1ZSIsInNjb3BlcyIsImNhbGxiYWNrcyIsIml0ZW0iLCJyZXdyaXRlQ29sbGVjdGlvbkl0ZW1zIiwibWFya0xpc3RBbm9ueW1vdXMiLCJpdGVtcyIsIm9wdHMiLCJtYXAiLCJyZXF1ZXN0IiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJyYXdVcmwiLCJyZXF1ZXN0VXJsUmF3IiwibmV4dFJlcXVlc3QiLCJ1cmwiLCJ0b1Bvc3RtYW5VcmwiLCJub3JtYWxpemVQYXRoIiwiaW5jbHVkZXMiLCJyYXciLCJob3N0IiwicGF0aCIsImpvaW4iLCJvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24iLCJyZXBsYWNlIiwid2l0aG91dEJhc2UiLCJzcGxpdCIsIndpdGhTbGFzaCIsInN0YXJ0c1dpdGgiLCJwYXRoUGFydCIsInNlZ21lbnRzIiwiZmlsdGVyIiwiQm9vbGVhbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZUFBZSx1QkFBdUI7QUE0QzdDLFNBQVNDLGFBQ1JDLElBQTZCLEVBQzdCQyxPQUFnQztJQUVoQyxPQUFPLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7UUFDNUJOLFVBQVVPLE9BQU8sQ0FDaEI7WUFBRUMsTUFBTTtZQUFRTjtRQUFLLEdBQ3JCQyxTQUNBLENBQUNNLEtBQW1CQztZQUNuQixJQUFJRCxLQUFLO2dCQUNSSCxPQUFPRztnQkFDUDtZQUNEO1lBQ0FKLFFBQVFLO1FBQ1Q7SUFFRjtBQUNEO0FBRUEsdUZBQXVGLEdBQ3ZGLE9BQU8sZUFBZUMsMkJBQ3JCQyxRQUFpQztJQUVqQyxNQUFNRixTQUFTLE1BQU1ULGFBQWFXLFVBQVU7UUFDM0NDLGdCQUFnQjtRQUNoQkMsbUJBQW1CO1FBQ25CQywwQkFBMEI7SUFDM0I7SUFDQSxJQUFJLENBQUNMLE9BQU9BLE1BQU0sSUFBSUEsT0FBT00sTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFZCxRQUFRLE1BQU07UUFDdkQsTUFBTSxJQUFJZSxNQUFNUCxPQUFPUSxNQUFNLElBQUk7SUFDbEM7SUFDQSxPQUFPUixPQUFPTSxNQUFNLENBQUMsRUFBRSxDQUFDZCxJQUFJO0FBQzdCO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTaUIsd0JBQ2ZDLFVBQTZCLEVBQzdCQyxXQUFtQixFQUNuQkMsSUFBMEIsRUFDMUJuQixPQUlDO0lBRUQsTUFBTW9CLE9BQTBCO1FBQy9CLEdBQUdILFVBQVU7UUFDYkksTUFBTTtZQUNMLEdBQUdKLFdBQVdJLElBQUk7WUFDbEJDLE1BQU0sR0FBR0osWUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/create",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.38",
|
|
4
4
|
"description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"decohere",
|
|
@@ -21,8 +21,9 @@
|
|
|
21
21
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
25
|
-
"commander": "^13.1.0"
|
|
24
|
+
"@decohere/nexus": "0.0.1-dev.38",
|
|
25
|
+
"commander": "^13.1.0",
|
|
26
|
+
"openapi-to-postmanv2": "^5.0.0"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {},
|
|
28
29
|
"decohere": {
|
|
@@ -22,6 +22,8 @@ export interface ComposeService {
|
|
|
22
22
|
command?: string;
|
|
23
23
|
restart?: string;
|
|
24
24
|
depends_on?: string[];
|
|
25
|
+
/** Compose profiles (service only starts when profile is enabled). */
|
|
26
|
+
profiles?: string[];
|
|
25
27
|
/** Attach to compose networks (string name or map with aliases). */
|
|
26
28
|
networks?: ComposeNetworkRef[];
|
|
27
29
|
healthcheck?: ComposeHealthcheck;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Feature } from "../../services/scaffold.service.js";
|
|
2
|
+
import { type Auth0Env } from "../postman/openapi-to-postman.js";
|
|
2
3
|
/** Postman OAuth callback URLs (popup + "Authorize using browser"). */
|
|
3
4
|
declare const POSTMAN_CALLBACKS: readonly ["https://oauth.pstmn.io/v1/callback", "https://oauth.pstmn.io/v1/browser-callback"];
|
|
4
5
|
/** Scopes requested for Auth0 access tokens (OIDC + Hello CASL permissions). */
|
|
@@ -8,5 +9,8 @@ export type PostmanOptions = {
|
|
|
8
9
|
apiKey?: string;
|
|
9
10
|
workspaceId?: string;
|
|
10
11
|
};
|
|
12
|
+
/** Build Postman collection: OpenAPI routes + Auth0 auth overlay. */
|
|
13
|
+
export declare function buildHybridPostmanCollection(projectName: string, auth?: Auth0Env): Promise<import("../postman/openapi-to-postman.js").PostmanCollection>;
|
|
11
14
|
export declare const PostmanFeature: Feature<PostmanOptions>;
|
|
15
|
+
export { buildHelloOpenApiDocument } from "../postman/hello-openapi.js";
|
|
12
16
|
export { POSTMAN_CALLBACKS, POSTMAN_SCOPES };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Minimal OpenAPI 3 document shape used for Postman conversion. */
|
|
2
|
+
export type ScaffoldOpenApiDocument = {
|
|
3
|
+
openapi: "3.0.3";
|
|
4
|
+
info: {
|
|
5
|
+
title: string;
|
|
6
|
+
version: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
};
|
|
9
|
+
servers?: Array<{
|
|
10
|
+
url: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}>;
|
|
13
|
+
paths: Record<string, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Canonical Hello WebAPI OpenAPI document used to generate Postman requests.
|
|
17
|
+
* Keep paths aligned with scaffolded HelloController (`/hello`, `/hello/{id}`).
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildHelloOpenApiDocument(projectName: string): ScaffoldOpenApiDocument;
|